Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

added (broken) content installer, moved instruction to GUI

still depends on the hacky bash script and CD extractor crashes
  • Loading branch information...
commit accaf027fef9790b8937cd83499efbfd5cd7a4ab 1 parent 9b1e798
@Mailaender authored
View
20 OpenRA.Mods.D2k/D2kLoadScreen.cs
@@ -37,7 +37,7 @@ public void Init(Dictionary<string, string> info)
// can display loadscreen as early as possible
r = Game.Renderer;
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);
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);
@@ -73,9 +73,21 @@ public void StartGame()
void TestAndContinue()
{
Ui.ResetAll();
- Game.LoadShellMap();
- Ui.ResetAll();
- Ui.OpenWindow("MAINMENU_BG");
+ if (!FileSystem.Exists(Info["TestFile"]))
+ {
+ var args = new WidgetArgs()
+ {
+ { "continueLoading", () => TestAndContinue() },
+ { "installData", Info }
+ };
+ Ui.OpenWindow(Info["InstallerMenuWidget"], args);
+ }
+ else
+ {
+ Game.LoadShellMap();
+ Ui.ResetAll();
+ Ui.OpenWindow("MAINMENU_BG");
+ }
}
}
}
View
2  OpenRA.Mods.D2k/OpenRA.Mods.D2k.csproj
@@ -58,6 +58,8 @@
<ItemGroup>
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="D2kLoadScreen.cs" />
+ <Compile Include="Widgets\Logic\D2kInstallFromCDLogic.cs" />
+ <Compile Include="Widgets\Logic\D2kInstallLogic.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\OpenRA.FileFormats\OpenRA.FileFormats.csproj">
View
119 OpenRA.Mods.D2k/Widgets/Logic/D2kInstallFromCDLogic.cs
@@ -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();
+ }
+ }
+}
View
35 OpenRA.Mods.D2k/Widgets/Logic/D2kInstallLogic.cs
@@ -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;
+ }
+ }
+}
View
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.
-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.
View
99 mods/d2k/chrome/gameinit.yaml
@@ -1,16 +1,16 @@
Background@INSTALL_PANEL:
- Logic:RAInstallLogic
+ Logic:D2kInstallLogic
X:(WINDOW_RIGHT - WIDTH)/2
Y:(WINDOW_BOTTOM - HEIGHT)/2
- Width:500
- Height:160
+ Width:600
+ Height:300
Children:
Label@TITLE:
X:0
Y:20
Width:PARENT_RIGHT
Height:25
- Text:Install Required
+ Text:Content files missing
Align:Center
Font:Bold
Label@DESC1:
@@ -18,82 +18,67 @@ Background@INSTALL_PANEL:
Y:50
Width:PARENT_RIGHT
Height:25
- Text:OpenRA requires the original Red Alert game content.
+ Text:This is the work in progress Dune 2000 mod.
Align:Center
Label@DESC2:
X:0
Y:70
Width:PARENT_RIGHT
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
- Button@DOWNLOAD_BUTTON:
- X:PARENT_RIGHT - 280
- Y:PARENT_BOTTOM - 45
- Width:120
- Height:25
- Text:Download
- Font:Bold
- Button@INSTALL_BUTTON:
- X:PARENT_RIGHT - 420
- Y:PARENT_BOTTOM - 45
- Width:120
+ Label@DESC4:
+ X:0
+ Y:110
+ Width:PARENT_RIGHT
Height:25
- Text:Use CD
- Font:Bold
- Button@QUIT_BUTTON:
- X:PARENT_RIGHT - 140
- Y:PARENT_BOTTOM - 45
- Width:120
+ Text:You need to copy "Dune 2000/Data/GAMESFX", "Dune 2000/DATA/DATA.R8"
+ Align:Center
+ Label@DESC5:
+ X:0
+ Y:130
+ Width:PARENT_RIGHT
Height:25
- Text:Quit
- 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:
+ Text:and "Dune 2000/DATA/MOUSE.R8" from your local Dune 2000 installation
+ Align:Center
+ Label@DESC6:
X:0
- Y:20
+ Y:150
Width:PARENT_RIGHT
Height:25
- Text:Downloading Red Alert Content
+ Text:to ~/.openra/Content/d2k/ and run the bash script ripD2kGameFiles.sh
Align:Center
- Font:Bold
- ProgressBar@PROGRESS_BAR:
- X:50
- Y:55
- Width:PARENT_RIGHT - 100
+ Label@DESC7:
+ X:0
+ Y:170
+ Width:PARENT_RIGHT
Height:25
- Label@STATUS_LABEL:
- X:50
- Y:80
- Width:PARENT_RIGHT - 100
+ 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
- Align:Left
- Button@RETRY_BUTTON:
- X:PARENT_RIGHT - 280
+ Text:automatically using your Dune 2000 CD (won't work yet).
+ Align:Center
+ Button@INSTALL_BUTTON:
+ X:PARENT_RIGHT - 420
Y:PARENT_BOTTOM - 45
- Width:120
+ Width:150
Height:25
- Visible: false
- Text:Retry
+ Text:Use CD (will crash)
Font:Bold
- Key:return
- Button@CANCEL_BUTTON:
+ Button@QUIT_BUTTON:
X:PARENT_RIGHT - 140
Y:PARENT_BOTTOM - 45
Width:120
Height:25
- Text:Cancel
+ Text:Quit
Font:Bold
- Key:escape
+
Background@INSTALL_FROMCD_PANEL:
- Logic:RAInstallFromCDLogic
+ Logic:D2kInstallFromCDLogic
X:(WINDOW_RIGHT - WIDTH)/2
Y:(WINDOW_BOTTOM - HEIGHT)/2
Width:500
@@ -138,7 +123,7 @@ Background@INSTALL_FROMCD_PANEL:
Y:70
Width:PARENT_RIGHT
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
Button@RETRY_BUTTON:
X:PARENT_RIGHT - 280
View
3  mods/d2k/mod.yaml
@@ -81,6 +81,7 @@ Voices:
TileSets:
mods/d2k/tilesets/arrakis.yaml
+# mods/d2k/tilesets/bloxbase.yaml
TileSize: 32
@@ -90,6 +91,8 @@ Music:
Movies:
LoadScreen: D2kLoadScreen
+ InstallerMenuWidget: INSTALL_PANEL
+ TestFile: DATA.R8
ServerTraits:
LobbyCommands
Please sign in to comment.
Something went wrong with that request. Please try again.