diff --git a/OpenRA.Mods.D2k/Widgets/BuildPaletteWidget.cs b/OpenRA.Mods.D2k/Widgets/BuildPaletteWidget.cs index badda1a19d..2e121ab391 100644 --- a/OpenRA.Mods.D2k/Widgets/BuildPaletteWidget.cs +++ b/OpenRA.Mods.D2k/Widgets/BuildPaletteWidget.cs @@ -499,10 +499,10 @@ namespace OpenRA.Mods.D2k.Widgets * ((lowpower) ? CurrentQueue.Info.LowPowerSlowdown : 1); DrawRightAligned(WidgetUtils.FormatTime(time), pos + new int2(-5, 35), lowpower ? Color.Red : Color.White); - var bi = info.Traits.GetOrDefault(); - if (bi != null) - DrawRightAligned("{1}{0}".F(bi.Power, bi.Power > 0 ? "+" : ""), pos + new int2(-5, 20), - ((power.PowerProvided - power.PowerDrained) >= -bi.Power || bi.Power > 0) ? Color.White : Color.Red); + var pi = info.Traits.GetOrDefault(); + if (pi != null) + DrawRightAligned("{1}{0}".F(pi.Amount, pi.Amount > 0 ? "+" : ""), pos + new int2(-5, 20), + ((power.PowerProvided - power.PowerDrained) >= -pi.Amount || pi.Amount > 0) ? Color.White : Color.Red); p += new int2(5, 35); if (!canBuildThis) diff --git a/OpenRA.Mods.RA/AI/BaseBuilder.cs b/OpenRA.Mods.RA/AI/BaseBuilder.cs index 2c6648e3c1..e961e87144 100644 --- a/OpenRA.Mods.RA/AI/BaseBuilder.cs +++ b/OpenRA.Mods.RA/AI/BaseBuilder.cs @@ -138,8 +138,8 @@ namespace OpenRA.Mods.RA.AI // First priority is to get out of a low power situation if (playerPower.ExcessPower < 0) { - var power = GetProducibleBuilding("Power", buildableThings, a => a.Traits.Get().Power); - if (power != null && power.Traits.Get().Power > 0) + var power = GetProducibleBuilding("Power", buildableThings, a => a.Traits.Get().Amount); + if (power != null && power.Traits.Get().Amount > 0) { HackyAI.BotDebug("AI: {0} decided to build {1}: Priority override (low power)", queue.Actor.Owner, power.Name); return power; @@ -198,12 +198,12 @@ namespace OpenRA.Mods.RA.AI // Will this put us into low power? var actor = world.Map.Rules.Actors[frac.Key]; - var bi = actor.Traits.Get(); - if (playerPower.ExcessPower < 0 || playerPower.ExcessPower < bi.Power) + var pi = actor.Traits.GetOrDefault(); + if (playerPower.ExcessPower < 0 || (pi != null && playerPower.ExcessPower < pi.Amount)) { // Try building a power plant instead - var power = GetProducibleBuilding("Power", buildableThings, a => a.Traits.Get().Power); - if (power != null && power.Traits.Get().Power > 0) + var power = GetProducibleBuilding("Power", buildableThings, a => a.Traits.Get().Amount); + if (power != null && power.Traits.Get().Amount > 0) { HackyAI.BotDebug("{0} decided to build {1}: Priority override (would be low power)", queue.Actor.Owner, power.Name); return power; diff --git a/OpenRA.Mods.RA/Buildings/Building.cs b/OpenRA.Mods.RA/Buildings/Building.cs index b67132d957..209f6df6b7 100644 --- a/OpenRA.Mods.RA/Buildings/Building.cs +++ b/OpenRA.Mods.RA/Buildings/Building.cs @@ -23,8 +23,6 @@ namespace OpenRA.Mods.RA.Buildings public class BuildingInfo : ITraitInfo, IOccupySpaceInfo, UsesInit { - [Desc("If negative, it will drain power, if positive, it will provide power.")] - public readonly int Power = 0; [Desc("Where you are allowed to place the building (Water, Clear, ...)")] public readonly string[] TerrainTypes = {}; [Desc("The range to the next building it can be constructed. Set it higher for walls.")] @@ -101,7 +99,7 @@ namespace OpenRA.Mods.RA.Buildings } } - public class Building : INotifyDamage, IOccupySpace, INotifyCapture, INotifySold, INotifyTransform, ISync, ITechTreePrerequisite, INotifyCreated, INotifyAddedToWorld, INotifyRemovedFromWorld + public class Building : IOccupySpace, INotifySold, INotifyTransform, ISync, ITechTreePrerequisite, INotifyCreated, INotifyAddedToWorld, INotifyRemovedFromWorld { public readonly BuildingInfo Info; public bool BuildComplete { get; private set; } @@ -109,8 +107,6 @@ namespace OpenRA.Mods.RA.Buildings readonly Actor self; public readonly bool SkipMakeAnimation; - PowerManager PlayerPower; - /* shared activity lock: undeploy, sell, capture, etc */ [Sync] public bool Locked = true; @@ -135,7 +131,6 @@ namespace OpenRA.Mods.RA.Buildings this.self = init.self; this.topLeft = init.Get(); this.Info = info; - this.PlayerPower = init.self.Owner.PlayerActor.Trait(); occupiedCells = FootprintUtils.UnpathableTiles( self.Info.Name, Info, TopLeft ) .Select(c => Pair.New(c, SubCell.FullCell)).ToArray(); @@ -144,30 +139,9 @@ namespace OpenRA.Mods.RA.Buildings SkipMakeAnimation = init.Contains(); } - public int GetPowerUsage() - { - if (Info.Power <= 0) - return Info.Power; - - var health = self.TraitOrDefault(); - return health != null ? (Info.Power * health.HP / health.MaxHP) : Info.Power; - } - - public void Damaged(Actor self, AttackInfo e) - { - // Power plants lose power with damage - if (Info.Power > 0) - PlayerPower.UpdateActor(self, GetPowerUsage()); - } - Pair[] occupiedCells; public IEnumerable> OccupiedCells() { return occupiedCells; } - public void OnCapture(Actor self, Actor captor, Player oldOwner, Player newOwner) - { - PlayerPower = newOwner.PlayerActor.Trait(); - } - public void Created(Actor self) { if (SkipMakeAnimation || !self.HasTrait()) diff --git a/OpenRA.Mods.RA/Buildings/PowerManager.cs b/OpenRA.Mods.RA/Buildings/PowerManager.cs index 3e074f1bb3..a4f40d757b 100755 --- a/OpenRA.Mods.RA/Buildings/PowerManager.cs +++ b/OpenRA.Mods.RA/Buildings/PowerManager.cs @@ -21,11 +21,11 @@ namespace OpenRA.Mods.RA.Buildings public class PowerManager : ITick, ISync { - PowerManagerInfo Info; - Player Player; - DeveloperMode devMode; + readonly PowerManagerInfo info; + readonly Player player; + readonly DeveloperMode devMode; - Dictionary PowerDrain = new Dictionary(); + readonly Dictionary powerDrain = new Dictionary(); [Sync] int totalProvided; public int PowerProvided { get { return totalProvided; } } @@ -36,8 +36,8 @@ namespace OpenRA.Mods.RA.Buildings public PowerManager(ActorInitializer init, PowerManagerInfo info) { - Info = info; - Player = init.self.Owner; + this.info = info; + player = init.self.Owner; init.world.ActorAdded += ActorAdded; init.world.ActorRemoved += ActorRemoved; @@ -48,17 +48,22 @@ namespace OpenRA.Mods.RA.Buildings void ActorAdded(Actor a) { - if (a.Owner != Player || !a.HasTrait()) + if (a.Owner != player) return; - PowerDrain.Add(a, a.Trait().GetPowerUsage()); + + var power = a.TraitOrDefault(); + if (power == null) + return; + + powerDrain.Add(a, power.CurrentPower); UpdateTotals(); } void ActorRemoved(Actor a) { - if (a.Owner != Player || !a.HasTrait()) + if (a.Owner != player || !a.HasTrait()) return; - PowerDrain.Remove(a); + powerDrain.Remove(a); UpdateTotals(); } @@ -66,7 +71,7 @@ namespace OpenRA.Mods.RA.Buildings { totalProvided = 0; totalDrained = 0; - foreach (var kv in PowerDrain) + foreach (var kv in powerDrain) { var p = kv.Value; if (p > 0) @@ -81,10 +86,10 @@ namespace OpenRA.Mods.RA.Buildings public void UpdateActor(Actor a, int newPower) { - if (a.Owner != Player || !a.HasTrait()) + if (a.Owner != player || !a.HasTrait()) return; - PowerDrain[a] = newPower; + powerDrain[a] = newPower; UpdateTotals(); } @@ -109,7 +114,7 @@ namespace OpenRA.Mods.RA.Buildings { if (lowPower) Sound.PlayNotification(self.World.Map.Rules, self.Owner, "Speech", "LowPower", self.Owner.Country.Race); - nextPowerAdviceTime = Info.AdviceInterval; + nextPowerAdviceTime = info.AdviceInterval; } } diff --git a/OpenRA.Mods.RA/Buildings/CanPowerDown.cs b/OpenRA.Mods.RA/CanPowerDown.cs old mode 100755 new mode 100644 similarity index 92% rename from OpenRA.Mods.RA/Buildings/CanPowerDown.cs rename to OpenRA.Mods.RA/CanPowerDown.cs index 87d844e200..0dedea60ee --- a/OpenRA.Mods.RA/Buildings/CanPowerDown.cs +++ b/OpenRA.Mods.RA/CanPowerDown.cs @@ -14,7 +14,7 @@ using OpenRA.Traits; namespace OpenRA.Mods.RA.Buildings { [Desc("The player can disable the power individually on this actor.")] - public class CanPowerDownInfo : ITraitInfo + public class CanPowerDownInfo : ITraitInfo, Requires { public object Create(ActorInitializer init) { return new CanPowerDown(init); } } @@ -28,7 +28,7 @@ namespace OpenRA.Mods.RA.Buildings public CanPowerDown(ActorInitializer init) { PowerManager = init.self.Owner.PlayerActor.Trait(); - normalPower = init.self.Info.Traits.Get().Power; + normalPower = init.self.Info.Traits.Get().Amount; } public bool Disabled { get { return disabled; } } diff --git a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj index 8b1cd2025c..3a0809d7d3 100644 --- a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj +++ b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj @@ -118,6 +118,7 @@ + @@ -164,7 +165,7 @@ - + @@ -588,7 +589,5 @@ cd "$(SolutionDir)thirdparty/" copy "FuzzyLogicLibrary.dll" "$(SolutionDir)" cd "$(SolutionDir)" - - - + \ No newline at end of file diff --git a/OpenRA.Mods.RA/Power.cs b/OpenRA.Mods.RA/Power.cs new file mode 100644 index 0000000000..c09dbd4b30 --- /dev/null +++ b/OpenRA.Mods.RA/Power.cs @@ -0,0 +1,63 @@ +#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 System; +using OpenRA.Mods.RA.Buildings; +using OpenRA.Traits; + +namespace OpenRA.Mods.RA +{ + public class PowerInfo : ITraitInfo + { + [Desc("If negative, it will drain power. If positive, it will provide power.")] + public readonly int Amount = 0; + + [Desc("Scale power amount with the current health.")] + public readonly bool ScaleWithHealth = false; + + public object Create(ActorInitializer init) { return new Power(init.self, this); } + } + + public class Power : INotifyDamage, INotifyCapture + { + readonly PowerInfo info; + readonly Lazy health; + PowerManager playerPower; + + public int CurrentPower + { + get + { + if (info.Amount <= 0 || health == null || !info.ScaleWithHealth) + return info.Amount; + + return info.Amount * health.Value.HP / health.Value.MaxHP; + } + } + + public Power(Actor self, PowerInfo info) + { + this.info = info; + health = Exts.Lazy(self.TraitOrDefault); + playerPower = self.Owner.PlayerActor.Trait(); + } + + public void Damaged(Actor self, AttackInfo e) + { + if (info.ScaleWithHealth) + playerPower.UpdateActor(self, CurrentPower); + } + + public void OnCapture(Actor self, Actor captor, Player oldOwner, Player newOwner) + { + playerPower = newOwner.PlayerActor.Trait(); + } + } +} diff --git a/OpenRA.Mods.RA/Widgets/Logic/ProductionTooltipLogic.cs b/OpenRA.Mods.RA/Widgets/Logic/ProductionTooltipLogic.cs index b9dd413173..96cae4ea8f 100644 --- a/OpenRA.Mods.RA/Widgets/Logic/ProductionTooltipLogic.cs +++ b/OpenRA.Mods.RA/Widgets/Logic/ProductionTooltipLogic.cs @@ -56,7 +56,7 @@ namespace OpenRA.Mods.RA.Widgets.Logic var tooltip = info.Traits.Get(); var buildable = info.Traits.Get(); var cost = info.Traits.Get().Cost; - var bi = info.Traits.GetOrDefault(); + var pi = info.Traits.GetOrDefault(); nameLabel.GetText = () => tooltip.Name; @@ -72,7 +72,7 @@ namespace OpenRA.Mods.RA.Widgets.Logic var requiresString = prereqs.Any() ? requiresLabel.Text.F(prereqs.JoinWith(", ")) : ""; requiresLabel.GetText = () => requiresString; - var power = bi != null ? bi.Power : 0; + var power = pi != null ? pi.Amount : 0; var powerString = power.ToString(); powerLabel.GetText = () => powerString; powerLabel.GetColor = () => ((pm.PowerProvided - pm.PowerDrained) >= -power || power > 0) diff --git a/OpenRA.Utility/UpgradeRules.cs b/OpenRA.Utility/UpgradeRules.cs index 064dd759f4..afed5bc493 100644 --- a/OpenRA.Utility/UpgradeRules.cs +++ b/OpenRA.Utility/UpgradeRules.cs @@ -328,6 +328,32 @@ namespace OpenRA.Utility node.Key = "Units"; } + // Power from Building was moved out into its own trait + if (engineVersion < 20140802) + { + if (depth == 0) + { + var actorTraits = node.Value.Nodes; + var building = actorTraits.FirstOrDefault(t => t.Key == "Building"); + if (building != null) + { + var buildingFields = building.Value.Nodes; + var power = buildingFields.FirstOrDefault(n => n.Key == "Power"); + if (power != null) + { + buildingFields.Remove(power); + + var powerFields = new List { new MiniYamlNode("Amount", power.Value) }; + + if (FieldLoader.GetValue("Power", power.Value.Value) > 0) + powerFields.Add(new MiniYamlNode("ScaleWithHealth", "True")); + + actorTraits.Add(new MiniYamlNode("Power", new MiniYaml("", powerFields))); + } + } + } + } + UpgradeActorRules(engineVersion, ref node.Value.Nodes, node, depth + 1); } } diff --git a/mods/cnc/maps/gdi03/map.yaml b/mods/cnc/maps/gdi03/map.yaml index 1380b2abc8..5deae0f5e8 100644 --- a/mods/cnc/maps/gdi03/map.yaml +++ b/mods/cnc/maps/gdi03/map.yaml @@ -947,7 +947,8 @@ Rules: Buildable: Prerequisites: ~disabled Building: - Power: -10 + Power: + Amount: -10 HQ: Buildable: Prerequisites: ~disabled @@ -967,7 +968,6 @@ Rules: Prerequisites: proc Queue: Building.GDI Building: - Power: -40 Footprint: x_ xx Dimensions: 2,2 Health: @@ -978,6 +978,8 @@ Rules: ProvidesRadar: RenderBuilding: Image: hq + Power: + Amount: -40 PowerProxy.AirSupport: AirstrikePower: Icon: airstrike diff --git a/mods/cnc/maps/nod03a/map.yaml b/mods/cnc/maps/nod03a/map.yaml index e8a4fca6b0..34d7eb053a 100644 --- a/mods/cnc/maps/nod03a/map.yaml +++ b/mods/cnc/maps/nod03a/map.yaml @@ -642,7 +642,6 @@ Rules: Prerequisites: proc Queue: Building.GDI, Building.Nod Building: - Power: -40 Footprint: x_ xx Dimensions: 2,2 Health: @@ -656,6 +655,8 @@ Rules: Range: 8 RenderBuilding: Image: hq + Power: + Amount: -40 Sequences: diff --git a/mods/cnc/maps/nod03b/map.yaml b/mods/cnc/maps/nod03b/map.yaml index 14358fbf90..5ef9dc9f71 100644 --- a/mods/cnc/maps/nod03b/map.yaml +++ b/mods/cnc/maps/nod03b/map.yaml @@ -711,7 +711,6 @@ Rules: Prerequisites: proc Queue: Building.GDI, Building.Nod Building: - Power: -40 Footprint: x_ xx Dimensions: 2,2 Health: @@ -725,6 +724,8 @@ Rules: Range: 8 RenderBuilding: Image: hq + Power: + Amount: -40 Sequences: diff --git a/mods/cnc/rules/structures.yaml b/mods/cnc/rules/structures.yaml index 67a65c1d0b..5a8df2a63c 100644 --- a/mods/cnc/rules/structures.yaml +++ b/mods/cnc/rules/structures.yaml @@ -10,7 +10,6 @@ FACT: Name: Construction Yard Description: Builds structures Building: - Power: 0 Footprint: xxx xxx Dimensions: 3,2 Health: @@ -75,6 +74,8 @@ FACT: Cooldown: 75 Range: 14 WithBuildingPlacedAnimation: + Power: + Amount: 0 NUKE: Inherits: ^BaseBuilding @@ -90,7 +91,6 @@ NUKE: Prerequisites: fact Queue: Building.GDI, Building.Nod Building: - Power: 100 Footprint: x_ xx Dimensions: 2,2 Health: @@ -98,6 +98,9 @@ NUKE: RevealsShroud: Range: 4c0 Bib: + Power: + Amount: 100 + ScaleWithHealth: True NUK2: Inherits: ^BaseBuilding @@ -113,7 +116,6 @@ NUK2: Prerequisites: anyhq, ~techlevel.medium Queue: Building.GDI, Building.Nod Building: - Power: 200 Footprint: xx xx Dimensions: 2,2 Health: @@ -121,6 +123,9 @@ NUK2: RevealsShroud: Range: 4c0 Bib: + Power: + Amount: 200 + ScaleWithHealth: True PROC: Inherits: ^BaseBuilding @@ -134,7 +139,6 @@ PROC: Prerequisites: anypower Queue: Building.GDI, Building.Nod Building: - Power: -50 Footprint: _x_ xxx === Dimensions: 3,3 Health: @@ -159,6 +163,8 @@ PROC: SpawnOffset: 1,2 Facing: 64 WithResources: + Power: + Amount: -50 SILO: Inherits: ^BaseBuilding @@ -172,7 +178,6 @@ SILO: Prerequisites: proc Queue: Defence.GDI, Defence.Nod Building: - Power: -10 Footprint: xx Dimensions: 2,1 -GivesBuildableArea: @@ -191,6 +196,8 @@ SILO: Bounds: 49,30 -RenderBuilding: -EmitInfantryOnSell: + Power: + Amount: -10 PYLE: Inherits: ^BaseBuilding @@ -206,7 +213,6 @@ PYLE: Prerequisites: anypower Queue: Building.GDI Building: - Power: -20 Footprint: xx xx Dimensions: 2,2 Health: @@ -230,6 +236,8 @@ PYLE: BuildSpeed: .4 LowPowerSlowdown: 3 ProductionBar: + Power: + Amount: -20 HAND: Inherits: ^BaseBuilding @@ -245,7 +253,6 @@ HAND: Prerequisites: anypower Queue: Building.Nod Building: - Power: -20 Footprint: __ xx xx Dimensions: 2,3 Health: @@ -266,6 +273,8 @@ HAND: BuildSpeed: .4 LowPowerSlowdown: 3 ProductionBar: + Power: + Amount: -20 AFLD: Inherits: ^BaseBuilding @@ -281,7 +290,6 @@ AFLD: Prerequisites: proc Queue: Building.Nod Building: - Power: -30 Footprint: xxxx xxxx Dimensions: 4,2 Health: @@ -305,6 +313,8 @@ AFLD: LowPowerSlowdown: 3 ReadyAudio: ProductionBar: + Power: + Amount: -30 WEAP: Inherits: ^BaseBuilding @@ -320,7 +330,6 @@ WEAP: Prerequisites: proc Queue: Building.GDI Building: - Power: -30 Footprint: ___ xxx === Dimensions: 3,3 Health: @@ -344,6 +353,8 @@ WEAP: BuildSpeed: .4 LowPowerSlowdown: 3 ProductionBar: + Power: + Amount: -30 HPAD: Inherits: ^BaseBuilding @@ -357,7 +368,6 @@ HPAD: Prerequisites: proc Queue: Building.GDI, Building.Nod Building: - Power: -10 Footprint: xx xx Dimensions: 2,2 Health: @@ -390,6 +400,8 @@ HPAD: ProductionType: Aircraft.GDI ProductionBar@Nod: ProductionType: Aircraft.Nod + Power: + Amount: -10 HQ: Inherits: ^BaseBuilding @@ -405,7 +417,6 @@ HQ: Prerequisites: proc, ~techlevel.medium Queue: Building.GDI, Building.Nod Building: - Power: -40 Footprint: x_ xx Dimensions: 2,2 RequiresPower: @@ -440,6 +451,8 @@ HQ: DisplayRadarPing: True CameraActor: camera SupportPowerChargeBar: + Power: + Amount: -40 FIX: Inherits: ^BaseBuilding @@ -453,7 +466,6 @@ FIX: Prerequisites: vehicleproduction Queue: Building.GDI, Building.Nod Building: - Power: -30 Footprint: _x_ xxx _x_ Dimensions: 3,3 Health: @@ -466,6 +478,8 @@ FIX: RepairsUnits: RallyPoint: WithRepairAnimation: + Power: + Amount: -30 EYE: Inherits: ^BaseBuilding @@ -481,7 +495,6 @@ EYE: Prerequisites: anyhq, ~techlevel.high Queue: Building.GDI Building: - Power: -200 Footprint: x_ xx Dimensions: 2,2 RequiresPower: @@ -512,6 +525,8 @@ EYE: DisplayRadarPing: True CameraActor: camera.small SupportPowerChargeBar: + Power: + Amount: -200 TMPL: Inherits: ^BaseBuilding @@ -527,7 +542,6 @@ TMPL: Prerequisites: anyhq, ~techlevel.high Queue: Building.Nod Building: - Power: -150 Footprint: ___ xxx xxx Dimensions: 3,3 RequiresPower: @@ -556,6 +570,8 @@ TMPL: DisplayRadarPing: True CameraActor: camera SupportPowerChargeBar: + Power: + Amount: -150 GUN: Inherits: ^BaseBuilding @@ -571,7 +587,6 @@ GUN: Prerequisites: barracks Queue: Defence.GDI, Defence.Nod Building: - Power: -20 -GivesBuildableArea: Health: HP: 400 @@ -598,6 +613,8 @@ GUN: RenderDetectionCircle: DetectCloaked: Range: 3 + Power: + Amount: -20 SAM: Inherits: ^BaseBuilding @@ -613,7 +630,6 @@ SAM: Prerequisites: hand Queue: Defence.Nod Building: - Power: -20 Footprint: xx Dimensions: 2,1 RequiresPower: @@ -637,6 +653,8 @@ SAM: AutoTarget: -RenderBuilding: RenderRangeCircle: + Power: + Amount: -20 OBLI: Inherits: ^BaseBuilding @@ -652,7 +670,6 @@ OBLI: Prerequisites: tmpl, ~techlevel.high Queue: Defence.Nod Building: - Power: -150 Footprint: _ x Dimensions: 1,2 RequiresPower: @@ -682,6 +699,8 @@ OBLI: RenderDetectionCircle: DetectCloaked: Range: 5 + Power: + Amount: -150 GTWR: Inherits: ^BaseBuilding @@ -697,7 +716,6 @@ GTWR: Prerequisites: barracks Queue: Defence.GDI, Defence.Nod Building: - Power: -10 -GivesBuildableArea: Health: HP: 400 @@ -720,6 +738,8 @@ GTWR: WithMuzzleFlash: Turreted: ROT: 255 + Power: + Amount: -10 ATWR: Inherits: ^BaseBuilding @@ -735,7 +755,6 @@ ATWR: Prerequisites: anyhq, ~techlevel.medium Queue: Defence.GDI Building: - Power: -40 Footprint: _ x Dimensions: 1,2 RequiresPower: @@ -768,6 +787,8 @@ ATWR: DetectCloaked: Range: 5 RenderRangeCircle: + Power: + Amount: -40 SBAG: Inherits: ^Wall diff --git a/mods/d2k/rules/structures.yaml b/mods/d2k/rules/structures.yaml index cf2c5bda98..816b28b5f7 100644 --- a/mods/d2k/rules/structures.yaml +++ b/mods/d2k/rules/structures.yaml @@ -41,7 +41,6 @@ CONCRETEB: ^CONYARD: Inherits: ^Building Building: - Power: 20 Footprint: xxx xxx Dimensions: 3,2 Adjacent: 4 @@ -75,6 +74,8 @@ CONCRETEB: Prerequisite: Conyard WithBuildingPlacedOverlay: Palette: d2k + Power: + Amount: 20 ^POWER: Inherits: ^Building @@ -91,7 +92,6 @@ CONCRETEB: Name: Windtrap Description: Provides power for other structures Building: - Power: 100 Footprint: xx xx Dimensions: 2,2 Bib: @@ -105,6 +105,9 @@ CONCRETEB: Prerequisite: Power WithIdleOverlay@ZAPS: Sequence: idle-zaps + Power: + Amount: 100 + ScaleWithHealth: True ^BARRACKS: Inherits: ^Building @@ -121,7 +124,6 @@ CONCRETEB: Name: Barracks Description: Trains infantry Building: - Power: -20 Footprint: =x xx Dimensions: 2,2 Bib: @@ -147,6 +149,8 @@ CONCRETEB: ValuePercentage: 0 ProvidesCustomPrerequisite: Prerequisite: Barracks + Power: + Amount: -20 ^REFINERY: Inherits: ^Building @@ -163,7 +167,6 @@ CONCRETEB: Name: Spice Refinery Description: Harvesters unload Spice here for processing Building: - Power: -30 Footprint: =xx xx= Dimensions: 3,2 Bib: @@ -193,6 +196,8 @@ CONCRETEB: Prerequisite: Refinery WithDockingOverlay@SMOKE: Sequence: smoke + Power: + Amount: -30 ^SILO: Inherits: ^Building @@ -209,7 +214,6 @@ CONCRETEB: Name: Silo Description: Stores excess harvested Spice Building: - Power: -5 Adjacent: 4 -GivesBuildableArea: Health: @@ -225,6 +229,8 @@ CONCRETEB: PipCount: 5 Capacity: 2000 -EmitInfantryOnSell: + Power: + Amount: -5 ^LIGHT: Inherits: ^Building @@ -241,7 +247,6 @@ CONCRETEB: Name: Light Factory Description: Produces light vehicles Building: - Power: -20 Footprint: xxx xx= Dimensions: 3,2 Bib: @@ -265,6 +270,8 @@ CONCRETEB: Prerequisite: Light WithProductionOverlay@WELDING: Sequence: production-welding + Power: + Amount: -20 ^HEAVY: Inherits: ^Building @@ -281,7 +288,6 @@ CONCRETEB: Name: Heavy Factory Description: Produces heavy vehicles Building: - Power: -30 Footprint: _x_ xxx =xx Dimensions: 3,3 Bib: @@ -305,6 +311,8 @@ CONCRETEB: Prerequisite: Heavy WithProductionOverlay@WELDING: Sequence: production-welding + Power: + Amount: -30 ^RADAR: Inherits: ^Building @@ -324,7 +332,6 @@ CONCRETEB: Name: Outpost Description: Provides a radar map of the battlefield\n Requires power to operate Building: - Power: -40 Footprint: xxx xxx Dimensions: 3,2 Bib: @@ -343,6 +350,8 @@ CONCRETEB: WithIdleOverlay@DISH: Sequence: idle-dish PauseOnLowPower: yes + Power: + Amount: -40 ^STARPORT: Inherits: ^Building @@ -357,7 +366,6 @@ CONCRETEB: BuildPaletteOrder: 80 Hotkey: c Building: - Power: -40 Footprint: xxx x=x =x= Dimensions: 3,3 Selectable: @@ -389,6 +397,8 @@ CONCRETEB: DisabledOverlay: ProvidesCustomPrerequisite: Prerequisite: Starport + Power: + Amount: -40 ^WALL: Buildable: @@ -458,7 +468,6 @@ WALL: Name: Gun Tower Description: Defensive structure\n Strong vs Tanks\n Weak vs Infantry, Aircraft Building: - Power: -20 Adjacent: 4 BuildSounds: CHUNG.WAV SellSounds: CHUNG.WAV @@ -496,6 +505,8 @@ WALL: -WithMakeAnimation: LineBuildNode: Types: turret + Power: + Amount: -20 ^ROCKETTOWER: Inherits: ^Building @@ -510,7 +521,6 @@ WALL: Name: Rocket Tower Description: Defensive structure\n Strong vs Infantry, Aircraft\n Weak vs Tanks\n\n Requires power to operate Building: - Power: -30 Adjacent: 4 BuildSounds: CHUNG.WAV SellSounds: CHUNG.WAV @@ -548,6 +558,8 @@ WALL: -WithMakeAnimation: LineBuildNode: Types: turret + Power: + Amount: -30 ^REPAIR: Inherits: ^Building @@ -562,7 +574,6 @@ WALL: Name: Repair Pad Description: Repairs vehicles\n Allows construction of MCVs Building: - Power: -10 Footprint: =x= =x= === Dimensions: 3,3 Health: @@ -581,6 +592,8 @@ WALL: Prerequisite: Repair WithRepairOverlay: Palette: repairlights + Power: + Amount: -10 ^HIGHTECH: Inherits: ^Building @@ -597,7 +610,6 @@ WALL: Name: High Tech Facility Description: Unlocks advanced technology Building: - Power: -40 Footprint: _x_ xxx xxx Dimensions: 3,3 Bib: @@ -611,6 +623,8 @@ WALL: Prerequisite: Hitech # WithProductionOverlay@WELDING: # Sequence: production-welding + Power: + Amount: -40 ^RESEARCH: Inherits: ^Building @@ -638,7 +652,6 @@ WALL: SelectTargetSound: FlareType: Building: - Power: -40 Footprint: _x_ xxx xxx Dimensions: 3,3 Bib: @@ -652,6 +665,8 @@ WALL: Prerequisite: Research WithIdleOverlay@LIGHTS: Sequence: idle-lights + Power: + Amount: -40 ^PALACE: Inherits: ^Building @@ -668,7 +683,6 @@ WALL: Name: Palace Description: Unlocks elite infantry\n Special Ability: Ornithopter Strike Building: - Power: -50 Footprint: xx= xxx Dimensions: 3,2 Bib: @@ -683,13 +697,14 @@ WALL: Range: 4 ProvidesCustomPrerequisite: Prerequisite: Palace + Power: + Amount: -50 SIETCH: Inherits: ^Building Tooltip: Name: Fremen Sietch Building: - Power: 0 Footprint: xx xx Dimensions: 2,2 TerrainTypes: Cliff @@ -703,6 +718,8 @@ SIETCH: -Sellable: -ExternalCapturable: -ExternalCapturableBar: + Power: + Amount: 0 STARPORTC: Inherits: ^STARPORT diff --git a/mods/ra/maps/bomber-john/map.yaml b/mods/ra/maps/bomber-john/map.yaml index 609d8b586b..b48ff058a5 100644 --- a/mods/ra/maps/bomber-john/map.yaml +++ b/mods/ra/maps/bomber-john/map.yaml @@ -39,63 +39,63 @@ Players: Name: Creeps NonCombatant: True Race: allies - Enemies: Multi0,Multi1,Multi2,Multi3,Multi4,Multi5,Multi6,Multi7 + Enemies: Multi0, Multi1, Multi2, Multi3, Multi4, Multi5, Multi6, Multi7 PlayerReference@Multi0: Name: Multi0 Playable: True AllowBots: False LockRace: True Race: soviet - Enemies: Multi1,Multi2,Multi3,Multi4,Multi5,Multi6,Multi7 + Enemies: Multi1, Multi2, Multi3, Multi4, Multi5, Multi6, Multi7 PlayerReference@Multi1: Name: Multi1 Playable: True AllowBots: False LockRace: True Race: soviet - Enemies: Multi0,Multi2,Multi3,Multi4,Multi5,Multi6,Multi7 + Enemies: Multi0, Multi2, Multi3, Multi4, Multi5, Multi6, Multi7 PlayerReference@Multi2: Name: Multi2 Playable: True AllowBots: False LockRace: True Race: soviet - Enemies: Multi0,Multi1,Multi3,Multi4,Multi5,Multi6,Multi7 + Enemies: Multi0, Multi1, Multi3, Multi4, Multi5, Multi6, Multi7 PlayerReference@Multi3: Name: Multi3 Playable: True AllowBots: False LockRace: True Race: soviet - Enemies: Multi0,Multi1,Multi2,Multi4,Multi5,Multi6,Multi7 + Enemies: Multi0, Multi1, Multi2, Multi4, Multi5, Multi6, Multi7 PlayerReference@Multi4: Name: Multi4 Playable: True AllowBots: False LockRace: True Race: soviet - Enemies: Multi0,Multi1,Multi2,Multi3,Multi5,Multi6,Multi7 + Enemies: Multi0, Multi1, Multi2, Multi3, Multi5, Multi6, Multi7 PlayerReference@Multi5: Name: Multi5 Playable: True AllowBots: False LockRace: True Race: soviet - Enemies: Multi0,Multi2,Multi3,Multi4,Multi1,Multi6,Multi7 + Enemies: Multi0, Multi2, Multi3, Multi4, Multi1, Multi6, Multi7 PlayerReference@Multi6: Name: Multi6 Playable: True AllowBots: False LockRace: True Race: soviet - Enemies: Multi0,Multi2,Multi3,Multi4,Multi5,Multi1,Multi7 + Enemies: Multi0, Multi2, Multi3, Multi4, Multi5, Multi1, Multi7 PlayerReference@Multi7: Name: Multi7 Playable: True AllowBots: False LockRace: True Race: soviet - Enemies: Multi0,Multi2,Multi3,Multi4,Multi5,Multi6,Multi1 + Enemies: Multi0, Multi2, Multi3, Multi4, Multi5, Multi6, Multi1 Actors: Actor69: ftur @@ -848,8 +848,6 @@ Rules: Offset: 0,0 Facing: 96 MustBeDestroyed: - Building: - Power: 0 CashTrickler: Period: 150 Amount: 30 @@ -874,6 +872,8 @@ Rules: BeginChargeSound: ironchg1.aud EndChargeSound: ironrdy1.aud Range: 1 + Power: + Amount: 0 MINVV: Building: Adjacent: 99 diff --git a/mods/ra/maps/fort-lonestar/map.yaml b/mods/ra/maps/fort-lonestar/map.yaml index 7bc04b874a..925b4a96a5 100644 --- a/mods/ra/maps/fort-lonestar/map.yaml +++ b/mods/ra/maps/fort-lonestar/map.yaml @@ -39,34 +39,34 @@ Players: Playable: True AllowBots: False LockTeam: True - Allies: Multi1,Multi2,Multi3 + Allies: Multi1, Multi2, Multi3 Enemies: Soviets PlayerReference@Multi1: Name: Multi1 Playable: True AllowBots: False LockTeam: True - Allies: Multi0,Multi2,Multi3 + Allies: Multi0, Multi2, Multi3 Enemies: Soviets PlayerReference@Multi2: Name: Multi2 Playable: True AllowBots: False LockTeam: True - Allies: Multi0,Multi1,Multi3 + Allies: Multi0, Multi1, Multi3 Enemies: Soviets PlayerReference@Multi3: Name: Multi3 Playable: True AllowBots: False LockTeam: True - Allies: Multi0,Multi1,Multi2 + Allies: Multi0, Multi1, Multi2 Enemies: Soviets PlayerReference@Soviets: Name: Soviets Race: soviet ColorRamp: 0,255,128 - Enemies: Multi0,Multi1,Multi2,Multi3 + Enemies: Multi0, Multi1, Multi2, Multi3 Actors: Actor76: t11 @@ -543,8 +543,6 @@ Rules: BARR: Buildable: Owner: allies,soviet - Building: - Power: 0 Health: HP: 1000 Production: @@ -552,14 +550,14 @@ Rules: -Sellable: BaseProvider: Range: 12 + Power: + Amount: 0 FTUR: - Building: - Power: 0 Valued: Cost: 400 + Power: + Amount: 0 PBOX: - Building: - Power: 0 Buildable: Prerequisites: barr,oilb Valued: @@ -568,9 +566,11 @@ Rules: HP: 200 Armor: Type: Heavy + Power: + Amount: 0 HBOX: - Building: - Power: 0 + Power: + Amount: 0 GUN: Buildable: Prerequisites: ~disabled diff --git a/mods/ra/maps/intervention/map.yaml b/mods/ra/maps/intervention/map.yaml index bcc3e8dd43..4a15874dd7 100644 --- a/mods/ra/maps/intervention/map.yaml +++ b/mods/ra/maps/intervention/map.yaml @@ -28,7 +28,7 @@ Options: FragileAlliances: False StartingCash: 2000 ConfigurableStartingUnits: False - Difficulties: Medium,Hard + Difficulties: Medium, Hard Players: PlayerReference@Neutral: @@ -38,10 +38,10 @@ Players: Race: allies PlayerReference@Civilians: Name: Civilians + NonCombatant: True Race: allies ColorRamp: 0,0,0 Allies: Allies - NonCombatant: True PlayerReference@Allies: Name: Allies Playable: True @@ -59,7 +59,7 @@ Players: Name: Soviets Race: soviet ColorRamp: 3,255,127 - Enemies: Civilians,Allies + Enemies: Civilians, Allies Actors: EasyMine: mine @@ -2259,13 +2259,13 @@ Rules: Valued: Cost: 1500 SAM: - Building: - Power: -5 RevealsShroud: Range: 7c0 + Power: + Amount: -5 TSLA: - Building: - Power: -50 + Power: + Amount: -50 ^Vehicles: MustBeDestroyed: ^Tank: diff --git a/mods/ra/maps/koth-athena/map.yaml b/mods/ra/maps/koth-athena/map.yaml index 1305246ce3..7dd203f32a 100644 --- a/mods/ra/maps/koth-athena/map.yaml +++ b/mods/ra/maps/koth-athena/map.yaml @@ -68,7 +68,7 @@ Players: Name: Creeps NonCombatant: True Race: allies - Enemies: Multi0,Multi1,Multi2,Multi3,Multi4,Multi5 + Enemies: Multi0, Multi1, Multi2, Multi3, Multi4, Multi5 Actors: Actor0: oilb @@ -2094,12 +2094,12 @@ Rules: Value: 1000 Buildable: BuildLimit: 1 - Building: - Power: -100 NukePower: ChargeTime: 600 Description: Atom Bomb AllowMultiple: yes + Power: + Amount: -100 MISS: ProximityCapturable: MustBeClear: true diff --git a/mods/ra/maps/pluto/map.yaml b/mods/ra/maps/pluto/map.yaml index 78b94a3d2c..b9abcbcebf 100644 --- a/mods/ra/maps/pluto/map.yaml +++ b/mods/ra/maps/pluto/map.yaml @@ -56,7 +56,7 @@ Players: Name: Creeps NonCombatant: True Race: allies - Enemies: Multi0,Multi1,Multi2,Multi3 + Enemies: Multi0, Multi1, Multi2, Multi3 Actors: Actor0: mine @@ -965,12 +965,12 @@ Rules: Value: 1000 Buildable: BuildLimit: 1 - Building: - Power: -100 NukePower: ChargeTime: 600 Description: Atom Bomb AllowMultiple: yes + Power: + Amount: -100 Sequences: diff --git a/mods/ra/maps/training-camp/map.yaml b/mods/ra/maps/training-camp/map.yaml index d2df90c9d0..2b09f60229 100644 --- a/mods/ra/maps/training-camp/map.yaml +++ b/mods/ra/maps/training-camp/map.yaml @@ -45,56 +45,56 @@ Players: AllowBots: False LockRace: True Race: soviet - Enemies: Multi1,Multi2,Multi3,Multi4,Multi5,Multi6,Multi7 + Enemies: Multi1, Multi2, Multi3, Multi4, Multi5, Multi6, Multi7 PlayerReference@Multi1: Name: Multi1 Playable: True AllowBots: False LockRace: True Race: soviet - Enemies: Multi0,Multi2,Multi3,Multi4,Multi5,Multi6,Multi7 + Enemies: Multi0, Multi2, Multi3, Multi4, Multi5, Multi6, Multi7 PlayerReference@Multi2: Name: Multi2 Playable: True AllowBots: False LockRace: True Race: soviet - Enemies: Multi0,Multi1,Multi3,Multi4,Multi5,Multi6,Multi7 + Enemies: Multi0, Multi1, Multi3, Multi4, Multi5, Multi6, Multi7 PlayerReference@Multi3: Name: Multi3 Playable: True AllowBots: False LockRace: True Race: soviet - Enemies: Multi0,Multi1,Multi2,Multi4,Multi5,Multi6,Multi7 + Enemies: Multi0, Multi1, Multi2, Multi4, Multi5, Multi6, Multi7 PlayerReference@Multi4: Name: Multi4 Playable: True AllowBots: False LockRace: True Race: soviet - Enemies: Multi0,Multi1,Multi2,Multi3,Multi5,Multi6,Multi7 + Enemies: Multi0, Multi1, Multi2, Multi3, Multi5, Multi6, Multi7 PlayerReference@Multi5: Name: Multi5 Playable: True AllowBots: False LockRace: True Race: soviet - Enemies: Multi0,Multi2,Multi3,Multi4,Multi1,Multi6,Multi7 + Enemies: Multi0, Multi2, Multi3, Multi4, Multi1, Multi6, Multi7 PlayerReference@Multi6: Name: Multi6 Playable: True AllowBots: False LockRace: True Race: soviet - Enemies: Multi0,Multi2,Multi3,Multi4,Multi5,Multi1,Multi7 + Enemies: Multi0, Multi2, Multi3, Multi4, Multi5, Multi1, Multi7 PlayerReference@Multi7: Name: Multi7 Playable: True AllowBots: False LockRace: True Race: soviet - Enemies: Multi0,Multi2,Multi3,Multi4,Multi5,Multi6,Multi1 + Enemies: Multi0, Multi2, Multi3, Multi4, Multi5, Multi6, Multi1 Actors: Actor93: barr @@ -825,26 +825,26 @@ Rules: BARR: Buildable: Owner: allies - Building: - Power: 0 Health: HP: 5000 Production: Produces: Building,Infantry BaseProvider: Range: 16 + Power: + Amount: 0 WEAP: Buildable: Owner: allies - Building: - Power: 0 Health: HP: 10000 Valued: Cost: 2000 + Power: + Amount: 0 FTUR: - Building: - Power: 0 + Power: + Amount: 0 SPEN: Buildable: Owner: allies @@ -900,13 +900,13 @@ Rules: Valued: Cost: 200 HPAD: - Building: - Power: 0 Buildable: Owner: soviet Prerequisites: barr Valued: Cost: 200 + Power: + Power: 0 FENC: Buildable: Queue: Building @@ -915,13 +915,13 @@ Rules: Valued: Cost: 10 AFLD: - Building: - Power: 0 Buildable: Owner: soviet Prerequisites: barr Valued: Cost: 200 + Power: + Power: 0 DOG: Buildable: Owner: soviet diff --git a/mods/ra/rules/civilian.yaml b/mods/ra/rules/civilian.yaml index 86748ef365..148769491b 100644 --- a/mods/ra/rules/civilian.yaml +++ b/mods/ra/rules/civilian.yaml @@ -55,7 +55,6 @@ C10: FCOM: Inherits: ^TechBuilding Building: - Power: -200 Footprint: xx xx Dimensions: 2,2 Valued: @@ -69,6 +68,8 @@ FCOM: RevealsShroud: Range: 10c0 Bib: + Power: + Amount: -200 HOSP: Inherits: ^TechBuilding diff --git a/mods/ra/rules/structures.yaml b/mods/ra/rules/structures.yaml index 7656a2388d..5a7a8698d1 100644 --- a/mods/ra/rules/structures.yaml +++ b/mods/ra/rules/structures.yaml @@ -12,7 +12,6 @@ MSLO: BuildLimit: 1 Hotkey: m Building: - Power: -100 Footprint: xx Dimensions: 2,1 Health: @@ -44,6 +43,8 @@ MSLO: RequiresPower: DisabledOverlay: SupportPowerChargeBar: + Power: + Amount: -100 GAP: Inherits: ^Building @@ -58,7 +59,6 @@ GAP: Prerequisites: atek, ~structures.allies, ~techlevel.unrestricted Hotkey: g Building: - Power: -60 Footprint: _ x Dimensions: 1,2 RequiresPower: @@ -78,6 +78,8 @@ GAP: Range: 6c0 IronCurtainable: RenderShroudCircle: + Power: + Amount: -60 SPEN: Inherits: ^Building @@ -96,7 +98,6 @@ SPEN: TargetableBuilding: TargetTypes: Ground, Water, C4, DetonateAttack, SpyInfiltrate Building: - Power: -30 Footprint: xxx xxx xxx Dimensions: 3,3 Adjacent: 8 @@ -132,6 +133,8 @@ SPEN: RepairsUnits: RallyPoint: ProductionBar: + Power: + Amount: -30 SYRD: Inherits: ^Building @@ -150,7 +153,6 @@ SYRD: TargetableBuilding: TargetTypes: Ground, Water, C4, DetonateAttack, SpyInfiltrate Building: - Power: -30 Footprint: xxx xxx xxx Dimensions: 3,3 Adjacent: 8 @@ -186,6 +188,8 @@ SYRD: RepairsUnits: RallyPoint: ProductionBar: + Power: + Amount: -30 IRON: Inherits: ^Building @@ -201,7 +205,6 @@ IRON: Name: Iron Curtain Description: Makes a group of units invulnerable\nfor a short time.\n Special Ability: Invulnerability\n\nMaximum 1 can be built Building: - Power: -200 Footprint: xx Dimensions: 2,1 RequiresPower: @@ -230,6 +233,8 @@ IRON: EndChargeSound: ironrdy1.aud DisplayRadarPing: True SupportPowerChargeBar: + Power: + Amount: -200 PDOX: Inherits: ^Building @@ -245,7 +250,6 @@ PDOX: Name: Chronosphere Description: Teleports a group of units across the\nmap for a short time.\n Special Ability: Chronoshift\n\nMaximum 1 can be built Building: - Power: -200 Footprint: xx xx Dimensions: 2,2 RequiresPower: @@ -274,6 +278,8 @@ PDOX: DisplayRadarPing: True SupportPowerChargeBar: -AcceptsSupplies: + Power: + Amount: -200 TSLA: Inherits: ^Building @@ -288,7 +294,6 @@ TSLA: Name: Tesla Coil Description: Advanced base defense. Requires power\nto operate.\n Strong vs Tanks, Infantry\n Weak vs Aircraft Building: - Power: -150 Footprint: _ x Dimensions: 1,2 RequiresPower: @@ -317,6 +322,8 @@ TSLA: RenderRangeCircle: -AcceptsSupplies: DrawLineToTarget: + Power: + Amount: -150 AGUN: Inherits: ^Building @@ -331,7 +338,6 @@ AGUN: Name: AA Gun Description: Anti-Air base defense. Requires power\nto operate.\n Strong vs Aircraft\n Weak vs Infantry, Tanks Building: - Power: -50 Footprint: _ x Dimensions: 1,2 RequiresPower: @@ -363,6 +369,8 @@ AGUN: RangeCircleType: aa -AcceptsSupplies: DrawLineToTarget: + Power: + Amount: -50 DOME: Inherits: ^Building @@ -377,7 +385,6 @@ DOME: Name: Radar Dome Description: Provides an overview of the battlefield.\nCan detect cloaked units.\n Requires power to operate. Building: - Power: -40 Footprint: xx xx Dimensions: 2,2 TargetableBuilding: @@ -398,6 +405,8 @@ DOME: DetectCloaked: Range: 10 RenderDetectionCircle: + Power: + Amount: -40 PBOX: Inherits: ^Building @@ -405,7 +414,6 @@ PBOX: Name: Pillbox Description: Static defense with a fireport for a\ngarrisoned soldier. Building: - Power: -15 Buildable: Queue: Defense BuildPaletteOrder: 40 @@ -443,6 +451,8 @@ PBOX: RenderRangeCircle: FallbackRange: 6c0 AutoTarget: + Power: + Amount: -15 HBOX: Inherits: ^Building @@ -450,7 +460,6 @@ HBOX: Name: Camo Pillbox Description: Camouflaged static defense with a fireport\nfor a garrisoned soldier. Building: - Power: -15 Buildable: Queue: Defense BuildPaletteOrder: 50 @@ -491,6 +500,8 @@ HBOX: PortOffsets: 384,0,128, 224,-341,128, -224,-341,128, -384,0,128, -224,341,128, 224,341,128 PortYaws: 0, 176, 341, 512, 682, 853 PortCones: 86, 86, 86, 86, 86, 86 + Power: + Amount: -15 GUN: Inherits: ^Building @@ -505,7 +516,6 @@ GUN: Name: Turret Description: Anti-Armor base defense.\n Strong vs Tanks\n Weak vs Infantry, Aircraft Building: - Power: -40 -GivesBuildableArea: Health: HP: 400 @@ -531,6 +541,8 @@ GUN: RenderRangeCircle: -AcceptsSupplies: DrawLineToTarget: + Power: + Amount: -40 FTUR: Inherits: ^Building @@ -545,7 +557,6 @@ FTUR: Name: Flame Tower Description: Anti-Infantry base defense.\n Strong vs Infantry\n Weak vs Aircraft Building: - Power: -20 -GivesBuildableArea: Health: HP: 400 @@ -569,6 +580,8 @@ FTUR: RenderRangeCircle: -AcceptsSupplies: DrawLineToTarget: + Power: + Amount: -20 SAM: Inherits: ^Building @@ -583,7 +596,6 @@ SAM: Name: SAM Site Description: Anti-Air base defense. Requires power\nto operate.\n Strong vs Aircraft\n Weak vs Infantry, Tanks Building: - Power: -40 Footprint: xx Dimensions: 2,1 RequiresPower: @@ -614,6 +626,8 @@ SAM: RangeCircleType: aa -AcceptsSupplies: DrawLineToTarget: + Power: + Amount: -40 ATEK: Inherits: ^Building @@ -630,7 +644,6 @@ ATEK: ProvidesCustomPrerequisite: Prerequisite: techcenter Building: - Power: -200 Footprint: xx xx Dimensions: 2,2 Health: @@ -653,6 +666,8 @@ ATEK: SupportPowerChargeBar: RequiresPower: DisabledOverlay: + Power: + Amount: -200 WEAP: Inherits: ^Building @@ -667,7 +682,6 @@ WEAP: Name: War Factory Description: Produces vehicles. Building: - Power: -30 Footprint: xxx xxx Dimensions: 3,2 Health: @@ -700,11 +714,12 @@ WEAP: PrimaryBuilding: IronCurtainable: ProductionBar: + Power: + Amount: -30 FACT: Inherits: ^Building Building: - Power: 0 Footprint: xxx xxx xxx Dimensions: 3,3 Buildable: @@ -747,6 +762,8 @@ FACT: BaseProvider: Range: 16 WithBuildingPlacedAnimation: + Power: + Amount: 0 PROC: Inherits: ^Building @@ -761,7 +778,6 @@ PROC: Name: Ore Refinery Description: Refines Ore and Gems into credits. Building: - Power: -30 Footprint: _x_ xxx x== Dimensions: 3,3 TargetableBuilding: @@ -793,6 +809,8 @@ PROC: DeadBuildingState: WithIdleOverlay@TOP: Sequence: idle-top + Power: + Amount: -30 SILO: Inherits: ^Building @@ -807,7 +825,6 @@ SILO: Name: Silo Description: Stores excess refined Ore and gems. Building: - Power: -10 -GivesBuildableArea: Health: HP: 300 @@ -824,6 +841,8 @@ SILO: IronCurtainable: -RenderBuilding: -EmitInfantryOnSell: + Power: + Amount: -10 HPAD: Inherits: ^Building @@ -838,7 +857,6 @@ HPAD: Name: Helipad Description: Produces and reloads helicopters. Building: - Power: -10 Footprint: xx xx Dimensions: 2,2 Health: @@ -859,6 +877,8 @@ HPAD: IronCurtainable: ProductionBar: PrimaryBuilding: + Power: + Amount: -10 AFLD: Inherits: ^Building @@ -873,7 +893,6 @@ AFLD: Name: Airfield Description: Produces and reloads aircraft.\n Special Ability: Paratroopers\n Special Ability: Spy Plane Building: - Power: -20 Footprint: xxx xxx Dimensions: 3,2 Health: @@ -920,6 +939,8 @@ AFLD: ProductionBar: SupportPowerChargeBar: PrimaryBuilding: + Power: + Amount: -20 POWR: Inherits: ^Building @@ -936,7 +957,6 @@ POWR: ProvidesCustomPrerequisite: Prerequisite: anypower Building: - Power: 100 Footprint: xx xx Dimensions: 2,2 Health: @@ -948,6 +968,9 @@ POWR: Bib: IronCurtainable: DeadBuildingState: + Power: + Amount: 100 + ScaleWithHealth: True APWR: Inherits: ^Building @@ -964,7 +987,6 @@ APWR: ProvidesCustomPrerequisite: Prerequisite: anypower Building: - Power: 200 Footprint: ___ xxx xxx Dimensions: 3,3 Health: @@ -976,6 +998,9 @@ APWR: Bib: IronCurtainable: DeadBuildingState: + Power: + Amount: 200 + ScaleWithHealth: True STEK: Inherits: ^Building @@ -992,7 +1017,6 @@ STEK: ProvidesCustomPrerequisite: Prerequisite: techcenter Building: - Power: -100 Footprint: xxx xxx Dimensions: 3,2 Health: @@ -1003,6 +1027,8 @@ STEK: Range: 4c0 Bib: IronCurtainable: + Power: + Amount: -100 BARR: Inherits: ^Building @@ -1017,7 +1043,6 @@ BARR: Name: Soviet Barracks Description: Trains infantry. Building: - Power: -20 Footprint: xx xx Dimensions: 2,2 Health: @@ -1041,6 +1066,8 @@ BARR: ProductionBar: ProvidesCustomPrerequisite: Prerequisite: barracks + Power: + Amount: -20 KENN: Inherits: ^Building @@ -1055,7 +1082,6 @@ KENN: Name: Kennel Description: Trains Attack Dogs. Building: - Power: -10 -GivesBuildableArea: Health: HP: 300 @@ -1076,6 +1102,8 @@ KENN: IronCurtainable: ProductionBar: -EmitInfantryOnSell: + Power: + Amount: -10 TENT: Inherits: ^Building @@ -1090,7 +1118,6 @@ TENT: Name: Allied Barracks Description: Trains infantry. Building: - Power: -20 Footprint: xx xx Dimensions: 2,2 Health: @@ -1114,6 +1141,8 @@ TENT: ProductionBar: ProvidesCustomPrerequisite: Prerequisite: barracks + Power: + Amount: -20 FIX: Inherits: ^Building @@ -1128,7 +1157,6 @@ FIX: Name: Service Depot Description: Repairs vehicles for credits. Building: - Power: -30 Footprint: _x_ xxx _x_ Dimensions: 3,3 Health: @@ -1145,6 +1173,8 @@ FIX: RepairsUnits: Interval: 10 WithRepairAnimation: + Power: + Amount: -30 FACF: Inherits: ^Building @@ -1159,7 +1189,6 @@ FACF: Name: Fake Construction Yard Description: Looks like a Construction Yard. Building: - Power: -2 Footprint: xxx xxx xxx Dimensions: 3,3 -GivesBuildableArea: @@ -1173,6 +1202,8 @@ FACF: Fake: IronCurtainable: -EmitInfantryOnSell: + Power: + Amount: -2 WEAF: Inherits: ^Building @@ -1187,7 +1218,6 @@ WEAF: Name: Fake War Factory Description: Looks like a War Factory. Building: - Power: -2 Footprint: xxx xxx Dimensions: 3,2 -GivesBuildableArea: @@ -1202,6 +1232,8 @@ WEAF: Fake: IronCurtainable: -EmitInfantryOnSell: + Power: + Amount: -2 SYRF: Inherits: ^Building @@ -1218,7 +1250,6 @@ SYRF: TargetableBuilding: TargetTypes: Ground, Water Building: - Power: -2 Footprint: xxx xxx xxx Dimensions: 3,3 Adjacent: 8 @@ -1232,6 +1263,8 @@ SYRF: Image: SYRD Fake: -EmitInfantryOnSell: + Power: + Amount: -2 SPEF: Inherits: ^Building @@ -1248,7 +1281,6 @@ SPEF: Name: Fake Sub Pen Description: Looks like a Sub Pen. Building: - Power: -2 Footprint: xxx xxx xxx Dimensions: 3,3 Adjacent: 8 @@ -1262,6 +1294,8 @@ SPEF: Image: SPEN Fake: -EmitInfantryOnSell: + Power: + Amount: -2 DOMF: Inherits: ^Building @@ -1276,7 +1310,6 @@ DOMF: Queue: Defense Prerequisites: ~disabled Building: - Power: -2 Footprint: xx xx Dimensions: 2,2 -GivesBuildableArea: @@ -1289,6 +1322,8 @@ DOMF: Image: DOME Fake: -EmitInfantryOnSell: + Power: + Amount: -2 SBAG: Inherits: ^Wall diff --git a/mods/ts/rules/structures.yaml b/mods/ts/rules/structures.yaml index f98f2af529..de868d100c 100644 --- a/mods/ts/rules/structures.yaml +++ b/mods/ts/rules/structures.yaml @@ -1,7 +1,6 @@ GACNST: Inherits: ^Building Building: - Power: 0 Footprint: xxx xxx xxx BuildSounds: facbld1.aud Dimensions: 3,3 @@ -41,6 +40,8 @@ GACNST: WithIdleOverlay@FRONT: Sequence: idle-front WithBuildingPlacedOverlay: + Power: + Amount: 0 GAPOWR: Inherits: ^Building @@ -57,7 +58,6 @@ GAPOWR: ProvidesCustomPrerequisite: Prerequisite: anypower Building: - Power: 100 Footprint: xx xx Dimensions: 2,2 Health: @@ -70,6 +70,9 @@ GAPOWR: Sequence: idle-lights WithIdleOverlay@PLUG: Sequence: idle-plug + Power: + Amount: 100 + ScaleWithHealth: True GAPILE: Inherits: ^Building @@ -87,7 +90,6 @@ GAPILE: ProvidesCustomPrerequisite: Prerequisite: barracks Building: - Power: -20 Footprint: xx xx Dimensions: 2,2 Health: @@ -110,6 +112,8 @@ GAPILE: Sequence: idle-light WithIdleOverlay@FLAG: Sequence: idle-flag + Power: + Amount: -20 PROC: Inherits: ^Building @@ -125,7 +129,6 @@ PROC: Owner: gdi,nod Hotkey: r Building: - Power: -30 Footprint: xxx xxx x== Dimensions: 3,3 Health: @@ -149,6 +152,8 @@ PROC: Sequence: idle-redlights WithIdleOverlay@BIB: Sequence: bib + Power: + Amount: -30 GAWEAP: Inherits: ^Building @@ -165,7 +170,6 @@ GAWEAP: Owner: gdi Hotkey: w Building: - Power: -30 Footprint: ___ xxx === Dimensions: 3,3 Health: @@ -191,6 +195,8 @@ GAWEAP: Sequence: idle-turbines WithIdleOverlay@BIB: Sequence: bib + Power: + Amount: -30 NAPOWR: Inherits: ^Building @@ -207,7 +213,6 @@ NAPOWR: ProvidesCustomPrerequisite: Prerequisite: anypower Building: - Power: 100 Footprint: xx xx Dimensions: 2,2 Health: @@ -218,6 +223,9 @@ NAPOWR: Range: 4c0 WithIdleOverlay@LIGHTS: Sequence: idle-lights + Power: + Amount: 100 + ScaleWithHealth: True NAAPWR: Inherits: ^Building @@ -235,7 +243,6 @@ NAAPWR: ProvidesCustomPrerequisite: Prerequisite: anypower Building: - Power: 200 Footprint: xxx xxx Dimensions: 2,3 Health: @@ -246,6 +253,9 @@ NAAPWR: Range: 4c0 WithIdleOverlay@LIGHTS: Sequence: idle-lights + Power: + Amount: 200 + ScaleWithHealth: True NAHAND: Inherits: ^Building @@ -263,7 +273,6 @@ NAHAND: ProvidesCustomPrerequisite: Prerequisite: barracks Building: - Power: -20 Footprint: xxx xxx Dimensions: 3,2 Health: @@ -284,6 +293,8 @@ NAHAND: Sequence: idle-lights WithProductionOverlay@LIGHT: Sequence: production-light + Power: + Amount: -20 NAWEAP: Inherits: ^Building @@ -300,7 +311,6 @@ NAWEAP: Owner: nod Hotkey: f Building: - Power: -30 Footprint: ___ xxx === Dimensions: 3,3 Health: @@ -322,6 +332,8 @@ NAWEAP: Sequence: production-lights WithIdleOverlay@BIB: Sequence: bib + Power: + Amount: -30 GASAND: Inherits: ^Wall @@ -555,7 +567,6 @@ GASPOT: Tooltip: Name: Light Tower Building: - Power: -10 Footprint: x Dimensions: 1,1 Health: @@ -569,6 +580,8 @@ GASPOT: Range: 3 WithIdleOverlay@LIGHTS: Sequence: idle-lights + Power: + Amount: -10 GALITE: Inherits: ^Building @@ -582,7 +595,6 @@ GALITE: Tooltip: Name: Light Post Building: - Power: 0 Footprint: x Dimensions: 1,1 RenderBuilding: @@ -594,6 +606,8 @@ GALITE: Type: Wood RevealsShroud: Range: 0c0 + Power: + Amount: 0 # WithIdleOverlay@LIGHTING: # Sequence: lighting @@ -613,7 +627,6 @@ GARADR: ProvidesCustomPrerequisite: Prerequisite: radar Building: - Power: -50 Footprint: ___ xxx xxx Dimensions: 3,3 Health: @@ -634,6 +647,8 @@ GARADR: PauseOnLowPower: yes TargetableBuilding: TargetTypes: Ground, C4, SpyInfiltrate + Power: + Amount: -50 NARADR: Inherits: ^Building @@ -651,7 +666,6 @@ NARADR: ProvidesCustomPrerequisite: Prerequisite: radar Building: - Power: -50 Footprint: xx xx Dimensions: 2,2 Health: @@ -672,6 +686,8 @@ NARADR: PauseOnLowPower: yes TargetableBuilding: TargetTypes: Ground, C4, SpyInfiltrate + Power: + Amount: -50 GATECH: Inherits: ^Building @@ -689,7 +705,6 @@ GATECH: ProvidesCustomPrerequisite: Prerequisite: tech Building: - Power: -150 Footprint: xxx xxx xxx Dimensions: 3,3 Health: @@ -700,6 +715,8 @@ GATECH: Range: 4c0 WithIdleOverlay@LIGHTS: Sequence: idle-lights + Power: + Amount: -150 NATECH: Inherits: ^Building @@ -717,7 +734,6 @@ NATECH: ProvidesCustomPrerequisite: Prerequisite: tech Building: - Power: -150 Footprint: xx xx Dimensions: 2,2 Health: @@ -728,6 +744,8 @@ NATECH: Range: 4c0 WithIdleOverlay@LIGHTS: Sequence: idle-lights + Power: + Amount: -150 GAHPAD: Inherits: ^Building @@ -742,7 +760,6 @@ GAHPAD: Queue: Building Hotkey: i Building: - Power: -10 Footprint: xx xx Dimensions: 2,2 Health: @@ -762,6 +779,8 @@ GAHPAD: Sequence: idle-platform WithIdleOverlay@LIGHTS: Sequence: idle-lights + Power: + Amount: -10 NAHPAD: Inherits: ^Building @@ -776,7 +795,6 @@ NAHPAD: Queue: Building Hotkey: j Building: - Power: -10 Footprint: xx xx Dimensions: 2,2 Health: @@ -796,6 +814,8 @@ NAHPAD: Sequence: idle-platform WithIdleOverlay@LIGHTS: Sequence: idle-lights + Power: + Amount: -10 GADEPT: Inherits: ^Building @@ -811,7 +831,6 @@ GADEPT: Queue: Building Hotkey: v Building: - Power: -30 Footprint: _x_ xxx _x_ Dimensions: 3,3 Health: @@ -831,6 +850,8 @@ GADEPT: Sequence: crane WithRepairOverlay@PLATFORM: Sequence: platform + Power: + Amount: -30 #TODO: Placeholder, replace with Component Tower + Vulcan Upgrade GAVULC: @@ -846,7 +867,6 @@ GAVULC: Owner: gdi Hotkey: v Building: - Power: -20 DisabledOverlay: -GivesBuildableArea: Health: @@ -889,6 +909,8 @@ GAVULC: -RenderBuilding: RenderBuildingWall: Type: wall + Power: + Amount: -20 #TODO: Placeholder, replace with Component Tower + RPG Upgrade GAROCK: @@ -904,7 +926,6 @@ GAROCK: Owner: gdi Hotkey: r Building: - Power: -50 RequiresPower: DisabledOverlay: -GivesBuildableArea: @@ -938,6 +959,8 @@ GAROCK: -RenderBuilding: RenderBuildingWall: Type: wall + Power: + Amount: -50 #TODO: Placeholder, replace with Component Tower + SAM Upgrade GACSAM: @@ -953,7 +976,6 @@ GACSAM: Owner: gdi Hotkey: a Building: - Power: -30 RequiresPower: DisabledOverlay: -GivesBuildableArea: @@ -987,6 +1009,8 @@ GACSAM: -RenderBuilding: RenderBuildingWall: Type: wall + Power: + Amount: -30 NASAM: Inherits: ^Building @@ -1001,7 +1025,6 @@ NASAM: Owner: nod Hotkey: s Building: - Power: -30 RequiresPower: DisabledOverlay: -GivesBuildableArea: @@ -1028,6 +1051,8 @@ NASAM: Weapon: SAMTower LocalOffset: 512,0,512 Recoil: 0 + Power: + Amount: -30 NALASR: Inherits: ^Building @@ -1042,7 +1067,6 @@ NALASR: Owner: nod Hotkey: l Building: - Power: -40 RequiresPower: DisabledOverlay: -GivesBuildableArea: @@ -1066,6 +1090,8 @@ NALASR: RenderVoxels: WithVoxelTurret: AutoTarget: + Power: + Amount: -40 NAOBEL: Inherits: ^Building @@ -1081,7 +1107,6 @@ NAOBEL: Owner: nod Hotkey: o Building: - Power: -150 Footprint: xx xx Dimensions: 2,2 RequiresPower: @@ -1109,6 +1134,8 @@ NAOBEL: Range: 5 WithIdleOverlay@LIGHTS: Sequence: idle-lights + Power: + Amount: -150 ANYPOWER: Tooltip: