diff --git a/OpenRA.Mods.Cnc/OpenRA.Mods.Cnc.csproj b/OpenRA.Mods.Cnc/OpenRA.Mods.Cnc.csproj
index 4425d1d80e..f32f60a411 100644
--- a/OpenRA.Mods.Cnc/OpenRA.Mods.Cnc.csproj
+++ b/OpenRA.Mods.Cnc/OpenRA.Mods.Cnc.csproj
@@ -74,7 +74,6 @@
-
diff --git a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj
index bb21104cb3..968be6d787 100644
--- a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj
+++ b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj
@@ -326,7 +326,6 @@
-
@@ -361,6 +360,7 @@
+
diff --git a/OpenRA.Mods.Cnc/Widgets/Logic/CncCheatsLogic.cs b/OpenRA.Mods.RA/Widgets/Logic/CheatsLogic.cs
similarity index 65%
rename from OpenRA.Mods.Cnc/Widgets/Logic/CncCheatsLogic.cs
rename to OpenRA.Mods.RA/Widgets/Logic/CheatsLogic.cs
index 9e127b74f5..f07d7db388 100644
--- a/OpenRA.Mods.Cnc/Widgets/Logic/CncCheatsLogic.cs
+++ b/OpenRA.Mods.RA/Widgets/Logic/CheatsLogic.cs
@@ -9,55 +9,54 @@
#endregion
using System;
+using OpenRA;
using OpenRA.Traits;
using OpenRA.Widgets;
-namespace OpenRA.Mods.Cnc.Widgets.Logic
+namespace OpenRA.Mods.RA.Widgets.Logic
{
- public class CncCheatsLogic
+ public class CheatsLogic
{
[ObjectCreator.UseCtor]
- public CncCheatsLogic(Widget widget, Action onExit, World world)
+ public CheatsLogic(Widget widget, Action onExit, World world)
{
- var panel = widget;
-
var devTrait = world.LocalPlayer.PlayerActor.Trait();
- var shroudCheckbox = panel.GetWidget("DISABLE_SHROUD");
+
+ var shroudCheckbox = widget.GetWidget("DISABLE_SHROUD");
shroudCheckbox.IsChecked = () => devTrait.DisableShroud;
shroudCheckbox.OnClick = () => Order(world, "DevShroud");
- var pathCheckbox = panel.GetWidget("SHOW_UNIT_PATHS");
+ var pathCheckbox = widget.GetWidget("SHOW_UNIT_PATHS");
pathCheckbox.IsChecked = () => devTrait.PathDebug;
pathCheckbox.OnClick = () => Order(world, "DevPathDebug");
-
- panel.GetWidget("GIVE_CASH").OnClick = () =>
+ widget.GetWidget("GIVE_CASH").OnClick = () =>
world.IssueOrder(new Order("DevGiveCash", world.LocalPlayer.PlayerActor, false));
- var fastBuildCheckbox = panel.GetWidget("INSTANT_BUILD");
+ var fastBuildCheckbox = widget.GetWidget("INSTANT_BUILD");
fastBuildCheckbox.IsChecked = () => devTrait.FastBuild;
fastBuildCheckbox.OnClick = () => Order(world, "DevFastBuild");
- var fastChargeCheckbox = panel.GetWidget("INSTANT_CHARGE");
+ var fastChargeCheckbox = widget.GetWidget("INSTANT_CHARGE");
fastChargeCheckbox.IsChecked = () => devTrait.FastCharge;
fastChargeCheckbox.OnClick = () => Order(world, "DevFastCharge");
- var allTechCheckbox = panel.GetWidget("ENABLE_TECH");
+ var allTechCheckbox = widget.GetWidget("ENABLE_TECH");
allTechCheckbox.IsChecked = () => devTrait.AllTech;
allTechCheckbox.OnClick = () => Order(world, "DevEnableTech");
- var powerCheckbox = panel.GetWidget("UNLIMITED_POWER");
+ var powerCheckbox = widget.GetWidget("UNLIMITED_POWER");
powerCheckbox.IsChecked = () => devTrait.UnlimitedPower;
powerCheckbox.OnClick = () => Order(world, "DevUnlimitedPower");
- var buildAnywhereCheckbox = panel.GetWidget("BUILD_ANYWHERE");
+ var buildAnywhereCheckbox = widget.GetWidget("BUILD_ANYWHERE");
buildAnywhereCheckbox.IsChecked = () => devTrait.BuildAnywhere;
buildAnywhereCheckbox.OnClick = () => Order(world, "DevBuildAnywhere");
- panel.GetWidget("GIVE_EXPLORATION").OnClick = () =>
+ widget.GetWidget("GIVE_EXPLORATION").OnClick = () =>
world.IssueOrder(new Order("DevGiveExploration", world.LocalPlayer.PlayerActor, false));
- panel.GetWidget("CLOSE").OnClick = () => { Ui.CloseWindow(); onExit(); };
+ widget.GetWidget("CLOSE").OnClick = () => { Ui.CloseWindow(); onExit(); };
}
public void Order(World world, string order)
diff --git a/OpenRA.Mods.RA/Widgets/Logic/DeveloperModeLogic.cs b/OpenRA.Mods.RA/Widgets/Logic/DeveloperModeLogic.cs
deleted file mode 100644
index 74e9183e3e..0000000000
--- a/OpenRA.Mods.RA/Widgets/Logic/DeveloperModeLogic.cs
+++ /dev/null
@@ -1,71 +0,0 @@
-#region Copyright & License Information
-/*
- * Copyright 2007-2011 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 OpenRA;
-using OpenRA.Traits;
-using OpenRA.Widgets;
-
-namespace OpenRA.Mods.RA.Widgets.Logic
-{
- public class DeveloperModeLogic
- {
- [ObjectCreator.UseCtor]
- public DeveloperModeLogic(World world)
- {
- var devmodeBG = Ui.Root.GetWidget("INGAME_ROOT").GetWidget("DEVELOPERMODE_BG");
- var devModeButton = Ui.Root.GetWidget("INGAME_DEVELOPERMODE_BUTTON");
- devModeButton.OnClick = () => devmodeBG.Visible ^= true;
-
- var devTrait = world.LocalPlayer.PlayerActor.Trait();
-
- var shroudCheckbox = devmodeBG.GetWidget("CHECKBOX_SHROUD");
- shroudCheckbox.IsChecked = () => devTrait.DisableShroud;
- shroudCheckbox.OnClick = () => Order(world, "DevShroud");
-
- var pathCheckbox = devmodeBG.GetWidget("CHECKBOX_PATHDEBUG");
- pathCheckbox.IsChecked = () => devTrait.PathDebug;
- pathCheckbox.OnClick = () => Order(world, "DevPathDebug");
-
- var fastBuildCheckbox = devmodeBG.GetWidget("INSTANT_BUILD");
- fastBuildCheckbox.IsChecked = () => devTrait.FastBuild;
- fastBuildCheckbox.OnClick = () => Order(world, "DevFastBuild");
-
- var fastChargeCheckbox = devmodeBG.GetWidget("INSTANT_CHARGE");
- fastChargeCheckbox.IsChecked = () => devTrait.FastCharge;
- fastChargeCheckbox.OnClick = () => Order(world, "DevFastCharge");
-
- var allTechCheckbox = devmodeBG.GetWidget("ENABLE_TECH");
- allTechCheckbox.IsChecked = () => devTrait.AllTech;
- allTechCheckbox.OnClick = () => Order(world, "DevEnableTech");
-
- var powerCheckbox = devmodeBG.GetWidget("UNLIMITED_POWER");
- powerCheckbox.IsChecked = () => devTrait.UnlimitedPower;
- powerCheckbox.OnClick = () => Order(world, "DevUnlimitedPower");
-
- var buildAnywhereCheckbox = devmodeBG.GetWidget("BUILD_ANYWHERE");
- buildAnywhereCheckbox.IsChecked = () => devTrait.BuildAnywhere;
- buildAnywhereCheckbox.OnClick = () => Order(world, "DevBuildAnywhere");
-
- devmodeBG.GetWidget("GIVE_CASH").OnClick = () =>
- world.IssueOrder(new Order("DevGiveCash", world.LocalPlayer.PlayerActor, false));
-
- devmodeBG.GetWidget("GIVE_EXPLORATION").OnClick = () =>
- world.IssueOrder(new Order("DevGiveExploration", world.LocalPlayer.PlayerActor, false));
-
- devModeButton.IsVisible = () => { return world.LobbyInfo.GlobalSettings.AllowCheats; };
- }
-
- public void Order(World world, string order)
- {
- world.IssueOrder(new Order(order, world.LocalPlayer.PlayerActor, false));
- }
- }
-}
diff --git a/OpenRA.Mods.RA/Widgets/Logic/IngameChromeLogic.cs b/OpenRA.Mods.RA/Widgets/Logic/IngameChromeLogic.cs
index 9de9312164..07608f583e 100644
--- a/OpenRA.Mods.RA/Widgets/Logic/IngameChromeLogic.cs
+++ b/OpenRA.Mods.RA/Widgets/Logic/IngameChromeLogic.cs
@@ -30,6 +30,13 @@ namespace OpenRA.Mods.RA.Widgets.Logic
r.GetWidget("INGAME_OPTIONS_BUTTON").OnClick = () =>
optionsBG.Visible = !optionsBG.Visible;
+
+ var cheatsButton = gameRoot.GetWidget("CHEATS_BUTTON");
+ cheatsButton.OnClick = () =>
+ {
+ Game.OpenWindow("CHEATS_PANEL", new WidgetArgs() {{"onExit", () => {} }});
+ };
+ cheatsButton.IsVisible = () => world.LocalPlayer != null && world.LobbyInfo.GlobalSettings.AllowCheats;
optionsBG.GetWidget("DISCONNECT").OnClick = () => LeaveGame(optionsBG);
diff --git a/mods/cnc/chrome/cheats.yaml b/mods/cnc/chrome/cheats.yaml
index 05e54df373..4e6b8a08e4 100644
--- a/mods/cnc/chrome/cheats.yaml
+++ b/mods/cnc/chrome/cheats.yaml
@@ -1,5 +1,5 @@
Container@CHEATS_PANEL:
- Logic:CncCheatsLogic
+ Logic:CheatsLogic
X:(WINDOW_RIGHT - WIDTH)/2
Y:(WINDOW_BOTTOM - 110)/2
Width:590
diff --git a/mods/ra/chrome/cheats.yaml b/mods/ra/chrome/cheats.yaml
new file mode 100644
index 0000000000..6c5ed21dca
--- /dev/null
+++ b/mods/ra/chrome/cheats.yaml
@@ -0,0 +1,76 @@
+Background@CHEATS_PANEL:
+ Logic:CheatsLogic
+ X:(WINDOW_RIGHT - WIDTH)/2
+ Y:(WINDOW_BOTTOM - HEIGHT)/2
+ Width:350
+ Height:420
+ Visible:true
+ Children:
+ Label@LABEL_TITLE:
+ X:(PARENT_RIGHT - WIDTH)/2
+ Y:20
+ Width:250
+ Height:25
+ Text:Developer Mode
+ Align:Center
+ Checkbox@DISABLE_SHROUD:
+ X:30
+ Y:50
+ Height:20
+ Width:PARENT_RIGHT - 30
+ Text:Disable Shroud
+ Button@GIVE_EXPLORATION
+ X:30
+ Y:80
+ Width:200
+ Height:20
+ Text: Give Exploration
+ Checkbox@SHOW_UNIT_PATHS:
+ X:30
+ Y:110
+ Width:PARENT_RIGHT - 30
+ Height:20
+ Text:Show Unit Paths
+ Button@GIVE_CASH:
+ X:30
+ Y:140
+ Width:200
+ Height:20
+ Text: Give Cash
+ Checkbox@INSTANT_BUILD:
+ X:30
+ Y:170
+ Width:PARENT_RIGHT - 30
+ Height:20
+ Text:Instant Build Speed
+ Checkbox@INSTANT_CHARGE:
+ X:30
+ Y:200
+ Width:PARENT_RIGHT - 30
+ Height:20
+ Text:Support Powers Charge Instantly
+ Checkbox@ENABLE_TECH:
+ X:30
+ Y:230
+ Width:PARENT_RIGHT - 30
+ Height:20
+ Text:Build Everything
+ Checkbox@UNLIMITED_POWER:
+ X:30
+ Y:260
+ Width:PARENT_RIGHT - 30
+ Height:20
+ Text:Unlimited Power
+ Checkbox@BUILD_ANYWHERE:
+ X:30
+ Y:290
+ Width:PARENT_RIGHT - 30
+ Height:20
+ Text:Build Anywhere
+ Button@CLOSE:
+ X:30
+ Y:360
+ Width:PARENT_RIGHT - 30
+ Height:20
+ Text:Close
+ Key:escape
diff --git a/mods/ra/chrome/ingame.yaml b/mods/ra/chrome/ingame.yaml
index 798b76dbbf..1ff583d0fa 100644
--- a/mods/ra/chrome/ingame.yaml
+++ b/mods/ra/chrome/ingame.yaml
@@ -73,12 +73,12 @@ Container@INGAME_ROOT:
Height:25
Text:Diplomacy
Font:Bold
- Button@INGAME_DEVELOPERMODE_BUTTON:
+ Button@CHEATS_BUTTON:
X:324
Y:0
Width:160
Height:25
- Text:Developer Mode
+ Text:Cheats
Visible:false
Font:Bold
RadarBin@INGAME_RADAR_BIN:
@@ -199,75 +199,6 @@ Container@INGAME_ROOT:
Width: 760
Height: 30
UseContrast: yes
- Background@DEVELOPERMODE_BG:
- Logic:DeveloperModeLogic
- X:(WINDOW_RIGHT - WIDTH)/2
- Y:(WINDOW_BOTTOM - HEIGHT)/2
- Width:350
- Height:370
- Visible:false
- Children:
- Label@LABEL_TITLE:
- X:(PARENT_RIGHT - WIDTH)/2
- Y:20
- Width:250
- Height:25
- Text:Developer Mode
- Align:Center
- Checkbox@CHECKBOX_SHROUD
- X:30
- Y:50
- Height:20
- Width:PARENT_RIGHT - 30
- Text:Disable Shroud
- Button@GIVE_EXPLORATION
- X:30
- Y:80
- Width:200
- Height:20
- Text: Give Exploration
- Checkbox@CHECKBOX_PATHDEBUG:
- X:30
- Y:110
- Width:PARENT_RIGHT - 30
- Height:20
- Text:Show Unit Paths
- Button@GIVE_CASH
- X:30
- Y:140
- Width:200
- Height:20
- Text: Give Cash
- Checkbox@INSTANT_BUILD
- X:30
- Y:170
- Width:PARENT_RIGHT - 30
- Height:20
- Text:Instant Build Speed
- Checkbox@INSTANT_CHARGE
- X:30
- Y:200
- Width:PARENT_RIGHT - 30
- Height:20
- Text:Support Powers Charge Instantly
- Checkbox@ENABLE_TECH
- X:30
- Y:230
- Width:PARENT_RIGHT - 30
- Height:20
- Text:Build Everything
- Checkbox@UNLIMITED_POWER
- X:30
- Y:260
- Width:PARENT_RIGHT - 30
- Height:20
- Text:Unlimited Power
- Checkbox@BUILD_ANYWHERE
- X:30
- Y:290
- Width:PARENT_RIGHT - 30
- Height:20
- Text:Build Anywhere
Background@PERF_BG:
ClickThrough:true
Background:dialog4
diff --git a/mods/ra/mod.yaml b/mods/ra/mod.yaml
index cb6e3e4de5..142c488fb7 100644
--- a/mods/ra/mod.yaml
+++ b/mods/ra/mod.yaml
@@ -63,6 +63,8 @@ ChromeLayout:
mods/ra/chrome/replaybrowser.yaml
mods/ra/chrome/dropdowns.yaml
mods/ra/chrome/modchooser.yaml
+ mods/ra/chrome/cheats.yaml
+
Weapons:
mods/ra/weapons.yaml