Merge pull request #10703 from pchote/explicitpackages

Unify filesystem package syntax.
This commit is contained in:
abcdefg30
2016-02-15 15:00:31 +01:00
15 changed files with 572 additions and 554 deletions

View File

@@ -21,6 +21,8 @@ namespace OpenRA.FileSystem
{
public IEnumerable<IReadOnlyPackage> MountedPackages { get { return mountedPackages.Keys; } }
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>());
public IReadWritePackage CreatePackage(string filename, Dictionary<string, byte[]> content)
@@ -54,7 +56,13 @@ namespace OpenRA.FileSystem
if (filename.EndsWith(".hdr", StringComparison.InvariantCultureIgnoreCase))
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)
@@ -67,23 +75,27 @@ namespace OpenRA.FileSystem
return new Folder(filename);
}
public void Mount(string name)
public void Mount(string name, string explicitName = null)
{
var optional = name.StartsWith("~");
if (optional)
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)
{
try { a(); }
catch { }
}
else
a();
}
public void Mount(IReadOnlyPackage package)
public void Mount(IReadOnlyPackage package, string explicitName = null)
{
var mountCount = 0;
if (mountedPackages.TryGetValue(package, out mountCount))
@@ -101,6 +113,10 @@ namespace OpenRA.FileSystem
{
// Mounting the package for the first time
mountedPackages.Add(package, 1);
if (explicitName != null)
explicitMounts.Add(explicitName, package);
foreach (var filename in package.Contents)
fileIndex[filename].Add(package);
}
@@ -118,6 +134,7 @@ namespace OpenRA.FileSystem
packagesForFile.RemoveAll(p => p == package);
mountedPackages.Remove(package);
explicitMounts.Remove(package.Name);
package.Dispose();
}
else
@@ -132,14 +149,15 @@ namespace OpenRA.FileSystem
package.Dispose();
mountedPackages.Clear();
explicitMounts.Clear();
fileIndex = new Cache<string, List<IReadOnlyPackage>>(_ => new List<IReadOnlyPackage>());
}
public void LoadFromManifest(Manifest manifest)
{
UnmountAll();
foreach (var pkg in manifest.Packages)
Mount(pkg);
foreach (var kv in manifest.Packages)
Mount(kv.Key, kv.Value);
}
Stream GetFromCache(string filename)
@@ -162,58 +180,64 @@ namespace OpenRA.FileSystem
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 packageName = string.Empty;
// 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 explicitSplit = path.IndexOf('|');
if (explicitSplit > 0 && explicitMounts.TryGetValue(path.Substring(0, explicitSplit), out package))
{
var divide = name.Split(':');
packageName = divide.First();
filename = divide.Last();
filename = path.Substring(explicitSplit + 1);
return true;
}
// Check the cache for a quick lookup if the package name is unknown
// TODO: This disables caching for explicit package requests
if (filename.IndexOfAny(new[] { '/', '\\' }) == -1 && !explicitPackage)
package = fileIndex[path].LastOrDefault(x => x.Contains(path));
filename = path;
return package != null;
}
public bool TryOpen(string filename, out Stream s)
{
var explicitSplit = filename.IndexOf('|');
if (explicitSplit > 0)
{
s = GetFromCache(filename);
if (s != null)
return true;
IReadOnlyPackage explicitPackage;
if (explicitMounts.TryGetValue(filename.Substring(0, explicitSplit), out explicitPackage))
{
s = explicitPackage.GetStream(filename.Substring(explicitSplit + 1));
if (s != null)
return true;
}
}
s = GetFromCache(filename);
if (s != null)
return true;
// Ask each package individually
IReadOnlyPackage package;
if (explicitPackage && !string.IsNullOrEmpty(packageName))
package = mountedPackages.Keys.LastOrDefault(x => x.Name == packageName);
else
package = mountedPackages.Keys.LastOrDefault(x => x.Contains(filename));
// TODO: This fallback can be removed once the filesystem cleanups are complete
var package = mountedPackages.Keys.LastOrDefault(x => x.Contains(filename));
if (package != null)
{
s = package.GetStream(filename);
return true;
return s != null;
}
s = null;
return false;
}
public bool Exists(string name)
public bool Exists(string filename)
{
var explicitPackage = name.Contains(':') && !Directory.Exists(Path.GetDirectoryName(name));
if (explicitPackage)
var explicitSplit = filename.IndexOf('|');
if (explicitSplit > 0)
{
var divide = name.Split(':');
var packageName = divide.First();
var filename = divide.Last();
return mountedPackages.Keys.Where(n => n.Name == packageName).Any(f => f.Contains(filename));
IReadOnlyPackage explicitPackage;
if (explicitMounts.TryGetValue(filename.Substring(0, explicitSplit), out explicitPackage))
if (explicitPackage.Contains(filename.Substring(explicitSplit + 1)))
return true;
}
else
return mountedPackages.Keys.Any(f => f.Contains(name));
return fileIndex.ContainsKey(filename);
}
}
}

View File

@@ -35,11 +35,12 @@ namespace OpenRA
{
public readonly ModMetadata Mod;
public readonly string[]
Packages, Rules, ServerTraits,
Rules, ServerTraits,
Sequences, VoxelSequences, Cursors, Chrome, Assemblies, ChromeLayout,
Weapons, Voices, Notifications, Music, Translations, TileSets,
ChromeMetrics, MapCompatibility, Missions;
public readonly IReadOnlyDictionary<string, string> Packages;
public readonly IReadOnlyDictionary<string, string> MapFolders;
public readonly MiniYaml LoadScreen;
public readonly MiniYaml LobbyDefaults;
@@ -69,23 +70,27 @@ namespace OpenRA
Mod.Id = modId;
// TODO: Use fieldloader
MapFolders = YamlDictionary(yaml, "MapFolders", true);
Packages = YamlList(yaml, "Packages", true);
Rules = YamlList(yaml, "Rules", true);
Sequences = YamlList(yaml, "Sequences", true);
VoxelSequences = YamlList(yaml, "VoxelSequences", true);
Cursors = YamlList(yaml, "Cursors", true);
Chrome = YamlList(yaml, "Chrome", true);
Assemblies = YamlList(yaml, "Assemblies", true);
ChromeLayout = YamlList(yaml, "ChromeLayout", true);
Weapons = YamlList(yaml, "Weapons", true);
Voices = YamlList(yaml, "Voices", true);
Notifications = YamlList(yaml, "Notifications", true);
Music = YamlList(yaml, "Music", true);
Translations = YamlList(yaml, "Translations", true);
TileSets = YamlList(yaml, "TileSets", true);
ChromeMetrics = YamlList(yaml, "ChromeMetrics", true);
Missions = YamlList(yaml, "Missions", true);
MapFolders = YamlDictionary(yaml, "MapFolders");
MiniYaml packages;
if (yaml.TryGetValue("Packages", out packages))
Packages = packages.ToDictionary(x => x.Value).AsReadOnly();
Rules = YamlList(yaml, "Rules");
Sequences = YamlList(yaml, "Sequences");
VoxelSequences = YamlList(yaml, "VoxelSequences");
Cursors = YamlList(yaml, "Cursors");
Chrome = YamlList(yaml, "Chrome");
Assemblies = YamlList(yaml, "Assemblies");
ChromeLayout = YamlList(yaml, "ChromeLayout");
Weapons = YamlList(yaml, "Weapons");
Voices = YamlList(yaml, "Voices");
Notifications = YamlList(yaml, "Notifications");
Music = YamlList(yaml, "Music");
Translations = YamlList(yaml, "Translations");
TileSets = YamlList(yaml, "TileSets");
ChromeMetrics = YamlList(yaml, "ChromeMetrics");
Missions = YamlList(yaml, "Missions");
ServerTraits = YamlList(yaml, "ServerTraits");
@@ -96,10 +101,10 @@ namespace OpenRA
throw new InvalidDataException("`LobbyDefaults` section is not defined.");
Fonts = yaml["Fonts"].ToDictionary(my =>
{
var nd = my.ToDictionary();
return Pair.New(nd["Font"].Value, Exts.ParseIntegerInvariant(nd["Size"].Value));
});
{
var nd = my.ToDictionary();
return Pair.New(nd["Font"].Value, Exts.ParseIntegerInvariant(nd["Size"].Value));
});
RequiresMods = yaml["RequiresMods"].ToDictionary(my => my.Value);
@@ -152,35 +157,15 @@ namespace OpenRA
if (!yaml.ContainsKey(key))
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();
}
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))
return new ReadOnlyDictionary<string, string>();
var inner = new Dictionary<string, string>();
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);
}
var inner = yaml[key].ToDictionary(my => my.Value);
return new ReadOnlyDictionary<string, string>(inner);
}

View File

@@ -16,6 +16,7 @@ using System.Linq;
using System.Net;
using System.Text;
using System.Threading;
using OpenRA.FileSystem;
using OpenRA.Graphics;
using OpenRA.Primitives;
@@ -45,7 +46,8 @@ namespace OpenRA
{
// Expand the dictionary (dir path, dir type) to a dictionary of (map path, dir type)
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)
{
@@ -111,7 +113,7 @@ namespace OpenRA
new Download(url, _ => { }, onInfoComplete);
}
public static IEnumerable<string> FindMapsIn(string dir)
public static IEnumerable<string> FindMapsIn(FileSystem.FileSystem context, string dir)
{
string[] noMaps = { };
@@ -119,9 +121,15 @@ namespace OpenRA
if (dir.StartsWith("~"))
dir = dir.Substring(1);
dir = Platform.ResolvePath(dir);
if (!Directory.Exists(dir))
// HACK: We currently only support maps loaded from Folders
// This is a temporary workaround that resolves the filesystem paths to a system directory
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;
var dirsWithMaps = Directory.GetDirectories(dir)

View File

@@ -100,14 +100,6 @@ namespace OpenRA
{
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
if (path.StartsWith("^"))
path = SupportDir + path.Substring(1);
@@ -119,16 +111,6 @@ namespace OpenRA
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>
public static string ResolvePath(params string[] path)
{

View File

@@ -12,6 +12,7 @@ using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using OpenRA.FileSystem;
using OpenRA.Widgets;
namespace OpenRA.Mods.Common.Widgets.Logic
@@ -29,6 +30,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
[ObjectCreator.UseCtor]
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");
title.Text = map.Title;
@@ -59,14 +61,18 @@ namespace OpenRA.Mods.Common.Widgets.Logic
Func<string, string> makeMapDirectory = dir =>
{
var f = Platform.UnresolvePath(dir);
if (f.StartsWith("~"))
f = f.Substring(1);
if (dir.StartsWith("~"))
dir = dir.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));
var directoryDropdown = widget.Get<DropDownButtonWidget>("DIRECTORY_DROPDOWN");
@@ -147,7 +153,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
if (playerDefinitions != null)
map.PlayerDefinitions = playerDefinitions;
map.RequiresMod = Game.ModData.Manifest.Mod.Id;
map.RequiresMod = modData.Manifest.Mod.Id;
// Create the map directory if required
Directory.CreateDirectory(Platform.ResolvePath(directoryDropdown.Text));
@@ -156,13 +162,13 @@ namespace OpenRA.Mods.Common.Widgets.Logic
// Invalidate the old map metadata
if (map.Uid != null && combinedPath == map.Path)
Game.ModData.MapCache[map.Uid].Invalidate();
modData.MapCache[map.Uid].Invalidate();
map.Save(combinedPath);
// Update the map cache so it can be loaded without restarting the game
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);
Ui.CloseWindow();

View File

@@ -10,7 +10,8 @@ RequiresMods:
Packages:
~^Content/cnc
.
./mods/cnc
$cnc: cnc
./mods/common: common
speech.mix
conquer.mix
sounds.mix
@@ -24,122 +25,122 @@ Packages:
~scores.mix
~scores2.mix
~transit.mix
./mods/cnc/bits/snow.mix
./mods/cnc/bits
./mods/cnc/bits/jungle
./mods/cnc/bits/desert
./mods/cnc/bits/ss
./mods/cnc/uibits
cnc|bits/snow.mix
cnc|bits
cnc|bits/jungle
cnc|bits/desert
cnc|bits/ss
cnc|uibits
MapFolders:
./mods/cnc/maps@System
~^maps/cnc/{DEV_VERSION}@User
cnc|maps: System
~^maps/cnc/{DEV_VERSION}: User
Rules:
./mods/cnc/rules/misc.yaml
./mods/cnc/rules/ai.yaml
./mods/cnc/rules/player.yaml
./mods/cnc/rules/world.yaml
./mods/cnc/rules/palettes.yaml
./mods/cnc/rules/defaults.yaml
./mods/cnc/rules/structures.yaml
./mods/cnc/rules/infantry.yaml
./mods/cnc/rules/vehicles.yaml
./mods/cnc/rules/trees.yaml
./mods/cnc/rules/civilian.yaml
./mods/cnc/rules/civilian-desert.yaml
./mods/cnc/rules/tech.yaml
./mods/cnc/rules/ships.yaml
./mods/cnc/rules/aircraft.yaml
./mods/cnc/rules/husks.yaml
cnc|rules/misc.yaml
cnc|rules/ai.yaml
cnc|rules/player.yaml
cnc|rules/world.yaml
cnc|rules/palettes.yaml
cnc|rules/defaults.yaml
cnc|rules/structures.yaml
cnc|rules/infantry.yaml
cnc|rules/vehicles.yaml
cnc|rules/trees.yaml
cnc|rules/civilian.yaml
cnc|rules/civilian-desert.yaml
cnc|rules/tech.yaml
cnc|rules/ships.yaml
cnc|rules/aircraft.yaml
cnc|rules/husks.yaml
Sequences:
./mods/cnc/sequences/structures.yaml
./mods/cnc/sequences/vehicles.yaml
./mods/cnc/sequences/infantry.yaml
./mods/cnc/sequences/aircraft.yaml
./mods/cnc/sequences/decorations.yaml
./mods/cnc/sequences/misc.yaml
./mods/cnc/sequences/funpark.yaml
./mods/cnc/sequences/civilian.yaml
./mods/cnc/sequences/campaign.yaml
cnc|sequences/structures.yaml
cnc|sequences/vehicles.yaml
cnc|sequences/infantry.yaml
cnc|sequences/aircraft.yaml
cnc|sequences/decorations.yaml
cnc|sequences/misc.yaml
cnc|sequences/funpark.yaml
cnc|sequences/civilian.yaml
cnc|sequences/campaign.yaml
TileSets:
./mods/cnc/tilesets/desert.yaml
./mods/cnc/tilesets/winter.yaml
./mods/cnc/tilesets/snow.yaml
./mods/cnc/tilesets/temperat.yaml
./mods/cnc/tilesets/jungle.yaml
cnc|tilesets/desert.yaml
cnc|tilesets/winter.yaml
cnc|tilesets/snow.yaml
cnc|tilesets/temperat.yaml
cnc|tilesets/jungle.yaml
Weapons:
./mods/cnc/weapons/explosions.yaml
./mods/cnc/weapons/largecaliber.yaml
./mods/cnc/weapons/missiles.yaml
./mods/cnc/weapons/other.yaml
./mods/cnc/weapons/smallcaliber.yaml
./mods/cnc/weapons/superweapons.yaml
cnc|weapons/explosions.yaml
cnc|weapons/largecaliber.yaml
cnc|weapons/missiles.yaml
cnc|weapons/other.yaml
cnc|weapons/smallcaliber.yaml
cnc|weapons/superweapons.yaml
Cursors:
./mods/cnc/cursors.yaml
cnc|cursors.yaml
Chrome:
./mods/cnc/chrome.yaml
cnc|chrome.yaml
Assemblies:
./mods/common/OpenRA.Mods.Common.dll
./mods/cnc/OpenRA.Mods.Cnc.dll
common|OpenRA.Mods.Common.dll
cnc|OpenRA.Mods.Cnc.dll
ChromeLayout:
./mods/cnc/chrome/mainmenu.yaml
./mods/cnc/chrome/multiplayer.yaml
./mods/cnc/chrome/multiplayer-browser.yaml
./mods/cnc/chrome/multiplayer-createserver.yaml
./mods/cnc/chrome/multiplayer-directconnect.yaml
./mods/cnc/chrome/multiplayer-globalchat.yaml
./mods/cnc/chrome/lobby.yaml
./mods/cnc/chrome/lobby-mappreview.yaml
./mods/cnc/chrome/lobby-players.yaml
./mods/cnc/chrome/lobby-options.yaml
./mods/cnc/chrome/lobby-music.yaml
./mods/cnc/chrome/lobby-kickdialogs.yaml
./mods/cnc/chrome/lobby-globalchat.yaml
./mods/cnc/chrome/connection.yaml
./mods/cnc/chrome/color-picker.yaml
./mods/cnc/chrome/mapchooser.yaml
./mods/cnc/chrome/replaybrowser.yaml
./mods/cnc/chrome/ingame.yaml
./mods/cnc/chrome/ingame-chat.yaml
./mods/cnc/chrome/ingame-menu.yaml
./mods/cnc/chrome/ingame-debug.yaml
./mods/cnc/chrome/ingame-info.yaml
./mods/cnc/chrome/ingame-infobriefing.yaml
./mods/cnc/chrome/ingame-infoscripterror.yaml
./mods/cnc/chrome/ingame-infoobjectives.yaml
./mods/cnc/chrome/ingame-infostats.yaml
./mods/cnc/chrome/ingame-observerstats.yaml
./mods/cnc/chrome/music.yaml
./mods/cnc/chrome/settings.yaml
./mods/cnc/chrome/credits.yaml
./mods/cnc/chrome/dialogs.yaml
./mods/cnc/chrome/tooltips.yaml
./mods/cnc/chrome/assetbrowser.yaml
./mods/cnc/chrome/missionbrowser.yaml
./mods/cnc/chrome/editor.yaml
cnc|chrome/mainmenu.yaml
cnc|chrome/multiplayer.yaml
cnc|chrome/multiplayer-browser.yaml
cnc|chrome/multiplayer-createserver.yaml
cnc|chrome/multiplayer-directconnect.yaml
cnc|chrome/multiplayer-globalchat.yaml
cnc|chrome/lobby.yaml
cnc|chrome/lobby-mappreview.yaml
cnc|chrome/lobby-players.yaml
cnc|chrome/lobby-options.yaml
cnc|chrome/lobby-music.yaml
cnc|chrome/lobby-kickdialogs.yaml
cnc|chrome/lobby-globalchat.yaml
cnc|chrome/connection.yaml
cnc|chrome/color-picker.yaml
cnc|chrome/mapchooser.yaml
cnc|chrome/replaybrowser.yaml
cnc|chrome/ingame.yaml
cnc|chrome/ingame-chat.yaml
cnc|chrome/ingame-menu.yaml
cnc|chrome/ingame-debug.yaml
cnc|chrome/ingame-info.yaml
cnc|chrome/ingame-infobriefing.yaml
cnc|chrome/ingame-infoscripterror.yaml
cnc|chrome/ingame-infoobjectives.yaml
cnc|chrome/ingame-infostats.yaml
cnc|chrome/ingame-observerstats.yaml
cnc|chrome/music.yaml
cnc|chrome/settings.yaml
cnc|chrome/credits.yaml
cnc|chrome/dialogs.yaml
cnc|chrome/tooltips.yaml
cnc|chrome/assetbrowser.yaml
cnc|chrome/missionbrowser.yaml
cnc|chrome/editor.yaml
Voices:
./mods/cnc/audio/voices.yaml
cnc|audio/voices.yaml
Notifications:
./mods/cnc/audio/notifications.yaml
cnc|audio/notifications.yaml
Music:
./mods/cnc/audio/music.yaml
cnc|audio/music.yaml
Translations:
./mods/cnc/languages/english.yaml
cnc|languages/english.yaml
LoadScreen: CncLoadScreen
Image: ./mods/cnc/uibits/chrome.png
Image: cnc|uibits/chrome.png
Text: Loading
ContentInstaller:
@@ -171,33 +172,33 @@ LobbyDefaults:
TechLevel: Unrestricted
ChromeMetrics:
./mods/common/metrics.yaml
./mods/cnc/metrics.yaml
common|metrics.yaml
cnc|metrics.yaml
Fonts:
Small:
Font:./mods/common/FreeSans.ttf
Font: common|FreeSans.ttf
Size:12
Regular:
Font:./mods/common/FreeSans.ttf
Font: common|FreeSans.ttf
Size:14
Bold:
Font:./mods/common/FreeSansBold.ttf
Font: common|FreeSansBold.ttf
Size:14
Title:
Font:./mods/common/FreeSansBold.ttf
Font: common|FreeSansBold.ttf
Size:32
MediumBold:
Font:./mods/common/FreeSansBold.ttf
Font: common|FreeSansBold.ttf
Size:18
BigBold:
Font:./mods/common/FreeSansBold.ttf
Font: common|FreeSansBold.ttf
Size:24
Tiny:
Font:./mods/common/FreeSans.ttf
Font: common|FreeSans.ttf
Size:10
TinyBold:
Font:./mods/common/FreeSansBold.ttf
Font: common|FreeSansBold.ttf
Size:10
Missions:

View File

@@ -13,120 +13,124 @@ Packages:
~^Content/d2k/Movies
~^Content/d2k/Music
.
d2k:
$d2k: d2k
$ra: ra
$cnc: cnc
./mods/common: common
SOUND.RS
d2k:bits
d2k:bits/tex
d2k:bits/xmas
d2k:uibits
d2k|bits
d2k|bits/tex
d2k|bits/xmas
d2k|uibits
MapFolders:
d2k:maps@System
~^maps/d2k/{DEV_VERSION}@User
d2k|maps: System
~^maps/d2k/{DEV_VERSION}: User
Rules:
d2k:rules/misc.yaml
d2k:rules/ai.yaml
d2k:rules/player.yaml
d2k:rules/world.yaml
d2k:rules/palettes.yaml
d2k:rules/defaults.yaml
d2k:rules/vehicles.yaml
d2k:rules/starport.yaml
d2k:rules/husks.yaml
d2k:rules/structures.yaml
d2k:rules/aircraft.yaml
d2k:rules/infantry.yaml
d2k:rules/arrakis.yaml
d2k|rules/misc.yaml
d2k|rules/ai.yaml
d2k|rules/player.yaml
d2k|rules/world.yaml
d2k|rules/palettes.yaml
d2k|rules/defaults.yaml
d2k|rules/vehicles.yaml
d2k|rules/starport.yaml
d2k|rules/husks.yaml
d2k|rules/structures.yaml
d2k|rules/aircraft.yaml
d2k|rules/infantry.yaml
d2k|rules/arrakis.yaml
Sequences:
d2k:sequences/aircraft.yaml
d2k:sequences/vehicles.yaml
d2k:sequences/infantry.yaml
d2k:sequences/structures.yaml
d2k:sequences/misc.yaml
d2k|sequences/aircraft.yaml
d2k|sequences/vehicles.yaml
d2k|sequences/infantry.yaml
d2k|sequences/structures.yaml
d2k|sequences/misc.yaml
TileSets:
d2k:tilesets/arrakis.yaml
d2k|tilesets/arrakis.yaml
MapGrid:
TileSize: 32,32
Type: Rectangular
Cursors:
d2k:cursors.yaml
d2k|cursors.yaml
Chrome:
d2k:chrome.yaml
d2k|chrome.yaml
Assemblies:
./mods/common/OpenRA.Mods.Common.dll
./mods/cnc/OpenRA.Mods.Cnc.dll
./mods/d2k/OpenRA.Mods.D2k.dll
common|OpenRA.Mods.Common.dll
cnc|OpenRA.Mods.Cnc.dll
d2k|OpenRA.Mods.D2k.dll
ChromeLayout:
d2k:chrome/ingame.yaml
./mods/ra/chrome/ingame-chat.yaml
./mods/ra/chrome/ingame-fmvplayer.yaml
d2k:chrome/ingame-menu.yaml
./mods/ra/chrome/ingame-info.yaml
./mods/ra/chrome/ingame-infoscripterror.yaml
./mods/ra/chrome/ingame-infobriefing.yaml
./mods/ra/chrome/ingame-infoobjectives.yaml
d2k:chrome/ingame-infostats.yaml
d2k:chrome/ingame-observer.yaml
./mods/ra/chrome/ingame-observerstats.yaml
d2k:chrome/ingame-player.yaml
./mods/ra/chrome/ingame-perf.yaml
./mods/ra/chrome/ingame-debug.yaml
d2k:chrome/mainmenu.yaml
./mods/ra/chrome/settings.yaml
./mods/ra/chrome/credits.yaml
./mods/ra/chrome/lobby.yaml
./mods/ra/chrome/lobby-mappreview.yaml
d2k:chrome/lobby-players.yaml
d2k:chrome/lobby-options.yaml
./mods/ra/chrome/lobby-music.yaml
./mods/ra/chrome/lobby-kickdialogs.yaml
./mods/ra/chrome/lobby-globalchat.yaml
d2k:chrome/color-picker.yaml
./mods/ra/chrome/map-chooser.yaml
./mods/ra/chrome/multiplayer.yaml
./mods/ra/chrome/multiplayer-browser.yaml
./mods/ra/chrome/multiplayer-createserver.yaml
./mods/ra/chrome/multiplayer-directconnect.yaml
./mods/ra/chrome/multiplayer-globalchat.yaml
./mods/ra/chrome/connection.yaml
d2k:chrome/dropdowns.yaml
./mods/ra/chrome/musicplayer.yaml
d2k:chrome/tooltips.yaml
./mods/ra/chrome/assetbrowser.yaml
d2k:chrome/missionbrowser.yaml
./mods/ra/chrome/confirmation-dialogs.yaml
./mods/ra/chrome/editor.yaml
./mods/ra/chrome/replaybrowser.yaml
d2k|chrome/ingame.yaml
ra|chrome/ingame-chat.yaml
ra|chrome/ingame-fmvplayer.yaml
d2k|chrome/ingame-menu.yaml
ra|chrome/ingame-info.yaml
ra|chrome/ingame-infoscripterror.yaml
ra|chrome/ingame-infobriefing.yaml
ra|chrome/ingame-infoobjectives.yaml
d2k|chrome/ingame-infostats.yaml
d2k|chrome/ingame-observer.yaml
ra|chrome/ingame-observerstats.yaml
d2k|chrome/ingame-player.yaml
ra|chrome/ingame-perf.yaml
ra|chrome/ingame-debug.yaml
d2k|chrome/mainmenu.yaml
ra|chrome/settings.yaml
ra|chrome/credits.yaml
ra|chrome/lobby.yaml
ra|chrome/lobby-mappreview.yaml
d2k|chrome/lobby-players.yaml
d2k|chrome/lobby-options.yaml
ra|chrome/lobby-music.yaml
ra|chrome/lobby-kickdialogs.yaml
ra|chrome/lobby-globalchat.yaml
d2k|chrome/color-picker.yaml
ra|chrome/map-chooser.yaml
ra|chrome/multiplayer.yaml
ra|chrome/multiplayer-browser.yaml
ra|chrome/multiplayer-createserver.yaml
ra|chrome/multiplayer-directconnect.yaml
ra|chrome/multiplayer-globalchat.yaml
ra|chrome/connection.yaml
d2k|chrome/dropdowns.yaml
ra|chrome/musicplayer.yaml
d2k|chrome/tooltips.yaml
ra|chrome/assetbrowser.yaml
d2k|chrome/missionbrowser.yaml
ra|chrome/confirmation-dialogs.yaml
ra|chrome/editor.yaml
ra|chrome/replaybrowser.yaml
Weapons:
d2k:weapons/debris.yaml
d2k:weapons/smallguns.yaml
d2k:weapons/largeguns.yaml
d2k:weapons/missiles.yaml
d2k:weapons/other.yaml
d2k|weapons/debris.yaml
d2k|weapons/smallguns.yaml
d2k|weapons/largeguns.yaml
d2k|weapons/missiles.yaml
d2k|weapons/other.yaml
Voices:
d2k:audio/voices.yaml
d2k|audio/voices.yaml
Notifications:
d2k:audio/notifications.yaml
d2k|audio/notifications.yaml
Music:
d2k:audio/music.yaml
d2k|audio/music.yaml
Translations:
d2k:languages/english.yaml
d2k|languages/english.yaml
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...
ContentInstaller:
@@ -161,37 +165,37 @@ LobbyDefaults:
TechLevel: Unrestricted
ChromeMetrics:
./mods/common/metrics.yaml
d2k:metrics.yaml
common|metrics.yaml
d2k|metrics.yaml
Fonts:
Regular:
Font:./mods/common/FreeSans.ttf
Font: common|FreeSans.ttf
Size:14
Bold:
Font:./mods/common/FreeSansBold.ttf
Font: common|FreeSansBold.ttf
Size:14
Title:
Font:./mods/d2k/Dune2k.ttf
Font: d2k|Dune2k.ttf
Size:32
MediumBold:
Font:./mods/common/FreeSansBold.ttf
Font: common|FreeSansBold.ttf
Size:18
BigBold:
Font:./mods/common/FreeSansBold.ttf
Font: common|FreeSansBold.ttf
Size:24
Small:
Font:./mods/common/FreeSans.ttf
Font: common|FreeSans.ttf
Size:12
Tiny:
Font:./mods/common/FreeSans.ttf
Font: common|FreeSans.ttf
Size:10
TinyBold:
Font:./mods/common/FreeSansBold.ttf
Font: common|FreeSansBold.ttf
Size:10
Missions:
d2k:missions.yaml
d2k|missions.yaml
SupportsMapsFrom: d2k

View File

@@ -8,48 +8,49 @@ RequiresMods:
Packages:
.
./mods/modchooser
./mods/modchooser: modchooser
./mods/common: common
Cursors:
./mods/modchooser/cursors.yaml
modchooser|cursors.yaml
Chrome:
./mods/modchooser/chrome.yaml
modchooser|chrome.yaml
Assemblies:
./mods/common/OpenRA.Mods.Common.dll
common|OpenRA.Mods.Common.dll
ChromeLayout:
./mods/modchooser/modchooser.yaml
./mods/modchooser/install.yaml
modchooser|modchooser.yaml
modchooser|install.yaml
Notifications:
./mods/modchooser/notifications.yaml
modchooser|notifications.yaml
LoadScreen: ModChooserLoadScreen
Image: ./mods/modchooser/chrome.png
ChromeMetrics:
./mods/modchooser/metrics.yaml
modchooser|metrics.yaml
Fonts:
Regular:
Font:./mods/common/FreeSans.ttf
Font: common|FreeSans.ttf
Size:14
Bold:
Font:./mods/common/FreeSansBold.ttf
Font: common|FreeSansBold.ttf
Size:14
BigBold:
Font:./mods/common/FreeSansBold.ttf
Font: common|FreeSansBold.ttf
Size:24
MediumBold:
Font:./mods/common/FreeSansBold.ttf
Font: common|FreeSansBold.ttf
Size:18
Tiny:
Font:./mods/common/FreeSans.ttf
Font: common|FreeSans.ttf
Size:10
TinyBold:
Font:./mods/common/FreeSansBold.ttf
Font: common|FreeSansBold.ttf
Size:10
LobbyDefaults:

View File

@@ -10,7 +10,9 @@ RequiresMods:
Packages:
~^Content/ra
.
./mods/ra
$ra: ra
$cnc: cnc
./mods/common: common
~main.mix
redalert.mix
conquer.mix
@@ -26,121 +28,121 @@ Packages:
~scores.mix
~movies1.mix
~movies2.mix
./mods/ra/bits
./mods/ra/bits/desert
./mods/ra/uibits
ra|bits
ra|bits/desert
ra|uibits
MapFolders:
./mods/ra/maps@System
~^maps/ra/{DEV_VERSION}@User
ra|maps: System
~^maps/ra/{DEV_VERSION}: User
Rules:
./mods/ra/rules/misc.yaml
./mods/ra/rules/ai.yaml
./mods/ra/rules/player.yaml
./mods/ra/rules/palettes.yaml
./mods/ra/rules/world.yaml
./mods/ra/rules/defaults.yaml
./mods/ra/rules/vehicles.yaml
./mods/ra/rules/husks.yaml
./mods/ra/rules/structures.yaml
./mods/ra/rules/infantry.yaml
./mods/ra/rules/civilian.yaml
./mods/ra/rules/decoration.yaml
./mods/ra/rules/aircraft.yaml
./mods/ra/rules/ships.yaml
./mods/ra/rules/fakes.yaml
ra|rules/misc.yaml
ra|rules/ai.yaml
ra|rules/player.yaml
ra|rules/palettes.yaml
ra|rules/world.yaml
ra|rules/defaults.yaml
ra|rules/vehicles.yaml
ra|rules/husks.yaml
ra|rules/structures.yaml
ra|rules/infantry.yaml
ra|rules/civilian.yaml
ra|rules/decoration.yaml
ra|rules/aircraft.yaml
ra|rules/ships.yaml
ra|rules/fakes.yaml
Sequences:
./mods/ra/sequences/ships.yaml
./mods/ra/sequences/vehicles.yaml
./mods/ra/sequences/structures.yaml
./mods/ra/sequences/infantry.yaml
./mods/ra/sequences/aircraft.yaml
./mods/ra/sequences/misc.yaml
./mods/ra/sequences/decorations.yaml
ra|sequences/ships.yaml
ra|sequences/vehicles.yaml
ra|sequences/structures.yaml
ra|sequences/infantry.yaml
ra|sequences/aircraft.yaml
ra|sequences/misc.yaml
ra|sequences/decorations.yaml
TileSets:
./mods/ra/tilesets/snow.yaml
./mods/ra/tilesets/interior.yaml
./mods/ra/tilesets/temperat.yaml
./mods/ra/tilesets/desert.yaml
ra|tilesets/snow.yaml
ra|tilesets/interior.yaml
ra|tilesets/temperat.yaml
ra|tilesets/desert.yaml
Cursors:
./mods/ra/cursors.yaml
ra|cursors.yaml
Chrome:
./mods/ra/chrome.yaml
ra|chrome.yaml
Assemblies:
./mods/common/OpenRA.Mods.Common.dll
./mods/ra/OpenRA.Mods.RA.dll
./mods/cnc/OpenRA.Mods.Cnc.dll
common|OpenRA.Mods.Common.dll
ra|OpenRA.Mods.RA.dll
cnc|OpenRA.Mods.Cnc.dll
ChromeLayout:
./mods/ra/chrome/ingame.yaml
./mods/ra/chrome/ingame-chat.yaml
./mods/ra/chrome/ingame-fmvplayer.yaml
./mods/ra/chrome/ingame-info.yaml
./mods/ra/chrome/ingame-infoscripterror.yaml
./mods/ra/chrome/ingame-infobriefing.yaml
./mods/ra/chrome/ingame-infoobjectives.yaml
./mods/ra/chrome/ingame-infostats.yaml
./mods/ra/chrome/ingame-menu.yaml
./mods/ra/chrome/ingame-observer.yaml
./mods/ra/chrome/ingame-observerstats.yaml
./mods/ra/chrome/ingame-player.yaml
./mods/ra/chrome/ingame-perf.yaml
./mods/ra/chrome/ingame-debug.yaml
./mods/ra/chrome/mainmenu.yaml
./mods/ra/chrome/settings.yaml
./mods/ra/chrome/credits.yaml
./mods/ra/chrome/lobby.yaml
./mods/ra/chrome/lobby-mappreview.yaml
./mods/ra/chrome/lobby-players.yaml
./mods/ra/chrome/lobby-options.yaml
./mods/ra/chrome/lobby-music.yaml
./mods/ra/chrome/lobby-kickdialogs.yaml
./mods/ra/chrome/lobby-globalchat.yaml
./mods/ra/chrome/color-picker.yaml
./mods/ra/chrome/map-chooser.yaml
./mods/ra/chrome/multiplayer.yaml
./mods/ra/chrome/multiplayer-browser.yaml
./mods/ra/chrome/multiplayer-createserver.yaml
./mods/ra/chrome/multiplayer-directconnect.yaml
./mods/ra/chrome/multiplayer-globalchat.yaml
./mods/ra/chrome/connection.yaml
./mods/ra/chrome/replaybrowser.yaml
./mods/ra/chrome/dropdowns.yaml
./mods/ra/chrome/musicplayer.yaml
./mods/ra/chrome/tooltips.yaml
./mods/ra/chrome/assetbrowser.yaml
./mods/ra/chrome/missionbrowser.yaml
./mods/ra/chrome/confirmation-dialogs.yaml
./mods/ra/chrome/editor.yaml
ra|chrome/ingame.yaml
ra|chrome/ingame-chat.yaml
ra|chrome/ingame-fmvplayer.yaml
ra|chrome/ingame-info.yaml
ra|chrome/ingame-infoscripterror.yaml
ra|chrome/ingame-infobriefing.yaml
ra|chrome/ingame-infoobjectives.yaml
ra|chrome/ingame-infostats.yaml
ra|chrome/ingame-menu.yaml
ra|chrome/ingame-observer.yaml
ra|chrome/ingame-observerstats.yaml
ra|chrome/ingame-player.yaml
ra|chrome/ingame-perf.yaml
ra|chrome/ingame-debug.yaml
ra|chrome/mainmenu.yaml
ra|chrome/settings.yaml
ra|chrome/credits.yaml
ra|chrome/lobby.yaml
ra|chrome/lobby-mappreview.yaml
ra|chrome/lobby-players.yaml
ra|chrome/lobby-options.yaml
ra|chrome/lobby-music.yaml
ra|chrome/lobby-kickdialogs.yaml
ra|chrome/lobby-globalchat.yaml
ra|chrome/color-picker.yaml
ra|chrome/map-chooser.yaml
ra|chrome/multiplayer.yaml
ra|chrome/multiplayer-browser.yaml
ra|chrome/multiplayer-createserver.yaml
ra|chrome/multiplayer-directconnect.yaml
ra|chrome/multiplayer-globalchat.yaml
ra|chrome/connection.yaml
ra|chrome/replaybrowser.yaml
ra|chrome/dropdowns.yaml
ra|chrome/musicplayer.yaml
ra|chrome/tooltips.yaml
ra|chrome/assetbrowser.yaml
ra|chrome/missionbrowser.yaml
ra|chrome/confirmation-dialogs.yaml
ra|chrome/editor.yaml
Weapons:
./mods/ra/weapons/explosions.yaml
./mods/ra/weapons/largecaliber.yaml
./mods/ra/weapons/missiles.yaml
./mods/ra/weapons/other.yaml
./mods/ra/weapons/smallcaliber.yaml
./mods/ra/weapons/superweapons.yaml
ra|weapons/explosions.yaml
ra|weapons/largecaliber.yaml
ra|weapons/missiles.yaml
ra|weapons/other.yaml
ra|weapons/smallcaliber.yaml
ra|weapons/superweapons.yaml
Voices:
./mods/ra/audio/voices.yaml
ra|audio/voices.yaml
Notifications:
./mods/ra/audio/notifications.yaml
ra|audio/notifications.yaml
Music:
./mods/ra/audio/music.yaml
ra|audio/music.yaml
Translations:
./mods/ra/languages/english.yaml
ra|languages/english.yaml
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...
ContentInstaller:
@@ -173,37 +175,37 @@ LobbyDefaults:
TechLevel: Unrestricted
ChromeMetrics:
./mods/common/metrics.yaml
./mods/ra/metrics.yaml
common|metrics.yaml
ra|metrics.yaml
Fonts:
Regular:
Font:./mods/common/FreeSans.ttf
Font: common|FreeSans.ttf
Size:14
Bold:
Font:./mods/common/FreeSansBold.ttf
Font: common|FreeSansBold.ttf
Size:14
Title:
Font:./mods/ra/ZoodRangmah.ttf
Font: ra|ZoodRangmah.ttf
Size:48
MediumBold:
Font:./mods/common/FreeSansBold.ttf
Font: common|FreeSansBold.ttf
Size:18
BigBold:
Font:./mods/common/FreeSansBold.ttf
Font: common|FreeSansBold.ttf
Size:24
Small:
Font:./mods/common/FreeSans.ttf
Font: common|FreeSans.ttf
Size:12
Tiny:
Font:./mods/common/FreeSans.ttf
Font: common|FreeSans.ttf
Size:10
TinyBold:
Font:./mods/common/FreeSansBold.ttf
Font: common|FreeSansBold.ttf
Size:10
Missions:
./mods/ra/missions.yaml
ra|missions.yaml
MapGrid:
TileSize: 24,24

View File

@@ -1,7 +1,7 @@
Speech:
Prefixes:
gdi: speech01.mix:
nod: speech02.mix:
gdi: speech-gdi|
nod: speech-nod|
Notifications:
AirUnitLost: 00-i074
AirstrikeReady: 00-n160

View File

@@ -10,7 +10,12 @@ RequiresMods:
Packages:
~^Content/ts
.
./mods/ts
$ts: ts
./mods/common: common
$ra: ra
$cnc: cnc
$d2k: d2k
# Tiberian Sun
~scores.mix
~sidenc01.mix
@@ -32,13 +37,13 @@ Packages:
isosnow.mix
isotemp.mix
local.mix
sidec01.mix
sidec02.mix
sidec01.mix: sidebar-gdi
sidec02.mix: sidebar-nod
sno.mix
snow.mix
sounds.mix
speech01.mix # EVA
speech02.mix # Cabal
speech01.mix: speech-gdi
speech02.mix: speech-nod
tem.mix
temperat.mix
# Firestorm
@@ -50,65 +55,65 @@ Packages:
~e01vox01.mix
~e01vox02.mix
~ecache01.mix
./mods/ts/bits
./mods/ts/uibits
ts|bits
ts|uibits
MapFolders:
./mods/ts/maps@System
~^maps/ts/{DEV_VERSION}@User
ts|maps: System
~^maps/ts/{DEV_VERSION}: User
Rules:
./mods/ts/rules/ai.yaml
./mods/ts/rules/misc.yaml
./mods/ts/rules/player.yaml
./mods/ts/rules/world.yaml
./mods/ts/rules/palettes.yaml
./mods/ts/rules/defaults.yaml
./mods/ts/rules/aircraft.yaml
./mods/ts/rules/husks.yaml
./mods/ts/rules/civilian-infantry.yaml
./mods/ts/rules/civilian-structures.yaml
./mods/ts/rules/civilian-vehicles.yaml
./mods/ts/rules/gdi-infantry.yaml
./mods/ts/rules/gdi-structures.yaml
./mods/ts/rules/gdi-support.yaml
./mods/ts/rules/gdi-vehicles.yaml
./mods/ts/rules/nod-infantry.yaml
./mods/ts/rules/nod-structures.yaml
./mods/ts/rules/nod-support.yaml
./mods/ts/rules/nod-vehicles.yaml
./mods/ts/rules/shared-infantry.yaml
./mods/ts/rules/shared-structures.yaml
./mods/ts/rules/shared-support.yaml
./mods/ts/rules/shared-vehicles.yaml
./mods/ts/rules/trees.yaml
ts|rules/ai.yaml
ts|rules/misc.yaml
ts|rules/player.yaml
ts|rules/world.yaml
ts|rules/palettes.yaml
ts|rules/defaults.yaml
ts|rules/aircraft.yaml
ts|rules/husks.yaml
ts|rules/civilian-infantry.yaml
ts|rules/civilian-structures.yaml
ts|rules/civilian-vehicles.yaml
ts|rules/gdi-infantry.yaml
ts|rules/gdi-structures.yaml
ts|rules/gdi-support.yaml
ts|rules/gdi-vehicles.yaml
ts|rules/nod-infantry.yaml
ts|rules/nod-structures.yaml
ts|rules/nod-support.yaml
ts|rules/nod-vehicles.yaml
ts|rules/shared-infantry.yaml
ts|rules/shared-structures.yaml
ts|rules/shared-support.yaml
ts|rules/shared-vehicles.yaml
ts|rules/trees.yaml
Weapons:
./mods/ts/weapons/bombsandgrenades.yaml
./mods/ts/weapons/energyweapons.yaml
./mods/ts/weapons/explosions.yaml
./mods/ts/weapons/healweapons.yaml
./mods/ts/weapons/largeguns.yaml
./mods/ts/weapons/missiles.yaml
./mods/ts/weapons/otherweapons.yaml
./mods/ts/weapons/smallguns.yaml
./mods/ts/weapons/superweapons.yaml
ts|weapons/bombsandgrenades.yaml
ts|weapons/energyweapons.yaml
ts|weapons/explosions.yaml
ts|weapons/healweapons.yaml
ts|weapons/largeguns.yaml
ts|weapons/missiles.yaml
ts|weapons/otherweapons.yaml
ts|weapons/smallguns.yaml
ts|weapons/superweapons.yaml
Sequences:
./mods/ts/sequences/aircraft.yaml
./mods/ts/sequences/infantry.yaml
./mods/ts/sequences/misc.yaml
./mods/ts/sequences/civilian.yaml
./mods/ts/sequences/structures.yaml
./mods/ts/sequences/vehicles.yaml
./mods/ts/sequences/trees.yaml
ts|sequences/aircraft.yaml
ts|sequences/infantry.yaml
ts|sequences/misc.yaml
ts|sequences/civilian.yaml
ts|sequences/structures.yaml
ts|sequences/vehicles.yaml
ts|sequences/trees.yaml
VoxelSequences:
./mods/ts/sequences/voxels.yaml
ts|sequences/voxels.yaml
TileSets:
./mods/ts/tilesets/temperate.yaml
./mods/ts/tilesets/snow.yaml
ts|tilesets/temperate.yaml
ts|tilesets/snow.yaml
MapGrid:
TileSize: 48,24
@@ -118,75 +123,75 @@ MapGrid:
SubCellDefaultIndex: 2
Cursors:
./mods/ts/cursors.yaml
ts|cursors.yaml
Chrome:
./mods/ts/chrome.yaml
ts|chrome.yaml
Assemblies:
./mods/common/OpenRA.Mods.Common.dll
./mods/ra/OpenRA.Mods.RA.dll
./mods/cnc/OpenRA.Mods.Cnc.dll
./mods/ts/OpenRA.Mods.TS.dll
common|OpenRA.Mods.Common.dll
ra|OpenRA.Mods.RA.dll
cnc|OpenRA.Mods.Cnc.dll
ts|OpenRA.Mods.TS.dll
ChromeLayout:
./mods/ra/chrome/ingame.yaml
./mods/ra/chrome/ingame-chat.yaml
./mods/ra/chrome/ingame-fmvplayer.yaml
./mods/ra/chrome/ingame-menu.yaml
./mods/ts/chrome/ingame-info.yaml
./mods/ra/chrome/ingame-infoscripterror.yaml
./mods/ra/chrome/ingame-infobriefing.yaml
./mods/ra/chrome/ingame-infoobjectives.yaml
./mods/ra/chrome/ingame-infostats.yaml
d2k:chrome/ingame-observer.yaml
./mods/ts/chrome/ingame-observerstats.yaml
./mods/ts/chrome/ingame-player.yaml
./mods/ra/chrome/ingame-perf.yaml
./mods/ts/chrome/ingame-debug.yaml
./mods/ra/chrome/mainmenu.yaml
./mods/ra/chrome/settings.yaml
./mods/ra/chrome/credits.yaml
./mods/ra/chrome/lobby.yaml
./mods/ra/chrome/lobby-mappreview.yaml
./mods/ra/chrome/lobby-players.yaml
./mods/ra/chrome/lobby-options.yaml
./mods/ra/chrome/lobby-music.yaml
./mods/ra/chrome/lobby-kickdialogs.yaml
./mods/ra/chrome/lobby-globalchat.yaml
./mods/ts/chrome/color-picker.yaml
./mods/ra/chrome/map-chooser.yaml
./mods/ra/chrome/multiplayer.yaml
./mods/ra/chrome/multiplayer-browser.yaml
./mods/ra/chrome/multiplayer-createserver.yaml
./mods/ra/chrome/multiplayer-directconnect.yaml
./mods/ra/chrome/multiplayer-globalchat.yaml
./mods/ra/chrome/connection.yaml
./mods/ra/chrome/replaybrowser.yaml
./mods/ts/chrome/dropdowns.yaml
./mods/ra/chrome/musicplayer.yaml
./mods/ra/chrome/tooltips.yaml
./mods/ra/chrome/assetbrowser.yaml
./mods/ra/chrome/missionbrowser.yaml
./mods/ra/chrome/confirmation-dialogs.yaml
./mods/ra/chrome/editor.yaml
ra|chrome/ingame.yaml
ra|chrome/ingame-chat.yaml
ra|chrome/ingame-fmvplayer.yaml
ra|chrome/ingame-menu.yaml
ts|chrome/ingame-info.yaml
ra|chrome/ingame-infoscripterror.yaml
ra|chrome/ingame-infobriefing.yaml
ra|chrome/ingame-infoobjectives.yaml
ra|chrome/ingame-infostats.yaml
d2k|chrome/ingame-observer.yaml
ts|chrome/ingame-observerstats.yaml
ts|chrome/ingame-player.yaml
ra|chrome/ingame-perf.yaml
ts|chrome/ingame-debug.yaml
ra|chrome/mainmenu.yaml
ra|chrome/settings.yaml
ra|chrome/credits.yaml
ra|chrome/lobby.yaml
ra|chrome/lobby-mappreview.yaml
ra|chrome/lobby-players.yaml
ra|chrome/lobby-options.yaml
ra|chrome/lobby-music.yaml
ra|chrome/lobby-kickdialogs.yaml
ra|chrome/lobby-globalchat.yaml
ts|chrome/color-picker.yaml
ra|chrome/map-chooser.yaml
ra|chrome/multiplayer.yaml
ra|chrome/multiplayer-browser.yaml
ra|chrome/multiplayer-createserver.yaml
ra|chrome/multiplayer-directconnect.yaml
ra|chrome/multiplayer-globalchat.yaml
ra|chrome/connection.yaml
ra|chrome/replaybrowser.yaml
ts|chrome/dropdowns.yaml
ra|chrome/musicplayer.yaml
ra|chrome/tooltips.yaml
ra|chrome/assetbrowser.yaml
ra|chrome/missionbrowser.yaml
ra|chrome/confirmation-dialogs.yaml
ra|chrome/editor.yaml
Voices:
./mods/ts/audio/voices.yaml
ts|audio/voices.yaml
Notifications:
./mods/ts/audio/speech-generic.yaml
./mods/ts/audio/speech-singleplayer.yaml
./mods/ts/audio/sounds-generic.yaml
ts|audio/speech-generic.yaml
ts|audio/speech-singleplayer.yaml
ts|audio/sounds-generic.yaml
Music:
./mods/ts/audio/music.yaml
ts|audio/music.yaml
Translations:
./mods/ts/languages/english.yaml
ts|languages/english.yaml
LoadScreen: LogoStripeLoadScreen
Image: ./mods/ts/uibits/loadscreen.png
Image: ts|uibits/loadscreen.png
Text: Updating EVA installation..., Changing perspective...
ContentInstaller:
@@ -218,33 +223,33 @@ LobbyDefaults:
Fog: true
ChromeMetrics:
./mods/common/metrics.yaml
./mods/ts/metrics.yaml
common|metrics.yaml
ts|metrics.yaml
Fonts:
Regular:
Font:./mods/common/FreeSans.ttf
Font: common|FreeSans.ttf
Size:14
Bold:
Font:./mods/common/FreeSansBold.ttf
Font: common|FreeSansBold.ttf
Size:14
Title:
Font:./mods/common/FreeSansBold.ttf
Font: common|FreeSansBold.ttf
Size:32
MediumBold:
Font:./mods/common/FreeSansBold.ttf
Font: common|FreeSansBold.ttf
Size:18
BigBold:
Font:./mods/common/FreeSansBold.ttf
Font: common|FreeSansBold.ttf
Size:24
Small:
Font:./mods/common/FreeSans.ttf
Font: common|FreeSans.ttf
Size:12
Tiny:
Font:./mods/common/FreeSans.ttf
Font: common|FreeSans.ttf
Size:10
TinyBold:
Font:./mods/common/FreeSansBold.ttf
Font: common|FreeSansBold.ttf
Size:10
SupportsMapsFrom: ts

View File

@@ -43,7 +43,7 @@
Filename: anim.pal
PaletteFromFile@sidebar:
Name: sidebar
Filename: sidec02.mix:sidebar.pal
Filename: sidebar-nod|sidebar.pal
PaletteFromPaletteWithAlpha@clock:
Name: iconclock
BasePalette: sidebar

View File

@@ -66,7 +66,7 @@ e1.gdi:
ShadowStart: 190
die6: electro
Length: *
icon: sidec01.mix:e1icon
icon: sidebar-gdi|e1icon
e1.nod:
Defaults: e1
@@ -136,7 +136,7 @@ e1.nod:
ShadowStart: 190
die6: electro
Length: *
icon: sidec02.mix:e1icon
icon: sidebar-nod|e1icon
e2:
Defaults:
@@ -477,7 +477,7 @@ engineer.gdi:
ShadowStart: 190
die6: electro
Length: *
icon: sidec01.mix:engnicon
icon: sidebar-gdi|engnicon
engineer.nod:
Defaults: engineer
@@ -539,7 +539,7 @@ engineer.nod:
ShadowStart: 190
die6: electro
Length: *
icon: sidec02.mix:engnicon
icon: sidebar-nod|engnicon
umagon:
Defaults:

View File

@@ -912,7 +912,7 @@ napuls.gdi:
UseTilesetCode: false
ZOffset: 512
BlendMode: Additive
icon: sidec01.mix:empicon
icon: sidebar-gdi|empicon
Offset: 0, 0
UseTilesetCode: false
@@ -940,7 +940,7 @@ napuls.nod:
UseTilesetCode: false
ZOffset: 512
BlendMode: Additive
icon: sidec02.mix:empicon
icon: sidebar-nod|empicon
Offset: 0, 0
UseTilesetCode: false
@@ -1190,7 +1190,7 @@ proc.gdi:
UseTilesetCode: false
ZOffset: 512
BlendMode: Additive
icon: sidec01.mix:reficon
icon: sidebar-gdi|reficon
Offset: 0, 0
UseTilesetCode: false
@@ -1232,7 +1232,7 @@ proc.nod:
UseTilesetCode: false
ZOffset: 512
BlendMode: Additive
icon: sidec02.mix:reficon
icon: sidebar-nod|reficon
Offset: 0, 0
UseTilesetCode: false
@@ -1323,7 +1323,7 @@ gasilo.gdi:
UseTilesetCode: false
ZOffset: 512
BlendMode: Additive
icon: sidec01.mix:siloicon
icon: sidebar-gdi|siloicon
Offset: 0, 0
UseTilesetCode: false
@@ -1367,7 +1367,7 @@ gasilo.nod:
UseTilesetCode: false
ZOffset: 512
BlendMode: Additive
icon: sidec02.mix:siloicon
icon: sidebar-nod|siloicon
Offset: 0, 0
UseTilesetCode: false
@@ -1431,7 +1431,7 @@ gadept.gdi:
UseTilesetCode: false
ZOffset: 512
BlendMode: Additive
icon: sidec01.mix:fixicon
icon: sidebar-gdi|fixicon
Offset: 0, 0
UseTilesetCode: false
@@ -1495,7 +1495,7 @@ gadept.nod:
UseTilesetCode: false
ZOffset: 512
BlendMode: Additive
icon: sidec02.mix:fixicon
icon: sidebar-nod|fixicon
Offset: 76, 66
UseTilesetCode: false

View File

@@ -2,13 +2,13 @@ mcv.gdi:
emp-overlay: emp_fx01
Length: *
BlendMode: Additive
icon: sidec01.mix:mcvicon
icon: sidebar-gdi|mcvicon
mcv.nod:
emp-overlay: emp_fx01
Length: *
BlendMode: Additive
icon: sidec02.mix:mcvicon
icon: sidebar-nod|mcvicon
apc:
emp-overlay: emp_fx01
@@ -22,7 +22,7 @@ harv.gdi:
BlendMode: Additive
harvest: harvestr
Length: *
icon: sidec01.mix:harvicon
icon: sidebar-gdi|harvicon
harv.nod:
emp-overlay: emp_fx01
@@ -30,7 +30,7 @@ harv.nod:
BlendMode: Additive
harvest: harvestr
Length: *
icon: sidec02.mix:harvicon
icon: sidebar-nod|harvicon
hvr:
emp-overlay: emp_fx01
@@ -56,7 +56,7 @@ lpst.gdi:
emp-overlay: emp_fx01
Length: *
BlendMode: Additive
icon: sidec01.mix:lpsticon
icon: sidebar-gdi|lpsticon
lpst.nod:
idle: gadpsa
@@ -69,7 +69,7 @@ lpst.nod:
emp-overlay: emp_fx01
Length: *
BlendMode: Additive
icon: sidec02.mix:lpsticon
icon: sidebar-nod|lpsticon
repair:
emp-overlay: emp_fx01