Merge pull request #6964 from obrakmann/fix6589_add_short_game_option

Short Game option
This commit is contained in:
Paul Chote
2014-12-19 17:20:47 +13:00
60 changed files with 323 additions and 226 deletions

View File

@@ -68,6 +68,7 @@ namespace OpenRA
public string TechLevel;
public bool ConfigurableStartingUnits = true;
public string[] Difficulties = { };
public bool? ShortGame;
public void UpdateServerSettings(Session.Global settings)
{
@@ -85,6 +86,8 @@ namespace OpenRA
settings.StartingCash = StartingCash.Value;
if (FragileAlliances.HasValue)
settings.FragileAlliances = FragileAlliances.Value;
if (ShortGame.HasValue)
settings.ShortGame = ShortGame.Value;
}
}

View File

@@ -186,6 +186,7 @@ namespace OpenRA.Network
public int StartingCash = 5000;
public string TechLevel = "none";
public string StartingUnitsClass = "none";
public bool ShortGame = true;
public bool AllowVersionMismatch;
public string GameUid;

View File

@@ -85,6 +85,7 @@
<Compile Include="Orders\DeployOrderTargeter.cs" />
<Compile Include="Orders\EnterAlliedActorTargeter.cs" />
<Compile Include="Orders\UnitOrderTargeter.cs" />
<Compile Include="PlayerExtensions.cs" />
<Compile Include="ServerTraits\ColorValidator.cs" />
<Compile Include="ServerTraits\LobbyCommands.cs" />
<Compile Include="ServerTraits\LobbySettingsNotification.cs" />
@@ -128,16 +129,20 @@
<Compile Include="Traits\Modifiers\DisabledOverlay.cs" />
<Compile Include="Traits\Modifiers\HiddenUnderFog.cs" />
<Compile Include="Traits\Modifiers\UpgradeOverlay.cs" />
<Compile Include="Traits\MustBeDestroyed.cs" />
<Compile Include="Traits\PaletteEffects\CloakPaletteEffect.cs" />
<Compile Include="Traits\PaletteEffects\LightPaletteRotator.cs" />
<Compile Include="Traits\PaletteEffects\MenuPaletteEffect.cs" />
<Compile Include="Traits\PaletteEffects\NukePaletteEffect.cs" />
<Compile Include="Traits\PaletteEffects\WaterPaletteRotation.cs" />
<Compile Include="Traits\Player\ActorGroupProxy.cs" />
<Compile Include="Traits\Player\ConquestVictoryConditions.cs" />
<Compile Include="Traits\Player\GlobalUpgradeManager.cs" />
<Compile Include="Traits\Player\MissionObjectives.cs" />
<Compile Include="Traits\Player\PlaceBeacon.cs" />
<Compile Include="Traits\Player\ProvidesCustomPrerequisite.cs" />
<Compile Include="Traits\Player\ProvidesTechPrerequisite.cs" />
<Compile Include="Traits\Player\StrategicVictoryConditions.cs" />
<Compile Include="Traits\Player\TechTree.cs" />
<Compile Include="Traits\Power\AffectedByPowerOutage.cs" />
<Compile Include="Traits\Power\CanPowerDown.cs" />
@@ -206,16 +211,16 @@
<Compile Include="Warheads\HealthPercentageDamageWarhead.cs" />
<Compile Include="Warheads\LeaveSmudgeWarhead.cs" />
<Compile Include="Warheads\SpreadDamageWarhead.cs" />
<Compile Include="Widgets\ColorMixerWidget.cs" />
<Compile Include="Widgets\ColorPreviewManagerWidget.cs" />
<Compile Include="Widgets\ConfirmationDialogs.cs" />
<Compile Include="Widgets\HueSliderWidget.cs" />
<Compile Include="Widgets\LabelWithTooltipWidget.cs" />
<Compile Include="Widgets\LogicKeyListenerWidget.cs" />
<Compile Include="Widgets\Logic\AssetBrowserLogic.cs" />
<Compile Include="Widgets\ColorMixerWidget.cs" />
<Compile Include="Widgets\LogicTickerWidget.cs" />
<Compile Include="Widgets\Logic\AssetBrowserLogic.cs" />
<Compile Include="Widgets\Logic\ButtonTooltipLogic.cs" />
<Compile Include="Widgets\Logic\ColorPickerLogic.cs" />
<Compile Include="Widgets\ColorPreviewManagerWidget.cs" />
<Compile Include="Widgets\Logic\DisconnectWatcherLogic.cs" />
<Compile Include="Widgets\Logic\Ingame\IngameRadarDisplayLogic.cs" />
<Compile Include="Widgets\Logic\Ingame\LoadIngamePlayerOrObserverUILogic.cs" />
@@ -223,6 +228,7 @@
<Compile Include="Widgets\MenuButtonWidget.cs" />
<Compile Include="Widgets\RadarWidget.cs" />
<Compile Include="Widgets\ResourceBarWidget.cs" />
<Compile Include="Widgets\StrategicProgressWidget.cs" />
<Compile Include="SpriteLoaders\ShpTDLoader.cs" />
<Compile Include="SpriteLoaders\ShpTSLoader.cs" />
<Compile Include="SpriteLoaders\TmpRALoader.cs" />
@@ -246,4 +252,4 @@ cd "$(SolutionDir)"</PostBuildEvent>
<Target Name="AfterBuild">
</Target>
-->
</Project>
</Project>

View File

@@ -9,15 +9,19 @@
#endregion
using System.Linq;
using OpenRA.Mods.RA;
using OpenRA.Mods.Common.Traits;
namespace OpenRA
namespace OpenRA.Mods.Common
{
public static class Extensions
public static class PlayerExtensions
{
public static bool HasNoRequiredUnits(this Player player)
{
return player.World.ActorsWithTrait<MustBeDestroyed>().All(p => p.Actor.Owner != player);
return !player.World.ActorsWithTrait<MustBeDestroyed>().Any(p =>
{
return p.Actor.Owner == player &&
(player.World.LobbyInfo.GlobalSettings.ShortGame ? p.Trait.Info.RequiredForShortGame : p.Actor.IsInWorld);
});
}
}
}

View File

@@ -33,7 +33,7 @@ namespace OpenRA.Mods.Common.Server
if (requiresHost && !client.IsAdmin)
{
server.SendOrderTo(conn, "Message", "Only the host can do that");
server.SendOrderTo(conn, "Message", "Only the host can do that.");
return false;
}
@@ -105,7 +105,7 @@ namespace OpenRA.Mods.Common.Server
{
if (!client.IsAdmin)
{
server.SendOrderTo(conn, "Message", "Only the host can start the game");
server.SendOrderTo(conn, "Message", "Only the host can start the game.");
return true;
}
@@ -195,7 +195,7 @@ namespace OpenRA.Mods.Common.Server
var occupantConn = server.Conns.FirstOrDefault(c => c.PlayerIndex == occupant.Index);
if (occupantConn != null)
{
server.SendOrderTo(occupantConn, "ServerError", "Your slot was closed by the host");
server.SendOrderTo(occupantConn, "ServerError", "Your slot was closed by the host.");
server.DropClient(occupantConn);
}
}
@@ -257,7 +257,7 @@ namespace OpenRA.Mods.Common.Server
// Invalid slot
if (bot != null && bot.Bot == null)
{
server.SendOrderTo(conn, "Message", "Can't add bots to a slot with another client");
server.SendOrderTo(conn, "Message", "Can't add bots to a slot with another client.");
return true;
}
@@ -310,13 +310,13 @@ namespace OpenRA.Mods.Common.Server
{
if (!client.IsAdmin)
{
server.SendOrderTo(conn, "Message", "Only the host can change the map");
server.SendOrderTo(conn, "Message", "Only the host can change the map.");
return true;
}
if (server.ModData.MapCache[s].Status != MapStatus.Available)
{
server.SendOrderTo(conn, "Message", "Map was not found on server");
server.SendOrderTo(conn, "Message", "Map was not found on server.");
return true;
}
@@ -373,13 +373,13 @@ namespace OpenRA.Mods.Common.Server
{
if (!client.IsAdmin)
{
server.SendOrderTo(conn, "Message", "Only the host can set that option");
server.SendOrderTo(conn, "Message", "Only the host can set that option.");
return true;
}
if (server.Map.Options.FragileAlliances.HasValue)
{
server.SendOrderTo(conn, "Message", "Map has disabled alliance configuration");
server.SendOrderTo(conn, "Message", "Map has disabled alliance configuration.");
return true;
}
@@ -396,13 +396,13 @@ namespace OpenRA.Mods.Common.Server
{
if (!client.IsAdmin)
{
server.SendOrderTo(conn, "Message", "Only the host can set that option");
server.SendOrderTo(conn, "Message", "Only the host can set that option.");
return true;
}
if (server.Map.Options.Cheats.HasValue)
{
server.SendOrderTo(conn, "Message", "Map has disabled cheat configuration");
server.SendOrderTo(conn, "Message", "Map has disabled cheat configuration.");
return true;
}
@@ -419,13 +419,13 @@ namespace OpenRA.Mods.Common.Server
{
if (!client.IsAdmin)
{
server.SendOrderTo(conn, "Message", "Only the host can set that option");
server.SendOrderTo(conn, "Message", "Only the host can set that option.");
return true;
}
if (server.Map.Options.Shroud.HasValue)
{
server.SendOrderTo(conn, "Message", "Map has disabled shroud configuration");
server.SendOrderTo(conn, "Message", "Map has disabled shroud configuration.");
return true;
}
@@ -442,13 +442,13 @@ namespace OpenRA.Mods.Common.Server
{
if (!client.IsAdmin)
{
server.SendOrderTo(conn, "Message", "Only the host can set that option");
server.SendOrderTo(conn, "Message", "Only the host can set that option.");
return true;
}
if (server.Map.Options.Fog.HasValue)
{
server.SendOrderTo(conn, "Message", "Map has disabled fog configuration");
server.SendOrderTo(conn, "Message", "Map has disabled fog configuration.");
return true;
}
@@ -465,7 +465,7 @@ namespace OpenRA.Mods.Common.Server
{
if (!client.IsAdmin)
{
server.SendOrderTo(conn, "Message", "Only the host can set that option");
server.SendOrderTo(conn, "Message", "Only the host can set that option.");
return true;
}
@@ -506,19 +506,19 @@ namespace OpenRA.Mods.Common.Server
{
if (!client.IsAdmin)
{
server.SendOrderTo(conn, "Message", "Only the host can set that option");
server.SendOrderTo(conn, "Message", "Only the host can set that option.");
return true;
}
if (server.Map.Options.Crates.HasValue)
{
server.SendOrderTo(conn, "Message", "Map has disabled crate configuration");
server.SendOrderTo(conn, "Message", "Map has disabled crate configuration.");
return true;
}
bool.TryParse(s, out server.LobbyInfo.GlobalSettings.Crates);
server.SyncLobbyGlobalSettings();
server.SendMessage("{0} {1} Crates Appear."
server.SendMessage("{0} {1} Crates."
.F(client.Name, server.LobbyInfo.GlobalSettings.Crates ? "enabled" : "disabled"));
return true;
@@ -529,19 +529,19 @@ namespace OpenRA.Mods.Common.Server
{
if (!client.IsAdmin)
{
server.SendOrderTo(conn, "Message", "Only the host can set that option");
server.SendOrderTo(conn, "Message", "Only the host can set that option.");
return true;
}
if (server.Map.Options.AllyBuildRadius.HasValue)
{
server.SendOrderTo(conn, "Message", "Map has disabled ally build radius configuration");
server.SendOrderTo(conn, "Message", "Map has disabled ally build radius configuration.");
return true;
}
bool.TryParse(s, out server.LobbyInfo.GlobalSettings.AllyBuildRadius);
server.SyncLobbyGlobalSettings();
server.SendMessage("{0} {1} Build off Ally ConYards."
server.SendMessage("{0} {1} Build off Allies' ConYards."
.F(client.Name, server.LobbyInfo.GlobalSettings.AllyBuildRadius ? "enabled" : "disabled"));
return true;
@@ -552,7 +552,7 @@ namespace OpenRA.Mods.Common.Server
{
if (!client.IsAdmin)
{
server.SendOrderTo(conn, "Message", "Only the host can set that option");
server.SendOrderTo(conn, "Message", "Only the host can set that option.");
return true;
}
@@ -575,13 +575,13 @@ namespace OpenRA.Mods.Common.Server
{
if (!client.IsAdmin)
{
server.SendOrderTo(conn, "Message", "Only the host can set that option");
server.SendOrderTo(conn, "Message", "Only the host can set that option.");
return true;
}
if (!server.Map.Options.ConfigurableStartingUnits)
{
server.SendOrderTo(conn, "Message", "Map has disabled start unit configuration");
server.SendOrderTo(conn, "Message", "Map has disabled start unit configuration.");
return true;
}
@@ -601,13 +601,13 @@ namespace OpenRA.Mods.Common.Server
{
if (!client.IsAdmin)
{
server.SendOrderTo(conn, "Message", "Only the host can set that option");
server.SendOrderTo(conn, "Message", "Only the host can set that option.");
return true;
}
if (server.Map.Options.StartingCash.HasValue)
{
server.SendOrderTo(conn, "Message", "Map has disabled cash configuration");
server.SendOrderTo(conn, "Message", "Map has disabled cash configuration.");
return true;
}
@@ -623,13 +623,13 @@ namespace OpenRA.Mods.Common.Server
{
if (!client.IsAdmin)
{
server.SendOrderTo(conn, "Message", "Only the host can set that option");
server.SendOrderTo(conn, "Message", "Only the host can set that option.");
return true;
}
if (server.Map.Options.TechLevel != null)
{
server.SendOrderTo(conn, "Message", "Map has disabled Tech configuration");
server.SendOrderTo(conn, "Message", "Map has disabled Tech configuration.");
return true;
}
@@ -645,7 +645,7 @@ namespace OpenRA.Mods.Common.Server
{
if (!client.IsAdmin)
{
server.SendOrderTo(conn, "Message", "Only the host can kick players");
server.SendOrderTo(conn, "Message", "Only the host can kick players.");
return true;
}
@@ -668,9 +668,9 @@ namespace OpenRA.Mods.Common.Server
var kickClient = server.GetClient(kickConn);
Log.Write("server", "Kicking client {0} as requested", kickClientID);
Log.Write("server", "Kicking client {0}.", kickClientID);
server.SendMessage("{0} kicked {1} from the server.".F(client.Name, kickClient.Name));
server.SendOrderTo(kickConn, "ServerError", "You have been kicked from the server");
server.SendOrderTo(kickConn, "ServerError", "You have been kicked from the server.");
server.DropClient(kickConn);
bool tempBan;
@@ -678,7 +678,7 @@ namespace OpenRA.Mods.Common.Server
if (tempBan)
{
Log.Write("server", "Temporarily banning client {0} ({1}) as requested", kickClientID, kickClient.IpAddress);
Log.Write("server", "Temporarily banning client {0} ({1}).", kickClientID, kickClient.IpAddress);
server.SendMessage("{0} temporarily banned {1} from the server.".F(client.Name, kickClient.Name));
server.TempBans.Add(kickClient.IpAddress);
}
@@ -692,7 +692,7 @@ namespace OpenRA.Mods.Common.Server
{ "name",
s =>
{
Log.Write("server", "Player@{0} is now known as {1}", conn.socket.RemoteEndPoint, s);
Log.Write("server", "Player@{0} is now known as {1}.", conn.socket.RemoteEndPoint, s);
server.SendMessage("{0} is now known as {1}.".F(client.Name, s));
client.Name = s;
server.SyncLobbyClients();
@@ -772,7 +772,7 @@ namespace OpenRA.Mods.Common.Server
if (server.LobbyInfo.Clients.Where(cc => cc != client).Any(cc => (cc.SpawnPoint == spawnPoint) && (cc.SpawnPoint != 0)))
{
server.SendOrderTo(conn, "Message", "You can't be at the same spawn point as another player");
server.SendOrderTo(conn, "Message", "You cannot occupy the same spawn point as another player.");
return true;
}
@@ -809,6 +809,29 @@ namespace OpenRA.Mods.Common.Server
server.SyncLobbyClients();
return true;
}
},
{ "shortgame",
s =>
{
if (!client.IsAdmin)
{
server.SendOrderTo(conn, "Message", "Only the host can set that option.");
return true;
}
if (server.Map.Options.ShortGame.HasValue)
{
server.SendOrderTo(conn, "Message", "Map has disabled short game configuration.");
return true;
}
bool.TryParse(s, out server.LobbyInfo.GlobalSettings.ShortGame);
server.SyncLobbyGlobalSettings();
server.SendMessage("{0} {1} Short Game."
.F(client.Name, server.LobbyInfo.GlobalSettings.ShortGame ? "enabled" : "disabled"));
return true;
}
}
};

View File

@@ -57,6 +57,9 @@ namespace OpenRA.Mods.Common.Server
if (server.LobbyInfo.GlobalSettings.TechLevel != defaults.TechLevel)
server.SendOrderTo(conn, "Message", "Tech Level: {0}".F(server.LobbyInfo.GlobalSettings.TechLevel));
if (server.LobbyInfo.GlobalSettings.ShortGame != defaults.ShortGame)
server.SendOrderTo(conn, "Message", "Short Game: {0}".F(server.LobbyInfo.GlobalSettings.ShortGame));
}
}
}

View File

@@ -0,0 +1,33 @@
#region Copyright & License Information
/*
* Copyright 2007-2014 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;
namespace OpenRA.Mods.Common.Traits
{
[Desc("Actors with this trait must be destroyed for a game to end.")]
public class MustBeDestroyedInfo : ITraitInfo
{
[Desc("In a short game only actors that have this value set to true need to be destroyed.")]
public bool RequiredForShortGame = false;
public object Create(ActorInitializer init) { return new MustBeDestroyed(this); }
}
public class MustBeDestroyed
{
public readonly MustBeDestroyedInfo Info;
public MustBeDestroyed(MustBeDestroyedInfo info)
{
Info = info;
}
}
}

View File

@@ -11,7 +11,7 @@
using System.Linq;
using OpenRA.Traits;
namespace OpenRA.Mods.RA
namespace OpenRA.Mods.Common.Traits
{
public class ConquestVictoryConditionsInfo : ITraitInfo, Requires<MissionObjectivesInfo>
{
@@ -77,12 +77,8 @@ namespace OpenRA.Mods.RA
Game.RunAfterDelay(info.NotificationDelay, () => Sound.PlayNotification(player.World.Map.Rules, player, "Speech", "Win", player.Country.Race));
}
public void OnObjectiveAdded(Player player, int id) {}
public void OnObjectiveCompleted(Player player, int id) {}
public void OnObjectiveFailed(Player player, int id) {}
public void OnObjectiveAdded(Player player, int id) { }
public void OnObjectiveCompleted(Player player, int id) { }
public void OnObjectiveFailed(Player player, int id) { }
}
[Desc("Tag trait for things that must be destroyed for a short game to end.")]
public class MustBeDestroyedInfo : TraitInfo<MustBeDestroyed> { }
public class MustBeDestroyed { }
}

View File

@@ -14,10 +14,10 @@ using System.Linq;
using OpenRA.Primitives;
using OpenRA.Traits;
namespace OpenRA.Mods.RA
namespace OpenRA.Mods.Common.Traits
{
public enum ObjectiveType { Primary, Secondary };
public enum ObjectiveState { Incomplete, Completed, Failed };
public enum ObjectiveType { Primary, Secondary }
public enum ObjectiveState { Incomplete, Completed, Failed }
public class MissionObjective
{
@@ -233,9 +233,9 @@ namespace OpenRA.Mods.RA
public event Action<Player> ObjectiveAdded = player => { player.HasObjectives = true; };
public void OnObjectiveAdded(Player player, int id) {}
public void OnObjectiveCompleted(Player player, int id) {}
public void OnObjectiveFailed(Player player, int id) {}
public void OnObjectiveAdded(Player player, int id) { }
public void OnObjectiveCompleted(Player player, int id) { }
public void OnObjectiveFailed(Player player, int id) { }
public void ResolveOrder(Actor self, Order order)
{

View File

@@ -12,7 +12,7 @@ using System.Collections.Generic;
using System.Linq;
using OpenRA.Traits;
namespace OpenRA.Mods.RA
namespace OpenRA.Mods.Common.Traits
{
[Desc("Used to mark a place that needs to be in possession for StrategicVictoryConditions.")]
public class StrategicPointInfo : TraitInfo<StrategicPoint> { }
@@ -80,7 +80,7 @@ namespace OpenRA.Mods.RA
mo.MarkCompleted(player, objectiveID);
if (others.Any(p => p.WinState == WinState.Won))
mo.MarkFailed(player, objectiveID);
mo.MarkFailed(player, objectiveID);
// See if any of the conditions are met to increase the count
if (Total > 0)
@@ -122,8 +122,8 @@ namespace OpenRA.Mods.RA
Game.RunAfterDelay(info.NotificationDelay, () => Sound.PlayNotification(player.World.Map.Rules, player, "Speech", "Win", player.Country.Race));
}
public void OnObjectiveAdded(Player player, int id) {}
public void OnObjectiveCompleted(Player player, int id) {}
public void OnObjectiveFailed(Player player, int id) {}
public void OnObjectiveAdded(Player player, int id) { }
public void OnObjectiveCompleted(Player player, int id) { }
public void OnObjectiveFailed(Player player, int id) { }
}
}

View File

@@ -690,6 +690,11 @@ namespace OpenRA.Mods.Common.UtilityCommands
}
}
// Adjust MustBeDestroyed for short games
if (engineVersion < 20141218)
if (depth == 1 && node.Key == "MustBeDestroyed")
node.Value.Nodes.Add(new MiniYamlNode("RequiredForShortGame", "true"));
UpgradeActorRules(engineVersion, ref node.Value.Nodes, node, depth + 1);
}
}

View File

@@ -11,14 +11,15 @@
using System.Drawing;
using System.Linq;
using OpenRA.Graphics;
using OpenRA.Mods.Common.Traits;
using OpenRA.Widgets;
namespace OpenRA.Mods.RA.Widgets
namespace OpenRA.Mods.Common.Widgets
{
public class StrategicProgressWidget : Widget
{
bool Initialised = false;
readonly World world;
bool initialised = false;
[ObjectCreator.UseCtor]
public StrategicProgressWidget(World world)
@@ -29,7 +30,7 @@ namespace OpenRA.Mods.RA.Widgets
public override void Draw()
{
if (!Initialised)
if (!initialised)
Init();
if (!IsVisible()) return;
@@ -99,7 +100,7 @@ namespace OpenRA.Mods.RA.Widgets
world.ActorsWithTrait<StrategicPoint>().Any();
IsVisible = () => visible;
Initialised = true;
initialised = true;
}
}
}

View File

@@ -166,7 +166,6 @@
<Compile Include="CashTrickler.cs" />
<Compile Include="Traits\PaletteEffects\ChronoshiftPaletteEffect.cs" />
<Compile Include="Traits\Chronoshiftable.cs" />
<Compile Include="ConquestVictoryConditions.cs" />
<Compile Include="Crate.cs" />
<Compile Include="CrateAction.cs" />
<Compile Include="CrateSpawner.cs" />
@@ -215,7 +214,6 @@
<Compile Include="Player\ClassicProductionQueue.cs" />
<Compile Include="Player\PlaceBuilding.cs" />
<Compile Include="Player\ProductionQueue.cs" />
<Compile Include="Player\MissionObjectives.cs" />
<Compile Include="Traits\PortableChrono.cs" />
<Compile Include="Scripting\Properties\GuardProperties.cs" />
<Compile Include="Traits\World\DomainIndex.cs" />
@@ -251,7 +249,6 @@
<Compile Include="SpawnMPUnits.cs" />
<Compile Include="Disguise.cs" />
<Compile Include="StoresResources.cs" />
<Compile Include="StrategicVictoryConditions.cs" />
<Compile Include="Traits\SupplyTruck.cs" />
<Compile Include="SupportPowers\AirstrikePower.cs" />
<Compile Include="Traits\SupportPowers\ChronoshiftPower.cs" />
@@ -326,7 +323,6 @@
<Compile Include="Widgets\Logic\ServerCreationLogic.cs" />
<Compile Include="Widgets\ObserverProductionIconsWidget.cs" />
<Compile Include="Widgets\ObserverSupportPowerIconsWidget.cs" />
<Compile Include="Widgets\StrategicProgressWidget.cs" />
<Compile Include="Widgets\SupportPowerTimerWidget.cs" />
<Compile Include="Widgets\WorldCommandWidget.cs" />
<Compile Include="Player\BaseAttackNotifier.cs" />
@@ -405,7 +401,6 @@
<Compile Include="Widgets\Logic\DebugMenuLogic.cs" />
<Compile Include="ProductionQueueFromSelection.cs" />
<Compile Include="GainsStatUpgrades.cs" />
<Compile Include="Player\Extensions.cs" />
<Compile Include="Warheads\CreateResourceWarhead.cs" />
<Compile Include="Warheads\DestroyResourceWarhead.cs" />
<Compile Include="Warheads\PerCellDamageWarhead.cs" />

View File

@@ -10,9 +10,10 @@
using System;
using Eluant;
using OpenRA.Traits;
using OpenRA.Mods.Common;
using OpenRA.Mods.Common.Traits;
using OpenRA.Scripting;
using OpenRA.Mods.RA;
using OpenRA.Traits;
namespace OpenRA.Mods.RA.Scripting
{
@@ -108,7 +109,8 @@ namespace OpenRA.Mods.RA.Scripting
}
[ScriptActorPropertyActivity]
[Desc("Returns true if this player has lost all units/actors that have the MustBeDestroyed trait.")]
[Desc("Returns true if this player has lost all units/actors that have" +
"the MustBeDestroyed trait (according to the short game option).")]
public bool HasNoRequiredUnits()
{
return player.HasNoRequiredUnits();

View File

@@ -11,9 +11,9 @@
using System;
using System.Linq;
using System.Drawing;
using OpenRA.Widgets;
using OpenRA.Mods.Common.Traits;
using OpenRA.Traits;
using OpenRA.Mods.RA;
using OpenRA.Widgets;
namespace OpenRA.Mods.RA.Widgets.Logic
{

View File

@@ -352,6 +352,15 @@ namespace OpenRA.Mods.RA.Widgets.Logic
"fragilealliance {0}".F(!orderManager.LobbyInfo.GlobalSettings.FragileAlliances)));
}
var shortGame = optionsBin.GetOrNull<CheckboxWidget>("SHORTGAME_CHECKBOX");
if (shortGame != null)
{
shortGame.IsChecked = () => orderManager.LobbyInfo.GlobalSettings.ShortGame;
shortGame.IsDisabled = () => Map.Status != MapStatus.Available || Map.Map.Options.ShortGame.HasValue || configurationDisabled();
shortGame.OnClick = () => orderManager.IssueOrder(Order.Command(
"shortgame {0}".F(!orderManager.LobbyInfo.GlobalSettings.ShortGame)));
}
var difficulty = optionsBin.GetOrNull<DropDownButtonWidget>("DIFFICULTY_DROPDOWNBUTTON");
if (difficulty != null)
{

View File

@@ -10,10 +10,11 @@
using System;
using System.Linq;
using OpenRA.Mods.RA.Orders;
using OpenRA.Widgets;
using OpenRA.Traits;
using OpenRA.Mods.Common.Traits;
using OpenRA.Mods.Common.Widgets;
using OpenRA.Mods.RA.Orders;
using OpenRA.Traits;
using OpenRA.Widgets;
namespace OpenRA.Mods.RA.Widgets.Logic
{

View File

@@ -122,20 +122,27 @@ Background@LOBBY_OPTIONS_BIN:
Font: Regular
Text: Fog of War
Checkbox@CRATES_CHECKBOX:
X: 160
X: 140
Width: 230
Height: 20
Font: Regular
Text: Crates Appear
Text: Crates
Checkbox@ALLYBUILDRADIUS_CHECKBOX:
X: 160
X: 140
Y: 35
Width: 230
Height: 20
Font: Regular
Text: Build off Ally ConYards
Text: Build off Allies' ConYards
Checkbox@SHORTGAME_CHECKBOX:
X: 365
Width: 230
Height: 20
Font: Regular
Text: Short Game
Checkbox@ALLOWCHEATS_CHECKBOX:
X: 325
X: 365
Y: 35
Width: 230
Height: 20
Font: Regular

View File

@@ -23,6 +23,7 @@ UseAsShellmap: False
Type: Campaign
Options:
ShortGame: False
Crates: False
Fog: True
Shroud: True
@@ -445,24 +446,20 @@ Rules:
MissionObjectives:
EarlyGameOver: true
^Vehicle:
MustBeDestroyed:
Tooltip:
GenericVisibility: Enemy
ShowOwnerRow: false
^Tank:
MustBeDestroyed:
Tooltip:
GenericVisibility: Enemy
ShowOwnerRow: false
^Helicopter:
MustBeDestroyed:
Tooltip:
GenericVisibility: Enemy
ShowOwnerRow: false
^Infantry:
SpawnViceroid:
Probability: 0
MustBeDestroyed:
Tooltip:
GenericVisibility: Enemy
ShowOwnerRow: false
@@ -486,8 +483,6 @@ Rules:
GenericVisibility: Enemy, Ally, Neutral
GenericStancePrefix: false
ShowOwnerRow: false
HARV:
-MustBeDestroyed:
PROC:
Buildable:
Prerequisites: ~disabled
@@ -515,7 +510,6 @@ Rules:
GUN:
Buildable:
Prerequisites: ~disabled
MustBeDestroyed:
GTWR:
Buildable:
Prerequisites: ~disabled

View File

@@ -88,15 +88,6 @@ WorldLoaded = function()
gdiObjective1 = player.AddPrimaryObjective("Eliminate all Nod forces in the area")
gdiObjective2 = player.AddSecondaryObjective("Capture the Tiberium Refinery")
-- Work around limitations with the yaml merger that prevent MustBeDestroyed from working on the silos
siloARemoved = false
Trigger.OnCapture(SiloA, function() siloARemoved = true end)
Trigger.OnKilled(SiloA, function() siloARemoved = true end)
siloBRemoved = false
Trigger.OnCapture(SiloB, function() siloBRemoved = true end)
Trigger.OnKilled(SiloB, function() siloBRemoved = true end)
Trigger.OnCapture(NodRefinery, function() player.MarkCompletedObjective(gdiObjective2) end)
Trigger.OnKilled(NodRefinery, function() player.MarkFailedObjective(gdiObjective2) end)
@@ -107,7 +98,7 @@ Tick = function()
if player.HasNoRequiredUnits() then
enemy.MarkCompletedObjective(nodObjective)
end
if enemy.HasNoRequiredUnits() and siloARemoved and siloBRemoved then
if enemy.HasNoRequiredUnits() then
player.MarkCompletedObjective(gdiObjective1)
end
end

View File

@@ -23,6 +23,7 @@ UseAsShellmap: False
Type: Campaign
Options:
ShortGame: False
Crates: False
Fog: True
Shroud: True
@@ -750,24 +751,20 @@ Rules:
MissionObjectives:
EarlyGameOver: true
^Vehicle:
MustBeDestroyed:
Tooltip:
GenericVisibility: Enemy
ShowOwnerRow: false
^Tank:
MustBeDestroyed:
Tooltip:
GenericVisibility: Enemy
ShowOwnerRow: false
^Helicopter:
MustBeDestroyed:
Tooltip:
GenericVisibility: Enemy
ShowOwnerRow: false
^Infantry:
SpawnViceroid:
Probability: 0
MustBeDestroyed:
Tooltip:
GenericVisibility: Enemy
ShowOwnerRow: false
@@ -794,7 +791,6 @@ Rules:
GenericStancePrefix: false
ShowOwnerRow: false
HARV:
-MustBeDestroyed:
Harvester:
SearchFromProcRadius: 32
SearchFromOrderRadius: 20
@@ -802,7 +798,6 @@ Rules:
Buildable:
Prerequisites: ~disabled
SILO:
MustBeDestroyed:
Buildable:
Prerequisites: ~disabled
WEAP:

View File

@@ -23,6 +23,7 @@ UseAsShellmap: False
Type: Campaign
Options:
ShortGame: False
Crates: False
Fog: True
Shroud: True
@@ -741,22 +742,18 @@ Rules:
MissionObjectives:
EarlyGameOver: true
^Vehicle:
MustBeDestroyed:
Tooltip:
GenericVisibility: Enemy
ShowOwnerRow: false
^Tank:
MustBeDestroyed:
Tooltip:
GenericVisibility: Enemy
ShowOwnerRow: false
^Helicopter:
MustBeDestroyed:
Tooltip:
GenericVisibility: Enemy
ShowOwnerRow: false
^Infantry:
MustBeDestroyed:
SpawnViceroid:
Probability: 0
Tooltip:
@@ -784,8 +781,6 @@ Rules:
GenericVisibility: Enemy, Ally, Neutral
GenericStancePrefix: false
ShowOwnerRow: false
HARV:
-MustBeDestroyed:
WEAP:
Buildable:
Prerequisites: ~disabled

View File

@@ -23,6 +23,7 @@ UseAsShellmap: False
Type: Campaign
Options:
ShortGame: False
Cheats: False
Crates: False
Fog: True
@@ -565,12 +566,10 @@ Rules:
MissionObjectives:
EarlyGameOver: true
^Vehicle:
MustBeDestroyed:
Tooltip:
GenericVisibility: Enemy
ShowOwnerRow: false
^Tank:
MustBeDestroyed:
Tooltip:
GenericVisibility: Enemy
ShowOwnerRow: false
@@ -581,7 +580,6 @@ Rules:
^Infantry:
SpawnViceroid:
Probability: 0
MustBeDestroyed:
Tooltip:
GenericVisibility: Enemy
ShowOwnerRow: false

View File

@@ -23,6 +23,7 @@ UseAsShellmap: False
Type: Campaign
Options:
ShortGame: False
Crates: False
Fog: True
Shroud: True
@@ -620,12 +621,10 @@ Rules:
MissionObjectives:
EarlyGameOver: true
^Vehicle:
MustBeDestroyed:
Tooltip:
GenericVisibility: Enemy
ShowOwnerRow: false
^Tank:
MustBeDestroyed:
Tooltip:
GenericVisibility: Enemy
ShowOwnerRow: false
@@ -636,7 +635,6 @@ Rules:
^Infantry:
SpawnViceroid:
Probability: 0
MustBeDestroyed:
Tooltip:
GenericVisibility: Enemy
ShowOwnerRow: false

View File

@@ -23,6 +23,7 @@ UseAsShellmap: False
Type: Campaign
Options:
ShortGame: False
Crates: False
Fog: True
Shroud: True
@@ -884,24 +885,20 @@ Rules:
MissionObjectives:
EarlyGameOver: true
^Vehicle:
MustBeDestroyed:
Tooltip:
GenericVisibility: Enemy
ShowOwnerRow: false
^Tank:
MustBeDestroyed:
Tooltip:
GenericVisibility: Enemy
ShowOwnerRow: false
^Helicopter:
MustBeDestroyed:
Tooltip:
GenericVisibility: Enemy
ShowOwnerRow: false
^Infantry:
SpawnViceroid:
Probability: 0
MustBeDestroyed:
Tooltip:
GenericVisibility: Enemy
ShowOwnerRow: false
@@ -925,8 +922,6 @@ Rules:
GenericVisibility: Enemy, Ally, Neutral
GenericStancePrefix: false
ShowOwnerRow: false
HARV:
-MustBeDestroyed:
^CivInfantry:
Health:
HP: 125

View File

@@ -23,6 +23,7 @@ UseAsShellmap: False
Type: Campaign
Options:
ShortGame: False
Crates: False
Fog: True
Shroud: True
@@ -296,22 +297,18 @@ Rules:
^CivInfantry:
MustBeDestroyed:
^Vehicle:
MustBeDestroyed:
Tooltip:
GenericVisibility: Enemy
ShowOwnerRow: false
^Tank:
MustBeDestroyed:
Tooltip:
GenericVisibility: Enemy
ShowOwnerRow: false
^Helicopter:
MustBeDestroyed:
Tooltip:
GenericVisibility: Enemy
ShowOwnerRow: false
^Infantry:
MustBeDestroyed:
Tooltip:
GenericVisibility: Enemy
ShowOwnerRow: false
@@ -335,8 +332,6 @@ Rules:
GenericVisibility: Enemy, Ally, Neutral
GenericStancePrefix: false
ShowOwnerRow: false
HARV:
-MustBeDestroyed:
Sequences:

View File

@@ -77,13 +77,15 @@ WorldLoaded = function()
end
Tick = function()
if nod.HasNoRequiredUnits() then
gdi.MarkCompletedObjective(GDIObjective1)
end
if villagers.HasNoRequiredUnits() then
nod.MarkCompletedObjective(NodObjective2)
end
if gdi.HasNoRequiredUnits() then
nod.MarkCompletedObjective(NodObjective3)
if DateTime.GameTime > 2 then
if nod.HasNoRequiredUnits() then
gdi.MarkCompletedObjective(GDIObjective1)
end
if villagers.HasNoRequiredUnits() then
nod.MarkCompletedObjective(NodObjective2)
end
if gdi.HasNoRequiredUnits() then
nod.MarkCompletedObjective(NodObjective3)
end
end
end

View File

@@ -23,6 +23,7 @@ UseAsShellmap: False
Type: Campaign
Options:
ShortGame: False
Crates: False
Fog: True
Shroud: True
@@ -540,24 +541,20 @@ Rules:
ObjectivesPanel:
PanelName: MISSION_OBJECTIVES
^Vehicle:
MustBeDestroyed:
Tooltip:
GenericVisibility: Enemy
ShowOwnerRow: false
^Tank:
MustBeDestroyed:
Tooltip:
GenericVisibility: Enemy
ShowOwnerRow: false
^Helicopter:
MustBeDestroyed:
Tooltip:
GenericVisibility: Enemy
ShowOwnerRow: false
^Infantry:
SpawnViceroid:
Probability: 0
MustBeDestroyed:
Tooltip:
GenericVisibility: Enemy
ShowOwnerRow: false
@@ -581,8 +578,6 @@ Rules:
GenericVisibility: Enemy, Ally, Neutral
GenericStancePrefix: false
ShowOwnerRow: false
HARV:
-MustBeDestroyed:
HQ:
AirstrikePower:
Prerequisites: ~disabled

View File

@@ -66,10 +66,12 @@ WorldLoaded = function()
end
Tick = function()
if player.HasNoRequiredUnits() then
enemy.MarkCompletedObjective(gdiObjective)
end
if enemy.HasNoRequiredUnits() then
player.MarkCompletedObjective(nodObjective2)
if DateTime.GameTime > 2 then
if player.HasNoRequiredUnits() then
enemy.MarkCompletedObjective(gdiObjective)
end
if enemy.HasNoRequiredUnits() then
player.MarkCompletedObjective(nodObjective2)
end
end
end

View File

@@ -23,6 +23,7 @@ UseAsShellmap: False
Type: Campaign
Options:
ShortGame: False
Crates: False
Fog: True
Shroud: True
@@ -585,24 +586,20 @@ Rules:
ObjectivesPanel:
PanelName: MISSION_OBJECTIVES
^Vehicle:
MustBeDestroyed:
Tooltip:
GenericVisibility: Enemy
ShowOwnerRow: false
^Tank:
MustBeDestroyed:
Tooltip:
GenericVisibility: Enemy
ShowOwnerRow: false
^Helicopter:
SpawnViceroid:
Probability: 0
MustBeDestroyed:
Tooltip:
GenericVisibility: Enemy
ShowOwnerRow: false
^Infantry:
MustBeDestroyed:
Tooltip:
GenericVisibility: Enemy
ShowOwnerRow: false
@@ -626,8 +623,6 @@ Rules:
GenericVisibility: Enemy, Ally, Neutral
GenericStancePrefix: false
ShowOwnerRow: false
HARV:
-MustBeDestroyed:
HQ:
AirstrikePower:
Prerequisites: ~disabled

View File

@@ -79,11 +79,13 @@ WorldLoaded = function()
end
Tick = function()
if player.HasNoRequiredUnits() then
enemy.MarkCompletedObjective(gdiObjective)
end
if DateTime.GameTime > 2 then
if player.HasNoRequiredUnits() then
enemy.MarkCompletedObjective(gdiObjective)
end
if enemy.HasNoRequiredUnits() then
player.MarkCompletedObjective(nodObjective2)
if enemy.HasNoRequiredUnits() then
player.MarkCompletedObjective(nodObjective2)
end
end
end

View File

@@ -229,6 +229,7 @@ Rules:
RevealsShroud:
Range: 40c0
MustBeDestroyed:
RequiredForShortGame: true
-AttackMove:
Sequences:

View File

@@ -50,6 +50,7 @@
UpgradeTypes: selfheal
UpgradeMinEnabledLevel: 1
UpgradeManager:
MustBeDestroyed:
^Tank:
AppearsOnRadar:
@@ -106,6 +107,7 @@
UpgradeTypes: selfheal
UpgradeMinEnabledLevel: 1
UpgradeManager:
MustBeDestroyed:
^Helicopter:
AppearsOnRadar:
@@ -149,6 +151,7 @@
UpgradeManager:
WithShadow:
Hovers:
MustBeDestroyed:
^Infantry:
AppearsOnRadar:
@@ -233,6 +236,7 @@
UpgradeTypes: selfheal
UpgradeMinEnabledLevel: 1
UpgradeManager:
MustBeDestroyed:
^CivInfantry:
Inherits: ^Infantry
@@ -424,6 +428,7 @@
^BaseBuilding:
Inherits: ^Building
MustBeDestroyed:
RequiredForShortGame: true
RepairableBuilding:
RepairPercent: 40
RepairStep: 14

View File

@@ -198,7 +198,8 @@ SILO:
-EmitInfantryOnSell:
Power:
Amount: -10
-MustBeDestroyed:
MustBeDestroyed:
RequiredForShortGame: false
PYLE:
Inherits: ^BaseBuilding
@@ -616,7 +617,8 @@ GUN:
Range: 3
Power:
Amount: -20
-MustBeDestroyed:
MustBeDestroyed:
RequiredForShortGame: false
SAM:
Inherits: ^BaseBuilding
@@ -657,7 +659,8 @@ SAM:
RenderRangeCircle:
Power:
Amount: -20
-MustBeDestroyed:
MustBeDestroyed:
RequiredForShortGame: false
OBLI:
Inherits: ^BaseBuilding
@@ -704,7 +707,8 @@ OBLI:
Range: 5
Power:
Amount: -150
-MustBeDestroyed:
MustBeDestroyed:
RequiredForShortGame: false
GTWR:
Inherits: ^BaseBuilding
@@ -744,7 +748,8 @@ GTWR:
ROT: 255
Power:
Amount: -10
-MustBeDestroyed:
MustBeDestroyed:
RequiredForShortGame: false
ATWR:
Inherits: ^BaseBuilding
@@ -794,7 +799,8 @@ ATWR:
RenderRangeCircle:
Power:
Amount: -40
-MustBeDestroyed:
MustBeDestroyed:
RequiredForShortGame: false
SBAG:
Inherits: ^Wall

View File

@@ -28,6 +28,7 @@ MCV:
NoTransformSounds: deploy1.aud
RenderUnit:
MustBeDestroyed:
RequiredForShortGame: true
BaseBuilding:
LeavesHusk:
HuskActor: MCV.Husk
@@ -548,6 +549,7 @@ STNK:
TargetableUnit:
LeavesHusk:
HuskActor: STNK.Husk
-MustBeDestroyed:
MHQ:
Inherits: ^Vehicle

View File

@@ -242,6 +242,7 @@ FREMEN:
CloakDelay: 250
CloakSound: STEALTH1.WAV
UncloakSound: STEALTH2.WAV
-MustBeDestroyed:
GRENADIER:
Inherits: ^Infantry

View File

@@ -48,6 +48,7 @@
UpgradeMinEnabledLevel: 1
UpgradeManager:
TemporaryOwnerManager:
MustBeDestroyed:
^Tank:
AppearsOnRadar:
@@ -99,6 +100,7 @@
UpgradeMinEnabledLevel: 1
UpgradeManager:
TemporaryOwnerManager:
MustBeDestroyed:
^Husk:
Health:
@@ -224,6 +226,7 @@
UpgradeTypes: selfheal
UpgradeMinEnabledLevel: 1
UpgradeManager:
MustBeDestroyed:
^Plane:
AppearsOnRadar:
@@ -286,6 +289,7 @@
EmitInfantryOnSell:
ActorTypes: rifle,rifle,rifle,rifle,rifle,bazooka,bazooka,bazooka,engineer
MustBeDestroyed:
RequiredForShortGame: true
GivesExperience:
FrozenUnderFog:
CaptureNotification:

View File

@@ -197,6 +197,7 @@ STEALTHRAIDER:
UncloakSound: STEALTH2.WAV
AutoTarget:
InitialStance: HoldFire
-MustBeDestroyed:
CARRYALLO:
Inherits: ^CARRYALL

View File

@@ -228,6 +228,8 @@ CONCRETEB:
-EmitInfantryOnSell:
Power:
Amount: -5
MustBeDestroyed:
RequiredForShortGame: false
^LIGHT:
Inherits: ^Building
@@ -501,6 +503,8 @@ WALL:
Types: turret
Power:
Amount: -20
MustBeDestroyed:
RequiredForShortGame: false
^ROCKETTOWER:
Inherits: ^Building
@@ -554,6 +558,8 @@ WALL:
Types: turret
Power:
Amount: -30
MustBeDestroyed:
RequiredForShortGame: false
^REPAIR:
Inherits: ^Building

View File

@@ -22,6 +22,7 @@
RevealsShroud:
Range: 8c0
MustBeDestroyed:
RequiredForShortGame: true
BaseBuilding:
Explodes:
Weapon: UnitExplodeScale

View File

@@ -97,7 +97,7 @@ Background@LOBBY_OPTIONS_BIN:
Children:
Label@TITLE:
X: 0
Y: 30
Y: 5
Width: PARENT_RIGHT
Height: 25
Font: Bold
@@ -105,89 +105,94 @@ Background@LOBBY_OPTIONS_BIN:
Text: Map Options
Container:
X: 30
Y: 70
Y: 50
Width: PARENT_RIGHT-60
Height: PARENT_BOTTOM-75
Children:
Checkbox@SHROUD_CHECKBOX:
Width: 230
Width: 140
Height: 20
Text: Shroud
Checkbox@FOG_CHECKBOX:
Y: 40
Width: 230
Y: 35
Width: 140
Height: 20
Text: Fog of War
Checkbox@SHORTGAME_CHECKBOX:
X: 150
Width: 140
Height: 20
Text: Short Game
Checkbox@CRATES_CHECKBOX:
X: 125
Width: 230
X: 150
Y: 35
Width: 140
Height: 20
Text: Crates Appear
Text: Crates
Checkbox@ALLYBUILDRADIUS_CHECKBOX:
X: 125
Y: 40
Width: 230
X: 290
Width: 140
Height: 20
Text: Build off Ally ConYards
Checkbox@ALLOWCHEATS_CHECKBOX:
X: 320
Width: 230
Height: 20
Text: Debug Menu
Text: Build off Allies' ConYards
Checkbox@FRAGILEALLIANCES_CHECKBOX:
X: 320
Y: 40
Width: 220
X: 290
Y: 35
Width: 140
Height: 20
Text: Diplomacy Changes
Checkbox@ALLOWCHEATS_CHECKBOX:
Y: 70
Width: 140
Height: 20
Text: Debug Menu
Label@STARTINGCASH_DESC:
Y: 87
Y: 110
Width: 80
Height: 25
Text: Starting Cash:
Align: Right
DropDownButton@STARTINGCASH_DROPDOWNBUTTON:
X: 85
Y: 87
Y: 110
Width: 130
Height: 25
Font: Regular
Text: $5000
Label@STARTINGUNITS_DESC:
X: PARENT_RIGHT - WIDTH - 145
Y: 87
Y: 110
Width: 120
Height: 25
Text: Starting Units:
Align: Right
DropDownButton@STARTINGUNITS_DROPDOWNBUTTON:
X: PARENT_RIGHT - WIDTH
Y: 87
Y: 110
Width: 140
Height: 25
Font: Regular
Label@DIFFICULTY_DESC:
X: PARENT_RIGHT - WIDTH - 145
Y: 122
Y: 150
Width: 120
Height: 25
Text: Mission Difficulty:
Align: Right
DropDownButton@DIFFICULTY_DROPDOWNBUTTON:
X: PARENT_RIGHT - WIDTH
Y: 122
Y: 150
Width: 140
Height: 25
Font: Regular
DropDownButton@TECHLEVEL_DROPDOWNBUTTON:
X: 85
Y: 127
Y: 150
Width: 130
Height: 25
Font: Regular
Text: 10
Label@TECHLEVEL_DESC:
Y: 127
Y: 150
Width: 80
Height: 25
Text: Tech Level:

View File

@@ -23,6 +23,7 @@ UseAsShellmap: False
Type: Campaign
Options:
ShortGame: False
Crates: False
Fog: True
Shroud: True
@@ -883,17 +884,14 @@ Rules:
PanelName: MISSION_OBJECTIVES
-StartGameNotification:
^Vehicle:
MustBeDestroyed:
Tooltip:
GenericVisibility: Enemy
ShowOwnerRow: false
^Tank:
MustBeDestroyed:
Tooltip:
GenericVisibility: Enemy
ShowOwnerRow: false
^Infantry:
MustBeDestroyed:
Tooltip:
GenericVisibility: Enemy
ShowOwnerRow: false

View File

@@ -21,6 +21,7 @@ UseAsShellmap: False
Type: Campaign
Options:
ShortGame: False
Crates: False
Fog: True
Shroud: True
@@ -1381,18 +1382,15 @@ Rules:
PanelName: MISSION_OBJECTIVES
-StartGameNotification:
^Infantry:
MustBeDestroyed:
Tooltip:
GenericVisibility: Enemy
ShowOwnerRow: false
^Tank:
MustBeDestroyed:
Tooltip:
GenericVisibility: Enemy
ShowOwnerRow: false
Demolishable:
^Vehicle:
MustBeDestroyed:
Tooltip:
GenericVisibility: Enemy
ShowOwnerRow: false

View File

@@ -833,6 +833,7 @@ Rules:
RenderUnit:
Image: MNLY
MustBeDestroyed:
RequiredForShortGame: true
Transforms:
IntoActor: ftur
Offset: 0,0
@@ -848,6 +849,7 @@ Rules:
Offset: 0,0
Facing: 96
MustBeDestroyed:
RequiredForShortGame: true
CashTrickler:
Period: 150
Amount: 30

View File

@@ -331,6 +331,7 @@ Rules:
RevealsShroud:
Range: 40c0
MustBeDestroyed:
RequiredForShortGame: true
-AttackMove:
HARV:
Tooltip:

View File

@@ -249,6 +249,7 @@ Rules:
WithMuzzleFlash@SECONDARY:
Armament: secondary
MustBeDestroyed:
RequiredForShortGame: true
-GivesBounty:
PT:
-GivesBounty:

View File

@@ -226,6 +226,7 @@ Rules:
RevealsShroud:
Range: 40c0
MustBeDestroyed:
RequiredForShortGame: true
-AttackMove:
HARV:
Tooltip:

View File

@@ -21,6 +21,7 @@ UseAsShellmap: False
Type: Minigame
Options:
ShortGame: False
Fog: True
Shroud: True
AllyBuildRadius: False

View File

@@ -201,12 +201,14 @@ SetupWorld = function()
end
Tick = function()
if soviets.Resources > soviets.ResourceCapacity * 0.75 then
soviets.Resources = soviets.Resources - ((soviets.ResourceCapacity * 0.01) / 25)
end
if DateTime.GameTime > 2 then
if soviets.Resources > soviets.ResourceCapacity * 0.75 then
soviets.Resources = soviets.Resources - ((soviets.ResourceCapacity * 0.01) / 25)
end
if player.HasNoRequiredUnits() then
player.MarkFailedObjective(villageObjective)
if player.HasNoRequiredUnits() then
player.MarkFailedObjective(villageObjective)
end
end
end

View File

@@ -21,6 +21,7 @@ UseAsShellmap: False
Type: Mission
Options:
ShortGame: False
Crates: False
Fog: True
Shroud: True
@@ -2296,27 +2297,22 @@ Rules:
GenericVisibility: Enemy
ShowOwnerRow: false
^Vehicle:
MustBeDestroyed:
Tooltip:
GenericVisibility: Enemy
ShowOwnerRow: false
^Tank:
MustBeDestroyed:
Tooltip:
GenericVisibility: Enemy
ShowOwnerRow: false
^Infantry:
MustBeDestroyed:
Tooltip:
GenericVisibility: Enemy
ShowOwnerRow: false
^Plane:
MustBeDestroyed:
Tooltip:
GenericVisibility: Enemy
ShowOwnerRow: false
^Ship:
MustBeDestroyed:
Tooltip:
GenericVisibility: Enemy
ShowOwnerRow: false

View File

@@ -21,6 +21,7 @@ UseAsShellmap: False
Type: Mission
Options:
ShortGame: False
Crates: False
Fog: True
Shroud: True
@@ -2134,17 +2135,14 @@ Rules:
GenericVisibility: Enemy
ShowOwnerRow: false
^Infantry:
MustBeDestroyed:
Tooltip:
GenericVisibility: Enemy
ShowOwnerRow: false
^Vehicle:
MustBeDestroyed:
Tooltip:
GenericVisibility: Enemy
ShowOwnerRow: false
^Tank:
MustBeDestroyed:
Tooltip:
GenericVisibility: Enemy
ShowOwnerRow: false

View File

@@ -23,6 +23,7 @@ Type: Campaign
PreviewVideo: soviet1.vqa
Options:
ShortGame: False
Crates: False
Fog: True
Shroud: True
@@ -796,17 +797,14 @@ Rules:
^CivBuilding:
MustBeDestroyed:
^Plane:
MustBeDestroyed:
Tooltip:
GenericVisibility: Enemy
ShowOwnerRow: false
^Vehicle:
MustBeDestroyed:
Tooltip:
GenericVisibility: Enemy
ShowOwnerRow: false
^Infantry:
MustBeDestroyed:
Tooltip:
GenericVisibility: Enemy
ShowOwnerRow: false
@@ -820,7 +818,6 @@ Rules:
GenericStancePrefix: false
ShowOwnerRow: false
PBOX:
MustBeDestroyed:
JEEP:
Explodes:
JamsRadar:
@@ -849,4 +846,4 @@ Voices:
Notifications:
Translations:
Translations:

View File

@@ -21,6 +21,7 @@ UseAsShellmap: False
Type: Mission
Options:
ShortGame: False
Crates: False
Fog: True
Shroud: True
@@ -1224,17 +1225,14 @@ Rules:
ObjectivesPanel:
PanelName: MISSION_OBJECTIVES
^Infantry:
MustBeDestroyed:
Tooltip:
GenericVisibility: Enemy
ShowOwnerRow: false
^Tank:
MustBeDestroyed:
Tooltip:
GenericVisibility: Enemy
ShowOwnerRow: false
^Vehicle:
MustBeDestroyed:
Tooltip:
GenericVisibility: Enemy
ShowOwnerRow: false

View File

@@ -71,6 +71,7 @@
UpgradeMaxAcceptedLevel: 2
TimedUpgradeBar:
Upgrade: invulnerability
MustBeDestroyed:
^Tank:
AppearsOnRadar:
@@ -145,6 +146,7 @@
UpgradeMaxAcceptedLevel: 2
TimedUpgradeBar:
Upgrade: invulnerability
MustBeDestroyed:
^Infantry:
AppearsOnRadar:
@@ -233,6 +235,7 @@
UpgradeTypes: selfheal
UpgradeMinEnabledLevel: 1
UpgradeManager:
MustBeDestroyed:
^Ship:
AppearsOnRadar:
@@ -286,6 +289,7 @@
TimedUpgradeBar:
Upgrade: invulnerability
UpgradeMinEnabledLevel: 1
MustBeDestroyed:
^Plane:
AppearsOnRadar:
@@ -342,6 +346,7 @@
TimedUpgradeBar:
Upgrade: invulnerability
WithShadow:
MustBeDestroyed:
^Helicopter:
Inherits: ^Plane
@@ -377,6 +382,7 @@
EmitInfantryOnSell:
ActorTypes: e1,e1,e1,e1,e1,e1,e1,e1,e1,e1,e1,e1,e1,e1,e1,c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,e6,e6,e6,e6,e6
MustBeDestroyed:
RequiredForShortGame: true
GivesExperience:
CaptureNotification:
EditorAppearance:
@@ -416,7 +422,8 @@
Inherits: ^Building
TargetableBuilding:
TargetTypes: Ground, C4, DetonateAttack, Structure, Defense
-MustBeDestroyed:
MustBeDestroyed:
RequiredForShortGame: false
^Wall:
AppearsOnRadar:

View File

@@ -520,6 +520,7 @@ SNIPER:
UncloakOnMove: yes
DetectCloaked:
Range: 6
-MustBeDestroyed:
Zombie:
Inherits: ^Infantry

View File

@@ -48,6 +48,7 @@ SS:
Explodes:
Weapon: UnitExplodeSubmarine
EmptyWeapon: UnitExplodeSubmarine
-MustBeDestroyed:
MSUB:
Inherits: ^Ship
@@ -99,6 +100,7 @@ MSUB:
Explodes:
Weapon: UnitExplodeSubmarine
EmptyWeapon: UnitExplodeSubmarine
-MustBeDestroyed:
DD:
Inherits: ^Ship

View File

@@ -43,7 +43,8 @@ MSLO:
SupportPowerChargeBar:
Power:
Amount: -100
-MustBeDestroyed:
MustBeDestroyed:
RequiredForShortGame: false
GAP:
Inherits: ^Building
@@ -77,7 +78,8 @@ GAP:
RenderShroudCircle:
Power:
Amount: -60
-MustBeDestroyed:
MustBeDestroyed:
RequiredForShortGame: false
SPEN:
Inherits: ^Building
@@ -228,7 +230,8 @@ IRON:
SupportPowerChargeBar:
Power:
Amount: -200
-MustBeDestroyed:
MustBeDestroyed:
RequiredForShortGame: false
PDOX:
Inherits: ^Building
@@ -272,7 +275,8 @@ PDOX:
-AcceptsSupplies:
Power:
Amount: -200
-MustBeDestroyed:
MustBeDestroyed:
RequiredForShortGame: false
TSLA:
Inherits: ^Defense
@@ -491,6 +495,7 @@ HBOX:
PortCones: 86, 86, 86, 86, 86, 86
Power:
Amount: -15
-MustBeDestroyed:
GUN:
Inherits: ^Defense

View File

@@ -311,6 +311,7 @@ MCV:
NoTransformSounds: nodeply1.aud
RenderUnit:
MustBeDestroyed:
RequiredForShortGame: true
BaseBuilding:
LeavesHusk:
HuskActor: MCV.Husk
@@ -772,4 +773,5 @@ STNK:
Explodes:
Weapon: UnitExplodeSmall
EmptyWeapon: UnitExplodeSmall
-MustBeDestroyed:

View File

@@ -23,6 +23,7 @@
RepairableBuilding:
EngineerRepairable:
MustBeDestroyed:
RequiredForShortGame: true
GivesExperience:
CaptureNotification:
EditorAppearance:
@@ -92,6 +93,7 @@
UpgradeMinEnabledLevel: 1
InitialDelay: 0
CloakDelay: 90
MustBeDestroyed:
^Infantry:
AppearsOnRadar:
@@ -174,6 +176,7 @@
UpgradeMinEnabledLevel: 1
InitialDelay: 0
CloakDelay: 90
MustBeDestroyed:
^CivilianInfantry:
Inherits: ^Infantry
@@ -201,6 +204,7 @@
Types: CivilianInfantry
RenderInfantry:
ScaredyCat:
-MustBeDestroyed:
^Vehicle:
AppearsOnRadar:
@@ -280,6 +284,7 @@
UpgradeMaxAcceptedLevel: 2
InitialDelay: 0
CloakDelay: 90
MustBeDestroyed:
^Tank:
AppearsOnRadar:
@@ -359,6 +364,7 @@
UpgradeMaxAcceptedLevel: 2
InitialDelay: 0
CloakDelay: 90
MustBeDestroyed:
^Helicopter:
AppearsOnRadar:
@@ -406,6 +412,7 @@
Guard:
Guardable:
UpgradeManager:
MustBeDestroyed:
^BlossomTree:
Tooltip:

View File

@@ -23,6 +23,7 @@ MCV:
RevealsShroud:
Range: 4c0
MustBeDestroyed:
RequiredForShortGame: true
BaseBuilding:
Transforms:
IntoActor: gacnst
@@ -848,4 +849,5 @@ STNK:
RenderSprites:
RenderVoxels:
WithVoxelBody:
-MustBeDestroyed: