added (broken) content installer, moved instruction to GUI
still depends on the hacky bash script and CD extractor crashes
This commit is contained in:
@@ -37,7 +37,7 @@ namespace OpenRA.Mods.D2k
|
|||||||
// can display loadscreen as early as possible
|
// can display loadscreen as early as possible
|
||||||
r = Game.Renderer;
|
r = Game.Renderer;
|
||||||
if (r == null) return;
|
if (r == null) return;
|
||||||
var s = new Sheet(Path.Combine(Path.Combine(Path.Combine("mods", "d2k"), "uibits"), "loadscreen.png"));
|
var s = new Sheet("mods/d2k/uibits/loadscreen.png");
|
||||||
Logo = new Sprite(s, new Rectangle(0,0,256,256), TextureChannel.Alpha);
|
Logo = new Sprite(s, new Rectangle(0,0,256,256), TextureChannel.Alpha);
|
||||||
Stripe = new Sprite(s, new Rectangle(256,0,256,256), TextureChannel.Alpha);
|
Stripe = new Sprite(s, new Rectangle(256,0,256,256), TextureChannel.Alpha);
|
||||||
StripeRect = new Rectangle(0, Renderer.Resolution.Height/2 - 128, Renderer.Resolution.Width, 256);
|
StripeRect = new Rectangle(0, Renderer.Resolution.Height/2 - 128, Renderer.Resolution.Width, 256);
|
||||||
@@ -73,9 +73,21 @@ namespace OpenRA.Mods.D2k
|
|||||||
void TestAndContinue()
|
void TestAndContinue()
|
||||||
{
|
{
|
||||||
Ui.ResetAll();
|
Ui.ResetAll();
|
||||||
Game.LoadShellMap();
|
if (!FileSystem.Exists(Info["TestFile"]))
|
||||||
Ui.ResetAll();
|
{
|
||||||
Ui.OpenWindow("MAINMENU_BG");
|
var args = new WidgetArgs()
|
||||||
|
{
|
||||||
|
{ "continueLoading", () => TestAndContinue() },
|
||||||
|
{ "installData", Info }
|
||||||
|
};
|
||||||
|
Ui.OpenWindow(Info["InstallerMenuWidget"], args);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Game.LoadShellMap();
|
||||||
|
Ui.ResetAll();
|
||||||
|
Ui.OpenWindow("MAINMENU_BG");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -58,6 +58,8 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
<Compile Include="D2kLoadScreen.cs" />
|
<Compile Include="D2kLoadScreen.cs" />
|
||||||
|
<Compile Include="Widgets\Logic\D2kInstallFromCDLogic.cs" />
|
||||||
|
<Compile Include="Widgets\Logic\D2kInstallLogic.cs" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\OpenRA.FileFormats\OpenRA.FileFormats.csproj">
|
<ProjectReference Include="..\OpenRA.FileFormats\OpenRA.FileFormats.csproj">
|
||||||
|
|||||||
119
OpenRA.Mods.D2k/Widgets/Logic/D2kInstallFromCDLogic.cs
Normal file
119
OpenRA.Mods.D2k/Widgets/Logic/D2kInstallFromCDLogic.cs
Normal file
@@ -0,0 +1,119 @@
|
|||||||
|
#region Copyright & License Information
|
||||||
|
/*
|
||||||
|
* Copyright 2007-2012 The OpenRA Developers (see AUTHORS)
|
||||||
|
* 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. For more information,
|
||||||
|
* see COPYING.
|
||||||
|
*/
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading;
|
||||||
|
using OpenRA.FileFormats;
|
||||||
|
using OpenRA.FileFormats.Graphics;
|
||||||
|
using OpenRA.Widgets;
|
||||||
|
|
||||||
|
namespace OpenRA.Mods.D2k.Widgets.Logic
|
||||||
|
{
|
||||||
|
public class D2kInstallFromCDLogic
|
||||||
|
{
|
||||||
|
Widget panel;
|
||||||
|
ProgressBarWidget progressBar;
|
||||||
|
LabelWidget statusLabel;
|
||||||
|
Action continueLoading;
|
||||||
|
ButtonWidget retryButton, backButton;
|
||||||
|
Widget installingContainer, insertDiskContainer;
|
||||||
|
|
||||||
|
[ObjectCreator.UseCtor]
|
||||||
|
public D2kInstallFromCDLogic(Widget widget, Action continueLoading)
|
||||||
|
{
|
||||||
|
this.continueLoading = continueLoading;
|
||||||
|
panel = widget.Get("INSTALL_FROMCD_PANEL");
|
||||||
|
progressBar = panel.Get<ProgressBarWidget>("PROGRESS_BAR");
|
||||||
|
statusLabel = panel.Get<LabelWidget>("STATUS_LABEL");
|
||||||
|
|
||||||
|
backButton = panel.Get<ButtonWidget>("BACK_BUTTON");
|
||||||
|
backButton.OnClick = Ui.CloseWindow;
|
||||||
|
|
||||||
|
retryButton = panel.Get<ButtonWidget>("RETRY_BUTTON");
|
||||||
|
retryButton.OnClick = CheckForDisk;
|
||||||
|
|
||||||
|
installingContainer = panel.Get("INSTALLING");
|
||||||
|
insertDiskContainer = panel.Get("INSERT_DISK");
|
||||||
|
CheckForDisk();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CheckForDisk()
|
||||||
|
{
|
||||||
|
Func<string, bool> ValidDiskFilter = diskRoot => File.Exists(diskRoot+Path.DirectorySeparatorChar+"MAIN.MIX") &&
|
||||||
|
File.Exists(new string[] { diskRoot, "setup", "setup.z" }.Aggregate(Path.Combine));
|
||||||
|
|
||||||
|
var path = InstallUtils.GetMountedDisk(ValidDiskFilter);
|
||||||
|
|
||||||
|
if (path != null)
|
||||||
|
Install(path);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
insertDiskContainer.IsVisible = () => true;
|
||||||
|
installingContainer.IsVisible = () => false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Install(string source)
|
||||||
|
{
|
||||||
|
backButton.IsDisabled = () => true;
|
||||||
|
retryButton.IsDisabled = () => true;
|
||||||
|
insertDiskContainer.IsVisible = () => false;
|
||||||
|
installingContainer.IsVisible = () => true;
|
||||||
|
|
||||||
|
var dest = new string[] { Platform.SupportDir, "Content", "d2k" }.Aggregate(Path.Combine);
|
||||||
|
var copyFiles = new string[] { "music/ambush.aud" };
|
||||||
|
|
||||||
|
var extractPackage = "setup/setup.z";
|
||||||
|
var extractFiles = new string[] { "DATA.R8", "MOUSE.R8", "BLOXBASE.R8" };
|
||||||
|
|
||||||
|
var installCounter = 0;
|
||||||
|
var installTotal = copyFiles.Count() + extractFiles.Count();
|
||||||
|
var onProgress = (Action<string>)(s => Game.RunAfterTick(() =>
|
||||||
|
{
|
||||||
|
progressBar.Percentage = installCounter*100/installTotal;
|
||||||
|
installCounter++;
|
||||||
|
|
||||||
|
statusLabel.GetText = () => s;
|
||||||
|
}));
|
||||||
|
|
||||||
|
var onError = (Action<string>)(s => Game.RunAfterTick(() =>
|
||||||
|
{
|
||||||
|
statusLabel.GetText = () => "Error: "+s;
|
||||||
|
backButton.IsDisabled = () => false;
|
||||||
|
retryButton.IsDisabled = () => false;
|
||||||
|
}));
|
||||||
|
|
||||||
|
var t = new Thread( _ =>
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (!InstallUtils.CopyFiles(source, copyFiles, dest, onProgress, onError))
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!InstallUtils.ExtractFromPackage(source, extractPackage, extractFiles, dest, onProgress, onError))
|
||||||
|
return;
|
||||||
|
|
||||||
|
Game.RunAfterTick(() =>
|
||||||
|
{
|
||||||
|
Ui.CloseWindow();
|
||||||
|
continueLoading();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
onError("Installation failed");
|
||||||
|
}
|
||||||
|
}) { IsBackground = true };
|
||||||
|
t.Start();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
35
OpenRA.Mods.D2k/Widgets/Logic/D2kInstallLogic.cs
Normal file
35
OpenRA.Mods.D2k/Widgets/Logic/D2kInstallLogic.cs
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
#region Copyright & License Information
|
||||||
|
/*
|
||||||
|
* Copyright 2007-2012 The OpenRA Developers (see AUTHORS)
|
||||||
|
* 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. For more information,
|
||||||
|
* see COPYING.
|
||||||
|
*/
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using OpenRA.Widgets;
|
||||||
|
|
||||||
|
namespace OpenRA.Mods.D2k.Widgets.Logic
|
||||||
|
{
|
||||||
|
public class D2kInstallLogic
|
||||||
|
{
|
||||||
|
[ObjectCreator.UseCtor]
|
||||||
|
public D2kInstallLogic(Widget widget, Dictionary<string,string> installData, Action continueLoading)
|
||||||
|
{
|
||||||
|
var panel = widget.Get("INSTALL_PANEL");
|
||||||
|
var args = new WidgetArgs()
|
||||||
|
{
|
||||||
|
{ "afterInstall", () => { Ui.CloseWindow(); continueLoading(); } },
|
||||||
|
{ "installData", installData }
|
||||||
|
};
|
||||||
|
|
||||||
|
panel.Get<ButtonWidget>("INSTALL_BUTTON").OnClick = () =>
|
||||||
|
Ui.OpenWindow("INSTALL_FROMCD_PANEL", args);
|
||||||
|
|
||||||
|
panel.Get<ButtonWidget>("QUIT_BUTTON").OnClick = Game.Exit;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
4
README
4
README
@@ -1,5 +1,5 @@
|
|||||||
OpenRA is a Libre/Free Real Time Strategy game engine supporting early Westwood games like Command & Conquer and Command & Conquer: Red Alert.
|
OpenRA is a Libre/Free Real Time Strategy game engine supporting early Westwood games like Command & Conquer and Command & Conquer: Red Alert.
|
||||||
|
|
||||||
Distributed mods include a reimagining and updating of both the Red Alert and Command & Conquer multiplayer games. This repository tries to add Dune 2000. It is already a standalone mod, but still falls back to Red Alert gamefiles at some times.
|
Distributed mods include a reimagining and updating of both the Red Alert and Command & Conquer multiplayer games.
|
||||||
|
|
||||||
Please read INSTALL on how to install an OpenRA development environment, HACKING for an overview of the engine and mods/d2k/TODO to find out about the still missing features. You need to copy "Dune 2000/Data/GAMESFX" and "Dune 2000/DATA/DATA.R8" and "Dune 2000/DATA/MOUSE.R8" to ~/.openra/Content/d2k/ and run the bash script ripD2kGameFiles.sh before starting the d2k mod.
|
Please read INSTALL on how to install an OpenRA development environment and HACKING for an overview of the engine.
|
||||||
@@ -1,16 +1,16 @@
|
|||||||
Background@INSTALL_PANEL:
|
Background@INSTALL_PANEL:
|
||||||
Logic:RAInstallLogic
|
Logic:D2kInstallLogic
|
||||||
X:(WINDOW_RIGHT - WIDTH)/2
|
X:(WINDOW_RIGHT - WIDTH)/2
|
||||||
Y:(WINDOW_BOTTOM - HEIGHT)/2
|
Y:(WINDOW_BOTTOM - HEIGHT)/2
|
||||||
Width:500
|
Width:600
|
||||||
Height:160
|
Height:300
|
||||||
Children:
|
Children:
|
||||||
Label@TITLE:
|
Label@TITLE:
|
||||||
X:0
|
X:0
|
||||||
Y:20
|
Y:20
|
||||||
Width:PARENT_RIGHT
|
Width:PARENT_RIGHT
|
||||||
Height:25
|
Height:25
|
||||||
Text:Install Required
|
Text:Content files missing
|
||||||
Align:Center
|
Align:Center
|
||||||
Font:Bold
|
Font:Bold
|
||||||
Label@DESC1:
|
Label@DESC1:
|
||||||
@@ -18,28 +18,56 @@ Background@INSTALL_PANEL:
|
|||||||
Y:50
|
Y:50
|
||||||
Width:PARENT_RIGHT
|
Width:PARENT_RIGHT
|
||||||
Height:25
|
Height:25
|
||||||
Text:OpenRA requires the original Red Alert game content.
|
Text:This is the work in progress Dune 2000 mod.
|
||||||
Align:Center
|
Align:Center
|
||||||
Label@DESC2:
|
Label@DESC2:
|
||||||
X:0
|
X:0
|
||||||
Y:70
|
Y:70
|
||||||
Width:PARENT_RIGHT
|
Width:PARENT_RIGHT
|
||||||
Height:25
|
Height:25
|
||||||
Text:Content can be downloaded, or copied from the install CD.
|
Text:It requires the original Dune 2000 (and still some Red Alert game) content.
|
||||||
Align:Center
|
Align:Center
|
||||||
Button@DOWNLOAD_BUTTON:
|
Label@DESC4:
|
||||||
X:PARENT_RIGHT - 280
|
X:0
|
||||||
Y:PARENT_BOTTOM - 45
|
Y:110
|
||||||
Width:120
|
Width:PARENT_RIGHT
|
||||||
Height:25
|
Height:25
|
||||||
Text:Download
|
Text:You need to copy "Dune 2000/Data/GAMESFX", "Dune 2000/DATA/DATA.R8"
|
||||||
Font:Bold
|
Align:Center
|
||||||
|
Label@DESC5:
|
||||||
|
X:0
|
||||||
|
Y:130
|
||||||
|
Width:PARENT_RIGHT
|
||||||
|
Height:25
|
||||||
|
Text:and "Dune 2000/DATA/MOUSE.R8" from your local Dune 2000 installation
|
||||||
|
Align:Center
|
||||||
|
Label@DESC6:
|
||||||
|
X:0
|
||||||
|
Y:150
|
||||||
|
Width:PARENT_RIGHT
|
||||||
|
Height:25
|
||||||
|
Text:to ~/.openra/Content/d2k/ and run the bash script ripD2kGameFiles.sh
|
||||||
|
Align:Center
|
||||||
|
Label@DESC7:
|
||||||
|
X:0
|
||||||
|
Y:170
|
||||||
|
Width:PARENT_RIGHT
|
||||||
|
Height:25
|
||||||
|
Text:to convert the content. In the future this GUI should do this
|
||||||
|
Align:Center
|
||||||
|
Label@DESC8:
|
||||||
|
X:0
|
||||||
|
Y:190
|
||||||
|
Width:PARENT_RIGHT
|
||||||
|
Height:25
|
||||||
|
Text:automatically using your Dune 2000 CD (won't work yet).
|
||||||
|
Align:Center
|
||||||
Button@INSTALL_BUTTON:
|
Button@INSTALL_BUTTON:
|
||||||
X:PARENT_RIGHT - 420
|
X:PARENT_RIGHT - 420
|
||||||
Y:PARENT_BOTTOM - 45
|
Y:PARENT_BOTTOM - 45
|
||||||
Width:120
|
Width:150
|
||||||
Height:25
|
Height:25
|
||||||
Text:Use CD
|
Text:Use CD (will crash)
|
||||||
Font:Bold
|
Font:Bold
|
||||||
Button@QUIT_BUTTON:
|
Button@QUIT_BUTTON:
|
||||||
X:PARENT_RIGHT - 140
|
X:PARENT_RIGHT - 140
|
||||||
@@ -49,51 +77,8 @@ Background@INSTALL_PANEL:
|
|||||||
Text:Quit
|
Text:Quit
|
||||||
Font:Bold
|
Font:Bold
|
||||||
|
|
||||||
Background@INSTALL_DOWNLOAD_PANEL:
|
|
||||||
Logic:DownloadPackagesLogic
|
|
||||||
X:(WINDOW_RIGHT - WIDTH)/2
|
|
||||||
Y:(WINDOW_BOTTOM - HEIGHT)/2
|
|
||||||
Width:500
|
|
||||||
Height:160
|
|
||||||
Children:
|
|
||||||
Label@TITLE:
|
|
||||||
X:0
|
|
||||||
Y:20
|
|
||||||
Width:PARENT_RIGHT
|
|
||||||
Height:25
|
|
||||||
Text:Downloading Red Alert Content
|
|
||||||
Align:Center
|
|
||||||
Font:Bold
|
|
||||||
ProgressBar@PROGRESS_BAR:
|
|
||||||
X:50
|
|
||||||
Y:55
|
|
||||||
Width:PARENT_RIGHT - 100
|
|
||||||
Height:25
|
|
||||||
Label@STATUS_LABEL:
|
|
||||||
X:50
|
|
||||||
Y:80
|
|
||||||
Width:PARENT_RIGHT - 100
|
|
||||||
Height:25
|
|
||||||
Align:Left
|
|
||||||
Button@RETRY_BUTTON:
|
|
||||||
X:PARENT_RIGHT - 280
|
|
||||||
Y:PARENT_BOTTOM - 45
|
|
||||||
Width:120
|
|
||||||
Height:25
|
|
||||||
Visible: false
|
|
||||||
Text:Retry
|
|
||||||
Font:Bold
|
|
||||||
Key:return
|
|
||||||
Button@CANCEL_BUTTON:
|
|
||||||
X:PARENT_RIGHT - 140
|
|
||||||
Y:PARENT_BOTTOM - 45
|
|
||||||
Width:120
|
|
||||||
Height:25
|
|
||||||
Text:Cancel
|
|
||||||
Font:Bold
|
|
||||||
Key:escape
|
|
||||||
Background@INSTALL_FROMCD_PANEL:
|
Background@INSTALL_FROMCD_PANEL:
|
||||||
Logic:RAInstallFromCDLogic
|
Logic:D2kInstallFromCDLogic
|
||||||
X:(WINDOW_RIGHT - WIDTH)/2
|
X:(WINDOW_RIGHT - WIDTH)/2
|
||||||
Y:(WINDOW_BOTTOM - HEIGHT)/2
|
Y:(WINDOW_BOTTOM - HEIGHT)/2
|
||||||
Width:500
|
Width:500
|
||||||
@@ -138,7 +123,7 @@ Background@INSTALL_FROMCD_PANEL:
|
|||||||
Y:70
|
Y:70
|
||||||
Width:PARENT_RIGHT
|
Width:PARENT_RIGHT
|
||||||
Height:25
|
Height:25
|
||||||
Text:Please insert one of the Red Alert install CDs then click Retry.
|
Text:Please insert the Dune 2000 install CDs then click Retry.
|
||||||
Align:Center
|
Align:Center
|
||||||
Button@RETRY_BUTTON:
|
Button@RETRY_BUTTON:
|
||||||
X:PARENT_RIGHT - 280
|
X:PARENT_RIGHT - 280
|
||||||
|
|||||||
@@ -81,6 +81,7 @@ Voices:
|
|||||||
|
|
||||||
TileSets:
|
TileSets:
|
||||||
mods/d2k/tilesets/arrakis.yaml
|
mods/d2k/tilesets/arrakis.yaml
|
||||||
|
# mods/d2k/tilesets/bloxbase.yaml
|
||||||
|
|
||||||
TileSize: 32
|
TileSize: 32
|
||||||
|
|
||||||
@@ -90,6 +91,8 @@ Music:
|
|||||||
Movies:
|
Movies:
|
||||||
|
|
||||||
LoadScreen: D2kLoadScreen
|
LoadScreen: D2kLoadScreen
|
||||||
|
InstallerMenuWidget: INSTALL_PANEL
|
||||||
|
TestFile: DATA.R8
|
||||||
|
|
||||||
ServerTraits:
|
ServerTraits:
|
||||||
LobbyCommands
|
LobbyCommands
|
||||||
|
|||||||
Reference in New Issue
Block a user