diff --git a/OpenRA.Mods.Cnc/RenderGunboat.cs b/OpenRA.Mods.Cnc/RenderGunboat.cs index c11c5ab13e..708d29a405 100644 --- a/OpenRA.Mods.Cnc/RenderGunboat.cs +++ b/OpenRA.Mods.Cnc/RenderGunboat.cs @@ -9,6 +9,7 @@ #endregion using System; +using System.Linq; using OpenRA.Graphics; using OpenRA.Traits; @@ -26,7 +27,7 @@ namespace OpenRA.Mods.RA.Render string lastDamage = ""; public RenderGunboat(Actor self) - : base(self, () => self.HasTrait() ? self.Trait().turretFacing : 0) + : base(self, () => self.HasTrait() ? self.TraitsImplementing().First().turretFacing : 0) { facing = self.Trait(); anim.Play("left"); diff --git a/OpenRA.Mods.RA/AI/AttackOrFleeFuzzy.cs b/OpenRA.Mods.RA/AI/AttackOrFleeFuzzy.cs index 4aabf6d32f..3f6786bb5c 100644 --- a/OpenRA.Mods.RA/AI/AttackOrFleeFuzzy.cs +++ b/OpenRA.Mods.RA/AI/AttackOrFleeFuzzy.cs @@ -200,9 +200,10 @@ namespace OpenRA.Mods.RA.AI return RelativeValue(own, enemy, 100, SumOfValues, (Actor a) => { int sumOfDamage = 0; - foreach (var weap in a.Trait().Weapons) - if (weap.Info.Warheads[0] != null) - sumOfDamage += weap.Info.Warheads[0].Damage; + var arms = a.TraitsImplementing(); + foreach (var arm in arms) + if (arm.Weapon.Warheads[0] != null) + sumOfDamage += arm.Weapon.Warheads[0].Damage; return sumOfDamage; }); } diff --git a/OpenRA.Mods.RA/AI/HackyAI.cs b/OpenRA.Mods.RA/AI/HackyAI.cs index f2b6cfe53b..75b85cad2f 100644 --- a/OpenRA.Mods.RA/AI/HackyAI.cs +++ b/OpenRA.Mods.RA/AI/HackyAI.cs @@ -230,12 +230,13 @@ namespace OpenRA.Mods.RA.AI if (!target.HasTrait>() && !target.HasTrait()) return false; - foreach (var weap in a.Trait().Weapons) + var arms = a.TraitsImplementing(); + foreach (var arm in arms) if (target.HasTrait>() && - weap.Info.ValidTargets.Intersect(target.Trait>().TargetTypes) != null) + arm.Weapon.ValidTargets.Intersect(target.Trait>().TargetTypes) != null) return true; else if (target.HasTrait() && - weap.Info.ValidTargets.Intersect(target.Trait().TargetTypes) != null) + arm.Weapon.ValidTargets.Intersect(target.Trait().TargetTypes) != null) return true; return false; } @@ -253,12 +254,15 @@ namespace OpenRA.Mods.RA.AI foreach (var unit in units) if (unit != null && unit.HasTrait() && !unit.HasTrait() && !unit.IsDisabled()) - foreach (var weap in unit.Trait().Weapons) - if (weap.Info.ValidTargets.Contains("Air")) + { + var arms = unit.TraitsImplementing(); + foreach (var a in arms) + if (a.Weapon.ValidTargets.Contains("Air")) { missileUnitsCount++; break; } + } return missileUnitsCount; } diff --git a/OpenRA.Mods.RA/Armament.cs b/OpenRA.Mods.RA/Armament.cs new file mode 100755 index 0000000000..a6d9f168df --- /dev/null +++ b/OpenRA.Mods.RA/Armament.cs @@ -0,0 +1,198 @@ +#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 System; +using System.Collections.Generic; +using System.Linq; +using OpenRA.FileFormats; +using OpenRA.GameRules; +using OpenRA.Mods.RA.Render; +using OpenRA.Traits; + +namespace OpenRA.Mods.RA +{ + public class Barrel + { + public PVecInt TurretSpaceOffset; // position in turret space + public PVecInt ScreenSpaceOffset; // screen-space hack to make things line up good. + public int Facing; // deviation from turret facing + } + + public class ArmamentInfo : ITraitInfo, Requires + { + [WeaponReference] + [Desc("Has to be defined here and in weapons.yaml.")] + public readonly string Weapon = null; + public readonly string Turret = "primary"; + public readonly int Recoil = 0; + public readonly int FireDelay = 0; + + public readonly float RecoilRecovery = 0.2f; + public readonly int[] LocalOffset = { }; + + public object Create(ActorInitializer init) { return new Armament(init.self, this); } + } + + public class Armament : ITick + { + public readonly ArmamentInfo Info; + public readonly WeaponInfo Weapon; + public readonly Barrel[] Barrels; + Lazy Turret; + + public float Recoil { get; private set; } + public int FireDelay { get; private set; } + public int Burst { get; private set; } + + public Armament(Actor self, ArmamentInfo info) + { + Info = info; + + // We can't soft-depend on TraitInfo, so we have to wait + // until runtime to cache this + Turret = Lazy.New(() => self.TraitsImplementing().FirstOrDefault(t => t.info.Turret == info.Turret)); + + Weapon = Rules.Weapons[info.Weapon.ToLowerInvariant()]; + Burst = Weapon.Burst; + + var barrels = new List(); + for (var i = 0; i < info.LocalOffset.Length / 5; i++) + barrels.Add(new Barrel + { + TurretSpaceOffset = new PVecInt(info.LocalOffset[5 * i], info.LocalOffset[5 * i + 1]), + ScreenSpaceOffset = new PVecInt(info.LocalOffset[5 * i + 2], info.LocalOffset[5 * i + 3]), + Facing = info.LocalOffset[5 * i + 4], + }); + + // if no barrels specified, the default is "turret position; turret facing". + if (barrels.Count == 0) + barrels.Add(new Barrel { TurretSpaceOffset = PVecInt.Zero, ScreenSpaceOffset = PVecInt.Zero, Facing = 0 }); + + Barrels = barrels.ToArray(); + } + + public void Tick(Actor self) + { + if (FireDelay > 0) + --FireDelay; + Recoil = Math.Max(0f, Recoil - Info.RecoilRecovery); + } + + public void CheckFire(Actor self, AttackBase attack, IMove move, IFacing facing, Target target) + { + if (FireDelay > 0) return; + + var limitedAmmo = self.TraitOrDefault(); + if (limitedAmmo != null && !limitedAmmo.HasAmmo()) + return; + + if (!Combat.IsInRange(self.CenterLocation, Weapon.Range, target)) return; + if (Combat.IsInRange(self.CenterLocation, Weapon.MinRange, target)) return; + if (!IsValidAgainst(self.World, target)) return; + + var barrel = Barrels[Burst % Barrels.Length]; + var destMove = target.IsActor ? target.Actor.TraitOrDefault() : null; + + var args = new ProjectileArgs + { + weapon = Weapon, + firedBy = self, + target = target, + + src = (self.CenterLocation + (PVecInt)MuzzlePxPosition(self, facing, barrel).ToInt2()), + srcAltitude = move != null ? move.Altitude : 0, + dest = target.CenterLocation, + destAltitude = destMove != null ? destMove.Altitude : 0, + + facing = barrel.Facing + + (Turret.Value != null ? Turret.Value.turretFacing : + facing != null ? facing.Facing : Util.GetFacing(target.CenterLocation - self.CenterLocation, 0)), + + firepowerModifier = self.TraitsImplementing() + .Select(a => a.GetFirepowerModifier()) + .Product() + }; + + attack.ScheduleDelayedAction(Info.FireDelay, () => + { + if (args.weapon.Projectile != null) + { + var projectile = args.weapon.Projectile.Create(args); + if (projectile != null) + self.World.Add(projectile); + + if (args.weapon.Report != null && args.weapon.Report.Any()) + Sound.Play(args.weapon.Report.Random(self.World.SharedRandom) + ".aud", self.CenterLocation); + } + }); + + foreach (var na in self.TraitsImplementing()) + na.Attacking(self, target); + + Recoil = Info.Recoil; + + if (--Burst > 0) + FireDelay = Weapon.BurstDelay; + else + { + FireDelay = Weapon.ROF; + Burst = Weapon.Burst; + } + } + + public bool IsValidAgainst(World world, Target target) + { + if (target.IsActor) + return Combat.WeaponValidForTarget(Weapon, target.Actor); + else + return Combat.WeaponValidForTarget(Weapon, world, target.CenterLocation.ToCPos()); + } + + public bool IsReloading { get { return FireDelay > 0; } } + + PVecFloat GetUnitspaceBarrelOffset(Actor self, IFacing facing, Barrel b) + { + if (Turret.Value == null && facing == null) + return PVecFloat.Zero; + + var turretFacing = Turret.Value != null ? Turret.Value.turretFacing : facing.Facing; + return (PVecFloat)Util.RotateVectorByFacing(b.TurretSpaceOffset.ToFloat2(), turretFacing, .7f); + } + + public PVecFloat MuzzlePxPosition(Actor self, IFacing facing, Barrel b) + { + PVecFloat pos = b.ScreenSpaceOffset; + + // local facing offset doesn't make sense for actors that don't rotate + if (Turret.Value == null && facing == null) + return pos; + + if (Turret.Value != null) + pos += Turret.Value.PxPosition(self, facing); + + // Add local unitspace/turretspace offset + var f = Turret.Value != null ? Turret.Value.turretFacing : facing.Facing; + + // This is going away, so no point adding unnecessary usings + var ru = self.TraitOrDefault(); + var numDirs = (ru != null) ? ru.anim.CurrentSequence.Facings : 8; + var quantizedFacing = Util.QuantizeFacing(f, numDirs) * (256 / numDirs); + + pos += (PVecFloat)Util.RotateVectorByFacing(b.TurretSpaceOffset.ToFloat2(), quantizedFacing, .7f); + return pos; + } + + public PVecFloat RecoilPxOffset(Actor self, int facing) + { + var localRecoil = new float2(0, Recoil); + return (PVecFloat)Util.RotateVectorByFacing(localRecoil, facing, .7f); + } + } +} diff --git a/OpenRA.Mods.RA/Attack/AttackBase.cs b/OpenRA.Mods.RA/Attack/AttackBase.cs index 399f5af28c..2b47bd84ea 100644 --- a/OpenRA.Mods.RA/Attack/AttackBase.cs +++ b/OpenRA.Mods.RA/Attack/AttackBase.cs @@ -19,70 +19,34 @@ namespace OpenRA.Mods.RA { public abstract class AttackBaseInfo : ITraitInfo { - [WeaponReference] - [Desc("Has to be defined here and in weapons.yaml.")] - public readonly string PrimaryWeapon = null; - [WeaponReference] - public readonly string SecondaryWeapon = null; - public readonly int PrimaryRecoil = 0; - public readonly int SecondaryRecoil = 0; - public readonly float PrimaryRecoilRecovery = 0.2f; - public readonly float SecondaryRecoilRecovery = 0.2f; - public readonly int[] PrimaryLocalOffset = { }; - public readonly int[] SecondaryLocalOffset = { }; - public readonly int[] PrimaryOffset = { 0, 0 }; - public readonly int[] SecondaryOffset = null; - public readonly int FireDelay = 0; - - public readonly bool AlignIdleTurrets = false; public readonly bool CanAttackGround = true; public readonly int MinimumScanTimeInterval = 30; public readonly int MaximumScanTimeInterval = 60; public abstract object Create(ActorInitializer init); - - public float GetMaximumRange() - { - var priRange = PrimaryWeapon != null ? Rules.Weapons[PrimaryWeapon.ToLowerInvariant()].Range : 0; - var secRange = SecondaryWeapon != null ? Rules.Weapons[SecondaryWeapon.ToLowerInvariant()].Range : 0; - - return Math.Max(priRange, secRange); - } } public abstract class AttackBase : IIssueOrder, IResolveOrder, ITick, IExplodeModifier, IOrderVoice, ISync { [Sync] public bool IsAttacking { get; internal set; } - public List Weapons = new List(); - public List Turrets = new List(); - readonly Actor self; + Lazy> armaments; + protected IEnumerable Armaments { get { return armaments.Value; } } + public AttackBase(Actor self) { this.self = self; - var info = self.Info.Traits.Get(); - - Turrets.Add(new Turret(info.PrimaryOffset, info.PrimaryRecoilRecovery)); - if (info.SecondaryOffset != null) - Turrets.Add(new Turret(info.SecondaryOffset, info.SecondaryRecoilRecovery)); - - if (info.PrimaryWeapon != null) - Weapons.Add(new Weapon(info.PrimaryWeapon, - Turrets[0], info.PrimaryLocalOffset, info.PrimaryRecoil)); - - if (info.SecondaryWeapon != null) - Weapons.Add(new Weapon(info.SecondaryWeapon, - info.SecondaryOffset != null ? Turrets[1] : Turrets[0], info.SecondaryLocalOffset, info.SecondaryRecoil)); + armaments = Lazy.New(() => self.TraitsImplementing()); } protected virtual bool CanAttack(Actor self, Target target) { if (!self.IsInWorld) return false; if (!target.IsValid) return false; - if (Weapons.All(w => w.IsReloading)) return false; + if (Armaments.All(a => a.IsReloading)) return false; if (self.IsDisabled()) return false; if (target.IsActor && target.Actor.HasTrait() && @@ -94,15 +58,12 @@ namespace OpenRA.Mods.RA public bool ShouldExplode(Actor self) { return !IsReloading(); } - public bool IsReloading() { return Weapons.Any(w => w.IsReloading); } + public bool IsReloading() { return Armaments.Any(a => a.IsReloading); } List> delayedActions = new List>(); public virtual void Tick(Actor self) { - foreach (var w in Weapons) - w.Tick(); - for (var i = 0; i < delayedActions.Count; i++) { var x = delayedActions[i]; @@ -127,20 +88,20 @@ namespace OpenRA.Mods.RA var move = self.TraitOrDefault(); var facing = self.TraitOrDefault(); - foreach (var w in Weapons) - w.CheckFire(self, this, move, facing, target); + foreach (var a in Armaments) + a.CheckFire(self, this, move, facing, target); } - public virtual int FireDelay( Actor self, Target target, AttackBaseInfo info ) - { - return info.FireDelay; - } - - bool IsHeal { get { return Weapons[ 0 ].Info.Warheads[ 0 ].Damage < 0; } } - public IEnumerable Orders { - get { yield return new AttackOrderTargeter( "Attack", 6, IsHeal ); } + get + { + if (Armaments.Count() == 0) + yield break; + + bool isHeal = Armaments.First().Weapon.Warheads[0].Damage < 0; + yield return new AttackOrderTargeter("Attack", 6, isHeal); + } } public Order IssueOrder( Actor self, IOrderTargeter order, Target target, bool queued ) @@ -163,12 +124,6 @@ namespace OpenRA.Mods.RA self.SetTargetLine(target, Color.Red); AttackTarget(target, order.Queued, order.OrderString == "Attack"); } - else - { - /* hack */ - if (self.HasTrait() && self.Info.Traits.Get().AlignIdleTurrets) - self.Trait().desiredFacing = null; - } } public string VoicePhraseForOrder(Actor self, Order order) @@ -178,10 +133,10 @@ namespace OpenRA.Mods.RA public abstract Activity GetAttackActivity(Actor self, Target newTarget, bool allowMove); - public bool HasAnyValidWeapons(Target t) { return Weapons.Any(w => w.IsValidAgainst(self.World, t)); } - public float GetMaximumRange() { return Weapons.Max(w => w.Info.Range); } + public bool HasAnyValidWeapons(Target t) { return Armaments.Any(a => a.IsValidAgainst(self.World, t)); } + public float GetMaximumRange() { return Armaments.Select(a => a.Weapon.Range).Aggregate(0f, Math.Max); } - public Weapon ChooseWeaponForTarget(Target t) { return Weapons.FirstOrDefault(w => w.IsValidAgainst(self.World, t)); } + public Armament ChooseArmamentForTarget(Target t) { return Armaments.FirstOrDefault(a => a.IsValidAgainst(self.World, t)); } public void AttackTarget( Target target, bool queued, bool allowMove ) { diff --git a/OpenRA.Mods.RA/Attack/AttackFrontal.cs b/OpenRA.Mods.RA/Attack/AttackFrontal.cs index 95a6876625..dfcd4bb2e5 100644 --- a/OpenRA.Mods.RA/Attack/AttackFrontal.cs +++ b/OpenRA.Mods.RA/Attack/AttackFrontal.cs @@ -42,10 +42,10 @@ namespace OpenRA.Mods.RA public override Activity GetAttackActivity(Actor self, Target newTarget, bool allowMove) { - var weapon = ChooseWeaponForTarget(newTarget); - if( weapon == null ) + var weapon = ChooseArmamentForTarget(newTarget); + if (weapon == null) return null; - return new Activities.Attack(newTarget, Math.Max(0, (int)weapon.Info.Range), allowMove); + return new Activities.Attack(newTarget, Math.Max(0, (int)weapon.Weapon.Range), allowMove); } } } diff --git a/OpenRA.Mods.RA/Attack/AttackLeap.cs b/OpenRA.Mods.RA/Attack/AttackLeap.cs index c5c86db63a..b9acc3a097 100644 --- a/OpenRA.Mods.RA/Attack/AttackLeap.cs +++ b/OpenRA.Mods.RA/Attack/AttackLeap.cs @@ -9,6 +9,7 @@ #endregion using System; +using System.Linq; using OpenRA.Mods.RA.Activities; using OpenRA.Traits; @@ -28,10 +29,15 @@ namespace OpenRA.Mods.RA public override void DoAttack(Actor self, Target target) { - if( !CanAttack( self, target ) ) return; + if (!CanAttack(self, target)) + return; - var weapon = Weapons[0].Info; - if( !Combat.IsInRange( self.CenterLocation, weapon.Range, target ) ) return; + var a = ChooseArmamentForTarget(target); + if (a == null) + return; + + if (!Combat.IsInRange(self.CenterLocation, a.Weapon.Range, target)) + return; self.CancelActivity(); self.QueueActivity(new Leap(self, target)); @@ -39,10 +45,10 @@ namespace OpenRA.Mods.RA public override Activity GetAttackActivity(Actor self, Target newTarget, bool allowMove) { - var weapon = ChooseWeaponForTarget(newTarget); - if( weapon == null ) + var a = ChooseArmamentForTarget(newTarget); + if (a == null) return null; - return new Activities.Attack(newTarget, Math.Max(0, (int)weapon.Info.Range), allowMove); + return new Activities.Attack(newTarget, Math.Max(0, (int)a.Weapon.Range), allowMove); } } } diff --git a/OpenRA.Mods.RA/Attack/AttackLoyalty.cs b/OpenRA.Mods.RA/Attack/AttackLoyalty.cs index 0b371cb4fa..3559fe52fb 100644 --- a/OpenRA.Mods.RA/Attack/AttackLoyalty.cs +++ b/OpenRA.Mods.RA/Attack/AttackLoyalty.cs @@ -9,6 +9,7 @@ #endregion using System; +using System.Linq; using OpenRA.Traits; using OpenRA.Mods.RA.Activities; @@ -26,15 +27,19 @@ namespace OpenRA.Mods.RA public override void DoAttack(Actor self, Target target) { - if (!CanAttack (self, target)) return; + if (!CanAttack(self, target)) return; - var weapon = Weapons[0].Info; - if (!Combat.IsInRange(self.CenterLocation, weapon.Range, target)) return; + var arm = Armaments.FirstOrDefault(); + if (arm == null) + return; + + if (!Combat.IsInRange(self.CenterLocation, arm.Weapon.Range, target)) + return; var move = self.TraitOrDefault(); var facing = self.TraitOrDefault(); - foreach (var w in Weapons) - w.CheckFire(self, this, move, facing, target); + foreach (var a in Armaments) + a.CheckFire(self, this, move, facing, target); if (target.Actor != null) target.Actor.ChangeOwner(self.Owner); diff --git a/OpenRA.Mods.RA/Attack/AttackMedic.cs b/OpenRA.Mods.RA/Attack/AttackMedic.cs index 6261d6745c..e8399eaaf2 100644 --- a/OpenRA.Mods.RA/Attack/AttackMedic.cs +++ b/OpenRA.Mods.RA/Attack/AttackMedic.cs @@ -29,10 +29,10 @@ namespace OpenRA.Mods.RA public override Activity GetAttackActivity(Actor self, Target newTarget, bool allowMove) { - var weapon = ChooseWeaponForTarget(newTarget); - if( weapon == null ) + var weapon = ChooseArmamentForTarget(newTarget); + if (weapon == null) return null; - return new Activities.Heal(newTarget, Math.Max(0, (int)weapon.Info.Range), allowMove); + return new Activities.Heal(newTarget, Math.Max(0, (int)weapon.Weapon.Range), allowMove); } } } diff --git a/OpenRA.Mods.RA/Attack/AttackPopupTurreted.cs b/OpenRA.Mods.RA/Attack/AttackPopupTurreted.cs index a9181b5005..b0a993d610 100644 --- a/OpenRA.Mods.RA/Attack/AttackPopupTurreted.cs +++ b/OpenRA.Mods.RA/Attack/AttackPopupTurreted.cs @@ -8,6 +8,7 @@ */ #endregion +using System.Linq; using OpenRA.GameRules; using OpenRA.Mods.RA.Buildings; using OpenRA.Mods.RA.Render; @@ -30,11 +31,13 @@ namespace OpenRA.Mods.RA AttackPopupTurretedInfo Info; int IdleTicks = 0; PopupState State = PopupState.Open; + Turreted turret; public AttackPopupTurreted(ActorInitializer init, AttackPopupTurretedInfo info) : base(init.self) { Info = info; buildComplete = init.Contains(); + turret = turrets.FirstOrDefault(); } protected override bool CanAttack( Actor self, Target target ) diff --git a/OpenRA.Mods.RA/Attack/AttackTurreted.cs b/OpenRA.Mods.RA/Attack/AttackTurreted.cs index 3a16af2d93..24d35c868d 100644 --- a/OpenRA.Mods.RA/Attack/AttackTurreted.cs +++ b/OpenRA.Mods.RA/Attack/AttackTurreted.cs @@ -9,6 +9,7 @@ #endregion using System; +using System.Collections.Generic; using System.Linq; using OpenRA.Mods.RA.Activities; using OpenRA.Mods.RA.Buildings; @@ -25,12 +26,12 @@ namespace OpenRA.Mods.RA class AttackTurreted : AttackBase, INotifyBuildComplete, ISync { protected Target target; - protected Turreted turret; + protected IEnumerable turrets; [Sync] protected bool buildComplete; public AttackTurreted(Actor self) : base(self) { - turret = self.Trait(); + turrets = self.TraitsImplementing(); } protected override bool CanAttack( Actor self, Target target ) @@ -39,7 +40,12 @@ namespace OpenRA.Mods.RA return false; if (!target.IsValid) return false; - if (!turret.FaceTarget(self, target)) return false; + + bool canAttack = false; + foreach (var t in turrets) + if (t.FaceTarget(self, target)) + canAttack = true; + if (!canAttack) return false; return base.CanAttack( self, target ); } @@ -85,7 +91,7 @@ namespace OpenRA.Mods.RA var attack = self.Trait(); const int RangeTolerance = 1; /* how far inside our maximum range we should try to sit */ - var weapon = attack.ChooseWeaponForTarget(target); + var weapon = attack.ChooseArmamentForTarget(target); if (weapon != null) { @@ -93,7 +99,7 @@ namespace OpenRA.Mods.RA if (allowMove && self.HasTrait() && !self.Info.Traits.Get().OnRails) return Util.SequenceActivities( - new Follow( target, Math.Max( 0, (int)weapon.Info.Range - RangeTolerance ) ), + new Follow( target, Math.Max( 0, (int)weapon.Weapon.Range - RangeTolerance ) ), this ); } diff --git a/OpenRA.Mods.RA/Combat.cs b/OpenRA.Mods.RA/Combat.cs index b21034c93b..9194791857 100755 --- a/OpenRA.Mods.RA/Combat.cs +++ b/OpenRA.Mods.RA/Combat.cs @@ -208,48 +208,6 @@ namespace OpenRA.Mods.RA return false; } - static PVecFloat GetRecoil(Actor self, float recoil) - { - if (!self.HasTrait()) - return PVecFloat.Zero; - - var facing = self.Trait().turretFacing; - var localRecoil = new float2(0, recoil); // vector in turret-space. - - return (PVecFloat)Util.RotateVectorByFacing(localRecoil, facing, .7f); - } - - public static PVecFloat GetTurretPosition(Actor self, IFacing facing, Turret turret) - { - if (facing == null) return turret.ScreenSpacePosition; /* things that don't have a rotating base don't need the turrets repositioned */ - - var ru = self.TraitOrDefault(); - var numDirs = (ru != null) ? ru.anim.CurrentSequence.Facings : 8; - var bodyFacing = facing.Facing; - var quantizedFacing = Util.QuantizeFacing(bodyFacing, numDirs) * (256 / numDirs); - - return (PVecFloat)Util.RotateVectorByFacing(turret.UnitSpacePosition.ToFloat2(), quantizedFacing, .7f) - + GetRecoil(self, turret.Recoil) - + (PVecFloat)turret.ScreenSpacePosition.ToFloat2(); - } - - static PVecFloat GetUnitspaceBarrelOffset(Actor self, IFacing facing, Turret turret, Barrel barrel) - { - var turreted = self.TraitOrDefault(); - if (turreted == null && facing == null) - return PVecFloat.Zero; - - var turretFacing = turreted != null ? turreted.turretFacing : facing.Facing; - return (PVecFloat)Util.RotateVectorByFacing(barrel.TurretSpaceOffset.ToFloat2(), turretFacing, .7f); - } - - // gets the screen-space position of a barrel. - public static PVecFloat GetBarrelPosition(Actor self, IFacing facing, Turret turret, Barrel barrel) - { - return GetTurretPosition(self, facing, turret) + barrel.ScreenSpaceOffset - + GetUnitspaceBarrelOffset(self, facing, turret, barrel); - } - public static bool IsInRange( PPos attackOrigin, float range, Actor target ) { var rsq = range * range * Game.CellSize * Game.CellSize; diff --git a/OpenRA.Mods.RA/Effects/Contrail.cs b/OpenRA.Mods.RA/Effects/Contrail.cs index 95de6f5b33..046d5d5ffc 100755 --- a/OpenRA.Mods.RA/Effects/Contrail.cs +++ b/OpenRA.Mods.RA/Effects/Contrail.cs @@ -45,7 +45,7 @@ namespace OpenRA.Mods.RA public void Tick(Actor self) { - history.Tick(self.CenterLocation - new PVecInt(0, move.Altitude) - (PVecInt)Combat.GetTurretPosition(self, facing, contrailTurret).ToInt2()); + history.Tick(self.CenterLocation - new PVecInt(0, move.Altitude) - (PVecInt)contrailTurret.PxPosition(self, facing).ToInt2()); } public void RenderAfterWorld(WorldRenderer wr, Actor self) { history.Render(self); } diff --git a/OpenRA.Mods.RA/LeavesHusk.cs b/OpenRA.Mods.RA/LeavesHusk.cs index a125ba1341..8bcaade2f1 100644 --- a/OpenRA.Mods.RA/LeavesHusk.cs +++ b/OpenRA.Mods.RA/LeavesHusk.cs @@ -55,7 +55,9 @@ namespace OpenRA.Mods.RA if (facing != null) td.Add(new FacingInit( facing.Facing )); - var turreted = self.TraitOrDefault(); + // TODO: This will only take the first turret if there are multiple + // This isn't a problem with the current units, but may be a problem for mods + var turreted = self.TraitsImplementing().FirstOrDefault(); if (turreted != null) td.Add( new TurretFacingInit(turreted.turretFacing) ); diff --git a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj index bd437e02fa..4d8584b9a2 100644 --- a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj +++ b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj @@ -368,7 +368,6 @@ - @@ -420,6 +419,7 @@ + diff --git a/OpenRA.Mods.RA/Render/RenderBuildingSeparateTurret.cs b/OpenRA.Mods.RA/Render/RenderBuildingSeparateTurret.cs index 345b116947..54927b7612 100644 --- a/OpenRA.Mods.RA/Render/RenderBuildingSeparateTurret.cs +++ b/OpenRA.Mods.RA/Render/RenderBuildingSeparateTurret.cs @@ -24,19 +24,17 @@ namespace OpenRA.Mods.RA.Render public RenderBuildingSeparateTurret(ActorInitializer init, RenderBuildingInfo info) : base(init, info) { - var turreted = init.self.Trait(); - var attack = init.self.Trait(); + var self = init.self; + var turreted = self.TraitsImplementing(); - var turretAnim = new Animation(GetImage(init.self), () => turreted.turretFacing); - turretAnim.Play("turret"); - - for( var i = 0; i < attack.Turrets.Count; i++ ) + var i = 0; + foreach (var t in turreted) { - var turret = attack.Turrets[i]; - anims.Add( "turret_{0}".F(i), - new AnimationWithOffset(turretAnim, - () => Combat.GetTurretPosition(init.self, null, turret).ToFloat2(), - null)); + var anim = new Animation(GetImage(self), () => t.turretFacing); + anim.Play("turret"); + + anims.Add("turret_{0}".F(i++), new AnimationWithOffset(anim, + () => t.PxPosition(self, null).ToFloat2(), null)); } } } diff --git a/OpenRA.Mods.RA/Render/RenderBuildingTurreted.cs b/OpenRA.Mods.RA/Render/RenderBuildingTurreted.cs index 450d682704..daeeb3d00b 100644 --- a/OpenRA.Mods.RA/Render/RenderBuildingTurreted.cs +++ b/OpenRA.Mods.RA/Render/RenderBuildingTurreted.cs @@ -9,6 +9,7 @@ #endregion using System; +using System.Linq; using OpenRA.Mods.RA.Buildings; using OpenRA.Traits; @@ -26,7 +27,8 @@ namespace OpenRA.Mods.RA.Render static Func MakeTurretFacingFunc(Actor self) { - var turreted = self.Trait(); + // Turret artwork is baked into the sprite, so only the first turret makes sense. + var turreted = self.TraitsImplementing().FirstOrDefault(); return () => turreted.turretFacing; } } diff --git a/OpenRA.Mods.RA/Render/RenderUnitSpinner.cs b/OpenRA.Mods.RA/Render/RenderUnitSpinner.cs index 89573ea115..7089f599a3 100755 --- a/OpenRA.Mods.RA/Render/RenderUnitSpinner.cs +++ b/OpenRA.Mods.RA/Render/RenderUnitSpinner.cs @@ -31,9 +31,10 @@ namespace OpenRA.Mods.RA.Render spinnerAnim.PlayRepeating("spinner"); + var turret = new Turret(info.Offset); anims.Add("spinner", new AnimationWithOffset( spinnerAnim, - () => Combat.GetTurretPosition( self, facing, new Turret(info.Offset)).ToFloat2(), + () => turret.PxPosition(self, facing).ToFloat2(), null ) { ZOffset = 1 } ); } } diff --git a/OpenRA.Mods.RA/Render/RenderUnitTurreted.cs b/OpenRA.Mods.RA/Render/RenderUnitTurreted.cs index 665f35e608..683b539246 100755 --- a/OpenRA.Mods.RA/Render/RenderUnitTurreted.cs +++ b/OpenRA.Mods.RA/Render/RenderUnitTurreted.cs @@ -8,6 +8,8 @@ */ #endregion +using System; +using System.Linq; using OpenRA.Graphics; using OpenRA.Traits; @@ -24,20 +26,30 @@ namespace OpenRA.Mods.RA.Render : base(self) { var facing = self.Trait(); - var turreted = self.Trait(); - var attack = self.Trait(); + var turreted = self.TraitsImplementing(); - var turretAnim = new Animation(GetImage(self), () => turreted.turretFacing ); - turretAnim.Play( "turret" ); - - for( var i = 0; i < attack.Turrets.Count; i++ ) + var i = 0; + foreach (var t in turreted) { - var turret = attack.Turrets[i]; - anims.Add( "turret_{0}".F(i), - new AnimationWithOffset( turretAnim, - () => Combat.GetTurretPosition( self, facing, turret ).ToFloat2(), - null)); + var turret = t; + + var anim = new Animation(GetImage(self), () => turret.turretFacing); + anim.Play("turret"); + + anims.Add("turret_{0}".F(i++), new AnimationWithOffset(anim, + () => turret.PxPosition(self, facing).ToFloat2() + RecoilOffset(self, turret), null)); } } + + float2 RecoilOffset(Actor self, Turreted t) + { + var a = self.TraitsImplementing() + .OrderByDescending(w => w.Recoil) + .FirstOrDefault(w => w.Info.Turret == t.info.Turret); + if (a == null) + return float2.Zero; + + return a.RecoilPxOffset(self, t.turretFacing).ToFloat2(); + } } } diff --git a/OpenRA.Mods.RA/Render/WithMuzzleFlash.cs b/OpenRA.Mods.RA/Render/WithMuzzleFlash.cs index 084b48156f..69933b27a4 100644 --- a/OpenRA.Mods.RA/Render/WithMuzzleFlash.cs +++ b/OpenRA.Mods.RA/Render/WithMuzzleFlash.cs @@ -8,10 +8,12 @@ */ #endregion +using System; using System.Collections.Generic; +using System.Linq; using OpenRA.Graphics; using OpenRA.Traits; -using System; +using OpenRA.Mods.RA; namespace OpenRA.Mods.RA.Render { @@ -27,25 +29,25 @@ namespace OpenRA.Mods.RA.Render public WithMuzzleFlash(Actor self) { - var attack = self.Trait(); var render = self.Trait(); var facing = self.TraitOrDefault(); - var turreted = self.TraitOrDefault(); - var getFacing = turreted != null ? () => turreted.turretFacing : - facing != null ? (Func)(() => facing.Facing) : () => 0; - foreach (var w in attack.Weapons) - foreach( var b in w.Barrels ) + var arms = self.TraitsImplementing(); + foreach (var a in arms) + foreach(var b in a.Barrels) { var barrel = b; - var turret = w.Turret; + var turreted = self.TraitsImplementing() + .FirstOrDefault(t => t.info.Turret == a.Info.Turret); + var getFacing = turreted != null ? () => turreted.turretFacing : + facing != null ? (Func)(() => facing.Facing) : () => 0; var muzzleFlash = new Animation(render.GetImage(self), getFacing); muzzleFlash.Play("muzzle"); muzzleFlashes.Add("muzzle{0}".F(muzzleFlashes.Count), new AnimationWithOffset( muzzleFlash, - () => Combat.GetBarrelPosition(self, facing, turret, barrel).ToFloat2(), + () => a.MuzzlePxPosition(self, facing, barrel).ToFloat2(), () => !isShowing)); } } diff --git a/OpenRA.Mods.RA/Render/WithRotor.cs b/OpenRA.Mods.RA/Render/WithRotor.cs index bb7ae40ddf..e394e6b884 100755 --- a/OpenRA.Mods.RA/Render/WithRotor.cs +++ b/OpenRA.Mods.RA/Render/WithRotor.cs @@ -30,9 +30,10 @@ namespace OpenRA.Mods.RA.Render rotorAnim = new Animation(rs.GetImage(self)); rotorAnim.PlayRepeating("rotor"); + var turret = new Turret(info.Offset); rs.anims.Add(info.Id, new AnimationWithOffset( rotorAnim, - () => Combat.GetTurretPosition( self, facing, new Turret(info.Offset)).ToFloat2(), + () => turret.PxPosition(self, facing).ToFloat2(), null ) { ZOffset = 1 } ); } diff --git a/OpenRA.Mods.RA/RenderRangeCircle.cs b/OpenRA.Mods.RA/RenderRangeCircle.cs index 8a869fdc55..e0ca291fe7 100644 --- a/OpenRA.Mods.RA/RenderRangeCircle.cs +++ b/OpenRA.Mods.RA/RenderRangeCircle.cs @@ -9,6 +9,7 @@ #endregion using System.Drawing; +using System.Linq; using OpenRA.Graphics; using OpenRA.Traits; @@ -26,11 +27,11 @@ namespace OpenRA.Mods.RA public void Render(WorldRenderer wr, World w, ActorInfo ai, PPos centerLocation) { wr.DrawRangeCircleWithContrast( - Color.FromArgb(128, Color.Yellow), - centerLocation.ToFloat2(), - ai.Traits.Get().GetMaximumRange(), - Color.FromArgb(96, Color.Black), - 1); + Color.FromArgb(128, Color.Yellow), centerLocation.ToFloat2(), + ai.Traits.WithInterface() + .Select(a => Rules.Weapons[a.Weapon.ToLowerInvariant()].Range).Max(), + Color.FromArgb(96, Color.Black), 1 + ); foreach (var a in w.ActorsWithTrait()) if (a.Actor.Owner == a.Actor.World.LocalPlayer) diff --git a/OpenRA.Mods.RA/SmokeTrailWhenDamaged.cs b/OpenRA.Mods.RA/SmokeTrailWhenDamaged.cs index 70419e5d24..9e2dd66a21 100644 --- a/OpenRA.Mods.RA/SmokeTrailWhenDamaged.cs +++ b/OpenRA.Mods.RA/SmokeTrailWhenDamaged.cs @@ -43,7 +43,7 @@ namespace OpenRA.Mods.RA { var facing = self.Trait(); var altitude = new PVecInt(0, move.Altitude); - position = (self.CenterLocation - (PVecInt)Combat.GetTurretPosition(self, facing, smokeTurret).ToInt2()); + position = (self.CenterLocation - (PVecInt)smokeTurret.PxPosition(self, facing).ToInt2()); if (self.World.RenderedShroud.IsVisible(position.ToCPos())) self.World.AddFrameEndTask( diff --git a/OpenRA.Mods.RA/TakeCover.cs b/OpenRA.Mods.RA/TakeCover.cs index 96ac4e50da..6e3651598f 100644 --- a/OpenRA.Mods.RA/TakeCover.cs +++ b/OpenRA.Mods.RA/TakeCover.cs @@ -14,23 +14,24 @@ using OpenRA.Traits; namespace OpenRA.Mods.RA { - public class TakeCoverInfo : ITraitInfo + public class TakeCoverInfo : TurretedInfo { public readonly int ProneTime = 100; /* ticks, =4s */ public readonly float ProneDamage = .5f; public readonly decimal ProneSpeed = .5m; - public readonly int[] BarrelOffset = null; + public readonly int[] ProneOffset = {0,-2,0,4}; - public object Create(ActorInitializer init) { return new TakeCover(this); } + public override object Create(ActorInitializer init) { return new TakeCover(init, this); } } // Infantry prone behavior - public class TakeCover : ITick, INotifyDamage, IDamageModifier, ISpeedModifier, ISync + public class TakeCover : Turreted, ITick, INotifyDamage, IDamageModifier, ISpeedModifier, ISync { TakeCoverInfo Info; [Sync] int remainingProneTime = 0; - public TakeCover(TakeCoverInfo info) + public TakeCover(ActorInitializer init, TakeCoverInfo info) + : base(init, info) { Info = info; } @@ -42,36 +43,16 @@ namespace OpenRA.Mods.RA if (e.Damage > 0 && (e.Warhead == null || !e.Warhead.PreventProne)) /* Don't go prone when healed */ { if (!IsProne) - ApplyBarrelOffset(self, true); + turret = new Turret(Info.ProneOffset); remainingProneTime = Info.ProneTime; } } - public void Tick(Actor self) + public override void Tick(Actor self) { - if (IsProne) - { - if (--remainingProneTime == 0) - ApplyBarrelOffset(self, false); - } - } - - public void ApplyBarrelOffset(Actor self, bool isProne) - { - if (Info.BarrelOffset == null) - return; - - var ab = self.TraitOrDefault(); - if (ab == null) - return; - - var sign = isProne ? 1 : -1; - foreach (var w in ab.Weapons) - foreach (var b in w.Barrels) - { - b.TurretSpaceOffset += sign * new PVecInt(Info.BarrelOffset[0], Info.BarrelOffset[1]); - b.ScreenSpaceOffset += sign * new PVecInt(Info.BarrelOffset[2], Info.BarrelOffset[3]); - } + base.Tick(self); + if (IsProne && --remainingProneTime == 0) + turret = new Turret(Info.Offset); } public float GetDamageModifier(Actor attacker, WarheadInfo warhead ) diff --git a/OpenRA.Mods.RA/ThrowsParticle.cs b/OpenRA.Mods.RA/ThrowsParticle.cs index 351dfb899e..3ce1f252f3 100644 --- a/OpenRA.Mods.RA/ThrowsParticle.cs +++ b/OpenRA.Mods.RA/ThrowsParticle.cs @@ -46,7 +46,7 @@ namespace OpenRA.Mods.RA alt = 0; facing = Turreted.GetInitialTurretFacing( init, 0 ); - pos = Combat.GetTurretPosition(self, ifacing, new Turret(info.Offset)).ToFloat2(); + pos = new Turret(info.Offset).PxPosition(self, ifacing).ToFloat2(); v = Game.CosmeticRandom.Gauss2D(1) * info.Spread.RelOffset(); dfacing = Game.CosmeticRandom.Gauss1D(2) * info.ROT; diff --git a/OpenRA.Mods.RA/Turreted.cs b/OpenRA.Mods.RA/Turreted.cs index 60e364981f..f9c305f755 100755 --- a/OpenRA.Mods.RA/Turreted.cs +++ b/OpenRA.Mods.RA/Turreted.cs @@ -8,23 +8,29 @@ */ #endregion +using System.Collections.Generic; +using OpenRA.Mods.RA.Render; using OpenRA.Traits; namespace OpenRA.Mods.RA { public class TurretedInfo : ITraitInfo, UsesInit { + public readonly string Turret = "primary"; public readonly int ROT = 255; public readonly int InitialFacing = 128; + public readonly int[] Offset = {0,0}; + public readonly bool AlignWhenIdle = false; - public object Create(ActorInitializer init) { return new Turreted(init, this); } + public virtual object Create(ActorInitializer init) { return new Turreted(init, this); } } - public class Turreted : ITick, ISync + public class Turreted : ITick, ISync, IResolveOrder { [Sync] public int turretFacing = 0; public int? desiredFacing; - TurretedInfo info; + public TurretedInfo info; + protected Turret turret; IFacing facing; public static int GetInitialTurretFacing(ActorInitializer init, int def) @@ -43,9 +49,10 @@ namespace OpenRA.Mods.RA this.info = info; turretFacing = GetInitialTurretFacing(init, info.InitialFacing); facing = init.self.TraitOrDefault(); + turret = new Turret(info.Offset); } - public void Tick(Actor self) + public virtual void Tick(Actor self) { var df = desiredFacing ?? ( facing != null ? facing.Facing : turretFacing ); turretFacing = Util.TickFacing(turretFacing, df, info.ROT); @@ -56,5 +63,42 @@ namespace OpenRA.Mods.RA desiredFacing = Util.GetFacing( target.CenterLocation - self.CenterLocation, turretFacing ); return turretFacing == desiredFacing; } + + public virtual void ResolveOrder(Actor self, Order order) + { + if (info.AlignWhenIdle && order.OrderString != "Attack" && order.OrderString != "AttackHold") + desiredFacing = null; + } + + public PVecFloat PxPosition(Actor self, IFacing facing) + { + return turret.PxPosition(self, facing); + } + } + + public class Turret + { + public PVecInt UnitSpacePosition; // where, in the unit's local space. + public PVecInt ScreenSpacePosition; // screen-space hack to make things line up good. + + public Turret(int[] offset) + { + ScreenSpacePosition = (PVecInt) offset.AbsOffset().ToInt2(); + UnitSpacePosition = (PVecInt) offset.RelOffset().ToInt2(); + } + + public PVecFloat PxPosition(Actor self, IFacing facing) + { + // Things that don't have a rotating base don't need the turrets repositioned + if (facing == null) return ScreenSpacePosition; + + var ru = self.TraitOrDefault(); + var numDirs = (ru != null) ? ru.anim.CurrentSequence.Facings : 8; + var bodyFacing = facing.Facing; + var quantizedFacing = Util.QuantizeFacing(bodyFacing, numDirs) * (256 / numDirs); + + return (PVecFloat)Util.RotateVectorByFacing(UnitSpacePosition.ToFloat2(), quantizedFacing, .7f) + + (PVecFloat)ScreenSpacePosition.ToFloat2(); + } } } diff --git a/OpenRA.Mods.RA/Weapon.cs b/OpenRA.Mods.RA/Weapon.cs deleted file mode 100644 index 606df63f75..0000000000 --- a/OpenRA.Mods.RA/Weapon.cs +++ /dev/null @@ -1,162 +0,0 @@ -#region Copyright & License Information -/* - * Copyright 2007-2011 The OpenRA Developers (see AUTHORS) - * This file is part of OpenRA, which is free software. It is made - * available to you under the terms of the GNU General Public License - * as published by the Free Software Foundation. For more information, - * see COPYING. - */ -#endregion - -using System; -using System.Collections.Generic; -using System.Linq; -using OpenRA.GameRules; -using OpenRA.Traits; - -namespace OpenRA.Mods.RA -{ - public class Barrel - { - public PVecInt TurretSpaceOffset; // position in turret space - public PVecInt ScreenSpaceOffset; // screen-space hack to make things line up good. - public int Facing; // deviation from turret facing - } - - public class Turret - { - public float Recoil = 0.0f; // remaining recoil - public float RecoilRecovery = 0.2f; // recoil recovery rate - public PVecInt UnitSpacePosition; // where, in the unit's local space. - public PVecInt ScreenSpacePosition; // screen-space hack to make things line up good. - - public Turret(int[] offset, float recoilRecovery) - { - ScreenSpacePosition = (PVecInt) offset.AbsOffset().ToInt2(); - UnitSpacePosition = (PVecInt) offset.RelOffset().ToInt2(); - RecoilRecovery = recoilRecovery; - } - - public Turret(int[] offset) : this(offset, 0) {} - } - - public class Weapon - { - public WeaponInfo Info; - public int FireDelay = 0; // time (in frames) until the weapon can fire again - public int Burst = 0; // burst counter - public int Recoil = 0; - - public Barrel[] Barrels; // where projectiles are spawned, in local turret space. - public Turret Turret; // where this weapon is mounted -- possibly shared - - public Weapon(string weaponName, Turret turret, int[] localOffset, int recoil) - { - Info = Rules.Weapons[weaponName.ToLowerInvariant()]; - Burst = Info.Burst; - Turret = turret; - Recoil = recoil; - - var barrels = new List(); - for (var i = 0; i < localOffset.Length / 5; i++) - barrels.Add(new Barrel - { - TurretSpaceOffset = new PVecInt(localOffset[5 * i], localOffset[5 * i + 1]), - ScreenSpaceOffset = new PVecInt(localOffset[5 * i + 2], localOffset[5 * i + 3]), - Facing = localOffset[5 * i + 4] - }); - - // if no barrels specified, the default is "turret position; turret facing". - if (barrels.Count == 0) - barrels.Add(new Barrel { TurretSpaceOffset = PVecInt.Zero, ScreenSpaceOffset = PVecInt.Zero, Facing = 0 }); - - Barrels = barrels.ToArray(); - } - - public bool IsReloading { get { return FireDelay > 0; } } - - public void Tick() - { - if (FireDelay > 0) --FireDelay; - Turret.Recoil = Math.Max(0f, Turret.Recoil - Turret.RecoilRecovery); - } - - public bool IsValidAgainst(World world, Target target) - { - if( target.IsActor ) - return Combat.WeaponValidForTarget( Info, target.Actor ); - else - return Combat.WeaponValidForTarget( Info, world, target.CenterLocation.ToCPos() ); - } - - public void FiredShot() - { - Turret.Recoil = this.Recoil; - - if (--Burst > 0) - FireDelay = Info.BurstDelay; - else - { - FireDelay = Info.ROF; - Burst = Info.Burst; - } - } - - public void CheckFire(Actor self, AttackBase attack, IMove move, IFacing facing, Target target) - { - if (FireDelay > 0) return; - - var limitedAmmo = self.TraitOrDefault(); - if (limitedAmmo != null && !limitedAmmo.HasAmmo()) - return; - - if (!Combat.IsInRange(self.CenterLocation, Info.Range, target)) return; - if (Combat.IsInRange(self.CenterLocation, Info.MinRange, target)) return; - - if (!IsValidAgainst(self.World, target)) return; - - var barrel = Barrels[Burst % Barrels.Length]; - var destMove = target.IsActor ? target.Actor.TraitOrDefault() : null; - var turreted = self.TraitOrDefault(); - - var args = new ProjectileArgs - { - weapon = Info, - - firedBy = self, - target = target, - - src = (self.CenterLocation + (PVecInt)Combat.GetBarrelPosition(self, facing, Turret, barrel).ToInt2()), - srcAltitude = move != null ? move.Altitude : 0, - dest = target.CenterLocation, - destAltitude = destMove != null ? destMove.Altitude : 0, - - facing = barrel.Facing + - (turreted != null ? turreted.turretFacing : - facing != null ? facing.Facing : Util.GetFacing(target.CenterLocation - self.CenterLocation, 0)), - - firepowerModifier = self.TraitsImplementing() - .Select(a => a.GetFirepowerModifier()) - .Product() - }; - - attack.ScheduleDelayedAction( attack.FireDelay( self, target, self.Info.Traits.Get() ), () => - { - if (args.weapon.Projectile != null) - { - var projectile = args.weapon.Projectile.Create(args); - if (projectile != null) - self.World.Add(projectile); - - if (args.weapon.Report != null && args.weapon.Report.Any()) - Sound.Play(args.weapon.Report.Random(self.World.SharedRandom) + ".aud", self.CenterLocation); - } - }); - - foreach (var na in self.TraitsImplementing()) - na.Attacking(self, target); - - FiredShot(); - } - } -} diff --git a/mods/cnc-classic/rules/aircraft.yaml b/mods/cnc-classic/rules/aircraft.yaml index 41607ab3f1..6ef0dee633 100644 --- a/mods/cnc-classic/rules/aircraft.yaml +++ b/mods/cnc-classic/rules/aircraft.yaml @@ -63,10 +63,10 @@ HELI: Type: Light RevealsShroud: Range: 8 + Armament: + Weapon: HeliAGGun + LocalOffset: -5,-3,0,2,0, 5,-3,0,2,0 AttackHeli: - PrimaryWeapon: HeliAGGun - PrimaryOffset: 0,-3,0,2 - PrimaryLocalOffset: -5,0,0,0,0, 5,0,0,0,0 FacingTolerance: 20 LimitedAmmo: Ammo: 10 @@ -105,10 +105,10 @@ ORCA: Type: Light RevealsShroud: Range: 8 + Armament: + Weapon: OrcaAGMissiles + LocalOffset: -4,-10,0,5,0, 4,-10,0,5,0 AttackHeli: - PrimaryWeapon: OrcaAGMissiles - PrimaryOffset: 0,-10,0,5 - PrimaryLocalOffset: -4,0,0,0,0, 4,0,0,0,0 FacingTolerance: 20 LimitedAmmo: Ammo: 10 diff --git a/mods/cnc-classic/rules/civilian.yaml b/mods/cnc-classic/rules/civilian.yaml index abaa743803..5eb8bb9d40 100644 --- a/mods/cnc-classic/rules/civilian.yaml +++ b/mods/cnc-classic/rules/civilian.yaml @@ -247,8 +247,9 @@ VICE: Cost: 1000 Tooltip: Name: Viceroid + Armament: + Weapon: Chemspray AttackFrontal: - PrimaryWeapon: Chemspray AttackWander: RenderUnit: WithMuzzleFlash: \ No newline at end of file diff --git a/mods/cnc-classic/rules/defaults.yaml b/mods/cnc-classic/rules/defaults.yaml index 1302ead0fb..ea5e62f743 100644 --- a/mods/cnc-classic/rules/defaults.yaml +++ b/mods/cnc-classic/rules/defaults.yaml @@ -151,8 +151,9 @@ RevealsShroud: Range: 3 #arbitrary. Assuming it should be 1, like infantry. # In practice, it seems that OpenRA renders vision range differently. Assuming it should be 1 for this unit. + Armament: + Weapon: Pistol AttackFrontal: - PrimaryWeapon: Pistol ActorLostNotification: Notification: civdead1.aud NotifyAll: true diff --git a/mods/cnc-classic/rules/infantry.yaml b/mods/cnc-classic/rules/infantry.yaml index a5f940838a..d6f41b03c1 100644 --- a/mods/cnc-classic/rules/infantry.yaml +++ b/mods/cnc-classic/rules/infantry.yaml @@ -15,8 +15,9 @@ E1: Speed: 4 Health: HP: 50 + Armament: + Weapon: M16 AttackFrontal: - PrimaryWeapon: M16 RenderInfantryProne: IdleAnimations: idle1,idle2,idle3,idle4 @@ -38,10 +39,11 @@ E2: Speed: 5 Health: HP: 50 - AttackFrontal: - PrimaryWeapon: Grenade - PrimaryOffset: 0,0,0,-10 + Armament: + Weapon: Grenade + LocalOffset: 0,0,0,-10,0 FireDelay: 15 + AttackFrontal: RenderInfantryProne: IdleAnimations: idle1,idle2 Explodes: @@ -77,10 +79,11 @@ E3: RevealsShroud: Range: 3 # range value is 1 in C&C, but OpenRA renders vision slightly differently - AttackFrontal: - PrimaryWeapon: Rockets - PrimaryOffset: 1,-6,0,-8 + Armament: + Weapon: Rockets + LocalOffset: 1,-6,0,-8,0 FireDelay: 5 + AttackFrontal: RenderInfantryProne: IdleAnimations: idle1,idle2 @@ -102,10 +105,11 @@ E4: Speed: 5 Health: HP: 70 - AttackFrontal: - PrimaryWeapon: Flamethrower - PrimaryOffset: 0,-2,2,-4 + Armament: + Weapon: Flamethrower + LocalOffset: 0,-2,2,-4,0 FireDelay: 3 + AttackFrontal: WithMuzzleFlash: RenderInfantryProne: IdleAnimations: idle1,idle2 @@ -134,10 +138,11 @@ E5: PathingCost: 100 Health: HP: 70 - AttackFrontal: - PrimaryWeapon: Chemspray - PrimaryOffset: 0,-2,2,-9 + Armament: + Weapon: Chemspray + LocalOffset: 0,-2,2,-9 FireDelay: 3 + AttackFrontal: WithMuzzleFlash: -PoisonedByTiberium: RenderInfantryProne: @@ -202,8 +207,9 @@ RMBO: ScanRadius: 5 C4Demolition: C4Delay: 45 + Armament: + Weapon: Sniper AttackFrontal: - PrimaryWeapon: Sniper RenderInfantryProne: IdleAnimations: idle1,idle2,idle3 AnnounceOnBuild: diff --git a/mods/cnc-classic/rules/ships.yaml b/mods/cnc-classic/rules/ships.yaml index 93d8c6cb4e..834c3997a4 100644 --- a/mods/cnc-classic/rules/ships.yaml +++ b/mods/cnc-classic/rules/ships.yaml @@ -18,10 +18,11 @@ BOAT: Range: 7 Turreted: ROT: 7 + Offset: 0,-15,0,-4 + Armament: + Weapon: BoatMissile + LocalOffset: -3,-5,0,0,0, 3,-5,0,0,0, 0,-5,0,0,0 AttackTurreted: - PrimaryWeapon: BoatMissile - PrimaryOffset: 0,-15,0,-4 - PrimaryLocalOffset: -3,-5,0,0,0, 3,-5,0,0,0, 0,-5,0,0,0 RenderGunboat: AutoTarget: AllowMovement: false diff --git a/mods/cnc-classic/rules/structures.yaml b/mods/cnc-classic/rules/structures.yaml index 976e6c6b0b..f0059002e2 100644 --- a/mods/cnc-classic/rules/structures.yaml +++ b/mods/cnc-classic/rules/structures.yaml @@ -556,12 +556,13 @@ OBLI: # (Range of Obelisk laser is 7.5) RenderBuildingCharge: ChargeAudio: obelpowr.aud - AttackTurreted: - PrimaryWeapon: Laser - PrimaryOffset: 0,0,-2,-17 - FireDelay: 8 Turreted: ROT:255 + Offset: 0,0,-2,-17 + Armament: + Weapon: Laser + FireDelay: 8 + AttackTurreted: AutoTarget: -RenderBuilding: RenderRangeCircle: @@ -663,9 +664,10 @@ GUN: ROT: 12 InitialFacing: 50 RenderBuildingTurreted: + Armament: + Weapon: TurretGun + LocalOffset: 0,4,0,-2,0 AttackTurreted: - PrimaryWeapon: TurretGun - PrimaryLocalOffset: 0,4,0,-2,0 AutoTarget: -AutoTargetIgnore: -RenderBuilding: @@ -706,8 +708,9 @@ SAM: ROT: 7 InitialFacing: 0 RenderBuildingTurreted: + Armament: + Weapon: SAMMissile AttackPopupTurreted: - PrimaryWeapon: SAMMissile WithMuzzleFlash: AutoTarget: -RenderBuilding: @@ -736,10 +739,10 @@ GTWR: Range: 6 # Range: 3 # RevealShroud range was set to equal 1 + its weapon range (due to possible rendering issues with shroud for OpenRA) + Armament: + Weapon: HighV + LocalOffset: 0,-6,0,0,0 AttackTurreted: - PrimaryWeapon: HighV - PrimaryOffset: 0,0,0,-6 - PrimaryLocalOffset: 0,-6,0,0,0 AutoTarget: -AutoTargetIgnore: DetectCloaked: @@ -749,6 +752,7 @@ GTWR: WithMuzzleFlash: Turreted: ROT:255 + Offset: 0,0,0,-6 ATWR: Inherits: ^Building @@ -777,12 +781,13 @@ ATWR: Range: 7 # Range: 4 # RevealShroud range was set to equal its weapon range +1 (due to possible rendering issues with shroud for OpenRA) - AttackTurreted: - PrimaryWeapon: TowerMissle - PrimaryOffset: 0,0,5,2 - PrimaryLocalOffset: 7,-7,0,0,-25, -7,-7,0,0,25 Turreted: ROT:255 + Offset: 0,0,5,2 + Armament: + Weapon: TowerMissle + LocalOffset: 7,-7,0,0,-25, -7,-7,0,0,25 + AttackTurreted: AutoTarget: -AutoTargetIgnore: DetectCloaked: diff --git a/mods/cnc-classic/rules/vehicles.yaml b/mods/cnc-classic/rules/vehicles.yaml index 6d378bd2c9..c71638a756 100644 --- a/mods/cnc-classic/rules/vehicles.yaml +++ b/mods/cnc-classic/rules/vehicles.yaml @@ -99,9 +99,10 @@ JEEP: # In practice, it seems that OpenRA renders vision range differently. Will set at +2 from C&C Gold values for now to properly emulate. Turreted: ROT: 10 + Offset: 0,2,0,-4 + Armament: + Weapon: MachineGun AttackTurreted: - PrimaryWeapon: MachineGun - PrimaryOffset: 0,2,0,-4 WithMuzzleFlash: RenderUnitTurreted: AutoTarget: @@ -131,9 +132,9 @@ APC: # In practice, it seems that OpenRA renders vision range differently. Will set at +2 from C&C Gold values for now to properly emulate. Turreted: ROT: 10 + Armament: + Weapon: MachineGun AttackTurreted: - PrimaryWeapon: MachineGun - PrimaryOffset: 0,0,0,0 WithMuzzleFlash: RenderUnitTurreted: AutoTarget: @@ -168,9 +169,10 @@ BGGY: # In practice, it seems that OpenRA renders vision range differently. Will set at +2 from C&C Gold values for now to properly emulate. Turreted: ROT: 10 + Offset: 0,1,0,-3 + Armament: + Weapon: MachineGun AttackTurreted: - PrimaryWeapon: MachineGun - PrimaryOffset: 0,1,0,-3 WithMuzzleFlash: RenderUnitTurreted: AutoTarget: @@ -198,10 +200,10 @@ BIKE: Range: 4 # Range: 2 # In practice, it seems that OpenRA renders vision range differently. Will set at +2 from C&C Gold values for now to properly emulate. + Armament: + Weapon: BikeRockets + LocalOffset: -4,0,0,-2,25, 4,0,0,-2,-25 AttackFrontal: - PrimaryWeapon: BikeRockets - PrimaryOffset: 0,0,0,-2 - PrimaryLocalOffset: -4,0,0,0,25, 4,0,0,0,-25 RenderUnit: AutoTarget: @@ -228,9 +230,10 @@ ARTY: Range: 6 # Range: 4 # In practice, it seems that OpenRA renders vision range differently. Will set at +2 from C&C Gold values for now to properly emulate. + Armament: + Weapon: ArtilleryShell + LocalOffset: 0,-7,0,-3,0 AttackFrontal: - PrimaryWeapon: ArtilleryShell - PrimaryOffset: 0,-7,0,-3 RenderUnit: AutoTarget: Explodes: @@ -260,10 +263,10 @@ FTNK: Range: 6 # Range: 4 # In practice, it seems that OpenRA renders vision range differently. Will set at +2 from C&C Gold values for now to properly emulate. + Armament: + Weapon: BigFlamer + LocalOffset: 2,-5,3,2,0, -2,-5,3,2,0 AttackFrontal: - PrimaryWeapon: BigFlamer - PrimaryOffset: 0,-5,3,2 - PrimaryLocalOffset: 2,0,0,0,0, -2,0,0,0,0 RenderUnit: AutoTarget: WithMuzzleFlash: @@ -295,11 +298,12 @@ LTNK: # In practice, it seems that OpenRA renders vision range differently. Will set at +2 from C&C Gold values for now to properly emulate. Turreted: ROT: 5 + Armament: + Weapon: 70mm + Recoil: 2 + RecoilRecovery: 0.4 + LocalOffset: 0,3,0,-2,0 AttackTurreted: - PrimaryWeapon: 70mm - PrimaryRecoil: 2 - PrimaryRecoilRecovery: 0.4 - PrimaryLocalOffset: 0,3,0,-2,0 RenderUnitTurreted: AutoTarget: @@ -327,12 +331,13 @@ MTNK: # In practice, it seems that OpenRA renders vision range differently. Will set at +2 from C&C Gold values for now to properly emulate. Turreted: ROT: 5 + Armament: + # Weapon: 120mm + Weapon: 105mm + Recoil: 3 + RecoilRecovery: 0.6 + LocalOffset: 0,0,0,-1,0 AttackTurreted: - # PrimaryWeapon: 120mm - PrimaryWeapon: 105mm - PrimaryRecoil: 3 - PrimaryRecoilRecovery: 0.6 - PrimaryLocalOffset: 0,0,0,-1,0 RenderUnitTurreted: AutoTarget: Selectable: @@ -363,14 +368,16 @@ HTNK: # In practice, it seems that OpenRA renders vision range differently. Will set at +2 from C&C Gold values for now to properly emulate. Turreted: ROT: 2 + Armament@PRIMARY: + Weapon: 120mmDual + LocalOffset: -5,-5,0,-10,0, 5,-5,0,-10,0 + Recoil: 4 + RecoilRecovery: 1 + Armament@SECONDARY: + Weapon: MammothMissiles + LocalOffset: -9,2,0,0,25, 9,2,0,0,-25 + Recoil: 1 AttackTurreted: - PrimaryWeapon: 120mmDual - SecondaryWeapon: MammothMissiles - PrimaryLocalOffset: -5,-5,0,-10,0, 5,-5,0,-10,0 - SecondaryLocalOffset: -9,2,0,0,25, 9,2,0,0,-25 - PrimaryRecoil: 4 - SecondaryRecoil: 1 - PrimaryRecoilRecovery: 1 RenderUnitTurreted: AutoTarget: SelfHealing: @@ -405,10 +412,11 @@ MSAM: # In practice, it seems that OpenRA renders vision range differently. Will set at +2 from C&C Gold values for now to properly emulate. Turreted: ROT: 255 + Offset: 0,6,0,-3 + Armament: + Weapon: 227mm + LocalOffset: 3,-5,0,0,0, -3,-5,0,0,0 AttackFrontal: - PrimaryWeapon: 227mm - PrimaryOffset: 0,6,0,-3 - PrimaryLocalOffset: 3,-5,0,0,0, -3,-5,0,0,0 RenderUnitTurretedAim: AutoTarget: Explodes: @@ -438,13 +446,15 @@ MLRS: # In practice, it seems that OpenRA renders vision range differently. Will set at +2 from C&C Gold values for now to properly emulate. Turreted: ROT: 5 + Offset: 0,3,0,-3 + # AlignWhenIdle: true + Armament@PRIMARY: + Weapon: HonestJohn + LocalOffset: -4,0,0,0,0 + Armament@SECONDARY: + Weapon: HonestJohn + LocalOffset: 4,0,0,0,0 AttackFrontal: - PrimaryWeapon: HonestJohn - SecondaryWeapon: HonestJohn - PrimaryOffset: 0,3,0,-3 - PrimaryLocalOffset: -4,0,0,0,0 - SecondaryLocalOffset: 4,0,0,0,0 - # AlignIdleTurrets: true RenderUnitTurretedAim: AutoTarget: Explodes: @@ -478,10 +488,10 @@ STNK: CloakDelay: 125 CloakSound: trans1.aud UncloakSound: appear1.aud + Armament: + Weapon: 227mm.stnk + LocalOffset: 1,-5,0,-3,0, -1,-5,0,-3,0 AttackFrontal: - PrimaryWeapon: 227mm.stnk - PrimaryOffset: 0,-5,0,-3 - PrimaryLocalOffset: 1,0,0,0,0, -1,0,0,0,0 RenderUnit: AutoTarget: InitialStance: HoldFire diff --git a/mods/cnc/rules/aircraft.yaml b/mods/cnc/rules/aircraft.yaml index aa4bf9e50e..e932c49510 100644 --- a/mods/cnc/rules/aircraft.yaml +++ b/mods/cnc/rules/aircraft.yaml @@ -68,13 +68,13 @@ HELI: Type: Light RevealsShroud: Range: 8 + Armament@PRIMARY: + Weapon: HeliAGGun + LocalOffset: -5,-3,0,2,0, 5,-3,0,2,0 + Armament@SECONDARY: + Weapon: HeliAGGun + LocalOffset: -5,-3,0,2,0, 5,-3,0,2,0 AttackHeli: - PrimaryWeapon: HeliAGGun - PrimaryOffset: 0,-3,0,2 - PrimaryLocalOffset: -5,0,0,0,0, 5,0,0,0,0 - SecondaryWeapon: HeliAAGun - SecondaryOffset: 0,-3,0,2 - SecondaryLocalOffset: -5,0,0,0,0, 5,0,0,0,0 FacingTolerance: 20 LimitedAmmo: Ammo: 10 @@ -119,13 +119,13 @@ ORCA: Type: Light RevealsShroud: Range: 8 + Armament@PRIMARY: + Weapon: OrcaAGMissiles + LocalOffset: -4,-10,0,5,0, 4,-10,0,5,0 + Armament@SECONDARY: + Weapon: OrcaAAMissiles + LocalOffset: -4,-10,0,5,0, 4,-10,0,5,0 AttackHeli: - PrimaryWeapon: OrcaAGMissiles - PrimaryOffset: 0,-10,0,5 - PrimaryLocalOffset: -4,0,0,0,0, 4,0,0,0,0 - SecondaryWeapon: OrcaAAMissiles - SecondaryOffset: 0,-10,0,5 - SecondaryLocalOffset: -4,0,0,0,0, 4,0,0,0,0 FacingTolerance: 20 LimitedAmmo: Ammo: 10 diff --git a/mods/cnc/rules/civilian.yaml b/mods/cnc/rules/civilian.yaml index 046d2df6cd..81e020a1d6 100644 --- a/mods/cnc/rules/civilian.yaml +++ b/mods/cnc/rules/civilian.yaml @@ -404,8 +404,9 @@ VICE: Cost: 1000 Tooltip: Name: Viceroid + Armament: + Weapon: Chemspray AttackFrontal: - PrimaryWeapon: Chemspray AttackWander: RenderUnit: WithMuzzleFlash: \ No newline at end of file diff --git a/mods/cnc/rules/defaults.yaml b/mods/cnc/rules/defaults.yaml index f7d4b53413..e5f3e685b6 100644 --- a/mods/cnc/rules/defaults.yaml +++ b/mods/cnc/rules/defaults.yaml @@ -124,7 +124,7 @@ Buildable: Queue: Infantry TakeCover: - BarrelOffset: 0,-2,0,4 + ProneOffset: 0,-2,0,4 RenderInfantryProne: AttackMove: Passenger: @@ -164,8 +164,9 @@ HP: 25 RevealsShroud: Range: 2 + Armament: + Weapon: Pistol AttackFrontal: - PrimaryWeapon: Pistol ActorLostNotification: Notification: civdead1.aud NotifyAll: true diff --git a/mods/cnc/rules/infantry.yaml b/mods/cnc/rules/infantry.yaml index 779e4ab6ab..46e09af527 100644 --- a/mods/cnc/rules/infantry.yaml +++ b/mods/cnc/rules/infantry.yaml @@ -15,8 +15,9 @@ E1: Speed: 4 Health: HP: 50 + Armament: + Weapon: M16 AttackFrontal: - PrimaryWeapon: M16 RenderInfantryProne: IdleAnimations: idle1,idle2,idle3,idle4 DetectCloaked: @@ -40,10 +41,11 @@ E2: Speed: 5 Health: HP: 50 - AttackFrontal: - PrimaryWeapon: Grenade - PrimaryOffset: 0,0,0,-10 + Armament: + Weapon: Grenade + LocalOffset: 0,0,0,-10,0 FireDelay: 15 + AttackFrontal: RenderInfantryProne: IdleAnimations: idle1,idle2 Explodes: @@ -70,10 +72,11 @@ E3: Speed: 3 Health: HP: 45 - AttackFrontal: - PrimaryWeapon: Rockets - PrimaryOffset: 1,-6,0,-8 + Armament: + Weapon: Rockets + LocalOffset: 1,-6,0,-8,0 FireDelay: 5 + AttackFrontal: RenderInfantryProne: IdleAnimations: idle1,idle2 DetectCloaked: @@ -97,10 +100,11 @@ E4: Speed: 5 Health: HP: 90 - AttackFrontal: - PrimaryWeapon: Flamethrower - PrimaryOffset: 0,-2,2,-4 + Armament: + Weapon: Flamethrower + LocalOffset: 0,-2,2,-4,0 FireDelay: 3 + AttackFrontal: WithMuzzleFlash: RenderInfantryProne: IdleAnimations: idle1,idle2 @@ -130,10 +134,11 @@ E5: PathingCost: 80 Health: HP: 90 - AttackFrontal: - PrimaryWeapon: Chemspray - PrimaryOffset: 0,-2,2,-9 + Armament: + Weapon: Chemspray + LocalOffset: 0,-2,2,-9,0 FireDelay: 3 + AttackFrontal: WithMuzzleFlash: -PoisonedByTiberium: RenderInfantryProne: @@ -197,8 +202,9 @@ RMBO: ScanRadius: 5 C4Demolition: C4Delay: 45 + Armament: + Weapon: Sniper AttackFrontal: - PrimaryWeapon: Sniper RenderInfantryProne: IdleAnimations: idle1,idle2,idle3 AnnounceOnBuild: diff --git a/mods/cnc/rules/ships.yaml b/mods/cnc/rules/ships.yaml index 2d06993486..d79930ca1c 100644 --- a/mods/cnc/rules/ships.yaml +++ b/mods/cnc/rules/ships.yaml @@ -18,10 +18,11 @@ BOAT: Range: 7 Turreted: ROT: 7 + Offset: 0,-15,0,-4 + Armament: + Weapon: BoatMissile + LocalOffset: -3,-5,0,0,0, 3,-5,0,0,0, 0,-5,0,0,0 AttackTurreted: - PrimaryWeapon: BoatMissile - PrimaryOffset: 0,-15,0,-4 - PrimaryLocalOffset: -3,-5,0,0,0, 3,-5,0,0,0, 0,-5,0,0,0 RenderGunboat: AutoTarget: AllowMovement: false diff --git a/mods/cnc/rules/structures.yaml b/mods/cnc/rules/structures.yaml index d22ef37875..c6bcdd480f 100644 --- a/mods/cnc/rules/structures.yaml +++ b/mods/cnc/rules/structures.yaml @@ -510,9 +510,10 @@ GUN: ROT: 12 InitialFacing: 50 RenderBuildingTurreted: + Armament: + Weapon: TurretGun + LocalOffset: 0,4,0,-2,0 AttackTurreted: - PrimaryWeapon: TurretGun - PrimaryLocalOffset: 0,4,0,-2,0 AutoTarget: -AutoTargetIgnore: -RenderBuilding: @@ -551,8 +552,9 @@ SAM: ROT: 7 InitialFacing: 0 RenderBuildingTurreted: + Armament: + Weapon: SAMMissile AttackPopupTurreted: - PrimaryWeapon: SAMMissile WithMuzzleFlash: AutoTarget: -RenderBuilding: @@ -585,10 +587,11 @@ OBLI: Range: 8 RenderBuildingCharge: ChargeAudio: obelpowr.aud - AttackTurreted: - PrimaryWeapon: Laser - PrimaryOffset: 0,0,-2,-17 + Armament: + Weapon: Laser + LocalOffset: 0,0,-2,-17,0 FireDelay: 8 + AttackTurreted: Turreted: ROT:255 AutoTarget: @@ -620,10 +623,10 @@ GTWR: HP: 600 RevealsShroud: Range: 7 + Armament: + Weapon: HighV + LocalOffset: 0,-6,0,-6,0 AttackTurreted: - PrimaryWeapon: HighV - PrimaryOffset: 0,0,0,-6 - PrimaryLocalOffset: 0,-6,0,0,0 AutoTarget: -AutoTargetIgnore: DetectCloaked: @@ -659,10 +662,10 @@ ATWR: Type: Heavy RevealsShroud: Range: 9 + Armament: + Weapon: TowerMissle + LocalOffset: 7,-7,5,2,-25, -7,-7,5,2,25 AttackTurreted: - PrimaryWeapon: TowerMissle - PrimaryOffset: 0,0,5,2 - PrimaryLocalOffset: 7,-7,0,0,-25, -7,-7,0,0,25 Turreted: ROT:255 AutoTarget: diff --git a/mods/cnc/rules/vehicles.yaml b/mods/cnc/rules/vehicles.yaml index 8460c76f32..f72bfdd894 100644 --- a/mods/cnc/rules/vehicles.yaml +++ b/mods/cnc/rules/vehicles.yaml @@ -100,13 +100,13 @@ APC: Range: 7 Turreted: ROT: 10 + Armament@PRIMARY: + Weapon: APCGun + LocalOffset: 2,-2,0,-7,0, -2,-2,0,-7,0 + Armament@SECONDARY: + Weapon: APCGun.AA + LocalOffset: 2,-2,0,-7,0, -2,-2,0,-7,0 AttackTurreted: - PrimaryWeapon: APCGun - PrimaryOffset: 0,0,0,0 - PrimaryLocalOffset: 2,-2,0,-7,0, -2,-2,0,-7,0 - SecondaryWeapon: APCGun.AA - SecondaryOffset: 0,0,0,0 - SecondaryLocalOffset: 2,-2,0,-7,0, -2,-2,0,-7,0 WithMuzzleFlash: RenderUnitTurreted: AutoTarget: @@ -139,9 +139,10 @@ ARTY: Type: Light RevealsShroud: Range: 9 + Armament: + Weapon: ArtilleryShell + LocalOffset: 0,-7,0,-3,0 AttackFrontal: - PrimaryWeapon: ArtilleryShell - PrimaryOffset: 0,-7,0,-3 RenderUnit: Explodes: AutoTarget: @@ -170,10 +171,10 @@ FTNK: Type: Light RevealsShroud: Range: 5 + Armament: + Weapon: BigFlamer + LocalOffset: 5,-5,3,2,0, -5,-5,3,2,0 AttackFrontal: - PrimaryWeapon: BigFlamer - PrimaryOffset: 0,-5,3,2 - PrimaryLocalOffset: 5,0,0,0,0, -5,0,0,0,0 RenderUnit: AutoTarget: WithMuzzleFlash: @@ -206,9 +207,10 @@ BGGY: Range: 7 Turreted: ROT: 10 + Offset: 0,1,0,-3 + Armament: + Weapon: MachineGun AttackTurreted: - PrimaryWeapon: MachineGun - PrimaryOffset: 0,1,0,-3 WithMuzzleFlash: RenderUnitTurreted: AutoTarget: @@ -243,10 +245,10 @@ BIKE: Type: Light RevealsShroud: Range: 8 + Armament: + Weapon: BikeRockets + LocalOffset: -4,0,0,-2,25, 4,0,0,-2,-25 AttackFrontal: - PrimaryWeapon: BikeRockets - PrimaryOffset: 0,0,0,-2 - PrimaryLocalOffset: -4,0,0,0,25, 4,0,0,0,-25 RenderUnit: AutoTarget: LeavesHusk: @@ -275,9 +277,10 @@ JEEP: Range: 8 Turreted: ROT: 10 + Offset: 0,2,0,-4 + Armament: + Weapon: MachineGun AttackTurreted: - PrimaryWeapon: MachineGun - PrimaryOffset: 0,2,0,-4 WithMuzzleFlash: RenderUnitTurreted: AutoTarget: @@ -307,11 +310,12 @@ LTNK: Range: 6 Turreted: ROT: 5 + Armament: + Weapon: 70mm + Recoil: 2 + RecoilRecovery: 0.4 + LocalOffset: 0,3,0,-2,0 AttackTurreted: - PrimaryWeapon: 70mm - PrimaryRecoil: 2 - PrimaryRecoilRecovery: 0.4 - PrimaryLocalOffset: 0,3,0,-2,0 RenderUnitTurreted: AutoTarget: LeavesHusk: @@ -333,7 +337,6 @@ MTNK: Prerequisites: hq Owner: gdi Mobile: - Speed: 6 Health: HP: 400 @@ -343,11 +346,12 @@ MTNK: Range: 6 Turreted: ROT: 5 + Armament: + Weapon: 120mm + Recoil: 3 + RecoilRecovery: 0.6 + LocalOffset: 0,0,0,-1,0 AttackTurreted: - PrimaryWeapon: 120mm - PrimaryRecoil: 3 - PrimaryRecoilRecovery: 0.6 - PrimaryLocalOffset: 0,0,0,-1,0 RenderUnitTurreted: AutoTarget: LeavesHusk: @@ -381,14 +385,16 @@ HTNK: Range: 6 Turreted: ROT: 2 + Armament@PRIMARY: + Weapon: 120mmDual + LocalOffset: -5,-5,0,-10,0, 5,-5,0,-10,0 + Recoil: 4 + RecoilRecovery: 1 + Armament@SECONDARY: + Weapon: MammothMissiles + LocalOffset: -9,2,0,0,25, 9,2,0,0,-25 + Recoil: 1 AttackTurreted: - PrimaryWeapon: 120mmDual - SecondaryWeapon: MammothMissiles - PrimaryLocalOffset: -5,-5,0,-10,0, 5,-5,0,-10,0 - SecondaryLocalOffset: -9,2,0,0,25, 9,2,0,0,-25 - PrimaryRecoil: 4 - SecondaryRecoil: 1 - PrimaryRecoilRecovery: 1 RenderUnitTurreted: AutoTarget: SelfHealing: @@ -425,10 +431,11 @@ MSAM: Range: 10 Turreted: ROT: 255 + Offset: 0,6,0,-3 + Armament: + Weapon: 227mm + LocalOffset: 3,-5,0,0,0, -3,-5,0,0,0 AttackFrontal: - PrimaryWeapon: 227mm - PrimaryOffset: 0,6,0,-3 - PrimaryLocalOffset: 3,-5,0,0,0, -3,-5,0,0,0 RenderUnitTurretedAim: AutoTarget: LeavesHusk: @@ -456,11 +463,15 @@ MLRS: Range: 10 Turreted: ROT: 5 + Offset: 0,3,0,-3 + AlignWhenIdle: true + Armament@PRIMARY: + Weapon: Patriot + LocalOffset: -4,0,0,0,0 + Armament@SECONDARY: + Weapon: Patriot + LocalOffset: 4,0,0,0,0 AttackTurreted: - PrimaryWeapon: Patriot - PrimaryOffset: 0,3,0,-3 - PrimaryLocalOffset: -4,0,0,0,0, 4,0,0,0,0 - AlignIdleTurrets: true RenderUnitTurretedAim: AutoTarget: Explodes: @@ -497,10 +508,10 @@ STNK: CloakDelay: 80 CloakSound: trans1.aud UncloakSound: trans1.aud + Armament: + Weapon: 227mm.stnk + LocalOffset: 1,-5,0,-3,0, -1,-5,0,-3,0 AttackFrontal: - PrimaryWeapon: 227mm.stnk - PrimaryOffset: 0,-5,0,-3 - PrimaryLocalOffset: 1,0,0,0,0, -1,0,0,0,0 RenderUnit: AutoTarget: InitialStance: HoldFire diff --git a/mods/d2k/rules/aircraft.yaml b/mods/d2k/rules/aircraft.yaml index 65905d635b..3bbea60e52 100644 --- a/mods/d2k/rules/aircraft.yaml +++ b/mods/d2k/rules/aircraft.yaml @@ -82,9 +82,10 @@ ORNI: Type: Light RevealsShroud: Range: 10 + Armament: + Weapon: ChainGun + LocalOffset: -5,-2,0,2,0 AttackHeli: - PrimaryWeapon: ChainGun - PrimaryOffset: -5,-2,0,2 FacingTolerance: 20 Helicopter: LandWhenIdle: false diff --git a/mods/d2k/rules/atreides.yaml b/mods/d2k/rules/atreides.yaml index d0b32bde23..1ed244ec1c 100644 --- a/mods/d2k/rules/atreides.yaml +++ b/mods/d2k/rules/atreides.yaml @@ -143,11 +143,12 @@ COMBATA: Prerequisites: heavya Owner: atreides BuiltAt: heavya + Armament: + Weapon: 90mma + Recoil: 4 + RecoilRecovery: 0.8 + LocalOffset: 0,-2,0,-3,0 AttackTurreted: - PrimaryWeapon: 90mma - PrimaryRecoil: 4 - PrimaryRecoilRecovery: 0.8 - PrimaryLocalOffset: 0,-2,0,-3,0 RenderUnitTurreted: Image: COMBATA LeavesHusk: @@ -196,9 +197,10 @@ SONICTANK: Range: 6 RenderUnit: Image: SONICTANK + Armament: + Weapon: TTankZap + LocalOffset: 0,-15,0,-10,0 AttackFrontal: - PrimaryWeapon: TTankZap - PrimaryLocalOffset: 0,-15,0,-10,0 AutoTarget: InitialStance: Defend Explodes: @@ -239,8 +241,9 @@ FREMEN: Range: 7 AutoTarget: ScanRadius: 7 + Armament: + Weapon: Sniper AttackFrontal: - PrimaryWeapon: Sniper RenderInfantryProne: -RenderInfantry: TakeCover: diff --git a/mods/d2k/rules/harkonnen.yaml b/mods/d2k/rules/harkonnen.yaml index 4f1c30be0a..a075e72be4 100644 --- a/mods/d2k/rules/harkonnen.yaml +++ b/mods/d2k/rules/harkonnen.yaml @@ -38,9 +38,10 @@ REFH: # Mobile: # ROT: 9 # Speed: 11 +# Armament: +# Weapon: M60mg +# LocalOffset: 0,-1,0,-3,0 # AttackFrontal: -# PrimaryWeapon: M60mg -# PrimaryLocalOffset: 0,-1,0,-3,0 # RenderUnit: # Image: QUAD @@ -213,9 +214,10 @@ DEVAST: RevealsShroud: Range: 7 RenderUnit: + Armament: + Weapon: 120mm + LocalOffset: 5,-16,0,-2,0, -4,-16,0,-2,0 AttackFrontal: - PrimaryWeapon: 120mm - PrimaryLocalOffset: 5,-16,0,-2,0, -4,-16,0,-2,0 AutoTarget: InitialStance: Defend Explodes: @@ -260,6 +262,8 @@ SARDAUKAR: TakeCover: -RenderInfantry: RenderInfantryProne: - AttackFrontal: - PrimaryWeapon: Vulcan - SecondaryWeapon: Slung \ No newline at end of file + Armament@PRIMARY: + Weapon: Vulcan + Armament@SECONDARY: + Weapon: Slung + AttackFrontal: \ No newline at end of file diff --git a/mods/d2k/rules/infantry.yaml b/mods/d2k/rules/infantry.yaml index 3e082b3a6b..96b5d2eb37 100644 --- a/mods/d2k/rules/infantry.yaml +++ b/mods/d2k/rules/infantry.yaml @@ -16,8 +16,9 @@ RIFLE: HP: 50 Mobile: Speed: 5 + Armament: + Weapon: M1Carbine AttackFrontal: - PrimaryWeapon: M1Carbine TakeCover: -RenderInfantry: RenderInfantryProne: @@ -69,10 +70,13 @@ BAZOOKA: HP: 45 Mobile: Speed: 4 + Armament@PRIMARY: + Weapon: RedEye + LocalOffset: 0,0,0,-13,0 + Armament@SECONDARY: + Weapon: Dragon + LocalOffset: 0,0,0,-13,0 AttackFrontal: - PrimaryWeapon: RedEye - SecondaryWeapon: Dragon - PrimaryOffset: 0,0,0,-13 TakeCover: -RenderInfantry: RenderInfantryProne: @@ -100,8 +104,9 @@ MEDIC: Mobile: Speed: 4 AutoHeal: + Armament: + Weapon: Heal AttackMedic: - PrimaryWeapon: Heal Passenger: PipType: Blue -AutoTarget: diff --git a/mods/d2k/rules/ordos.yaml b/mods/d2k/rules/ordos.yaml index 921ea2ba56..5260429370 100644 --- a/mods/d2k/rules/ordos.yaml +++ b/mods/d2k/rules/ordos.yaml @@ -158,10 +158,10 @@ TRIKEO: Speed: 14 RenderUnit: Image: RAIDER + Armament: + Weapon: M60mgo + LocalOffset: 0,-6,0,-3,0 AttackFrontal: - PrimaryWeapon: M60mgo - PrimaryOffset: 0,-6,0,-3 - #PrimaryLocalOffset: 1,0,0,-3,0, -1,0,0,-3,0 @@ -212,9 +212,10 @@ DEVIATORTANK: RevealsShroud: Range: 5 RenderUnit: + Armament: + Weapon: FakeMissile + LocalOffset: 0,7,0,-2,0 #7 AttackLoyalty: - PrimaryWeapon: FakeMissile - PrimaryLocalOffset: 0,7,0,-2,0 #7 AutoTarget: InitialStance: Defend Explodes: diff --git a/mods/d2k/rules/structures.yaml b/mods/d2k/rules/structures.yaml index 6c4fa4720d..e65417c105 100644 --- a/mods/d2k/rules/structures.yaml +++ b/mods/d2k/rules/structures.yaml @@ -474,9 +474,10 @@ GUNTOWER: Turreted: ROT: 6 InitialFacing: 128 + Armament: + Weapon: TurretGun + LocalOffset: 0,-11,0,-7,0 AttackTurreted: - PrimaryWeapon: TurretGun - PrimaryLocalOffset: 0,-11,0,-7,0 AutoTarget: LeavesHusk: HuskActor: Guntower.Husk @@ -529,9 +530,10 @@ ROCKETTOWER: #-AutoTargetIgnore: RenderBuildingSeparateTurret: # HasMakeAnimation: false + Armament: + Weapon: TowerMissile + LocalOffset: 14,-2,0,-11,0, -14,-2,0,-11,0 AttackTurreted: - PrimaryWeapon: TowerMissile - PrimaryLocalOffset: 14,-2,0,-11,0, -14,-2,0,-11,0 Turreted: ROT: 8 InitialFacing: 128 diff --git a/mods/d2k/rules/system.yaml b/mods/d2k/rules/system.yaml index 249ccc16e9..7d0dd0623b 100644 --- a/mods/d2k/rules/system.yaml +++ b/mods/d2k/rules/system.yaml @@ -541,8 +541,9 @@ SPICEBLOOM: # AttackMove: # JustMove: true # AttackWander: +# Armament: +# Weapon: WormJaw # AttackLeap: -# PrimaryWeapon: WormJaw # CanAttackGround: no # RenderInfantry: # BelowUnits: diff --git a/mods/d2k/rules/vehicles.yaml b/mods/d2k/rules/vehicles.yaml index cc26f42ab6..6041a96efa 100644 --- a/mods/d2k/rules/vehicles.yaml +++ b/mods/d2k/rules/vehicles.yaml @@ -131,10 +131,10 @@ HARVESTER.starport: Range: 8 RenderUnit: WithMuzzleFlash: + Armament: + Weapon: M60mg + LocalOffset: 0,-6,0,-3, 0 AttackFrontal: - PrimaryWeapon: M60mg - PrimaryOffset: 0,-6,0,-3 - #PrimaryLocalOffset: 1,-1,0,-3,0, -1,-1,0,-3,0 AutoTarget: InitialStance: Defend Explodes: @@ -172,9 +172,10 @@ QUAD: Range: 7 RenderUnit: Image: QUAD + Armament: + Weapon: QuadRockets + LocalOffset: 0,-3,0,-2,0 #-4 AttackFrontal: - PrimaryWeapon: QuadRockets - PrimaryLocalOffset: 0,-3,0,-2,0 #-4 AutoTarget: InitialStance: Defend Explodes: @@ -213,12 +214,13 @@ QUAD.starport: Range: 6 Turreted: ROT: 6 + AlignWhenIdle: true + Armament: + Weapon: 90mm + Recoil: 4 + RecoilRecovery: 0.8 + LocalOffset: 0,-2,0,-3,0 AttackTurreted: - AlignIdleTurrets: true - PrimaryWeapon: 90mm - PrimaryRecoil: 4 - PrimaryRecoilRecovery: 0.8 - PrimaryLocalOffset: 0,-2,0,-3,0 RenderUnitTurreted: AutoTarget: InitialStance: Defend @@ -265,11 +267,12 @@ SIEGETANK: Range: 5 Turreted: ROT: 3 + Armament: + Weapon: 155mm + Recoil: 7 + RecoilRecovery: 0.45 + LocalOffset: 0,-4,0,-7,0 AttackFrontal: - PrimaryWeapon: 155mm - PrimaryRecoil: 7 - PrimaryRecoilRecovery: 0.45 - PrimaryLocalOffset: 0,-4,0,-7,0 RenderUnitTurreted: Image: SIEGETANK Explodes: @@ -328,9 +331,10 @@ MISSILETANK: Range: 6 RenderUnit: Image: MISSILETANK + Armament: + Weapon: 227mm + LocalOffset: 3,5,0,-4,0, -6,5,0,-4,0 AttackFrontal: - PrimaryWeapon: 227mm - PrimaryLocalOffset: 3,5,0,-4,0, -6,5,0,-4,0 AutoTarget: InitialStance: Defend Explodes: diff --git a/mods/ra-classic/rules/aircraft.yaml b/mods/ra-classic/rules/aircraft.yaml index df66667650..212037e996 100644 --- a/mods/ra-classic/rules/aircraft.yaml +++ b/mods/ra-classic/rules/aircraft.yaml @@ -83,9 +83,10 @@ MIG: Type: Light RevealsShroud: Range: 12 + Armament: + Weapon: Maverick + LocalOffset: -15,0,0,0,-10, 15,0,0,0,6 AttackPlane: - PrimaryWeapon: Maverick - PrimaryLocalOffset: -15,0,0,0,-10, 15,0,0,0,6 FacingTolerance: 20 Plane: InitialFacing: 192 @@ -127,11 +128,13 @@ YAK: Type: Light RevealsShroud: Range: 10 + Armament@PRIMARY: + Weapon: ChainGun + LocalOffset: -5,-6,0,0,0 + Armament@SECONDARY: + Weapon: ChainGun + LocalOffset: 5,-6,0,0,0 AttackPlane: - PrimaryWeapon: ChainGun - SecondaryWeapon: ChainGun - PrimaryOffset: -5,-6,0,0 - SecondaryOffset: 5,-6,0,0 FacingTolerance: 20 Plane: RearmBuildings: afld @@ -215,9 +218,10 @@ HELI: Type: Heavy RevealsShroud: Range: 12 + Armament: + Weapon: HellfireAG + LocalOffset: -5,0,0,2,0 AttackHeli: - PrimaryWeapon: HellfireAG - PrimaryOffset: -5,0,0,2 FacingTolerance: 20 Helicopter: RearmBuildings: hpad @@ -256,11 +260,13 @@ HIND: Type: Heavy RevealsShroud: Range: 10 + Armament@PRIMARY: + Weapon: ChainGun + LocalOffset: -5,-2,0,2,0 + Armament@SECONDARY: + Weapon: ChainGun + LocalOffset: 5,-2,0,2,0 AttackHeli: - PrimaryWeapon: ChainGun - SecondaryWeapon: ChainGun - PrimaryOffset: -5,-2,0,2 - SecondaryOffset: 5,-2,0,2 FacingTolerance: 20 Helicopter: RearmBuildings: hpad diff --git a/mods/ra-classic/rules/defaults.yaml b/mods/ra-classic/rules/defaults.yaml index ad82b4119e..5c7bd24429 100644 --- a/mods/ra-classic/rules/defaults.yaml +++ b/mods/ra-classic/rules/defaults.yaml @@ -249,8 +249,9 @@ Speed: 4 RevealsShroud: Range: 2 + Armament: + Weapon: Pistol AttackFrontal: - PrimaryWeapon: Pistol ProximityCaptor: Types:CivilianInfantry -RenderInfantry: diff --git a/mods/ra-classic/rules/infantry.yaml b/mods/ra-classic/rules/infantry.yaml index 1079d02e8b..f2f9ad31b9 100644 --- a/mods/ra-classic/rules/infantry.yaml +++ b/mods/ra-classic/rules/infantry.yaml @@ -20,8 +20,9 @@ DOG: RevealsShroud: Range: 5 AutoTarget: + Armament: + Weapon: DogJaw AttackLeap: - PrimaryWeapon: DogJaw CanAttackGround: no RenderInfantry: IdleAnimations: idle1,idle2 @@ -44,8 +45,9 @@ E1: HP: 50 Mobile: Speed: 4 + Armament: + Weapon: M1Carbine AttackFrontal: - PrimaryWeapon: M1Carbine TakeCover: -RenderInfantry: RenderInfantryProne: @@ -69,10 +71,11 @@ E2: HP: 50 Mobile: Speed: 5 - AttackFrontal: - PrimaryWeapon: Grenade - PrimaryOffset: 0,0,0,-13 + Armament: + Weapon: Grenade + LocalOffset: 0,0,0,-13,0 FireDelay: 15 + AttackFrontal: TakeCover: -RenderInfantry: RenderInfantryProne: @@ -98,10 +101,13 @@ E3: HP: 45 Mobile: Speed: 3 + Armament@PRIMARY: + Weapon: RedEye + LocalOffset: 0,0,0,-13,0 + Armament@SECONDARY: + Weapon: Dragon + LocalOffset: 0,0,0,-13,0 AttackFrontal: - PrimaryWeapon: RedEye - SecondaryWeapon: Dragon - PrimaryOffset: 0,0,0,-13 TakeCover: -RenderInfantry: RenderInfantryProne: @@ -125,10 +131,11 @@ E4: HP: 40 Mobile: Speed: 3 - AttackFrontal: - PrimaryWeapon: Flamer - PrimaryOffset: 0,-10,0,-8 + Armament: + Weapon: Flamer + LocalOffset: 0,-10,0,-8,0 FireDelay: 8 + AttackFrontal: TakeCover: -RenderInfantry: RenderInfantryProne: @@ -254,9 +261,11 @@ E7: C4Delay: 45 Passenger: PipType: Red + Armament@PRIMARY: + Weapon: Colt45 + Armament@SECONDARY: + Weapon: Colt45 AttackFrontal: - PrimaryWeapon: Colt45 - SecondaryWeapon: Colt45 TakeCover: -RenderInfantry: RenderInfantryProne: @@ -286,8 +295,9 @@ MEDI: Passenger: PipType: Yellow AutoHeal: + Armament: + Weapon: Heal AttackMedic: - PrimaryWeapon: Heal TakeCover: -AutoTarget: AttackMove: @@ -320,8 +330,9 @@ MECH: Passenger: PipType: Yellow AutoHeal: + Armament: + Weapon: Repair AttackMedic: - PrimaryWeapon: Repair TakeCover: -AutoTarget: AttackMove: @@ -371,9 +382,10 @@ SHOK: Speed: 3 RevealsShroud: Range: 4 + Armament: + Weapon: PortaTesla + LocalOffset: 0,-10,0,-8,0 AttackFrontal: - PrimaryWeapon: PortaTesla - PrimaryOffset: 0,-10,0,-8 TakeCover: -RenderInfantry: RenderInfantryProne: diff --git a/mods/ra-classic/rules/ships.yaml b/mods/ra-classic/rules/ships.yaml index 124aab938b..33b1f9fc9b 100644 --- a/mods/ra-classic/rules/ships.yaml +++ b/mods/ra-classic/rules/ships.yaml @@ -30,10 +30,11 @@ SS: CloakDelay: 50 CloakSound: subshow1.aud UncloakSound: subshow1.aud - AttackFrontal: - PrimaryWeapon: TorpTube - PrimaryLocalOffset: -4,0,0,0,0, 4,0,0,0,0 + Armament: + Weapon: TorpTube + LocalOffset: -4,0,0,0,0, 4,0,0,0,0 FireDelay: 2 + AttackFrontal: Selectable: Bounds: 38,38 Chronoshiftable: @@ -76,9 +77,10 @@ MSUB: CloakDelay: 100 CloakSound: subshow1.aud UncloakSound: subshow1.aud - AttackFrontal: - PrimaryWeapon: SubMissile + Armament: + Weapon: SubMissile FireDelay: 2 + AttackFrontal: Selectable: Bounds: 44,44 Chronoshiftable: @@ -113,11 +115,14 @@ DD: Range: 6 Turreted: ROT: 7 + Offset: 0,-8,0,-3 + Armament@PRIMARY: + Weapon: Stinger + LocalOffset: -4,0,0,0,-20, 4,0,0,0,20 + Armament@SECONDARY: + Weapon: DepthCharge + LocalOffset: -4,0,0,0,-20, 4,0,0,0,20 AttackTurreted: - PrimaryWeapon: Stinger - SecondaryWeapon: DepthCharge - PrimaryOffset: 0,-8,0,-3 - PrimaryLocalOffset: -4,0,0,0,-20, 4,0,0,0,20 Selectable: Bounds: 38,38 RenderUnitTurreted: @@ -151,19 +156,27 @@ CA: Speed: 4 RevealsShroud: Range: 7 - Turreted: + Turreted@PRIMARY: + Turret: primary + Offset: 0,17,0,-2 ROT: 3 + Turreted@SECONDARY: + Turret: secondary + Offset: 0,-17,0,-2 + ROT: 3 + Armament@PRIMARY: + Turret: primary + Weapon: 8Inch + LocalOffset: -4,-5,0,0,0, 4,-5,0,0,0 + Recoil: 4 + RecoilRecovery: 0.8 + Armament@SECONDARY: + Turret: secondary + Weapon: 8Inch + LocalOffset: -4,-5,0,0,0, 4,-5,0,0,0 + Recoil: 4 + RecoilRecovery: 0.8 AttackTurreted: - PrimaryWeapon: 8Inch - SecondaryWeapon: 8Inch - PrimaryOffset: 0,17,0,-2 - SecondaryOffset: 0,-17,0,-2 - PrimaryLocalOffset: -4,-5,0,0,0, 4,-5,0,0,0 - SecondaryLocalOffset: -4,-5,0,0,0, 4,-5,0,0,0 - PrimaryRecoil: 4 - SecondaryRecoil: 4 - PrimaryRecoilRecovery: 0.8 - SecondaryRecoilRecovery: 0.8 Selectable: Bounds: 44,44 RenderUnitTurreted: @@ -226,10 +239,12 @@ PT: Range: 7 Turreted: ROT: 7 + Offset: 0,-6,0,-1 + Armament@PRIMARY: + Weapon: 2Inch + Armament@SECONDARY: + Weapon: DepthCharge AttackTurreted: - PrimaryWeapon: 2Inch - SecondaryWeapon: DepthCharge - PrimaryOffset: 0,-6,0,-1 Selectable: Bounds: 32,32 RenderUnitTurreted: diff --git a/mods/ra-classic/rules/structures.yaml b/mods/ra-classic/rules/structures.yaml index 1bbfced3e2..c9ca061999 100644 --- a/mods/ra-classic/rules/structures.yaml +++ b/mods/ra-classic/rules/structures.yaml @@ -315,10 +315,11 @@ TSLA: RevealsShroud: Range: 8 RenderBuildingCharge: + Armament: + Weapon: TeslaZap + LocalOffset: 0,0,0,-10,0 AttackTesla: - PrimaryWeapon: TeslaZap ReloadTime: 120 - PrimaryOffset: 0,0,0,-10 AutoTarget: IronCurtainable: -RenderBuilding: @@ -354,9 +355,11 @@ AGUN: ROT: 15 InitialFacing: 224 RenderBuildingTurreted: + Armament@PRIMARY: + Weapon: ZSU-23 + Armament@SECONDARY: + Weapon: ZSU-23 AttackTurreted: - PrimaryWeapon: ZSU-23 - SecondaryWeapon: ZSU-23 AutoTarget: IronCurtainable: -RenderBuilding: @@ -419,9 +422,10 @@ PBOX: IronCurtainable: RenderRangeCircle: AutoTarget: + Armament: + Weapon: Vulcan + LocalOffset: 0,-11,0,0,0 AttackTurreted: - PrimaryWeapon: Vulcan - PrimaryLocalOffset: 0,-11,0,0,0 WithMuzzleFlash: Turreted: ROT: 255 @@ -452,9 +456,10 @@ HBOX: IronCurtainable: RenderRangeCircle: AutoTarget: + Armament: + Weapon: Vulcan + LocalOffset: 0,-11,0,0,0 AttackTurreted: - PrimaryWeapon: Vulcan - PrimaryLocalOffset: 0,-11,0,0,0 WithMuzzleFlash: Turreted: ROT: 255 @@ -485,8 +490,9 @@ GUN: ROT: 12 InitialFacing: 50 RenderBuildingTurreted: + Armament: + Weapon: TurretGun AttackTurreted: - PrimaryWeapon: TurretGun AutoTarget: IronCurtainable: -RenderBuilding: @@ -516,10 +522,11 @@ FTUR: Range: 6 Turreted: ROT: 255 + Offset: 0,0,0,-2 + Armament: + Weapon: FireballLauncher + LocalOffset: 0,-12,0,0,0 AttackTurreted: - PrimaryWeapon: FireballLauncher - PrimaryOffset: 0,0,0,-2 - PrimaryLocalOffset: 0,-12,0,0,0 AutoTarget: IronCurtainable: RenderRangeCircle: @@ -552,8 +559,9 @@ SAM: ROT: 30 InitialFacing: 0 RenderBuildingTurreted: + Armament: + Weapon: Nike AttackTurreted: - PrimaryWeapon: Nike WithMuzzleFlash: AutoTarget: IronCurtainable: diff --git a/mods/ra-classic/rules/vehicles.yaml b/mods/ra-classic/rules/vehicles.yaml index e90d246c3c..fb71ff842a 100644 --- a/mods/ra-classic/rules/vehicles.yaml +++ b/mods/ra-classic/rules/vehicles.yaml @@ -18,8 +18,9 @@ V2RL: Speed: 7 RevealsShroud: Range: 5 + Armament: + Weapon: SCUD AttackFrontal: - PrimaryWeapon: SCUD RenderUnitReload: AutoTarget: Explodes: @@ -48,10 +49,11 @@ V2RL: Range: 4 Turreted: ROT: 5 + Armament: + Weapon: 25mm + Recoil: 2 + RecoilRecovery: 0.5 AttackTurreted: - PrimaryWeapon: 25mm - PrimaryRecoil: 2 - PrimaryRecoilRecovery: 0.5 RenderUnitTurreted: AutoTarget: Explodes: @@ -80,10 +82,11 @@ V2RL: Range: 5 Turreted: ROT: 5 + Armament: + Weapon: 90mm + Recoil: 3 + RecoilRecovery: 0.9 AttackTurreted: - PrimaryWeapon: 90mm - PrimaryRecoil: 3 - PrimaryRecoilRecovery: 0.9 RenderUnitTurreted: AutoTarget: Explodes: @@ -114,11 +117,12 @@ V2RL: Range: 5 Turreted: ROT: 5 + Armament: + Weapon: 105mm + Recoil: 3 + RecoilRecovery: 0.9 + LocalOffset: 2,0,0,0,0, -2,0,0,0,0 AttackTurreted: - PrimaryWeapon: 105mm - PrimaryRecoil: 3 - PrimaryRecoilRecovery: 0.9 - PrimaryLocalOffset: 2,0,0,0,0, -2,0,0,0,0 RenderUnitTurreted: AutoTarget: Explodes: @@ -150,13 +154,15 @@ V2RL: Range: 6 Turreted: ROT: 2 + Armament@PRIMARY: + Weapon: 120mm + LocalOffset: -4,-5,0,0,0, 4,-5,0,0,0 + Recoil: 4 + RecoilRecovery: 0.7 + Armament@SECONDARY: + Weapon: MammothTusk + LocalOffset: -7,2,0,0,25, 7,2,0,0,-25 AttackTurreted: - PrimaryWeapon: 120mm - SecondaryWeapon: MammothTusk - PrimaryLocalOffset: -4,-5,0,0,0, 4,-5,0,0,0 - SecondaryLocalOffset: -7,2,0,0,25, 7,2,0,0,-25 - PrimaryRecoil: 4 - PrimaryRecoilRecovery: 0.7 RenderUnitTurreted: AutoTarget: Explodes: @@ -190,8 +196,9 @@ ARTY: Speed: 6 RevealsShroud: Range: 5 + Armament: + Weapon: 155mm AttackFrontal: - PrimaryWeapon: 155mm RenderUnit: Explodes: Weapon: UnitExplode @@ -298,9 +305,10 @@ JEEP: Range: 6 Turreted: ROT: 10 + Offset: 0,0,0,-2 + Armament: + Weapon: M60mg AttackTurreted: - PrimaryWeapon: M60mg - PrimaryOffset: 0,0,0,-2 WithMuzzleFlash: RenderUnitTurreted: Explodes: @@ -328,9 +336,10 @@ APC: Crushes: wall, atmine, crate, infantry RevealsShroud: Range: 5 + Armament: + Weapon: M60mg + LocalOffset: 0,0,0,-4,0 AttackFrontal: - PrimaryWeapon: M60mg - PrimaryOffset: 0,0,0,-4 RenderUnit: WithMuzzleFlash: AutoTarget: @@ -434,9 +443,10 @@ TTNK: Crushes: wall, atmine, crate, infantry RevealsShroud: Range: 7 + Armament: + Weapon: TTankZap + LocalOffset: 0,0,0,-5,0 AttackFrontal: - PrimaryWeapon: TTankZap - PrimaryOffset: 0,0,0,-5 RenderUnitSpinner: Selectable: Bounds: 28,28,0,0 @@ -500,10 +510,12 @@ CTNK: Range: 6 RenderUnit: AutoTarget: + Armament@PRIMARY: + Weapon: ChronoTusk + LocalOffset: -4,0,0,0,0, -4,0,0,0,0 + Armament@SECONDARY: + Weapon: ChronoTusk + LocalOffset: 4,0,0,0,25, 4,0,0,0,-25 AttackFrontal: - PrimaryWeapon: ChronoTusk - SecondaryWeapon: ChronoTusk - PrimaryLocalOffset: -4,0,0,0,0, -4,0,0,0,0 - SecondaryLocalOffset: 4,0,0,0,25, 4,0,0,0,-25 ChronoshiftDeploy: EmptyWeapon: UnitExplodeSmall \ No newline at end of file diff --git a/mods/ra/maps/bomber-john.oramap b/mods/ra/maps/bomber-john.oramap deleted file mode 100644 index 69d5763f51..0000000000 Binary files a/mods/ra/maps/bomber-john.oramap and /dev/null differ diff --git a/mods/ra/maps/bomber-john/brick.shp b/mods/ra/maps/bomber-john/brick.shp new file mode 100755 index 0000000000..9f90058412 Binary files /dev/null and b/mods/ra/maps/bomber-john/brick.shp differ diff --git a/mods/ra/maps/bomber-john/jmin.shp b/mods/ra/maps/bomber-john/jmin.shp new file mode 100755 index 0000000000..e8891267b0 Binary files /dev/null and b/mods/ra/maps/bomber-john/jmin.shp differ diff --git a/mods/ra/maps/bomber-john/map.bin b/mods/ra/maps/bomber-john/map.bin new file mode 100755 index 0000000000..8c65fb649c Binary files /dev/null and b/mods/ra/maps/bomber-john/map.bin differ diff --git a/mods/ra/maps/bomber-john/map.yaml b/mods/ra/maps/bomber-john/map.yaml new file mode 100755 index 0000000000..85e08d04e1 --- /dev/null +++ b/mods/ra/maps/bomber-john/map.yaml @@ -0,0 +1,959 @@ +Selectable: True + +MapFormat: 5 + +Title: Bomber John + +Description: Lay mines, wait for them to explode, kill your enemies. + +Author: Holloweye + +Tileset: TEMPERAT + +MapSize: 56,56 + +Bounds: 16,16,24,24 + +UseAsShellmap: False + +Type: Minigame + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Race: allies + PlayerReference@Creeps: + Name: Creeps + NonCombatant: True + Race: allies + Enemies: Multi0,Multi1,Multi2,Multi3,Multi4,Multi5,Multi6,Multi17 + PlayerReference@Multi0: + Name: Multi0 + Playable: True + LockRace: True + Race: soviet + Enemies: Multi1,Multi2,Multi3,Multi4,Multi5,Multi6,Multi17 + PlayerReference@Multi1: + Name: Multi1 + Playable: True + LockRace: True + Race: soviet + Enemies: Multi0,Multi2,Multi3,Multi4,Multi5,Multi6,Multi17 + PlayerReference@Multi2: + Name: Multi2 + Playable: True + LockRace: True + Race: soviet + Enemies: Multi0,Multi1,Multi3,Multi4,Multi5,Multi6,Multi17 + PlayerReference@Multi3: + Name: Multi3 + Playable: True + LockRace: True + Race: soviet + Enemies: Multi0,Multi1,Multi2,Multi4,Multi5,Multi6,Multi17 + PlayerReference@Multi4: + Name: Multi4 + Playable: True + LockRace: True + Race: soviet + Enemies: Multi0,Multi1,Multi2,Multi3,Multi5,Multi6,Multi17 + PlayerReference@Multi5: + Name: Multi5 + Playable: True + LockRace: True + Race: soviet + Enemies: Multi0,Multi2,Multi3,Multi4,Multi1,Multi6,Multi17 + PlayerReference@Multi6: + Name: Multi6 + Playable: True + LockRace: True + Race: soviet + Enemies: Multi0,Multi2,Multi3,Multi4,Multi5,Multi1,Multi17 + PlayerReference@Multi7: + Name: Multi7 + Playable: True + LockRace: True + Race: soviet + Enemies: Multi0,Multi2,Multi3,Multi4,Multi5,Multi6,Multi11 + +Actors: + Actor69: ftur + Location: 39,16 + Owner: Creeps + Actor1: T17 + Location: 16,17 + Owner: Neutral + Actor2: T17 + Location: 16,18 + Owner: Neutral + Actor3: T17 + Location: 16,19 + Owner: Neutral + Actor4: T17 + Location: 16,20 + Owner: Neutral + Actor5: T17 + Location: 16,21 + Owner: Neutral + Actor6: T17 + Location: 16,22 + Owner: Neutral + Actor7: T17 + Location: 16,23 + Owner: Neutral + Actor8: T17 + Location: 16,24 + Owner: Neutral + Actor9: T17 + Location: 16,25 + Owner: Neutral + Actor10: T17 + Location: 16,26 + Owner: Neutral + Actor11: T17 + Location: 16,27 + Owner: Neutral + Actor12: T17 + Location: 16,28 + Owner: Neutral + Actor13: T17 + Location: 16,29 + Owner: Neutral + Actor14: T17 + Location: 16,30 + Owner: Neutral + Actor15: T17 + Location: 16,31 + Owner: Neutral + Actor16: T17 + Location: 16,32 + Owner: Neutral + Actor17: T17 + Location: 16,33 + Owner: Neutral + Actor18: T17 + Location: 16,34 + Owner: Neutral + Actor19: T17 + Location: 16,35 + Owner: Neutral + Actor20: T17 + Location: 16,36 + Owner: Neutral + Actor21: T17 + Location: 16,37 + Owner: Neutral + Actor22: T17 + Location: 16,38 + Owner: Neutral + Actor46: ftur + Location: 39,39 + Owner: Creeps + Actor24: T17 + Location: 17,39 + Owner: Neutral + Actor25: T17 + Location: 18,39 + Owner: Neutral + Actor26: T17 + Location: 19,39 + Owner: Neutral + Actor27: T17 + Location: 20,39 + Owner: Neutral + Actor28: T17 + Location: 21,39 + Owner: Neutral + Actor29: T17 + Location: 22,39 + Owner: Neutral + Actor30: T17 + Location: 23,39 + Owner: Neutral + Actor31: T17 + Location: 24,39 + Owner: Neutral + Actor32: T17 + Location: 25,39 + Owner: Neutral + Actor33: T17 + Location: 26,39 + Owner: Neutral + Actor34: T17 + Location: 27,39 + Owner: Neutral + Actor35: T17 + Location: 28,39 + Owner: Neutral + Actor36: T17 + Location: 29,39 + Owner: Neutral + Actor37: T17 + Location: 30,39 + Owner: Neutral + Actor38: T17 + Location: 31,39 + Owner: Neutral + Actor39: T17 + Location: 32,39 + Owner: Neutral + Actor40: T17 + Location: 33,39 + Owner: Neutral + Actor41: T17 + Location: 34,39 + Owner: Neutral + Actor42: T17 + Location: 35,39 + Owner: Neutral + Actor43: T17 + Location: 36,39 + Owner: Neutral + Actor44: T17 + Location: 37,39 + Owner: Neutral + Actor45: T17 + Location: 38,39 + Owner: Neutral + Actor23: ftur + Location: 16,39 + Owner: Creeps + Actor47: T17 + Location: 39,38 + Owner: Neutral + Actor48: T17 + Location: 39,37 + Owner: Neutral + Actor49: T17 + Location: 39,36 + Owner: Neutral + Actor50: T17 + Location: 39,35 + Owner: Neutral + Actor51: T17 + Location: 39,34 + Owner: Neutral + Actor52: T17 + Location: 39,33 + Owner: Neutral + Actor53: T17 + Location: 39,32 + Owner: Neutral + Actor54: T17 + Location: 39,31 + Owner: Neutral + Actor55: T17 + Location: 39,30 + Owner: Neutral + Actor56: T17 + Location: 39,29 + Owner: Neutral + Actor57: T17 + Location: 39,28 + Owner: Neutral + Actor58: T17 + Location: 39,27 + Owner: Neutral + Actor59: T17 + Location: 39,26 + Owner: Neutral + Actor60: T17 + Location: 39,25 + Owner: Neutral + Actor61: T17 + Location: 39,24 + Owner: Neutral + Actor62: T17 + Location: 39,23 + Owner: Neutral + Actor63: T17 + Location: 39,22 + Owner: Neutral + Actor64: T17 + Location: 39,21 + Owner: Neutral + Actor65: T17 + Location: 39,20 + Owner: Neutral + Actor66: T17 + Location: 39,19 + Owner: Neutral + Actor67: T17 + Location: 39,18 + Owner: Neutral + Actor68: T17 + Location: 39,17 + Owner: Neutral + Actor0: ftur + Location: 16,16 + Owner: Creeps + Actor70: T17 + Location: 38,16 + Owner: Neutral + Actor71: T17 + Location: 37,16 + Owner: Neutral + Actor72: T17 + Location: 36,16 + Owner: Neutral + Actor73: T17 + Location: 35,16 + Owner: Neutral + Actor74: T17 + Location: 34,16 + Owner: Neutral + Actor75: T17 + Location: 33,16 + Owner: Neutral + Actor76: T17 + Location: 32,16 + Owner: Neutral + Actor77: T17 + Location: 31,16 + Owner: Neutral + Actor78: T17 + Location: 30,16 + Owner: Neutral + Actor79: T17 + Location: 29,16 + Owner: Neutral + Actor80: T17 + Location: 28,16 + Owner: Neutral + Actor81: T17 + Location: 27,16 + Owner: Neutral + Actor82: T17 + Location: 26,16 + Owner: Neutral + Actor83: T17 + Location: 25,16 + Owner: Neutral + Actor84: T17 + Location: 24,16 + Owner: Neutral + Actor85: T17 + Location: 23,16 + Owner: Neutral + Actor86: T17 + Location: 22,16 + Owner: Neutral + Actor87: T17 + Location: 21,16 + Owner: Neutral + Actor88: T17 + Location: 20,16 + Owner: Neutral + Actor89: T17 + Location: 19,16 + Owner: Neutral + Actor90: T17 + Location: 18,16 + Owner: Neutral + Actor91: T17 + Location: 17,16 + Owner: Neutral + Actor92: T17 + Location: 18,18 + Owner: Neutral + Actor93: T17 + Location: 18,20 + Owner: Neutral + Actor94: T17 + Location: 18,22 + Owner: Neutral + Actor95: T17 + Location: 18,24 + Owner: Neutral + Actor96: T17 + Location: 18,26 + Owner: Neutral + Actor97: T17 + Location: 18,28 + Owner: Neutral + Actor98: T17 + Location: 18,30 + Owner: Neutral + Actor99: T17 + Location: 18,32 + Owner: Neutral + Actor100: T17 + Location: 18,34 + Owner: Neutral + Actor101: T17 + Location: 18,36 + Owner: Neutral + Actor102: T17 + Location: 18,38 + Owner: Neutral + Actor103: T17 + Location: 20,37 + Owner: Neutral + Actor104: T17 + Location: 20,35 + Owner: Neutral + Actor105: T17 + Location: 20,33 + Owner: Neutral + Actor106: T17 + Location: 20,31 + Owner: Neutral + Actor107: T17 + Location: 20,29 + Owner: Neutral + Actor108: T17 + Location: 20,27 + Owner: Neutral + Actor109: T17 + Location: 20,25 + Owner: Neutral + Actor110: T17 + Location: 20,23 + Owner: Neutral + Actor111: T17 + Location: 20,21 + Owner: Neutral + Actor112: T17 + Location: 20,19 + Owner: Neutral + Actor113: T17 + Location: 20,17 + Owner: Neutral + Actor114: T17 + Location: 22,18 + Owner: Neutral + Actor115: T17 + Location: 22,20 + Owner: Neutral + Actor116: T17 + Location: 22,22 + Owner: Neutral + Actor117: T17 + Location: 22,24 + Owner: Neutral + Actor118: T17 + Location: 22,26 + Owner: Neutral + Actor119: T17 + Location: 22,28 + Owner: Neutral + Actor120: T17 + Location: 22,30 + Owner: Neutral + Actor121: T17 + Location: 22,32 + Owner: Neutral + Actor122: T17 + Location: 22,34 + Owner: Neutral + Actor123: T17 + Location: 22,36 + Owner: Neutral + Actor124: T17 + Location: 22,38 + Owner: Neutral + Actor125: T17 + Location: 24,37 + Owner: Neutral + Actor126: T17 + Location: 24,35 + Owner: Neutral + Actor127: T17 + Location: 24,33 + Owner: Neutral + Actor128: T17 + Location: 24,31 + Owner: Neutral + Actor129: T17 + Location: 24,29 + Owner: Neutral + Actor130: T17 + Location: 24,27 + Owner: Neutral + Actor131: T17 + Location: 24,25 + Owner: Neutral + Actor132: T17 + Location: 24,23 + Owner: Neutral + Actor133: T17 + Location: 24,21 + Owner: Neutral + Actor134: T17 + Location: 24,19 + Owner: Neutral + Actor135: T17 + Location: 24,17 + Owner: Neutral + Actor136: T17 + Location: 26,18 + Owner: Neutral + Actor137: T17 + Location: 26,20 + Owner: Neutral + Actor138: T17 + Location: 26,22 + Owner: Neutral + Actor139: T17 + Location: 26,24 + Owner: Neutral + Actor162: mpspawn + Location: 36,26 + Owner: Neutral + Actor153: mpspawn + Location: 36,36 + Owner: Neutral + Actor142: T17 + Location: 26,30 + Owner: Neutral + Actor143: T17 + Location: 26,32 + Owner: Neutral + Actor144: T17 + Location: 26,34 + Owner: Neutral + Actor145: T17 + Location: 26,36 + Owner: Neutral + Actor146: T17 + Location: 26,38 + Owner: Neutral + Actor147: T17 + Location: 28,37 + Owner: Neutral + Actor148: T17 + Location: 28,35 + Owner: Neutral + Actor149: T17 + Location: 28,33 + Owner: Neutral + Actor150: T17 + Location: 28,31 + Owner: Neutral + Actor152: mpspawn + Location: 28,36 + Owner: Neutral + Actor163: mpspawn + Location: 36,18 + Owner: Neutral + Actor141: mpspawn + Location: 19,27 + Owner: Neutral + Actor154: T17 + Location: 28,23 + Owner: Neutral + Actor155: T17 + Location: 28,21 + Owner: Neutral + Actor156: T17 + Location: 28,19 + Owner: Neutral + Actor157: T17 + Location: 28,17 + Owner: Neutral + Actor158: T17 + Location: 30,18 + Owner: Neutral + Actor159: T17 + Location: 30,20 + Owner: Neutral + Actor160: T17 + Location: 30,22 + Owner: Neutral + Actor161: T17 + Location: 30,24 + Owner: Neutral + Actor140: mpspawn + Location: 19,19 + Owner: Neutral + Actor151: mpspawn + Location: 19,36 + Owner: Neutral + Actor164: T17 + Location: 30,30 + Owner: Neutral + Actor165: T17 + Location: 30,32 + Owner: Neutral + Actor166: T17 + Location: 30,34 + Owner: Neutral + Actor167: T17 + Location: 30,36 + Owner: Neutral + Actor168: T17 + Location: 30,38 + Owner: Neutral + Actor169: T17 + Location: 32,37 + Owner: Neutral + Actor170: T17 + Location: 32,35 + Owner: Neutral + Actor171: T17 + Location: 32,33 + Owner: Neutral + Actor172: T17 + Location: 32,31 + Owner: Neutral + Actor173: T17 + Location: 32,29 + Owner: Neutral + Actor174: T17 + Location: 32,27 + Owner: Neutral + Actor175: T17 + Location: 32,25 + Owner: Neutral + Actor176: T17 + Location: 32,23 + Owner: Neutral + Actor177: T17 + Location: 32,21 + Owner: Neutral + Actor178: T17 + Location: 32,19 + Owner: Neutral + Actor179: T17 + Location: 32,17 + Owner: Neutral + Actor180: T17 + Location: 34,18 + Owner: Neutral + Actor181: T17 + Location: 34,20 + Owner: Neutral + Actor182: T17 + Location: 34,22 + Owner: Neutral + Actor183: T17 + Location: 34,24 + Owner: Neutral + Actor184: T17 + Location: 34,26 + Owner: Neutral + Actor185: T17 + Location: 34,28 + Owner: Neutral + Actor186: T17 + Location: 34,30 + Owner: Neutral + Actor187: T17 + Location: 34,32 + Owner: Neutral + Actor188: T17 + Location: 34,34 + Owner: Neutral + Actor189: T17 + Location: 34,36 + Owner: Neutral + Actor190: T17 + Location: 34,38 + Owner: Neutral + Actor191: T17 + Location: 36,37 + Owner: Neutral + Actor192: T17 + Location: 36,35 + Owner: Neutral + Actor193: T17 + Location: 36,33 + Owner: Neutral + Actor194: T17 + Location: 36,31 + Owner: Neutral + Actor195: T17 + Location: 36,29 + Owner: Neutral + Actor196: T17 + Location: 36,27 + Owner: Neutral + Actor197: T17 + Location: 36,25 + Owner: Neutral + Actor198: T17 + Location: 36,23 + Owner: Neutral + Actor199: T17 + Location: 36,21 + Owner: Neutral + Actor200: T17 + Location: 36,19 + Owner: Neutral + Actor201: T17 + Location: 36,17 + Owner: Neutral + Actor202: T17 + Location: 38,18 + Owner: Neutral + Actor203: T17 + Location: 38,20 + Owner: Multi0 + Actor204: T17 + Location: 38,22 + Owner: Multi1 + Actor205: T17 + Location: 38,24 + Owner: Multi2 + Actor206: T17 + Location: 38,26 + Owner: Multi3 + Actor207: T17 + Location: 38,28 + Owner: Multi4 + Actor208: T17 + Location: 38,30 + Owner: Multi5 + Actor209: T17 + Location: 38,32 + Owner: Multi6 + Actor210: T17 + Location: 38,34 + Owner: Multi7 + Actor211: T17 + Location: 38,36 + Owner: Neutral + Actor212: T17 + Location: 38,38 + Owner: Neutral + Actor213: mpspawn + Location: 28,18 + Owner: Neutral + Actor214: mnlyr + Location: 19,20 + Owner: Multi0 + Actor215: mnlyr + Location: 19,28 + Owner: Multi1 + Actor216: mnlyr + Location: 20,36 + Owner: Multi2 + Actor217: mnlyr + Location: 29,36 + Owner: Multi3 + Actor218: mnlyr + Location: 37,35 + Owner: Multi4 + Actor219: mnlyr + Location: 37,25 + Owner: Multi5 + Actor220: mnlyr + Location: 34,18 + Owner: Multi6 + Actor221: mnlyr + Location: 27,18 + Owner: Multi7 + +Smudges: + +Rules: + World: + -CrateDrop: + SpawnMPUnits: + InitialUnit: mnlyr + + APWR: + Buildable: + Owner: a + STEK: + Buildable: + Owner: a + BARR: + Buildable: + Owner: a + FIX: + Buildable: + Owner: a + POWR: + Buildable: + Owner: a + AFLD: + Buildable: + Owner: a + PROC: + Buildable: + Owner: a + WEAP: + Buildable: + Owner: a + DOME: + Buildable: + Owner: a + SPEN: + Buildable: + Owner: a + SILO: + Buildable: + Owner: a + + Player: + ClassicProductionQueue@Building: + BuildSpeed: 0.4 + PlayerResources: + InitialCash: 60 + + MNLYR: + Inherits: ^Tank + Buildable: + Queue: Vehicle + BuildPaletteOrder: 30 + Prerequisites: fix + Owner: allies + Valued: + Cost: 800 + Tooltip: + Name: Bomber + Icon: MNLYICON + Description: Lays mines to destroy unwary enemy units.\n Unarmed + Health: + HP: 500 + Armor: + Type: Heavy + Mobile: + Speed: 9 + WaitAverage: 1 + WaitSpread: 1 + ROT: 900 + RevealsShroud: + Range: 40 + RenderUnit: + Image: MNLY + AttackMove: + JustMove: true + MustBeDestroyed: + Transforms: + IntoActor: ftur + Offset:0,0 + Facing: 96 + CashTrickler: + Period: 150 + Amount: 20 + FTUR: + Health: + HP: 1000 + Transforms: + IntoActor: mnlyr + Offset:0,0 + Facing: 96 + MustBeDestroyed: + Building: + Power: 0 + CashTrickler: + Period: 150 + Amount: 30 + ChronoshiftPower: + Image: warpicon + ChargeTime: 60 + Description: Chronoshift + LongDesc: Teleport a group of vehicles across\nthe map. + SelectTargetSound: slcttgt1.aud + BeginChargeSound: chrochr1.aud + EndChargeSound: chrordy1.aud + Duration: 999999 + KillCargo: yes + Range: 3 + IronCurtainPower: + Image: infxicon + ChargeTime: 30 + Description: Invulnerability + LongDesc: Makes a unit invulnerable\nfor 3 seconds. + Duration: 3 + SelectTargetSound: slcttgt1.aud + BeginChargeSound: ironchg1.aud + EndChargeSound: ironrdy1.aud + Range: 1 + + + MINVV: + Building: + Adjacent: 99 + TerrainTypes: Clear,Road + ProvidesCustomPrerequisite: + Prerequisite: MNLYVV + Buildable: + Queue: Building + BuildPaletteOrder: 30 + #Prerequisites: MNLYR + Owner: allies, soviet + Hotkey: b + Valued: + Cost: 30 + Health: + HP: 200 + RenderBuilding: + Image: miner + HasMakeAnimation: false + BelowUnits: + Tooltip: + Name: Bomb + Icon: jmin + Description: Bomb (Hotkey B) + ProximityCaptor: + Types: Mine + SelfHealing: + Step: -1 + Ticks: 1 + HealIfBelow: 101% + DamageCooldown: 0 + Armament: + Weapon: CrateNuke + LocalOffset: 0,0,0,-4,0 + AttackFrontal: + Explodes: + DemoTruck: + + T17: + Health: + HP: 999999999 + Building: + Adjacent: 99 + GivesBuildableArea: + Production: + Produces: Building + BaseBuilding: + #RenderBuilding: + # Image: brick + Tooltip: + Name: Tree + ChronoshiftPower: + Image: warpicon + ChargeTime: 60 + Description: Chronoshift + LongDesc: Teleport a group of vehicles across\nthe map. + SelectTargetSound: slcttgt1.aud + BeginChargeSound: chrochr1.aud + EndChargeSound: chrordy1.aud + Duration: 999999 + KillCargo: yes + Range: 3 + IronCurtainPower: + Image: infxicon + ChargeTime: 30 + Description: Invulnerability + LongDesc: Makes a unit invulnerable\nfor 3 seconds. + Duration: 3 + SelectTargetSound: slcttgt1.aud + BeginChargeSound: ironchg1.aud + EndChargeSound: ironrdy1.aud + Range: 1 + +Sequences: + miner: + idle: + Start: 0 + Length: 1 + damaged-idle: + Start: 1 + Length: * + damaged-build: + Start: 1 + Length: * + brick: + idle: + Start: 0 + Length: * +Weapons: + +Voices: diff --git a/mods/ra/maps/bomber-john/miner.shp b/mods/ra/maps/bomber-john/miner.shp new file mode 100755 index 0000000000..6765b54fda Binary files /dev/null and b/mods/ra/maps/bomber-john/miner.shp differ diff --git a/mods/ra/maps/drop-zone-battle-of-tikiaki.oramap b/mods/ra/maps/drop-zone-battle-of-tikiaki.oramap deleted file mode 100644 index e760d57bbd..0000000000 Binary files a/mods/ra/maps/drop-zone-battle-of-tikiaki.oramap and /dev/null differ diff --git a/mods/ra/maps/drop-zone-battle-of-tikiaki/map.bin b/mods/ra/maps/drop-zone-battle-of-tikiaki/map.bin new file mode 100755 index 0000000000..b041796184 Binary files /dev/null and b/mods/ra/maps/drop-zone-battle-of-tikiaki/map.bin differ diff --git a/mods/ra/maps/drop-zone-battle-of-tikiaki/map.yaml b/mods/ra/maps/drop-zone-battle-of-tikiaki/map.yaml new file mode 100755 index 0000000000..8525c2b7d9 --- /dev/null +++ b/mods/ra/maps/drop-zone-battle-of-tikiaki/map.yaml @@ -0,0 +1,341 @@ +Selectable: True + +MapFormat: 5 + +Title: Drop Zone - Battle of Tikiaki + +Description: Pick up the crates with the APC to get units to kill the other players; Using Holloweye's .yaml + +Author: Knivesron + +Tileset: TEMPERAT + +MapSize: 64,64 + +Bounds: 16,16,32,32 + +UseAsShellmap: False + +Type: Minigame + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Race: allies + PlayerReference@Creeps: + Name: Creeps + NonCombatant: True + Race: allies + PlayerReference@Multi0: + Name: Multi0 + Playable: True + LockRace: True + Race: soviet + Enemies: Multi1,Multi2,Multi3,Multi4,Multi5,Multi6,Multi17 + PlayerReference@Multi1: + Name: Multi1 + Playable: True + LockRace: True + Race: soviet + Enemies: Multi0,Multi2,Multi3,Multi4,Multi5,Multi6,Multi17 + PlayerReference@Multi2: + Name: Multi2 + Playable: True + LockRace: True + Race: soviet + Enemies: Multi0,Multi1,Multi3,Multi4,Multi5,Multi6,Multi17 + PlayerReference@Multi3: + Name: Multi3 + Playable: True + LockRace: True + Race: soviet + Enemies: Multi0,Multi1,Multi2,Multi4,Multi5,Multi6,Multi17 + PlayerReference@Multi4: + Name: Multi4 + Playable: True + LockRace: True + Race: soviet + Enemies: Multi0,Multi1,Multi2,Multi3,Multi5,Multi6,Multi17 + PlayerReference@Multi5: + Name: Multi5 + Playable: True + LockRace: True + Race: soviet + Enemies: Multi0,Multi2,Multi3,Multi4,Multi1,Multi6,Multi17 + PlayerReference@Multi6: + Name: Multi6 + Playable: True + LockRace: True + Race: soviet + Enemies: Multi0,Multi2,Multi3,Multi4,Multi5,Multi1,Multi17 + PlayerReference@Multi7: + Name: Multi7 + Playable: True + LockRace: True + Race: soviet + Enemies: Multi0,Multi2,Multi3,Multi4,Multi5,Multi6,Multi11 + +Actors: + Actor0: apc + Location: 28,28 + Owner: Multi0 + Actor1: apc + Location: 30,28 + Owner: Multi1 + Actor2: apc + Location: 32,28 + Owner: Multi2 + Actor3: apc + Location: 32,30 + Owner: Multi3 + Actor4: apc + Location: 32,32 + Owner: Multi4 + Actor5: apc + Location: 30,32 + Owner: Multi5 + Actor6: apc + Location: 28,32 + Owner: Multi6 + Actor7: apc + Location: 28,30 + Owner: Multi7 + Actor10: v08 + Location: 42,40 + Owner: Neutral + Actor17: v17 + Location: 37,41 + Owner: Neutral + Actor13: v14 + Location: 37,39 + Owner: Neutral + Actor14: v15 + Location: 38,39 + Owner: Neutral + Actor15: v17 + Location: 37,40 + Owner: Neutral + Actor16: v17 + Location: 38,40 + Owner: Neutral + Actor19: brl3 + Location: 43,45 + Owner: Neutral + Actor12: v07 + Location: 37,38 + Owner: Neutral + Actor9: v08 + Location: 44,40 + Owner: Neutral + Actor11: v03 + Location: 43,43 + Owner: Neutral + Actor18: brl3 + Location: 42,38 + Owner: Neutral + Actor20: brl3 + Location: 37,44 + Owner: Neutral + Actor8: mpspawn + Location: 29,29 + Owner: Neutral + Actor21: mpspawn + Location: 29,30 + Owner: Neutral + Actor22: mpspawn + Location: 29,31 + Owner: Neutral + Actor23: mpspawn + Location: 30,31 + Owner: Neutral + Actor24: mpspawn + Location: 31,31 + Owner: Neutral + Actor25: mpspawn + Location: 31,30 + Owner: Neutral + Actor26: mpspawn + Location: 31,29 + Owner: Neutral + Actor27: mpspawn + Location: 30,29 + Owner: Neutral + Actor28: barl + Location: 37,43 + Owner: Neutral + Actor29: barl + Location: 44,38 + Owner: Neutral + Actor30: barl + Location: 43,38 + Owner: Neutral + Actor31: t15 + Location: 43,41 + Owner: Neutral + Actor32: t15 + Location: 34,17 + Owner: Neutral + Actor33: t12 + Location: 37,17 + Owner: Neutral + Actor34: t10 + Location: 40,17 + Owner: Neutral + Actor35: t10 + Location: 42,17 + Owner: Neutral + Actor36: t10 + Location: 43,17 + Owner: Neutral + Actor37: t16 + Location: 44,18 + Owner: Neutral + Actor38: t16 + Location: 43,18 + Owner: Neutral + Actor39: t08 + Location: 43,19 + Owner: Neutral + Actor40: t08 + Location: 35,18 + Owner: Neutral + Actor41: t08 + Location: 37,18 + Owner: Neutral + Actor42: t08 + Location: 36,18 + Owner: Neutral + Actor43: syrf + Location: 47,24 + Owner: Neutral + Actor44: syrf + Location: 14,25 + Owner: Neutral + Actor45: spef + Location: 28,15 + Owner: Neutral + Actor46: spef + Location: 23,47 + Owner: Neutral + Actor47: sbag + Location: 38,35 + Owner: Neutral + Actor48: sbag + Location: 37,35 + Owner: Neutral + Actor49: sbag + Location: 36,35 + Owner: Neutral + Actor50: sbag + Location: 35,35 + Owner: Neutral + Actor51: sbag + Location: 34,35 + Owner: Neutral + Actor52: sbag + Location: 40,35 + Owner: Neutral + Actor53: sbag + Location: 40,34 + Owner: Neutral + Actor54: sbag + Location: 40,33 + Owner: Neutral + Actor55: sbag + Location: 41,33 + Owner: Neutral + Actor56: sbag + Location: 34,43 + Owner: Neutral + Actor57: sbag + Location: 34,44 + Owner: Neutral + Actor58: sbag + Location: 34,45 + Owner: Neutral + Actor59: sbag + Location: 34,41 + Owner: Neutral + Actor60: sbag + Location: 34,40 + Owner: Neutral + Actor62: t05 + Location: 20,18 + Owner: Neutral + Actor61: t05 + Location: 41,17 + Owner: Neutral + +Smudges: + +Rules: + World: + CrateDrop: + Maximum: 3 + SpawnInterval: 5 + -SpawnMPUnits: + -MPStartLocations: + CRATE: + -LevelUpCrateAction: + -GiveMcvCrateAction: + -RevealMapCrateAction: + -HideMapCrateAction: + -ExplodeCrateAction@nuke: + -ExplodeCrateAction@boom: + -ExplodeCrateAction@fire: + -SupportPowerCrateAction@parabombs: + -GiveCashCrateAction: + GiveUnitCrateAction@ttnk: + SelectionShares: 4 + Unit: ttnk + GiveUnitCrateAction@ftrk: + SelectionShares: 6 + Unit: ftrk + GiveUnitCrateAction@harv: + SelectionShares: 1 + Unit: harv + GiveUnitCrateAction@shok: + SelectionShares: 1 + Unit: shok + GiveUnitCrateAction@dog: + SelectionShares: 1 + Unit: dog + APC: + Health: + HP: 1000 + RevealsShroud: + Range: 40 + MustBeDestroyed: + -AttackMove: + HARV: + Tooltip: + Name: Bomb Truck + Description: Explodes like a damn nuke! + Health: + HP: 100 + Explodes: + Weapon: CrateNuke + EmptyWeapon: + SHOK: + Health: + HP: 800 + DOG: + Health: + HP: 120 + Mobile: + Speed: 7 + +Sequences: + +Weapons: + PortaTesla: + ROF: 20 + Range: 10 + Warhead: + Spread: 1 + InfDeath: 5 + Damage: 80 + +Voices: diff --git a/mods/ra/maps/drop-zone-w.oramap b/mods/ra/maps/drop-zone-w.oramap deleted file mode 100644 index fb303689a5..0000000000 Binary files a/mods/ra/maps/drop-zone-w.oramap and /dev/null differ diff --git a/mods/ra/maps/drop-zone-w/map.bin b/mods/ra/maps/drop-zone-w/map.bin new file mode 100755 index 0000000000..5924bbf570 Binary files /dev/null and b/mods/ra/maps/drop-zone-w/map.bin differ diff --git a/mods/ra/maps/drop-zone-w/map.yaml b/mods/ra/maps/drop-zone-w/map.yaml new file mode 100755 index 0000000000..3b272957a4 --- /dev/null +++ b/mods/ra/maps/drop-zone-w/map.yaml @@ -0,0 +1,333 @@ +Selectable: True + +MapFormat: 5 + +Title: Drop Zone W + +Description: Pick up the crates with the naval mobile HQ to get units to kill the other players. v0.2 + +Author: riderr3 + +Tileset: SNOW + +MapSize: 64,64 + +Bounds: 16,16,32,32 + +UseAsShellmap: False + +Type: Minigame + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Race: allies + PlayerReference@Creeps: + Name: Creeps + NonCombatant: True + Race: allies + Enemies: Multi0,Multi1,Multi2,Multi3,Multi4,Multi5,Multi6,Multi7 + PlayerReference@Multi0: + Name: Multi0 + Playable: True + LockRace: True + Race: allies + LockSpawn: True + Enemies: Creeps + PlayerReference@Multi1: + Name: Multi1 + Playable: True + LockRace: True + Race: allies + LockSpawn: True + Enemies: Creeps + PlayerReference@Multi2: + Name: Multi2 + Playable: True + LockRace: True + Race: allies + LockSpawn: True + Enemies: Creeps + PlayerReference@Multi3: + Name: Multi3 + Playable: True + LockRace: True + Race: allies + LockSpawn: True + Enemies: Creeps + PlayerReference@Multi4: + Name: Multi4 + Playable: True + LockRace: True + Race: allies + LockSpawn: True + Enemies: Creeps + PlayerReference@Multi5: + Name: Multi5 + Playable: True + LockRace: True + Race: allies + LockSpawn: True + Enemies: Creeps + PlayerReference@Multi6: + Name: Multi6 + Playable: True + LockRace: True + Race: allies + LockSpawn: True + Enemies: Creeps + PlayerReference@Multi7: + Name: Multi7 + Playable: True + LockRace: True + Race: allies + LockSpawn: True + Enemies: Creeps + +Actors: + Actor2: mpspawn + Location: 34,30 + Owner: Neutral + Actor4: mpspawn + Location: 30,32 + Owner: Neutral + Actor6: mpspawn + Location: 32,34 + Owner: Neutral + Actor0: mpspawn + Location: 30,30 + Owner: Neutral + Actor12: lst + Location: 35,29 + Owner: Multi0 + Actor14: lst + Location: 29,29 + Owner: Multi1 + Actor8: lst + Location: 29,35 + Owner: Multi2 + Actor10: lst + Location: 35,35 + Owner: Multi3 + Actor9: lst + Location: 32,35 + Owner: Multi4 + Actor13: lst + Location: 32,29 + Owner: Multi5 + Actor11: lst + Location: 35,32 + Owner: Multi6 + Actor15: lst + Location: 29,32 + Owner: Multi7 + Actor7: mpspawn + Location: 34,34 + Owner: Neutral + Actor3: mpspawn + Location: 34,32 + Owner: Neutral + Actor1: mpspawn + Location: 32,30 + Owner: Neutral + Actor5: mpspawn + Location: 30,34 + Owner: Neutral + Actor16: v12 + Location: 37,24 + Owner: Neutral + Actor17: v11 + Location: 38,23 + Owner: Neutral + Actor18: v17 + Location: 38,25 + Owner: Neutral + Actor19: brl3 + Location: 47,21 + Owner: Neutral + Actor20: v15 + Location: 39,22 + Owner: Neutral + Actor21: t12 + Location: 39,20 + Owner: Neutral + Actor22: t08 + Location: 29,47 + Owner: Neutral + Actor23: tc02 + Location: 15,46 + Owner: Neutral + Actor24: t07 + Location: 16,44 + Owner: Neutral + Actor25: tc05 + Location: 14,38 + Owner: Neutral + Actor26: t07 + Location: 36,25 + Owner: Neutral + Actor28: v14 + Location: 38,24 + Owner: Neutral + Actor27: t08 + Location: 37,25 + Owner: Neutral + Actor30: t10 + Location: 21,36 + Owner: Neutral + Actor31: t01 + Location: 23,34 + Owner: Neutral + +Smudges: + +Rules: + World: + CrateDrop: + Maximum: 3 + SpawnInterval: 5 + WaterChance: 1 + -SpawnMPUnits: + -MPStartLocations: + CRATE: + -LevelUpCrateAction: + -GiveMcvCrateAction: + -GiveUnitCrateAction@jeep: + -GiveUnitCrateAction@arty: + -GiveUnitCrateAction@v2rl: + -GiveUnitCrateAction@1tnk: + -GiveUnitCrateAction@2tnk: + -GiveUnitCrateAction@3tnk: + -GiveUnitCrateAction@4tnk: + -RevealMapCrateAction: + -HideMapCrateAction: + -ExplodeCrateAction@nuke: + -ExplodeCrateAction@boom: + -ExplodeCrateAction@fire: + -SupportPowerCrateAction@parabombs: + -GiveCashCrateAction: + GiveUnitCrateAction@pt: + SelectionShares: 7 + Unit: pt + GiveUnitCrateAction@dd: + SelectionShares: 6 + Unit: dd + GiveUnitCrateAction@ca: + SelectionShares: 4 + Unit: ca + GiveUnitCrateAction@ss: + SelectionShares: 6 + Unit: ss + GiveUnitCrateAction@msub: + SelectionShares: 4 + Unit: msub + LST: + Buildable: + Queue: Ship + BuildPaletteOrder: 30 + Owner: allies + Tooltip: + Name: Naval Mobile HQ + Description: Naval mobile HQ.\n Protect it at all costs. + Health: + HP: 1000 + Mobile: + Speed: 12 + RevealsShroud: + Range: 50 + Armament@PRIMARY: + Weapon:M60mg + Armament@SECONDARY: + Weapon:M60mg + AttackFrontal: + WithMuzzleFlash: + MustBeDestroyed: + -GivesBounty: + PT: + Buildable: + Owner: allies + -GivesBounty: + DD: + Buildable: + Owner: allies + -GivesBounty: + CA: + Buildable: + Owner: allies + -GivesBounty: + SS: + Buildable: + Owner: allies + -GivesBounty: + MSUB: + Buildable: + Owner: allies + -GivesBounty: + +Sequences: + lst: + muzzle: minigun + Start: 0 + Length: 6 + Facings: 8 + turret: mgun + Start: 0 + Facings: 32 + +Weapons: + 8Inch: + ROF: 200 + Range: 32 + Burst: 4 + Report: TURRET1 + Projectile: Bullet + Speed: 32 + High: true + Angle: .1 + Inaccuracy: 80 + Image: 120MM + ContrailLength: 30 + Warhead: + Spread: 3 + Versus: + None: 60% + Wood: 75% + Light: 60% + Heavy: 25% + Explosion: large_explosion + WaterExplosion: large_splash + InfDeath: 2 + SmudgeType: Crater + Damage: 250 + ImpactSound: kaboom12 + WaterImpactSound: splash9 + SubMissile: + ROF: 250 + Range: 32 + Burst: 4 + Report: MISSILE6 + Projectile: Bullet + Speed: 24 + High: true + Angle: .1 + Inaccuracy: 70 + Image: MISSILE + Trail: smokey + ContrailLength: 30 + Warhead: + Spread: 10 + Versus: + None: 40%, + Light: 30% + Heavy: 30% + Explosion: large_explosion + WaterExplosion: large_splash + InfDeath: 2 + SmudgeType: Crater + Damage: 400 + ImpactSound: kaboom12 + WaterImpactSound: splash9 + +Voices: diff --git a/mods/ra/maps/drop-zone.oramap b/mods/ra/maps/drop-zone.oramap deleted file mode 100644 index 3da666a294..0000000000 Binary files a/mods/ra/maps/drop-zone.oramap and /dev/null differ diff --git a/mods/ra/maps/drop-zone/map.bin b/mods/ra/maps/drop-zone/map.bin new file mode 100755 index 0000000000..5def5e9738 Binary files /dev/null and b/mods/ra/maps/drop-zone/map.bin differ diff --git a/mods/ra/maps/drop-zone/map.yaml b/mods/ra/maps/drop-zone/map.yaml new file mode 100755 index 0000000000..e8ea59dee0 --- /dev/null +++ b/mods/ra/maps/drop-zone/map.yaml @@ -0,0 +1,236 @@ +Selectable: True + +MapFormat: 5 + +Title: Drop Zone + +Description: Pick up the crates with the APC to get units to kill the other players. + +Author: Holloweye + +Tileset: TEMPERAT + +MapSize: 64,64 + +Bounds: 16,16,32,32 + +UseAsShellmap: False + +Type: Minigame + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Race: allies + PlayerReference@Creeps: + Name: Creeps + NonCombatant: True + Race: allies + PlayerReference@Multi0: + Name: Multi0 + Playable: True + LockRace: True + Race: soviet + Enemies: Multi1,Multi2,Multi3,Multi4,Multi5,Multi6,Multi17 + PlayerReference@Multi1: + Name: Multi1 + Playable: True + LockRace: True + Race: soviet + Enemies: Multi0,Multi2,Multi3,Multi4,Multi5,Multi6,Multi17 + PlayerReference@Multi2: + Name: Multi2 + Playable: True + LockRace: True + Race: soviet + Enemies: Multi0,Multi1,Multi3,Multi4,Multi5,Multi6,Multi17 + PlayerReference@Multi3: + Name: Multi3 + Playable: True + LockRace: True + Race: soviet + Enemies: Multi0,Multi1,Multi2,Multi4,Multi5,Multi6,Multi17 + PlayerReference@Multi4: + Name: Multi4 + Playable: True + LockRace: True + Race: soviet + Enemies: Multi0,Multi1,Multi2,Multi3,Multi5,Multi6,Multi17 + PlayerReference@Multi5: + Name: Multi5 + Playable: True + LockRace: True + Race: soviet + Enemies: Multi0,Multi2,Multi3,Multi4,Multi1,Multi6,Multi17 + PlayerReference@Multi6: + Name: Multi6 + Playable: True + LockRace: True + Race: soviet + Enemies: Multi0,Multi2,Multi3,Multi4,Multi5,Multi1,Multi17 + PlayerReference@Multi7: + Name: Multi7 + Playable: True + LockRace: True + Race: soviet + Enemies: Multi0,Multi2,Multi3,Multi4,Multi5,Multi6,Multi11 + +Actors: + Actor0: apc + Location: 28,28 + Owner: Multi0 + Actor1: apc + Location: 30,28 + Owner: Multi1 + Actor2: apc + Location: 32,28 + Owner: Multi2 + Actor3: apc + Location: 32,30 + Owner: Multi3 + Actor4: apc + Location: 32,32 + Owner: Multi4 + Actor5: apc + Location: 30,32 + Owner: Multi5 + Actor6: apc + Location: 28,32 + Owner: Multi6 + Actor7: apc + Location: 28,30 + Owner: Multi7 + Actor9: tc04 + Location: 18,43 + Owner: Neutral + Actor10: tc02 + Location: 44,44 + Owner: Neutral + Actor11: t10 + Location: 23,24 + Owner: Neutral + Actor12: t08 + Location: 34,23 + Owner: Neutral + Actor13: t12 + Location: 38,27 + Owner: Neutral + Actor14: t12 + Location: 35,35 + Owner: Neutral + Actor15: tc04 + Location: 43,18 + Owner: Neutral + Actor16: tc05 + Location: 18,18 + Owner: Neutral + Actor17: t12 + Location: 22,35 + Owner: Neutral + Actor18: t07 + Location: 18,28 + Owner: Neutral + Actor19: t07 + Location: 45,39 + Owner: Neutral + Actor20: t07 + Location: 40,18 + Owner: Neutral + Actor8: mpspawn + Location: 29,29 + Owner: Neutral + Actor21: mpspawn + Location: 29,30 + Owner: Neutral + Actor22: mpspawn + Location: 29,31 + Owner: Neutral + Actor23: mpspawn + Location: 30,31 + Owner: Neutral + Actor24: mpspawn + Location: 31,31 + Owner: Neutral + Actor25: mpspawn + Location: 31,30 + Owner: Neutral + Actor26: mpspawn + Location: 31,29 + Owner: Neutral + Actor27: mpspawn + Location: 30,29 + Owner: Neutral + +Smudges: + +Rules: + World: + CrateDrop: + Maximum: 3 + SpawnInterval: 5 + -SpawnMPUnits: + -MPStartLocations: + CRATE: + -LevelUpCrateAction: + -GiveMcvCrateAction: + -RevealMapCrateAction: + -HideMapCrateAction: + -ExplodeCrateAction@nuke: + -ExplodeCrateAction@boom: + -ExplodeCrateAction@fire: + -SupportPowerCrateAction@parabombs: + -GiveCashCrateAction: + GiveUnitCrateAction@ttnk: + SelectionShares: 4 + Unit: ttnk + GiveUnitCrateAction@ftrk: + SelectionShares: 6 + Unit: ftrk + GiveUnitCrateAction@harv: + SelectionShares: 1 + Unit: harv + GiveUnitCrateAction@shok: + SelectionShares: 1 + Unit: shok + GiveUnitCrateAction@dog: + SelectionShares: 1 + Unit: dog + APC: + Health: + HP: 1000 + RevealsShroud: + Range: 40 + MustBeDestroyed: + -AttackMove: + HARV: + Tooltip: + Name: Bomb Truck + Description: Explodes like a damn nuke! + Health: + HP: 100 + Explodes: + Weapon: CrateNuke + EmptyWeapon: + SHOK: + Health: + HP: 800 + DOG: + Health: + HP: 120 + Mobile: + Speed: 7 + +Sequences: + +Weapons: + PortaTesla: + ROF: 20 + Range: 10 + Warhead: + Spread: 1 + InfDeath: 5 + Damage: 80 + +Voices: diff --git a/mods/ra/maps/monster-tank-madness/map.yaml b/mods/ra/maps/monster-tank-madness/map.yaml index c41b565b40..d2c82a25dd 100644 --- a/mods/ra/maps/monster-tank-madness/map.yaml +++ b/mods/ra/maps/monster-tank-madness/map.yaml @@ -2568,13 +2568,16 @@ Rules: Range: 6 Turreted: ROT: 1 + Armament@PRIMARY: + Weapon: SuperTankPrimary + LocalOffset: -4,-5,0,0,0, 4,-5,0,0,0 + Recoil: 4 + RecoilRecovery: 0.7 + Armament@SECONDARY: + Weapon: MammothTusk + LocalOffset: -7,2,0,0,25, 7,2,0,0,-25 + Recoil: 1 AttackTurreted: - PrimaryWeapon: SuperTankPrimary - SecondaryWeapon: MammothTusk - PrimaryLocalOffset: -4,-5,0,0,0, 4,-5,0,0,0 - SecondaryLocalOffset: -7,2,0,0,25, 7,2,0,0,-25 - PrimaryRecoil: 4 - PrimaryRecoilRecovery: 0.7 RenderUnitTurreted: Image: 4TNK AutoTarget: diff --git a/mods/ra/maps/training-camp.oramap b/mods/ra/maps/training-camp.oramap deleted file mode 100644 index 44c519cd13..0000000000 Binary files a/mods/ra/maps/training-camp.oramap and /dev/null differ diff --git a/mods/ra/maps/training-camp/map.bin b/mods/ra/maps/training-camp/map.bin new file mode 100755 index 0000000000..f8defe3224 Binary files /dev/null and b/mods/ra/maps/training-camp/map.bin differ diff --git a/mods/ra/maps/training-camp/map.yaml b/mods/ra/maps/training-camp/map.yaml new file mode 100755 index 0000000000..d2bbfa58d7 --- /dev/null +++ b/mods/ra/maps/training-camp/map.yaml @@ -0,0 +1,1121 @@ +Selectable: True + +MapFormat: 5 + +Title: Training camp + +Description: Defeat your enemys by capturing their buildings. + +Author: Holloweye + +Tileset: TEMPERAT + +MapSize: 64,64 + +Bounds: 16,16,32,32 + +UseAsShellmap: False + +Type: Minigame + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Race: allies + PlayerReference@Creeps: + Name: Creeps + NonCombatant: True + Race: allies + PlayerReference@Multi0: + Name: Multi0 + Playable: True + LockRace: True + Race: soviet + Enemies: Multi1,Multi2,Multi3,Multi4,Multi5,Multi6,Multi17 + PlayerReference@Multi1: + Name: Multi1 + Playable: True + LockRace: True + Race: soviet + Enemies: Multi0,Multi2,Multi3,Multi4,Multi5,Multi6,Multi17 + PlayerReference@Multi2: + Name: Multi2 + Playable: True + LockRace: True + Race: soviet + Enemies: Multi0,Multi1,Multi3,Multi4,Multi5,Multi6,Multi17 + PlayerReference@Multi3: + Name: Multi3 + Playable: True + LockRace: True + Race: soviet + Enemies: Multi0,Multi1,Multi2,Multi4,Multi5,Multi6,Multi17 + PlayerReference@Multi4: + Name: Multi4 + Playable: True + LockRace: True + Race: soviet + Enemies: Multi0,Multi1,Multi2,Multi3,Multi5,Multi6,Multi17 + PlayerReference@Multi5: + Name: Multi5 + Playable: True + LockRace: True + Race: soviet + Enemies: Multi0,Multi2,Multi3,Multi4,Multi1,Multi6,Multi17 + PlayerReference@Multi6: + Name: Multi6 + Playable: True + LockRace: True + Race: soviet + Enemies: Multi0,Multi2,Multi3,Multi4,Multi5,Multi1,Multi17 + PlayerReference@Multi7: + Name: Multi7 + Playable: True + LockRace: True + Race: soviet + Enemies: Multi0,Multi2,Multi3,Multi4,Multi5,Multi6,Multi11 + +Actors: + Actor93: barr + Location: 17,21 + Owner: Multi0 + Actor94: barr + Location: 17,33 + Owner: Multi1 + Actor95: barr + Location: 21,44 + Owner: Multi2 + Actor96: barr + Location: 35,45 + Owner: Multi3 + Actor97: barr + Location: 45,41 + Owner: Multi4 + Actor98: barr + Location: 46,27 + Owner: Multi5 + Actor99: barr + Location: 42,16 + Owner: Multi6 + Actor100: barr + Location: 29,16 + Owner: Multi7 + Actor0: oilb + Location: 18,18 + Owner: Multi0 + Actor1: oilb + Location: 18,44 + Owner: Multi2 + Actor2: oilb + Location: 45,45 + Owner: Multi4 + Actor3: oilb + Location: 45,17 + Owner: Multi6 + Actor4: oilb + Location: 32,18 + Owner: Multi7 + Actor5: oilb + Location: 18,30 + Owner: Multi1 + Actor6: oilb + Location: 32,45 + Owner: Multi3 + Actor7: oilb + Location: 45,30 + Owner: Multi5 + Actor8: t10 + Location: 25,15 + Owner: Neutral + Actor9: t10 + Location: 15,25 + Owner: Neutral + Actor10: t10 + Location: 16,38 + Owner: Neutral + Actor11: t10 + Location: 26,46 + Owner: Neutral + Actor12: t10 + Location: 39,46 + Owner: Neutral + Actor13: t10 + Location: 46,36 + Owner: Neutral + Actor14: t10 + Location: 47,22 + Owner: Neutral + Actor15: t10 + Location: 39,15 + Owner: Neutral + Actor16: tc04 + Location: 16,25 + Owner: Neutral + Actor17: tc04 + Location: 25,16 + Owner: Neutral + Actor18: tc04 + Location: 38,16 + Owner: Neutral + Actor19: tc04 + Location: 45,22 + Owner: Neutral + Actor20: tc05 + Location: 43,36 + Owner: Neutral + Actor21: tc05 + Location: 38,44 + Owner: Neutral + Actor22: tc05 + Location: 25,44 + Owner: Neutral + Actor23: tc05 + Location: 17,37 + Owner: Neutral + Actor24: tc03 + Location: 20,36 + Owner: Neutral + Actor25: tc03 + Location: 27,42 + Owner: Neutral + Actor26: tc03 + Location: 18,26 + Owner: Neutral + Actor27: tc03 + Location: 25,19 + Owner: Neutral + Actor28: tc03 + Location: 37,19 + Owner: Neutral + Actor29: tc03 + Location: 43,23 + Owner: Neutral + Actor30: t17 + Location: 22,35 + Owner: Neutral + Actor31: t02 + Location: 23,34 + Owner: Neutral + Actor32: t02 + Location: 26,20 + Owner: Neutral + Actor33: t02 + Location: 36,20 + Owner: Neutral + Actor34: t02 + Location: 42,24 + Owner: Neutral + Actor35: t02 + Location: 42,35 + Owner: Neutral + Actor36: t02 + Location: 38,42 + Owner: Neutral + Actor37: t02 + Location: 29,40 + Owner: Neutral + Actor38: tc05 + Location: 25,21 + Owner: Neutral + Actor39: tc05 + Location: 20,25 + Owner: Neutral + Actor40: tc05 + Location: 24,33 + Owner: Neutral + Actor41: tc05 + Location: 28,38 + Owner: Neutral + Actor42: tc05 + Location: 37,40 + Owner: Neutral + Actor43: tc05 + Location: 41,33 + Owner: Neutral + Actor44: tc05 + Location: 40,25 + Owner: Neutral + Actor45: tc05 + Location: 34,21 + Owner: Neutral + Actor46: t01 + Location: 27,15 + Owner: Neutral + Actor47: t01 + Location: 37,17 + Owner: Neutral + Actor48: t01 + Location: 38,15 + Owner: Neutral + Actor49: t01 + Location: 24,15 + Owner: Neutral + Actor50: t01 + Location: 16,27 + Owner: Neutral + Actor51: t01 + Location: 20,26 + Owner: Neutral + Actor52: t01 + Location: 16,37 + Owner: Neutral + Actor53: t08 + Location: 16,39 + Owner: Neutral + Actor54: t08 + Location: 16,40 + Owner: Neutral + Actor55: t08 + Location: 24,35 + Owner: Neutral + Actor56: t12 + Location: 23,35 + Owner: Neutral + Actor57: t12 + Location: 21,37 + Owner: Neutral + Actor58: t12 + Location: 28,40 + Owner: Neutral + Actor59: t15 + Location: 25,46 + Owner: Neutral + Actor60: t15 + Location: 28,42 + Owner: Neutral + Actor61: t05 + Location: 26,43 + Owner: Neutral + Actor62: t05 + Location: 38,45 + Owner: Neutral + Actor63: t08 + Location: 39,43 + Owner: Neutral + Actor64: tc01 + Location: 37,43 + Owner: Neutral + Actor65: t11 + Location: 38,38 + Owner: Neutral + Actor66: t02 + Location: 37,38 + Owner: Neutral + Actor67: t02 + Location: 41,32 + Owner: Neutral + Actor68: t02 + Location: 43,24 + Owner: Neutral + Actor69: t02 + Location: 44,35 + Owner: Neutral + Actor70: t02 + Location: 44,24 + Owner: Neutral + Actor71: t02 + Location: 47,21 + Owner: Neutral + Actor72: t02 + Location: 36,18 + Owner: Neutral + Actor73: t02 + Location: 36,19 + Owner: Neutral + Actor74: t12 + Location: 37,20 + Owner: Neutral + Actor75: t12 + Location: 39,17 + Owner: Neutral + Actor76: t12 + Location: 26,17 + Owner: Neutral + Actor77: t01 + Location: 25,18 + Owner: Neutral + Actor78: t07 + Location: 25,20 + Owner: Neutral + Actor79: t01 + Location: 27,18 + Owner: Neutral + Actor80: brik + Location: 31,28 + Owner: Neutral + Actor81: brik + Location: 30,28 + Owner: Neutral + Actor82: brik + Location: 30,29 + Owner: Neutral + Actor83: brik + Location: 30,32 + Owner: Neutral + Actor84: brik + Location: 30,33 + Owner: Neutral + Actor85: brik + Location: 31,33 + Owner: Neutral + Actor86: brik + Location: 35,28 + Owner: Neutral + Actor87: brik + Location: 36,28 + Owner: Neutral + Actor88: brik + Location: 36,29 + Owner: Neutral + Actor89: brik + Location: 36,32 + Owner: Neutral + Actor90: brik + Location: 36,33 + Owner: Neutral + Actor91: brik + Location: 35,33 + Owner: Neutral + Actor92: weap + Location: 32,30 + Owner: Neutral + Actor101: fenc + Location: 16,24 + Owner: Neutral + Actor102: fenc + Location: 16,23 + Owner: Neutral + Actor103: fenc + Location: 16,22 + Owner: Neutral + Actor104: fenc + Location: 16,21 + Owner: Neutral + Actor105: fenc + Location: 16,20 + Owner: Neutral + Actor106: fenc + Location: 16,19 + Owner: Neutral + Actor107: fenc + Location: 16,18 + Owner: Neutral + Actor108: fenc + Location: 16,17 + Owner: Neutral + Actor109: fenc + Location: 16,16 + Owner: Neutral + Actor110: fenc + Location: 17,16 + Owner: Neutral + Actor111: fenc + Location: 18,16 + Owner: Neutral + Actor112: fenc + Location: 19,16 + Owner: Neutral + Actor113: fenc + Location: 20,16 + Owner: Neutral + Actor114: fenc + Location: 21,16 + Owner: Neutral + Actor115: fenc + Location: 22,16 + Owner: Neutral + Actor116: fenc + Location: 23,16 + Owner: Neutral + Actor117: fenc + Location: 28,16 + Owner: Neutral + Actor118: fenc + Location: 31,16 + Owner: Neutral + Actor119: fenc + Location: 32,16 + Owner: Neutral + Actor120: fenc + Location: 33,16 + Owner: Neutral + Actor122: fenc + Location: 35,16 + Owner: Neutral + Actor121: fenc + Location: 34,16 + Owner: Neutral + Actor123: fenc + Location: 36,16 + Owner: Neutral + Actor124: fenc + Location: 37,16 + Owner: Neutral + Actor125: fenc + Location: 41,16 + Owner: Neutral + Actor126: fenc + Location: 44,16 + Owner: Neutral + Actor127: fenc + Location: 45,16 + Owner: Neutral + Actor128: fenc + Location: 46,16 + Owner: Neutral + Actor129: fenc + Location: 47,16 + Owner: Neutral + Actor130: fenc + Location: 47,17 + Owner: Neutral + Actor131: fenc + Location: 47,18 + Owner: Neutral + Actor132: fenc + Location: 47,19 + Owner: Neutral + Actor133: fenc + Location: 47,20 + Owner: Neutral + Actor134: fenc + Location: 47,24 + Owner: Neutral + Actor135: fenc + Location: 47,25 + Owner: Neutral + Actor136: fenc + Location: 47,26 + Owner: Neutral + Actor137: fenc + Location: 47,29 + Owner: Neutral + Actor138: fenc + Location: 47,30 + Owner: Neutral + Actor139: fenc + Location: 47,31 + Owner: Neutral + Actor140: fenc + Location: 47,32 + Owner: Neutral + Actor141: fenc + Location: 47,33 + Owner: Neutral + Actor142: fenc + Location: 47,34 + Owner: Neutral + Actor143: fenc + Location: 47,35 + Owner: Neutral + Actor144: fenc + Location: 47,36 + Owner: Neutral + Actor145: fenc + Location: 47,38 + Owner: Neutral + Actor146: fenc + Location: 47,39 + Owner: Neutral + Actor147: fenc + Location: 47,40 + Owner: Neutral + Actor148: fenc + Location: 47,41 + Owner: Neutral + Actor149: fenc + Location: 47,42 + Owner: Neutral + Actor150: fenc + Location: 47,43 + Owner: Neutral + Actor151: fenc + Location: 47,44 + Owner: Neutral + Actor152: fenc + Location: 47,45 + Owner: Neutral + Actor153: fenc + Location: 47,46 + Owner: Neutral + Actor154: fenc + Location: 47,47 + Owner: Neutral + Actor155: fenc + Location: 46,47 + Owner: Neutral + Actor156: fenc + Location: 45,47 + Owner: Neutral + Actor157: fenc + Location: 44,47 + Owner: Neutral + Actor158: fenc + Location: 43,47 + Owner: Neutral + Actor159: fenc + Location: 42,47 + Owner: Neutral + Actor160: fenc + Location: 41,47 + Owner: Neutral + Actor161: fenc + Location: 38,47 + Owner: Neutral + Actor162: fenc + Location: 37,47 + Owner: Neutral + Actor163: fenc + Location: 36,47 + Owner: Neutral + Actor164: fenc + Location: 33,47 + Owner: Neutral + Actor165: fenc + Location: 32,47 + Owner: Neutral + Actor166: fenc + Location: 31,47 + Owner: Neutral + Actor167: fenc + Location: 30,47 + Owner: Neutral + Actor168: fenc + Location: 29,47 + Owner: Neutral + Actor169: fenc + Location: 28,47 + Owner: Neutral + Actor170: fenc + Location: 24,47 + Owner: Neutral + Actor171: fenc + Location: 23,47 + Owner: Neutral + Actor172: fenc + Location: 22,47 + Owner: Neutral + Actor173: fenc + Location: 21,47 + Owner: Neutral + Actor174: fenc + Location: 20,47 + Owner: Neutral + Actor175: fenc + Location: 19,47 + Owner: Neutral + Actor176: fenc + Location: 18,47 + Owner: Neutral + Actor177: fenc + Location: 17,47 + Owner: Neutral + Actor178: fenc + Location: 16,47 + Owner: Neutral + Actor179: fenc + Location: 16,46 + Owner: Neutral + Actor180: fenc + Location: 16,45 + Owner: Neutral + Actor181: fenc + Location: 16,44 + Owner: Neutral + Actor182: fenc + Location: 16,43 + Owner: Neutral + Actor183: fenc + Location: 16,42 + Owner: Neutral + Actor184: fenc + Location: 16,41 + Owner: Neutral + Actor185: fenc + Location: 16,29 + Owner: Neutral + Actor186: fenc + Location: 16,30 + Owner: Neutral + Actor187: fenc + Location: 16,31 + Owner: Neutral + Actor188: fenc + Location: 16,32 + Owner: Neutral + Actor189: fenc + Location: 16,33 + Owner: Neutral + Actor190: fenc + Location: 16,34 + Owner: Neutral + Actor191: fenc + Location: 16,35 + Owner: Neutral + Actor192: fenc + Location: 16,36 + Owner: Neutral + Actor193: mpspawn + Location: 31,29 + Owner: Neutral + Actor194: mpspawn + Location: 31,30 + Owner: Neutral + Actor195: mpspawn + Location: 31,31 + Owner: Neutral + Actor196: mpspawn + Location: 31,32 + Owner: Neutral + Actor197: mpspawn + Location: 36,30 + Owner: Neutral + Actor198: mpspawn + Location: 36,31 + Owner: Neutral + Actor199: mpspawn + Location: 34,33 + Owner: Neutral + Actor200: mpspawn + Location: 33,33 + Owner: Neutral + Actor201: ftur + Location: 19,21 + Owner: Multi0 + Actor202: ftur + Location: 21,19 + Owner: Multi0 + Actor203: ftur + Location: 20,30 + Owner: Multi1 + Actor204: ftur + Location: 20,32 + Owner: Multi1 + Actor205: ftur + Location: 21,41 + Owner: Multi2 + Actor206: ftur + Location: 22,42 + Owner: Multi2 + Actor207: ftur + Location: 33,43 + Owner: Multi3 + Actor208: ftur + Location: 34,43 + Owner: Multi3 + Actor209: ftur + Location: 43,41 + Owner: Multi4 + Actor210: ftur + Location: 44,41 + Owner: Multi4 + Actor211: ftur + Location: 44,29 + Owner: Multi5 + Actor212: ftur + Location: 44,31 + Owner: Multi5 + Actor213: ftur + Location: 41,19 + Owner: Multi6 + Actor214: ftur + Location: 43,20 + Owner: Multi6 + Actor215: ftur + Location: 31,20 + Owner: Multi7 + Actor216: ftur + Location: 30,20 + Owner: Multi7 + Actor217: t08 + Location: 19,25 + Owner: Neutral + Actor218: t01 + Location: 18,24 + Owner: Neutral + Actor219: t17 + Location: 17,24 + Owner: Neutral + Actor220: t08 + Location: 20,38 + Owner: Neutral + Actor221: t08 + Location: 22,37 + Owner: Neutral + Actor222: t08 + Location: 28,45 + Owner: Neutral + Actor223: t08 + Location: 28,46 + Owner: Neutral + Actor224: t01 + Location: 40,42 + Owner: Neutral + Actor225: t08 + Location: 41,35 + Owner: Neutral + Actor226: t08 + Location: 46,35 + Owner: Neutral + Actor227: t08 + Location: 24,17 + Owner: Neutral + Actor228: t08 + Location: 24,18 + Owner: Neutral + Actor229: t08 + Location: 37,22 + Owner: Neutral + Actor230: t08 + Location: 42,23 + Owner: Neutral + Actor231: t08 + Location: 46,21 + Owner: Neutral + Actor232: t08 + Location: 44,22 + Owner: Neutral + Actor233: brl3 + Location: 31,34 + Owner: Neutral + Actor234: barl + Location: 37,33 + Owner: Neutral + +Smudges: + +Rules: + World: + -CrateDrop: + -SpawnMPUnits: + -MPStartLocations: + Player: + PlayerResources: + InitialCash: 100 + ClassicProductionQueue@Infantry: + Type: Infantry + BuildSpeed: 1 + LowPowerSlowdown: 3 + ClassicProductionQueue@Vehicle: + Type: Vehicle + BuildSpeed: 1 + LowPowerSlowdown: 3 + ^Tank: + Mobile: + Crushes: wall, atmine, crate, ^Tree + OILB: + Health: + HP: 6000 + BARR: + Buildable: + Owner: allies + Building: + Power: 0 + Health: + HP: 5000 + Production: + Produces: Building,Infantry + WEAP: + Buildable: + Owner: allies + Building: + Power: 0 + Health: + HP: 10000 + Valued: + Cost: 2000 + FTUR: + Building: + Power: 0 + SPEN: + Buildable: + Owner: allies + DOME: + Buildable: + Owner: allies + PROC: + Buildable: + Owner: allies + SILO: + Buildable: + Owner: allies + APWR: + Buildable: + Owner: allies + STEK: + Buildable: + Owner: allies + FIX: + Buildable: + Owner: allies + POWR: + Buildable: + Owner: allies + MIG: + Buildable: + Owner: soviet + Prerequisites: barr,afld + Valued: + Cost: 2000 + YAK: + Buildable: + Owner: soviet + Prerequisites: barr,afld + Valued: + Cost: 150 + TRAN: + Buildable: + Owner: soviet + Prerequisites: barr,hpad + Valued: + Cost: 150 + HIND: + Buildable: + Owner: soviet + Prerequisites: barr,hpad + Valued: + Cost: 200 + HELI: + Buildable: + Owner: soviet + Prerequisites: barr,hpad + Valued: + Cost: 200 + HPAD: + Building: + Power: 0 + Buildable: + Owner: soviet + Prerequisites: barr + Valued: + Cost: 200 + FENC: + Buildable: + Queue: Building + Owner: soviet + Prerequisites: barr + Valued: + Cost: 10 + AFLD: + Building: + Power: 0 + Buildable: + Owner: soviet + Prerequisites: barr + Valued: + Cost: 200 + DOG: + Buildable: + Owner: soviet + Prerequisites: barr,oilb + Valued: + Cost: 20 + E1: + Buildable: + Owner: soviet + Prerequisites: barr,oilb + Valued: + Cost: 20 + E2: + Buildable: + Owner: soviet + Prerequisites: barr,oilb + Valued: + Cost: 32 + E3: + Buildable: + Owner: soviet + Prerequisites: barr,oilb + Valued: + Cost: 60 + E4: + Buildable: + Owner: soviet + Prerequisites: barr,oilb + Valued: + Cost: 60 + E6: + Buildable: + Owner: soviet + Prerequisites: barr + Valued: + Cost: 100 + SPY: + Buildable: + Owner: soviet + Prerequisites: barr,oilb + Valued: + Cost: 100 + E7: + Buildable: + Owner: soviet + Prerequisites: barr,oilb + Valued: + Cost: 400 + MEDI: + Buildable: + Owner: soviet + Prerequisites: barr,oilb + Valued: + Cost: 60 + SHOK: + Buildable: + Owner: soviet + Prerequisites: barr,oilb + Valued: + Cost: 200 + V2RL: + Buildable: + Owner: soviet + Prerequisites: barr,oilb + Valued: + Cost: 1250 + 1TNK: + Buildable: + Owner: soviet + Prerequisites: barr,oilb + Valued: + Cost: 125 + 2TNK: + Buildable: + Owner: soviet + Prerequisites: barr,oilb + Valued: + Cost: 175 + 3TNK: + Buildable: + Owner: soviet + Prerequisites: barr,oilb + Valued: + Cost: 250 + 4TNK: + Buildable: + Owner: soviet + Prerequisites: barr,oilb + Valued: + Cost: 500 + ARTY: + Buildable: + Owner: soviet + Prerequisites: barr,oilb + Valued: + Cost: 1000 + HARV: + Buildable: + Owner: allies + MCV: + Buildable: + Owner: allies + MNLY.AP: + Buildable: + Owner: allies + MNLY.AT: + Buildable: + Owner: allies + TRUK: + Buildable: + Owner: allies + JEEP: + Buildable: + Owner: soviet + Prerequisites: barr,oilb + Valued: + Cost: 50 + APC: + Buildable: + Owner: soviet + Prerequisites: barr,oilb + Valued: + Cost: 250 + TTNK: + Buildable: + Owner: soviet + Prerequisites: barr,oilb + Valued: + Cost: 200 + FTRK: + Buildable: + Owner: soviet + Prerequisites: barr,oilb + Valued: + Cost: 150 + DEMOT: + Inherits: ^Vehicle + Buildable: + Queue: Vehicle + BuildPaletteOrder: 10 + Prerequisites: barr,oilb + Owner: soviet + Valued: + Cost: 150 + Tooltip: + Name: Demo Truck + Description: Armed with a nuclear bomb.\n Unarmed + Icon: MNLYICON + Health: + HP: 110 + Armor: + Type: Light + Mobile: + Speed: 9 + RevealsShroud: + Range: 3 + RenderUnit: + Image: truk + Armament: + Weapon: CrateNuke + LocalOffset: 0,0,0,-4,0 + AttackFrontal: + AttackMove: + JustMove: yes + DemoTruck: + +Sequences: + +Weapons: + CrateNuke: + Warhead@areanuke2: + DamageModel: PerCell + Damage: 250 + SmudgeType: Scorch + Size: 4,3 + Ore: true + Versus: + None: 90% + Light: 60% + Heavy: 25% + Concrete: 50% + Delay: 12 + InfDeath: 4 + ImpactSound: kaboom22 + Warhead@areanuke3: + DamageModel: PerCell + Damage: 250 + SmudgeType: Scorch + Size: 3,2 + Ore: true + Versus: + None: 90% + Light: 60% + Heavy: 25% + Concrete: 50% + Delay: 24 + InfDeath: 4 + ImpactSound: kaboom22 + Warhead@areanuke4: + DamageModel: PerCell + Damage: 250 + SmudgeType: Scorch + Size: 2,1 + Ore: true + Versus: + None: 90% + Light: 60% + Heavy: 25% + Concrete: 50% + Delay: 36 + InfDeath: 4 + ImpactSound: kaboom22 +Voices: diff --git a/mods/ra/rules/aircraft.yaml b/mods/ra/rules/aircraft.yaml index 7e5dac772e..4dfa216ae9 100644 --- a/mods/ra/rules/aircraft.yaml +++ b/mods/ra/rules/aircraft.yaml @@ -95,9 +95,10 @@ MIG: Type: Light RevealsShroud: Range: 12 + Armament: + Weapon: Maverick + LocalOffset: -15,0,0,0,-10, 15,0,0,0,6 AttackPlane: - PrimaryWeapon: Maverick - PrimaryLocalOffset: -15,0,0,0,-10, 15,0,0,0,6 FacingTolerance: 20 Plane: InitialFacing: 192 @@ -144,11 +145,13 @@ YAK: Type: Light RevealsShroud: Range: 10 + Armament@PRIMARY: + Weapon: ChainGun.Yak + LocalOffset: -5,-6,0,0,0 + Armament@SECONDARY: + Weapon: ChainGun.Yak + LocalOffset: 5,-6,0,0,0 AttackPlane: - PrimaryWeapon: ChainGun.Yak - SecondaryWeapon: ChainGun.Yak - PrimaryOffset: -5,-6,0,0 - SecondaryOffset: 5,-6,0,0 FacingTolerance: 20 Plane: RearmBuildings: afld @@ -250,11 +253,13 @@ HELI: Type: Light RevealsShroud: Range: 12 + Armament@PRIMARY: + Weapon: HellfireAA + LocalOffset: -5,0,0,2,0 + Armament@SECONDARY: + Weapon: HellfireAG + Offset: 5,0,0,2,0 AttackHeli: - PrimaryWeapon: HellfireAG - SecondaryWeapon: HellfireAA - PrimaryOffset: -5,0,0,2 - SecondaryOffset: 5,0,0,2 FacingTolerance: 20 Helicopter: RearmBuildings: hpad @@ -294,11 +299,13 @@ HIND: Type: Light RevealsShroud: Range: 10 + Armament@PRIMARY: + Weapon: ChainGun + LocalOffset: -5,-2,0,2,0 + Armament@SECONDARY: + Weapon: ChainGun + LocalOffset: -5,-2,0,2,0 AttackHeli: - PrimaryWeapon: ChainGun - SecondaryWeapon: ChainGun - PrimaryOffset: -5,-2,0,2 - SecondaryOffset: 5,-2,0,2 FacingTolerance: 20 Helicopter: RearmBuildings: hpad diff --git a/mods/ra/rules/civilian.yaml b/mods/ra/rules/civilian.yaml index 3afe7f176c..bc81e5ee16 100644 --- a/mods/ra/rules/civilian.yaml +++ b/mods/ra/rules/civilian.yaml @@ -103,9 +103,10 @@ V01.SNIPER: AutoTarget: Turreted: ROT: 255 + Armament: + Weapon: Sniper + LocalOffset: 0,-11,0,0,0 AttackTurreted: - PrimaryWeapon: Sniper - PrimaryLocalOffset: 0,-11,0,0,0 Cargo: InitialUnits: sniper Types: Infantry diff --git a/mods/ra/rules/defaults.yaml b/mods/ra/rules/defaults.yaml index d66c197552..10863f8203 100644 --- a/mods/ra/rules/defaults.yaml +++ b/mods/ra/rules/defaults.yaml @@ -289,8 +289,9 @@ Speed: 4 RevealsShroud: Range: 2 + Armament: + Weapon: Pistol AttackFrontal: - PrimaryWeapon: Pistol ProximityCaptor: Types:CivilianInfantry -RenderInfantry: diff --git a/mods/ra/rules/infantry.yaml b/mods/ra/rules/infantry.yaml index e2f4a1a756..c455c45488 100644 --- a/mods/ra/rules/infantry.yaml +++ b/mods/ra/rules/infantry.yaml @@ -20,9 +20,9 @@ DOG: Speed: 7 RevealsShroud: Range: 5 - AutoTarget: + Armament: + Weapon: DogJaw AttackLeap: - PrimaryWeapon: DogJaw CanAttackGround: no RenderInfantry: IdleAnimations: idle1,idle2 @@ -46,8 +46,9 @@ E1: HP: 50 Mobile: Speed: 4 + Armament: + Weapon: M1Carbine AttackFrontal: - PrimaryWeapon: M1Carbine TakeCover: -RenderInfantry: RenderInfantryProne: @@ -72,10 +73,11 @@ E2: HP: 50 Mobile: Speed: 5 - AttackFrontal: - PrimaryWeapon: Grenade - PrimaryOffset: 0,0,0,-13 + Armament: + Weapon: Grenade + LocalOffset: 0,0,0,-13,0 FireDelay: 15 + AttackFrontal: TakeCover: -RenderInfantry: RenderInfantryProne: @@ -102,10 +104,13 @@ E3: HP: 45 Mobile: Speed: 3 + Armament@PRIMARY: + Weapon: RedEye + LocalOffset: 0,0,0,-13,0 + Armament@SECONDARY: + Weapon: Dragon + LocalOffset: 0,0,0,-13,0 AttackFrontal: - PrimaryWeapon: RedEye - SecondaryWeapon: Dragon - PrimaryOffset: 0,0,0,-13 TakeCover: -RenderInfantry: RenderInfantryProne: @@ -130,10 +135,11 @@ E4: HP: 40 Mobile: Speed: 3 - AttackFrontal: - PrimaryWeapon: Flamer - PrimaryOffset: 0,-10,0,-8 + Armament: + Weapon: Flamer + LocalOffset: 0,-10,0,-8,0 FireDelay: 8 + AttackFrontal: TakeCover: -RenderInfantry: RenderInfantryProne: @@ -204,8 +210,9 @@ SPY: -RenderInfantry: RenderSpy: IdleAnimations: idle1,idle2 + Armament: + Weapon: SilencedPPK AttackFrontal: - PrimaryWeapon: SilencedPPK E7: Inherits: ^Infantry @@ -234,9 +241,11 @@ E7: C4Delay: 45 Passenger: PipType: Red + Armament@PRIMARY: + Weapon: Colt45 + Armament@SECONDARY: + Weapon: Colt45 AttackFrontal: - PrimaryWeapon: Colt45 - SecondaryWeapon: Colt45 TakeCover: -RenderInfantry: RenderInfantryProne: @@ -270,9 +279,11 @@ E8: Range: 4 Passenger: PipType: Red + Armament@PRIMARY: + Weapon: VolkAT + Armament@SECONDARY: + Weapon: VolkNapalm AttackFrontal: - PrimaryWeapon: VolkAT - SecondaryWeapon: VolkNapalm TakeCover: -RenderInfantry: RenderInfantryProne: @@ -308,8 +319,9 @@ MEDI: Passenger: PipType: Yellow AutoHeal: + Armament: + Weapon: Heal AttackMedic: - PrimaryWeapon: Heal TakeCover: -AutoTarget: AttackMove: @@ -343,8 +355,9 @@ MECH: Passenger: PipType: Yellow AutoHeal: + Armament: + Weapon: Repair AttackMedic: - PrimaryWeapon: Repair TakeCover: -AutoTarget: AttackMove: @@ -457,9 +470,10 @@ SHOK: Speed: 3 RevealsShroud: Range: 4 + Armament: + Weapon: PortaTesla + LocalOffset: 0,-10,0,-8,0 AttackFrontal: - PrimaryWeapon: PortaTesla - PrimaryOffset: 0,-10,0,-8 TakeCover: -RenderInfantry: RenderInfantryProne: @@ -492,8 +506,9 @@ SNIPER: Range: 6 AutoTarget: InitialStance: HoldFire + Armament: + Weapon: Sniper AttackFrontal: - PrimaryWeapon: Sniper TakeCover: -RenderInfantry: RenderInfantryProne: diff --git a/mods/ra/rules/ships.yaml b/mods/ra/rules/ships.yaml index 7f19c5c719..4ff75e9efe 100644 --- a/mods/ra/rules/ships.yaml +++ b/mods/ra/rules/ships.yaml @@ -31,10 +31,11 @@ SS: CloakDelay: 50 CloakSound: subshow1.aud UncloakSound: subshow1.aud - AttackFrontal: - PrimaryWeapon: TorpTube - PrimaryLocalOffset: -4,0,0,0,0, 4,0,0,0,0 + Armament: + Weapon: TorpTube + LocalOffset: -4,0,0,0,0, 4,0,0,0,0 FireDelay: 2 + AttackFrontal: Selectable: Bounds: 38,38 Chronoshiftable: @@ -78,9 +79,10 @@ MSUB: CloakDelay: 100 CloakSound: subshow1.aud UncloakSound: subshow1.aud - AttackFrontal: - PrimaryWeapon: SubMissile + Armament: + Weapon: SubMissile FireDelay: 2 + AttackFrontal: Selectable: Bounds: 44,44 Chronoshiftable: @@ -116,11 +118,13 @@ DD: Range: 6 Turreted: ROT: 7 + Offset: 0,-8,0,-3 + Armament@PRIMARY: + Weapon: Stinger + LocalOffset: -4,0,0,0,-20, 4,0,0,0,20 + Armament@SECONDARY: + Weapon: DepthCharge AttackTurreted: - PrimaryWeapon: Stinger - SecondaryWeapon: DepthCharge - PrimaryOffset: 0,-8,0,-3 - PrimaryLocalOffset: -4,0,0,0,-20, 4,0,0,0,20 Selectable: Bounds: 38,38 RenderUnitTurreted: @@ -155,19 +159,27 @@ CA: Speed: 2 RevealsShroud: Range: 7 - Turreted: + Turreted@PRIMARY: + Turret: primary + Offset: 0,17,0,-2 ROT: 3 + Turreted@SECONDARY: + Turret: secondary + Offset: 0,-17,0,-2 + ROT: 3 + Armament@PRIMARY: + Turret: primary + Weapon: 8Inch + LocalOffset: -4,-5,0,0,0, 4,-5,0,0,0 + Recoil: 4 + RecoilRecovery: 0.8 + Armament@SECONDARY: + Turret: secondary + Weapon: 8Inch + LocalOffset: -4,-5,0,0,0, 4,-5,0,0,0 + Recoil: 4 + RecoilRecovery: 0.8 AttackTurreted: - PrimaryWeapon: 8Inch - SecondaryWeapon: 8Inch - PrimaryOffset: 0,17,0,-2 - SecondaryOffset: 0,-17,0,-2 - PrimaryLocalOffset: -4,-5,0,0,0, 4,-5,0,0,0 - SecondaryLocalOffset: -4,-5,0,0,0, 4,-5,0,0,0 - PrimaryRecoil: 4 - SecondaryRecoil: 4 - PrimaryRecoilRecovery: 0.8 - SecondaryRecoilRecovery: 0.8 Selectable: Bounds: 44,44 RenderUnitTurreted: @@ -232,10 +244,12 @@ PT: Range: 7 Turreted: ROT: 7 + Offset: 0,-6,0,-1 + Armament@PRIMARY: + Weapon: 2Inch + Armament@SECONDARY: + Weapon: DepthCharge AttackTurreted: - PrimaryWeapon: 2Inch - SecondaryWeapon: DepthCharge - PrimaryOffset: 0,-6,0,-1 Selectable: Bounds: 32,32 RenderUnitTurreted: diff --git a/mods/ra/rules/structures.yaml b/mods/ra/rules/structures.yaml index 9989bd5848..a14a4ff4ea 100644 --- a/mods/ra/rules/structures.yaml +++ b/mods/ra/rules/structures.yaml @@ -282,10 +282,11 @@ TSLA: RevealsShroud: Range: 8 RenderBuildingCharge: + Armament: + Weapon: TeslaZap + LocalOffset: 0,0,0,-10,0 AttackTesla: - PrimaryWeapon: TeslaZap ReloadTime: 120 - PrimaryOffset: 0,0,0,-10 AutoTarget: IronCurtainable: -RenderBuilding: @@ -323,9 +324,11 @@ AGUN: ROT: 15 InitialFacing: 224 RenderBuildingTurreted: + Armament@PRIMARY: + Weapon: ZSU-23 + Armament@SECONDARY: + Weapon: ZSU-23 AttackTurreted: - PrimaryWeapon: ZSU-23 - SecondaryWeapon: ZSU-23 AutoTarget: IronCurtainable: -RenderBuilding: @@ -442,9 +445,10 @@ PBOX.E1: Image: PBOX RenderRangeCircle: AutoTarget: + Armament: + Weapon: Vulcan + LocalOffset: 0,-11,0,0,0 AttackTurreted: - PrimaryWeapon: Vulcan - PrimaryLocalOffset: 0,-11,0,0,0 WithMuzzleFlash: Cargo: InitialUnits: e1 @@ -464,9 +468,10 @@ PBOX.E3: Image: PBOX RenderRangeCircle: AutoTarget: + Armament: + Weapon: Dragon + LocalOffset: 0,-11,0,0,0 AttackTurreted: - PrimaryWeapon: Dragon - PrimaryLocalOffset: 0,-11,0,0,0 PBOX.E4: Inherits: PBOX @@ -476,9 +481,10 @@ PBOX.E4: Image: PBOX RenderRangeCircle: AutoTarget: + Armament: + Weapon: Flamer + LocalOffset: 0,-11,0,0,0 AttackTurreted: - PrimaryWeapon: Flamer - PrimaryLocalOffset: 0,-11,0,0,0 PBOX.E7: Inherits: PBOX @@ -488,9 +494,10 @@ PBOX.E7: Image: PBOX RenderRangeCircle: AutoTarget: + Armament: + Weapon: Colt45 + LocalOffset: 0,-11,0,0,0 AttackTurreted: - PrimaryWeapon: Colt45 - PrimaryLocalOffset: 0,-11,0,0,0 PBOX.SHOK: Inherits: PBOX @@ -500,9 +507,10 @@ PBOX.SHOK: Image: PBOX RenderRangeCircle: AutoTarget: + Armament: + Weapon: PortaTesla + LocalOffset: 0,-11,0,0,0 AttackTurreted: - PrimaryWeapon: PortaTesla - PrimaryLocalOffset: 0,-11,0,0,0 PBOX.SNIPER: Inherits: PBOX @@ -512,9 +520,10 @@ PBOX.SNIPER: Image: PBOX RenderRangeCircle: AutoTarget: + Armament: + Weapon: Sniper + LocalOffset: 0,-11,0,0,0 AttackTurreted: - PrimaryWeapon: Sniper - PrimaryLocalOffset: 0,-11,0,0,0 HBOX: Inherits: ^Building @@ -599,9 +608,10 @@ HBOX.E1: Image: HBOX RenderRangeCircle: AutoTarget: + Armament: + Weapon: Vulcan + LocalOffset: 0,-11,0,0,0 AttackTurreted: - PrimaryWeapon: Vulcan - PrimaryLocalOffset: 0,-11,0,0,0 WithMuzzleFlash: Cargo: InitialUnits: e1 @@ -621,9 +631,10 @@ HBOX.E3: Image: HBOX RenderRangeCircle: AutoTarget: + Armament: + Weapon: Dragon + LocalOffset: 0,-11,0,0,0 AttackTurreted: - PrimaryWeapon: Dragon - PrimaryLocalOffset: 0,-11,0,0,0 HBOX.E4: Inherits: HBOX @@ -633,9 +644,10 @@ HBOX.E4: Image: HBOX RenderRangeCircle: AutoTarget: + Armament: + Weapon: Flamer + LocalOffset: 0,-11,0,0,0 AttackTurreted: - PrimaryWeapon: Flamer - PrimaryLocalOffset: 0,-11,0,0,0 HBOX.E7: Inherits: HBOX @@ -645,9 +657,10 @@ HBOX.E7: Image: HBOX RenderRangeCircle: AutoTarget: + Armament: + Weapon: Colt45 + LocalOffset: 0,-11,0,0,0 AttackTurreted: - PrimaryWeapon: Colt45 - PrimaryLocalOffset: 0,-11,0,0,0 HBOX.SHOK: Inherits: HBOX @@ -657,9 +670,10 @@ HBOX.SHOK: Image: HBOX RenderRangeCircle: AutoTarget: + Armament: + Weapon: PortaTesla + LocalOffset: 0,-11,0,0,0 AttackTurreted: - PrimaryWeapon: PortaTesla - PrimaryLocalOffset: 0,-11,0,0,0 HBOX.SNIPER: Inherits: HBOX @@ -669,9 +683,10 @@ HBOX.SNIPER: Image: HBOX RenderRangeCircle: AutoTarget: + Armament: + Weapon: Sniper + LocalOffset: 0,-11,0,0,0 AttackTurreted: - PrimaryWeapon: Sniper - PrimaryLocalOffset: 0,-11,0,0,0 GUN: Inherits: ^Building @@ -699,8 +714,9 @@ GUN: ROT: 12 InitialFacing: 50 RenderBuildingTurreted: + Armament: + Weapon: TurretGun AttackTurreted: - PrimaryWeapon: TurretGun AutoTarget: IronCurtainable: -RenderBuilding: @@ -732,10 +748,11 @@ FTUR: Range: 6 Turreted: ROT: 255 + Offset: 0,0,0,-2 + Armament: + Weapon: FireballLauncher + LocalOffset: 0,-12,0,0,0 AttackTurreted: - PrimaryWeapon: FireballLauncher - PrimaryOffset: 0,0,0,-2 - PrimaryLocalOffset: 0,-12,0,0,0 AutoTarget: IronCurtainable: RenderRangeCircle: @@ -770,8 +787,9 @@ SAM: ROT: 30 InitialFacing: 0 RenderBuildingTurreted: + Armament: + Weapon: Nike AttackTurreted: - PrimaryWeapon: Nike WithMuzzleFlash: AutoTarget: IronCurtainable: diff --git a/mods/ra/rules/vehicles.yaml b/mods/ra/rules/vehicles.yaml index 14d924af4c..9d27ac9b9a 100644 --- a/mods/ra/rules/vehicles.yaml +++ b/mods/ra/rules/vehicles.yaml @@ -19,8 +19,9 @@ V2RL: Speed: 7 RevealsShroud: Range: 5 + Armament: + Weapon: SCUD AttackFrontal: - PrimaryWeapon: SCUD RenderUnitReload: AutoTarget: Explodes: @@ -49,10 +50,11 @@ V2RL: Range: 4 Turreted: ROT: 5 + Armament: + Weapon: 25mm + Recoil: 2 + RecoilRecovery: 0.5 AttackTurreted: - PrimaryWeapon: 25mm - PrimaryRecoil: 2 - PrimaryRecoilRecovery: 0.5 RenderUnitTurreted: AutoTarget: Explodes: @@ -85,10 +87,11 @@ V2RL: Range: 5 Turreted: ROT: 5 + Armament: + Weapon: 90mm + Recoil: 3 + RecoilRecovery: 0.9 AttackTurreted: - PrimaryWeapon: 90mm - PrimaryRecoil: 3 - PrimaryRecoilRecovery: 0.9 RenderUnitTurreted: AutoTarget: Explodes: @@ -123,11 +126,12 @@ V2RL: Range: 5 Turreted: ROT: 5 + Armament: + Weapon: 105mm + Recoil: 3 + RecoilRecovery: 0.9 + LocalOffset: 2,0,0,0,0, -2,0,0,0,0 AttackTurreted: - PrimaryWeapon: 105mm - PrimaryRecoil: 3 - PrimaryRecoilRecovery: 0.9 - PrimaryLocalOffset: 2,0,0,0,0, -2,0,0,0,0 RenderUnitTurreted: AutoTarget: Explodes: @@ -162,14 +166,16 @@ V2RL: Range: 6 Turreted: ROT: 1 + Armament@PRIMARY: + Weapon: 120mm + LocalOffset: -4,-5,0,0,0, 4,-5,0,0,0 + Recoil: 4 + RecoilRecovery: 0.7 + Armament@SECONDARY: + Weapon: MammothTusk + LocalOffset: -7,2,0,0,25, 7,2,0,0,-25 + Recoil: 1 AttackTurreted: - PrimaryWeapon: 120mm - SecondaryWeapon: MammothTusk - PrimaryLocalOffset: -4,-5,0,0,0, 4,-5,0,0,0 - SecondaryLocalOffset: -7,2,0,0,25, 7,2,0,0,-25 - PrimaryRecoil: 4 - PrimaryRecoilRecovery: 0.7 - SecondaryRecoil: 1 RenderUnitTurreted: AutoTarget: Explodes: @@ -207,8 +213,9 @@ ARTY: Speed: 6 RevealsShroud: Range: 5 + Armament: + Weapon: 155mm AttackFrontal: - PrimaryWeapon: 155mm RenderUnit: Explodes: Weapon: UnitExplode @@ -319,9 +326,10 @@ JEEP: Range: 8 Turreted: ROT: 10 + Offset: 0,0,0,-2 + Armament: + Weapon: M60mg AttackTurreted: - PrimaryWeapon: M60mg - PrimaryOffset: 0,0,0,-2 WithMuzzleFlash: RenderUnitTurreted: AutoTarget: @@ -351,9 +359,10 @@ APC: Speed: 10 RevealsShroud: Range: 5 + Armament: + Weapon: M60mg + LocalOffset: 0,0,0,-4,0 AttackFrontal: - PrimaryWeapon: M60mg - PrimaryOffset: 0,0,0,-4 RenderUnit: WithMuzzleFlash: AutoTarget: @@ -614,9 +623,10 @@ TTNK: Crushes: wall, atmine, crate, infantry RevealsShroud: Range: 7 + Armament: + Weapon: TTankZap + LocalOffset: 0,0,0,-5,0 AttackFrontal: - PrimaryWeapon: TTankZap - PrimaryOffset: 0,0,0,-5 RenderUnitSpinner: Selectable: Bounds: 28,28,0,0 @@ -645,10 +655,11 @@ FTRK: Range: 4 Turreted: ROT: 5 + Offset: 0,5,0,-4 + Armament: + Weapon: FLAK-23 + Recoil: 2 AttackTurreted: - PrimaryWeapon: FLAK-23 - PrimaryOffset: 0,5,0,-4 - PrimaryRecoil: 2 RenderUnitTurreted: AutoTarget: Explodes: @@ -714,9 +725,11 @@ CTNK: Range: 6 RenderUnit: AutoTarget: + Armament@PRIMARY: + Weapon: ChronoTusk + LocalOffset: -4,0,0,0,0, -4,0,0,0,0 + Armament@SECONDARY: + Weapon: ChronoTusk + LocalOffset: 4,0,0,0,25, 4,0,0,0,-25 AttackFrontal: - PrimaryWeapon: ChronoTusk - SecondaryWeapon: ChronoTusk - PrimaryLocalOffset: -4,0,0,0,0, -4,0,0,0,0 - SecondaryLocalOffset: 4,0,0,0,25, 4,0,0,0,-25 ChronoshiftDeploy: