diff --git a/OpenRA.Mods.RA/ContainsCrate.cs b/OpenRA.Mods.RA/ContainsCrate.cs new file mode 100644 index 0000000000..694f94ccdb --- /dev/null +++ b/OpenRA.Mods.RA/ContainsCrate.cs @@ -0,0 +1,29 @@ +#region Copyright & License Information +/* + * Copyright 2007-2011 The OpenRA Developers (see AUTHORS) + * This file is part of OpenRA, which is free software. It is made + * available to you under the terms of the GNU General Public License + * as published by the Free Software Foundation. For more information, + * see COPYING. + */ +#endregion + +using OpenRA.FileFormats; +using OpenRA.Traits; + +namespace OpenRA.Mods.RA +{ + public class ContainsCrateInfo : TraitInfo { } + + public class ContainsCrate : INotifyKilled + { + public void Killed(Actor self, AttackInfo e) + { + self.World.AddFrameEndTask(w => w.CreateActor("crate", new TypeDictionary + { + new LocationInit(self.Location), + new OwnerInit(self.World.WorldActor.Owner), + })); + } + } +} diff --git a/OpenRA.Mods.RA/Crates/HealUnitsCrateAction.cs b/OpenRA.Mods.RA/Crates/HealUnitsCrateAction.cs new file mode 100644 index 0000000000..fd96a9ae80 --- /dev/null +++ b/OpenRA.Mods.RA/Crates/HealUnitsCrateAction.cs @@ -0,0 +1,39 @@ +#region Copyright & License Information +/* + * Copyright 2007-2012 The OpenRA Developers (see AUTHORS) + * This file is part of OpenRA, which is free software. It is made + * available to you under the terms of the GNU General Public License + * as published by the Free Software Foundation. For more information, + * see COPYING. + */ +#endregion + +using System.Linq; +using OpenRA.Traits; + +namespace OpenRA.Mods.RA.Crates +{ + class HealUnitsCrateActionInfo : CrateActionInfo + { + public override object Create(ActorInitializer init) { return new HealUnitsCrateAction(init.self, this); } + } + + class HealUnitsCrateAction : CrateAction + { + public HealUnitsCrateAction(Actor self, HealUnitsCrateActionInfo info) + : base(self, info) { } + + public override void Activate(Actor collector) + { + base.Activate(collector); + foreach (var unit in collector.World.Actors.Where(a => a.Owner == collector.Owner)) + { + var health = unit.TraitOrDefault(); + if (health != null && !health.IsDead) + { + health.InflictDamage(unit, unit, -(health.MaxHP - health.HP), null, true); + } + } + } + } +} diff --git a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj index 9394897ea0..cabb716c63 100644 --- a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj +++ b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj @@ -172,6 +172,7 @@ + @@ -181,6 +182,7 @@ + diff --git a/mods/ra/maps/allies-02/map.bin b/mods/ra/maps/allies-02/map.bin index 7b3ab755e7..88a1322c14 100644 Binary files a/mods/ra/maps/allies-02/map.bin and b/mods/ra/maps/allies-02/map.bin differ diff --git a/mods/ra/maps/allies-02/map.yaml b/mods/ra/maps/allies-02/map.yaml index f71c20405f..807421f734 100644 --- a/mods/ra/maps/allies-02/map.yaml +++ b/mods/ra/maps/allies-02/map.yaml @@ -178,8 +178,8 @@ Actors: Actor42: t02 Location: 80,78 Owner: Neutral - Actor43: t07 - Location: 78,95 + Actor43: t02 + Location: 79,102 Owner: Neutral Actor132: fenc Location: 100,100 @@ -2029,6 +2029,15 @@ Actors: Actor634: 3tnk Location: 37,65 Owner: Soviets + Actor55: wood + Location: 79,94 + Owner: Neutral + Actor168: wood + Location: 79,95 + Owner: Neutral + Actor172: wood + Location: 79,96 + Owner: Neutral Smudges: @@ -2048,6 +2057,8 @@ Rules: E7: AutoTarget: InitialStance: ReturnFire + V01: + ContainsCrate: TRAN: -Selectable: Buildable: @@ -2151,6 +2162,41 @@ Rules: FTRK: Buildable: Owner: None + CRATE: + GiveCashCrateAction: + SelectionShares: 0 + LevelUpCrateAction: + SelectionShares: 0 + ExplodeCrateAction@fire: + SelectionShares: 0 + ExplodeCrateAction@boom: + SelectionShares: 0 + ExplodeCrateAction@nuke: + SelectionShares: 0 + HideMapCrateAction: + SelectionShares: 0 + HealUnitsCrateAction: + SelectionShares: 10000 + RevealMapCrateAction: + SelectionShares: 0 + SupportPowerCrateAction@parabombs: + SelectionShares: 0 + GiveMcvCrateAction: + SelectionShares: 0 + GiveUnitCrateAction@jeep: + SelectionShares: 0 + GiveUnitCrateAction@arty: + SelectionShares: 0 + GiveUnitCrateAction@v2rl: + SelectionShares: 0 + GiveUnitCrateAction@1tnk: + SelectionShares: 0 + GiveUnitCrateAction@2tnk: + SelectionShares: 0 + GiveUnitCrateAction@3tnk: + SelectionShares: 0 + GiveUnitCrateAction@4tnk: + SelectionShares: 0 Sequences: diff --git a/mods/ra/rules/system.yaml b/mods/ra/rules/system.yaml index e1f6458436..09b7cb8e3c 100644 --- a/mods/ra/rules/system.yaml +++ b/mods/ra/rules/system.yaml @@ -355,6 +355,9 @@ CRATE: HideMapCrateAction: SelectionShares: 5 Effect: hide-map + HealUnitsCrateAction: + Notification: heal2.aud + SelectionShares: 2 RevealMapCrateAction: SelectionShares: 1 Effect: reveal-map