Merge pull request #11522 from pchote/more-installers
Support content installation from "C&C The Ultimate Collection" (Origin versions). Closes #9479 Closes #11524
This commit is contained in:
@@ -17,11 +17,12 @@ namespace OpenRA
|
||||
{
|
||||
public class ModContent : IGlobalModData
|
||||
{
|
||||
public enum SourceType { Disc, Install }
|
||||
public class ModPackage
|
||||
{
|
||||
public readonly string Title;
|
||||
public readonly string[] TestFiles = { };
|
||||
public readonly string[] Discs = { };
|
||||
public readonly string[] Sources = { };
|
||||
public readonly bool Required;
|
||||
public readonly string Download;
|
||||
|
||||
@@ -37,14 +38,20 @@ namespace OpenRA
|
||||
}
|
||||
}
|
||||
|
||||
public class ModDisc
|
||||
public class ModSource
|
||||
{
|
||||
public readonly SourceType Type = SourceType.Disc;
|
||||
|
||||
// Used to find installation locations for SourceType.Install
|
||||
public readonly string RegistryKey;
|
||||
public readonly string RegistryValue;
|
||||
|
||||
public readonly string Title;
|
||||
public readonly Dictionary<string, string> IDFiles;
|
||||
|
||||
[FieldLoader.Ignore] public readonly List<MiniYamlNode> Install;
|
||||
|
||||
public ModDisc(MiniYaml yaml)
|
||||
public ModSource(MiniYaml yaml)
|
||||
{
|
||||
Title = yaml.Value;
|
||||
var installNode = yaml.Nodes.FirstOrDefault(n => n.Key == "Install");
|
||||
@@ -101,18 +108,18 @@ namespace OpenRA
|
||||
return downloads;
|
||||
}
|
||||
|
||||
[FieldLoader.LoadUsing("LoadDiscs")]
|
||||
public readonly Dictionary<string, ModDisc> Discs;
|
||||
[FieldLoader.LoadUsing("LoadSources")]
|
||||
public readonly Dictionary<string, ModSource> Sources;
|
||||
|
||||
static object LoadDiscs(MiniYaml yaml)
|
||||
static object LoadSources(MiniYaml yaml)
|
||||
{
|
||||
var discs = new Dictionary<string, ModDisc>();
|
||||
var discNode = yaml.Nodes.FirstOrDefault(n => n.Key == "Discs");
|
||||
if (discNode != null)
|
||||
foreach (var node in discNode.Value.Nodes)
|
||||
discs.Add(node.Key, new ModDisc(node.Value));
|
||||
var sources = new Dictionary<string, ModSource>();
|
||||
var sourceNode = yaml.Nodes.FirstOrDefault(n => n.Key == "Sources");
|
||||
if (sourceNode != null)
|
||||
foreach (var node in sourceNode.Value.Nodes)
|
||||
sources.Add(node.Key, new ModSource(node.Value));
|
||||
|
||||
return discs;
|
||||
return sources;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -47,6 +47,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
// List Panel
|
||||
readonly Widget listContainer;
|
||||
readonly ScrollPanelWidget listPanel;
|
||||
readonly Widget listHeaderTemplate;
|
||||
readonly LabelWidget listTemplate;
|
||||
readonly LabelWidget listLabel;
|
||||
|
||||
@@ -84,6 +85,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
listContainer.IsVisible = () => visible == Mode.List;
|
||||
|
||||
listPanel = listContainer.Get<ScrollPanelWidget>("LIST_PANEL");
|
||||
listHeaderTemplate = listPanel.Get("LIST_HEADER_TEMPLATE");
|
||||
listTemplate = listPanel.Get<LabelWidget>("LIST_TEMPLATE");
|
||||
listPanel.RemoveChildren();
|
||||
|
||||
@@ -104,48 +106,65 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
.Where(v => v.DriveType == DriveType.CDRom && v.IsReady)
|
||||
.Select(v => v.RootDirectory.FullName);
|
||||
|
||||
foreach (var kv in content.Discs)
|
||||
foreach (var kv in content.Sources)
|
||||
{
|
||||
message = "Searching for " + kv.Value.Title;
|
||||
|
||||
foreach (var volume in volumes)
|
||||
var path = FindSourcePath(kv.Value, volumes);
|
||||
if (path != null)
|
||||
{
|
||||
if (PathIsDiscMount(volume, kv.Value))
|
||||
var packages = content.Packages.Values
|
||||
.Where(p => p.Sources.Contains(kv.Key) && !p.IsInstalled())
|
||||
.Select(p => p.Title);
|
||||
|
||||
// Ignore disc if content is already installed
|
||||
if (packages.Any())
|
||||
{
|
||||
var packages = content.Packages.Values
|
||||
.Where(p => p.Discs.Contains(kv.Key) && !p.IsInstalled())
|
||||
.Select(p => p.Title);
|
||||
|
||||
// Ignore disc if content is already installed
|
||||
if (packages.Any())
|
||||
Game.RunAfterTick(() =>
|
||||
{
|
||||
Game.RunAfterTick(() =>
|
||||
{
|
||||
ShowList(kv.Value.Title, "The following content packages will be installed:", packages);
|
||||
ShowContinueCancel(() => InstallFromDisc(volume, kv.Value));
|
||||
});
|
||||
ShowList(kv.Value.Title, "The following content packages will be installed:", packages);
|
||||
ShowContinueCancel(() => InstallFromDisc(path, kv.Value));
|
||||
});
|
||||
|
||||
return;
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var discTitles = content.Packages.Values
|
||||
var sources = content.Packages.Values
|
||||
.Where(p => !p.IsInstalled())
|
||||
.SelectMany(p => p.Discs)
|
||||
.Select(d => content.Discs[d].Title)
|
||||
.SelectMany(p => p.Sources)
|
||||
.Select(d => content.Sources[d]);
|
||||
|
||||
var discs = sources
|
||||
.Where(s => s.Type == ModContent.SourceType.Disc)
|
||||
.Select(s => s.Title)
|
||||
.Distinct();
|
||||
|
||||
var options = new Dictionary<string, IEnumerable<string>>()
|
||||
{
|
||||
{ "Game Discs", discs },
|
||||
};
|
||||
|
||||
if (Platform.CurrentPlatform == PlatformType.Windows)
|
||||
{
|
||||
var installations = sources
|
||||
.Where(s => s.Type == ModContent.SourceType.Install)
|
||||
.Select(s => s.Title)
|
||||
.Distinct();
|
||||
|
||||
options.Add("Digital Installs", installations);
|
||||
}
|
||||
|
||||
Game.RunAfterTick(() =>
|
||||
{
|
||||
ShowList("Disc Content Not Found", "Please insert or mount one of the following discs and try again", discTitles);
|
||||
ShowList("Game Content Not Found", "Please insert or install one of the following content sources:", options);
|
||||
ShowBackRetry(DetectContentDisks);
|
||||
});
|
||||
}).Start();
|
||||
}
|
||||
|
||||
void InstallFromDisc(string path, ModContent.ModDisc disc)
|
||||
void InstallFromDisc(string path, ModContent.ModSource modSource)
|
||||
{
|
||||
var message = "";
|
||||
ShowProgressbar("Installing Content", () => message);
|
||||
@@ -157,7 +176,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
|
||||
try
|
||||
{
|
||||
foreach (var i in disc.Install)
|
||||
foreach (var i in modSource.Install)
|
||||
{
|
||||
switch (i.Key)
|
||||
{
|
||||
@@ -216,7 +235,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
}
|
||||
|
||||
default:
|
||||
Game.Debug("debug", "Unknown installation command {0} - ignoring", i.Key);
|
||||
Log.Write("debug", "Unknown installation command {0} - ignoring", i.Key);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -236,7 +255,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
Game.RunAfterTick(() =>
|
||||
{
|
||||
ShowMessage("Installation Failed", "Refer to install.log in the logs directory for details.");
|
||||
ShowBackRetry(() => InstallFromDisc(path, disc));
|
||||
ShowBackRetry(() => InstallFromDisc(path, modSource));
|
||||
});
|
||||
}
|
||||
}).Start();
|
||||
@@ -351,11 +370,36 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
}
|
||||
}
|
||||
|
||||
bool PathIsDiscMount(string path, ModContent.ModDisc disc)
|
||||
string FindSourcePath(ModContent.ModSource source, IEnumerable<string> volumes)
|
||||
{
|
||||
if (source.Type == ModContent.SourceType.Install)
|
||||
{
|
||||
if (source.RegistryKey == null)
|
||||
return null;
|
||||
|
||||
if (Platform.CurrentPlatform != PlatformType.Windows)
|
||||
return null;
|
||||
|
||||
var path = Microsoft.Win32.Registry.GetValue(source.RegistryKey, source.RegistryValue, null) as string;
|
||||
if (path == null)
|
||||
return null;
|
||||
|
||||
return IsValidSourcePath(path, source) ? path : null;
|
||||
}
|
||||
|
||||
if (source.Type == ModContent.SourceType.Disc)
|
||||
foreach (var volume in volumes)
|
||||
if (IsValidSourcePath(volume, source))
|
||||
return volume;
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
bool IsValidSourcePath(string path, ModContent.ModSource source)
|
||||
{
|
||||
try
|
||||
{
|
||||
foreach (var kv in disc.IDFiles)
|
||||
foreach (var kv in source.IDFiles)
|
||||
{
|
||||
var filePath = Path.Combine(path, kv.Key);
|
||||
if (!File.Exists(filePath))
|
||||
@@ -427,6 +471,40 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
panel.Bounds.Height = listContainer.Bounds.Height;
|
||||
}
|
||||
|
||||
void ShowList(string title, string message, Dictionary<string, IEnumerable<string>> groups)
|
||||
{
|
||||
visible = Mode.List;
|
||||
titleLabel.Text = title;
|
||||
listLabel.Text = message;
|
||||
|
||||
listPanel.RemoveChildren();
|
||||
|
||||
foreach (var kv in groups)
|
||||
{
|
||||
if (kv.Value.Any())
|
||||
{
|
||||
var groupTitle = kv.Key;
|
||||
var headerWidget = listHeaderTemplate.Clone();
|
||||
var headerTitleWidget = headerWidget.Get<LabelWidget>("LABEL");
|
||||
headerTitleWidget.GetText = () => groupTitle;
|
||||
listPanel.AddChild(headerWidget);
|
||||
}
|
||||
|
||||
foreach (var i in kv.Value)
|
||||
{
|
||||
var item = i;
|
||||
var labelWidget = (LabelWidget)listTemplate.Clone();
|
||||
labelWidget.GetText = () => item;
|
||||
listPanel.AddChild(labelWidget);
|
||||
}
|
||||
}
|
||||
|
||||
primaryButton.Bounds.Y += listContainer.Bounds.Height - panel.Bounds.Height;
|
||||
secondaryButton.Bounds.Y += listContainer.Bounds.Height - panel.Bounds.Height;
|
||||
panel.Bounds.Y -= (listContainer.Bounds.Height - panel.Bounds.Height) / 2;
|
||||
panel.Bounds.Height = listContainer.Bounds.Height;
|
||||
}
|
||||
|
||||
void ShowContinueCancel(Action continueAction)
|
||||
{
|
||||
primaryButton.OnClick = continueAction;
|
||||
|
||||
@@ -86,12 +86,12 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
var requiredWidget = container.Get<LabelWidget>("REQUIRED");
|
||||
requiredWidget.IsVisible = () => p.Value.Required;
|
||||
|
||||
var discWidget = container.Get<ImageWidget>("DISC");
|
||||
var discs = p.Value.Discs.Select(s => content.Discs[s].Title).Distinct();
|
||||
var discList = discs.JoinWith("\n");
|
||||
var isDiscAvailable = discs.Any();
|
||||
discWidget.GetTooltipText = () => discList;
|
||||
discWidget.IsVisible = () => isDiscAvailable;
|
||||
var sourceWidget = container.Get<ImageWidget>("DISC");
|
||||
var sources = p.Value.Sources.Select(s => content.Sources[s].Title).Distinct();
|
||||
var sourceList = sources.JoinWith("\n");
|
||||
var isSourceAvailable = sources.Any();
|
||||
sourceWidget.GetTooltipText = () => sourceList;
|
||||
sourceWidget.IsVisible = () => isSourceAvailable;
|
||||
|
||||
var installed = p.Value.IsInstalled();
|
||||
var downloadButton = container.Get<ButtonWidget>("DOWNLOAD");
|
||||
@@ -115,13 +115,13 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
|
||||
var requiresDiscWidget = container.Get<LabelWidget>("REQUIRES_DISC");
|
||||
requiresDiscWidget.IsVisible = () => !installed && !downloadEnabled;
|
||||
if (!isDiscAvailable)
|
||||
if (!isSourceAvailable)
|
||||
requiresDiscWidget.GetText = () => "Manual Install";
|
||||
|
||||
scrollPanel.AddChild(container);
|
||||
}
|
||||
|
||||
discAvailable = content.Packages.Values.Any(p => p.Discs.Any() && !p.IsInstalled());
|
||||
discAvailable = content.Packages.Values.Any(p => p.Sources.Any() && !p.IsInstalled());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
1118
mods/cnc/mod.yaml
1118
mods/cnc/mod.yaml
File diff suppressed because it is too large
Load Diff
@@ -207,15 +207,15 @@ ModContent:
|
||||
Packages:
|
||||
base: Base Game Files
|
||||
TestFiles: ^Content/d2k/BLOXBASE.R8, ^Content/d2k/BLOXBAT.R8, ^Content/d2k/BLOXBGBS.R8, ^Content/d2k/BLOXICE.R8, ^Content/d2k/BLOXTREE.R8, ^Content/d2k/BLOXWAST.R8, ^Content/d2k/DATA.R8, ^Content/d2k/SOUND.RS, ^Content/d2k/PALETTE.BIN
|
||||
Discs: d2k, d2k-linux
|
||||
Sources: d2k, d2k-linux
|
||||
Required: true
|
||||
Download: basefiles
|
||||
music: Game Music
|
||||
TestFiles: ^Content/d2k/Music/AMBUSH.AUD
|
||||
Discs: d2k, d2k-linux
|
||||
Sources: d2k, d2k-linux
|
||||
movies: Campaign Briefings
|
||||
TestFiles: ^Content/d2k/Movies/A_BR01_E.VQA
|
||||
Discs: d2k, d2k-linux
|
||||
Sources: d2k, d2k-linux
|
||||
Downloads:
|
||||
basefiles: Base Content
|
||||
MirrorList: http://www.openra.net/packages/d2k-103-mirrors.txt
|
||||
@@ -481,7 +481,7 @@ ModContent:
|
||||
^Content/d2k/GAMESFX/O_VSEL1.AUD: GAMESFX/O_VSEL1.AUD
|
||||
^Content/d2k/GAMESFX/O_VSEL2.AUD: GAMESFX/O_VSEL2.AUD
|
||||
^Content/d2k/GAMESFX/O_VSEL3.AUD: GAMESFX/O_VSEL3.AUD
|
||||
Discs:
|
||||
Sources:
|
||||
d2k: Dune 2000 (English)
|
||||
IDFiles:
|
||||
MUSIC/AMBUSH.AUD: bd5926a56a83bc0e49f96037e1f909014ac0772a
|
||||
|
||||
@@ -3,7 +3,7 @@ Background@CONTENT_PANEL:
|
||||
X: (WINDOW_RIGHT - WIDTH) / 2
|
||||
Y: (WINDOW_BOTTOM - HEIGHT) / 2
|
||||
Width: 500
|
||||
Height: 268
|
||||
Height: 290
|
||||
Background: panel-bg
|
||||
Children:
|
||||
Background@RULE:
|
||||
@@ -29,7 +29,7 @@ Background@CONTENT_PANEL:
|
||||
X: 30
|
||||
Y: 84
|
||||
Width: PARENT_RIGHT - 60
|
||||
Height: 115
|
||||
Height: 137
|
||||
TopBottomSpacing: 4
|
||||
ItemSpacing: 2
|
||||
BorderWidth: 2
|
||||
@@ -89,9 +89,9 @@ Background@CONTENT_PANEL:
|
||||
X: 30
|
||||
Y: PARENT_BOTTOM - 52
|
||||
Background: button-highlighted
|
||||
Width: 110
|
||||
Width: 200
|
||||
Height: 32
|
||||
Text: Detect Disc
|
||||
Text: Detect Disc or Installation
|
||||
Font: Bold
|
||||
Button@BACK_BUTTON:
|
||||
X: PARENT_RIGHT - 140
|
||||
@@ -230,7 +230,7 @@ Background@DISC_INSTALL_PANEL:
|
||||
Align: Center
|
||||
Container@LIST:
|
||||
Width: PARENT_RIGHT
|
||||
Height: 268
|
||||
Height: 338
|
||||
Visible: false
|
||||
Children:
|
||||
Label@LIST_MESSAGE:
|
||||
@@ -242,11 +242,31 @@ Background@DISC_INSTALL_PANEL:
|
||||
X: 30
|
||||
Y: 99
|
||||
Width: PARENT_RIGHT - 60
|
||||
Height: 100
|
||||
Height: 170
|
||||
TopBottomSpacing: 4
|
||||
ItemSpacing: 2
|
||||
BorderWidth: 2
|
||||
Children:
|
||||
Container@LIST_HEADER_TEMPLATE:
|
||||
X: 6
|
||||
Width: PARENT_RIGHT - 12 - 24
|
||||
Height: 14
|
||||
Children:
|
||||
Background@TOP_RULE:
|
||||
Width: PARENT_RIGHT
|
||||
Height: 1
|
||||
Background: panel-rule
|
||||
Label@LABEL:
|
||||
Y: 3
|
||||
Width: PARENT_RIGHT
|
||||
Height: 10
|
||||
Font: TinyBold
|
||||
Align: Center
|
||||
Background@BOTTOM_RULE:
|
||||
Y: 16
|
||||
Width: PARENT_RIGHT
|
||||
Height: 1
|
||||
Background: panel-rule
|
||||
Label@LIST_TEMPLATE:
|
||||
X: 6
|
||||
Width: PARENT_RIGHT - 16
|
||||
|
||||
205
mods/ra/mod.yaml
205
mods/ra/mod.yaml
@@ -9,6 +9,7 @@ RequiresMods:
|
||||
|
||||
Packages:
|
||||
~^Content/ra
|
||||
~^Content/ra/music
|
||||
.
|
||||
$ra: ra
|
||||
$cnc: cnc
|
||||
@@ -26,7 +27,6 @@ Packages:
|
||||
~snow.mix
|
||||
~interior.mix
|
||||
~scores.mix
|
||||
~scores-counterstrike.mix
|
||||
~movies1.mix
|
||||
~movies2.mix
|
||||
ra|bits
|
||||
@@ -229,26 +229,29 @@ Migrations:
|
||||
ModContent:
|
||||
InstallPromptMessage: Red Alert requires artwork and audio from the original game.\n\nQuick Install will automatically download this content (without music\nor videos) from a mirror of the 2008 Red Alert freeware release.\n\nAdvanced Install includes options for downloading the music and for\ncopying the videos and other content from an original game disc.
|
||||
QuickDownload: basefiles
|
||||
HeaderMessage: The original game content may be copied from an original game disc,\nor downloaded from an online mirror of the 2008 freeware release.
|
||||
HeaderMessage: Game content may be extracted from the original game discs or an\nexisting digital install. OpenRA can also download the base game\nfiles from an online mirror of the 2008 freeware release of RA.
|
||||
Packages:
|
||||
base: Base Game Files
|
||||
TestFiles: ^Content/ra/allies.mix, ^Content/ra/conquer.mix, ^Content/ra/interior.mix, ^Content/ra/redalert.mix, ^Content/ra/russian.mix, ^Content/ra/snow.mix, ^Content/ra/sounds.mix, ^Content/ra/temperat.mix
|
||||
Discs: allied, allied-linux, soviet, soviet-linux
|
||||
Sources: allied, allied-linux, soviet, soviet-linux, origin
|
||||
Required: true
|
||||
Download: basefiles
|
||||
music: Base Game Music
|
||||
TestFiles: ^Content/ra/scores.mix
|
||||
Discs: allied, allied-linux, soviet, soviet-linux
|
||||
Sources: allied, allied-linux, soviet, soviet-linux, origin
|
||||
Download: music
|
||||
movies-allied: Allied Campaign Briefings
|
||||
TestFiles: ^Content/ra/movies1.mix
|
||||
Discs: allied, allied-linux
|
||||
Sources: allied, allied-linux, origin
|
||||
movies-soviet: Soviet Campaign Briefings
|
||||
TestFiles: ^Content/ra/movies2.mix
|
||||
Discs: soviet, soviet-linux
|
||||
music-covertops: Counterstrike Music
|
||||
TestFiles: ^Content/ra/scores-counterstrike.mix
|
||||
Discs: counterstrike, counterstrike-linux
|
||||
Sources: soviet, soviet-linux, origin
|
||||
music-counterstrike: Counterstrike Music
|
||||
TestFiles: ^Content/ra/music/araziod.aud, ^Content/ra/music/backstab.aud, ^Content/ra/music/chaos2.aud, ^Content/ra/music/shut_it.aud, ^Content/ra/music/2nd_hand.aud, ^Content/ra/music/twinmix1.aud, ^Content/ra/music/under3.aud, ^Content/ra/music/vr2.aud,
|
||||
Sources: counterstrike, counterstrike-linux, origin
|
||||
music-aftermath: Aftermath Music
|
||||
TestFiles: ^Content/ra/music/await.aud, ^Content/ra/music/bog.aud, ^Content/ra/music/float_v2.aud, ^Content/ra/music/gloom.aud, ^Content/ra/music/grndwire.aud, ^Content/ra/music/rpt.aud, ^Content/ra/music/search.aud, ^Content/ra/music/traction.aud, ^Content/ra/music/wastelnd.aud
|
||||
Sources: aftermath, aftermath-linux, origin
|
||||
Downloads:
|
||||
basefiles: Base Freeware Content
|
||||
MirrorList: http://www.openra.net/packages/ra-mirrors.txt
|
||||
@@ -266,7 +269,7 @@ ModContent:
|
||||
MirrorList: http://www.openra.net/packages/ra-music-mirrors.txt
|
||||
Extract:
|
||||
^Content/ra/scores.mix: scores.mix
|
||||
Discs:
|
||||
Sources:
|
||||
allied: Red Alert 95 (Allied Disc, English)
|
||||
IDFiles:
|
||||
eahelp.GID: 13a8a4a1e7d9d6d893c38df5a39262c4689aeba5
|
||||
@@ -407,21 +410,187 @@ ModContent:
|
||||
^Content/ra/temperat.mix:
|
||||
Offset: 499538555
|
||||
Length: 1038859
|
||||
counterstrike: Counterstrike Expansion (English)
|
||||
counterstrike: Counterstrike Expansion Disc (English)
|
||||
IDFiles:
|
||||
README.TXT: 0efe8087383f0b159a9633f891fb5f53c6097cd4
|
||||
SETUP/INSTALL/CSTRIKE.RTP: fae8ba82db71574f6ecd8fb4ff4026fcb65d2adc
|
||||
Install:
|
||||
extract-raw: MAIN.MIX
|
||||
^Content/ra/scores-counterstrike.mix:
|
||||
Offset: 144899491
|
||||
Length: 87483135
|
||||
counterstrike-linux: Counterstrike Expansion (English)
|
||||
^Content/ra/music/2nd_hand.aud:
|
||||
Offset: 209070947
|
||||
Length: 3070092
|
||||
^Content/ra/music/araziod.aud:
|
||||
Offset: 212141039
|
||||
Length: 2941132
|
||||
^Content/ra/music/backstab.aud:
|
||||
Offset: 215082171
|
||||
Length: 3178252
|
||||
^Content/ra/music/chaos2.aud:
|
||||
Offset: 218260423
|
||||
Length: 2860068
|
||||
^Content/ra/music/shut_it.aud:
|
||||
Offset: 221120491
|
||||
Length: 2991979
|
||||
^Content/ra/music/twinmix1.aud:
|
||||
Offset: 224112470
|
||||
Length: 2536972
|
||||
^Content/ra/music/under3.aud:
|
||||
Offset: 226649442
|
||||
Length: 2812788
|
||||
^Content/ra/music/vr2.aud:
|
||||
Offset: 229462230
|
||||
Length: 2920396
|
||||
counterstrike-linux: Counterstrike Expansion Disc (English)
|
||||
IDFiles:
|
||||
readme.txt: 0efe8087383f0b159a9633f891fb5f53c6097cd4
|
||||
setup/install/cstrike.rtp: fae8ba82db71574f6ecd8fb4ff4026fcb65d2adc
|
||||
Install:
|
||||
extract-raw: main.mix
|
||||
^Content/ra/scores-counterstrike.mix:
|
||||
Offset: 144899491
|
||||
Length: 87483135
|
||||
^Content/ra/music/2nd_hand.aud:
|
||||
Offset: 209070947
|
||||
Length: 3070092
|
||||
^Content/ra/music/araziod.aud:
|
||||
Offset: 212141039
|
||||
Length: 2941132
|
||||
^Content/ra/music/backstab.aud:
|
||||
Offset: 215082171
|
||||
Length: 3178252
|
||||
^Content/ra/music/chaos2.aud:
|
||||
Offset: 218260423
|
||||
Length: 2860068
|
||||
^Content/ra/music/shut_it.aud:
|
||||
Offset: 221120491
|
||||
Length: 2991979
|
||||
^Content/ra/music/twinmix1.aud:
|
||||
Offset: 224112470
|
||||
Length: 2536972
|
||||
^Content/ra/music/under3.aud:
|
||||
Offset: 226649442
|
||||
Length: 2812788
|
||||
^Content/ra/music/vr2.aud:
|
||||
Offset: 229462230
|
||||
Length: 2920396
|
||||
aftermath: Aftermath Expansion Disc (English)
|
||||
IDFiles:
|
||||
README.TXT: 9902fb74c019df1b76ff5634e68f0371d790b5e0
|
||||
SETUP/INSTALL/PATCH.RTP: 5bce93f834f9322ddaa7233242e5b6c7fea0bf17
|
||||
Install:
|
||||
extract-raw: MAIN.MIX
|
||||
^Content/ra/music/await.aud:
|
||||
Offset: 158698809
|
||||
Length: 2972788
|
||||
^Content/ra/music/bog.aud:
|
||||
Offset: 244351833
|
||||
Length: 2386955
|
||||
^Content/ra/music/float_v2.aud:
|
||||
Offset: 246738788
|
||||
Length: 3090115
|
||||
^Content/ra/music/gloom.aud:
|
||||
Offset: 249828903
|
||||
Length: 2662851
|
||||
^Content/ra/music/grndwire.aud:
|
||||
Offset: 252491754
|
||||
Length: 2573611
|
||||
^Content/ra/music/rpt.aud:
|
||||
Offset: 255065365
|
||||
Length: 3092259
|
||||
^Content/ra/music/search.aud:
|
||||
Offset: 258157624
|
||||
Length: 3104091
|
||||
^Content/ra/music/traction.aud:
|
||||
Offset: 261261715
|
||||
Length: 2668003
|
||||
^Content/ra/music/wastelnd.aud:
|
||||
Offset: 263929718
|
||||
Length: 2721563
|
||||
aftermath-linux: Aftermath Expansion Disc (English)
|
||||
IDFiles:
|
||||
readme.txt: 9902fb74c019df1b76ff5634e68f0371d790b5e0
|
||||
setup/install/patch.rtp: 5bce93f834f9322ddaa7233242e5b6c7fea0bf17
|
||||
Install:
|
||||
extract-raw: main.mix
|
||||
^Content/ra/music/await.aud:
|
||||
Offset: 158698809
|
||||
Length: 2972788
|
||||
^Content/ra/music/bog.aud:
|
||||
Offset: 244351833
|
||||
Length: 2386955
|
||||
^Content/ra/music/float_v2.aud:
|
||||
Offset: 246738788
|
||||
Length: 3090115
|
||||
^Content/ra/music/gloom.aud:
|
||||
Offset: 249828903
|
||||
Length: 2662851
|
||||
^Content/ra/music/grndwire.aud:
|
||||
Offset: 252491754
|
||||
Length: 2573611
|
||||
^Content/ra/music/rpt.aud:
|
||||
Offset: 255065365
|
||||
Length: 3092259
|
||||
^Content/ra/music/search.aud:
|
||||
Offset: 258157624
|
||||
Length: 3104091
|
||||
^Content/ra/music/traction.aud:
|
||||
Offset: 261261715
|
||||
Length: 2668003
|
||||
^Content/ra/music/wastelnd.aud:
|
||||
Offset: 263929718
|
||||
Length: 2721563
|
||||
origin: C&C The Ultimate Collection (Origin version, English)
|
||||
Type: Install
|
||||
RegistryKey: HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\EA Games\Command and Conquer Red Alert
|
||||
RegistryValue: Install Dir
|
||||
IDFiles:
|
||||
RA95Launcher.exe: 22bf7a1f9f1c2498823e3216541e6012f291c2c0
|
||||
REDALERT.MIX: 0e58f4b54f44f6cd29fecf8cf379d33cf2d4caef
|
||||
Install:
|
||||
copy: .
|
||||
^Content/ra/redalert.mix: REDALERT.MIX
|
||||
^Content/ra/music/2nd_hand.aud: 2nd_hand.aud
|
||||
^Content/ra/music/araziod.aud: araziod.aud
|
||||
^Content/ra/music/await.aud: await.aud
|
||||
^Content/ra/music/backstab.aud: backstab.aud
|
||||
^Content/ra/music/bog.aud: bog.aud
|
||||
^Content/ra/music/chaos2.aud: chaos2.aud
|
||||
^Content/ra/music/float_v2.aud: float_v2.aud
|
||||
^Content/ra/music/gloom.aud: gloom.aud
|
||||
^Content/ra/music/grndwire.aud: grndwire.aud
|
||||
^Content/ra/music/rpt.aud: rpt.aud
|
||||
^Content/ra/music/search.aud: search.aud
|
||||
^Content/ra/music/shut_it.aud: shut_it.aud
|
||||
^Content/ra/music/traction.aud: traction.aud
|
||||
^Content/ra/music/twinmix1.aud: twinmix1.aud
|
||||
^Content/ra/music/under3.aud: under3.aud
|
||||
^Content/ra/music/vr2.aud: vr2.aud
|
||||
^Content/ra/music/wastelnd.aud: wastelnd.aud
|
||||
extract-raw: MAIN.MIX
|
||||
^Content/ra/movies1.mix:
|
||||
Offset: 417051805
|
||||
Length: 404691306
|
||||
^Content/ra/interior.mix:
|
||||
Offset: 821743111
|
||||
Length: 249490
|
||||
^Content/ra/conquer.mix:
|
||||
Offset: 840028549
|
||||
Length: 2192279
|
||||
^Content/ra/allies.mix:
|
||||
Offset: 842220828
|
||||
Length: 319181
|
||||
^Content/ra/temperat.mix:
|
||||
Offset: 842540009
|
||||
Length: 1043672
|
||||
^Content/ra/sounds.mix:
|
||||
Offset: 843583681
|
||||
Length: 1385637
|
||||
^Content/ra/snow.mix:
|
||||
Offset: 844969318
|
||||
Length: 1035716
|
||||
^Content/ra/scores.mix:
|
||||
Offset: 846005034
|
||||
Length: 67742203
|
||||
^Content/ra/russian.mix:
|
||||
Offset: 913747237
|
||||
Length: 274732
|
||||
^Content/ra/movies2.mix:
|
||||
Offset: 914022190
|
||||
Length: 417051731
|
||||
|
||||
@@ -26,7 +26,6 @@ Packages:
|
||||
~movies02.mix
|
||||
~sidecd01.mix
|
||||
~sidecd02.mix
|
||||
~tibsun.mix
|
||||
~cache.mix
|
||||
~conquer.mix
|
||||
~isosnow.mix
|
||||
@@ -262,16 +261,16 @@ ColorValidator:
|
||||
ModContent:
|
||||
InstallPromptMessage: Tiberian Sun requires artwork and audio from the original game.\n\nQuick Install will automatically download this content (without music\nor videos) from a mirror of the 2012 Tiberian Sun freeware release.\n\nAdvanced Install includes options for downloading the music and for\ncopying the videos and other content from an original game disc.
|
||||
QuickDownload: basefiles
|
||||
HeaderMessage: The original game content may be copied from an original game disc,\nor downloaded from an online mirror of the 2012 freeware release.
|
||||
HeaderMessage: Game content may be extracted from the original game discs or an\nexisting digital install. OpenRA can also download the base game\nfiles from an online mirror of the 2012 freeware release of TS.
|
||||
Packages:
|
||||
base: Base Game Files
|
||||
TestFiles: ^Content/ts/cache.mix, ^Content/ts/conquer.mix, ^Content/ts/isosnow.mix, ^Content/ts/isotemp.mix, ^Content/ts/local.mix, ^Content/ts/sidec01.mix, ^Content/ts/sidec02.mix, ^Content/ts/sno.mix, ^Content/ts/snow.mix, ^Content/ts/sounds.mix, ^Content/ts/speech01.mix, ^Content/ts/tem.mix, ^Content/ts/temperat.mix
|
||||
Discs: tibsun, tibsun-linux
|
||||
Sources: tibsun, tibsun-linux, origin
|
||||
Required: true
|
||||
Download: basefiles
|
||||
music: Base Game Music
|
||||
TestFiles: ^Content/ts/scores.mix
|
||||
Discs: tibsun, tibsun-linux
|
||||
Sources: tibsun, tibsun-linux, origin
|
||||
Download: music
|
||||
Downloads:
|
||||
basefiles: Base Freeware Content
|
||||
@@ -295,7 +294,7 @@ ModContent:
|
||||
MirrorList: http://www.openra.net/packages/ts-music-mirrors.txt
|
||||
Extract:
|
||||
^Content/ts/scores.mix: scores.mix
|
||||
Discs:
|
||||
Sources:
|
||||
tibsun: Tiberan Sun (GDI or Nod Disc, English)
|
||||
IDFiles:
|
||||
README.TXT: 45745c4a0c888317ec900208a426472779c42bf7
|
||||
@@ -396,3 +395,56 @@ ModContent:
|
||||
^Content/ts/temperat.mix:
|
||||
Offset: 73056940
|
||||
Length: 2037606
|
||||
origin: C&C The Ultimate Collection (Origin version, English)
|
||||
Type: Install
|
||||
RegistryKey: HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\EA Games\Command and Conquer Tiberian Sun
|
||||
RegistryValue: Install Dir
|
||||
IDFiles:
|
||||
TSLauncher.exe: 0b3e8dfd7cb701868eccef3ba3717a1ced802707
|
||||
GDFBinary_en_US.dll: 4bb56a449bd0003e7ae67625d90a11ae169319d6
|
||||
Install:
|
||||
copy: .
|
||||
^Content/ts/scores.mix: SCORES.MIX
|
||||
extract-raw: TIBSUN.MIX
|
||||
^Content/ts/cache.mix:
|
||||
Offset: 300
|
||||
Length: 169176
|
||||
^Content/ts/conquer.mix:
|
||||
Offset: 169484
|
||||
Length: 5700088
|
||||
^Content/ts/isosnow.mix:
|
||||
Offset: 5869580
|
||||
Length: 7624750
|
||||
^Content/ts/isotemp.mix:
|
||||
Offset: 13494332
|
||||
Length: 8617646
|
||||
^Content/ts/local.mix:
|
||||
Offset: 22111980
|
||||
Length: 18044736
|
||||
^Content/ts/sidec01.mix:
|
||||
Offset: 40156716
|
||||
Length: 998476
|
||||
^Content/ts/sidec02.mix:
|
||||
Offset: 41155196
|
||||
Length: 1039996
|
||||
^Content/ts/snow.mix:
|
||||
Offset: 56104508
|
||||
Length: 2087806
|
||||
^Content/ts/sno.mix:
|
||||
Offset: 58192316
|
||||
Length: 7826
|
||||
^Content/ts/sounds.mix:
|
||||
Offset: 58200156
|
||||
Length: 3224136
|
||||
^Content/ts/speech01.mix:
|
||||
Offset: 61424300
|
||||
Length: 6028236
|
||||
^Content/ts/speech02.mix:
|
||||
Offset: 67452540
|
||||
Length: 5596628
|
||||
^Content/ts/tem.mix:
|
||||
Offset: 73049180
|
||||
Length: 7746
|
||||
^Content/ts/temperat.mix:
|
||||
Offset: 73056940
|
||||
Length: 2037606
|
||||
|
||||
Reference in New Issue
Block a user