diff --git a/OpenRA.FileFormats/Filesystem/FileSystem.cs b/OpenRA.FileFormats/Filesystem/FileSystem.cs index b3ef264788..e6457c48d3 100644 --- a/OpenRA.FileFormats/Filesystem/FileSystem.cs +++ b/OpenRA.FileFormats/Filesystem/FileSystem.cs @@ -19,7 +19,7 @@ namespace OpenRA.FileFormats public static class FileSystem { static List mountedFolders = new List(); - public static string SpecialPackageRoot = ""; + public static string SupportDir = "."; // Default to "current dir" if we aren't told otherwise static Cache> allFiles = new Cache>( _ => new List() ); @@ -72,12 +72,13 @@ namespace OpenRA.FileFormats public static void Mount(string name) { + var start = name; var optional = name.StartsWith("~"); if (optional) name = name.Substring(1); - // paths starting with $ are relative to SpecialPackageRoot - if (name.StartsWith("$")) - name = SpecialPackageRoot+name.Substring(1); + // paths starting with ^ are relative to the support dir + if (name.StartsWith("^")) + name = FileSystem.SupportDir+name.Substring(1); var a = (Action)(() => FileSystem.MountInner(OpenPackage(name))); diff --git a/OpenRA.Game/Game.cs b/OpenRA.Game/Game.cs index f897b45a4f..14c5404c52 100755 --- a/OpenRA.Game/Game.cs +++ b/OpenRA.Game/Game.cs @@ -225,7 +225,7 @@ namespace OpenRA + Path.DirectorySeparatorChar + "OpenRA"; SupportDir = args.GetValue("SupportDir", defaultSupport); - FileSystem.SpecialPackageRoot = args.GetValue("SpecialPackageRoot", ""); + FileSystem.SupportDir = SupportDir; Utilities = new Utilities(args.GetValue("UtilityPath", "OpenRA.Utility.exe")); diff --git a/OpenRA.Mods.RA/Widgets/Delegates/GameInitDelegate.cs b/OpenRA.Mods.RA/Widgets/Delegates/GameInitDelegate.cs index d78c7e4859..931d1de496 100755 --- a/OpenRA.Mods.RA/Widgets/Delegates/GameInitDelegate.cs +++ b/OpenRA.Mods.RA/Widgets/Delegates/GameInitDelegate.cs @@ -101,7 +101,7 @@ namespace OpenRA.Mods.RA.Widgets.Delegates if (Info.InstallMode != "ra") ShowDownloadError(window, "Installing from CD not supported"); - else if (InstallRAPackages(window, path, FileSystem.SpecialPackageRoot+Info.PackagePath)) + else if (InstallRAPackages(window, path, Info.ResolvedPackagePath)) Game.RunAfterTick(ContinueLoading); } @@ -130,7 +130,7 @@ namespace OpenRA.Mods.RA.Widgets.Delegates status.GetText = () => "Extracting..."; progress.Indeterminate = true; - if (ExtractZip(window, file, FileSystem.SpecialPackageRoot+Info.PackagePath)) + if (ExtractZip(window, file, Info.ResolvedPackagePath)) Game.RunAfterTick(ContinueLoading); } diff --git a/OpenRA.Mods.RA/Widgets/GameInitInfoWidget.cs b/OpenRA.Mods.RA/Widgets/GameInitInfoWidget.cs index 9e00246f5b..4f0b829d35 100755 --- a/OpenRA.Mods.RA/Widgets/GameInitInfoWidget.cs +++ b/OpenRA.Mods.RA/Widgets/GameInitInfoWidget.cs @@ -11,6 +11,7 @@ using OpenRA.Widgets; using System; using OpenRA.Mods.RA.Widgets.Delegates; +using System.IO; namespace OpenRA.Mods.RA.Widgets { @@ -21,6 +22,8 @@ namespace OpenRA.Mods.RA.Widgets public string PackageURL = ""; public string PackagePath = ""; public string InstallMode = ""; + + public string ResolvedPackagePath { get { return PackagePath.Replace("^", Game.SupportDir); } } public override void DrawInner() {} } diff --git a/mods/cnc/chrome/gameinit.yaml b/mods/cnc/chrome/gameinit.yaml index aaf8393e6b..0b4978bfe1 100644 --- a/mods/cnc/chrome/gameinit.yaml +++ b/mods/cnc/chrome/gameinit.yaml @@ -3,7 +3,7 @@ GameInitInfo@INIT_SETUP: TestFile: conquer.mix GameTitle: Command & Conquer PackageURL:http://open-ra.org/get-dependency.php?file=cnc-packages - PackagePath:mods/cnc/packages/ + PackagePath:^/packages/cnc InstallMode:cnc Delegate:GameInitDelegate diff --git a/mods/cnc/mod.yaml b/mods/cnc/mod.yaml index 1dfbdb6d6f..358a1c281f 100644 --- a/mods/cnc/mod.yaml +++ b/mods/cnc/mod.yaml @@ -6,10 +6,11 @@ Metadata: Standalone: true Folders: . - mods/cnc - mods/cnc/bits - mods/cnc/uibits - $mods/cnc/packages + ./mods/cnc + ./mods/cnc/bits + ./mods/cnc/uibits + ~./mods/cnc/packages + ~^/packages/cnc Packages: overrides.mix diff --git a/mods/ra/chrome/gameinit.yaml b/mods/ra/chrome/gameinit.yaml index 801d8753bc..ecb95c76e0 100644 --- a/mods/ra/chrome/gameinit.yaml +++ b/mods/ra/chrome/gameinit.yaml @@ -3,7 +3,7 @@ GameInitInfo@INIT_SETUP: TestFile: redalert.mix GameTitle: Red Alert PackageURL:http://open-ra.org/get-dependency.php?file=ra-packages - PackagePath:mods/ra/packages/ + PackagePath:^/packages/ra InstallMode:ra Delegate:GameInitDelegate diff --git a/mods/ra/mod.yaml b/mods/ra/mod.yaml index 29a184e8fd..b5e5556463 100644 --- a/mods/ra/mod.yaml +++ b/mods/ra/mod.yaml @@ -7,10 +7,11 @@ Metadata: Folders: . - mods/ra - mods/ra/bits - mods/ra/uibits - $mods/ra/packages + ./mods/ra + ./mods/ra/bits + ./mods/ra/uibits + ~./mods/ra/packages + ~^/packages/ra Packages: ~main.mix