diff --git a/OpenRA.Mods.RA/Mine.cs b/OpenRA.Mods.RA/Mine.cs index 5e47506726..d167591a8c 100644 --- a/OpenRA.Mods.RA/Mine.cs +++ b/OpenRA.Mods.RA/Mine.cs @@ -11,6 +11,7 @@ using System.Collections.Generic; using System.Linq; using OpenRA.Mods.RA.Activities; +using OpenRA.Mods.RA.Move; using OpenRA.Traits; using OpenRA.FileFormats; @@ -19,9 +20,9 @@ namespace OpenRA.Mods.RA class MineInfo : ITraitInfo { public readonly string[] CrushClasses = { }; - [WeaponReference] - public readonly string Weapon = "ATMine"; + [WeaponReference] public readonly string Weapon = "ATMine"; public readonly bool AvoidFriendly = true; + public readonly string[] DetonateClasses = { }; public object Create(ActorInitializer init) { return new Mine(init, this); } } @@ -30,8 +31,7 @@ namespace OpenRA.Mods.RA { readonly Actor self; readonly MineInfo info; - [Sync] - readonly int2 location; + [Sync] readonly int2 location; public Mine(ActorInitializer init, MineInfo info) { @@ -47,12 +47,14 @@ namespace OpenRA.Mods.RA if (crusher.HasTrait() || self.Owner.Stances[crusher.Owner] == Stance.Ally) return; - var info = self.Info.Traits.Get(); + var mobile = crusher.TraitOrDefault(); + if (mobile != null && !info.DetonateClasses.Intersect(mobile.Info.Crushes).Any()) + return; + Combat.DoExplosion(self, info.Weapon, crusher.CenterLocation, 0); self.QueueActivity(new RemoveSelf()); } - // TODO: Re-implement friendly-mine avoidance public bool CrushableBy(string[] crushClasses, Player owner) { return info.CrushClasses.Intersect(crushClasses).Any(); diff --git a/mods/ra/rules/defaults.yaml b/mods/ra/rules/defaults.yaml index 41b032f932..d104100499 100644 --- a/mods/ra/rules/defaults.yaml +++ b/mods/ra/rules/defaults.yaml @@ -1,7 +1,7 @@ ^Vehicle: AppearsOnRadar: Mobile: - Crushes: atmine, crate + Crushes: atmine, crate, apmine TerrainSpeeds: Clear: 80 Rough: 40 @@ -36,7 +36,7 @@ ^Tank: AppearsOnRadar: Mobile: - Crushes: wall, atmine, crate + Crushes: wall, atmine, crate, apmine TerrainSpeeds: Clear: 80 Rough: 70 diff --git a/mods/ra/rules/system.yaml b/mods/ra/rules/system.yaml index 6af175c3ab..269a9e2054 100644 --- a/mods/ra/rules/system.yaml +++ b/mods/ra/rules/system.yaml @@ -240,7 +240,8 @@ World: MINP: Mine: Weapon: APMine - CrushClasses: apmine + CrushClasses: apmine,atmine + DetonateClasses: apmine AvoidFriendly: yes Health: HP: 1 @@ -255,7 +256,8 @@ MINP: MINV: Mine: Weapon: ATMine - CrushClasses: atmine + CrushClasses: atmine,apmine + DetonateClasses: atmine AvoidFriendly: yes Health: HP: 1