Start moving towards saner RA widget logic. This switches players to observer mode after they have finished playing in RA/D2k and removes some legacy code.

This commit is contained in:
Scott_NZ
2013-04-21 18:34:48 +12:00
parent 7ec4bcad0e
commit ca80ac2d1f
35 changed files with 951 additions and 1290 deletions

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
@@ -92,7 +92,6 @@
<Compile Include="TiberiumRefinery.cs" />
<Compile Include="Widgets\CncWidgetUtils.cs" />
<Compile Include="Widgets\CncWorldInteractionControllerWidget.cs" />
<Compile Include="Widgets\LogicTickerWidget.cs" />
<Compile Include="Widgets\Logic\ButtonTooltipLogic.cs" />
<Compile Include="Widgets\Logic\CncConquestObjectivesLogic.cs" />
<Compile Include="Widgets\Logic\CncIngameChromeLogic.cs" />

View File

@@ -8,10 +8,10 @@
*/
#endregion
using System;
using System.Drawing;
using OpenRA.Mods.RA.Orders;
using OpenRA.Mods.RA.Buildings;
using OpenRA.Mods.RA.Orders;
using OpenRA.Mods.RA.Widgets;
using OpenRA.Traits;
using OpenRA.Widgets;

View File

@@ -84,9 +84,8 @@ namespace OpenRA.Mods.D2k
}
else
{
Game.LoadShellMap();
Ui.ResetAll();
Ui.OpenWindow("MAINMENU_BG");
Game.LoadShellMap();
}
}
}

View File

@@ -10,40 +10,9 @@
using OpenRA.Traits;
using OpenRA.Widgets;
using System.Collections.Generic;
namespace OpenRA.Mods.RA
{
// Legacy crap
public class OpenWidgetAtGameStartInfo : ITraitInfo
{
public readonly string Widget = "INGAME_ROOT";
public readonly string ObserverWidget = null;
public object Create(ActorInitializer init) { return new OpenWidgetAtGameStart(this); }
}
public class OpenWidgetAtGameStart: IWorldLoaded
{
readonly OpenWidgetAtGameStartInfo Info;
public OpenWidgetAtGameStart(OpenWidgetAtGameStartInfo Info)
{
this.Info = Info;
}
public void WorldLoaded(World world)
{
// Remove all open widgets
Ui.ResetAll();
if (world.LocalPlayer != null)
Game.OpenWindow(world, Info.Widget);
else if (Info.ObserverWidget != null)
Game.OpenWindow(world, Info.ObserverWidget);
}
}
// New version
public class LoadWidgetAtGameStartInfo : ITraitInfo
{
public readonly string Widget = null;

View File

@@ -267,7 +267,7 @@
<Compile Include="Move\PathSearch.cs" />
<Compile Include="NukePaletteEffect.cs" />
<Compile Include="NullLoadScreen.cs" />
<Compile Include="OpenWidgetAtGameStart.cs" />
<Compile Include="LoadWidgetAtGameStart.cs" />
<Compile Include="Orders\DeployOrderTargeter.cs" />
<Compile Include="Orders\EnterBuildingOrderTargeter.cs" />
<Compile Include="Orders\PlaceBuildingOrderGenerator.cs" />
@@ -370,6 +370,8 @@
<Compile Include="Valued.cs" />
<Compile Include="WaterPaletteRotation.cs" />
<Compile Include="Widgets\BuildPaletteWidget.cs" />
<Compile Include="Widgets\LogicTickerWidget.cs" />
<Compile Include="Widgets\Logic\IngameMenuLogic.cs" />
<Compile Include="Widgets\Logic\ModBrowserLogic.cs" />
<Compile Include="Widgets\Logic\ColorPickerLogic.cs" />
<Compile Include="Widgets\Logic\ConnectionLogic.cs" />
@@ -378,7 +380,6 @@
<Compile Include="Widgets\Logic\DownloadPackagesLogic.cs" />
<Compile Include="Widgets\Logic\IngameChatLogic.cs" />
<Compile Include="Widgets\Logic\IngameChromeLogic.cs" />
<Compile Include="Widgets\Logic\IngameObserverChromeLogic.cs" />
<Compile Include="Widgets\Logic\LobbyLogic.cs" />
<Compile Include="Widgets\Logic\LobbyUtils.cs" />
<Compile Include="Widgets\Logic\MainMenuButtonsLogic.cs" />

View File

@@ -87,11 +87,7 @@ namespace OpenRA.Mods.RA
Ui.OpenWindow(Info["InstallerMenuWidget"], args);
}
else
{
Game.LoadShellMap();
Ui.ResetAll();
Ui.OpenWindow("MAINMENU_BG");
}
}
}
}

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2011 The OpenRA Developers (see AUTHORS)
* Copyright 2007-2013 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,
@@ -19,99 +19,92 @@ namespace OpenRA.Mods.RA.Widgets.Logic
public class IngameChromeLogic
{
Widget gameRoot;
Widget playerRoot;
World world;
[ObjectCreator.UseCtor]
public IngameChromeLogic(World world)
{
var r = Ui.Root;
gameRoot = r.Get("INGAME_ROOT");
var optionsBG = gameRoot.Get("INGAME_OPTIONS_BG");
this.world = world;
gameRoot = Ui.Root.Get("INGAME_ROOT");
playerRoot = gameRoot.Get("PLAYER_ROOT");
// TODO: RA's broken UI wiring makes it unreasonably difficult to
// cache and restore the previous pause state, so opening/closing
// the menu in a paused singleplayer game will un-pause the game.
r.Get<ButtonWidget>("INGAME_OPTIONS_BUTTON").OnClick = () =>
InitRootWidgets();
if (world.LocalPlayer == null)
InitObserverWidgets();
else
InitPlayerWidgets();
}
void InitRootWidgets()
{
Widget optionsBG = null;
optionsBG = Game.LoadWidget(world, "INGAME_OPTIONS_BG", Ui.Root, new WidgetArgs
{
{ "onExit", () =>
{
optionsBG.Visible = !optionsBG.Visible;
if (world.LobbyInfo.IsSinglePlayer)
world.IssueOrder(Order.PauseGame(true));
world.IssueOrder(Order.PauseGame(false));
optionsBG.Visible = false;
}
}
});
gameRoot.Get<ButtonWidget>("INGAME_OPTIONS_BUTTON").OnClick = () =>
{
optionsBG.Visible ^= true;
if (world.LobbyInfo.IsSinglePlayer)
world.IssueOrder(Order.PauseGame(optionsBG.Visible));
};
var cheatsButton = gameRoot.Get<ButtonWidget>("CHEATS_BUTTON");
cheatsButton.OnClick = () =>
Game.LoadWidget(world, "CHAT_PANEL", gameRoot, new WidgetArgs());
}
void InitObserverWidgets()
{
Game.OpenWindow("CHEATS_PANEL", new WidgetArgs() {{"onExit", () => {} }});
};
cheatsButton.IsVisible = () => world.LocalPlayer != null && world.LobbyInfo.GlobalSettings.AllowCheats;
var observerWidgets = Game.LoadWidget(world, "OBSERVER_WIDGETS", playerRoot, new WidgetArgs());
Game.LoadWidget(world, "OBSERVER_STATS", observerWidgets, new WidgetArgs());
observerWidgets.Get<ButtonWidget>("INGAME_STATS_BUTTON").OnClick = () => gameRoot.Get("OBSERVER_STATS").Visible ^= true;
}
void InitPlayerWidgets()
{
var playerWidgets = Game.LoadWidget(world, "PLAYER_WIDGETS", playerRoot, new WidgetArgs());
Widget cheats = null;
cheats = Game.LoadWidget(world, "CHEATS_PANEL", playerWidgets, new WidgetArgs
{
{ "onExit", () => cheats.Visible = false }
});
var cheatsButton = playerWidgets.Get<ButtonWidget>("CHEATS_BUTTON");
cheatsButton.OnClick = () => cheats.Visible ^= true;
cheatsButton.IsVisible = () => world.LobbyInfo.GlobalSettings.AllowCheats;
var iop = world.WorldActor.TraitsImplementing<IObjectivesPanel>().FirstOrDefault();
if (iop != null && iop.ObjectivesPanel != null)
{
var objectivesButton = gameRoot.Get<ButtonWidget>("OBJECTIVES_BUTTON");
var objectivesWidget = Game.LoadWidget(world, iop.ObjectivesPanel, Ui.Root, new WidgetArgs());
objectivesWidget.Visible = false;
objectivesButton.OnClick += () => objectivesWidget.Visible = !objectivesWidget.Visible;
objectivesButton.IsVisible = () => world.LocalPlayer != null;
var objectivesButton = playerWidgets.Get<ButtonWidget>("OBJECTIVES_BUTTON");
var objectivesWidget = Game.LoadWidget(world, iop.ObjectivesPanel, playerWidgets, new WidgetArgs());
objectivesButton.Visible = true;
objectivesButton.OnClick += () => objectivesWidget.Visible ^= true;
}
var moneybin = gameRoot.Get("INGAME_MONEY_BIN");
moneybin.Get<OrderButtonWidget>("SELL").GetKey = _ => Game.Settings.Keys.SellKey;
moneybin.Get<OrderButtonWidget>("POWER_DOWN").GetKey = _ => Game.Settings.Keys.PowerDownKey;
moneybin.Get<OrderButtonWidget>("REPAIR").GetKey = _ => Game.Settings.Keys.RepairKey;
var moneyBin = playerWidgets.Get("INGAME_MONEY_BIN");
moneyBin.Get<OrderButtonWidget>("SELL").GetKey = _ => Game.Settings.Keys.SellKey;
moneyBin.Get<OrderButtonWidget>("POWER_DOWN").GetKey = _ => Game.Settings.Keys.PowerDownKey;
moneyBin.Get<OrderButtonWidget>("REPAIR").GetKey = _ => Game.Settings.Keys.RepairKey;
var chatPanel = Game.LoadWidget(world, "CHAT_PANEL", Ui.Root, new WidgetArgs());
gameRoot.AddChild(chatPanel);
optionsBG.Get<ButtonWidget>("DISCONNECT").OnClick = () => LeaveGame(optionsBG, world);
optionsBG.Get<ButtonWidget>("SETTINGS").OnClick = () => Ui.OpenWindow("SETTINGS_MENU");
optionsBG.Get<ButtonWidget>("MUSIC").OnClick = () => Ui.OpenWindow("MUSIC_MENU");
optionsBG.Get<ButtonWidget>("RESUME").OnClick = () =>
var winLossWatcher = playerWidgets.Get<LogicTickerWidget>("WIN_LOSS_WATCHER");
winLossWatcher.OnTick = () =>
{
optionsBG.Visible = false;
if (world.LobbyInfo.IsSinglePlayer)
world.IssueOrder(Order.PauseGame(false));
if (world.LocalPlayer.WinState != WinState.Undefined)
Game.RunAfterTick(() =>
{
playerRoot.RemoveChildren();
InitObserverWidgets();
});
};
optionsBG.Get<ButtonWidget>("SURRENDER").OnClick = () =>
{
optionsBG.Visible = false;
world.IssueOrder(new Order("Surrender", world.LocalPlayer.PlayerActor, false));
};
optionsBG.Get("SURRENDER").IsVisible = () => (world.LocalPlayer != null && world.LocalPlayer.WinState == WinState.Undefined);
var postgameBG = gameRoot.Get("POSTGAME_BG");
var postgameText = postgameBG.Get<LabelWidget>("TEXT");
var postGameObserve = postgameBG.Get<ButtonWidget>("POSTGAME_OBSERVE");
var postgameQuit = postgameBG.Get<ButtonWidget>("POSTGAME_QUIT");
postgameQuit.OnClick = () => LeaveGame(postgameQuit, world);
postGameObserve.OnClick = () => postgameQuit.Visible = false;
postGameObserve.IsVisible = () => world.LocalPlayer.WinState != WinState.Won;
postgameBG.IsVisible = () =>
{
return postgameQuit.Visible && world.LocalPlayer != null && world.LocalPlayer.WinState != WinState.Undefined;
};
postgameText.GetText = () =>
{
var state = world.LocalPlayer.WinState;
return state == WinState.Undefined ? "" :
(state == WinState.Lost ? "YOU ARE DEFEATED" : "YOU ARE VICTORIOUS");
};
}
void LeaveGame(Widget pane, World world)
{
Sound.PlayNotification(null, "Speech", "Leave", world.LocalPlayer.Country.Race);
pane.Visible = false;
Game.Disconnect();
Game.LoadShellMap();
Ui.CloseWindow();
Ui.OpenWindow("MAINMENU_BG");
}
}
}

View File

@@ -0,0 +1,46 @@
#region Copyright & License Information
/*
* Copyright 2007-2013 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.Widgets;
namespace OpenRA.Mods.RA.Widgets.Logic
{
class IngameMenuLogic
{
[ObjectCreator.UseCtor]
public IngameMenuLogic(Widget widget, World world, Action onExit)
{
widget.Get<ButtonWidget>("DISCONNECT").OnClick = () =>
{
onExit();
LeaveGame(widget, world, onExit);
};
widget.Get<ButtonWidget>("SETTINGS").OnClick = () => Ui.OpenWindow("SETTINGS_MENU");
widget.Get<ButtonWidget>("MUSIC").OnClick = () => Ui.OpenWindow("MUSIC_MENU");
widget.Get<ButtonWidget>("RESUME").OnClick = () => onExit();
widget.Get<ButtonWidget>("SURRENDER").OnClick = () =>
{
world.IssueOrder(new Order("Surrender", world.LocalPlayer.PlayerActor, false));
onExit();
};
widget.Get("SURRENDER").IsVisible = () => world.LocalPlayer != null && world.LocalPlayer.WinState == WinState.Undefined;
}
void LeaveGame(Widget widget, World world, Action onExit)
{
Sound.PlayNotification(null, "Speech", "Leave", world.LocalPlayer.Country.Race);
Game.Disconnect();
Ui.CloseWindow();
Game.LoadShellMap();
}
}
}

View File

@@ -1,67 +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 OpenRA.Traits;
using OpenRA.Widgets;
using OpenRA.Network;
using System;
using System.Drawing;
using System.Linq;
namespace OpenRA.Mods.RA.Widgets.Logic
{
public class IngameObserverChromeLogic
{
Widget gameRoot;
// WTF duplication
[ObjectCreator.UseCtor]
public IngameObserverChromeLogic(World world)
{
var r = Ui.Root;
gameRoot = r.Get("OBSERVER_ROOT");
var optionsBG = gameRoot.Get("INGAME_OPTIONS_BG");
r.Get<ButtonWidget>("INGAME_OPTIONS_BUTTON").OnClick = () =>
{
optionsBG.Visible = !optionsBG.Visible;
if (world.LobbyInfo.IsSinglePlayer)
world.IssueOrder(Order.PauseGame(true));
};
optionsBG.Get<ButtonWidget>("DISCONNECT").OnClick = () =>
{
optionsBG.Visible = false;
Game.Disconnect();
Game.LoadShellMap();
Ui.CloseWindow();
Ui.OpenWindow("MAINMENU_BG");
};
optionsBG.Get<ButtonWidget>("SETTINGS").OnClick = () => Ui.OpenWindow("SETTINGS_MENU");
optionsBG.Get<ButtonWidget>("MUSIC").OnClick = () => Ui.OpenWindow("MUSIC_MENU");
optionsBG.Get<ButtonWidget>("RESUME").OnClick = () =>
{
optionsBG.Visible = false;
if (world.LobbyInfo.IsSinglePlayer)
world.IssueOrder(Order.PauseGame(false));
};
optionsBG.Get<ButtonWidget>("SURRENDER").IsVisible = () => false;
Ui.Root.Get<ButtonWidget>("INGAME_STATS_BUTTON").OnClick = () => gameRoot.Get("OBSERVER_STATS").Visible ^= true;
if (!world.IsShellmap)
{
var chatPanel = Game.LoadWidget(world, "CHAT_PANEL", Ui.Root, new WidgetArgs());
gameRoot.AddChild(chatPanel);
}
}
}
}

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
#region Copyright & License Information
/*
* Copyright 2007-2011 The OpenRA Developers (see AUTHORS)
* Copyright 2007-2013 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,
@@ -11,11 +11,11 @@
using System;
using OpenRA.Widgets;
namespace OpenRA.Mods.Cnc.Widgets
namespace OpenRA.Mods.RA.Widgets
{
public class LogicTickerWidget : Widget
{
public Action OnTick = () => {};
public Action OnTick = () => { };
public override void Tick() { OnTick(); }
}
}

View File

@@ -1,232 +0,0 @@
Container@INGAME_ROOT:
Logic:IngameChromeLogic
Children:
WorldInteractionController@INTERACTION_CONTROLLER:
X:0
Y:0
Width:WINDOW_RIGHT
Height:WINDOW_BOTTOM
ViewportScrollController:
X:0
Y:0
Width:WINDOW_RIGHT
Height:WINDOW_BOTTOM
WorldCommand:
X:0
Y:0
Width:WINDOW_RIGHT
Height:WINDOW_BOTTOM
Timer@GAME_TIMER:
X: WINDOW_RIGHT/2
Y: 0-10
StrategicProgress@STRATEGIC_PROGRESS:
X: WINDOW_RIGHT/2
Y: 40
Background@POSTGAME_BG:
X:(WINDOW_RIGHT - WIDTH)/2
Y:(WINDOW_BOTTOM - HEIGHT)/2
Width:400
Height:100
Background:dialog4
Visible:false
Children:
Label@TEXT:
X:(PARENT_RIGHT - WIDTH)/2
Y:0
Width:200
Height:80
Align:Center
Button@POSTGAME_OBSERVE:
X:10
Y:(PARENT_BOTTOM - HEIGHT - 10)
Width:150
Height:25
Font:Bold
Text:Observe
Button@POSTGAME_QUIT:
X:(PARENT_RIGHT - WIDTH - 10)
Y:(PARENT_BOTTOM - HEIGHT - 10)
Width:150
Height:25
Font:Bold
Text:Leave
SupportPowerBin@INGAME_POWERS_BIN:
X:0
Y:25
ReadyText: READY
HoldText: ON HOLD
BuildPalette@INGAME_BUILD_PALETTE:
X:WINDOW_RIGHT - 250
Y:280
Width:250
Height:500
ReadyText: READY
HoldText: ON HOLD
RequiresText: Requires
IconWidth: 60
IconHeight: 47
Button@INGAME_OPTIONS_BUTTON:
X:0
Y:0
Width:160
Height:25
Text:Options (ESC)
Font:Bold
Key: escape
Button@INGAME_DIPLOMACY_BUTTON:
X:162
Y:0
Width:160
Height:25
Text:Diplomacy (F1)
Font:Bold
Key: f1
Button@CHEATS_BUTTON:
X:324
Y:0
Width:160
Height:25
Text:Cheats (F2)
Visible:false
Font:Bold
Key: f2
Button@OBJECTIVES_BUTTON:
X:486
Y:0
Width:160
Height:25
Text:Objectives (F3)
Visible:false
Font:Bold
Key: f3
RadarBin@INGAME_RADAR_BIN:
WorldInteractionController:INTERACTION_CONTROLLER
PowerBin@INGAME_POWER_BIN:
MoneyBin@INGAME_MONEY_BIN:
X:WINDOW_RIGHT - WIDTH
Y:0
Width:320
Height: 32
Children:
OrderButton@SELL:
Logic:OrderButtonsChromeLogic
X:3
Y:0
Width:30
Height:30
Image:sell
Description:Sell
LongDesc:Sell buildings, reclaiming a \nproportion of their build cost
OrderButton@POWER_DOWN:
Logic:OrderButtonsChromeLogic
X:39
Y:0
Width:30
Height:30
Image:power
Description:Powerdown
LongDesc:Disable unneeded structures so their \npower can be used elsewhere
OrderButton@REPAIR:
Logic:OrderButtonsChromeLogic
X:75
Y:0
Width:30
Height:30
Image:repair
Description:Repair
LongDesc:Repair damaged buildings
WorldTooltip:
Background@INGAME_OPTIONS_BG:
X:(WINDOW_RIGHT - WIDTH)/2
Y:(WINDOW_BOTTOM - HEIGHT)/2
Width:300
Height:295
Visible:false
Children:
Label@LABEL_TITLE:
X:(PARENT_RIGHT - WIDTH)/2
Y:20
Width:250
Height:25
Text:Options
Align:Center
Font:Bold
Button@RESUME:
X:(PARENT_RIGHT - WIDTH)/2
Y:60
Width:160
Height:25
Text:Resume
Font:Bold
Key:escape
Button@SETTINGS:
X:(PARENT_RIGHT - WIDTH)/2
Y:100
Width:160
Height:25
Text:Settings
Font:Bold
Button@MUSIC:
X:(PARENT_RIGHT - WIDTH)/2
Y:140
Width:160
Height:25
Text:Music
Font:Bold
Button@SURRENDER:
X:(PARENT_RIGHT - WIDTH)/2
Y:180
Width:160
Height:25
Text:Surrender
Font:Bold
Button@DISCONNECT:
X:(PARENT_RIGHT - WIDTH)/2
Y:220
Width:160
Height:25
Text:Abort Mission
Font:Bold
Background@DIPLOMACY_BG:
Logic:DiplomacyLogic
X:(WINDOW_RIGHT - WIDTH)/2
Y:(WINDOW_BOTTOM - HEIGHT)/2
Width:450
Height:400
Visible:false
Children:
Label@LABEL_TITLE:
X:(PARENT_RIGHT - WIDTH)/2
Y:20
Width:250
Height:25
Text:Diplomacy
Align:Center
Font:Bold
Button@CLOSE_DIPLOMACY:
X:(PARENT_RIGHT - WIDTH)/2
Y:350
Width:160
Height:25
Text:Close
Font:Bold
Key:escape
Background@PERF_BG:
ClickThrough:true
Background:dialog4
Logic:PerfDebugLogic
X:10
Y:WINDOW_BOTTOM - 250
Width: 210
Height: 250
Children:
PerfGraph@GRAPH:
X:5
Y:5
Width:200
Height:200
Label@TEXT:
X:20
Y:205
Width:170
Height:40

View File

@@ -1,4 +1,4 @@
Background@MAINMENU_BG:
Background@MAINMENU:
X:(WINDOW_RIGHT - WIDTH)/2
Y:(WINDOW_BOTTOM - HEIGHT)/2
Width:250

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,100 @@
Selectable: False
MapFormat: 5
Title: Shellmap
Description: Shellmap
Author: Westwood Studios
Tileset: ARRAKIS
MapSize: 128,128
Bounds: 16,16,80,80
UseAsShellmap: True
Type: Conquest
Players:
PlayerReference@Neutral:
Name: Neutral
OwnsWorld: True
Race: allies
Actors:
Actor0: spicebloom
Location: 27,42
Owner: Neutral
Actor3: spicebloom
Location: 43,22
Owner: Neutral
Actor4: spicebloom
Location: 50,53
Owner: Neutral
Actor5: spicebloom
Location: 50,65
Owner: Neutral
Actor6: spicebloom
Location: 45,75
Owner: Neutral
Actor7: spicebloom
Location: 64,52
Owner: Neutral
Actor8: spicebloom
Location: 65,64
Owner: Neutral
Actor9: spicebloom
Location: 65,20
Owner: Neutral
Actor12: spicebloom
Location: 85,42
Owner: Neutral
Actor13: spicebloom
Location: 40,45
Owner: Neutral
Actor14: spicebloom
Location: 52,37
Owner: Neutral
Actor15: spicebloom
Location: 67,34
Owner: Neutral
Actor16: spicebloom
Location: 76,43
Owner: Neutral
Actor17: spicebloom
Location: 26,75
Owner: Neutral
Actor18: spicebloom
Location: 48,91
Owner: Neutral
Actor19: spicebloom
Location: 29,61
Owner: Neutral
Actor22: spicebloom
Location: 93,68
Owner: Neutral
Actor23: spicebloom
Location: 71,74
Owner: Neutral
Actor24: spicebloom
Location: 62,92
Owner: Neutral
Actor25: spicebloom
Location: 82,65
Owner: Neutral
Smudges:
Rules:
World:
LoadWidgetAtGameStart:
Widget: MAINMENU
Sequences:
Weapons:
Voices:
Notifications:

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -45,10 +45,11 @@ Assemblies:
ChromeLayout:
mods/d2k/chrome/gameinit.yaml
mods/d2k/chrome/ingame.yaml
mods/ra/chrome/ingame.yaml
mods/ra/chrome/ingame-chat.yaml
mods/ra/chrome/ingame-observer.yaml
mods/ra/chrome/ingame-fmvplayer.yaml
mods/ra/chrome/ingame-menu.yaml
mods/ra/chrome/ingame-observerstats.yaml
mods/d2k/chrome/mainmenu.yaml
mods/ra/chrome/settings.yaml
mods/d2k/chrome/lobby.yaml

View File

@@ -273,9 +273,8 @@ Player:
HarvesterAttackNotifier:
World:
OpenWidgetAtGameStart:
LoadWidgetAtGameStart:
Widget: INGAME_ROOT
ObserverWidget: OBSERVER_ROOT
ScreenShaker:
NukePaletteEffect:
BuildingInfluence:

View File

@@ -4,7 +4,7 @@ Background@CHEATS_PANEL:
Y:(WINDOW_BOTTOM - HEIGHT)/2
Width:350
Height:475
Visible:true
Visible:false
Children:
Label@LABEL_TITLE:
X:(PARENT_RIGHT - WIDTH)/2

View File

@@ -0,0 +1,52 @@
Background@INGAME_OPTIONS_BG:
X:(WINDOW_RIGHT - WIDTH)/2
Y:(WINDOW_BOTTOM - HEIGHT)/2
Width:300
Height:295
Logic:IngameMenuLogic
Visible:false
Children:
Label@LABEL_TITLE:
X:(PARENT_RIGHT - WIDTH)/2
Y:20
Width:250
Height:25
Text:Options
Align:Center
Font:Bold
Button@RESUME:
X:(PARENT_RIGHT - WIDTH)/2
Y:60
Width:160
Height:25
Text:Resume
Font:Bold
Key:escape
Button@SETTINGS:
X:(PARENT_RIGHT - WIDTH)/2
Y:100
Width:160
Height:25
Text:Settings
Font:Bold
Button@MUSIC:
X:(PARENT_RIGHT - WIDTH)/2
Y:140
Width:160
Height:25
Text:Music
Font:Bold
Button@SURRENDER:
X:(PARENT_RIGHT - WIDTH)/2
Y:180
Width:160
Height:25
Text:Surrender
Font:Bold
Button@DISCONNECT:
X:(PARENT_RIGHT - WIDTH)/2
Y:220
Width:160
Height:25
Text:Abort Mission
Font:Bold

View File

@@ -0,0 +1,99 @@
Background@MISSION_OBJECTIVES:
Logic:MissionObjectivesLogic
X:25
Y:50
Width:512
Height:530
Visible:false
Background:dialog
Children:
Label@TITLE:
X:0
Y:15
Width:PARENT_RIGHT
Height:25
Font:Bold
Align:Center
Text:Objectives
Label@PRIMARY_OBJECTIVE_HEADER:
X:40
Y:40
Width:300
Height:25
Font:Bold
Text:Primary Objectives
Label@PRIMARY_STATUS_HEADER:
X:350
Y:40
Width:122
Height:25
Font:Bold
Text:Status
ScrollPanel@PRIMARY_OBJECTIVES:
X:25
Y:70
Width:PARENT_RIGHT-50
Height:200
ItemSpacing:5
Children:
Container@PRIMARY_OBJECTIVE_TEMPLATE:
X:15
Y:0-15
Width:PARENT_RIGHT
Height:60
Children:
Label@PRIMARY_OBJECTIVE:
X:0
Y:0
Width:300
Height:PARENT_BOTTOM
Font:Regular
WordWrap:True
Label@PRIMARY_STATUS:
X:310
Y:0
Width:122
Height:PARENT_BOTTOM
Font:Bold
WordWrap:True
Label@SECONDARY_OBJECTIVE_HEADER:
X:40
Y:275
Width:300
Height:25
Font:Bold
Text:Secondary Objectives
Label@SECONDARY_STATUS_HEADER:
X:350
Y:275
Width:122
Height:25
Font:Bold
Text:Status
ScrollPanel@SECONDARY_OBJECTIVES:
X:25
Y:305
Width:PARENT_RIGHT-50
Height:200
ItemSpacing:5
Children:
Container@SECONDARY_OBJECTIVE_TEMPLATE:
X:15
Y:0-15
Width:PARENT_RIGHT
Height:60
Children:
Label@SECONDARY_OBJECTIVE:
X:0
Y:0
Width:300
Height:PARENT_BOTTOM
Font:Regular
WordWrap:True
Label@SECONDARY_STATUS:
X:310
Y:0
Width:122
Height:PARENT_BOTTOM
Font:Bold
WordWrap:True

View File

@@ -1,643 +0,0 @@
Container@OBSERVER_ROOT:
Visible:true
Logic:IngameObserverChromeLogic
Children:
WorldInteractionController@INTERACTION_CONTROLLER:
X:0
Y:0
Width:WINDOW_RIGHT
Height:WINDOW_BOTTOM
ViewportScrollController:
X:0
Y:0
Width:WINDOW_RIGHT
Height:WINDOW_BOTTOM
Timer@GAME_TIMER:
X: WINDOW_RIGHT/2
Y: 0-10
Background@POSTGAME_BG:
X:(WINDOW_RIGHT - WIDTH)/2
Y:(WINDOW_BOTTOM - HEIGHT)/2
Width:400
Height:100
Background:dialog4
Visible:false
Children:
Label@TEXT:
X:(PARENT_RIGHT - WIDTH)/2
Y:0
Width:200
Height:80
Align:Center
Button@POSTGAME_OBSERVE:
X:10
Y:(PARENT_BOTTOM - HEIGHT - 10)
Width:150
Height:25
Font:Bold
Text:Observe
Button@POSTGAME_QUIT:
X:(PARENT_RIGHT - WIDTH - 10)
Y:(PARENT_BOTTOM - HEIGHT - 10)
Width:150
Height:25
Font:Bold
Text:Leave
SupportPowerBin@INGAME_POWERS_BIN:
X:0
Y:25
Button@INGAME_OPTIONS_BUTTON:
X:0
Y:0
Width:160
Height:25
Text:Options (ESC)
Font:Bold
Key:escape
Button@INGAME_STATS_BUTTON:
X:162
Y:0
Width:160
Height:25
Text:Statistics (F1)
Font:Bold
Key:f1
Background@RADAR_BG:
X:WINDOW_RIGHT-255
Y:5
Width:250
Height:250
Children:
Radar@INGAME_RADAR:
X:10
Y:10
Width:PARENT_RIGHT-19
Height:PARENT_BOTTOM-19
WorldInteractionController:INTERACTION_CONTROLLER
DropDownButton@SHROUD_SELECTOR:
Logic:ObserverShroudSelectorLogic
X:WINDOW_RIGHT-250
Y:260
Width:240
Height:25
Font:Bold
Visible:true
WorldTooltip:
Background@INGAME_OPTIONS_BG:
X:(WINDOW_RIGHT - WIDTH)/2
Y:(WINDOW_BOTTOM - HEIGHT)/2
Width:300
Height:295
Visible:false
Children:
Label@LABEL_TITLE:
X:(PARENT_RIGHT - WIDTH)/2
Y:20
Width:250
Height:25
Text:Options
Align:Center
Font:Bold
Button@RESUME:
X:(PARENT_RIGHT - WIDTH)/2
Y:60
Width:160
Height:25
Text:Resume
Font:Bold
Key:escape
Button@SETTINGS:
X:(PARENT_RIGHT - WIDTH)/2
Y:100
Width:160
Height:25
Text:Settings
Font:Bold
Button@MUSIC:
X:(PARENT_RIGHT - WIDTH)/2
Y:140
Width:160
Height:25
Text:Music
Font:Bold
Button@SURRENDER:
X:(PARENT_RIGHT - WIDTH)/2
Y:180
Width:160
Height:25
Text:Surrender
Font:Bold
Button@DISCONNECT:
X:(PARENT_RIGHT - WIDTH)/2
Y:220
Width:160
Height:25
Text:Abort Mission
Font:Bold
Background@PERF_BG:
ClickThrough:true
Background:dialog4
Logic:PerfDebugLogic
X:10
Y:WINDOW_BOTTOM - 250
Width: 210
Height: 250
Children:
PerfGraph@GRAPH:
X:5
Y:5
Width:200
Height:200
Label@TEXT:
X:20
Y:205
Width:170
Height:40
Container@OBSERVER_STATS:
Logic:ObserverStatsLogic
X:25
Y:50
Width:950
Height:500
Visible:false
Children:
Background@BACKGROUND:
Width:PARENT_RIGHT
Height:PARENT_BOTTOM
Background:dialog
Children:
Label@TITLE:
X:0
Y:15
Width:PARENT_RIGHT
Height:25
Font:Bold
Align:Center
Text:Statistics
DropDownButton@STATS_DROPDOWN:
X:PARENT_RIGHT-200
Y:15
Width:185
Height:25
Font:Bold
Container@BASIC_STATS_HEADERS:
X:0
Y:0
Width:PARENT_RIGHT
Height:PARENT_BOTTOM
Children:
Label@PLAYER_HEADER:
X:85
Y:40
Width:160
Height:25
Font:Bold
Text:Player
Label@CASH_HEADER:
X:245
Y:40
Width:80
Height:25
Font:Bold
Text:Cash
Label@EARNED_MIN_HEADER:
X:325
Y:40
Width:60
Height:25
Font:Bold
Text:Earned/min
Label@POWER_HEADER:
X:425
Y:40
Width:80
Height:25
Font:Bold
Text:Power
Label@KILLS_HEADER:
X:505
Y:40
Width:40
Height:25
Font:Bold
Text:Kills
Align:Right
Label@DEATHS_HEADER:
X:565
Y:40
Width:40
Height:25
Font:Bold
Text:Deaths
Align:Right
Label@ACTIONS_MIN_HEADER:
X:665
Y:40
Width:40
Height:25
Font:Bold
Text:Actions/min
Align:Right
Container@ECONOMY_STATS_HEADERS:
X:0
Y:0
Width:PARENT_RIGHT
Height:PARENT_BOTTOM
Children:
Label@PLAYER_HEADER:
X:85
Y:40
Width:160
Height:25
Font:Bold
Text:Player
Label@CASH_HEADER:
X:245
Y:40
Width:80
Height:25
Font:Bold
Text:Cash
Label@EARNED_MIN_HEADER:
X:325
Y:40
Width:60
Height:25
Font:Bold
Text:Earned/min
Label@EARNED_THIS_MIN_HEADER:
X:425
Y:40
Width:60
Height:25
Font:Bold
Text:Earned this min
Label@ASSETS_HEADER:
X:565
Y:40
Width:60
Height:25
Font:Bold
Text:Assets
Label@EARNED_HEADER:
X:645
Y:40
Width:60
Height:25
Font:Bold
Text:Earned
Label@SPENT_HEADER:
X:725
Y:40
Width:60
Height:25
Font:Bold
Text:Spent
Label@HARVESTERS_HEADER:
X:805
Y:40
Width:60
Height:25
Font:Bold
Text:Harvesters
Align:Right
Container@PRODUCTION_STATS_HEADERS:
X:0
Y:0
Width:PARENT_RIGHT
Height:PARENT_BOTTOM
Children:
Label@PLAYER_HEADER:
X:85
Y:40
Width:160
Height:25
Font:Bold
Text:Player
Label@PRODUCTION_HEADER:
X:245
Y:40
Width:320
Height:25
Font:Bold
Text:Production
Label@SUPPORT_POWERS_HEADER:
X:565
Y:40
Width:320
Height:25
Font:Bold
Text:Support Powers
Container@COMBAT_STATS_HEADERS:
X:0
Y:0
Width:PARENT_RIGHT
Height:PARENT_BOTTOM
Children:
Label@PLAYER_HEADER:
X:85
Y:40
Width:160
Height:25
Font:Bold
Text:Player
Label@CONTROL_HEADER:
X:245
Y:40
Width:60
Height:25
Font:Bold
Text:Control
Label@KILLS_COST_HEADER:
X:325
Y:40
Width:60
Height:25
Font:Bold
Text:Kills
Label@DEATHS_COST_HEADER:
X:405
Y:40
Width:60
Height:25
Font:Bold
Text:Deaths
Label@UNITS_KILLED_HEADER:
X:505
Y:40
Width:40
Height:25
Font:Bold
Text:Units Killed
Align:Right
Label@UNITS_DEAD_HEADER:
X:605
Y:40
Width:40
Height:25
Font:Bold
Text:Units Lost
Align:Right
Label@BUILDINGS_KILLED_HEADER:
X:725
Y:40
Width:40
Height:25
Font:Bold
Text:Bldg Killed
Align:Right
Label@BUILDINGS_DEAD_HEADER:
X:825
Y:40
Width:40
Height:25
Font:Bold
Text:Bldg Lost
Align:Right
Container@EARNED_THIS_MIN_GRAPH_HEADERS:
X:0
Y:0
Width:PARENT_RIGHT
Height:PARENT_BOTTOM
Children:
Label@EARNED_THIS_MIN_HEADER:
X:0
Y:40
Width:PARENT_RIGHT
Height:25
Font:Bold
Text:Earnings received each minute
Align:Center
ScrollPanel@PLAYER_STATS_PANEL:
X:25
Y:70
Width:PARENT_RIGHT-50
Height:PARENT_BOTTOM-45-50
ItemSpacing:5
Children:
ScrollItem@TEAM_TEMPLATE:
X:0
Y:0
Width:PARENT_RIGHT-35
Height:25
Children:
Label@TEAM:
X:0
Y:0
Width:PARENT_RIGHT
Height:PARENT_BOTTOM
Font:Bold
ScrollItem@BASIC_PLAYER_TEMPLATE:
X:0
Y:0
Width:PARENT_RIGHT-35
Height:25
Children:
Image@FLAG:
X:20
Y:5
Width:35
Height:PARENT_BOTTOM-5
ImageName:random
ImageCollection:flags
Label@PLAYER:
X:55
Y:0
Width:160
Height:PARENT_BOTTOM
Font:Bold
Label@CASH:
X:215
Y:0
Width:80
Height:PARENT_BOTTOM
Label@EARNED_MIN:
X:295
Y:0
Width:60
Height:PARENT_BOTTOM
Label@POWER:
X:395
Y:0
Width:80
Height:PARENT_BOTTOM
Label@KILLS:
X:475
Y:0
Width:40
Height:PARENT_BOTTOM
Align:Right
Label@DEATHS:
X:535
Y:0
Width:40
Height:PARENT_BOTTOM
Align:Right
Label@ACTIONS_MIN:
X:635
Y:0
Width:40
Height:PARENT_BOTTOM
Align:Right
ScrollItem@ECONOMY_PLAYER_TEMPLATE:
X:0
Y:0
Width:PARENT_RIGHT-35
Height:25
Children:
Image@FLAG:
X:20
Y:5
Width:35
Height:PARENT_BOTTOM-5
ImageName:random
ImageCollection:flags
Label@PLAYER:
X:55
Y:0
Width:160
Height:PARENT_BOTTOM
Font:Bold
Label@CASH:
X:215
Y:0
Width:80
Height:PARENT_BOTTOM
Label@EARNED_MIN:
X:295
Y:0
Width:60
Height:PARENT_BOTTOM
Label@EARNED_THIS_MIN:
X:395
Y:0
Width:60
Height:PARENT_BOTTOM
Label@ASSETS:
X:535
Y:0
Width:60
Height:PARENT_BOTTOM
Label@EARNED:
X:615
Y:0
Width:60
Height:PARENT_BOTTOM
Label@SPENT:
X:695
Y:0
Width:60
Height:PARENT_BOTTOM
Label@HARVESTERS:
X:775
Y:0
Width:60
Height:PARENT_BOTTOM
Align:Right
ScrollItem@PRODUCTION_PLAYER_TEMPLATE:
X:0
Y:0
Width:PARENT_RIGHT-35
Height:25
Children:
Image@FLAG:
X:20
Y:5
Width:35
Height:PARENT_BOTTOM-5
ImageName:random
ImageCollection:flags
Label@PLAYER:
X:55
Y:0
Width:160
Height:PARENT_BOTTOM
Font:Bold
ObserverProductionIcons@PRODUCTION_ICONS:
X:215
Y:0
Width:320
Height:PARENT_BOTTOM
ObserverSupportPowerIcons@SUPPORT_POWER_ICONS:
X:535
Y:0
Width:320
Height:PARENT_BOTTOM
ScrollItem@COMBAT_PLAYER_TEMPLATE:
X:0
Y:0
Width:PARENT_RIGHT-35
Height:25
Children:
Image@FLAG:
X:20
Y:5
Width:35
Height:PARENT_BOTTOM-5
ImageName:random
ImageCollection:flags
Label@PLAYER:
X:55
Y:0
Width:160
Height:PARENT_BOTTOM
Font:Bold
Label@CONTROL:
X:215
Y:0
Width:60
Height:PARENT_BOTTOM
Label@KILLS_COST:
X:295
Y:0
Width:60
Height:PARENT_BOTTOM
Label@DEATHS_COST:
X:375
Y:0
Width:60
Height:PARENT_BOTTOM
Label@UNITS_KILLED:
X:475
Y:0
Width:40
Height:PARENT_BOTTOM
Align:Right
Label@UNITS_DEAD:
X:575
Y:0
Width:40
Height:PARENT_BOTTOM
Align:Right
Label@BUILDINGS_KILLED:
X:695
Y:0
Width:40
Height:PARENT_BOTTOM
Align:Right
Label@BUILDINGS_DEAD:
X:795
Y:0
Width:40
Height:PARENT_BOTTOM
Align:Right
Container@EARNED_THIS_MIN_GRAPH_TEMPLATE:
X:0
Y:0
Width:PARENT_RIGHT-100
Height:PARENT_BOTTOM-50
Children:
LineGraph@EARNED_THIS_MIN_GRAPH:
X:0
Y:0
Width:PARENT_RIGHT
Height:PARENT_BOTTOM
ValueFormat:${0}
XAxisValueFormat:{0}
YAxisValueFormat:${0:F0}
XAxisSize:20
YAxisSize:10
XAxisLabel:m
YAxisLabel:$
LabelFont:TinyBold
AxisFont:Bold

View File

@@ -0,0 +1,488 @@
Container@OBSERVER_STATS:
Logic:ObserverStatsLogic
X:25
Y:50
Width:950
Height:500
Visible:false
Children:
Background@BACKGROUND:
Width:PARENT_RIGHT
Height:PARENT_BOTTOM
Background:dialog
Children:
Label@TITLE:
X:0
Y:15
Width:PARENT_RIGHT
Height:25
Font:Bold
Align:Center
Text:Statistics
DropDownButton@STATS_DROPDOWN:
X:PARENT_RIGHT-200
Y:15
Width:185
Height:25
Font:Bold
Container@BASIC_STATS_HEADERS:
X:0
Y:0
Width:PARENT_RIGHT
Height:PARENT_BOTTOM
Children:
Label@PLAYER_HEADER:
X:85
Y:40
Width:160
Height:25
Font:Bold
Text:Player
Label@CASH_HEADER:
X:245
Y:40
Width:80
Height:25
Font:Bold
Text:Cash
Label@EARNED_MIN_HEADER:
X:325
Y:40
Width:60
Height:25
Font:Bold
Text:Earned/min
Label@POWER_HEADER:
X:425
Y:40
Width:80
Height:25
Font:Bold
Text:Power
Label@KILLS_HEADER:
X:505
Y:40
Width:40
Height:25
Font:Bold
Text:Kills
Align:Right
Label@DEATHS_HEADER:
X:565
Y:40
Width:40
Height:25
Font:Bold
Text:Deaths
Align:Right
Label@ACTIONS_MIN_HEADER:
X:665
Y:40
Width:40
Height:25
Font:Bold
Text:Actions/min
Align:Right
Container@ECONOMY_STATS_HEADERS:
X:0
Y:0
Width:PARENT_RIGHT
Height:PARENT_BOTTOM
Children:
Label@PLAYER_HEADER:
X:85
Y:40
Width:160
Height:25
Font:Bold
Text:Player
Label@CASH_HEADER:
X:245
Y:40
Width:80
Height:25
Font:Bold
Text:Cash
Label@EARNED_MIN_HEADER:
X:325
Y:40
Width:60
Height:25
Font:Bold
Text:Earned/min
Label@EARNED_THIS_MIN_HEADER:
X:425
Y:40
Width:60
Height:25
Font:Bold
Text:Earned this min
Label@ASSETS_HEADER:
X:565
Y:40
Width:60
Height:25
Font:Bold
Text:Assets
Label@EARNED_HEADER:
X:645
Y:40
Width:60
Height:25
Font:Bold
Text:Earned
Label@SPENT_HEADER:
X:725
Y:40
Width:60
Height:25
Font:Bold
Text:Spent
Label@HARVESTERS_HEADER:
X:805
Y:40
Width:60
Height:25
Font:Bold
Text:Harvesters
Align:Right
Container@PRODUCTION_STATS_HEADERS:
X:0
Y:0
Width:PARENT_RIGHT
Height:PARENT_BOTTOM
Children:
Label@PLAYER_HEADER:
X:85
Y:40
Width:160
Height:25
Font:Bold
Text:Player
Label@PRODUCTION_HEADER:
X:245
Y:40
Width:320
Height:25
Font:Bold
Text:Production
Label@SUPPORT_POWERS_HEADER:
X:565
Y:40
Width:320
Height:25
Font:Bold
Text:Support Powers
Container@COMBAT_STATS_HEADERS:
X:0
Y:0
Width:PARENT_RIGHT
Height:PARENT_BOTTOM
Children:
Label@PLAYER_HEADER:
X:85
Y:40
Width:160
Height:25
Font:Bold
Text:Player
Label@CONTROL_HEADER:
X:245
Y:40
Width:60
Height:25
Font:Bold
Text:Control
Label@KILLS_COST_HEADER:
X:325
Y:40
Width:60
Height:25
Font:Bold
Text:Kills
Label@DEATHS_COST_HEADER:
X:405
Y:40
Width:60
Height:25
Font:Bold
Text:Deaths
Label@UNITS_KILLED_HEADER:
X:505
Y:40
Width:40
Height:25
Font:Bold
Text:Units Killed
Align:Right
Label@UNITS_DEAD_HEADER:
X:605
Y:40
Width:40
Height:25
Font:Bold
Text:Units Lost
Align:Right
Label@BUILDINGS_KILLED_HEADER:
X:725
Y:40
Width:40
Height:25
Font:Bold
Text:Bldg Killed
Align:Right
Label@BUILDINGS_DEAD_HEADER:
X:825
Y:40
Width:40
Height:25
Font:Bold
Text:Bldg Lost
Align:Right
Container@EARNED_THIS_MIN_GRAPH_HEADERS:
X:0
Y:0
Width:PARENT_RIGHT
Height:PARENT_BOTTOM
Children:
Label@EARNED_THIS_MIN_HEADER:
X:0
Y:40
Width:PARENT_RIGHT
Height:25
Font:Bold
Text:Earnings received each minute
Align:Center
ScrollPanel@PLAYER_STATS_PANEL:
X:25
Y:70
Width:PARENT_RIGHT-50
Height:PARENT_BOTTOM-45-50
ItemSpacing:5
Children:
ScrollItem@TEAM_TEMPLATE:
X:0
Y:0
Width:PARENT_RIGHT-35
Height:25
Children:
Label@TEAM:
X:0
Y:0
Width:PARENT_RIGHT
Height:PARENT_BOTTOM
Font:Bold
ScrollItem@BASIC_PLAYER_TEMPLATE:
X:0
Y:0
Width:PARENT_RIGHT-35
Height:25
Children:
Image@FLAG:
X:20
Y:5
Width:35
Height:PARENT_BOTTOM-5
ImageName:random
ImageCollection:flags
Label@PLAYER:
X:55
Y:0
Width:160
Height:PARENT_BOTTOM
Font:Bold
Label@CASH:
X:215
Y:0
Width:80
Height:PARENT_BOTTOM
Label@EARNED_MIN:
X:295
Y:0
Width:60
Height:PARENT_BOTTOM
Label@POWER:
X:395
Y:0
Width:80
Height:PARENT_BOTTOM
Label@KILLS:
X:475
Y:0
Width:40
Height:PARENT_BOTTOM
Align:Right
Label@DEATHS:
X:535
Y:0
Width:40
Height:PARENT_BOTTOM
Align:Right
Label@ACTIONS_MIN:
X:635
Y:0
Width:40
Height:PARENT_BOTTOM
Align:Right
ScrollItem@ECONOMY_PLAYER_TEMPLATE:
X:0
Y:0
Width:PARENT_RIGHT-35
Height:25
Children:
Image@FLAG:
X:20
Y:5
Width:35
Height:PARENT_BOTTOM-5
ImageName:random
ImageCollection:flags
Label@PLAYER:
X:55
Y:0
Width:160
Height:PARENT_BOTTOM
Font:Bold
Label@CASH:
X:215
Y:0
Width:80
Height:PARENT_BOTTOM
Label@EARNED_MIN:
X:295
Y:0
Width:60
Height:PARENT_BOTTOM
Label@EARNED_THIS_MIN:
X:395
Y:0
Width:60
Height:PARENT_BOTTOM
Label@ASSETS:
X:535
Y:0
Width:60
Height:PARENT_BOTTOM
Label@EARNED:
X:615
Y:0
Width:60
Height:PARENT_BOTTOM
Label@SPENT:
X:695
Y:0
Width:60
Height:PARENT_BOTTOM
Label@HARVESTERS:
X:775
Y:0
Width:60
Height:PARENT_BOTTOM
Align:Right
ScrollItem@PRODUCTION_PLAYER_TEMPLATE:
X:0
Y:0
Width:PARENT_RIGHT-35
Height:25
Children:
Image@FLAG:
X:20
Y:5
Width:35
Height:PARENT_BOTTOM-5
ImageName:random
ImageCollection:flags
Label@PLAYER:
X:55
Y:0
Width:160
Height:PARENT_BOTTOM
Font:Bold
ObserverProductionIcons@PRODUCTION_ICONS:
X:215
Y:0
Width:320
Height:PARENT_BOTTOM
ObserverSupportPowerIcons@SUPPORT_POWER_ICONS:
X:535
Y:0
Width:320
Height:PARENT_BOTTOM
ScrollItem@COMBAT_PLAYER_TEMPLATE:
X:0
Y:0
Width:PARENT_RIGHT-35
Height:25
Children:
Image@FLAG:
X:20
Y:5
Width:35
Height:PARENT_BOTTOM-5
ImageName:random
ImageCollection:flags
Label@PLAYER:
X:55
Y:0
Width:160
Height:PARENT_BOTTOM
Font:Bold
Label@CONTROL:
X:215
Y:0
Width:60
Height:PARENT_BOTTOM
Label@KILLS_COST:
X:295
Y:0
Width:60
Height:PARENT_BOTTOM
Label@DEATHS_COST:
X:375
Y:0
Width:60
Height:PARENT_BOTTOM
Label@UNITS_KILLED:
X:475
Y:0
Width:40
Height:PARENT_BOTTOM
Align:Right
Label@UNITS_DEAD:
X:575
Y:0
Width:40
Height:PARENT_BOTTOM
Align:Right
Label@BUILDINGS_KILLED:
X:695
Y:0
Width:40
Height:PARENT_BOTTOM
Align:Right
Label@BUILDINGS_DEAD:
X:795
Y:0
Width:40
Height:PARENT_BOTTOM
Align:Right
Container@EARNED_THIS_MIN_GRAPH_TEMPLATE:
X:0
Y:0
Width:PARENT_RIGHT-100
Height:PARENT_BOTTOM-50
Children:
LineGraph@EARNED_THIS_MIN_GRAPH:
X:0
Y:0
Width:PARENT_RIGHT
Height:PARENT_BOTTOM
ValueFormat:${0}
XAxisValueFormat:{0}
YAxisValueFormat:${0:F0}
XAxisSize:20
YAxisSize:10
XAxisLabel:m
YAxisLabel:$
LabelFont:TinyBold
AxisFont:Bold

View File

@@ -22,47 +22,7 @@ Container@INGAME_ROOT:
StrategicProgress@STRATEGIC_PROGRESS:
X: WINDOW_RIGHT/2
Y: 40
Background@POSTGAME_BG:
X:(WINDOW_RIGHT - WIDTH)/2
Y:(WINDOW_BOTTOM - HEIGHT)/2
Width:400
Height:100
Background:dialog4
Visible:false
Children:
Label@TEXT:
X:(PARENT_RIGHT - WIDTH)/2
Y:0
Width:200
Height:80
Align:Center
Button@POSTGAME_OBSERVE:
X:10
Y:(PARENT_BOTTOM - HEIGHT - 10)
Width:150
Height:25
Font:Bold
Text:Observe
Button@POSTGAME_QUIT:
X:(PARENT_RIGHT - WIDTH - 10)
Y:(PARENT_BOTTOM - HEIGHT - 10)
Width:150
Height:25
Font:Bold
Text:Leave
SupportPowerBin@INGAME_POWERS_BIN:
X:0
Y:25
ReadyText: READY
HoldText: ON HOLD
BuildPalette@INGAME_BUILD_PALETTE:
X:WINDOW_RIGHT - 250
Y:280
Width:250
Height:500
ReadyText: READY
HoldText: ON HOLD
RequiresText: Requires
Container@PLAYER_ROOT:
Button@INGAME_OPTIONS_BUTTON:
X:0
Y:0
@@ -71,6 +31,30 @@ Container@INGAME_ROOT:
Text:Options (ESC)
Font:Bold
Key: escape
WorldTooltip:
Background@PERF_BG:
ClickThrough:true
Background:dialog4
Logic:PerfDebugLogic
X:10
Y:WINDOW_BOTTOM - 250
Width: 210
Height: 250
Children:
PerfGraph@GRAPH:
X:5
Y:5
Width:200
Height:200
Label@TEXT:
X:20
Y:205
Width:170
Height:40
Container@PLAYER_WIDGETS:
Children:
LogicTicker@WIN_LOSS_WATCHER:
Button@INGAME_DIPLOMACY_BUTTON:
X:162
Y:0
@@ -133,58 +117,19 @@ Container@INGAME_ROOT:
Image:repair
Description:Repair
LongDesc:Repair damaged buildings
WorldTooltip:
Background@INGAME_OPTIONS_BG:
X:(WINDOW_RIGHT - WIDTH)/2
Y:(WINDOW_BOTTOM - HEIGHT)/2
Width:300
Height:295
Visible:false
Children:
Label@LABEL_TITLE:
X:(PARENT_RIGHT - WIDTH)/2
Y:20
SupportPowerBin@INGAME_POWERS_BIN:
X:0
Y:25
ReadyText: READY
HoldText: ON HOLD
BuildPalette@INGAME_BUILD_PALETTE:
X:WINDOW_RIGHT - 250
Y:280
Width:250
Height:25
Text:Options
Align:Center
Font:Bold
Button@RESUME:
X:(PARENT_RIGHT - WIDTH)/2
Y:60
Width:160
Height:25
Text:Resume
Font:Bold
Key:escape
Button@SETTINGS:
X:(PARENT_RIGHT - WIDTH)/2
Y:100
Width:160
Height:25
Text:Settings
Font:Bold
Button@MUSIC:
X:(PARENT_RIGHT - WIDTH)/2
Y:140
Width:160
Height:25
Text:Music
Font:Bold
Button@SURRENDER:
X:(PARENT_RIGHT - WIDTH)/2
Y:180
Width:160
Height:25
Text:Surrender
Font:Bold
Button@DISCONNECT:
X:(PARENT_RIGHT - WIDTH)/2
Y:220
Width:160
Height:25
Text:Abort Mission
Font:Bold
Height:500
ReadyText: READY
HoldText: ON HOLD
RequiresText: Requires
Background@DIPLOMACY_BG:
Logic:DiplomacyLogic
X:(WINDOW_RIGHT - WIDTH)/2
@@ -209,22 +154,36 @@ Container@INGAME_ROOT:
Text:Close
Font:Bold
Key:escape
Background@PERF_BG:
ClickThrough:true
Background:dialog4
Logic:PerfDebugLogic
X:10
Y:WINDOW_BOTTOM - 250
Width: 210
Height: 250
Container@OBSERVER_WIDGETS:
Children:
PerfGraph@GRAPH:
X:5
SupportPowerBin@INGAME_POWERS_BIN:
X:0
Y:25
Button@INGAME_STATS_BUTTON:
X:162
Y:0
Width:160
Height:25
Text:Statistics (F1)
Font:Bold
Key:f1
Background@RADAR_BG:
X:WINDOW_RIGHT-255
Y:5
Width:200
Height:200
Label@TEXT:
X:20
Y:205
Width:170
Height:40
Width:250
Height:250
Children:
Radar@INGAME_RADAR:
X:10
Y:10
Width:PARENT_RIGHT-19
Height:PARENT_BOTTOM-19
WorldInteractionController:INTERACTION_CONTROLLER
DropDownButton@SHROUD_SELECTOR:
Logic:ObserverShroudSelectorLogic
X:WINDOW_RIGHT-250
Y:260
Width:240
Height:25
Font:Bold

View File

@@ -1,4 +1,4 @@
Background@MAINMENU_BG:
Background@MAINMENU:
X:(WINDOW_RIGHT - WIDTH)/2
Y:(WINDOW_BOTTOM - HEIGHT)/2
Width:250

View File

@@ -1,102 +0,0 @@
Container@MISSION_OBJECTIVES:
Logic:MissionObjectivesLogic
X:25
Y:50
Width:512
Height:530
Children:
Background@BACKGROUND:
Width:512
Height:530
Background:dialog
Children:
Label@TITLE:
X:0
Y:15
Width:PARENT_RIGHT
Height:25
Font:Bold
Align:Center
Text:Objectives
Label@PRIMARY_OBJECTIVE_HEADER:
X:40
Y:40
Width:300
Height:25
Font:Bold
Text:Primary Objectives
Label@PRIMARY_STATUS_HEADER:
X:350
Y:40
Width:122
Height:25
Font:Bold
Text:Status
ScrollPanel@PRIMARY_OBJECTIVES:
X:25
Y:70
Width:PARENT_RIGHT-50
Height:200
ItemSpacing:5
Children:
Container@PRIMARY_OBJECTIVE_TEMPLATE:
X:15
Y:0-15
Width:PARENT_RIGHT
Height:60
Children:
Label@PRIMARY_OBJECTIVE:
X:0
Y:0
Width:300
Height:PARENT_BOTTOM
Font:Regular
WordWrap:True
Label@PRIMARY_STATUS:
X:310
Y:0
Width:122
Height:PARENT_BOTTOM
Font:Bold
WordWrap:True
Label@SECONDARY_OBJECTIVE_HEADER:
X:40
Y:275
Width:300
Height:25
Font:Bold
Text:Secondary Objectives
Label@SECONDARY_STATUS_HEADER:
X:350
Y:275
Width:122
Height:25
Font:Bold
Text:Status
ScrollPanel@SECONDARY_OBJECTIVES:
X:25
Y:305
Width:PARENT_RIGHT-50
Height:200
ItemSpacing:5
Children:
Container@SECONDARY_OBJECTIVE_TEMPLATE:
X:15
Y:0-15
Width:PARENT_RIGHT
Height:60
Children:
Label@SECONDARY_OBJECTIVE:
X:0
Y:0
Width:300
Height:PARENT_BOTTOM
Font:Regular
WordWrap:True
Label@SECONDARY_STATUS:
X:310
Y:0
Width:122
Height:PARENT_BOTTOM
Font:Bold
WordWrap:True

View File

@@ -1321,6 +1321,8 @@ Rules:
-SpawnMPUnits:
-MPStartLocations:
DesertShellmapScript:
LoadWidgetAtGameStart:
Widget: MAINMENU
TRAN.Husk2:
Burns:
Damage: 0

View File

@@ -1294,6 +1294,8 @@ Rules:
DefaultShellmapScript:
-SpawnMPUnits:
-MPStartLocations:
LoadWidgetAtGameStart:
Widget: MAINMENU
MSLO:
Building:
Power: 0

View File

@@ -56,8 +56,10 @@ ChromeLayout:
mods/ra/chrome/gameinit.yaml
mods/ra/chrome/ingame.yaml
mods/ra/chrome/ingame-chat.yaml
mods/ra/chrome/ingame-observer.yaml
mods/ra/chrome/ingame-fmvplayer.yaml
mods/ra/chrome/ingame-menu.yaml
mods/ra/chrome/ingame-objectives.yaml
mods/ra/chrome/ingame-observerstats.yaml
mods/ra/chrome/mainmenu.yaml
mods/ra/chrome/settings.yaml
mods/ra/chrome/lobby.yaml
@@ -69,7 +71,6 @@ ChromeLayout:
mods/ra/chrome/dropdowns.yaml
mods/ra/chrome/modchooser.yaml
mods/ra/chrome/cheats.yaml
mods/ra/chrome/objectives.yaml
mods/ra/chrome/tooltips.yaml
Weapons:

View File

@@ -506,9 +506,8 @@ Player:
PlayerStatistics:
World:
OpenWidgetAtGameStart:
LoadWidgetAtGameStart:
Widget: INGAME_ROOT
ObserverWidget: OBSERVER_ROOT
ScreenShaker:
WaterPaletteRotation:
ExcludePalettes: player