From b57be1cc08f68cbc5745575d88ae982c59e6041c Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Sat, 19 Oct 2024 12:32:56 +0100 Subject: [PATCH] Rework mod content installation. --- .../ContentInstallerFileSystemLoader.cs | 64 ++++++++ .../FileSystem/DefaultFileSystemLoader.cs | 28 +--- .../Lint/CheckFluentReferences.cs | 4 +- OpenRA.Mods.Common/Lint/CheckFluentSyntax.cs | 3 +- .../LoadScreens/ModContentLoadScreen.cs | 45 ------ OpenRA.Mods.Common/ModContent.cs | 20 +-- .../Installation/DownloadPackageLogic.cs | 2 +- .../Installation/InstallFromSourceLogic.cs | 12 +- .../Logic/Installation/ModContentLogic.cs | 85 ++++++----- .../Installation/ModContentPromptLogic.cs | 42 +----- .../Widgets/Logic/MainMenuLogic.cs | 17 +-- .../installer/covertops.yaml | 0 .../installer/downloads.yaml | 0 .../installer/firstdecade.yaml | 0 .../{cnc => cnc-content}/installer/gdi95.yaml | 0 .../{cnc => cnc-content}/installer/nod95.yaml | 0 .../installer/origin.yaml | 0 .../{cnc => cnc-content}/installer/steam.yaml | 0 .../languages/chrome}/en.ftl | 0 mods/cnc-content/mod.yaml | 118 +++++++++++++++ mods/cnc/mod.yaml | 82 +++------- .../chrome-2x.png | Bin .../chrome-3x.png | Bin .../{modcontent => common-content}/chrome.png | Bin .../chrome.yaml | 0 .../content.yaml | 18 ++- .../{modcontent => common-content}/cursor.png | Bin .../cursors.yaml | 0 .../languages/chrome/en.ftl | 0 .../languages/en.ftl | 0 .../metrics.yaml | 0 .../notifications.yaml | 0 .../{modcontent => common-content}/rules.yaml | 0 mods/{d2k => d2k-content}/installer/d2k.yaml | 0 .../installer/downloads.yaml | 0 .../installer/gruntmods.yaml | 0 .../languages/chrome}/en.ftl | 0 mods/d2k-content/mod.yaml | 111 ++++++++++++++ mods/d2k/mod.yaml | 59 ++------ mods/modcontent/mod.yaml | 75 ---------- .../installer/aftermath.yaml | 0 .../installer/allies95.yaml | 0 mods/{ra => ra-content}/installer/cnc95.yaml | 0 .../installer/counterstrike.yaml | 0 .../installer/downloads.yaml | 0 .../installer/firstdecade.yaml | 0 mods/{ra => ra-content}/installer/origin.yaml | 0 .../installer/soviet95.yaml | 0 mods/{ra => ra-content}/installer/steam.yaml | 0 .../languages/chrome}/en.ftl | 0 mods/ra-content/mod.yaml | 140 ++++++++++++++++++ mods/ra/mod.yaml | 138 +++++++---------- .../installer/downloads.yaml | 0 .../installer/firestorm.yaml | 0 .../installer/firstdecade.yaml | 0 mods/{ts => ts-content}/installer/origin.yaml | 0 mods/{ts => ts-content}/installer/steam.yaml | 0 mods/{ts => ts-content}/installer/tibsun.yaml | 0 .../languages/chrome}/en.ftl | 0 mods/ts-content/mod.yaml | 114 ++++++++++++++ mods/ts/mod.yaml | 105 ++++--------- 61 files changed, 744 insertions(+), 538 deletions(-) create mode 100644 OpenRA.Mods.Common/FileSystem/ContentInstallerFileSystemLoader.cs rename mods/{cnc => cnc-content}/installer/covertops.yaml (100%) rename mods/{cnc => cnc-content}/installer/downloads.yaml (100%) rename mods/{cnc => cnc-content}/installer/firstdecade.yaml (100%) rename mods/{cnc => cnc-content}/installer/gdi95.yaml (100%) rename mods/{cnc => cnc-content}/installer/nod95.yaml (100%) rename mods/{cnc => cnc-content}/installer/origin.yaml (100%) rename mods/{cnc => cnc-content}/installer/steam.yaml (100%) rename mods/{cnc/languages/modcontent => cnc-content/languages/chrome}/en.ftl (100%) create mode 100644 mods/cnc-content/mod.yaml rename mods/{modcontent => common-content}/chrome-2x.png (100%) rename mods/{modcontent => common-content}/chrome-3x.png (100%) rename mods/{modcontent => common-content}/chrome.png (100%) rename mods/{modcontent => common-content}/chrome.yaml (100%) rename mods/{modcontent => common-content}/content.yaml (98%) rename mods/{modcontent => common-content}/cursor.png (100%) rename mods/{modcontent => common-content}/cursors.yaml (100%) rename mods/{modcontent => common-content}/languages/chrome/en.ftl (100%) rename mods/{modcontent => common-content}/languages/en.ftl (100%) rename mods/{modcontent => common-content}/metrics.yaml (100%) rename mods/{modcontent => common-content}/notifications.yaml (100%) rename mods/{modcontent => common-content}/rules.yaml (100%) rename mods/{d2k => d2k-content}/installer/d2k.yaml (100%) rename mods/{d2k => d2k-content}/installer/downloads.yaml (100%) rename mods/{d2k => d2k-content}/installer/gruntmods.yaml (100%) rename mods/{d2k/languages/modcontent => d2k-content/languages/chrome}/en.ftl (100%) create mode 100644 mods/d2k-content/mod.yaml delete mode 100644 mods/modcontent/mod.yaml rename mods/{ra => ra-content}/installer/aftermath.yaml (100%) rename mods/{ra => ra-content}/installer/allies95.yaml (100%) rename mods/{ra => ra-content}/installer/cnc95.yaml (100%) rename mods/{ra => ra-content}/installer/counterstrike.yaml (100%) rename mods/{ra => ra-content}/installer/downloads.yaml (100%) rename mods/{ra => ra-content}/installer/firstdecade.yaml (100%) rename mods/{ra => ra-content}/installer/origin.yaml (100%) rename mods/{ra => ra-content}/installer/soviet95.yaml (100%) rename mods/{ra => ra-content}/installer/steam.yaml (100%) rename mods/{ra/languages/modcontent => ra-content/languages/chrome}/en.ftl (100%) create mode 100644 mods/ra-content/mod.yaml rename mods/{ts => ts-content}/installer/downloads.yaml (100%) rename mods/{ts => ts-content}/installer/firestorm.yaml (100%) rename mods/{ts => ts-content}/installer/firstdecade.yaml (100%) rename mods/{ts => ts-content}/installer/origin.yaml (100%) rename mods/{ts => ts-content}/installer/steam.yaml (100%) rename mods/{ts => ts-content}/installer/tibsun.yaml (100%) rename mods/{ts/languages/modcontent => ts-content/languages/chrome}/en.ftl (100%) create mode 100644 mods/ts-content/mod.yaml diff --git a/OpenRA.Mods.Common/FileSystem/ContentInstallerFileSystemLoader.cs b/OpenRA.Mods.Common/FileSystem/ContentInstallerFileSystemLoader.cs new file mode 100644 index 0000000000..c9c9310eeb --- /dev/null +++ b/OpenRA.Mods.Common/FileSystem/ContentInstallerFileSystemLoader.cs @@ -0,0 +1,64 @@ +#region Copyright & License Information +/* + * Copyright (c) The OpenRA Developers and Contributors + * This file is part of OpenRA, which is free software. It is made + * available to you under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. For more + * information, see COPYING. + */ +#endregion + +using System.Collections.Generic; + +namespace OpenRA.Mods.Common.FileSystem +{ + public class ContentInstallerFileSystemLoader : IFileSystemLoader, IFileSystemExternalContent + { + [FieldLoader.Require] + public readonly string ContentInstallerMod = null; + + [FieldLoader.Require] + public readonly Dictionary Packages = null; + + public readonly Dictionary ContentPackages = null; + + public readonly Dictionary ContentFiles = null; + + bool contentAvailable = true; + + public void Mount(OpenRA.FileSystem.FileSystem fileSystem, ObjectCreator objectCreator) + { + foreach (var kv in Packages) + fileSystem.Mount(kv.Key, kv.Value); + + if (ContentPackages != null) + { + foreach (var kv in ContentPackages) + { + try + { + fileSystem.Mount(kv.Key, kv.Value); + } + catch + { + contentAvailable = false; + } + } + } + + if (ContentFiles != null) + foreach (var kv in ContentFiles) + if (!fileSystem.Exists(kv.Key)) + contentAvailable = false; + } + + bool IFileSystemExternalContent.InstallContentIfRequired(ModData modData) + { + if (!contentAvailable) + Game.InitializeMod(ContentInstallerMod, new Arguments()); + + return !contentAvailable; + } + } +} diff --git a/OpenRA.Mods.Common/FileSystem/DefaultFileSystemLoader.cs b/OpenRA.Mods.Common/FileSystem/DefaultFileSystemLoader.cs index f20753b930..e4c1ed27db 100644 --- a/OpenRA.Mods.Common/FileSystem/DefaultFileSystemLoader.cs +++ b/OpenRA.Mods.Common/FileSystem/DefaultFileSystemLoader.cs @@ -10,8 +10,6 @@ #endregion using System.Collections.Generic; -using System.IO; -using System.Linq; using OpenRA.Traits; namespace OpenRA.Mods.Common.FileSystem @@ -22,7 +20,7 @@ namespace OpenRA.Mods.Common.FileSystem public bool InstallContentIfRequired(ModData modData); } - public class DefaultFileSystemLoader : IFileSystemLoader, IFileSystemExternalContent + public class DefaultFileSystemLoader : IFileSystemLoader { public readonly Dictionary Packages = null; @@ -32,29 +30,5 @@ namespace OpenRA.Mods.Common.FileSystem foreach (var kv in Packages) fileSystem.Mount(kv.Key, kv.Value); } - - bool IFileSystemExternalContent.InstallContentIfRequired(ModData modData) - { - // If a ModContent section is defined then we need to make sure that the - // required content is installed or switch to the defined content installer. - if (!modData.Manifest.Contains()) - return false; - - var content = modData.Manifest.Get(); - var contentInstalled = content.Packages - .Where(p => p.Value.Required) - .All(p => p.Value.TestFiles.All(f => File.Exists(Platform.ResolvePath(f)))); - - if (contentInstalled) - return false; - - string translationPath; - using (var fs = (FileStream)modData.DefaultFileSystem.Open(content.Translation)) - translationPath = fs.Name; - Game.InitializeMod( - content.ContentInstallerMod, - new Arguments(new[] { "Content.Mod=" + modData.Manifest.Id, "Content.TranslationFile=" + translationPath })); - return true; - } } } diff --git a/OpenRA.Mods.Common/Lint/CheckFluentReferences.cs b/OpenRA.Mods.Common/Lint/CheckFluentReferences.cs index 06de003b79..cfa729392a 100644 --- a/OpenRA.Mods.Common/Lint/CheckFluentReferences.cs +++ b/OpenRA.Mods.Common/Lint/CheckFluentReferences.cs @@ -44,7 +44,7 @@ namespace OpenRA.Mods.Common.Lint var mapTranslations = FieldLoader.GetValue("value", map.TranslationDefinitions.Value); - var allModTranslations = modData.Manifest.Translations.Append(modData.Manifest.Get().Translation).ToArray(); + var allModTranslations = modData.Manifest.Translations; foreach (var language in GetModLanguages(allModTranslations)) { // Check keys and variables are not missing across all language files. @@ -80,7 +80,7 @@ namespace OpenRA.Mods.Common.Lint foreach (var context in usedKeys.EmptyKeyContexts) emitWarning($"Empty key in mod translation files required by {context}"); - var allModTranslations = modData.Manifest.Translations.Append(modData.Manifest.Get().Translation).ToArray(); + var allModTranslations = modData.Manifest.Translations.ToArray(); foreach (var language in GetModLanguages(allModTranslations)) { Console.WriteLine($"Testing language: {language}"); diff --git a/OpenRA.Mods.Common/Lint/CheckFluentSyntax.cs b/OpenRA.Mods.Common/Lint/CheckFluentSyntax.cs index aa6360243b..d6e6356dab 100644 --- a/OpenRA.Mods.Common/Lint/CheckFluentSyntax.cs +++ b/OpenRA.Mods.Common/Lint/CheckFluentSyntax.cs @@ -30,8 +30,7 @@ namespace OpenRA.Mods.Common.Lint void ILintPass.Run(Action emitError, Action emitWarning, ModData modData) { - var allModTranslations = modData.Manifest.Translations.Append(modData.Manifest.Get().Translation); - Run(emitError, emitWarning, modData.DefaultFileSystem, allModTranslations); + Run(emitError, emitWarning, modData.DefaultFileSystem, modData.Manifest.Translations); } static void Run(Action emitError, Action emitWarning, IReadOnlyFileSystem fileSystem, IEnumerable paths) diff --git a/OpenRA.Mods.Common/LoadScreens/ModContentLoadScreen.cs b/OpenRA.Mods.Common/LoadScreens/ModContentLoadScreen.cs index 93ff7d4505..cf1eeddcc0 100644 --- a/OpenRA.Mods.Common/LoadScreens/ModContentLoadScreen.cs +++ b/OpenRA.Mods.Common/LoadScreens/ModContentLoadScreen.cs @@ -9,9 +9,6 @@ */ #endregion -using System; -using System.IO; -using System.Linq; using OpenRA.Graphics; using OpenRA.Mods.Common.Widgets; using OpenRA.Primitives; @@ -48,49 +45,7 @@ namespace OpenRA.Mods.Common.LoadScreens public override void StartGame(Arguments args) { - var modId = args.GetValue("Content.Mod", null); - if (modId == null || !Game.Mods.TryGetValue(modId, out var selectedMod)) - throw new InvalidOperationException("Invalid or missing Content.Mod argument."); - - var translationFilePath = args.GetValue("Content.TranslationFile", null); - if (translationFilePath == null || !File.Exists(translationFilePath)) - throw new InvalidOperationException("Invalid or missing Content.TranslationFile argument."); - - var content = selectedMod.Get(Game.ModData.ObjectCreator); - Ui.LoadWidget("MODCONTENT_BACKGROUND", Ui.Root, new WidgetArgs()); - - if (!IsModInstalled(content)) - { - var widgetArgs = new WidgetArgs - { - { "continueLoading", () => Game.RunAfterTick(() => Game.InitializeMod(modId, new Arguments())) }, - { "mod", selectedMod }, - { "content", content }, - { "translationFilePath", translationFilePath }, - }; - - Ui.OpenWindow("CONTENT_PROMPT_PANEL", widgetArgs); - } - else - { - var widgetArgs = new WidgetArgs - { - { "onCancel", () => Game.RunAfterTick(() => Game.InitializeMod(modId, new Arguments())) }, - { "mod", selectedMod }, - { "content", content }, - { "translationFilePath", translationFilePath }, - }; - - Ui.OpenWindow("CONTENT_PANEL", widgetArgs); - } - } - - static bool IsModInstalled(ModContent content) - { - return content.Packages - .Where(p => p.Value.Required) - .All(p => p.Value.TestFiles.All(f => File.Exists(Platform.ResolvePath(f)))); } public override bool BeforeLoad() diff --git a/OpenRA.Mods.Common/ModContent.cs b/OpenRA.Mods.Common/ModContent.cs index 4301153ed6..f10941fe44 100644 --- a/OpenRA.Mods.Common/ModContent.cs +++ b/OpenRA.Mods.Common/ModContent.cs @@ -15,7 +15,7 @@ using System.Collections.Immutable; using System.IO; using System.Linq; -namespace OpenRA +namespace OpenRA.Mods.Common { public class ModContent : IGlobalModData { @@ -42,8 +42,6 @@ namespace OpenRA public class ModSource { - public readonly ObjectCreator ObjectCreator; - [FieldLoader.Ignore] public readonly MiniYaml Type; @@ -62,9 +60,8 @@ namespace OpenRA public readonly string TooltipText; - public ModSource(MiniYaml yaml, ObjectCreator objectCreator) + public ModSource(MiniYaml yaml) { - ObjectCreator = objectCreator; Title = yaml.Value; var type = yaml.NodeWithKeyOrDefault("Type"); @@ -85,7 +82,6 @@ namespace OpenRA public class ModDownload { - public readonly ObjectCreator ObjectCreator; public readonly string Title; public readonly string URL; public readonly string MirrorList; @@ -93,21 +89,17 @@ namespace OpenRA public readonly string Type; public readonly Dictionary Extract; - public ModDownload(MiniYaml yaml, ObjectCreator objectCreator) + public ModDownload(MiniYaml yaml) { - ObjectCreator = objectCreator; Title = yaml.Value; FieldLoader.Load(this, yaml); } } - [FluentReference] - public readonly string InstallPromptMessage; public readonly string QuickDownload; - [FluentReference] - public readonly string HeaderMessage; - public readonly string ContentInstallerMod = "modcontent"; - public readonly string Translation; + + [FieldLoader.Require] + public readonly string Mod; [FieldLoader.LoadUsing(nameof(LoadPackages))] public readonly Dictionary Packages = new(); diff --git a/OpenRA.Mods.Common/Widgets/Logic/Installation/DownloadPackageLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/Installation/DownloadPackageLogic.cs index 3e41e6d380..06d2a70d4f 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/Installation/DownloadPackageLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/Installation/DownloadPackageLogic.cs @@ -235,7 +235,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic { using (var stream = File.OpenRead(file)) { - var packageLoader = download.ObjectCreator.CreateObject($"{download.Type}Loader"); + var packageLoader = modData.ObjectCreator.CreateObject($"{download.Type}Loader"); if (packageLoader.TryParsePackage(stream, file, modData.ModFiles, out var package)) { diff --git a/OpenRA.Mods.Common/Widgets/Logic/Installation/InstallFromSourceLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/Installation/InstallFromSourceLogic.cs index 2803698bcf..6b00a9eba3 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/Installation/InstallFromSourceLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/Installation/InstallFromSourceLogic.cs @@ -87,7 +87,6 @@ namespace OpenRA.Mods.Common.Widgets.Logic readonly ModData modData; readonly ModContent content; readonly Dictionary sources; - readonly FluentBundle externalFluentBundle; readonly Widget panel; readonly LabelWidget titleLabel; @@ -118,12 +117,11 @@ namespace OpenRA.Mods.Common.Widgets.Logic [ObjectCreator.UseCtor] public InstallFromSourceLogic( - Widget widget, ModData modData, ModContent content, Dictionary sources, FluentBundle externalFluentBundle) + Widget widget, ModData modData, ModContent content, Dictionary sources) { this.modData = modData; this.content = content; this.sources = sources; - this.externalFluentBundle = externalFluentBundle; Log.AddChannel("install", "install.log"); @@ -173,7 +171,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic { message = FluentProvider.GetString(SearchingSourceFor, "title", kv.Value.Title); - var sourceResolver = kv.Value.ObjectCreator.CreateObject($"{kv.Value.Type.Value}SourceResolver"); + var sourceResolver = modData.ObjectCreator.CreateObject($"{kv.Value.Type.Value}SourceResolver"); var path = sourceResolver.FindSourcePath(kv.Value); if (path != null) @@ -210,7 +208,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic foreach (var source in missingSources) { - var sourceResolver = source.ObjectCreator.CreateObject($"{source.Type.Value}SourceResolver"); + var sourceResolver = modData.ObjectCreator.CreateObject($"{source.Type.Value}SourceResolver"); var availability = sourceResolver.GetAvailability(); @@ -260,7 +258,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic var split = key.IndexOf('@'); if (split != -1) key = key[..split]; - var sourceAction = modSource.ObjectCreator.CreateObject($"{key}SourceAction"); + var sourceAction = modData.ObjectCreator.CreateObject($"{key}SourceAction"); sourceAction.RunActionOnSource(sourceActionNode.Value, path, modData, extracted, m => message = m); } } @@ -342,7 +340,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic { var containerWidget = (ContainerWidget)checkboxListTemplate.Clone(); var checkboxWidget = containerWidget.Get("PACKAGE_CHECKBOX"); - var title = externalFluentBundle.GetString(package.Title); + var title = FluentProvider.GetString(package.Title); checkboxWidget.GetText = () => title; checkboxWidget.IsDisabled = () => package.Required; checkboxWidget.IsChecked = () => selectedPackages[package.Identifier]; diff --git a/OpenRA.Mods.Common/Widgets/Logic/Installation/ModContentLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/Installation/ModContentLogic.cs index c09c74d90b..3110011ff6 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/Installation/ModContentLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/Installation/ModContentLogic.cs @@ -13,13 +13,47 @@ using System; using System.Collections.Generic; using System.IO; using System.Linq; -using OpenRA.FileSystem; using OpenRA.Widgets; -using FS = OpenRA.FileSystem.FileSystem; namespace OpenRA.Mods.Common.Widgets.Logic { public class ModContentLogic : ChromeLogic + { + [ObjectCreator.UseCtor] + public ModContentLogic(ModData modData) + { + var content = modData.Manifest.Get(); + if (!IsModInstalled(content)) + { + var widgetArgs = new WidgetArgs + { + { "continueLoading", () => Game.RunAfterTick(() => Game.InitializeMod(content.Mod, new Arguments())) }, + { "content", content }, + }; + + Ui.OpenWindow("CONTENT_PROMPT_PANEL", widgetArgs); + } + else + { + var widgetArgs = new WidgetArgs + { + { "onCancel", () => Game.RunAfterTick(() => Game.InitializeMod(content.Mod, new Arguments())) }, + { "content", content }, + }; + + Ui.OpenWindow("CONTENT_PANEL", widgetArgs); + } + } + + static bool IsModInstalled(ModContent content) + { + return content.Packages + .Where(p => p.Value.Required) + .All(p => p.Value.TestFiles.All(f => File.Exists(Platform.ResolvePath(f)))); + } + } + + public class ModContentInstallerLogic : ChromeLogic { [FluentReference] const string ManualInstall = "button-manual-install"; @@ -31,56 +65,28 @@ namespace OpenRA.Mods.Common.Widgets.Logic readonly Dictionary sources = new(); readonly Dictionary downloads = new(); - readonly FluentBundle externalFluentBundle; - bool sourceAvailable; [ObjectCreator.UseCtor] - public ModContentLogic(Widget widget, Manifest mod, ModContent content, Action onCancel, string translationFilePath) + public ModContentInstallerLogic(ModData modData, Widget widget, ModContent content, Action onCancel) { this.content = content; var panel = widget.Get("CONTENT_PANEL"); - var modObjectCreator = new ObjectCreator(mod, Game.Mods); - var modPackageLoaders = modObjectCreator.GetLoaders(mod.PackageFormats, "package"); - var modFileSystem = new FS(mod.Id, Game.Mods, modPackageLoaders); - - var modFileSystemLoader = modObjectCreator.GetLoader(mod.FileSystem.Value, "filesystem"); - FieldLoader.Load(modFileSystemLoader, mod.FileSystem); - modFileSystemLoader.Mount(modFileSystem, modObjectCreator); - modFileSystem.TrimExcess(); - - var sourceYaml = MiniYaml.Load(modFileSystem, content.Sources, null); + var sourceYaml = MiniYaml.Load(modData.DefaultFileSystem, content.Sources, null); foreach (var s in sourceYaml) - sources.Add(s.Key, new ModContent.ModSource(s.Value, modObjectCreator)); + sources.Add(s.Key, new ModContent.ModSource(s.Value)); - var downloadYaml = MiniYaml.Load(modFileSystem, content.Downloads, null); + var downloadYaml = MiniYaml.Load(modData.DefaultFileSystem, content.Downloads, null); foreach (var d in downloadYaml) - downloads.Add(d.Key, new ModContent.ModDownload(d.Value, modObjectCreator)); - - modFileSystem.UnmountAll(); - - externalFluentBundle = new FluentBundle(Game.Settings.Player.Language, File.ReadAllText(translationFilePath), _ => { }); + downloads.Add(d.Key, new ModContent.ModDownload(d.Value)); scrollPanel = panel.Get("PACKAGES"); template = scrollPanel.Get("PACKAGE_TEMPLATE"); - - var headerTemplate = panel.Get("HEADER_TEMPLATE"); - var headerLines = - !string.IsNullOrEmpty(content.HeaderMessage) - ? externalFluentBundle.GetString(content.HeaderMessage) - : null; - var headerHeight = 0; - if (headerLines != null) - { - var label = (LabelWidget)headerTemplate.Clone(); - label.GetText = () => headerLines; - label.IncreaseHeightToFitCurrentText(); - panel.AddChild(label); - - headerHeight += label.Bounds.Height; - } + var headerLabel = panel.Get("HEADER_LABEL"); + headerLabel.IncreaseHeightToFitCurrentText(); + var headerHeight = headerLabel.Bounds.Height; panel.Bounds.Height += headerHeight; panel.Bounds.Y -= headerHeight / 2; @@ -94,7 +100,6 @@ namespace OpenRA.Mods.Common.Widgets.Logic { { "sources", sources }, { "content", content }, - { "externalFluentBundle", externalFluentBundle }, }); var backButton = panel.Get("BACK_BUTTON"); @@ -118,7 +123,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic { var container = template.Clone(); var titleWidget = container.Get("TITLE"); - var title = externalFluentBundle.GetString(p.Value.Title); + var title = FluentProvider.GetString(p.Value.Title); titleWidget.GetText = () => title; var requiredWidget = container.Get("REQUIRED"); diff --git a/OpenRA.Mods.Common/Widgets/Logic/Installation/ModContentPromptLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/Installation/ModContentPromptLogic.cs index 14868fb283..7c28b6f34c 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/Installation/ModContentPromptLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/Installation/ModContentPromptLogic.cs @@ -12,9 +12,7 @@ using System; using System.IO; using System.Linq; -using OpenRA.FileSystem; using OpenRA.Widgets; -using FS = OpenRA.FileSystem.FileSystem; namespace OpenRA.Mods.Common.Widgets.Logic { @@ -27,36 +25,21 @@ namespace OpenRA.Mods.Common.Widgets.Logic const string Quit = "button-quit"; readonly ModContent content; - readonly FluentBundle externalFluentBundle; bool requiredContentInstalled; [ObjectCreator.UseCtor] - public ModContentPromptLogic(ModData modData, Widget widget, Manifest mod, ModContent content, Action continueLoading, string translationFilePath) + public ModContentPromptLogic(ModData modData, Widget widget, ModContent content, Action continueLoading) { this.content = content; CheckRequiredContentInstalled(); - externalFluentBundle = new FluentBundle(Game.Settings.Player.Language, File.ReadAllText(translationFilePath), _ => { }); - var continueMessage = FluentProvider.GetString(Continue); var quitMessage = FluentProvider.GetString(Quit); var panel = widget.Get("CONTENT_PROMPT_PANEL"); - var headerTemplate = panel.Get("HEADER_TEMPLATE"); - var headerLines = - !string.IsNullOrEmpty(content.InstallPromptMessage) - ? externalFluentBundle.GetString(content.InstallPromptMessage) - : null; - var headerHeight = 0; - if (headerLines != null) - { - var label = (LabelWidget)headerTemplate.Clone(); - label.GetText = () => headerLines; - label.IncreaseHeightToFitCurrentText(); - panel.AddChild(label); - - headerHeight += label.Bounds.Height; - } + var headerLabel = panel.Get("HEADER_LABEL"); + headerLabel.IncreaseHeightToFitCurrentText(); + var headerHeight = headerLabel.Bounds.Height; panel.Bounds.Height += headerHeight; panel.Bounds.Y -= headerHeight / 2; @@ -68,9 +51,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic Ui.OpenWindow("CONTENT_PANEL", new WidgetArgs { { "onCancel", CheckRequiredContentInstalled }, - { "mod", mod }, { "content", content }, - { "translationFilePath", translationFilePath }, }); }; @@ -79,25 +60,14 @@ namespace OpenRA.Mods.Common.Widgets.Logic quickButton.Bounds.Y += headerHeight; quickButton.OnClick = () => { - var modObjectCreator = new ObjectCreator(mod, Game.Mods); - var modPackageLoaders = modObjectCreator.GetLoaders(mod.PackageFormats, "package"); - var modFileSystem = new FS(mod.Id, Game.Mods, modPackageLoaders); - - var modFileSystemLoader = modObjectCreator.GetLoader(mod.FileSystem.Value, "filesystem"); - FieldLoader.Load(modFileSystemLoader, mod.FileSystem); - modFileSystemLoader.Mount(modFileSystem, modObjectCreator); - modFileSystem.TrimExcess(); - - var downloadYaml = MiniYaml.Load(modFileSystem, content.Downloads, null); - modFileSystem.UnmountAll(); - + var downloadYaml = MiniYaml.Load(modData.DefaultFileSystem, content.Downloads, null); var download = downloadYaml.FirstOrDefault(n => n.Key == content.QuickDownload); if (download == null) throw new InvalidOperationException($"Mod QuickDownload `{content.QuickDownload}` definition not found."); Ui.OpenWindow("PACKAGE_DOWNLOAD_PANEL", new WidgetArgs { - { "download", new ModContent.ModDownload(download.Value, modObjectCreator) }, + { "download", new ModContent.ModDownload(download.Value) }, { "onSuccess", continueLoading } }); }; diff --git a/OpenRA.Mods.Common/Widgets/Logic/MainMenuLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/MainMenuLogic.cs index fbbf69cd28..60f313df9b 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/MainMenuLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/MainMenuLogic.cs @@ -15,6 +15,7 @@ using System.Globalization; using System.IO; using System.Linq; using System.Threading.Tasks; +using OpenRA.Mods.Common.FileSystem; using OpenRA.Network; using OpenRA.Support; using OpenRA.Widgets; @@ -81,24 +82,16 @@ namespace OpenRA.Mods.Common.Widgets.Logic var contentButton = mainMenu.GetOrNull("CONTENT_BUTTON"); if (contentButton != null) { - var hasContent = modData.Manifest.Contains(); - contentButton.Disabled = !hasContent; + var contentInstaller = modData.FileSystemLoader as ContentInstallerFileSystemLoader; + contentButton.Disabled = contentInstaller == null; contentButton.OnClick = () => { // Switching mods changes the world state (by disposing it), // so we can't do this inside the input handler. Game.RunAfterTick(() => { - if (!hasContent) - return; - - var content = modData.Manifest.Get(); - string translationPath; - using (var fs = (FileStream)modData.DefaultFileSystem.Open(content.Translation)) - translationPath = fs.Name; - Game.InitializeMod( - content.ContentInstallerMod, - new Arguments(new[] { "Content.Mod=" + modData.Manifest.Id, "Content.TranslationFile=" + translationPath })); + if (contentInstaller != null) + Game.InitializeMod(contentInstaller.ContentInstallerMod, new Arguments()); }); }; } diff --git a/mods/cnc/installer/covertops.yaml b/mods/cnc-content/installer/covertops.yaml similarity index 100% rename from mods/cnc/installer/covertops.yaml rename to mods/cnc-content/installer/covertops.yaml diff --git a/mods/cnc/installer/downloads.yaml b/mods/cnc-content/installer/downloads.yaml similarity index 100% rename from mods/cnc/installer/downloads.yaml rename to mods/cnc-content/installer/downloads.yaml diff --git a/mods/cnc/installer/firstdecade.yaml b/mods/cnc-content/installer/firstdecade.yaml similarity index 100% rename from mods/cnc/installer/firstdecade.yaml rename to mods/cnc-content/installer/firstdecade.yaml diff --git a/mods/cnc/installer/gdi95.yaml b/mods/cnc-content/installer/gdi95.yaml similarity index 100% rename from mods/cnc/installer/gdi95.yaml rename to mods/cnc-content/installer/gdi95.yaml diff --git a/mods/cnc/installer/nod95.yaml b/mods/cnc-content/installer/nod95.yaml similarity index 100% rename from mods/cnc/installer/nod95.yaml rename to mods/cnc-content/installer/nod95.yaml diff --git a/mods/cnc/installer/origin.yaml b/mods/cnc-content/installer/origin.yaml similarity index 100% rename from mods/cnc/installer/origin.yaml rename to mods/cnc-content/installer/origin.yaml diff --git a/mods/cnc/installer/steam.yaml b/mods/cnc-content/installer/steam.yaml similarity index 100% rename from mods/cnc/installer/steam.yaml rename to mods/cnc-content/installer/steam.yaml diff --git a/mods/cnc/languages/modcontent/en.ftl b/mods/cnc-content/languages/chrome/en.ftl similarity index 100% rename from mods/cnc/languages/modcontent/en.ftl rename to mods/cnc-content/languages/chrome/en.ftl diff --git a/mods/cnc-content/mod.yaml b/mods/cnc-content/mod.yaml new file mode 100644 index 0000000000..f0fa130295 --- /dev/null +++ b/mods/cnc-content/mod.yaml @@ -0,0 +1,118 @@ +Metadata: + Title: mod-title + Version: {DEV_VERSION} + Hidden: true + +FileSystem: DefaultFileSystem + Packages: + ^EngineDir + ^EngineDir|mods/common-content: content + ^EngineDir|mods/common: common + $cnc-content: cnccontent + +Rules: + content|rules.yaml + +Cursors: + content|cursors.yaml + +Chrome: + content|chrome.yaml + +Assemblies: OpenRA.Mods.Common.dll, OpenRA.Mods.Cnc.dll + +ChromeLayout: + content|content.yaml + +Notifications: + content|notifications.yaml + +LoadScreen: ModContentLoadScreen + Image: ^EngineDir|mods/common-content/chrome.png + Image2x: ^EngineDir|mods/common-content/chrome-2x.png + Image3x: ^EngineDir|mods/common-content/chrome-3x.png + +ChromeMetrics: + common|metrics.yaml + content|metrics.yaml + +Translations: + common|languages/en.ftl + content|languages/en.ftl + content|languages/chrome/en.ftl + cnccontent|languages/chrome/en.ftl + +Fonts: + Tiny: + Font: common|FreeSans.ttf + Size: 10 + Ascender: 8 + TinyBold: + Font: common|FreeSansBold.ttf + Size: 10 + Ascender: 8 + Regular: + Font: common|FreeSans.ttf + Size: 14 + Ascender: 11 + Bold: + Font: common|FreeSansBold.ttf + Size: 14 + Ascender: 11 + MediumBold: + Font: common|FreeSansBold.ttf + Size: 18 + Ascender: 14 + BigBold: + Font: common|FreeSansBold.ttf + Size: 24 + Ascender: 18 + +ModContent: + Mod: cnc + QuickDownload: basefiles + Packages: + ContentPackage@base: + Title: modcontent-package-basefiles + Identifier: base + TestFiles: ^SupportDir|Content/cnc/conquer.mix, ^SupportDir|Content/cnc/desert.mix, ^SupportDir|Content/cnc/sounds.mix, ^SupportDir|Content/cnc/speech.mix, ^SupportDir|Content/cnc/temperat.mix, ^SupportDir|Content/cnc/tempicnh.mix, ^SupportDir|Content/cnc/winter.mix + Sources: gdi95, nod95, tfd, tuc-steam, tuc-origin, cncr-steam, cncr-origin + Required: true + Download: basefiles + ContentPackage@music: + Title: modcontent-package-basemusic + Identifier: music + TestFiles: ^SupportDir|Content/cnc/scores.mix + Sources: gdi95, nod95, tfd, tuc-steam, tuc-origin, cncr-steam, cncr-origin + ContentPackage@movies-gdi: + Title: modcontent-package-gdi + Identifier: movies-gdi + TestFiles: ^SupportDir|Content/cnc/movies/visor.vqa, ^SupportDir|Content/cnc/movies/turtkill.vqa, ^SupportDir|Content/cnc/movies/tbrinfo3.vqa, ^SupportDir|Content/cnc/movies/tbrinfo2.vqa, ^SupportDir|Content/cnc/movies/tbrinfo1.vqa, ^SupportDir|Content/cnc/movies/seige.vqa, ^SupportDir|Content/cnc/movies/samsite.vqa, ^SupportDir|Content/cnc/movies/samdie.vqa, ^SupportDir|Content/cnc/movies/sabotage.vqa, ^SupportDir|Content/cnc/movies/retro.vqa, ^SupportDir|Content/cnc/movies/podium.vqa, ^SupportDir|Content/cnc/movies/planecra.vqa, ^SupportDir|Content/cnc/movies/pintle.vqa, ^SupportDir|Content/cnc/movies/paratrop.vqa, ^SupportDir|Content/cnc/movies/nodsweep.vqa, ^SupportDir|Content/cnc/movies/nodlose.vqa, ^SupportDir|Content/cnc/movies/nodflees.vqa, ^SupportDir|Content/cnc/movies/nod1.vqa, ^SupportDir|Content/cnc/movies/nitejump.vqa, ^SupportDir|Content/cnc/movies/napalm.vqa, ^SupportDir|Content/cnc/movies/logo.vqa, ^SupportDir|Content/cnc/movies/landing.vqa, ^SupportDir|Content/cnc/movies/intro2.vqa, ^SupportDir|Content/cnc/movies/hellvaly.vqa, ^SupportDir|Content/cnc/movies/gunboat.vqa, ^SupportDir|Content/cnc/movies/generic.vqa, ^SupportDir|Content/cnc/movies/gdilose.vqa, ^SupportDir|Content/cnc/movies/gdifinb.vqa, ^SupportDir|Content/cnc/movies/gdifina.vqa, ^SupportDir|Content/cnc/movies/gdiend2.vqa, ^SupportDir|Content/cnc/movies/gdiend1.vqa, ^SupportDir|Content/cnc/movies/gdi9.vqa, ^SupportDir|Content/cnc/movies/gdi8b.vqa, ^SupportDir|Content/cnc/movies/gdi8a.vqa, ^SupportDir|Content/cnc/movies/gdi7.vqa, ^SupportDir|Content/cnc/movies/gdi6.vqa, ^SupportDir|Content/cnc/movies/gdi5.vqa, ^SupportDir|Content/cnc/movies/gdi4b.vqa, ^SupportDir|Content/cnc/movies/gdi4a.vqa, ^SupportDir|Content/cnc/movies/gdi3lose.vqa, ^SupportDir|Content/cnc/movies/gdi3.vqa, ^SupportDir|Content/cnc/movies/gdi2.vqa, ^SupportDir|Content/cnc/movies/gdi15.vqa, ^SupportDir|Content/cnc/movies/gdi14.vqa, ^SupportDir|Content/cnc/movies/gdi13.vqa, ^SupportDir|Content/cnc/movies/gdi12.vqa, ^SupportDir|Content/cnc/movies/gdi11.vqa, ^SupportDir|Content/cnc/movies/gdi10.vqa, ^SupportDir|Content/cnc/movies/gdi1.vqa, ^SupportDir|Content/cnc/movies/gameover.vqa, ^SupportDir|Content/cnc/movies/forestkl.vqa, ^SupportDir|Content/cnc/movies/flyy.vqa, ^SupportDir|Content/cnc/movies/flag.vqa, ^SupportDir|Content/cnc/movies/dino.vqa, ^SupportDir|Content/cnc/movies/desolat.vqa, ^SupportDir|Content/cnc/movies/consyard.vqa, ^SupportDir|Content/cnc/movies/cc2tease.vqa, ^SupportDir|Content/cnc/movies/burdet2.vqa, ^SupportDir|Content/cnc/movies/burdet1.vqa, ^SupportDir|Content/cnc/movies/bombflee.vqa, ^SupportDir|Content/cnc/movies/bombaway.vqa, ^SupportDir|Content/cnc/movies/bkground.vqa, ^SupportDir|Content/cnc/movies/bcanyon.vqa, ^SupportDir|Content/cnc/movies/banner.vqa + Sources: gdi95, tfd, tuc-steam, tuc-origin, cncr-steam, cncr-origin + ContentPackage@movies-nod: + Title: modcontent-package-nod + Identifier: movies-nod + TestFiles: ^SupportDir|Content/cnc/movies/visor.vqa, ^SupportDir|Content/cnc/movies/trtkil_d.vqa, ^SupportDir|Content/cnc/movies/tiberfx.vqa, ^SupportDir|Content/cnc/movies/tankkill.vqa, ^SupportDir|Content/cnc/movies/tankgo.vqa, ^SupportDir|Content/cnc/movies/sundial.vqa, ^SupportDir|Content/cnc/movies/stealth.vqa, ^SupportDir|Content/cnc/movies/spycrash.vqa, ^SupportDir|Content/cnc/movies/sethpre.vqa, ^SupportDir|Content/cnc/movies/seige.vqa, ^SupportDir|Content/cnc/movies/samsite.vqa, ^SupportDir|Content/cnc/movies/retro.vqa, ^SupportDir|Content/cnc/movies/refint.vqa, ^SupportDir|Content/cnc/movies/obel.vqa, ^SupportDir|Content/cnc/movies/nuke.vqa, ^SupportDir|Content/cnc/movies/nodlose.vqa, ^SupportDir|Content/cnc/movies/nodfinal.vqa, ^SupportDir|Content/cnc/movies/nodend4.vqa, ^SupportDir|Content/cnc/movies/nodend3.vqa, ^SupportDir|Content/cnc/movies/nodend2.vqa, ^SupportDir|Content/cnc/movies/nodend1.vqa, ^SupportDir|Content/cnc/movies/nod9.vqa, ^SupportDir|Content/cnc/movies/nod8.vqa, ^SupportDir|Content/cnc/movies/nod7b.vqa, ^SupportDir|Content/cnc/movies/nod7a.vqa, ^SupportDir|Content/cnc/movies/nod6.vqa, ^SupportDir|Content/cnc/movies/nod5.vqa, ^SupportDir|Content/cnc/movies/nod4b.vqa, ^SupportDir|Content/cnc/movies/nod4a.vqa, ^SupportDir|Content/cnc/movies/nod3.vqa, ^SupportDir|Content/cnc/movies/nod2.vqa, ^SupportDir|Content/cnc/movies/nod1pre.vqa, ^SupportDir|Content/cnc/movies/nod13.vqa, ^SupportDir|Content/cnc/movies/nod12.vqa, ^SupportDir|Content/cnc/movies/nod11.vqa, ^SupportDir|Content/cnc/movies/nod10b.vqa, ^SupportDir|Content/cnc/movies/nod10a.vqa, ^SupportDir|Content/cnc/movies/nod1.vqa, ^SupportDir|Content/cnc/movies/logo.vqa, ^SupportDir|Content/cnc/movies/landing.vqa, ^SupportDir|Content/cnc/movies/kanepre.vqa, ^SupportDir|Content/cnc/movies/intro2.vqa, ^SupportDir|Content/cnc/movies/insites.vqa, ^SupportDir|Content/cnc/movies/generic.vqa, ^SupportDir|Content/cnc/movies/gdi1.vqa, ^SupportDir|Content/cnc/movies/gameover.vqa, ^SupportDir|Content/cnc/movies/forestkl.vqa, ^SupportDir|Content/cnc/movies/flag.vqa, ^SupportDir|Content/cnc/movies/dino.vqa, ^SupportDir|Content/cnc/movies/dessweep.vqa, ^SupportDir|Content/cnc/movies/deskill.vqa, ^SupportDir|Content/cnc/movies/desflees.vqa, ^SupportDir|Content/cnc/movies/consyard.vqa, ^SupportDir|Content/cnc/movies/cc2tease.vqa, ^SupportDir|Content/cnc/movies/bombflee.vqa, ^SupportDir|Content/cnc/movies/bombaway.vqa, ^SupportDir|Content/cnc/movies/bcanyon.vqa, ^SupportDir|Content/cnc/movies/banner.vqa, ^SupportDir|Content/cnc/movies/akira.vqa, ^SupportDir|Content/cnc/movies/airstrk.vqa + Sources: nod95, tfd, tuc-steam, tuc-origin, cncr-steam, cncr-origin + ContentPackage@music-covertops: + Title: modcontent-package-covertopsmusic + Identifier: music-covertops + TestFiles: ^SupportDir|Content/cnc/scores-covertops.mix + Sources: covertops, tfd, tuc-steam, tuc-origin, cncr-steam, cncr-origin + Downloads: + cnccontent|installer/downloads.yaml + Sources: + cnccontent|installer/covertops.yaml + cnccontent|installer/firstdecade.yaml + cnccontent|installer/gdi95.yaml + cnccontent|installer/nod95.yaml + cnccontent|installer/origin.yaml + cnccontent|installer/steam.yaml + +SoundFormats: + +SpriteFormats: PngSheet + +TerrainFormat: DefaultTerrain + +SpriteSequenceFormat: DefaultSpriteSequence diff --git a/mods/cnc/mod.yaml b/mods/cnc/mod.yaml index 87fd069f0c..8826aceed3 100644 --- a/mods/cnc/mod.yaml +++ b/mods/cnc/mod.yaml @@ -7,34 +7,35 @@ Metadata: PackageFormats: Mix -FileSystem: DefaultFileSystem +FileSystem: ContentInstallerFileSystem Packages: - ~^SupportDir|Content/cnc - ~^SupportDir|Content/cnc/movies ^EngineDir $cnc: cnc ^EngineDir|mods/common: common - ~speech.mix - ~conquer.mix - ~sounds.mix - ~tempicnh.mix - ~temperat.mix - ~winter.mix - ~desert.mix - ~movies.mix - ~scores.mix - ~scores2.mix - ~scores-covertops.mix - ~transit.mix - ~general.mix + ~^SupportDir|Content/cnc: content + cnc|scripts + common|scripts + cnc|uibits + ContentPackages: + content|speech.mix + content|conquer.mix + content|sounds.mix + content|tempicnh.mix + content|temperat.mix + content|winter.mix + content|desert.mix + ~content|movies + ~content|scores.mix + ~content|scores2.mix + ~content|scores-covertops.mix + ~content|transit.mix + ~content|general.mix cnc|bits/snow.mix cnc|bits cnc|bits/jungle cnc|bits/desert cnc|bits/ss - cnc|scripts - common|scripts - cnc|uibits + ContentInstallerMod: cnc-content MapFolders: cnc|maps: System @@ -278,48 +279,5 @@ GameSpeeds: Timestep: 20 OrderLatency: 6 -ModContent: - InstallPromptMessage: modcontent-installprompt - QuickDownload: basefiles - HeaderMessage: modcontent-header - Packages: - ContentPackage@base: - Title: modcontent-package-basefiles - Identifier: base - TestFiles: ^SupportDir|Content/cnc/conquer.mix, ^SupportDir|Content/cnc/desert.mix, ^SupportDir|Content/cnc/sounds.mix, ^SupportDir|Content/cnc/speech.mix, ^SupportDir|Content/cnc/temperat.mix, ^SupportDir|Content/cnc/tempicnh.mix, ^SupportDir|Content/cnc/winter.mix - Sources: gdi95, nod95, tfd, tuc-steam, tuc-origin, cncr-steam, cncr-origin - Required: true - Download: basefiles - ContentPackage@music: - Title: modcontent-package-basemusic - Identifier: music - TestFiles: ^SupportDir|Content/cnc/scores.mix - Sources: gdi95, nod95, tfd, tuc-steam, tuc-origin, cncr-steam, cncr-origin - ContentPackage@movies-gdi: - Title: modcontent-package-gdi - Identifier: movies-gdi - TestFiles: ^SupportDir|Content/cnc/movies/visor.vqa, ^SupportDir|Content/cnc/movies/turtkill.vqa, ^SupportDir|Content/cnc/movies/tbrinfo3.vqa, ^SupportDir|Content/cnc/movies/tbrinfo2.vqa, ^SupportDir|Content/cnc/movies/tbrinfo1.vqa, ^SupportDir|Content/cnc/movies/seige.vqa, ^SupportDir|Content/cnc/movies/samsite.vqa, ^SupportDir|Content/cnc/movies/samdie.vqa, ^SupportDir|Content/cnc/movies/sabotage.vqa, ^SupportDir|Content/cnc/movies/retro.vqa, ^SupportDir|Content/cnc/movies/podium.vqa, ^SupportDir|Content/cnc/movies/planecra.vqa, ^SupportDir|Content/cnc/movies/pintle.vqa, ^SupportDir|Content/cnc/movies/paratrop.vqa, ^SupportDir|Content/cnc/movies/nodsweep.vqa, ^SupportDir|Content/cnc/movies/nodlose.vqa, ^SupportDir|Content/cnc/movies/nodflees.vqa, ^SupportDir|Content/cnc/movies/nod1.vqa, ^SupportDir|Content/cnc/movies/nitejump.vqa, ^SupportDir|Content/cnc/movies/napalm.vqa, ^SupportDir|Content/cnc/movies/logo.vqa, ^SupportDir|Content/cnc/movies/landing.vqa, ^SupportDir|Content/cnc/movies/intro2.vqa, ^SupportDir|Content/cnc/movies/hellvaly.vqa, ^SupportDir|Content/cnc/movies/gunboat.vqa, ^SupportDir|Content/cnc/movies/generic.vqa, ^SupportDir|Content/cnc/movies/gdilose.vqa, ^SupportDir|Content/cnc/movies/gdifinb.vqa, ^SupportDir|Content/cnc/movies/gdifina.vqa, ^SupportDir|Content/cnc/movies/gdiend2.vqa, ^SupportDir|Content/cnc/movies/gdiend1.vqa, ^SupportDir|Content/cnc/movies/gdi9.vqa, ^SupportDir|Content/cnc/movies/gdi8b.vqa, ^SupportDir|Content/cnc/movies/gdi8a.vqa, ^SupportDir|Content/cnc/movies/gdi7.vqa, ^SupportDir|Content/cnc/movies/gdi6.vqa, ^SupportDir|Content/cnc/movies/gdi5.vqa, ^SupportDir|Content/cnc/movies/gdi4b.vqa, ^SupportDir|Content/cnc/movies/gdi4a.vqa, ^SupportDir|Content/cnc/movies/gdi3lose.vqa, ^SupportDir|Content/cnc/movies/gdi3.vqa, ^SupportDir|Content/cnc/movies/gdi2.vqa, ^SupportDir|Content/cnc/movies/gdi15.vqa, ^SupportDir|Content/cnc/movies/gdi14.vqa, ^SupportDir|Content/cnc/movies/gdi13.vqa, ^SupportDir|Content/cnc/movies/gdi12.vqa, ^SupportDir|Content/cnc/movies/gdi11.vqa, ^SupportDir|Content/cnc/movies/gdi10.vqa, ^SupportDir|Content/cnc/movies/gdi1.vqa, ^SupportDir|Content/cnc/movies/gameover.vqa, ^SupportDir|Content/cnc/movies/forestkl.vqa, ^SupportDir|Content/cnc/movies/flyy.vqa, ^SupportDir|Content/cnc/movies/flag.vqa, ^SupportDir|Content/cnc/movies/dino.vqa, ^SupportDir|Content/cnc/movies/desolat.vqa, ^SupportDir|Content/cnc/movies/consyard.vqa, ^SupportDir|Content/cnc/movies/cc2tease.vqa, ^SupportDir|Content/cnc/movies/burdet2.vqa, ^SupportDir|Content/cnc/movies/burdet1.vqa, ^SupportDir|Content/cnc/movies/bombflee.vqa, ^SupportDir|Content/cnc/movies/bombaway.vqa, ^SupportDir|Content/cnc/movies/bkground.vqa, ^SupportDir|Content/cnc/movies/bcanyon.vqa, ^SupportDir|Content/cnc/movies/banner.vqa - Sources: gdi95, tfd, tuc-steam, tuc-origin, cncr-steam, cncr-origin - ContentPackage@movies-nod: - Title: modcontent-package-nod - Identifier: movies-nod - TestFiles: ^SupportDir|Content/cnc/movies/visor.vqa, ^SupportDir|Content/cnc/movies/trtkil_d.vqa, ^SupportDir|Content/cnc/movies/tiberfx.vqa, ^SupportDir|Content/cnc/movies/tankkill.vqa, ^SupportDir|Content/cnc/movies/tankgo.vqa, ^SupportDir|Content/cnc/movies/sundial.vqa, ^SupportDir|Content/cnc/movies/stealth.vqa, ^SupportDir|Content/cnc/movies/spycrash.vqa, ^SupportDir|Content/cnc/movies/sethpre.vqa, ^SupportDir|Content/cnc/movies/seige.vqa, ^SupportDir|Content/cnc/movies/samsite.vqa, ^SupportDir|Content/cnc/movies/retro.vqa, ^SupportDir|Content/cnc/movies/refint.vqa, ^SupportDir|Content/cnc/movies/obel.vqa, ^SupportDir|Content/cnc/movies/nuke.vqa, ^SupportDir|Content/cnc/movies/nodlose.vqa, ^SupportDir|Content/cnc/movies/nodfinal.vqa, ^SupportDir|Content/cnc/movies/nodend4.vqa, ^SupportDir|Content/cnc/movies/nodend3.vqa, ^SupportDir|Content/cnc/movies/nodend2.vqa, ^SupportDir|Content/cnc/movies/nodend1.vqa, ^SupportDir|Content/cnc/movies/nod9.vqa, ^SupportDir|Content/cnc/movies/nod8.vqa, ^SupportDir|Content/cnc/movies/nod7b.vqa, ^SupportDir|Content/cnc/movies/nod7a.vqa, ^SupportDir|Content/cnc/movies/nod6.vqa, ^SupportDir|Content/cnc/movies/nod5.vqa, ^SupportDir|Content/cnc/movies/nod4b.vqa, ^SupportDir|Content/cnc/movies/nod4a.vqa, ^SupportDir|Content/cnc/movies/nod3.vqa, ^SupportDir|Content/cnc/movies/nod2.vqa, ^SupportDir|Content/cnc/movies/nod1pre.vqa, ^SupportDir|Content/cnc/movies/nod13.vqa, ^SupportDir|Content/cnc/movies/nod12.vqa, ^SupportDir|Content/cnc/movies/nod11.vqa, ^SupportDir|Content/cnc/movies/nod10b.vqa, ^SupportDir|Content/cnc/movies/nod10a.vqa, ^SupportDir|Content/cnc/movies/nod1.vqa, ^SupportDir|Content/cnc/movies/logo.vqa, ^SupportDir|Content/cnc/movies/landing.vqa, ^SupportDir|Content/cnc/movies/kanepre.vqa, ^SupportDir|Content/cnc/movies/intro2.vqa, ^SupportDir|Content/cnc/movies/insites.vqa, ^SupportDir|Content/cnc/movies/generic.vqa, ^SupportDir|Content/cnc/movies/gdi1.vqa, ^SupportDir|Content/cnc/movies/gameover.vqa, ^SupportDir|Content/cnc/movies/forestkl.vqa, ^SupportDir|Content/cnc/movies/flag.vqa, ^SupportDir|Content/cnc/movies/dino.vqa, ^SupportDir|Content/cnc/movies/dessweep.vqa, ^SupportDir|Content/cnc/movies/deskill.vqa, ^SupportDir|Content/cnc/movies/desflees.vqa, ^SupportDir|Content/cnc/movies/consyard.vqa, ^SupportDir|Content/cnc/movies/cc2tease.vqa, ^SupportDir|Content/cnc/movies/bombflee.vqa, ^SupportDir|Content/cnc/movies/bombaway.vqa, ^SupportDir|Content/cnc/movies/bcanyon.vqa, ^SupportDir|Content/cnc/movies/banner.vqa, ^SupportDir|Content/cnc/movies/akira.vqa, ^SupportDir|Content/cnc/movies/airstrk.vqa - Sources: nod95, tfd, tuc-steam, tuc-origin, cncr-steam, cncr-origin - ContentPackage@music-covertops: - Title: modcontent-package-covertopsmusic - Identifier: music-covertops - TestFiles: ^SupportDir|Content/cnc/scores-covertops.mix - Sources: covertops, tfd, tuc-steam, tuc-origin, cncr-steam, cncr-origin - Downloads: - cnc|installer/downloads.yaml - Sources: - cnc|installer/covertops.yaml - cnc|installer/firstdecade.yaml - cnc|installer/gdi95.yaml - cnc|installer/nod95.yaml - cnc|installer/origin.yaml - cnc|installer/steam.yaml - Translation: cnc|languages/modcontent/en.ftl - DiscordService: ApplicationId: 699223250181292033 diff --git a/mods/modcontent/chrome-2x.png b/mods/common-content/chrome-2x.png similarity index 100% rename from mods/modcontent/chrome-2x.png rename to mods/common-content/chrome-2x.png diff --git a/mods/modcontent/chrome-3x.png b/mods/common-content/chrome-3x.png similarity index 100% rename from mods/modcontent/chrome-3x.png rename to mods/common-content/chrome-3x.png diff --git a/mods/modcontent/chrome.png b/mods/common-content/chrome.png similarity index 100% rename from mods/modcontent/chrome.png rename to mods/common-content/chrome.png diff --git a/mods/modcontent/chrome.yaml b/mods/common-content/chrome.yaml similarity index 100% rename from mods/modcontent/chrome.yaml rename to mods/common-content/chrome.yaml diff --git a/mods/modcontent/content.yaml b/mods/common-content/content.yaml similarity index 98% rename from mods/modcontent/content.yaml rename to mods/common-content/content.yaml index b2bc8fdfa7..ddda5747b1 100644 --- a/mods/modcontent/content.yaml +++ b/mods/common-content/content.yaml @@ -1,5 +1,11 @@ -Background@CONTENT_PANEL: +Background@MODCONTENT_BACKGROUND: Logic: ModContentLogic + Background: background + Width: WINDOW_WIDTH + Height: WINDOW_HEIGHT + +Background@CONTENT_PANEL: + Logic: ModContentInstallerLogic X: (WINDOW_WIDTH - WIDTH) / 2 Y: (WINDOW_HEIGHT - HEIGHT) / 2 Width: 500 @@ -20,11 +26,12 @@ Background@CONTENT_PANEL: Text: label-content-panel-title Align: Center Font: MediumBold - Label@HEADER_TEMPLATE: + Label@HEADER_LABEL: X: 30 Y: 66 Width: PARENT_WIDTH - 60 Height: 16 + Text: modcontent-header Align: Center WordWrap: true ScrollPanel@PACKAGES: @@ -343,11 +350,12 @@ Background@CONTENT_PROMPT_PANEL: Text: label-content-prompt-panel-title Align: Center Font: MediumBold - Label@HEADER_TEMPLATE: + Label@HEADER_LABEL: X: 30 Y: 65 Width: PARENT_WIDTH - 60 Height: 16 + Text: modcontent-installprompt Align: Center WordWrap: true Button@ADVANCED_BUTTON: @@ -376,10 +384,6 @@ Background@CONTENT_PROMPT_PANEL: Font: Bold Key: escape -Background@MODCONTENT_BACKGROUND: - Background: background - Width: WINDOW_WIDTH - Height: WINDOW_HEIGHT Background@BUTTON_TOOLTIP: Logic: ButtonTooltipLogic diff --git a/mods/modcontent/cursor.png b/mods/common-content/cursor.png similarity index 100% rename from mods/modcontent/cursor.png rename to mods/common-content/cursor.png diff --git a/mods/modcontent/cursors.yaml b/mods/common-content/cursors.yaml similarity index 100% rename from mods/modcontent/cursors.yaml rename to mods/common-content/cursors.yaml diff --git a/mods/modcontent/languages/chrome/en.ftl b/mods/common-content/languages/chrome/en.ftl similarity index 100% rename from mods/modcontent/languages/chrome/en.ftl rename to mods/common-content/languages/chrome/en.ftl diff --git a/mods/modcontent/languages/en.ftl b/mods/common-content/languages/en.ftl similarity index 100% rename from mods/modcontent/languages/en.ftl rename to mods/common-content/languages/en.ftl diff --git a/mods/modcontent/metrics.yaml b/mods/common-content/metrics.yaml similarity index 100% rename from mods/modcontent/metrics.yaml rename to mods/common-content/metrics.yaml diff --git a/mods/modcontent/notifications.yaml b/mods/common-content/notifications.yaml similarity index 100% rename from mods/modcontent/notifications.yaml rename to mods/common-content/notifications.yaml diff --git a/mods/modcontent/rules.yaml b/mods/common-content/rules.yaml similarity index 100% rename from mods/modcontent/rules.yaml rename to mods/common-content/rules.yaml diff --git a/mods/d2k/installer/d2k.yaml b/mods/d2k-content/installer/d2k.yaml similarity index 100% rename from mods/d2k/installer/d2k.yaml rename to mods/d2k-content/installer/d2k.yaml diff --git a/mods/d2k/installer/downloads.yaml b/mods/d2k-content/installer/downloads.yaml similarity index 100% rename from mods/d2k/installer/downloads.yaml rename to mods/d2k-content/installer/downloads.yaml diff --git a/mods/d2k/installer/gruntmods.yaml b/mods/d2k-content/installer/gruntmods.yaml similarity index 100% rename from mods/d2k/installer/gruntmods.yaml rename to mods/d2k-content/installer/gruntmods.yaml diff --git a/mods/d2k/languages/modcontent/en.ftl b/mods/d2k-content/languages/chrome/en.ftl similarity index 100% rename from mods/d2k/languages/modcontent/en.ftl rename to mods/d2k-content/languages/chrome/en.ftl diff --git a/mods/d2k-content/mod.yaml b/mods/d2k-content/mod.yaml new file mode 100644 index 0000000000..ecf9dafb06 --- /dev/null +++ b/mods/d2k-content/mod.yaml @@ -0,0 +1,111 @@ +Metadata: + Title: mod-title + Version: {DEV_VERSION} + Hidden: true + +FileSystem: DefaultFileSystem + Packages: + ^EngineDir + ^EngineDir|mods/common-content: content + ^EngineDir|mods/common: common + $d2k-content: d2kcontent + +Rules: + content|rules.yaml + +Cursors: + content|cursors.yaml + +Chrome: + content|chrome.yaml + +Assemblies: OpenRA.Mods.Common.dll + +ChromeLayout: + content|content.yaml + +Notifications: + content|notifications.yaml + +LoadScreen: ModContentLoadScreen + Image: ^EngineDir|mods/common-content/chrome.png + Image2x: ^EngineDir|mods/common-content/chrome-2x.png + Image3x: ^EngineDir|mods/common-content/chrome-3x.png + +ChromeMetrics: + common|metrics.yaml + content|metrics.yaml + +Translations: + common|languages/en.ftl + content|languages/en.ftl + content|languages/chrome/en.ftl + d2kcontent|languages/chrome/en.ftl + +Fonts: + Tiny: + Font: common|FreeSans.ttf + Size: 10 + Ascender: 8 + TinyBold: + Font: common|FreeSansBold.ttf + Size: 10 + Ascender: 8 + Regular: + Font: common|FreeSans.ttf + Size: 14 + Ascender: 11 + Bold: + Font: common|FreeSansBold.ttf + Size: 14 + Ascender: 11 + MediumBold: + Font: common|FreeSansBold.ttf + Size: 18 + Ascender: 14 + BigBold: + Font: common|FreeSansBold.ttf + Size: 24 + Ascender: 18 + +ModContent: + Mod: d2k + QuickDownload: quickinstall + Packages: + ContentPackage@base: + Title: modcontent-package-basefiles + Identifier: base + TestFiles: ^SupportDir|Content/d2k/v3/BLOXBASE.R16, ^SupportDir|Content/d2k/v3/BLOXBAT.R16, ^SupportDir|Content/d2k/v3/BLOXBGBS.R16, ^SupportDir|Content/d2k/v3/BLOXICE.R16, ^SupportDir|Content/d2k/v3/BLOXTREE.R16, ^SupportDir|Content/d2k/v3/BLOXWAST.R16, ^SupportDir|Content/d2k/v3/SOUND.RS, ^SupportDir|Content/d2k/v3/PALETTE.BIN + Sources: d2k, gruntmods + Required: true + Download: basefiles + ContentPackage@patch: + Title: modcontent-package-106patch + Identifier: patch + TestFiles: ^SupportDir|Content/d2k/v3/DATA.R16 + Sources: gruntmods + Required: true + Download: patch106 + ContentPackage@music: + Title: modcontent-package-music + Identifier: music + TestFiles: ^SupportDir|Content/d2k/v3/Music/AMBUSH.AUD, ^SupportDir|Content/d2k/v3/Music/WAITGAME.AUD + Sources: d2k, gruntmods + ContentPackage@movies: + Title: modcontent-package-briefings + Identifier: movies + TestFiles: ^SupportDir|Content/d2k/v3/Movies/A_BR01_E.VQA + Sources: d2k + Downloads: + d2kcontent|installer/downloads.yaml + Sources: + d2kcontent|installer/d2k.yaml + d2kcontent|installer/gruntmods.yaml + +SoundFormats: + +SpriteFormats: PngSheet + +TerrainFormat: DefaultTerrain + +SpriteSequenceFormat: DefaultSpriteSequence diff --git a/mods/d2k/mod.yaml b/mods/d2k/mod.yaml index feb3dc0d49..41be028b9e 100644 --- a/mods/d2k/mod.yaml +++ b/mods/d2k/mod.yaml @@ -7,20 +7,29 @@ Metadata: PackageFormats: D2kSoundResources -FileSystem: DefaultFileSystem +FileSystem: ContentInstallerFileSystem Packages: - ~^SupportDir|Content/d2k/v3/ - ~^SupportDir|Content/d2k/v3/GAMESFX - ~^SupportDir|Content/d2k/v3/Movies - ~^SupportDir|Content/d2k/v3/Music ^EngineDir $d2k: d2k ^EngineDir|mods/common: common - ~SOUND.RS - d2k|bits + ~^SupportDir|Content/d2k/v3/: content d2k|scripts common|scripts d2k|uibits + ContentPackages: + content|SOUND.RS + content|GAMESFX + d2k|bits + ContentFiles: + content|DATA.R16 + content|BLOXBASE.R16 + content|BLOXBAT.R16 + content|BLOXBGBS.R16 + content|BLOXICE.R16 + content|BLOXTREE.R16 + content|BLOXWAST.R16 + content|PALETTE.BIN + ContentInstallerMod: d2k-content MapFolders: d2k|maps: System @@ -260,41 +269,5 @@ GameSpeeds: Timestep: 20 OrderLatency: 6 -ModContent: - InstallPromptMessage: modcontent-installprompt - HeaderMessage: modcontent-header - QuickDownload: quickinstall - Packages: - ContentPackage@base: - Title: modcontent-package-basefiles - Identifier: base - TestFiles: ^SupportDir|Content/d2k/v3/BLOXBASE.R16, ^SupportDir|Content/d2k/v3/BLOXBAT.R16, ^SupportDir|Content/d2k/v3/BLOXBGBS.R16, ^SupportDir|Content/d2k/v3/BLOXICE.R16, ^SupportDir|Content/d2k/v3/BLOXTREE.R16, ^SupportDir|Content/d2k/v3/BLOXWAST.R16, ^SupportDir|Content/d2k/v3/SOUND.RS, ^SupportDir|Content/d2k/v3/PALETTE.BIN - Sources: d2k, gruntmods - Required: true - Download: basefiles - ContentPackage@patch: - Title: modcontent-package-106patch - Identifier: patch - TestFiles: ^SupportDir|Content/d2k/v3/DATA.R16 - Sources: gruntmods - Required: true - Download: patch106 - ContentPackage@music: - Title: modcontent-package-music - Identifier: music - TestFiles: ^SupportDir|Content/d2k/v3/Music/AMBUSH.AUD, ^SupportDir|Content/d2k/v3/Music/WAITGAME.AUD - Sources: d2k, gruntmods - ContentPackage@movies: - Title: modcontent-package-briefings - Identifier: movies - TestFiles: ^SupportDir|Content/d2k/v3/Movies/A_BR01_E.VQA - Sources: d2k - Downloads: - d2k|installer/downloads.yaml - Sources: - d2k|installer/d2k.yaml - d2k|installer/gruntmods.yaml - Translation: d2k|languages/modcontent/en.ftl - DiscordService: ApplicationId: 712711732770111550 diff --git a/mods/modcontent/mod.yaml b/mods/modcontent/mod.yaml deleted file mode 100644 index d0f98b8c64..0000000000 --- a/mods/modcontent/mod.yaml +++ /dev/null @@ -1,75 +0,0 @@ -Metadata: - Title: mod-title - Version: {DEV_VERSION} - Hidden: true - -FileSystem: DefaultFileSystem - Packages: - ^EngineDir - ^EngineDir|mods/modcontent: modcontent - ^EngineDir|mods/common: common - -Rules: - modcontent|rules.yaml - -Cursors: - modcontent|cursors.yaml - -Chrome: - modcontent|chrome.yaml - -Assemblies: OpenRA.Mods.Common.dll - -ChromeLayout: - modcontent|content.yaml - -Notifications: - modcontent|notifications.yaml - -LoadScreen: ModContentLoadScreen - Image: ^EngineDir|mods/modcontent/chrome.png - Image2x: ^EngineDir|mods/modcontent/chrome-2x.png - Image3x: ^EngineDir|mods/modcontent/chrome-3x.png - -ChromeMetrics: - common|metrics.yaml - modcontent|metrics.yaml - -Translations: - common|languages/en.ftl - modcontent|languages/en.ftl - modcontent|languages/chrome/en.ftl - -Fonts: - Tiny: - Font: common|FreeSans.ttf - Size: 10 - Ascender: 8 - TinyBold: - Font: common|FreeSansBold.ttf - Size: 10 - Ascender: 8 - Regular: - Font: common|FreeSans.ttf - Size: 14 - Ascender: 11 - Bold: - Font: common|FreeSansBold.ttf - Size: 14 - Ascender: 11 - MediumBold: - Font: common|FreeSansBold.ttf - Size: 18 - Ascender: 14 - BigBold: - Font: common|FreeSansBold.ttf - Size: 24 - Ascender: 18 - -SoundFormats: - -SpriteFormats: PngSheet - -TerrainFormat: DefaultTerrain - -SpriteSequenceFormat: DefaultSpriteSequence diff --git a/mods/ra/installer/aftermath.yaml b/mods/ra-content/installer/aftermath.yaml similarity index 100% rename from mods/ra/installer/aftermath.yaml rename to mods/ra-content/installer/aftermath.yaml diff --git a/mods/ra/installer/allies95.yaml b/mods/ra-content/installer/allies95.yaml similarity index 100% rename from mods/ra/installer/allies95.yaml rename to mods/ra-content/installer/allies95.yaml diff --git a/mods/ra/installer/cnc95.yaml b/mods/ra-content/installer/cnc95.yaml similarity index 100% rename from mods/ra/installer/cnc95.yaml rename to mods/ra-content/installer/cnc95.yaml diff --git a/mods/ra/installer/counterstrike.yaml b/mods/ra-content/installer/counterstrike.yaml similarity index 100% rename from mods/ra/installer/counterstrike.yaml rename to mods/ra-content/installer/counterstrike.yaml diff --git a/mods/ra/installer/downloads.yaml b/mods/ra-content/installer/downloads.yaml similarity index 100% rename from mods/ra/installer/downloads.yaml rename to mods/ra-content/installer/downloads.yaml diff --git a/mods/ra/installer/firstdecade.yaml b/mods/ra-content/installer/firstdecade.yaml similarity index 100% rename from mods/ra/installer/firstdecade.yaml rename to mods/ra-content/installer/firstdecade.yaml diff --git a/mods/ra/installer/origin.yaml b/mods/ra-content/installer/origin.yaml similarity index 100% rename from mods/ra/installer/origin.yaml rename to mods/ra-content/installer/origin.yaml diff --git a/mods/ra/installer/soviet95.yaml b/mods/ra-content/installer/soviet95.yaml similarity index 100% rename from mods/ra/installer/soviet95.yaml rename to mods/ra-content/installer/soviet95.yaml diff --git a/mods/ra/installer/steam.yaml b/mods/ra-content/installer/steam.yaml similarity index 100% rename from mods/ra/installer/steam.yaml rename to mods/ra-content/installer/steam.yaml diff --git a/mods/ra/languages/modcontent/en.ftl b/mods/ra-content/languages/chrome/en.ftl similarity index 100% rename from mods/ra/languages/modcontent/en.ftl rename to mods/ra-content/languages/chrome/en.ftl diff --git a/mods/ra-content/mod.yaml b/mods/ra-content/mod.yaml new file mode 100644 index 0000000000..151c29d15b --- /dev/null +++ b/mods/ra-content/mod.yaml @@ -0,0 +1,140 @@ +Metadata: + Title: mod-title + Version: {DEV_VERSION} + Hidden: true + +FileSystem: DefaultFileSystem + Packages: + ^EngineDir + ^EngineDir|mods/common-content: content + ^EngineDir|mods/common: common + $ra-content: racontent + +Rules: + content|rules.yaml + +Cursors: + content|cursors.yaml + +Chrome: + content|chrome.yaml + +Assemblies: OpenRA.Mods.Common.dll, OpenRA.Mods.Cnc.dll + +ChromeLayout: + content|content.yaml + +Notifications: + content|notifications.yaml + +LoadScreen: ModContentLoadScreen + Image: ^EngineDir|mods/common-content/chrome.png + Image2x: ^EngineDir|mods/common-content/chrome-2x.png + Image3x: ^EngineDir|mods/common-content/chrome-3x.png + +ChromeMetrics: + common|metrics.yaml + content|metrics.yaml + +Translations: + common|languages/en.ftl + content|languages/en.ftl + content|languages/chrome/en.ftl + racontent|languages/chrome/en.ftl + +Fonts: + Tiny: + Font: common|FreeSans.ttf + Size: 10 + Ascender: 8 + TinyBold: + Font: common|FreeSansBold.ttf + Size: 10 + Ascender: 8 + Regular: + Font: common|FreeSans.ttf + Size: 14 + Ascender: 11 + Bold: + Font: common|FreeSansBold.ttf + Size: 14 + Ascender: 11 + MediumBold: + Font: common|FreeSansBold.ttf + Size: 18 + Ascender: 14 + BigBold: + Font: common|FreeSansBold.ttf + Size: 24 + Ascender: 18 + + +ModContent: + Mod: ra + QuickDownload: quickinstall + Packages: + ContentPackage@base: + Title: modcontent-package-basefiles + Identifier: base + TestFiles: ^SupportDir|Content/ra/v2/allies.mix, ^SupportDir|Content/ra/v2/conquer.mix, ^SupportDir|Content/ra/v2/interior.mix, ^SupportDir|Content/ra/v2/hires.mix, ^SupportDir|Content/ra/v2/lores.mix, ^SupportDir|Content/ra/v2/local.mix, ^SupportDir|Content/ra/v2/speech.mix, ^SupportDir|Content/ra/v2/russian.mix, ^SupportDir|Content/ra/v2/snow.mix, ^SupportDir|Content/ra/v2/sounds.mix, ^SupportDir|Content/ra/v2/temperat.mix + Sources: allied, soviet, tfd, ra-steam, ra-origin, cncr-steam, cncr-origin + Required: true + Download: basefiles + ContentPackage@aftermathbase: + Title: modcontent-package-aftermathfiles + Identifier: aftermathbase + TestFiles: ^SupportDir|Content/ra/v2/expand/expand2.mix, ^SupportDir|Content/ra/v2/expand/hires1.mix, ^SupportDir|Content/ra/v2/expand/lores1.mix, ^SupportDir|Content/ra/v2/expand/chrotnk1.aud, ^SupportDir|Content/ra/v2/expand/fixit1.aud, ^SupportDir|Content/ra/v2/expand/jburn1.aud, ^SupportDir|Content/ra/v2/expand/jchrge1.aud, ^SupportDir|Content/ra/v2/expand/jcrisp1.aud, ^SupportDir|Content/ra/v2/expand/jdance1.aud, ^SupportDir|Content/ra/v2/expand/jjuice1.aud, ^SupportDir|Content/ra/v2/expand/jjump1.aud, ^SupportDir|Content/ra/v2/expand/jlight1.aud, ^SupportDir|Content/ra/v2/expand/jpower1.aud, ^SupportDir|Content/ra/v2/expand/jshock1.aud, ^SupportDir|Content/ra/v2/expand/jyes1.aud, ^SupportDir|Content/ra/v2/expand/madchrg2.aud, ^SupportDir|Content/ra/v2/expand/madexplo.aud, ^SupportDir|Content/ra/v2/expand/mboss1.aud, ^SupportDir|Content/ra/v2/expand/mhear1.aud, ^SupportDir|Content/ra/v2/expand/mhotdig1.aud, ^SupportDir|Content/ra/v2/expand/mhowdy1.aud, ^SupportDir|Content/ra/v2/expand/mhuh1.aud, ^SupportDir|Content/ra/v2/expand/mlaff1.aud, ^SupportDir|Content/ra/v2/expand/mrise1.aud, ^SupportDir|Content/ra/v2/expand/mwrench1.aud, ^SupportDir|Content/ra/v2/expand/myeehaw1.aud, ^SupportDir|Content/ra/v2/expand/myes1.aud + Sources: aftermath, tfd, ra-steam, ra-origin, cncr-steam, cncr-origin + Required: true + Download: aftermath + ContentPackage@cncdesert: + Title: modcontent-package-deserttileset + Identifier: cncdesert + TestFiles: ^SupportDir|Content/ra/v2/cnc/desert.mix + Sources: tfd, cnc-steam, cnc-origin, cnc95, cncr-steam, cncr-origin + Required: true + Download: cncdesert + ContentPackage@music: + Title: modcontent-package-basemusic + Identifier: music + TestFiles: ^SupportDir|Content/ra/v2/scores.mix + Sources: allied, soviet, tfd, ra-steam, ra-origin, cncr-steam, cncr-origin + ContentPackage@movies-allied: + Title: modcontent-package-allied + Identifier: movies-allied + TestFiles: ^SupportDir|Content/ra/v2/movies/aagun.vqa, ^SupportDir|Content/ra/v2/movies/aftrmath.vqa, ^SupportDir|Content/ra/v2/movies/ally1.vqa, ^SupportDir|Content/ra/v2/movies/ally10.vqa, ^SupportDir|Content/ra/v2/movies/ally10b.vqa, ^SupportDir|Content/ra/v2/movies/ally11.vqa, ^SupportDir|Content/ra/v2/movies/ally12.vqa, ^SupportDir|Content/ra/v2/movies/ally14.vqa, ^SupportDir|Content/ra/v2/movies/ally2.vqa, ^SupportDir|Content/ra/v2/movies/ally4.vqa, ^SupportDir|Content/ra/v2/movies/ally5.vqa, ^SupportDir|Content/ra/v2/movies/ally6.vqa, ^SupportDir|Content/ra/v2/movies/ally8.vqa, ^SupportDir|Content/ra/v2/movies/ally9.vqa, ^SupportDir|Content/ra/v2/movies/allyend.vqa, ^SupportDir|Content/ra/v2/movies/allymorf.vqa, ^SupportDir|Content/ra/v2/movies/apcescpe.vqa, ^SupportDir|Content/ra/v2/movies/assess.vqa, ^SupportDir|Content/ra/v2/movies/battle.vqa, ^SupportDir|Content/ra/v2/movies/binoc.vqa, ^SupportDir|Content/ra/v2/movies/bmap.vqa, ^SupportDir|Content/ra/v2/movies/brdgtilt.vqa, ^SupportDir|Content/ra/v2/movies/crontest.vqa, ^SupportDir|Content/ra/v2/movies/cronfail.vqa, ^SupportDir|Content/ra/v2/movies/destroyr.vqa, ^SupportDir|Content/ra/v2/movies/dud.vqa, ^SupportDir|Content/ra/v2/movies/elevator.vqa, ^SupportDir|Content/ra/v2/movies/flare.vqa, ^SupportDir|Content/ra/v2/movies/frozen.vqa, ^SupportDir|Content/ra/v2/movies/grvestne.vqa, ^SupportDir|Content/ra/v2/movies/landing.vqa, ^SupportDir|Content/ra/v2/movies/masasslt.vqa, ^SupportDir|Content/ra/v2/movies/mcv.vqa, ^SupportDir|Content/ra/v2/movies/mcv_land.vqa, ^SupportDir|Content/ra/v2/movies/montpass.vqa, ^SupportDir|Content/ra/v2/movies/oildrum.vqa, ^SupportDir|Content/ra/v2/movies/overrun.vqa, ^SupportDir|Content/ra/v2/movies/prolog.vqa, ^SupportDir|Content/ra/v2/movies/redintro.vqa, ^SupportDir|Content/ra/v2/movies/shipsink.vqa, ^SupportDir|Content/ra/v2/movies/shorbom1.vqa, ^SupportDir|Content/ra/v2/movies/shorbom2.vqa, ^SupportDir|Content/ra/v2/movies/shorbomb.vqa, ^SupportDir|Content/ra/v2/movies/snowbomb.vqa, ^SupportDir|Content/ra/v2/movies/soviet1.vqa, ^SupportDir|Content/ra/v2/movies/sovtstar.vqa, ^SupportDir|Content/ra/v2/movies/spy.vqa, ^SupportDir|Content/ra/v2/movies/tanya1.vqa, ^SupportDir|Content/ra/v2/movies/tanya2.vqa, ^SupportDir|Content/ra/v2/movies/toofar.vqa, ^SupportDir|Content/ra/v2/movies/trinity.vqa + Sources: allied, tfd, ra-steam, ra-origin, cncr-steam, cncr-origin + ContentPackage@movies-soviet: + Title: modcontent-package-soviet + Identifier: movies-soviet + TestFiles: ^SupportDir|Content/ra/v2/movies/aagun.vqa, ^SupportDir|Content/ra/v2/movies/cronfail.vqa, ^SupportDir|Content/ra/v2/movies/airfield.vqa, ^SupportDir|Content/ra/v2/movies/ally1.vqa, ^SupportDir|Content/ra/v2/movies/allymorf.vqa, ^SupportDir|Content/ra/v2/movies/averted.vqa, ^SupportDir|Content/ra/v2/movies/beachead.vqa, ^SupportDir|Content/ra/v2/movies/bmap.vqa, ^SupportDir|Content/ra/v2/movies/bombrun.vqa, ^SupportDir|Content/ra/v2/movies/countdwn.vqa, ^SupportDir|Content/ra/v2/movies/double.vqa, ^SupportDir|Content/ra/v2/movies/dpthchrg.vqa, ^SupportDir|Content/ra/v2/movies/execute.vqa, ^SupportDir|Content/ra/v2/movies/flare.vqa, ^SupportDir|Content/ra/v2/movies/landing.vqa, ^SupportDir|Content/ra/v2/movies/mcvbrdge.vqa, ^SupportDir|Content/ra/v2/movies/mig.vqa, ^SupportDir|Content/ra/v2/movies/movingin.vqa, ^SupportDir|Content/ra/v2/movies/mtnkfact.vqa, ^SupportDir|Content/ra/v2/movies/nukestok.vqa, ^SupportDir|Content/ra/v2/movies/onthprwl.vqa, ^SupportDir|Content/ra/v2/movies/periscop.vqa, ^SupportDir|Content/ra/v2/movies/prolog.vqa, ^SupportDir|Content/ra/v2/movies/radrraid.vqa, ^SupportDir|Content/ra/v2/movies/redintro.vqa, ^SupportDir|Content/ra/v2/movies/search.vqa, ^SupportDir|Content/ra/v2/movies/sfrozen.vqa, ^SupportDir|Content/ra/v2/movies/sitduck.vqa, ^SupportDir|Content/ra/v2/movies/slntsrvc.vqa, ^SupportDir|Content/ra/v2/movies/snowbomb.vqa, ^SupportDir|Content/ra/v2/movies/snstrafe.vqa, ^SupportDir|Content/ra/v2/movies/sovbatl.vqa, ^SupportDir|Content/ra/v2/movies/sovcemet.vqa, ^SupportDir|Content/ra/v2/movies/sovfinal.vqa, ^SupportDir|Content/ra/v2/movies/soviet1.vqa, ^SupportDir|Content/ra/v2/movies/soviet10.vqa, ^SupportDir|Content/ra/v2/movies/soviet11.vqa, ^SupportDir|Content/ra/v2/movies/soviet12.vqa, ^SupportDir|Content/ra/v2/movies/soviet13.vqa, ^SupportDir|Content/ra/v2/movies/soviet14.vqa, ^SupportDir|Content/ra/v2/movies/soviet2.vqa, ^SupportDir|Content/ra/v2/movies/soviet3.vqa, ^SupportDir|Content/ra/v2/movies/soviet4.vqa, ^SupportDir|Content/ra/v2/movies/soviet5.vqa, ^SupportDir|Content/ra/v2/movies/soviet6.vqa, ^SupportDir|Content/ra/v2/movies/soviet7.vqa, ^SupportDir|Content/ra/v2/movies/soviet8.vqa, ^SupportDir|Content/ra/v2/movies/soviet9.vqa, ^SupportDir|Content/ra/v2/movies/sovmcv.vqa, ^SupportDir|Content/ra/v2/movies/sovtstar.vqa, ^SupportDir|Content/ra/v2/movies/spotter.vqa, ^SupportDir|Content/ra/v2/movies/strafe.vqa, ^SupportDir|Content/ra/v2/movies/take_off.vqa, ^SupportDir|Content/ra/v2/movies/tesla.vqa, ^SupportDir|Content/ra/v2/movies/v2rocket.vqa + Sources: soviet, tfd, ra-steam, ra-origin + ContentPackage@music-counterstrike: + Title: modcontent-package-counterstrikemusic + Identifier: music-counterstrike + TestFiles: ^SupportDir|Content/ra/v2/expand/araziod.aud, ^SupportDir|Content/ra/v2/expand/backstab.aud, ^SupportDir|Content/ra/v2/expand/chaos2.aud, ^SupportDir|Content/ra/v2/expand/shut_it.aud, ^SupportDir|Content/ra/v2/expand/2nd_hand.aud, ^SupportDir|Content/ra/v2/expand/twinmix1.aud, ^SupportDir|Content/ra/v2/expand/under3.aud, ^SupportDir|Content/ra/v2/expand/vr2.aud, + Sources: counterstrike, ra-steam, ra-origin, cncr-steam, cncr-origin + ContentPackage@music-aftermath: + Title: modcontent-package-aftermathmusic + Identifier: music-aftermath + TestFiles: ^SupportDir|Content/ra/v2/expand/await.aud, ^SupportDir|Content/ra/v2/expand/bog.aud, ^SupportDir|Content/ra/v2/expand/float_v2.aud, ^SupportDir|Content/ra/v2/expand/gloom.aud, ^SupportDir|Content/ra/v2/expand/grndwire.aud, ^SupportDir|Content/ra/v2/expand/rpt.aud, ^SupportDir|Content/ra/v2/expand/search.aud, ^SupportDir|Content/ra/v2/expand/traction.aud, ^SupportDir|Content/ra/v2/expand/wastelnd.aud + Sources: aftermath, ra-steam, ra-origin, cncr-steam, cncr-origin + Downloads: + racontent|installer/downloads.yaml + Sources: + racontent|installer/aftermath.yaml + racontent|installer/allies95.yaml + racontent|installer/cnc95.yaml + racontent|installer/counterstrike.yaml + racontent|installer/firstdecade.yaml + racontent|installer/origin.yaml + racontent|installer/soviet95.yaml + racontent|installer/steam.yaml + +SoundFormats: + +SpriteFormats: PngSheet + +TerrainFormat: DefaultTerrain + +SpriteSequenceFormat: DefaultSpriteSequence diff --git a/mods/ra/mod.yaml b/mods/ra/mod.yaml index 04f91af364..781c6fcfd8 100644 --- a/mods/ra/mod.yaml +++ b/mods/ra/mod.yaml @@ -7,37 +7,63 @@ Metadata: PackageFormats: Mix -FileSystem: DefaultFileSystem +FileSystem: ContentInstallerFileSystem Packages: - ~^SupportDir|Content/ra/v2/ - ~^SupportDir|Content/ra/v2/expand - ~^SupportDir|Content/ra/v2/cnc - ~^SupportDir|Content/ra/v2/movies ^EngineDir $ra: ra ^EngineDir|mods/common: common - ~main.mix - ~conquer.mix - ~lores.mix: lores - ~hires.mix - ~local.mix - ~sounds.mix - ~speech.mix - ~allies.mix - ~russian.mix - ~temperat.mix - ~snow.mix - ~interior.mix - ~scores.mix - ~expand2.mix - ~hires1.mix - ~desert.mix - ~general.mix - ra|bits - ra|bits/desert + ~^SupportDir|Content/ra/v2/: content ra|scripts common|scripts ra|uibits + ContentPackages: + content|allies.mix + content|conquer.mix + content|interior.mix + content|lores.mix: lores + content|hires.mix + content|local.mix + content|russian.mix + content|snow.mix + content|sounds.mix + content|speech.mix + content|temperat.mix + content|expand + content|expand/expand2.mix + content|expand/lores1.mix + content|expand/hires1.mix + content|cnc/desert.mix + ~content|movies + ~content|scores.mix + ~content|general.mix + ra|bits + ra|bits/desert + ContentFiles: + content|expand/chrotnk1.aud + content|expand/fixit1.aud + content|expand/jburn1.aud + content|expand/jchrge1.aud + content|expand/jcrisp1.aud + content|expand/jdance1.aud + content|expand/jjuice1.aud + content|expand/jjump1.aud + content|expand/jlight1.aud + content|expand/jpower1.aud + content|expand/jshock1.aud + content|expand/jyes1.aud + content|expand/madchrg2.aud + content|expand/madexplo.aud + content|expand/mboss1.aud + content|expand/mhear1.aud + content|expand/mhotdig1.aud + content|expand/mhowdy1.aud + content|expand/mhuh1.aud + content|expand/mlaff1.aud + content|expand/mrise1.aud + content|expand/mwrench1.aud + content|expand/myeehaw1.aud + content|expand/myes1.aud + ContentInstallerMod: ra-content MapFolders: ra|maps: System @@ -282,69 +308,5 @@ GameSpeeds: Timestep: 20 OrderLatency: 6 -ModContent: - InstallPromptMessage: modcontent-installprompt - QuickDownload: quickinstall - HeaderMessage: modcontent-header - Packages: - ContentPackage@base: - Title: modcontent-package-basefiles - Identifier: base - TestFiles: ^SupportDir|Content/ra/v2/allies.mix, ^SupportDir|Content/ra/v2/conquer.mix, ^SupportDir|Content/ra/v2/interior.mix, ^SupportDir|Content/ra/v2/hires.mix, ^SupportDir|Content/ra/v2/lores.mix, ^SupportDir|Content/ra/v2/local.mix, ^SupportDir|Content/ra/v2/speech.mix, ^SupportDir|Content/ra/v2/russian.mix, ^SupportDir|Content/ra/v2/snow.mix, ^SupportDir|Content/ra/v2/sounds.mix, ^SupportDir|Content/ra/v2/temperat.mix - Sources: allied, soviet, tfd, ra-steam, ra-origin, cncr-steam, cncr-origin - Required: true - Download: basefiles - ContentPackage@aftermathbase: - Title: modcontent-package-aftermathfiles - Identifier: aftermathbase - TestFiles: ^SupportDir|Content/ra/v2/expand/expand2.mix, ^SupportDir|Content/ra/v2/expand/hires1.mix, ^SupportDir|Content/ra/v2/expand/lores1.mix, ^SupportDir|Content/ra/v2/expand/chrotnk1.aud, ^SupportDir|Content/ra/v2/expand/fixit1.aud, ^SupportDir|Content/ra/v2/expand/jburn1.aud, ^SupportDir|Content/ra/v2/expand/jchrge1.aud, ^SupportDir|Content/ra/v2/expand/jcrisp1.aud, ^SupportDir|Content/ra/v2/expand/jdance1.aud, ^SupportDir|Content/ra/v2/expand/jjuice1.aud, ^SupportDir|Content/ra/v2/expand/jjump1.aud, ^SupportDir|Content/ra/v2/expand/jlight1.aud, ^SupportDir|Content/ra/v2/expand/jpower1.aud, ^SupportDir|Content/ra/v2/expand/jshock1.aud, ^SupportDir|Content/ra/v2/expand/jyes1.aud, ^SupportDir|Content/ra/v2/expand/madchrg2.aud, ^SupportDir|Content/ra/v2/expand/madexplo.aud, ^SupportDir|Content/ra/v2/expand/mboss1.aud, ^SupportDir|Content/ra/v2/expand/mhear1.aud, ^SupportDir|Content/ra/v2/expand/mhotdig1.aud, ^SupportDir|Content/ra/v2/expand/mhowdy1.aud, ^SupportDir|Content/ra/v2/expand/mhuh1.aud, ^SupportDir|Content/ra/v2/expand/mlaff1.aud, ^SupportDir|Content/ra/v2/expand/mrise1.aud, ^SupportDir|Content/ra/v2/expand/mwrench1.aud, ^SupportDir|Content/ra/v2/expand/myeehaw1.aud, ^SupportDir|Content/ra/v2/expand/myes1.aud - Sources: aftermath, tfd, ra-steam, ra-origin, cncr-steam, cncr-origin - Required: true - Download: aftermath - ContentPackage@cncdesert: - Title: modcontent-package-deserttileset - Identifier: cncdesert - TestFiles: ^SupportDir|Content/ra/v2/cnc/desert.mix - Sources: tfd, cnc-steam, cnc-origin, cnc95, cncr-steam, cncr-origin - Required: true - Download: cncdesert - ContentPackage@music: - Title: modcontent-package-basemusic - Identifier: music - TestFiles: ^SupportDir|Content/ra/v2/scores.mix - Sources: allied, soviet, tfd, ra-steam, ra-origin, cncr-steam, cncr-origin - ContentPackage@movies-allied: - Title: modcontent-package-allied - Identifier: movies-allied - TestFiles: ^SupportDir|Content/ra/v2/movies/aagun.vqa, ^SupportDir|Content/ra/v2/movies/aftrmath.vqa, ^SupportDir|Content/ra/v2/movies/ally1.vqa, ^SupportDir|Content/ra/v2/movies/ally10.vqa, ^SupportDir|Content/ra/v2/movies/ally10b.vqa, ^SupportDir|Content/ra/v2/movies/ally11.vqa, ^SupportDir|Content/ra/v2/movies/ally12.vqa, ^SupportDir|Content/ra/v2/movies/ally14.vqa, ^SupportDir|Content/ra/v2/movies/ally2.vqa, ^SupportDir|Content/ra/v2/movies/ally4.vqa, ^SupportDir|Content/ra/v2/movies/ally5.vqa, ^SupportDir|Content/ra/v2/movies/ally6.vqa, ^SupportDir|Content/ra/v2/movies/ally8.vqa, ^SupportDir|Content/ra/v2/movies/ally9.vqa, ^SupportDir|Content/ra/v2/movies/allyend.vqa, ^SupportDir|Content/ra/v2/movies/allymorf.vqa, ^SupportDir|Content/ra/v2/movies/apcescpe.vqa, ^SupportDir|Content/ra/v2/movies/assess.vqa, ^SupportDir|Content/ra/v2/movies/battle.vqa, ^SupportDir|Content/ra/v2/movies/binoc.vqa, ^SupportDir|Content/ra/v2/movies/bmap.vqa, ^SupportDir|Content/ra/v2/movies/brdgtilt.vqa, ^SupportDir|Content/ra/v2/movies/crontest.vqa, ^SupportDir|Content/ra/v2/movies/cronfail.vqa, ^SupportDir|Content/ra/v2/movies/destroyr.vqa, ^SupportDir|Content/ra/v2/movies/dud.vqa, ^SupportDir|Content/ra/v2/movies/elevator.vqa, ^SupportDir|Content/ra/v2/movies/flare.vqa, ^SupportDir|Content/ra/v2/movies/frozen.vqa, ^SupportDir|Content/ra/v2/movies/grvestne.vqa, ^SupportDir|Content/ra/v2/movies/landing.vqa, ^SupportDir|Content/ra/v2/movies/masasslt.vqa, ^SupportDir|Content/ra/v2/movies/mcv.vqa, ^SupportDir|Content/ra/v2/movies/mcv_land.vqa, ^SupportDir|Content/ra/v2/movies/montpass.vqa, ^SupportDir|Content/ra/v2/movies/oildrum.vqa, ^SupportDir|Content/ra/v2/movies/overrun.vqa, ^SupportDir|Content/ra/v2/movies/prolog.vqa, ^SupportDir|Content/ra/v2/movies/redintro.vqa, ^SupportDir|Content/ra/v2/movies/shipsink.vqa, ^SupportDir|Content/ra/v2/movies/shorbom1.vqa, ^SupportDir|Content/ra/v2/movies/shorbom2.vqa, ^SupportDir|Content/ra/v2/movies/shorbomb.vqa, ^SupportDir|Content/ra/v2/movies/snowbomb.vqa, ^SupportDir|Content/ra/v2/movies/soviet1.vqa, ^SupportDir|Content/ra/v2/movies/sovtstar.vqa, ^SupportDir|Content/ra/v2/movies/spy.vqa, ^SupportDir|Content/ra/v2/movies/tanya1.vqa, ^SupportDir|Content/ra/v2/movies/tanya2.vqa, ^SupportDir|Content/ra/v2/movies/toofar.vqa, ^SupportDir|Content/ra/v2/movies/trinity.vqa - Sources: allied, tfd, ra-steam, ra-origin, cncr-steam, cncr-origin - ContentPackage@movies-soviet: - Title: modcontent-package-soviet - Identifier: movies-soviet - TestFiles: ^SupportDir|Content/ra/v2/movies/aagun.vqa, ^SupportDir|Content/ra/v2/movies/cronfail.vqa, ^SupportDir|Content/ra/v2/movies/airfield.vqa, ^SupportDir|Content/ra/v2/movies/ally1.vqa, ^SupportDir|Content/ra/v2/movies/allymorf.vqa, ^SupportDir|Content/ra/v2/movies/averted.vqa, ^SupportDir|Content/ra/v2/movies/beachead.vqa, ^SupportDir|Content/ra/v2/movies/bmap.vqa, ^SupportDir|Content/ra/v2/movies/bombrun.vqa, ^SupportDir|Content/ra/v2/movies/countdwn.vqa, ^SupportDir|Content/ra/v2/movies/double.vqa, ^SupportDir|Content/ra/v2/movies/dpthchrg.vqa, ^SupportDir|Content/ra/v2/movies/execute.vqa, ^SupportDir|Content/ra/v2/movies/flare.vqa, ^SupportDir|Content/ra/v2/movies/landing.vqa, ^SupportDir|Content/ra/v2/movies/mcvbrdge.vqa, ^SupportDir|Content/ra/v2/movies/mig.vqa, ^SupportDir|Content/ra/v2/movies/movingin.vqa, ^SupportDir|Content/ra/v2/movies/mtnkfact.vqa, ^SupportDir|Content/ra/v2/movies/nukestok.vqa, ^SupportDir|Content/ra/v2/movies/onthprwl.vqa, ^SupportDir|Content/ra/v2/movies/periscop.vqa, ^SupportDir|Content/ra/v2/movies/prolog.vqa, ^SupportDir|Content/ra/v2/movies/radrraid.vqa, ^SupportDir|Content/ra/v2/movies/redintro.vqa, ^SupportDir|Content/ra/v2/movies/search.vqa, ^SupportDir|Content/ra/v2/movies/sfrozen.vqa, ^SupportDir|Content/ra/v2/movies/sitduck.vqa, ^SupportDir|Content/ra/v2/movies/slntsrvc.vqa, ^SupportDir|Content/ra/v2/movies/snowbomb.vqa, ^SupportDir|Content/ra/v2/movies/snstrafe.vqa, ^SupportDir|Content/ra/v2/movies/sovbatl.vqa, ^SupportDir|Content/ra/v2/movies/sovcemet.vqa, ^SupportDir|Content/ra/v2/movies/sovfinal.vqa, ^SupportDir|Content/ra/v2/movies/soviet1.vqa, ^SupportDir|Content/ra/v2/movies/soviet10.vqa, ^SupportDir|Content/ra/v2/movies/soviet11.vqa, ^SupportDir|Content/ra/v2/movies/soviet12.vqa, ^SupportDir|Content/ra/v2/movies/soviet13.vqa, ^SupportDir|Content/ra/v2/movies/soviet14.vqa, ^SupportDir|Content/ra/v2/movies/soviet2.vqa, ^SupportDir|Content/ra/v2/movies/soviet3.vqa, ^SupportDir|Content/ra/v2/movies/soviet4.vqa, ^SupportDir|Content/ra/v2/movies/soviet5.vqa, ^SupportDir|Content/ra/v2/movies/soviet6.vqa, ^SupportDir|Content/ra/v2/movies/soviet7.vqa, ^SupportDir|Content/ra/v2/movies/soviet8.vqa, ^SupportDir|Content/ra/v2/movies/soviet9.vqa, ^SupportDir|Content/ra/v2/movies/sovmcv.vqa, ^SupportDir|Content/ra/v2/movies/sovtstar.vqa, ^SupportDir|Content/ra/v2/movies/spotter.vqa, ^SupportDir|Content/ra/v2/movies/strafe.vqa, ^SupportDir|Content/ra/v2/movies/take_off.vqa, ^SupportDir|Content/ra/v2/movies/tesla.vqa, ^SupportDir|Content/ra/v2/movies/v2rocket.vqa - Sources: soviet, tfd, ra-steam, ra-origin - ContentPackage@music-counterstrike: - Title: modcontent-package-counterstrikemusic - Identifier: music-counterstrike - TestFiles: ^SupportDir|Content/ra/v2/expand/araziod.aud, ^SupportDir|Content/ra/v2/expand/backstab.aud, ^SupportDir|Content/ra/v2/expand/chaos2.aud, ^SupportDir|Content/ra/v2/expand/shut_it.aud, ^SupportDir|Content/ra/v2/expand/2nd_hand.aud, ^SupportDir|Content/ra/v2/expand/twinmix1.aud, ^SupportDir|Content/ra/v2/expand/under3.aud, ^SupportDir|Content/ra/v2/expand/vr2.aud, - Sources: counterstrike, ra-steam, ra-origin, cncr-steam, cncr-origin - ContentPackage@music-aftermath: - Title: modcontent-package-aftermathmusic - Identifier: music-aftermath - TestFiles: ^SupportDir|Content/ra/v2/expand/await.aud, ^SupportDir|Content/ra/v2/expand/bog.aud, ^SupportDir|Content/ra/v2/expand/float_v2.aud, ^SupportDir|Content/ra/v2/expand/gloom.aud, ^SupportDir|Content/ra/v2/expand/grndwire.aud, ^SupportDir|Content/ra/v2/expand/rpt.aud, ^SupportDir|Content/ra/v2/expand/search.aud, ^SupportDir|Content/ra/v2/expand/traction.aud, ^SupportDir|Content/ra/v2/expand/wastelnd.aud - Sources: aftermath, ra-steam, ra-origin, cncr-steam, cncr-origin - Downloads: - ra|installer/downloads.yaml - Sources: - ra|installer/aftermath.yaml - ra|installer/allies95.yaml - ra|installer/cnc95.yaml - ra|installer/counterstrike.yaml - ra|installer/firstdecade.yaml - ra|installer/origin.yaml - ra|installer/soviet95.yaml - ra|installer/steam.yaml - Translation: ra|languages/modcontent/en.ftl - DiscordService: ApplicationId: 699222659766026240 diff --git a/mods/ts/installer/downloads.yaml b/mods/ts-content/installer/downloads.yaml similarity index 100% rename from mods/ts/installer/downloads.yaml rename to mods/ts-content/installer/downloads.yaml diff --git a/mods/ts/installer/firestorm.yaml b/mods/ts-content/installer/firestorm.yaml similarity index 100% rename from mods/ts/installer/firestorm.yaml rename to mods/ts-content/installer/firestorm.yaml diff --git a/mods/ts/installer/firstdecade.yaml b/mods/ts-content/installer/firstdecade.yaml similarity index 100% rename from mods/ts/installer/firstdecade.yaml rename to mods/ts-content/installer/firstdecade.yaml diff --git a/mods/ts/installer/origin.yaml b/mods/ts-content/installer/origin.yaml similarity index 100% rename from mods/ts/installer/origin.yaml rename to mods/ts-content/installer/origin.yaml diff --git a/mods/ts/installer/steam.yaml b/mods/ts-content/installer/steam.yaml similarity index 100% rename from mods/ts/installer/steam.yaml rename to mods/ts-content/installer/steam.yaml diff --git a/mods/ts/installer/tibsun.yaml b/mods/ts-content/installer/tibsun.yaml similarity index 100% rename from mods/ts/installer/tibsun.yaml rename to mods/ts-content/installer/tibsun.yaml diff --git a/mods/ts/languages/modcontent/en.ftl b/mods/ts-content/languages/chrome/en.ftl similarity index 100% rename from mods/ts/languages/modcontent/en.ftl rename to mods/ts-content/languages/chrome/en.ftl diff --git a/mods/ts-content/mod.yaml b/mods/ts-content/mod.yaml new file mode 100644 index 0000000000..b76d1f2865 --- /dev/null +++ b/mods/ts-content/mod.yaml @@ -0,0 +1,114 @@ +Metadata: + Title: mod-title + Version: {DEV_VERSION} + Hidden: true + +FileSystem: DefaultFileSystem + Packages: + ^EngineDir + ^EngineDir|mods/common-content: content + ^EngineDir|mods/common: common + $ts-content: tscontent + +Rules: + content|rules.yaml + +Cursors: + content|cursors.yaml + +Chrome: + content|chrome.yaml + +Assemblies: OpenRA.Mods.Common.dll, OpenRA.Mods.Cnc.dll + +ChromeLayout: + content|content.yaml + +Notifications: + content|notifications.yaml + +LoadScreen: ModContentLoadScreen + Image: ^EngineDir|mods/common-content/chrome.png + Image2x: ^EngineDir|mods/common-content/chrome-2x.png + Image3x: ^EngineDir|mods/common-content/chrome-3x.png + +ChromeMetrics: + common|metrics.yaml + content|metrics.yaml + +Translations: + common|languages/en.ftl + content|languages/en.ftl + content|languages/chrome/en.ftl + tscontent|languages/chrome/en.ftl + +Fonts: + Tiny: + Font: common|FreeSans.ttf + Size: 10 + Ascender: 8 + TinyBold: + Font: common|FreeSansBold.ttf + Size: 10 + Ascender: 8 + Regular: + Font: common|FreeSans.ttf + Size: 14 + Ascender: 11 + Bold: + Font: common|FreeSansBold.ttf + Size: 14 + Ascender: 11 + MediumBold: + Font: common|FreeSansBold.ttf + Size: 18 + Ascender: 14 + BigBold: + Font: common|FreeSansBold.ttf + Size: 24 + Ascender: 18 + +ModContent: + Mod: ts + QuickDownload: quickinstall + Packages: + ContentPackage@tibsun: + Title: modcontent-package-basefiles + Identifier: tibsun + TestFiles: ^SupportDir|Content/ts/cache.mix, ^SupportDir|Content/ts/conquer.mix, ^SupportDir|Content/ts/isosnow.mix, ^SupportDir|Content/ts/isotemp.mix, ^SupportDir|Content/ts/local.mix, ^SupportDir|Content/ts/sidec01.mix, ^SupportDir|Content/ts/sidec02.mix, ^SupportDir|Content/ts/sno.mix, ^SupportDir|Content/ts/snow.mix, ^SupportDir|Content/ts/sounds.mix, ^SupportDir|Content/ts/speech01.mix, ^SupportDir|Content/ts/tem.mix, ^SupportDir|Content/ts/temperat.mix + Sources: tibsun, tfd, steam, origin + Required: true + Download: basefiles + ContentPackage@tibsun-music: + Title: modcontent-package-basemusic + Identifier: tibsun-music + TestFiles: ^SupportDir|Content/ts/scores.mix + Sources: tibsun, tfd, steam, origin + ContentPackage@fstorm: + Title: modcontent-package-firestormfiles + Identifier: fstorm + TestFiles: ^SupportDir|Content/ts/firestorm/e01sc01.mix, ^SupportDir|Content/ts/firestorm/e01sc02.mix, ^SupportDir|Content/ts/firestorm/e01vox01.mix, ^SupportDir|Content/ts/firestorm/e01vox02.mix + Sources: tfd, steam, origin, fstorm + Required: true + Download: fstorm + ContentPackage@fstorm-music: + Title: modcontent-package-firestormmusic + Identifier: fstorm-music + Sources: tfd, steam, origin, fstorm + TestFiles: ^SupportDir|Content/ts/firestorm/scores01.mix + Downloads: + tscontent|installer/downloads.yaml + Sources: + tscontent|installer/firestorm.yaml + tscontent|installer/firstdecade.yaml + tscontent|installer/steam.yaml + tscontent|installer/origin.yaml + tscontent|installer/tibsun.yaml + +SoundFormats: + +SpriteFormats: PngSheet + +TerrainFormat: DefaultTerrain + +SpriteSequenceFormat: DefaultSpriteSequence diff --git a/mods/ts/mod.yaml b/mods/ts/mod.yaml index 57c3576108..08bf3217e1 100644 --- a/mods/ts/mod.yaml +++ b/mods/ts/mod.yaml @@ -7,49 +7,39 @@ Metadata: PackageFormats: Mix -FileSystem: DefaultFileSystem +FileSystem: ContentInstallerFileSystem Packages: - ~^SupportDir|Content/ts - ~^SupportDir|Content/ts/firestorm ^EngineDir $ts: ts ^EngineDir|mods/common: common - - # Tiberian Sun - ~scores.mix - ~sidenc01.mix - ~sidenc02.mix - ~e01scd01.mix - ~e01scd02.mix - ~movies01.mix - ~movies02.mix - ~sidecd01.mix - ~sidecd02.mix - ~cache.mix - ~conquer.mix - ~isosnow.mix - ~isotemp.mix - ~local.mix - ~sidec01.mix: sidebar-gdi - ~sidec02.mix: sidebar-nod - ~sno.mix - ~snow.mix - ~sounds.mix - ~speech01.mix: speech-gdi - ~speech02.mix: speech-nod - ~tem.mix - ~temperat.mix - # Firestorm - ~scores01.mix - ~expand01.mix - ~sounds01.mix - ~e01sc01.mix - ~e01sc02.mix - ~e01vox01.mix - ~e01vox02.mix - ~ecache01.mix - ts|bits + ~^SupportDir|Content/ts: content ts|uibits + ContentPackages: + content|cache.mix + content|conquer.mix + content|isosnow.mix + content|isotemp.mix + content|local.mix + content|sidec01.mix: sidebar-gdi + content|sidec02.mix: sidebar-nod + content|sno.mix + content|snow.mix + content|sounds.mix + content|speech01.mix: speech-gdi + content|speech02.mix: speech-nod + content|tem.mix + content|temperat.mix + ~content|scores.mix + content|firestorm + content|firestorm/sounds01.mix + content|firestorm/e01sc01.mix + content|firestorm/e01sc02.mix + content|firestorm/e01vox01.mix + content|firestorm/e01vox02.mix + content|firestorm/ecache01.mix + ~content|firestorm/scores01.mix + ts|bits + ContentInstallerMod: ts-content MapFolders: ts|maps: System @@ -313,44 +303,5 @@ GameSpeeds: Timestep: 20 OrderLatency: 6 -ModContent: - InstallPromptMessage: modcontent-installprompt - QuickDownload: quickinstall - HeaderMessage: modcontent-header - Packages: - ContentPackage@tibsun: - Title: modcontent-package-basefiles - Identifier: tibsun - TestFiles: ^SupportDir|Content/ts/cache.mix, ^SupportDir|Content/ts/conquer.mix, ^SupportDir|Content/ts/isosnow.mix, ^SupportDir|Content/ts/isotemp.mix, ^SupportDir|Content/ts/local.mix, ^SupportDir|Content/ts/sidec01.mix, ^SupportDir|Content/ts/sidec02.mix, ^SupportDir|Content/ts/sno.mix, ^SupportDir|Content/ts/snow.mix, ^SupportDir|Content/ts/sounds.mix, ^SupportDir|Content/ts/speech01.mix, ^SupportDir|Content/ts/tem.mix, ^SupportDir|Content/ts/temperat.mix - Sources: tibsun, tfd, steam, origin - Required: true - Download: basefiles - ContentPackage@tibsun-music: - Title: modcontent-package-basemusic - Identifier: tibsun-music - TestFiles: ^SupportDir|Content/ts/scores.mix - Sources: tibsun, tfd, steam, origin - ContentPackage@fstorm: - Title: modcontent-package-firestormfiles - Identifier: fstorm - TestFiles: ^SupportDir|Content/ts/firestorm/e01sc01.mix, ^SupportDir|Content/ts/firestorm/e01sc02.mix, ^SupportDir|Content/ts/firestorm/e01vox01.mix, ^SupportDir|Content/ts/firestorm/e01vox02.mix - Sources: tfd, steam, origin, fstorm - Required: true - Download: fstorm - ContentPackage@fstorm-music: - Title: modcontent-package-firestormmusic - Identifier: fstorm-music - Sources: tfd, steam, origin, fstorm - TestFiles: ^SupportDir|Content/ts/firestorm/scores01.mix - Downloads: - ts|installer/downloads.yaml - Sources: - ts|installer/firestorm.yaml - ts|installer/firstdecade.yaml - ts|installer/steam.yaml - ts|installer/origin.yaml - ts|installer/tibsun.yaml - Translation: ts|languages/modcontent/en.ftl - DiscordService: ApplicationId: 712713986558394399