Add Dictionary support to InstallUtils and fix D2k locking asset files;
Also fix D2k assets locations
This commit is contained in:
@@ -26,13 +26,36 @@ namespace OpenRA.Mods.Common
|
|||||||
public readonly string[] TestFiles = { };
|
public readonly string[] TestFiles = { };
|
||||||
public readonly string[] DiskTestFiles = { };
|
public readonly string[] DiskTestFiles = { };
|
||||||
public readonly string PackageToExtractFromCD = null;
|
public readonly string PackageToExtractFromCD = null;
|
||||||
public readonly string[] ExtractFilesFromCD = { };
|
public readonly bool OverwriteFiles = true;
|
||||||
public readonly string[] CopyFilesFromCD = { };
|
|
||||||
|
[FieldLoader.LoadUsing("LoadFilesToExtract")]
|
||||||
|
public readonly Dictionary<string, string[]> ExtractFilesFromCD = new Dictionary<string, string[]>();
|
||||||
|
|
||||||
|
[FieldLoader.LoadUsing("LoadFilesToCopy")]
|
||||||
|
public readonly Dictionary<string, string[]> CopyFilesFromCD = new Dictionary<string, string[]>();
|
||||||
|
|
||||||
public readonly string PackageMirrorList = null;
|
public readonly string PackageMirrorList = null;
|
||||||
|
|
||||||
public readonly string MusicPackageMirrorList = null;
|
public readonly string MusicPackageMirrorList = null;
|
||||||
public readonly int ShippedSoundtracks = 0;
|
public readonly int ShippedSoundtracks = 0;
|
||||||
|
|
||||||
|
public static Dictionary<string, string[]> LoadFilesToExtract(MiniYaml yaml)
|
||||||
|
{
|
||||||
|
var md = yaml.ToDictionary();
|
||||||
|
|
||||||
|
return md.ContainsKey("ExtractFilesFromCD")
|
||||||
|
? md["ExtractFilesFromCD"].ToDictionary(my => FieldLoader.GetValue<string[]>("(value)", my.Value))
|
||||||
|
: new Dictionary<string, string[]>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Dictionary<string, string[]> LoadFilesToCopy(MiniYaml yaml)
|
||||||
|
{
|
||||||
|
var md = yaml.ToDictionary();
|
||||||
|
|
||||||
|
return md.ContainsKey("CopyFilesFromCD")
|
||||||
|
? md["CopyFilesFromCD"].ToDictionary(my => FieldLoader.GetValue<string[]>("(value)", my.Value))
|
||||||
|
: new Dictionary<string, string[]>();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class InstallUtils
|
public static class InstallUtils
|
||||||
@@ -52,11 +75,12 @@ namespace OpenRA.Mods.Common
|
|||||||
.Where(v => v.DriveType == DriveType.CDRom && v.IsReady)
|
.Where(v => v.DriveType == DriveType.CDRom && v.IsReady)
|
||||||
.Select(v => v.RootDirectory.FullName);
|
.Select(v => v.RootDirectory.FullName);
|
||||||
|
|
||||||
return volumes.FirstOrDefault(v => isValidDisk(v));
|
return volumes.FirstOrDefault(isValidDisk);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: The package should be mounted into its own context to avoid name collisions with installed files
|
// TODO: The package should be mounted into its own context to avoid name collisions with installed files
|
||||||
public static bool ExtractFromPackage(string srcPath, string package, string annotation, string[] files, string destPath, Action<string> onProgress, Action<string> onError)
|
public static bool ExtractFromPackage(string srcPath, string package, string annotation, Dictionary<string, string[]> filesByDirectory,
|
||||||
|
string destPath, bool overwrite, Action<string> onProgress, Action<string> onError)
|
||||||
{
|
{
|
||||||
if (!Directory.Exists(destPath))
|
if (!Directory.Exists(destPath))
|
||||||
Directory.CreateDirectory(destPath);
|
Directory.CreateDirectory(destPath);
|
||||||
@@ -66,11 +90,24 @@ namespace OpenRA.Mods.Common
|
|||||||
Log.Write("debug", "Mounting {0}".F(package));
|
Log.Write("debug", "Mounting {0}".F(package));
|
||||||
GlobalFileSystem.Mount(package, annotation);
|
GlobalFileSystem.Mount(package, annotation);
|
||||||
|
|
||||||
foreach (var file in files)
|
foreach (var directory in filesByDirectory)
|
||||||
{
|
{
|
||||||
var dest = Path.Combine(destPath, file);
|
var targetDir = directory.Key;
|
||||||
|
|
||||||
|
foreach (var file in directory.Value)
|
||||||
|
{
|
||||||
|
var dest = Path.Combine(destPath, targetDir, file);
|
||||||
if (File.Exists(dest))
|
if (File.Exists(dest))
|
||||||
|
{
|
||||||
|
if (overwrite)
|
||||||
File.Delete(dest);
|
File.Delete(dest);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Log.Write("debug", "Skipping {0}".F(dest));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
using (var sourceStream = GlobalFileSystem.Open(file))
|
using (var sourceStream = GlobalFileSystem.Open(file))
|
||||||
using (var destStream = File.Create(dest))
|
using (var destStream = File.Create(dest))
|
||||||
{
|
{
|
||||||
@@ -79,28 +116,39 @@ namespace OpenRA.Mods.Common
|
|||||||
destStream.Write(sourceStream.ReadAllBytes());
|
destStream.Write(sourceStream.ReadAllBytes());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool CopyFiles(string srcPath, string[] files, string destPath, Action<string> onProgress, Action<string> onError)
|
public static bool CopyFiles(string srcPath, Dictionary<string, string[]> files, string destPath,
|
||||||
|
bool overwrite, Action<string> onProgress, Action<string> onError)
|
||||||
{
|
{
|
||||||
foreach (var file in files)
|
foreach (var folder in files)
|
||||||
{
|
{
|
||||||
var fromPath = Path.Combine(srcPath, file);
|
var targetDir = folder.Key;
|
||||||
if (!File.Exists(fromPath))
|
|
||||||
|
foreach (var file in folder.Value)
|
||||||
|
{
|
||||||
|
var sourcePath = Path.Combine(srcPath, file);
|
||||||
|
if (!File.Exists(sourcePath))
|
||||||
{
|
{
|
||||||
onError("Cannot find " + file);
|
onError("Cannot find " + file);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
var destFile = Path.GetFileName(file).ToLowerInvariant();
|
var destFile = Path.GetFileName(file);
|
||||||
var dest = Path.Combine(destPath, destFile);
|
var dest = Path.Combine(destPath, targetDir, destFile);
|
||||||
if (File.Exists(dest))
|
if (File.Exists(dest) && !overwrite)
|
||||||
File.Delete(dest);
|
{
|
||||||
|
Log.Write("debug", "Skipping {0}".F(dest));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
onProgress("Copying " + destFile);
|
onProgress("Copying " + destFile);
|
||||||
Log.Write("debug", "Copy {0} to {1}".F(fromPath, dest));
|
Log.Write("debug", "Copy {0} to {1}".F(sourcePath, dest));
|
||||||
File.Copy(fromPath, dest, true);
|
File.Copy(sourcePath, dest, true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -80,8 +80,9 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
|
|
||||||
var extractFiles = installData.ExtractFilesFromCD;
|
var extractFiles = installData.ExtractFilesFromCD;
|
||||||
|
|
||||||
|
var overwrite = installData.OverwriteFiles;
|
||||||
var installCounter = 0;
|
var installCounter = 0;
|
||||||
var installTotal = copyFiles.Length + extractFiles.Length;
|
var installTotal = copyFiles.SelectMany(x => x.Value).Count() + extractFiles.SelectMany(x => x.Value).Count();
|
||||||
var onProgress = (Action<string>)(s => Game.RunAfterTick(() =>
|
var onProgress = (Action<string>)(s => Game.RunAfterTick(() =>
|
||||||
{
|
{
|
||||||
progressBar.Percentage = installCounter * 100 / installTotal;
|
progressBar.Percentage = installCounter * 100 / installTotal;
|
||||||
@@ -101,7 +102,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (!InstallUtils.CopyFiles(source, copyFiles, dest, onProgress, onError))
|
if (!InstallUtils.CopyFiles(source, copyFiles, dest, overwrite, onProgress, onError))
|
||||||
{
|
{
|
||||||
onError("Copying files from CD failed.");
|
onError("Copying files from CD failed.");
|
||||||
return;
|
return;
|
||||||
@@ -109,7 +110,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
|
|
||||||
if (!string.IsNullOrEmpty(extractPackage))
|
if (!string.IsNullOrEmpty(extractPackage))
|
||||||
{
|
{
|
||||||
if (!InstallUtils.ExtractFromPackage(source, extractPackage, annotation, extractFiles, dest, onProgress, onError))
|
if (!InstallUtils.ExtractFromPackage(source, extractPackage, annotation, extractFiles, dest, overwrite, onProgress, onError))
|
||||||
{
|
{
|
||||||
onError("Extracting files from CD failed.");
|
onError("Extracting files from CD failed.");
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -148,8 +148,10 @@ ContentInstaller:
|
|||||||
PackageMirrorList: http://www.openra.net/packages/cnc-mirrors.txt
|
PackageMirrorList: http://www.openra.net/packages/cnc-mirrors.txt
|
||||||
DiskTestFiles: conquer.mix, desert.mix, install/setup.z
|
DiskTestFiles: conquer.mix, desert.mix, install/setup.z
|
||||||
PackageToExtractFromCD: install/setup.z
|
PackageToExtractFromCD: install/setup.z
|
||||||
ExtractFilesFromCD: speech.mix, tempicnh.mix, transit.mix
|
ExtractFilesFromCD:
|
||||||
CopyFilesFromCD: conquer.mix, desert.mix, general.mix, scores.mix, sounds.mix, temperat.mix, winter.mix
|
.: speech.mix, tempicnh.mix, transit.mix
|
||||||
|
CopyFilesFromCD:
|
||||||
|
.: conquer.mix, desert.mix, general.mix, scores.mix, sounds.mix, temperat.mix, winter.mix
|
||||||
ShippedSoundtracks: 2
|
ShippedSoundtracks: 2
|
||||||
MusicPackageMirrorList: http://www.openra.net/packages/cnc-music-mirrors.txt
|
MusicPackageMirrorList: http://www.openra.net/packages/cnc-music-mirrors.txt
|
||||||
|
|
||||||
|
|||||||
@@ -129,8 +129,12 @@ ContentInstaller:
|
|||||||
PackageMirrorList: http://www.openra.net/packages/d2k-103-mirrors.txt
|
PackageMirrorList: http://www.openra.net/packages/d2k-103-mirrors.txt
|
||||||
DiskTestFiles: music/ambush.aud, setup/setup.z
|
DiskTestFiles: music/ambush.aud, setup/setup.z
|
||||||
PackageToExtractFromCD: setup/setup.z
|
PackageToExtractFromCD: setup/setup.z
|
||||||
ExtractFilesFromCD: SOUND.RS, DATA.R8, MOUSE.R8, BLOXBASE.R8, BLOXBAT.R8, BLOXBGBS.R8, BLOXICE.R8, BLOXTREE.R8, BLOXWAST.R8, A_ECONF1.AUD, A_ECONF2.AUD, A_ECONF3.AUD, A_ESEL1.AUD, A_ESEL2.AUD, A_ESEL3.AUD, A_FCONF1.AUD, A_FCONF2.AUD, A_FCONF3.AUD,A_FCONF4.AUD, A_FSEL1.AUD, A_FSEL2.AUD, A_FSEL3.AUD, A_FSEL4.AUD, AI_1MIN.AUD, AI_2MIN.AUD, AI_3MIN.AUD, AI_4MIN.AUD, AI_5MIN.AUD, AI_ABORT.AUD, AI_ATACK.AUD, AI_BDRDY.AUD, AI_BLOST.AUD, AI_BUILD.AUD, AI_CANCL.AUD, AI_CAPT.AUD, A_ICONF1.AUD, A_ICONF2.AUD, A_ICONF3.AUD, AI_DHRDY.AUD, AI_DPLOY.AUD, AI_ENEMY.AUD, AI_GANEW.AUD, AI_GLOAD.AUD, AI_GSAVE.AUD, AI_GUARD.AUD, AI_HATTK.AUD, AI_HOLD.AUD, AI_LAUNC.AUD, AI_MAP1A.AUD, AI_MAP1B.AUD, AI_MAP1C.AUD, AI_MAP2A.AUD, AI_MAP2B.AUD, AI_MAP2C.AUD, AI_MAP3A.AUD, AI_MAP4A.AUD, AI_MAP5A.AUD, AI_MAP6A.AUD, AI_MAP7A.AUD, AI_MAP8A.AUD, AI_MAP9A.AUD, AI_MEND.AUD, AI_MFAIL.AUD, AI_MONEY.AUD, AI_MWIN.AUD, AI_NEWOP.AUD, AI_NROOM.AUD, AI_ORDER.AUD, AI_PLACE.AUD, AI_POWER.AUD, AI_PREP.AUD, AI_PRMRY.AUD, AI_REINF.AUD, AI_RUN.AUD, A_ISEL1.AUD, A_ISEL2.AUD, A_ISEL3.AUD, AI_SELL.AUD, AI_SILOS.AUD, AI_SPORT.AUD, AI_TRAIN.AUD, AI_ULOST.AUD, AI_UNRDY.AUD, AI_UPGOP.AUD, AI_UPGRD.AUD, AI_WATTK.AUD, AI_WSIGN.AUD, A_VCONF1.AUD, A_VCONF2.AUD, A_VCONF3.AUD, A_VSEL1.AUD, A_VSEL2.AUD, A_VSEL3.AUD, G_SCONF1.AUD, G_SCONF2.AUD, G_SCONF3.AUD, G_SSEL1.AUD, G_SSEL2.AUD, G_SSEL3.AUD, H_ECONF1.AUD, H_ECONF2.AUD, H_ECONF3.AUD, H_ESEL1.AUD, H_ESEL2.AUD, H_ESEL3.AUD, HI_1MIN.AUD, HI_2MIN.AUD, HI_3MIN.AUD, HI_4MIN.AUD, HI_5MIN.AUD, HI_ABORT.AUD, HI_ATACK.AUD, HI_BDRDY.AUD, HI_BLOST.AUD, HI_BUILD.AUD, HI_CANCL.AUD, HI_CAPT.AUD, H_ICONF1.AUD, H_ICONF2.AUD, H_ICONF3.AUD, HI_DHRDY.AUD, HI_DPLOY.AUD, HI_ENEMY.AUD, HI_GANEW.AUD,HI_GLOAD.AUD, HI_GSAVE.AUD, HI_GUARD.AUD, HI_HATTK.AUD, HI_HOLD.AUD, HI_LAUNC.AUD, HI_MAP1A.AUD, HI_MAP1B.AUD, HI_MAP1C.AUD, HI_MAP2A.AUD, HI_MAP2B.AUD, HI_MAP2C.AUD, HI_MAP3A.AUD, HI_MAP3B.AUD, HI_MAP4A.AUD, HI_MAP4B.AUD, HI_MAP5A.AUD, HI_MAP6A.AUD, HI_MAP6B.AUD, HI_MAP7A.AUD, HI_MAP9A.AUD, HI_MAP9.AUD, HI_MEND.AUD, HI_MFAIL.AUD, HI_MONEY.AUD, HI_MWIN.AUD, HI_NEWOP.AUD, HI_NROOM.AUD, HI_ORDER.AUD, HI_PLACE.AUD, HI_POWER.AUD, HI_PREP.AUD, HI_PRMRY.AUD, HI_REINF.AUD, HI_RUN.AUD, H_ISEL1.AUD, H_ISEL2.AUD, H_ISEL3.AUD, HI_SELL.AUD, HI_SILOS.AUD,HI_SPORT.AUD, HI_TRAIN.AUD, HI_ULOST.AUD, HI_UNRDY.AUD, HI_UPGOP.AUD, HI_UPGRD.AUD, HI_WATTK.AUD, HI_WSIGN.AUD, H_VCONF1.AUD, H_VCONF2.AUD, H_VCONF3.AUD, H_VSEL1.AUD, H_VSEL2.AUD, H_VSEL3.AUD, O_ECONF1.AUD, O_ECONF2.AUD, O_ECONF3.AUD, O_ESEL1.AUD, O_ESEL2.AUD, O_ESEL3.AUD, OI_1MIN.AUD, OI_2MIN.AUD, OI_3MIN.AUD, OI_4MIN.AUD, OI_5MIN.AUD, OI_ABORT.AUD, OI_ATACK.AUD, OI_BDRDY.AUD, OI_BLOST.AUD, OI_BUILD.AUD, OI_CANCL.AUD, OI_CAPT.AUD, O_ICONF1.AUD, O_ICONF2.AUD, O_ICONF3.AUD, OI_DHRDY.AUD, OI_DPLOY.AUD, OI_ENEMY.AUD, OI_GANEW.AUD, OI_GLOAD.AUD, OI_GSAVE.AUD, OI_GUARD.AUD, OI_HATTK.AUD, OI_HOLD.AUD, OI_LAUNC.AUD, OI_MAP1A.AUD, OI_MAP1B.AUD, OI_MAP1C.AUD, OI_MAP2A.AUD, OI_MAP2B.AUD, OI_MAP2C.AUD, OI_MAP3A.AUD, OI_MAP4A.AUD, OI_MAP5A.AUD, OI_MAP6A.AUD, OI_MAP7A.AUD, OI_MAP8A.AUD, OI_MAP9A.AUD, OI_MEND.AUD, OI_MFAIL.AUD, OI_MONEY.AUD, OI_MWIN.AUD, OI_NEWOP.AUD, OI_NROOM.AUD, OI_ORDER.AUD, OI_PLACE.AUD, OI_POWER.AUD, OI_PREP.AUD, OI_PRMRY.AUD, OI_REINF.AUD, OI_RUN.AUD, O_ISEL1.AUD, O_ISEL2.AUD, O_ISEL3.AUD, OI_SELL.AUD, OI_SILOS.AUD, OI_SPORT.AUD, OI_TRAIN.AUD, OI_ULOST.AUD, OI_UNRDY.AUD, OI_UPGOP.AUD, OI_UPGRD.AUD, OI_WATTK.AUD, OI_WSIGN.AUD, O_SCONF1.AUD, O_SCONF2.AUD, O_SCONF3.AUD, O_SSEL1.AUD, O_SSEL2.AUD, O_SSEL3.AUD, O_VCONF1.AUD, O_VCONF2.AUD, O_VCONF3.AUD, O_VSEL1.AUD, O_VSEL2.AUD, O_VSEL3.AUD
|
OverwriteFiles: False
|
||||||
CopyFilesFromCD: music/ambush.aud, music/arakatak.aud, music/atregain.aud, music/entordos.aud, music/fightpwr.aud, music/fremen.aud, music/hark_bat.aud, music/landsand.aud, music/options.aud, music/plotting.aud, music/risehark.aud, music/robotix.aud, music/score.aud, music/soldappr.aud, music/spicesct.aud, music/undercon.aud, music/waitgame.aud
|
ExtractFilesFromCD:
|
||||||
|
.: SOUND.RS, DATA.R8, MOUSE.R8, BLOXBASE.R8, BLOXBAT.R8, BLOXBGBS.R8, BLOXICE.R8, BLOXTREE.R8, BLOXWAST.R8
|
||||||
|
GAMESFX: A_ECONF1.AUD, A_ECONF2.AUD, A_ECONF3.AUD, A_ESEL1.AUD, A_ESEL2.AUD, A_ESEL3.AUD, A_FCONF1.AUD, A_FCONF2.AUD, A_FCONF3.AUD,A_FCONF4.AUD, A_FSEL1.AUD, A_FSEL2.AUD, A_FSEL3.AUD, A_FSEL4.AUD, AI_1MIN.AUD, AI_2MIN.AUD, AI_3MIN.AUD, AI_4MIN.AUD, AI_5MIN.AUD, AI_ABORT.AUD, AI_ATACK.AUD, AI_BDRDY.AUD, AI_BLOST.AUD, AI_BUILD.AUD, AI_CANCL.AUD, AI_CAPT.AUD, A_ICONF1.AUD, A_ICONF2.AUD, A_ICONF3.AUD, AI_DHRDY.AUD, AI_DPLOY.AUD, AI_ENEMY.AUD, AI_GANEW.AUD, AI_GLOAD.AUD, AI_GSAVE.AUD, AI_GUARD.AUD, AI_HATTK.AUD, AI_HOLD.AUD, AI_LAUNC.AUD, AI_MAP1A.AUD, AI_MAP1B.AUD, AI_MAP1C.AUD, AI_MAP2A.AUD, AI_MAP2B.AUD, AI_MAP2C.AUD, AI_MAP3A.AUD, AI_MAP4A.AUD, AI_MAP5A.AUD, AI_MAP6A.AUD, AI_MAP7A.AUD, AI_MAP8A.AUD, AI_MAP9A.AUD, AI_MEND.AUD, AI_MFAIL.AUD, AI_MONEY.AUD, AI_MWIN.AUD, AI_NEWOP.AUD, AI_NROOM.AUD, AI_ORDER.AUD, AI_PLACE.AUD, AI_POWER.AUD, AI_PREP.AUD, AI_PRMRY.AUD, AI_REINF.AUD, AI_RUN.AUD, A_ISEL1.AUD, A_ISEL2.AUD, A_ISEL3.AUD, AI_SELL.AUD, AI_SILOS.AUD, AI_SPORT.AUD, AI_TRAIN.AUD, AI_ULOST.AUD, AI_UNRDY.AUD, AI_UPGOP.AUD, AI_UPGRD.AUD, AI_WATTK.AUD, AI_WSIGN.AUD, A_VCONF1.AUD, A_VCONF2.AUD, A_VCONF3.AUD, A_VSEL1.AUD, A_VSEL2.AUD, A_VSEL3.AUD, G_SCONF1.AUD, G_SCONF2.AUD, G_SCONF3.AUD, G_SSEL1.AUD, G_SSEL2.AUD, G_SSEL3.AUD, H_ECONF1.AUD, H_ECONF2.AUD, H_ECONF3.AUD, H_ESEL1.AUD, H_ESEL2.AUD, H_ESEL3.AUD, HI_1MIN.AUD, HI_2MIN.AUD, HI_3MIN.AUD, HI_4MIN.AUD, HI_5MIN.AUD, HI_ABORT.AUD, HI_ATACK.AUD, HI_BDRDY.AUD, HI_BLOST.AUD, HI_BUILD.AUD, HI_CANCL.AUD, HI_CAPT.AUD, H_ICONF1.AUD, H_ICONF2.AUD, H_ICONF3.AUD, HI_DHRDY.AUD, HI_DPLOY.AUD, HI_ENEMY.AUD, HI_GANEW.AUD,HI_GLOAD.AUD, HI_GSAVE.AUD, HI_GUARD.AUD, HI_HATTK.AUD, HI_HOLD.AUD, HI_LAUNC.AUD, HI_MAP1A.AUD, HI_MAP1B.AUD, HI_MAP1C.AUD, HI_MAP2A.AUD, HI_MAP2B.AUD, HI_MAP2C.AUD, HI_MAP3A.AUD, HI_MAP3B.AUD, HI_MAP4A.AUD, HI_MAP4B.AUD, HI_MAP5A.AUD, HI_MAP6A.AUD, HI_MAP6B.AUD, HI_MAP7A.AUD, HI_MAP9A.AUD, HI_MAP9.AUD, HI_MEND.AUD, HI_MFAIL.AUD, HI_MONEY.AUD, HI_MWIN.AUD, HI_NEWOP.AUD, HI_NROOM.AUD, HI_ORDER.AUD, HI_PLACE.AUD, HI_POWER.AUD, HI_PREP.AUD, HI_PRMRY.AUD, HI_REINF.AUD, HI_RUN.AUD, H_ISEL1.AUD, H_ISEL2.AUD, H_ISEL3.AUD, HI_SELL.AUD, HI_SILOS.AUD,HI_SPORT.AUD, HI_TRAIN.AUD, HI_ULOST.AUD, HI_UNRDY.AUD, HI_UPGOP.AUD, HI_UPGRD.AUD, HI_WATTK.AUD, HI_WSIGN.AUD, H_VCONF1.AUD, H_VCONF2.AUD, H_VCONF3.AUD, H_VSEL1.AUD, H_VSEL2.AUD, H_VSEL3.AUD, O_ECONF1.AUD, O_ECONF2.AUD, O_ECONF3.AUD, O_ESEL1.AUD, O_ESEL2.AUD, O_ESEL3.AUD, OI_1MIN.AUD, OI_2MIN.AUD, OI_3MIN.AUD, OI_4MIN.AUD, OI_5MIN.AUD, OI_ABORT.AUD, OI_ATACK.AUD, OI_BDRDY.AUD, OI_BLOST.AUD, OI_BUILD.AUD, OI_CANCL.AUD, OI_CAPT.AUD, O_ICONF1.AUD, O_ICONF2.AUD, O_ICONF3.AUD, OI_DHRDY.AUD, OI_DPLOY.AUD, OI_ENEMY.AUD, OI_GANEW.AUD, OI_GLOAD.AUD, OI_GSAVE.AUD, OI_GUARD.AUD, OI_HATTK.AUD, OI_HOLD.AUD, OI_LAUNC.AUD, OI_MAP1A.AUD, OI_MAP1B.AUD, OI_MAP1C.AUD, OI_MAP2A.AUD, OI_MAP2B.AUD, OI_MAP2C.AUD, OI_MAP3A.AUD, OI_MAP4A.AUD, OI_MAP5A.AUD, OI_MAP6A.AUD, OI_MAP7A.AUD, OI_MAP8A.AUD, OI_MAP9A.AUD, OI_MEND.AUD, OI_MFAIL.AUD, OI_MONEY.AUD, OI_MWIN.AUD, OI_NEWOP.AUD, OI_NROOM.AUD, OI_ORDER.AUD, OI_PLACE.AUD, OI_POWER.AUD, OI_PREP.AUD, OI_PRMRY.AUD, OI_REINF.AUD, OI_RUN.AUD, O_ISEL1.AUD, O_ISEL2.AUD, O_ISEL3.AUD, OI_SELL.AUD, OI_SILOS.AUD, OI_SPORT.AUD, OI_TRAIN.AUD, OI_ULOST.AUD, OI_UNRDY.AUD, OI_UPGOP.AUD, OI_UPGRD.AUD, OI_WATTK.AUD, OI_WSIGN.AUD, O_SCONF1.AUD, O_SCONF2.AUD, O_SCONF3.AUD, O_SSEL1.AUD, O_SSEL2.AUD, O_SSEL3.AUD, O_VCONF1.AUD, O_VCONF2.AUD, O_VCONF3.AUD, O_VSEL1.AUD, O_VSEL2.AUD, O_VSEL3.AUD
|
||||||
|
CopyFilesFromCD:
|
||||||
|
Music: music/ambush.aud, music/arakatak.aud, music/atregain.aud, music/entordos.aud, music/fightpwr.aud, music/fremen.aud, music/hark_bat.aud, music/landsand.aud, music/options.aud, music/plotting.aud, music/risehark.aud, music/robotix.aud, music/score.aud, music/soldappr.aud, music/spicesct.aud, music/undercon.aud, music/waitgame.aud
|
||||||
ShippedSoundtracks: 1
|
ShippedSoundtracks: 1
|
||||||
|
|
||||||
ServerTraits:
|
ServerTraits:
|
||||||
|
|||||||
@@ -147,8 +147,10 @@ ContentInstaller:
|
|||||||
PackageMirrorList: http://www.openra.net/packages/ra-mirrors.txt
|
PackageMirrorList: http://www.openra.net/packages/ra-mirrors.txt
|
||||||
DiskTestFiles: MAIN.MIX, INSTALL/REDALERT.MIX
|
DiskTestFiles: MAIN.MIX, INSTALL/REDALERT.MIX
|
||||||
PackageToExtractFromCD: MAIN.MIX
|
PackageToExtractFromCD: MAIN.MIX
|
||||||
ExtractFilesFromCD: conquer.mix, russian.mix, allies.mix, sounds.mix, scores.mix, snow.mix, interior.mix, temperat.mix, general.mix
|
ExtractFilesFromCD:
|
||||||
CopyFilesFromCD: INSTALL/REDALERT.MIX
|
.: conquer.mix, russian.mix, allies.mix, sounds.mix, scores.mix, snow.mix, interior.mix, temperat.mix, general.mix
|
||||||
|
CopyFilesFromCD:
|
||||||
|
.: INSTALL/REDALERT.MIX
|
||||||
ShippedSoundtracks: 2
|
ShippedSoundtracks: 2
|
||||||
MusicPackageMirrorList: http://www.openra.net/packages/ra-music-mirrors.txt
|
MusicPackageMirrorList: http://www.openra.net/packages/ra-music-mirrors.txt
|
||||||
|
|
||||||
|
|||||||
@@ -194,9 +194,11 @@ ContentInstaller:
|
|||||||
TestFiles: cache.mix, conquer.mix, isosnow.mix, isotemp.mix, local.mix, sidec01.mix, sidec02.mix, sno.mix, snow.mix, sounds.mix, speech01.mix, tem.mix, temperat.mix
|
TestFiles: cache.mix, conquer.mix, isosnow.mix, isotemp.mix, local.mix, sidec01.mix, sidec02.mix, sno.mix, snow.mix, sounds.mix, speech01.mix, tem.mix, temperat.mix
|
||||||
PackageMirrorList: http://www.openra.net/packages/ts-mirrors.txt
|
PackageMirrorList: http://www.openra.net/packages/ts-mirrors.txt
|
||||||
DiskTestFiles: MULTI.MIX, INSTALL/TIBSUN.MIX
|
DiskTestFiles: MULTI.MIX, INSTALL/TIBSUN.MIX
|
||||||
CopyFilesFromCD: INSTALL/TIBSUN.MIX, SCORES.MIX, MULTI.MIX
|
CopyFilesFromCD:
|
||||||
|
.: INSTALL/TIBSUN.MIX, SCORES.MIX, MULTI.MIX
|
||||||
PackageToExtractFromCD: INSTALL/TIBSUN.MIX:CRC32
|
PackageToExtractFromCD: INSTALL/TIBSUN.MIX:CRC32
|
||||||
ExtractFilesFromCD: cache.mix, conquer.mix, isosnow.mix, isotemp.mix, local.mix, sidec01.mix, sidec02.mix, sno.mix, snow.mix, sounds.mix, speech01.mix, tem.mix, temperat.mix
|
ExtractFilesFromCD:
|
||||||
|
.: cache.mix, conquer.mix, isosnow.mix, isotemp.mix, local.mix, sidec01.mix, sidec02.mix, sno.mix, snow.mix, sounds.mix, speech01.mix, tem.mix, temperat.mix
|
||||||
ShippedSoundtracks: 2
|
ShippedSoundtracks: 2
|
||||||
MusicPackageMirrorList: http://www.openra.net/packages/ts-music-mirrors.txt
|
MusicPackageMirrorList: http://www.openra.net/packages/ts-music-mirrors.txt
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user