Move weapon/turret definitions out of AttackBase.

Weapons are now defined with the Armament trait
and turret parameters live in Turreted.
This has the side effect of allowing any number
and distribution of weapons and turrets.
This commit is contained in:
Paul Chote
2013-03-14 03:55:34 +13:00
parent aa6f12f0a1
commit 0167bbfbaa
81 changed files with 4023 additions and 820 deletions

View File

@@ -9,6 +9,7 @@
#endregion #endregion
using System; using System;
using System.Linq;
using OpenRA.Graphics; using OpenRA.Graphics;
using OpenRA.Traits; using OpenRA.Traits;
@@ -26,7 +27,7 @@ namespace OpenRA.Mods.RA.Render
string lastDamage = ""; string lastDamage = "";
public RenderGunboat(Actor self) public RenderGunboat(Actor self)
: base(self, () => self.HasTrait<Turreted>() ? self.Trait<Turreted>().turretFacing : 0) : base(self, () => self.HasTrait<Turreted>() ? self.TraitsImplementing<Turreted>().First().turretFacing : 0)
{ {
facing = self.Trait<IFacing>(); facing = self.Trait<IFacing>();
anim.Play("left"); anim.Play("left");

View File

@@ -200,9 +200,10 @@ namespace OpenRA.Mods.RA.AI
return RelativeValue(own, enemy, 100, SumOfValues<AttackBase>, (Actor a) => return RelativeValue(own, enemy, 100, SumOfValues<AttackBase>, (Actor a) =>
{ {
int sumOfDamage = 0; int sumOfDamage = 0;
foreach (var weap in a.Trait<AttackBase>().Weapons) var arms = a.TraitsImplementing<Armament>();
if (weap.Info.Warheads[0] != null) foreach (var arm in arms)
sumOfDamage += weap.Info.Warheads[0].Damage; if (arm.Weapon.Warheads[0] != null)
sumOfDamage += arm.Weapon.Warheads[0].Damage;
return sumOfDamage; return sumOfDamage;
}); });
} }

View File

@@ -230,12 +230,13 @@ namespace OpenRA.Mods.RA.AI
if (!target.HasTrait<TargetableUnit<TargetableUnitInfo>>() && if (!target.HasTrait<TargetableUnit<TargetableUnitInfo>>() &&
!target.HasTrait<TargetableBuilding>()) return false; !target.HasTrait<TargetableBuilding>()) return false;
foreach (var weap in a.Trait<AttackBase>().Weapons) var arms = a.TraitsImplementing<Armament>();
foreach (var arm in arms)
if (target.HasTrait<TargetableUnit<TargetableUnitInfo>>() && if (target.HasTrait<TargetableUnit<TargetableUnitInfo>>() &&
weap.Info.ValidTargets.Intersect(target.Trait<TargetableUnit<TargetableUnitInfo>>().TargetTypes) != null) arm.Weapon.ValidTargets.Intersect(target.Trait<TargetableUnit<TargetableUnitInfo>>().TargetTypes) != null)
return true; return true;
else if (target.HasTrait<TargetableBuilding>() && else if (target.HasTrait<TargetableBuilding>() &&
weap.Info.ValidTargets.Intersect(target.Trait<TargetableBuilding>().TargetTypes) != null) arm.Weapon.ValidTargets.Intersect(target.Trait<TargetableBuilding>().TargetTypes) != null)
return true; return true;
return false; return false;
} }
@@ -253,12 +254,15 @@ namespace OpenRA.Mods.RA.AI
foreach (var unit in units) foreach (var unit in units)
if (unit != null && unit.HasTrait<AttackBase>() && !unit.HasTrait<Aircraft>() if (unit != null && unit.HasTrait<AttackBase>() && !unit.HasTrait<Aircraft>()
&& !unit.IsDisabled()) && !unit.IsDisabled())
foreach (var weap in unit.Trait<AttackBase>().Weapons) {
if (weap.Info.ValidTargets.Contains("Air")) var arms = unit.TraitsImplementing<Armament>();
foreach (var a in arms)
if (a.Weapon.ValidTargets.Contains("Air"))
{ {
missileUnitsCount++; missileUnitsCount++;
break; break;
} }
}
return missileUnitsCount; return missileUnitsCount;
} }

198
OpenRA.Mods.RA/Armament.cs Executable file
View File

@@ -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<AttackBaseInfo>
{
[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<Turreted> 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<Turreted>().FirstOrDefault(t => t.info.Turret == info.Turret));
Weapon = Rules.Weapons[info.Weapon.ToLowerInvariant()];
Burst = Weapon.Burst;
var barrels = new List<Barrel>();
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<LimitedAmmo>();
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<IMove>() : 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<IFirepowerModifier>()
.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<INotifyAttack>())
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<RenderUnit>();
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);
}
}
}

View File

@@ -19,70 +19,34 @@ namespace OpenRA.Mods.RA
{ {
public abstract class AttackBaseInfo : ITraitInfo 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 bool CanAttackGround = true;
public readonly int MinimumScanTimeInterval = 30; public readonly int MinimumScanTimeInterval = 30;
public readonly int MaximumScanTimeInterval = 60; public readonly int MaximumScanTimeInterval = 60;
public abstract object Create(ActorInitializer init); 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 public abstract class AttackBase : IIssueOrder, IResolveOrder, ITick, IExplodeModifier, IOrderVoice, ISync
{ {
[Sync] public bool IsAttacking { get; internal set; } [Sync] public bool IsAttacking { get; internal set; }
public List<Weapon> Weapons = new List<Weapon>();
public List<Turret> Turrets = new List<Turret>();
readonly Actor self; readonly Actor self;
Lazy<IEnumerable<Armament>> armaments;
protected IEnumerable<Armament> Armaments { get { return armaments.Value; } }
public AttackBase(Actor self) public AttackBase(Actor self)
{ {
this.self = self; this.self = self;
var info = self.Info.Traits.Get<AttackBaseInfo>(); armaments = Lazy.New(() => self.TraitsImplementing<Armament>());
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));
} }
protected virtual bool CanAttack(Actor self, Target target) protected virtual bool CanAttack(Actor self, Target target)
{ {
if (!self.IsInWorld) return false; if (!self.IsInWorld) return false;
if (!target.IsValid) 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 (self.IsDisabled()) return false;
if (target.IsActor && target.Actor.HasTrait<ITargetable>() && if (target.IsActor && target.Actor.HasTrait<ITargetable>() &&
@@ -94,15 +58,12 @@ namespace OpenRA.Mods.RA
public bool ShouldExplode(Actor self) { return !IsReloading(); } 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<Pair<int, Action>> delayedActions = new List<Pair<int, Action>>(); List<Pair<int, Action>> delayedActions = new List<Pair<int, Action>>();
public virtual void Tick(Actor self) public virtual void Tick(Actor self)
{ {
foreach (var w in Weapons)
w.Tick();
for (var i = 0; i < delayedActions.Count; i++) for (var i = 0; i < delayedActions.Count; i++)
{ {
var x = delayedActions[i]; var x = delayedActions[i];
@@ -127,20 +88,20 @@ namespace OpenRA.Mods.RA
var move = self.TraitOrDefault<IMove>(); var move = self.TraitOrDefault<IMove>();
var facing = self.TraitOrDefault<IFacing>(); var facing = self.TraitOrDefault<IFacing>();
foreach (var w in Weapons) foreach (var a in Armaments)
w.CheckFire(self, this, move, facing, target); 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<IOrderTargeter> Orders public IEnumerable<IOrderTargeter> 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 ) public Order IssueOrder( Actor self, IOrderTargeter order, Target target, bool queued )
@@ -163,12 +124,6 @@ namespace OpenRA.Mods.RA
self.SetTargetLine(target, Color.Red); self.SetTargetLine(target, Color.Red);
AttackTarget(target, order.Queued, order.OrderString == "Attack"); AttackTarget(target, order.Queued, order.OrderString == "Attack");
} }
else
{
/* hack */
if (self.HasTrait<Turreted>() && self.Info.Traits.Get<AttackBaseInfo>().AlignIdleTurrets)
self.Trait<Turreted>().desiredFacing = null;
}
} }
public string VoicePhraseForOrder(Actor self, Order order) 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 abstract Activity GetAttackActivity(Actor self, Target newTarget, bool allowMove);
public bool HasAnyValidWeapons(Target t) { return Weapons.Any(w => w.IsValidAgainst(self.World, t)); } public bool HasAnyValidWeapons(Target t) { return Armaments.Any(a => a.IsValidAgainst(self.World, t)); }
public float GetMaximumRange() { return Weapons.Max(w => w.Info.Range); } 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 ) public void AttackTarget( Target target, bool queued, bool allowMove )
{ {

View File

@@ -42,10 +42,10 @@ namespace OpenRA.Mods.RA
public override Activity GetAttackActivity(Actor self, Target newTarget, bool allowMove) public override Activity GetAttackActivity(Actor self, Target newTarget, bool allowMove)
{ {
var weapon = ChooseWeaponForTarget(newTarget); var weapon = ChooseArmamentForTarget(newTarget);
if( weapon == null ) if (weapon == null)
return 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);
} }
} }
} }

View File

@@ -9,6 +9,7 @@
#endregion #endregion
using System; using System;
using System.Linq;
using OpenRA.Mods.RA.Activities; using OpenRA.Mods.RA.Activities;
using OpenRA.Traits; using OpenRA.Traits;
@@ -28,10 +29,15 @@ namespace OpenRA.Mods.RA
public override void DoAttack(Actor self, Target target) public override void DoAttack(Actor self, Target target)
{ {
if( !CanAttack( self, target ) ) return; if (!CanAttack(self, target))
return;
var weapon = Weapons[0].Info; var a = ChooseArmamentForTarget(target);
if( !Combat.IsInRange( self.CenterLocation, weapon.Range, target ) ) return; if (a == null)
return;
if (!Combat.IsInRange(self.CenterLocation, a.Weapon.Range, target))
return;
self.CancelActivity(); self.CancelActivity();
self.QueueActivity(new Leap(self, target)); self.QueueActivity(new Leap(self, target));
@@ -39,10 +45,10 @@ namespace OpenRA.Mods.RA
public override Activity GetAttackActivity(Actor self, Target newTarget, bool allowMove) public override Activity GetAttackActivity(Actor self, Target newTarget, bool allowMove)
{ {
var weapon = ChooseWeaponForTarget(newTarget); var a = ChooseArmamentForTarget(newTarget);
if( weapon == null ) if (a == null)
return 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);
} }
} }
} }

View File

@@ -9,6 +9,7 @@
#endregion #endregion
using System; using System;
using System.Linq;
using OpenRA.Traits; using OpenRA.Traits;
using OpenRA.Mods.RA.Activities; using OpenRA.Mods.RA.Activities;
@@ -26,15 +27,19 @@ namespace OpenRA.Mods.RA
public override void DoAttack(Actor self, Target target) public override void DoAttack(Actor self, Target target)
{ {
if (!CanAttack (self, target)) return; if (!CanAttack(self, target)) return;
var weapon = Weapons[0].Info; var arm = Armaments.FirstOrDefault();
if (!Combat.IsInRange(self.CenterLocation, weapon.Range, target)) return; if (arm == null)
return;
if (!Combat.IsInRange(self.CenterLocation, arm.Weapon.Range, target))
return;
var move = self.TraitOrDefault<IMove>(); var move = self.TraitOrDefault<IMove>();
var facing = self.TraitOrDefault<IFacing>(); var facing = self.TraitOrDefault<IFacing>();
foreach (var w in Weapons) foreach (var a in Armaments)
w.CheckFire(self, this, move, facing, target); a.CheckFire(self, this, move, facing, target);
if (target.Actor != null) if (target.Actor != null)
target.Actor.ChangeOwner(self.Owner); target.Actor.ChangeOwner(self.Owner);

View File

@@ -29,10 +29,10 @@ namespace OpenRA.Mods.RA
public override Activity GetAttackActivity(Actor self, Target newTarget, bool allowMove) public override Activity GetAttackActivity(Actor self, Target newTarget, bool allowMove)
{ {
var weapon = ChooseWeaponForTarget(newTarget); var weapon = ChooseArmamentForTarget(newTarget);
if( weapon == null ) if (weapon == null)
return 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);
} }
} }
} }

View File

@@ -8,6 +8,7 @@
*/ */
#endregion #endregion
using System.Linq;
using OpenRA.GameRules; using OpenRA.GameRules;
using OpenRA.Mods.RA.Buildings; using OpenRA.Mods.RA.Buildings;
using OpenRA.Mods.RA.Render; using OpenRA.Mods.RA.Render;
@@ -30,11 +31,13 @@ namespace OpenRA.Mods.RA
AttackPopupTurretedInfo Info; AttackPopupTurretedInfo Info;
int IdleTicks = 0; int IdleTicks = 0;
PopupState State = PopupState.Open; PopupState State = PopupState.Open;
Turreted turret;
public AttackPopupTurreted(ActorInitializer init, AttackPopupTurretedInfo info) : base(init.self) public AttackPopupTurreted(ActorInitializer init, AttackPopupTurretedInfo info) : base(init.self)
{ {
Info = info; Info = info;
buildComplete = init.Contains<SkipMakeAnimsInit>(); buildComplete = init.Contains<SkipMakeAnimsInit>();
turret = turrets.FirstOrDefault();
} }
protected override bool CanAttack( Actor self, Target target ) protected override bool CanAttack( Actor self, Target target )

View File

@@ -9,6 +9,7 @@
#endregion #endregion
using System; using System;
using System.Collections.Generic;
using System.Linq; using System.Linq;
using OpenRA.Mods.RA.Activities; using OpenRA.Mods.RA.Activities;
using OpenRA.Mods.RA.Buildings; using OpenRA.Mods.RA.Buildings;
@@ -25,12 +26,12 @@ namespace OpenRA.Mods.RA
class AttackTurreted : AttackBase, INotifyBuildComplete, ISync class AttackTurreted : AttackBase, INotifyBuildComplete, ISync
{ {
protected Target target; protected Target target;
protected Turreted turret; protected IEnumerable<Turreted> turrets;
[Sync] protected bool buildComplete; [Sync] protected bool buildComplete;
public AttackTurreted(Actor self) : base(self) public AttackTurreted(Actor self) : base(self)
{ {
turret = self.Trait<Turreted>(); turrets = self.TraitsImplementing<Turreted>();
} }
protected override bool CanAttack( Actor self, Target target ) protected override bool CanAttack( Actor self, Target target )
@@ -39,7 +40,12 @@ namespace OpenRA.Mods.RA
return false; return false;
if (!target.IsValid) 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 ); return base.CanAttack( self, target );
} }
@@ -85,7 +91,7 @@ namespace OpenRA.Mods.RA
var attack = self.Trait<AttackTurreted>(); var attack = self.Trait<AttackTurreted>();
const int RangeTolerance = 1; /* how far inside our maximum range we should try to sit */ 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) if (weapon != null)
{ {
@@ -93,7 +99,7 @@ namespace OpenRA.Mods.RA
if (allowMove && self.HasTrait<Mobile>() && !self.Info.Traits.Get<MobileInfo>().OnRails) if (allowMove && self.HasTrait<Mobile>() && !self.Info.Traits.Get<MobileInfo>().OnRails)
return Util.SequenceActivities( 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 ); this );
} }

View File

@@ -208,48 +208,6 @@ namespace OpenRA.Mods.RA
return false; return false;
} }
static PVecFloat GetRecoil(Actor self, float recoil)
{
if (!self.HasTrait<RenderUnitTurreted>())
return PVecFloat.Zero;
var facing = self.Trait<Turreted>().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<RenderUnit>();
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<Turreted>();
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 ) public static bool IsInRange( PPos attackOrigin, float range, Actor target )
{ {
var rsq = range * range * Game.CellSize * Game.CellSize; var rsq = range * range * Game.CellSize * Game.CellSize;

View File

@@ -45,7 +45,7 @@ namespace OpenRA.Mods.RA
public void Tick(Actor self) 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); } public void RenderAfterWorld(WorldRenderer wr, Actor self) { history.Render(self); }

View File

@@ -55,7 +55,9 @@ namespace OpenRA.Mods.RA
if (facing != null) if (facing != null)
td.Add(new FacingInit( facing.Facing )); td.Add(new FacingInit( facing.Facing ));
var turreted = self.TraitOrDefault<Turreted>(); // 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<Turreted>().FirstOrDefault();
if (turreted != null) if (turreted != null)
td.Add( new TurretFacingInit(turreted.turretFacing) ); td.Add( new TurretFacingInit(turreted.turretFacing) );

View File

@@ -368,7 +368,6 @@
<Compile Include="Turreted.cs" /> <Compile Include="Turreted.cs" />
<Compile Include="Valued.cs" /> <Compile Include="Valued.cs" />
<Compile Include="WaterPaletteRotation.cs" /> <Compile Include="WaterPaletteRotation.cs" />
<Compile Include="Weapon.cs" />
<Compile Include="Widgets\BuildPaletteWidget.cs" /> <Compile Include="Widgets\BuildPaletteWidget.cs" />
<Compile Include="Widgets\Logic\ModBrowserLogic.cs" /> <Compile Include="Widgets\Logic\ModBrowserLogic.cs" />
<Compile Include="Widgets\Logic\ColorPickerLogic.cs" /> <Compile Include="Widgets\Logic\ColorPickerLogic.cs" />
@@ -420,6 +419,7 @@
<Compile Include="Widgets\ColorPreviewManagerWidget.cs" /> <Compile Include="Widgets\ColorPreviewManagerWidget.cs" />
<Compile Include="FogPalette.cs" /> <Compile Include="FogPalette.cs" />
<Compile Include="Infiltrates.cs" /> <Compile Include="Infiltrates.cs" />
<Compile Include="Armament.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\OpenRA.FileFormats\OpenRA.FileFormats.csproj"> <ProjectReference Include="..\OpenRA.FileFormats\OpenRA.FileFormats.csproj">

View File

@@ -24,19 +24,17 @@ namespace OpenRA.Mods.RA.Render
public RenderBuildingSeparateTurret(ActorInitializer init, RenderBuildingInfo info) public RenderBuildingSeparateTurret(ActorInitializer init, RenderBuildingInfo info)
: base(init, info) : base(init, info)
{ {
var turreted = init.self.Trait<Turreted>(); var self = init.self;
var attack = init.self.Trait<AttackBase>(); var turreted = self.TraitsImplementing<Turreted>();
var turretAnim = new Animation(GetImage(init.self), () => turreted.turretFacing); var i = 0;
turretAnim.Play("turret"); foreach (var t in turreted)
for( var i = 0; i < attack.Turrets.Count; i++ )
{ {
var turret = attack.Turrets[i]; var anim = new Animation(GetImage(self), () => t.turretFacing);
anims.Add( "turret_{0}".F(i), anim.Play("turret");
new AnimationWithOffset(turretAnim,
() => Combat.GetTurretPosition(init.self, null, turret).ToFloat2(), anims.Add("turret_{0}".F(i++), new AnimationWithOffset(anim,
null)); () => t.PxPosition(self, null).ToFloat2(), null));
} }
} }
} }

View File

@@ -9,6 +9,7 @@
#endregion #endregion
using System; using System;
using System.Linq;
using OpenRA.Mods.RA.Buildings; using OpenRA.Mods.RA.Buildings;
using OpenRA.Traits; using OpenRA.Traits;
@@ -26,7 +27,8 @@ namespace OpenRA.Mods.RA.Render
static Func<int> MakeTurretFacingFunc(Actor self) static Func<int> MakeTurretFacingFunc(Actor self)
{ {
var turreted = self.Trait<Turreted>(); // Turret artwork is baked into the sprite, so only the first turret makes sense.
var turreted = self.TraitsImplementing<Turreted>().FirstOrDefault();
return () => turreted.turretFacing; return () => turreted.turretFacing;
} }
} }

View File

@@ -31,9 +31,10 @@ namespace OpenRA.Mods.RA.Render
spinnerAnim.PlayRepeating("spinner"); spinnerAnim.PlayRepeating("spinner");
var turret = new Turret(info.Offset);
anims.Add("spinner", new AnimationWithOffset( anims.Add("spinner", new AnimationWithOffset(
spinnerAnim, spinnerAnim,
() => Combat.GetTurretPosition( self, facing, new Turret(info.Offset)).ToFloat2(), () => turret.PxPosition(self, facing).ToFloat2(),
null ) { ZOffset = 1 } ); null ) { ZOffset = 1 } );
} }
} }

View File

@@ -8,6 +8,8 @@
*/ */
#endregion #endregion
using System;
using System.Linq;
using OpenRA.Graphics; using OpenRA.Graphics;
using OpenRA.Traits; using OpenRA.Traits;
@@ -24,20 +26,30 @@ namespace OpenRA.Mods.RA.Render
: base(self) : base(self)
{ {
var facing = self.Trait<IFacing>(); var facing = self.Trait<IFacing>();
var turreted = self.Trait<Turreted>(); var turreted = self.TraitsImplementing<Turreted>();
var attack = self.Trait<AttackBase>();
var turretAnim = new Animation(GetImage(self), () => turreted.turretFacing ); var i = 0;
turretAnim.Play( "turret" ); foreach (var t in turreted)
for( var i = 0; i < attack.Turrets.Count; i++ )
{ {
var turret = attack.Turrets[i]; var turret = t;
anims.Add( "turret_{0}".F(i),
new AnimationWithOffset( turretAnim, var anim = new Animation(GetImage(self), () => turret.turretFacing);
() => Combat.GetTurretPosition( self, facing, turret ).ToFloat2(), anim.Play("turret");
null));
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<Armament>()
.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();
}
} }
} }

View File

@@ -8,10 +8,12 @@
*/ */
#endregion #endregion
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using OpenRA.Graphics; using OpenRA.Graphics;
using OpenRA.Traits; using OpenRA.Traits;
using System; using OpenRA.Mods.RA;
namespace OpenRA.Mods.RA.Render namespace OpenRA.Mods.RA.Render
{ {
@@ -27,25 +29,25 @@ namespace OpenRA.Mods.RA.Render
public WithMuzzleFlash(Actor self) public WithMuzzleFlash(Actor self)
{ {
var attack = self.Trait<AttackBase>();
var render = self.Trait<RenderSimple>(); var render = self.Trait<RenderSimple>();
var facing = self.TraitOrDefault<IFacing>(); var facing = self.TraitOrDefault<IFacing>();
var turreted = self.TraitOrDefault<Turreted>();
var getFacing = turreted != null ? () => turreted.turretFacing :
facing != null ? (Func<int>)(() => facing.Facing) : () => 0;
foreach (var w in attack.Weapons) var arms = self.TraitsImplementing<Armament>();
foreach( var b in w.Barrels ) foreach (var a in arms)
foreach(var b in a.Barrels)
{ {
var barrel = b; var barrel = b;
var turret = w.Turret; var turreted = self.TraitsImplementing<Turreted>()
.FirstOrDefault(t => t.info.Turret == a.Info.Turret);
var getFacing = turreted != null ? () => turreted.turretFacing :
facing != null ? (Func<int>)(() => facing.Facing) : () => 0;
var muzzleFlash = new Animation(render.GetImage(self), getFacing); var muzzleFlash = new Animation(render.GetImage(self), getFacing);
muzzleFlash.Play("muzzle"); muzzleFlash.Play("muzzle");
muzzleFlashes.Add("muzzle{0}".F(muzzleFlashes.Count), new AnimationWithOffset( muzzleFlashes.Add("muzzle{0}".F(muzzleFlashes.Count), new AnimationWithOffset(
muzzleFlash, muzzleFlash,
() => Combat.GetBarrelPosition(self, facing, turret, barrel).ToFloat2(), () => a.MuzzlePxPosition(self, facing, barrel).ToFloat2(),
() => !isShowing)); () => !isShowing));
} }
} }

View File

@@ -30,9 +30,10 @@ namespace OpenRA.Mods.RA.Render
rotorAnim = new Animation(rs.GetImage(self)); rotorAnim = new Animation(rs.GetImage(self));
rotorAnim.PlayRepeating("rotor"); rotorAnim.PlayRepeating("rotor");
var turret = new Turret(info.Offset);
rs.anims.Add(info.Id, new AnimationWithOffset( rs.anims.Add(info.Id, new AnimationWithOffset(
rotorAnim, rotorAnim,
() => Combat.GetTurretPosition( self, facing, new Turret(info.Offset)).ToFloat2(), () => turret.PxPosition(self, facing).ToFloat2(),
null ) { ZOffset = 1 } ); null ) { ZOffset = 1 } );
} }

View File

@@ -9,6 +9,7 @@
#endregion #endregion
using System.Drawing; using System.Drawing;
using System.Linq;
using OpenRA.Graphics; using OpenRA.Graphics;
using OpenRA.Traits; using OpenRA.Traits;
@@ -26,11 +27,11 @@ namespace OpenRA.Mods.RA
public void Render(WorldRenderer wr, World w, ActorInfo ai, PPos centerLocation) public void Render(WorldRenderer wr, World w, ActorInfo ai, PPos centerLocation)
{ {
wr.DrawRangeCircleWithContrast( wr.DrawRangeCircleWithContrast(
Color.FromArgb(128, Color.Yellow), Color.FromArgb(128, Color.Yellow), centerLocation.ToFloat2(),
centerLocation.ToFloat2(), ai.Traits.WithInterface<ArmamentInfo>()
ai.Traits.Get<AttackBaseInfo>().GetMaximumRange(), .Select(a => Rules.Weapons[a.Weapon.ToLowerInvariant()].Range).Max(),
Color.FromArgb(96, Color.Black), Color.FromArgb(96, Color.Black), 1
1); );
foreach (var a in w.ActorsWithTrait<RenderRangeCircle>()) foreach (var a in w.ActorsWithTrait<RenderRangeCircle>())
if (a.Actor.Owner == a.Actor.World.LocalPlayer) if (a.Actor.Owner == a.Actor.World.LocalPlayer)

View File

@@ -43,7 +43,7 @@ namespace OpenRA.Mods.RA
{ {
var facing = self.Trait<IFacing>(); var facing = self.Trait<IFacing>();
var altitude = new PVecInt(0, move.Altitude); 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())) if (self.World.RenderedShroud.IsVisible(position.ToCPos()))
self.World.AddFrameEndTask( self.World.AddFrameEndTask(

View File

@@ -14,23 +14,24 @@ using OpenRA.Traits;
namespace OpenRA.Mods.RA namespace OpenRA.Mods.RA
{ {
public class TakeCoverInfo : ITraitInfo public class TakeCoverInfo : TurretedInfo
{ {
public readonly int ProneTime = 100; /* ticks, =4s */ public readonly int ProneTime = 100; /* ticks, =4s */
public readonly float ProneDamage = .5f; public readonly float ProneDamage = .5f;
public readonly decimal ProneSpeed = .5m; 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 // Infantry prone behavior
public class TakeCover : ITick, INotifyDamage, IDamageModifier, ISpeedModifier, ISync public class TakeCover : Turreted, ITick, INotifyDamage, IDamageModifier, ISpeedModifier, ISync
{ {
TakeCoverInfo Info; TakeCoverInfo Info;
[Sync] int remainingProneTime = 0; [Sync] int remainingProneTime = 0;
public TakeCover(TakeCoverInfo info) public TakeCover(ActorInitializer init, TakeCoverInfo info)
: base(init, info)
{ {
Info = 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 (e.Damage > 0 && (e.Warhead == null || !e.Warhead.PreventProne)) /* Don't go prone when healed */
{ {
if (!IsProne) if (!IsProne)
ApplyBarrelOffset(self, true); turret = new Turret(Info.ProneOffset);
remainingProneTime = Info.ProneTime; remainingProneTime = Info.ProneTime;
} }
} }
public void Tick(Actor self) public override void Tick(Actor self)
{ {
if (IsProne) base.Tick(self);
{ if (IsProne && --remainingProneTime == 0)
if (--remainingProneTime == 0) turret = new Turret(Info.Offset);
ApplyBarrelOffset(self, false);
}
}
public void ApplyBarrelOffset(Actor self, bool isProne)
{
if (Info.BarrelOffset == null)
return;
var ab = self.TraitOrDefault<AttackBase>();
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]);
}
} }
public float GetDamageModifier(Actor attacker, WarheadInfo warhead ) public float GetDamageModifier(Actor attacker, WarheadInfo warhead )

View File

@@ -46,7 +46,7 @@ namespace OpenRA.Mods.RA
alt = 0; alt = 0;
facing = Turreted.GetInitialTurretFacing( init, 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(); v = Game.CosmeticRandom.Gauss2D(1) * info.Spread.RelOffset();
dfacing = Game.CosmeticRandom.Gauss1D(2) * info.ROT; dfacing = Game.CosmeticRandom.Gauss1D(2) * info.ROT;

View File

@@ -8,23 +8,29 @@
*/ */
#endregion #endregion
using System.Collections.Generic;
using OpenRA.Mods.RA.Render;
using OpenRA.Traits; using OpenRA.Traits;
namespace OpenRA.Mods.RA namespace OpenRA.Mods.RA
{ {
public class TurretedInfo : ITraitInfo, UsesInit<TurretFacingInit> public class TurretedInfo : ITraitInfo, UsesInit<TurretFacingInit>
{ {
public readonly string Turret = "primary";
public readonly int ROT = 255; public readonly int ROT = 255;
public readonly int InitialFacing = 128; 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; [Sync] public int turretFacing = 0;
public int? desiredFacing; public int? desiredFacing;
TurretedInfo info; public TurretedInfo info;
protected Turret turret;
IFacing facing; IFacing facing;
public static int GetInitialTurretFacing(ActorInitializer init, int def) public static int GetInitialTurretFacing(ActorInitializer init, int def)
@@ -43,9 +49,10 @@ namespace OpenRA.Mods.RA
this.info = info; this.info = info;
turretFacing = GetInitialTurretFacing(init, info.InitialFacing); turretFacing = GetInitialTurretFacing(init, info.InitialFacing);
facing = init.self.TraitOrDefault<IFacing>(); facing = init.self.TraitOrDefault<IFacing>();
turret = new Turret(info.Offset);
} }
public void Tick(Actor self) public virtual void Tick(Actor self)
{ {
var df = desiredFacing ?? ( facing != null ? facing.Facing : turretFacing ); var df = desiredFacing ?? ( facing != null ? facing.Facing : turretFacing );
turretFacing = Util.TickFacing(turretFacing, df, info.ROT); turretFacing = Util.TickFacing(turretFacing, df, info.ROT);
@@ -56,5 +63,42 @@ namespace OpenRA.Mods.RA
desiredFacing = Util.GetFacing( target.CenterLocation - self.CenterLocation, turretFacing ); desiredFacing = Util.GetFacing( target.CenterLocation - self.CenterLocation, turretFacing );
return turretFacing == desiredFacing; 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<RenderUnit>();
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();
}
} }
} }

View File

@@ -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<Barrel>();
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<LimitedAmmo>();
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<IMove>() : null;
var turreted = self.TraitOrDefault<Turreted>();
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<IFirepowerModifier>()
.Select(a => a.GetFirepowerModifier())
.Product()
};
attack.ScheduleDelayedAction( attack.FireDelay( self, target, self.Info.Traits.Get<AttackBaseInfo>() ), () =>
{
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<INotifyAttack>())
na.Attacking(self, target);
FiredShot();
}
}
}

View File

@@ -63,10 +63,10 @@ HELI:
Type: Light Type: Light
RevealsShroud: RevealsShroud:
Range: 8 Range: 8
Armament:
Weapon: HeliAGGun
LocalOffset: -5,-3,0,2,0, 5,-3,0,2,0
AttackHeli: AttackHeli:
PrimaryWeapon: HeliAGGun
PrimaryOffset: 0,-3,0,2
PrimaryLocalOffset: -5,0,0,0,0, 5,0,0,0,0
FacingTolerance: 20 FacingTolerance: 20
LimitedAmmo: LimitedAmmo:
Ammo: 10 Ammo: 10
@@ -105,10 +105,10 @@ ORCA:
Type: Light Type: Light
RevealsShroud: RevealsShroud:
Range: 8 Range: 8
Armament:
Weapon: OrcaAGMissiles
LocalOffset: -4,-10,0,5,0, 4,-10,0,5,0
AttackHeli: AttackHeli:
PrimaryWeapon: OrcaAGMissiles
PrimaryOffset: 0,-10,0,5
PrimaryLocalOffset: -4,0,0,0,0, 4,0,0,0,0
FacingTolerance: 20 FacingTolerance: 20
LimitedAmmo: LimitedAmmo:
Ammo: 10 Ammo: 10

View File

@@ -247,8 +247,9 @@ VICE:
Cost: 1000 Cost: 1000
Tooltip: Tooltip:
Name: Viceroid Name: Viceroid
Armament:
Weapon: Chemspray
AttackFrontal: AttackFrontal:
PrimaryWeapon: Chemspray
AttackWander: AttackWander:
RenderUnit: RenderUnit:
WithMuzzleFlash: WithMuzzleFlash:

View File

@@ -151,8 +151,9 @@
RevealsShroud: RevealsShroud:
Range: 3 #arbitrary. Assuming it should be 1, like infantry. 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. # In practice, it seems that OpenRA renders vision range differently. Assuming it should be 1 for this unit.
Armament:
Weapon: Pistol
AttackFrontal: AttackFrontal:
PrimaryWeapon: Pistol
ActorLostNotification: ActorLostNotification:
Notification: civdead1.aud Notification: civdead1.aud
NotifyAll: true NotifyAll: true

View File

@@ -15,8 +15,9 @@ E1:
Speed: 4 Speed: 4
Health: Health:
HP: 50 HP: 50
Armament:
Weapon: M16
AttackFrontal: AttackFrontal:
PrimaryWeapon: M16
RenderInfantryProne: RenderInfantryProne:
IdleAnimations: idle1,idle2,idle3,idle4 IdleAnimations: idle1,idle2,idle3,idle4
@@ -38,10 +39,11 @@ E2:
Speed: 5 Speed: 5
Health: Health:
HP: 50 HP: 50
AttackFrontal: Armament:
PrimaryWeapon: Grenade Weapon: Grenade
PrimaryOffset: 0,0,0,-10 LocalOffset: 0,0,0,-10,0
FireDelay: 15 FireDelay: 15
AttackFrontal:
RenderInfantryProne: RenderInfantryProne:
IdleAnimations: idle1,idle2 IdleAnimations: idle1,idle2
Explodes: Explodes:
@@ -77,10 +79,11 @@ E3:
RevealsShroud: RevealsShroud:
Range: 3 Range: 3
# range value is 1 in C&C, but OpenRA renders vision slightly differently # range value is 1 in C&C, but OpenRA renders vision slightly differently
AttackFrontal: Armament:
PrimaryWeapon: Rockets Weapon: Rockets
PrimaryOffset: 1,-6,0,-8 LocalOffset: 1,-6,0,-8,0
FireDelay: 5 FireDelay: 5
AttackFrontal:
RenderInfantryProne: RenderInfantryProne:
IdleAnimations: idle1,idle2 IdleAnimations: idle1,idle2
@@ -102,10 +105,11 @@ E4:
Speed: 5 Speed: 5
Health: Health:
HP: 70 HP: 70
AttackFrontal: Armament:
PrimaryWeapon: Flamethrower Weapon: Flamethrower
PrimaryOffset: 0,-2,2,-4 LocalOffset: 0,-2,2,-4,0
FireDelay: 3 FireDelay: 3
AttackFrontal:
WithMuzzleFlash: WithMuzzleFlash:
RenderInfantryProne: RenderInfantryProne:
IdleAnimations: idle1,idle2 IdleAnimations: idle1,idle2
@@ -134,10 +138,11 @@ E5:
PathingCost: 100 PathingCost: 100
Health: Health:
HP: 70 HP: 70
AttackFrontal: Armament:
PrimaryWeapon: Chemspray Weapon: Chemspray
PrimaryOffset: 0,-2,2,-9 LocalOffset: 0,-2,2,-9
FireDelay: 3 FireDelay: 3
AttackFrontal:
WithMuzzleFlash: WithMuzzleFlash:
-PoisonedByTiberium: -PoisonedByTiberium:
RenderInfantryProne: RenderInfantryProne:
@@ -202,8 +207,9 @@ RMBO:
ScanRadius: 5 ScanRadius: 5
C4Demolition: C4Demolition:
C4Delay: 45 C4Delay: 45
Armament:
Weapon: Sniper
AttackFrontal: AttackFrontal:
PrimaryWeapon: Sniper
RenderInfantryProne: RenderInfantryProne:
IdleAnimations: idle1,idle2,idle3 IdleAnimations: idle1,idle2,idle3
AnnounceOnBuild: AnnounceOnBuild:

View File

@@ -18,10 +18,11 @@ BOAT:
Range: 7 Range: 7
Turreted: Turreted:
ROT: 7 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: 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: RenderGunboat:
AutoTarget: AutoTarget:
AllowMovement: false AllowMovement: false

View File

@@ -556,12 +556,13 @@ OBLI:
# (Range of Obelisk laser is 7.5) # (Range of Obelisk laser is 7.5)
RenderBuildingCharge: RenderBuildingCharge:
ChargeAudio: obelpowr.aud ChargeAudio: obelpowr.aud
AttackTurreted:
PrimaryWeapon: Laser
PrimaryOffset: 0,0,-2,-17
FireDelay: 8
Turreted: Turreted:
ROT:255 ROT:255
Offset: 0,0,-2,-17
Armament:
Weapon: Laser
FireDelay: 8
AttackTurreted:
AutoTarget: AutoTarget:
-RenderBuilding: -RenderBuilding:
RenderRangeCircle: RenderRangeCircle:
@@ -663,9 +664,10 @@ GUN:
ROT: 12 ROT: 12
InitialFacing: 50 InitialFacing: 50
RenderBuildingTurreted: RenderBuildingTurreted:
Armament:
Weapon: TurretGun
LocalOffset: 0,4,0,-2,0
AttackTurreted: AttackTurreted:
PrimaryWeapon: TurretGun
PrimaryLocalOffset: 0,4,0,-2,0
AutoTarget: AutoTarget:
-AutoTargetIgnore: -AutoTargetIgnore:
-RenderBuilding: -RenderBuilding:
@@ -706,8 +708,9 @@ SAM:
ROT: 7 ROT: 7
InitialFacing: 0 InitialFacing: 0
RenderBuildingTurreted: RenderBuildingTurreted:
Armament:
Weapon: SAMMissile
AttackPopupTurreted: AttackPopupTurreted:
PrimaryWeapon: SAMMissile
WithMuzzleFlash: WithMuzzleFlash:
AutoTarget: AutoTarget:
-RenderBuilding: -RenderBuilding:
@@ -736,10 +739,10 @@ GTWR:
Range: 6 Range: 6
# Range: 3 # Range: 3
# RevealShroud range was set to equal 1 + its weapon range (due to possible rendering issues with shroud for OpenRA) # 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: AttackTurreted:
PrimaryWeapon: HighV
PrimaryOffset: 0,0,0,-6
PrimaryLocalOffset: 0,-6,0,0,0
AutoTarget: AutoTarget:
-AutoTargetIgnore: -AutoTargetIgnore:
DetectCloaked: DetectCloaked:
@@ -749,6 +752,7 @@ GTWR:
WithMuzzleFlash: WithMuzzleFlash:
Turreted: Turreted:
ROT:255 ROT:255
Offset: 0,0,0,-6
ATWR: ATWR:
Inherits: ^Building Inherits: ^Building
@@ -777,12 +781,13 @@ ATWR:
Range: 7 Range: 7
# Range: 4 # Range: 4
# RevealShroud range was set to equal its weapon range +1 (due to possible rendering issues with shroud for OpenRA) # 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: Turreted:
ROT:255 ROT:255
Offset: 0,0,5,2
Armament:
Weapon: TowerMissle
LocalOffset: 7,-7,0,0,-25, -7,-7,0,0,25
AttackTurreted:
AutoTarget: AutoTarget:
-AutoTargetIgnore: -AutoTargetIgnore:
DetectCloaked: DetectCloaked:

View File

@@ -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. # 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: Turreted:
ROT: 10 ROT: 10
Offset: 0,2,0,-4
Armament:
Weapon: MachineGun
AttackTurreted: AttackTurreted:
PrimaryWeapon: MachineGun
PrimaryOffset: 0,2,0,-4
WithMuzzleFlash: WithMuzzleFlash:
RenderUnitTurreted: RenderUnitTurreted:
AutoTarget: 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. # 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: Turreted:
ROT: 10 ROT: 10
Armament:
Weapon: MachineGun
AttackTurreted: AttackTurreted:
PrimaryWeapon: MachineGun
PrimaryOffset: 0,0,0,0
WithMuzzleFlash: WithMuzzleFlash:
RenderUnitTurreted: RenderUnitTurreted:
AutoTarget: 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. # 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: Turreted:
ROT: 10 ROT: 10
Offset: 0,1,0,-3
Armament:
Weapon: MachineGun
AttackTurreted: AttackTurreted:
PrimaryWeapon: MachineGun
PrimaryOffset: 0,1,0,-3
WithMuzzleFlash: WithMuzzleFlash:
RenderUnitTurreted: RenderUnitTurreted:
AutoTarget: AutoTarget:
@@ -198,10 +200,10 @@ BIKE:
Range: 4 Range: 4
# Range: 2 # 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. # 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: AttackFrontal:
PrimaryWeapon: BikeRockets
PrimaryOffset: 0,0,0,-2
PrimaryLocalOffset: -4,0,0,0,25, 4,0,0,0,-25
RenderUnit: RenderUnit:
AutoTarget: AutoTarget:
@@ -228,9 +230,10 @@ ARTY:
Range: 6 Range: 6
# Range: 4 # 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. # 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: AttackFrontal:
PrimaryWeapon: ArtilleryShell
PrimaryOffset: 0,-7,0,-3
RenderUnit: RenderUnit:
AutoTarget: AutoTarget:
Explodes: Explodes:
@@ -260,10 +263,10 @@ FTNK:
Range: 6 Range: 6
# Range: 4 # 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. # 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: AttackFrontal:
PrimaryWeapon: BigFlamer
PrimaryOffset: 0,-5,3,2
PrimaryLocalOffset: 2,0,0,0,0, -2,0,0,0,0
RenderUnit: RenderUnit:
AutoTarget: AutoTarget:
WithMuzzleFlash: 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. # 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: Turreted:
ROT: 5 ROT: 5
Armament:
Weapon: 70mm
Recoil: 2
RecoilRecovery: 0.4
LocalOffset: 0,3,0,-2,0
AttackTurreted: AttackTurreted:
PrimaryWeapon: 70mm
PrimaryRecoil: 2
PrimaryRecoilRecovery: 0.4
PrimaryLocalOffset: 0,3,0,-2,0
RenderUnitTurreted: RenderUnitTurreted:
AutoTarget: 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. # 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: Turreted:
ROT: 5 ROT: 5
Armament:
# Weapon: 120mm
Weapon: 105mm
Recoil: 3
RecoilRecovery: 0.6
LocalOffset: 0,0,0,-1,0
AttackTurreted: AttackTurreted:
# PrimaryWeapon: 120mm
PrimaryWeapon: 105mm
PrimaryRecoil: 3
PrimaryRecoilRecovery: 0.6
PrimaryLocalOffset: 0,0,0,-1,0
RenderUnitTurreted: RenderUnitTurreted:
AutoTarget: AutoTarget:
Selectable: 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. # 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: Turreted:
ROT: 2 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: 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: RenderUnitTurreted:
AutoTarget: AutoTarget:
SelfHealing: 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. # 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: Turreted:
ROT: 255 ROT: 255
Offset: 0,6,0,-3
Armament:
Weapon: 227mm
LocalOffset: 3,-5,0,0,0, -3,-5,0,0,0
AttackFrontal: AttackFrontal:
PrimaryWeapon: 227mm
PrimaryOffset: 0,6,0,-3
PrimaryLocalOffset: 3,-5,0,0,0, -3,-5,0,0,0
RenderUnitTurretedAim: RenderUnitTurretedAim:
AutoTarget: AutoTarget:
Explodes: 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. # 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: Turreted:
ROT: 5 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: 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: RenderUnitTurretedAim:
AutoTarget: AutoTarget:
Explodes: Explodes:
@@ -478,10 +488,10 @@ STNK:
CloakDelay: 125 CloakDelay: 125
CloakSound: trans1.aud CloakSound: trans1.aud
UncloakSound: appear1.aud UncloakSound: appear1.aud
Armament:
Weapon: 227mm.stnk
LocalOffset: 1,-5,0,-3,0, -1,-5,0,-3,0
AttackFrontal: AttackFrontal:
PrimaryWeapon: 227mm.stnk
PrimaryOffset: 0,-5,0,-3
PrimaryLocalOffset: 1,0,0,0,0, -1,0,0,0,0
RenderUnit: RenderUnit:
AutoTarget: AutoTarget:
InitialStance: HoldFire InitialStance: HoldFire

View File

@@ -68,13 +68,13 @@ HELI:
Type: Light Type: Light
RevealsShroud: RevealsShroud:
Range: 8 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: 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 FacingTolerance: 20
LimitedAmmo: LimitedAmmo:
Ammo: 10 Ammo: 10
@@ -119,13 +119,13 @@ ORCA:
Type: Light Type: Light
RevealsShroud: RevealsShroud:
Range: 8 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: 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 FacingTolerance: 20
LimitedAmmo: LimitedAmmo:
Ammo: 10 Ammo: 10

View File

@@ -404,8 +404,9 @@ VICE:
Cost: 1000 Cost: 1000
Tooltip: Tooltip:
Name: Viceroid Name: Viceroid
Armament:
Weapon: Chemspray
AttackFrontal: AttackFrontal:
PrimaryWeapon: Chemspray
AttackWander: AttackWander:
RenderUnit: RenderUnit:
WithMuzzleFlash: WithMuzzleFlash:

View File

@@ -124,7 +124,7 @@
Buildable: Buildable:
Queue: Infantry Queue: Infantry
TakeCover: TakeCover:
BarrelOffset: 0,-2,0,4 ProneOffset: 0,-2,0,4
RenderInfantryProne: RenderInfantryProne:
AttackMove: AttackMove:
Passenger: Passenger:
@@ -164,8 +164,9 @@
HP: 25 HP: 25
RevealsShroud: RevealsShroud:
Range: 2 Range: 2
Armament:
Weapon: Pistol
AttackFrontal: AttackFrontal:
PrimaryWeapon: Pistol
ActorLostNotification: ActorLostNotification:
Notification: civdead1.aud Notification: civdead1.aud
NotifyAll: true NotifyAll: true

View File

@@ -15,8 +15,9 @@ E1:
Speed: 4 Speed: 4
Health: Health:
HP: 50 HP: 50
Armament:
Weapon: M16
AttackFrontal: AttackFrontal:
PrimaryWeapon: M16
RenderInfantryProne: RenderInfantryProne:
IdleAnimations: idle1,idle2,idle3,idle4 IdleAnimations: idle1,idle2,idle3,idle4
DetectCloaked: DetectCloaked:
@@ -40,10 +41,11 @@ E2:
Speed: 5 Speed: 5
Health: Health:
HP: 50 HP: 50
AttackFrontal: Armament:
PrimaryWeapon: Grenade Weapon: Grenade
PrimaryOffset: 0,0,0,-10 LocalOffset: 0,0,0,-10,0
FireDelay: 15 FireDelay: 15
AttackFrontal:
RenderInfantryProne: RenderInfantryProne:
IdleAnimations: idle1,idle2 IdleAnimations: idle1,idle2
Explodes: Explodes:
@@ -70,10 +72,11 @@ E3:
Speed: 3 Speed: 3
Health: Health:
HP: 45 HP: 45
AttackFrontal: Armament:
PrimaryWeapon: Rockets Weapon: Rockets
PrimaryOffset: 1,-6,0,-8 LocalOffset: 1,-6,0,-8,0
FireDelay: 5 FireDelay: 5
AttackFrontal:
RenderInfantryProne: RenderInfantryProne:
IdleAnimations: idle1,idle2 IdleAnimations: idle1,idle2
DetectCloaked: DetectCloaked:
@@ -97,10 +100,11 @@ E4:
Speed: 5 Speed: 5
Health: Health:
HP: 90 HP: 90
AttackFrontal: Armament:
PrimaryWeapon: Flamethrower Weapon: Flamethrower
PrimaryOffset: 0,-2,2,-4 LocalOffset: 0,-2,2,-4,0
FireDelay: 3 FireDelay: 3
AttackFrontal:
WithMuzzleFlash: WithMuzzleFlash:
RenderInfantryProne: RenderInfantryProne:
IdleAnimations: idle1,idle2 IdleAnimations: idle1,idle2
@@ -130,10 +134,11 @@ E5:
PathingCost: 80 PathingCost: 80
Health: Health:
HP: 90 HP: 90
AttackFrontal: Armament:
PrimaryWeapon: Chemspray Weapon: Chemspray
PrimaryOffset: 0,-2,2,-9 LocalOffset: 0,-2,2,-9,0
FireDelay: 3 FireDelay: 3
AttackFrontal:
WithMuzzleFlash: WithMuzzleFlash:
-PoisonedByTiberium: -PoisonedByTiberium:
RenderInfantryProne: RenderInfantryProne:
@@ -197,8 +202,9 @@ RMBO:
ScanRadius: 5 ScanRadius: 5
C4Demolition: C4Demolition:
C4Delay: 45 C4Delay: 45
Armament:
Weapon: Sniper
AttackFrontal: AttackFrontal:
PrimaryWeapon: Sniper
RenderInfantryProne: RenderInfantryProne:
IdleAnimations: idle1,idle2,idle3 IdleAnimations: idle1,idle2,idle3
AnnounceOnBuild: AnnounceOnBuild:

View File

@@ -18,10 +18,11 @@ BOAT:
Range: 7 Range: 7
Turreted: Turreted:
ROT: 7 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: 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: RenderGunboat:
AutoTarget: AutoTarget:
AllowMovement: false AllowMovement: false

View File

@@ -510,9 +510,10 @@ GUN:
ROT: 12 ROT: 12
InitialFacing: 50 InitialFacing: 50
RenderBuildingTurreted: RenderBuildingTurreted:
Armament:
Weapon: TurretGun
LocalOffset: 0,4,0,-2,0
AttackTurreted: AttackTurreted:
PrimaryWeapon: TurretGun
PrimaryLocalOffset: 0,4,0,-2,0
AutoTarget: AutoTarget:
-AutoTargetIgnore: -AutoTargetIgnore:
-RenderBuilding: -RenderBuilding:
@@ -551,8 +552,9 @@ SAM:
ROT: 7 ROT: 7
InitialFacing: 0 InitialFacing: 0
RenderBuildingTurreted: RenderBuildingTurreted:
Armament:
Weapon: SAMMissile
AttackPopupTurreted: AttackPopupTurreted:
PrimaryWeapon: SAMMissile
WithMuzzleFlash: WithMuzzleFlash:
AutoTarget: AutoTarget:
-RenderBuilding: -RenderBuilding:
@@ -585,10 +587,11 @@ OBLI:
Range: 8 Range: 8
RenderBuildingCharge: RenderBuildingCharge:
ChargeAudio: obelpowr.aud ChargeAudio: obelpowr.aud
AttackTurreted: Armament:
PrimaryWeapon: Laser Weapon: Laser
PrimaryOffset: 0,0,-2,-17 LocalOffset: 0,0,-2,-17,0
FireDelay: 8 FireDelay: 8
AttackTurreted:
Turreted: Turreted:
ROT:255 ROT:255
AutoTarget: AutoTarget:
@@ -620,10 +623,10 @@ GTWR:
HP: 600 HP: 600
RevealsShroud: RevealsShroud:
Range: 7 Range: 7
Armament:
Weapon: HighV
LocalOffset: 0,-6,0,-6,0
AttackTurreted: AttackTurreted:
PrimaryWeapon: HighV
PrimaryOffset: 0,0,0,-6
PrimaryLocalOffset: 0,-6,0,0,0
AutoTarget: AutoTarget:
-AutoTargetIgnore: -AutoTargetIgnore:
DetectCloaked: DetectCloaked:
@@ -659,10 +662,10 @@ ATWR:
Type: Heavy Type: Heavy
RevealsShroud: RevealsShroud:
Range: 9 Range: 9
Armament:
Weapon: TowerMissle
LocalOffset: 7,-7,5,2,-25, -7,-7,5,2,25
AttackTurreted: AttackTurreted:
PrimaryWeapon: TowerMissle
PrimaryOffset: 0,0,5,2
PrimaryLocalOffset: 7,-7,0,0,-25, -7,-7,0,0,25
Turreted: Turreted:
ROT:255 ROT:255
AutoTarget: AutoTarget:

View File

@@ -100,13 +100,13 @@ APC:
Range: 7 Range: 7
Turreted: Turreted:
ROT: 10 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: 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: WithMuzzleFlash:
RenderUnitTurreted: RenderUnitTurreted:
AutoTarget: AutoTarget:
@@ -139,9 +139,10 @@ ARTY:
Type: Light Type: Light
RevealsShroud: RevealsShroud:
Range: 9 Range: 9
Armament:
Weapon: ArtilleryShell
LocalOffset: 0,-7,0,-3,0
AttackFrontal: AttackFrontal:
PrimaryWeapon: ArtilleryShell
PrimaryOffset: 0,-7,0,-3
RenderUnit: RenderUnit:
Explodes: Explodes:
AutoTarget: AutoTarget:
@@ -170,10 +171,10 @@ FTNK:
Type: Light Type: Light
RevealsShroud: RevealsShroud:
Range: 5 Range: 5
Armament:
Weapon: BigFlamer
LocalOffset: 5,-5,3,2,0, -5,-5,3,2,0
AttackFrontal: AttackFrontal:
PrimaryWeapon: BigFlamer
PrimaryOffset: 0,-5,3,2
PrimaryLocalOffset: 5,0,0,0,0, -5,0,0,0,0
RenderUnit: RenderUnit:
AutoTarget: AutoTarget:
WithMuzzleFlash: WithMuzzleFlash:
@@ -206,9 +207,10 @@ BGGY:
Range: 7 Range: 7
Turreted: Turreted:
ROT: 10 ROT: 10
Offset: 0,1,0,-3
Armament:
Weapon: MachineGun
AttackTurreted: AttackTurreted:
PrimaryWeapon: MachineGun
PrimaryOffset: 0,1,0,-3
WithMuzzleFlash: WithMuzzleFlash:
RenderUnitTurreted: RenderUnitTurreted:
AutoTarget: AutoTarget:
@@ -243,10 +245,10 @@ BIKE:
Type: Light Type: Light
RevealsShroud: RevealsShroud:
Range: 8 Range: 8
Armament:
Weapon: BikeRockets
LocalOffset: -4,0,0,-2,25, 4,0,0,-2,-25
AttackFrontal: AttackFrontal:
PrimaryWeapon: BikeRockets
PrimaryOffset: 0,0,0,-2
PrimaryLocalOffset: -4,0,0,0,25, 4,0,0,0,-25
RenderUnit: RenderUnit:
AutoTarget: AutoTarget:
LeavesHusk: LeavesHusk:
@@ -275,9 +277,10 @@ JEEP:
Range: 8 Range: 8
Turreted: Turreted:
ROT: 10 ROT: 10
Offset: 0,2,0,-4
Armament:
Weapon: MachineGun
AttackTurreted: AttackTurreted:
PrimaryWeapon: MachineGun
PrimaryOffset: 0,2,0,-4
WithMuzzleFlash: WithMuzzleFlash:
RenderUnitTurreted: RenderUnitTurreted:
AutoTarget: AutoTarget:
@@ -307,11 +310,12 @@ LTNK:
Range: 6 Range: 6
Turreted: Turreted:
ROT: 5 ROT: 5
Armament:
Weapon: 70mm
Recoil: 2
RecoilRecovery: 0.4
LocalOffset: 0,3,0,-2,0
AttackTurreted: AttackTurreted:
PrimaryWeapon: 70mm
PrimaryRecoil: 2
PrimaryRecoilRecovery: 0.4
PrimaryLocalOffset: 0,3,0,-2,0
RenderUnitTurreted: RenderUnitTurreted:
AutoTarget: AutoTarget:
LeavesHusk: LeavesHusk:
@@ -333,7 +337,6 @@ MTNK:
Prerequisites: hq Prerequisites: hq
Owner: gdi Owner: gdi
Mobile: Mobile:
Speed: 6 Speed: 6
Health: Health:
HP: 400 HP: 400
@@ -343,11 +346,12 @@ MTNK:
Range: 6 Range: 6
Turreted: Turreted:
ROT: 5 ROT: 5
Armament:
Weapon: 120mm
Recoil: 3
RecoilRecovery: 0.6
LocalOffset: 0,0,0,-1,0
AttackTurreted: AttackTurreted:
PrimaryWeapon: 120mm
PrimaryRecoil: 3
PrimaryRecoilRecovery: 0.6
PrimaryLocalOffset: 0,0,0,-1,0
RenderUnitTurreted: RenderUnitTurreted:
AutoTarget: AutoTarget:
LeavesHusk: LeavesHusk:
@@ -381,14 +385,16 @@ HTNK:
Range: 6 Range: 6
Turreted: Turreted:
ROT: 2 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: 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: RenderUnitTurreted:
AutoTarget: AutoTarget:
SelfHealing: SelfHealing:
@@ -425,10 +431,11 @@ MSAM:
Range: 10 Range: 10
Turreted: Turreted:
ROT: 255 ROT: 255
Offset: 0,6,0,-3
Armament:
Weapon: 227mm
LocalOffset: 3,-5,0,0,0, -3,-5,0,0,0
AttackFrontal: AttackFrontal:
PrimaryWeapon: 227mm
PrimaryOffset: 0,6,0,-3
PrimaryLocalOffset: 3,-5,0,0,0, -3,-5,0,0,0
RenderUnitTurretedAim: RenderUnitTurretedAim:
AutoTarget: AutoTarget:
LeavesHusk: LeavesHusk:
@@ -456,11 +463,15 @@ MLRS:
Range: 10 Range: 10
Turreted: Turreted:
ROT: 5 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: AttackTurreted:
PrimaryWeapon: Patriot
PrimaryOffset: 0,3,0,-3
PrimaryLocalOffset: -4,0,0,0,0, 4,0,0,0,0
AlignIdleTurrets: true
RenderUnitTurretedAim: RenderUnitTurretedAim:
AutoTarget: AutoTarget:
Explodes: Explodes:
@@ -497,10 +508,10 @@ STNK:
CloakDelay: 80 CloakDelay: 80
CloakSound: trans1.aud CloakSound: trans1.aud
UncloakSound: trans1.aud UncloakSound: trans1.aud
Armament:
Weapon: 227mm.stnk
LocalOffset: 1,-5,0,-3,0, -1,-5,0,-3,0
AttackFrontal: AttackFrontal:
PrimaryWeapon: 227mm.stnk
PrimaryOffset: 0,-5,0,-3
PrimaryLocalOffset: 1,0,0,0,0, -1,0,0,0,0
RenderUnit: RenderUnit:
AutoTarget: AutoTarget:
InitialStance: HoldFire InitialStance: HoldFire

View File

@@ -82,9 +82,10 @@ ORNI:
Type: Light Type: Light
RevealsShroud: RevealsShroud:
Range: 10 Range: 10
Armament:
Weapon: ChainGun
LocalOffset: -5,-2,0,2,0
AttackHeli: AttackHeli:
PrimaryWeapon: ChainGun
PrimaryOffset: -5,-2,0,2
FacingTolerance: 20 FacingTolerance: 20
Helicopter: Helicopter:
LandWhenIdle: false LandWhenIdle: false

View File

@@ -143,11 +143,12 @@ COMBATA:
Prerequisites: heavya Prerequisites: heavya
Owner: atreides Owner: atreides
BuiltAt: heavya BuiltAt: heavya
Armament:
Weapon: 90mma
Recoil: 4
RecoilRecovery: 0.8
LocalOffset: 0,-2,0,-3,0
AttackTurreted: AttackTurreted:
PrimaryWeapon: 90mma
PrimaryRecoil: 4
PrimaryRecoilRecovery: 0.8
PrimaryLocalOffset: 0,-2,0,-3,0
RenderUnitTurreted: RenderUnitTurreted:
Image: COMBATA Image: COMBATA
LeavesHusk: LeavesHusk:
@@ -196,9 +197,10 @@ SONICTANK:
Range: 6 Range: 6
RenderUnit: RenderUnit:
Image: SONICTANK Image: SONICTANK
Armament:
Weapon: TTankZap
LocalOffset: 0,-15,0,-10,0
AttackFrontal: AttackFrontal:
PrimaryWeapon: TTankZap
PrimaryLocalOffset: 0,-15,0,-10,0
AutoTarget: AutoTarget:
InitialStance: Defend InitialStance: Defend
Explodes: Explodes:
@@ -239,8 +241,9 @@ FREMEN:
Range: 7 Range: 7
AutoTarget: AutoTarget:
ScanRadius: 7 ScanRadius: 7
Armament:
Weapon: Sniper
AttackFrontal: AttackFrontal:
PrimaryWeapon: Sniper
RenderInfantryProne: RenderInfantryProne:
-RenderInfantry: -RenderInfantry:
TakeCover: TakeCover:

View File

@@ -38,9 +38,10 @@ REFH:
# Mobile: # Mobile:
# ROT: 9 # ROT: 9
# Speed: 11 # Speed: 11
# Armament:
# Weapon: M60mg
# LocalOffset: 0,-1,0,-3,0
# AttackFrontal: # AttackFrontal:
# PrimaryWeapon: M60mg
# PrimaryLocalOffset: 0,-1,0,-3,0
# RenderUnit: # RenderUnit:
# Image: QUAD # Image: QUAD
@@ -213,9 +214,10 @@ DEVAST:
RevealsShroud: RevealsShroud:
Range: 7 Range: 7
RenderUnit: RenderUnit:
Armament:
Weapon: 120mm
LocalOffset: 5,-16,0,-2,0, -4,-16,0,-2,0
AttackFrontal: AttackFrontal:
PrimaryWeapon: 120mm
PrimaryLocalOffset: 5,-16,0,-2,0, -4,-16,0,-2,0
AutoTarget: AutoTarget:
InitialStance: Defend InitialStance: Defend
Explodes: Explodes:
@@ -260,6 +262,8 @@ SARDAUKAR:
TakeCover: TakeCover:
-RenderInfantry: -RenderInfantry:
RenderInfantryProne: RenderInfantryProne:
Armament@PRIMARY:
Weapon: Vulcan
Armament@SECONDARY:
Weapon: Slung
AttackFrontal: AttackFrontal:
PrimaryWeapon: Vulcan
SecondaryWeapon: Slung

View File

@@ -16,8 +16,9 @@ RIFLE:
HP: 50 HP: 50
Mobile: Mobile:
Speed: 5 Speed: 5
Armament:
Weapon: M1Carbine
AttackFrontal: AttackFrontal:
PrimaryWeapon: M1Carbine
TakeCover: TakeCover:
-RenderInfantry: -RenderInfantry:
RenderInfantryProne: RenderInfantryProne:
@@ -69,10 +70,13 @@ BAZOOKA:
HP: 45 HP: 45
Mobile: Mobile:
Speed: 4 Speed: 4
Armament@PRIMARY:
Weapon: RedEye
LocalOffset: 0,0,0,-13,0
Armament@SECONDARY:
Weapon: Dragon
LocalOffset: 0,0,0,-13,0
AttackFrontal: AttackFrontal:
PrimaryWeapon: RedEye
SecondaryWeapon: Dragon
PrimaryOffset: 0,0,0,-13
TakeCover: TakeCover:
-RenderInfantry: -RenderInfantry:
RenderInfantryProne: RenderInfantryProne:
@@ -100,8 +104,9 @@ MEDIC:
Mobile: Mobile:
Speed: 4 Speed: 4
AutoHeal: AutoHeal:
Armament:
Weapon: Heal
AttackMedic: AttackMedic:
PrimaryWeapon: Heal
Passenger: Passenger:
PipType: Blue PipType: Blue
-AutoTarget: -AutoTarget:

View File

@@ -158,10 +158,10 @@ TRIKEO:
Speed: 14 Speed: 14
RenderUnit: RenderUnit:
Image: RAIDER Image: RAIDER
Armament:
Weapon: M60mgo
LocalOffset: 0,-6,0,-3,0
AttackFrontal: 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: RevealsShroud:
Range: 5 Range: 5
RenderUnit: RenderUnit:
Armament:
Weapon: FakeMissile
LocalOffset: 0,7,0,-2,0 #7
AttackLoyalty: AttackLoyalty:
PrimaryWeapon: FakeMissile
PrimaryLocalOffset: 0,7,0,-2,0 #7
AutoTarget: AutoTarget:
InitialStance: Defend InitialStance: Defend
Explodes: Explodes:

View File

@@ -474,9 +474,10 @@ GUNTOWER:
Turreted: Turreted:
ROT: 6 ROT: 6
InitialFacing: 128 InitialFacing: 128
Armament:
Weapon: TurretGun
LocalOffset: 0,-11,0,-7,0
AttackTurreted: AttackTurreted:
PrimaryWeapon: TurretGun
PrimaryLocalOffset: 0,-11,0,-7,0
AutoTarget: AutoTarget:
LeavesHusk: LeavesHusk:
HuskActor: Guntower.Husk HuskActor: Guntower.Husk
@@ -529,9 +530,10 @@ ROCKETTOWER:
#-AutoTargetIgnore: #-AutoTargetIgnore:
RenderBuildingSeparateTurret: RenderBuildingSeparateTurret:
# HasMakeAnimation: false # HasMakeAnimation: false
Armament:
Weapon: TowerMissile
LocalOffset: 14,-2,0,-11,0, -14,-2,0,-11,0
AttackTurreted: AttackTurreted:
PrimaryWeapon: TowerMissile
PrimaryLocalOffset: 14,-2,0,-11,0, -14,-2,0,-11,0
Turreted: Turreted:
ROT: 8 ROT: 8
InitialFacing: 128 InitialFacing: 128

View File

@@ -541,8 +541,9 @@ SPICEBLOOM:
# AttackMove: # AttackMove:
# JustMove: true # JustMove: true
# AttackWander: # AttackWander:
# Armament:
# Weapon: WormJaw
# AttackLeap: # AttackLeap:
# PrimaryWeapon: WormJaw
# CanAttackGround: no # CanAttackGround: no
# RenderInfantry: # RenderInfantry:
# BelowUnits: # BelowUnits:

View File

@@ -131,10 +131,10 @@ HARVESTER.starport:
Range: 8 Range: 8
RenderUnit: RenderUnit:
WithMuzzleFlash: WithMuzzleFlash:
Armament:
Weapon: M60mg
LocalOffset: 0,-6,0,-3, 0
AttackFrontal: AttackFrontal:
PrimaryWeapon: M60mg
PrimaryOffset: 0,-6,0,-3
#PrimaryLocalOffset: 1,-1,0,-3,0, -1,-1,0,-3,0
AutoTarget: AutoTarget:
InitialStance: Defend InitialStance: Defend
Explodes: Explodes:
@@ -172,9 +172,10 @@ QUAD:
Range: 7 Range: 7
RenderUnit: RenderUnit:
Image: QUAD Image: QUAD
Armament:
Weapon: QuadRockets
LocalOffset: 0,-3,0,-2,0 #-4
AttackFrontal: AttackFrontal:
PrimaryWeapon: QuadRockets
PrimaryLocalOffset: 0,-3,0,-2,0 #-4
AutoTarget: AutoTarget:
InitialStance: Defend InitialStance: Defend
Explodes: Explodes:
@@ -213,12 +214,13 @@ QUAD.starport:
Range: 6 Range: 6
Turreted: Turreted:
ROT: 6 ROT: 6
AlignWhenIdle: true
Armament:
Weapon: 90mm
Recoil: 4
RecoilRecovery: 0.8
LocalOffset: 0,-2,0,-3,0
AttackTurreted: AttackTurreted:
AlignIdleTurrets: true
PrimaryWeapon: 90mm
PrimaryRecoil: 4
PrimaryRecoilRecovery: 0.8
PrimaryLocalOffset: 0,-2,0,-3,0
RenderUnitTurreted: RenderUnitTurreted:
AutoTarget: AutoTarget:
InitialStance: Defend InitialStance: Defend
@@ -265,11 +267,12 @@ SIEGETANK:
Range: 5 Range: 5
Turreted: Turreted:
ROT: 3 ROT: 3
Armament:
Weapon: 155mm
Recoil: 7
RecoilRecovery: 0.45
LocalOffset: 0,-4,0,-7,0
AttackFrontal: AttackFrontal:
PrimaryWeapon: 155mm
PrimaryRecoil: 7
PrimaryRecoilRecovery: 0.45
PrimaryLocalOffset: 0,-4,0,-7,0
RenderUnitTurreted: RenderUnitTurreted:
Image: SIEGETANK Image: SIEGETANK
Explodes: Explodes:
@@ -328,9 +331,10 @@ MISSILETANK:
Range: 6 Range: 6
RenderUnit: RenderUnit:
Image: MISSILETANK Image: MISSILETANK
Armament:
Weapon: 227mm
LocalOffset: 3,5,0,-4,0, -6,5,0,-4,0
AttackFrontal: AttackFrontal:
PrimaryWeapon: 227mm
PrimaryLocalOffset: 3,5,0,-4,0, -6,5,0,-4,0
AutoTarget: AutoTarget:
InitialStance: Defend InitialStance: Defend
Explodes: Explodes:

View File

@@ -83,9 +83,10 @@ MIG:
Type: Light Type: Light
RevealsShroud: RevealsShroud:
Range: 12 Range: 12
Armament:
Weapon: Maverick
LocalOffset: -15,0,0,0,-10, 15,0,0,0,6
AttackPlane: AttackPlane:
PrimaryWeapon: Maverick
PrimaryLocalOffset: -15,0,0,0,-10, 15,0,0,0,6
FacingTolerance: 20 FacingTolerance: 20
Plane: Plane:
InitialFacing: 192 InitialFacing: 192
@@ -127,11 +128,13 @@ YAK:
Type: Light Type: Light
RevealsShroud: RevealsShroud:
Range: 10 Range: 10
Armament@PRIMARY:
Weapon: ChainGun
LocalOffset: -5,-6,0,0,0
Armament@SECONDARY:
Weapon: ChainGun
LocalOffset: 5,-6,0,0,0
AttackPlane: AttackPlane:
PrimaryWeapon: ChainGun
SecondaryWeapon: ChainGun
PrimaryOffset: -5,-6,0,0
SecondaryOffset: 5,-6,0,0
FacingTolerance: 20 FacingTolerance: 20
Plane: Plane:
RearmBuildings: afld RearmBuildings: afld
@@ -215,9 +218,10 @@ HELI:
Type: Heavy Type: Heavy
RevealsShroud: RevealsShroud:
Range: 12 Range: 12
Armament:
Weapon: HellfireAG
LocalOffset: -5,0,0,2,0
AttackHeli: AttackHeli:
PrimaryWeapon: HellfireAG
PrimaryOffset: -5,0,0,2
FacingTolerance: 20 FacingTolerance: 20
Helicopter: Helicopter:
RearmBuildings: hpad RearmBuildings: hpad
@@ -256,11 +260,13 @@ HIND:
Type: Heavy Type: Heavy
RevealsShroud: RevealsShroud:
Range: 10 Range: 10
Armament@PRIMARY:
Weapon: ChainGun
LocalOffset: -5,-2,0,2,0
Armament@SECONDARY:
Weapon: ChainGun
LocalOffset: 5,-2,0,2,0
AttackHeli: AttackHeli:
PrimaryWeapon: ChainGun
SecondaryWeapon: ChainGun
PrimaryOffset: -5,-2,0,2
SecondaryOffset: 5,-2,0,2
FacingTolerance: 20 FacingTolerance: 20
Helicopter: Helicopter:
RearmBuildings: hpad RearmBuildings: hpad

View File

@@ -249,8 +249,9 @@
Speed: 4 Speed: 4
RevealsShroud: RevealsShroud:
Range: 2 Range: 2
Armament:
Weapon: Pistol
AttackFrontal: AttackFrontal:
PrimaryWeapon: Pistol
ProximityCaptor: ProximityCaptor:
Types:CivilianInfantry Types:CivilianInfantry
-RenderInfantry: -RenderInfantry:

View File

@@ -20,8 +20,9 @@ DOG:
RevealsShroud: RevealsShroud:
Range: 5 Range: 5
AutoTarget: AutoTarget:
Armament:
Weapon: DogJaw
AttackLeap: AttackLeap:
PrimaryWeapon: DogJaw
CanAttackGround: no CanAttackGround: no
RenderInfantry: RenderInfantry:
IdleAnimations: idle1,idle2 IdleAnimations: idle1,idle2
@@ -44,8 +45,9 @@ E1:
HP: 50 HP: 50
Mobile: Mobile:
Speed: 4 Speed: 4
Armament:
Weapon: M1Carbine
AttackFrontal: AttackFrontal:
PrimaryWeapon: M1Carbine
TakeCover: TakeCover:
-RenderInfantry: -RenderInfantry:
RenderInfantryProne: RenderInfantryProne:
@@ -69,10 +71,11 @@ E2:
HP: 50 HP: 50
Mobile: Mobile:
Speed: 5 Speed: 5
AttackFrontal: Armament:
PrimaryWeapon: Grenade Weapon: Grenade
PrimaryOffset: 0,0,0,-13 LocalOffset: 0,0,0,-13,0
FireDelay: 15 FireDelay: 15
AttackFrontal:
TakeCover: TakeCover:
-RenderInfantry: -RenderInfantry:
RenderInfantryProne: RenderInfantryProne:
@@ -98,10 +101,13 @@ E3:
HP: 45 HP: 45
Mobile: Mobile:
Speed: 3 Speed: 3
Armament@PRIMARY:
Weapon: RedEye
LocalOffset: 0,0,0,-13,0
Armament@SECONDARY:
Weapon: Dragon
LocalOffset: 0,0,0,-13,0
AttackFrontal: AttackFrontal:
PrimaryWeapon: RedEye
SecondaryWeapon: Dragon
PrimaryOffset: 0,0,0,-13
TakeCover: TakeCover:
-RenderInfantry: -RenderInfantry:
RenderInfantryProne: RenderInfantryProne:
@@ -125,10 +131,11 @@ E4:
HP: 40 HP: 40
Mobile: Mobile:
Speed: 3 Speed: 3
AttackFrontal: Armament:
PrimaryWeapon: Flamer Weapon: Flamer
PrimaryOffset: 0,-10,0,-8 LocalOffset: 0,-10,0,-8,0
FireDelay: 8 FireDelay: 8
AttackFrontal:
TakeCover: TakeCover:
-RenderInfantry: -RenderInfantry:
RenderInfantryProne: RenderInfantryProne:
@@ -254,9 +261,11 @@ E7:
C4Delay: 45 C4Delay: 45
Passenger: Passenger:
PipType: Red PipType: Red
Armament@PRIMARY:
Weapon: Colt45
Armament@SECONDARY:
Weapon: Colt45
AttackFrontal: AttackFrontal:
PrimaryWeapon: Colt45
SecondaryWeapon: Colt45
TakeCover: TakeCover:
-RenderInfantry: -RenderInfantry:
RenderInfantryProne: RenderInfantryProne:
@@ -286,8 +295,9 @@ MEDI:
Passenger: Passenger:
PipType: Yellow PipType: Yellow
AutoHeal: AutoHeal:
Armament:
Weapon: Heal
AttackMedic: AttackMedic:
PrimaryWeapon: Heal
TakeCover: TakeCover:
-AutoTarget: -AutoTarget:
AttackMove: AttackMove:
@@ -320,8 +330,9 @@ MECH:
Passenger: Passenger:
PipType: Yellow PipType: Yellow
AutoHeal: AutoHeal:
Armament:
Weapon: Repair
AttackMedic: AttackMedic:
PrimaryWeapon: Repair
TakeCover: TakeCover:
-AutoTarget: -AutoTarget:
AttackMove: AttackMove:
@@ -371,9 +382,10 @@ SHOK:
Speed: 3 Speed: 3
RevealsShroud: RevealsShroud:
Range: 4 Range: 4
Armament:
Weapon: PortaTesla
LocalOffset: 0,-10,0,-8,0
AttackFrontal: AttackFrontal:
PrimaryWeapon: PortaTesla
PrimaryOffset: 0,-10,0,-8
TakeCover: TakeCover:
-RenderInfantry: -RenderInfantry:
RenderInfantryProne: RenderInfantryProne:

View File

@@ -30,10 +30,11 @@ SS:
CloakDelay: 50 CloakDelay: 50
CloakSound: subshow1.aud CloakSound: subshow1.aud
UncloakSound: subshow1.aud UncloakSound: subshow1.aud
AttackFrontal: Armament:
PrimaryWeapon: TorpTube Weapon: TorpTube
PrimaryLocalOffset: -4,0,0,0,0, 4,0,0,0,0 LocalOffset: -4,0,0,0,0, 4,0,0,0,0
FireDelay: 2 FireDelay: 2
AttackFrontal:
Selectable: Selectable:
Bounds: 38,38 Bounds: 38,38
Chronoshiftable: Chronoshiftable:
@@ -76,9 +77,10 @@ MSUB:
CloakDelay: 100 CloakDelay: 100
CloakSound: subshow1.aud CloakSound: subshow1.aud
UncloakSound: subshow1.aud UncloakSound: subshow1.aud
AttackFrontal: Armament:
PrimaryWeapon: SubMissile Weapon: SubMissile
FireDelay: 2 FireDelay: 2
AttackFrontal:
Selectable: Selectable:
Bounds: 44,44 Bounds: 44,44
Chronoshiftable: Chronoshiftable:
@@ -113,11 +115,14 @@ DD:
Range: 6 Range: 6
Turreted: Turreted:
ROT: 7 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: AttackTurreted:
PrimaryWeapon: Stinger
SecondaryWeapon: DepthCharge
PrimaryOffset: 0,-8,0,-3
PrimaryLocalOffset: -4,0,0,0,-20, 4,0,0,0,20
Selectable: Selectable:
Bounds: 38,38 Bounds: 38,38
RenderUnitTurreted: RenderUnitTurreted:
@@ -151,19 +156,27 @@ CA:
Speed: 4 Speed: 4
RevealsShroud: RevealsShroud:
Range: 7 Range: 7
Turreted: Turreted@PRIMARY:
Turret: primary
Offset: 0,17,0,-2
ROT: 3 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: 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: Selectable:
Bounds: 44,44 Bounds: 44,44
RenderUnitTurreted: RenderUnitTurreted:
@@ -226,10 +239,12 @@ PT:
Range: 7 Range: 7
Turreted: Turreted:
ROT: 7 ROT: 7
Offset: 0,-6,0,-1
Armament@PRIMARY:
Weapon: 2Inch
Armament@SECONDARY:
Weapon: DepthCharge
AttackTurreted: AttackTurreted:
PrimaryWeapon: 2Inch
SecondaryWeapon: DepthCharge
PrimaryOffset: 0,-6,0,-1
Selectable: Selectable:
Bounds: 32,32 Bounds: 32,32
RenderUnitTurreted: RenderUnitTurreted:

View File

@@ -315,10 +315,11 @@ TSLA:
RevealsShroud: RevealsShroud:
Range: 8 Range: 8
RenderBuildingCharge: RenderBuildingCharge:
Armament:
Weapon: TeslaZap
LocalOffset: 0,0,0,-10,0
AttackTesla: AttackTesla:
PrimaryWeapon: TeslaZap
ReloadTime: 120 ReloadTime: 120
PrimaryOffset: 0,0,0,-10
AutoTarget: AutoTarget:
IronCurtainable: IronCurtainable:
-RenderBuilding: -RenderBuilding:
@@ -354,9 +355,11 @@ AGUN:
ROT: 15 ROT: 15
InitialFacing: 224 InitialFacing: 224
RenderBuildingTurreted: RenderBuildingTurreted:
Armament@PRIMARY:
Weapon: ZSU-23
Armament@SECONDARY:
Weapon: ZSU-23
AttackTurreted: AttackTurreted:
PrimaryWeapon: ZSU-23
SecondaryWeapon: ZSU-23
AutoTarget: AutoTarget:
IronCurtainable: IronCurtainable:
-RenderBuilding: -RenderBuilding:
@@ -419,9 +422,10 @@ PBOX:
IronCurtainable: IronCurtainable:
RenderRangeCircle: RenderRangeCircle:
AutoTarget: AutoTarget:
Armament:
Weapon: Vulcan
LocalOffset: 0,-11,0,0,0
AttackTurreted: AttackTurreted:
PrimaryWeapon: Vulcan
PrimaryLocalOffset: 0,-11,0,0,0
WithMuzzleFlash: WithMuzzleFlash:
Turreted: Turreted:
ROT: 255 ROT: 255
@@ -452,9 +456,10 @@ HBOX:
IronCurtainable: IronCurtainable:
RenderRangeCircle: RenderRangeCircle:
AutoTarget: AutoTarget:
Armament:
Weapon: Vulcan
LocalOffset: 0,-11,0,0,0
AttackTurreted: AttackTurreted:
PrimaryWeapon: Vulcan
PrimaryLocalOffset: 0,-11,0,0,0
WithMuzzleFlash: WithMuzzleFlash:
Turreted: Turreted:
ROT: 255 ROT: 255
@@ -485,8 +490,9 @@ GUN:
ROT: 12 ROT: 12
InitialFacing: 50 InitialFacing: 50
RenderBuildingTurreted: RenderBuildingTurreted:
Armament:
Weapon: TurretGun
AttackTurreted: AttackTurreted:
PrimaryWeapon: TurretGun
AutoTarget: AutoTarget:
IronCurtainable: IronCurtainable:
-RenderBuilding: -RenderBuilding:
@@ -516,10 +522,11 @@ FTUR:
Range: 6 Range: 6
Turreted: Turreted:
ROT: 255 ROT: 255
Offset: 0,0,0,-2
Armament:
Weapon: FireballLauncher
LocalOffset: 0,-12,0,0,0
AttackTurreted: AttackTurreted:
PrimaryWeapon: FireballLauncher
PrimaryOffset: 0,0,0,-2
PrimaryLocalOffset: 0,-12,0,0,0
AutoTarget: AutoTarget:
IronCurtainable: IronCurtainable:
RenderRangeCircle: RenderRangeCircle:
@@ -552,8 +559,9 @@ SAM:
ROT: 30 ROT: 30
InitialFacing: 0 InitialFacing: 0
RenderBuildingTurreted: RenderBuildingTurreted:
Armament:
Weapon: Nike
AttackTurreted: AttackTurreted:
PrimaryWeapon: Nike
WithMuzzleFlash: WithMuzzleFlash:
AutoTarget: AutoTarget:
IronCurtainable: IronCurtainable:

View File

@@ -18,8 +18,9 @@ V2RL:
Speed: 7 Speed: 7
RevealsShroud: RevealsShroud:
Range: 5 Range: 5
Armament:
Weapon: SCUD
AttackFrontal: AttackFrontal:
PrimaryWeapon: SCUD
RenderUnitReload: RenderUnitReload:
AutoTarget: AutoTarget:
Explodes: Explodes:
@@ -48,10 +49,11 @@ V2RL:
Range: 4 Range: 4
Turreted: Turreted:
ROT: 5 ROT: 5
Armament:
Weapon: 25mm
Recoil: 2
RecoilRecovery: 0.5
AttackTurreted: AttackTurreted:
PrimaryWeapon: 25mm
PrimaryRecoil: 2
PrimaryRecoilRecovery: 0.5
RenderUnitTurreted: RenderUnitTurreted:
AutoTarget: AutoTarget:
Explodes: Explodes:
@@ -80,10 +82,11 @@ V2RL:
Range: 5 Range: 5
Turreted: Turreted:
ROT: 5 ROT: 5
Armament:
Weapon: 90mm
Recoil: 3
RecoilRecovery: 0.9
AttackTurreted: AttackTurreted:
PrimaryWeapon: 90mm
PrimaryRecoil: 3
PrimaryRecoilRecovery: 0.9
RenderUnitTurreted: RenderUnitTurreted:
AutoTarget: AutoTarget:
Explodes: Explodes:
@@ -114,11 +117,12 @@ V2RL:
Range: 5 Range: 5
Turreted: Turreted:
ROT: 5 ROT: 5
Armament:
Weapon: 105mm
Recoil: 3
RecoilRecovery: 0.9
LocalOffset: 2,0,0,0,0, -2,0,0,0,0
AttackTurreted: AttackTurreted:
PrimaryWeapon: 105mm
PrimaryRecoil: 3
PrimaryRecoilRecovery: 0.9
PrimaryLocalOffset: 2,0,0,0,0, -2,0,0,0,0
RenderUnitTurreted: RenderUnitTurreted:
AutoTarget: AutoTarget:
Explodes: Explodes:
@@ -150,13 +154,15 @@ V2RL:
Range: 6 Range: 6
Turreted: Turreted:
ROT: 2 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: 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: RenderUnitTurreted:
AutoTarget: AutoTarget:
Explodes: Explodes:
@@ -190,8 +196,9 @@ ARTY:
Speed: 6 Speed: 6
RevealsShroud: RevealsShroud:
Range: 5 Range: 5
Armament:
Weapon: 155mm
AttackFrontal: AttackFrontal:
PrimaryWeapon: 155mm
RenderUnit: RenderUnit:
Explodes: Explodes:
Weapon: UnitExplode Weapon: UnitExplode
@@ -298,9 +305,10 @@ JEEP:
Range: 6 Range: 6
Turreted: Turreted:
ROT: 10 ROT: 10
Offset: 0,0,0,-2
Armament:
Weapon: M60mg
AttackTurreted: AttackTurreted:
PrimaryWeapon: M60mg
PrimaryOffset: 0,0,0,-2
WithMuzzleFlash: WithMuzzleFlash:
RenderUnitTurreted: RenderUnitTurreted:
Explodes: Explodes:
@@ -328,9 +336,10 @@ APC:
Crushes: wall, atmine, crate, infantry Crushes: wall, atmine, crate, infantry
RevealsShroud: RevealsShroud:
Range: 5 Range: 5
Armament:
Weapon: M60mg
LocalOffset: 0,0,0,-4,0
AttackFrontal: AttackFrontal:
PrimaryWeapon: M60mg
PrimaryOffset: 0,0,0,-4
RenderUnit: RenderUnit:
WithMuzzleFlash: WithMuzzleFlash:
AutoTarget: AutoTarget:
@@ -434,9 +443,10 @@ TTNK:
Crushes: wall, atmine, crate, infantry Crushes: wall, atmine, crate, infantry
RevealsShroud: RevealsShroud:
Range: 7 Range: 7
Armament:
Weapon: TTankZap
LocalOffset: 0,0,0,-5,0
AttackFrontal: AttackFrontal:
PrimaryWeapon: TTankZap
PrimaryOffset: 0,0,0,-5
RenderUnitSpinner: RenderUnitSpinner:
Selectable: Selectable:
Bounds: 28,28,0,0 Bounds: 28,28,0,0
@@ -500,10 +510,12 @@ CTNK:
Range: 6 Range: 6
RenderUnit: RenderUnit:
AutoTarget: 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: 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: ChronoshiftDeploy:
EmptyWeapon: UnitExplodeSmall EmptyWeapon: UnitExplodeSmall

Binary file not shown.

Binary file not shown.

BIN
mods/ra/maps/bomber-john/jmin.shp Executable file

Binary file not shown.

BIN
mods/ra/maps/bomber-john/map.bin Executable file

Binary file not shown.

959
mods/ra/maps/bomber-john/map.yaml Executable file
View File

@@ -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:

Binary file not shown.

Binary file not shown.

View File

@@ -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:

Binary file not shown.

BIN
mods/ra/maps/drop-zone-w/map.bin Executable file

Binary file not shown.

333
mods/ra/maps/drop-zone-w/map.yaml Executable file
View File

@@ -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:

Binary file not shown.

BIN
mods/ra/maps/drop-zone/map.bin Executable file

Binary file not shown.

236
mods/ra/maps/drop-zone/map.yaml Executable file
View File

@@ -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:

View File

@@ -2568,13 +2568,16 @@ Rules:
Range: 6 Range: 6
Turreted: Turreted:
ROT: 1 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: 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: RenderUnitTurreted:
Image: 4TNK Image: 4TNK
AutoTarget: AutoTarget:

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@@ -95,9 +95,10 @@ MIG:
Type: Light Type: Light
RevealsShroud: RevealsShroud:
Range: 12 Range: 12
Armament:
Weapon: Maverick
LocalOffset: -15,0,0,0,-10, 15,0,0,0,6
AttackPlane: AttackPlane:
PrimaryWeapon: Maverick
PrimaryLocalOffset: -15,0,0,0,-10, 15,0,0,0,6
FacingTolerance: 20 FacingTolerance: 20
Plane: Plane:
InitialFacing: 192 InitialFacing: 192
@@ -144,11 +145,13 @@ YAK:
Type: Light Type: Light
RevealsShroud: RevealsShroud:
Range: 10 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: AttackPlane:
PrimaryWeapon: ChainGun.Yak
SecondaryWeapon: ChainGun.Yak
PrimaryOffset: -5,-6,0,0
SecondaryOffset: 5,-6,0,0
FacingTolerance: 20 FacingTolerance: 20
Plane: Plane:
RearmBuildings: afld RearmBuildings: afld
@@ -250,11 +253,13 @@ HELI:
Type: Light Type: Light
RevealsShroud: RevealsShroud:
Range: 12 Range: 12
Armament@PRIMARY:
Weapon: HellfireAA
LocalOffset: -5,0,0,2,0
Armament@SECONDARY:
Weapon: HellfireAG
Offset: 5,0,0,2,0
AttackHeli: AttackHeli:
PrimaryWeapon: HellfireAG
SecondaryWeapon: HellfireAA
PrimaryOffset: -5,0,0,2
SecondaryOffset: 5,0,0,2
FacingTolerance: 20 FacingTolerance: 20
Helicopter: Helicopter:
RearmBuildings: hpad RearmBuildings: hpad
@@ -294,11 +299,13 @@ HIND:
Type: Light Type: Light
RevealsShroud: RevealsShroud:
Range: 10 Range: 10
Armament@PRIMARY:
Weapon: ChainGun
LocalOffset: -5,-2,0,2,0
Armament@SECONDARY:
Weapon: ChainGun
LocalOffset: -5,-2,0,2,0
AttackHeli: AttackHeli:
PrimaryWeapon: ChainGun
SecondaryWeapon: ChainGun
PrimaryOffset: -5,-2,0,2
SecondaryOffset: 5,-2,0,2
FacingTolerance: 20 FacingTolerance: 20
Helicopter: Helicopter:
RearmBuildings: hpad RearmBuildings: hpad

View File

@@ -103,9 +103,10 @@ V01.SNIPER:
AutoTarget: AutoTarget:
Turreted: Turreted:
ROT: 255 ROT: 255
Armament:
Weapon: Sniper
LocalOffset: 0,-11,0,0,0
AttackTurreted: AttackTurreted:
PrimaryWeapon: Sniper
PrimaryLocalOffset: 0,-11,0,0,0
Cargo: Cargo:
InitialUnits: sniper InitialUnits: sniper
Types: Infantry Types: Infantry

View File

@@ -289,8 +289,9 @@
Speed: 4 Speed: 4
RevealsShroud: RevealsShroud:
Range: 2 Range: 2
Armament:
Weapon: Pistol
AttackFrontal: AttackFrontal:
PrimaryWeapon: Pistol
ProximityCaptor: ProximityCaptor:
Types:CivilianInfantry Types:CivilianInfantry
-RenderInfantry: -RenderInfantry:

View File

@@ -20,9 +20,9 @@ DOG:
Speed: 7 Speed: 7
RevealsShroud: RevealsShroud:
Range: 5 Range: 5
AutoTarget: Armament:
Weapon: DogJaw
AttackLeap: AttackLeap:
PrimaryWeapon: DogJaw
CanAttackGround: no CanAttackGround: no
RenderInfantry: RenderInfantry:
IdleAnimations: idle1,idle2 IdleAnimations: idle1,idle2
@@ -46,8 +46,9 @@ E1:
HP: 50 HP: 50
Mobile: Mobile:
Speed: 4 Speed: 4
Armament:
Weapon: M1Carbine
AttackFrontal: AttackFrontal:
PrimaryWeapon: M1Carbine
TakeCover: TakeCover:
-RenderInfantry: -RenderInfantry:
RenderInfantryProne: RenderInfantryProne:
@@ -72,10 +73,11 @@ E2:
HP: 50 HP: 50
Mobile: Mobile:
Speed: 5 Speed: 5
AttackFrontal: Armament:
PrimaryWeapon: Grenade Weapon: Grenade
PrimaryOffset: 0,0,0,-13 LocalOffset: 0,0,0,-13,0
FireDelay: 15 FireDelay: 15
AttackFrontal:
TakeCover: TakeCover:
-RenderInfantry: -RenderInfantry:
RenderInfantryProne: RenderInfantryProne:
@@ -102,10 +104,13 @@ E3:
HP: 45 HP: 45
Mobile: Mobile:
Speed: 3 Speed: 3
Armament@PRIMARY:
Weapon: RedEye
LocalOffset: 0,0,0,-13,0
Armament@SECONDARY:
Weapon: Dragon
LocalOffset: 0,0,0,-13,0
AttackFrontal: AttackFrontal:
PrimaryWeapon: RedEye
SecondaryWeapon: Dragon
PrimaryOffset: 0,0,0,-13
TakeCover: TakeCover:
-RenderInfantry: -RenderInfantry:
RenderInfantryProne: RenderInfantryProne:
@@ -130,10 +135,11 @@ E4:
HP: 40 HP: 40
Mobile: Mobile:
Speed: 3 Speed: 3
AttackFrontal: Armament:
PrimaryWeapon: Flamer Weapon: Flamer
PrimaryOffset: 0,-10,0,-8 LocalOffset: 0,-10,0,-8,0
FireDelay: 8 FireDelay: 8
AttackFrontal:
TakeCover: TakeCover:
-RenderInfantry: -RenderInfantry:
RenderInfantryProne: RenderInfantryProne:
@@ -204,8 +210,9 @@ SPY:
-RenderInfantry: -RenderInfantry:
RenderSpy: RenderSpy:
IdleAnimations: idle1,idle2 IdleAnimations: idle1,idle2
Armament:
Weapon: SilencedPPK
AttackFrontal: AttackFrontal:
PrimaryWeapon: SilencedPPK
E7: E7:
Inherits: ^Infantry Inherits: ^Infantry
@@ -234,9 +241,11 @@ E7:
C4Delay: 45 C4Delay: 45
Passenger: Passenger:
PipType: Red PipType: Red
Armament@PRIMARY:
Weapon: Colt45
Armament@SECONDARY:
Weapon: Colt45
AttackFrontal: AttackFrontal:
PrimaryWeapon: Colt45
SecondaryWeapon: Colt45
TakeCover: TakeCover:
-RenderInfantry: -RenderInfantry:
RenderInfantryProne: RenderInfantryProne:
@@ -270,9 +279,11 @@ E8:
Range: 4 Range: 4
Passenger: Passenger:
PipType: Red PipType: Red
Armament@PRIMARY:
Weapon: VolkAT
Armament@SECONDARY:
Weapon: VolkNapalm
AttackFrontal: AttackFrontal:
PrimaryWeapon: VolkAT
SecondaryWeapon: VolkNapalm
TakeCover: TakeCover:
-RenderInfantry: -RenderInfantry:
RenderInfantryProne: RenderInfantryProne:
@@ -308,8 +319,9 @@ MEDI:
Passenger: Passenger:
PipType: Yellow PipType: Yellow
AutoHeal: AutoHeal:
Armament:
Weapon: Heal
AttackMedic: AttackMedic:
PrimaryWeapon: Heal
TakeCover: TakeCover:
-AutoTarget: -AutoTarget:
AttackMove: AttackMove:
@@ -343,8 +355,9 @@ MECH:
Passenger: Passenger:
PipType: Yellow PipType: Yellow
AutoHeal: AutoHeal:
Armament:
Weapon: Repair
AttackMedic: AttackMedic:
PrimaryWeapon: Repair
TakeCover: TakeCover:
-AutoTarget: -AutoTarget:
AttackMove: AttackMove:
@@ -457,9 +470,10 @@ SHOK:
Speed: 3 Speed: 3
RevealsShroud: RevealsShroud:
Range: 4 Range: 4
Armament:
Weapon: PortaTesla
LocalOffset: 0,-10,0,-8,0
AttackFrontal: AttackFrontal:
PrimaryWeapon: PortaTesla
PrimaryOffset: 0,-10,0,-8
TakeCover: TakeCover:
-RenderInfantry: -RenderInfantry:
RenderInfantryProne: RenderInfantryProne:
@@ -492,8 +506,9 @@ SNIPER:
Range: 6 Range: 6
AutoTarget: AutoTarget:
InitialStance: HoldFire InitialStance: HoldFire
Armament:
Weapon: Sniper
AttackFrontal: AttackFrontal:
PrimaryWeapon: Sniper
TakeCover: TakeCover:
-RenderInfantry: -RenderInfantry:
RenderInfantryProne: RenderInfantryProne:

View File

@@ -31,10 +31,11 @@ SS:
CloakDelay: 50 CloakDelay: 50
CloakSound: subshow1.aud CloakSound: subshow1.aud
UncloakSound: subshow1.aud UncloakSound: subshow1.aud
AttackFrontal: Armament:
PrimaryWeapon: TorpTube Weapon: TorpTube
PrimaryLocalOffset: -4,0,0,0,0, 4,0,0,0,0 LocalOffset: -4,0,0,0,0, 4,0,0,0,0
FireDelay: 2 FireDelay: 2
AttackFrontal:
Selectable: Selectable:
Bounds: 38,38 Bounds: 38,38
Chronoshiftable: Chronoshiftable:
@@ -78,9 +79,10 @@ MSUB:
CloakDelay: 100 CloakDelay: 100
CloakSound: subshow1.aud CloakSound: subshow1.aud
UncloakSound: subshow1.aud UncloakSound: subshow1.aud
AttackFrontal: Armament:
PrimaryWeapon: SubMissile Weapon: SubMissile
FireDelay: 2 FireDelay: 2
AttackFrontal:
Selectable: Selectable:
Bounds: 44,44 Bounds: 44,44
Chronoshiftable: Chronoshiftable:
@@ -116,11 +118,13 @@ DD:
Range: 6 Range: 6
Turreted: Turreted:
ROT: 7 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: AttackTurreted:
PrimaryWeapon: Stinger
SecondaryWeapon: DepthCharge
PrimaryOffset: 0,-8,0,-3
PrimaryLocalOffset: -4,0,0,0,-20, 4,0,0,0,20
Selectable: Selectable:
Bounds: 38,38 Bounds: 38,38
RenderUnitTurreted: RenderUnitTurreted:
@@ -155,19 +159,27 @@ CA:
Speed: 2 Speed: 2
RevealsShroud: RevealsShroud:
Range: 7 Range: 7
Turreted: Turreted@PRIMARY:
Turret: primary
Offset: 0,17,0,-2
ROT: 3 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: 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: Selectable:
Bounds: 44,44 Bounds: 44,44
RenderUnitTurreted: RenderUnitTurreted:
@@ -232,10 +244,12 @@ PT:
Range: 7 Range: 7
Turreted: Turreted:
ROT: 7 ROT: 7
Offset: 0,-6,0,-1
Armament@PRIMARY:
Weapon: 2Inch
Armament@SECONDARY:
Weapon: DepthCharge
AttackTurreted: AttackTurreted:
PrimaryWeapon: 2Inch
SecondaryWeapon: DepthCharge
PrimaryOffset: 0,-6,0,-1
Selectable: Selectable:
Bounds: 32,32 Bounds: 32,32
RenderUnitTurreted: RenderUnitTurreted:

View File

@@ -282,10 +282,11 @@ TSLA:
RevealsShroud: RevealsShroud:
Range: 8 Range: 8
RenderBuildingCharge: RenderBuildingCharge:
Armament:
Weapon: TeslaZap
LocalOffset: 0,0,0,-10,0
AttackTesla: AttackTesla:
PrimaryWeapon: TeslaZap
ReloadTime: 120 ReloadTime: 120
PrimaryOffset: 0,0,0,-10
AutoTarget: AutoTarget:
IronCurtainable: IronCurtainable:
-RenderBuilding: -RenderBuilding:
@@ -323,9 +324,11 @@ AGUN:
ROT: 15 ROT: 15
InitialFacing: 224 InitialFacing: 224
RenderBuildingTurreted: RenderBuildingTurreted:
Armament@PRIMARY:
Weapon: ZSU-23
Armament@SECONDARY:
Weapon: ZSU-23
AttackTurreted: AttackTurreted:
PrimaryWeapon: ZSU-23
SecondaryWeapon: ZSU-23
AutoTarget: AutoTarget:
IronCurtainable: IronCurtainable:
-RenderBuilding: -RenderBuilding:
@@ -442,9 +445,10 @@ PBOX.E1:
Image: PBOX Image: PBOX
RenderRangeCircle: RenderRangeCircle:
AutoTarget: AutoTarget:
Armament:
Weapon: Vulcan
LocalOffset: 0,-11,0,0,0
AttackTurreted: AttackTurreted:
PrimaryWeapon: Vulcan
PrimaryLocalOffset: 0,-11,0,0,0
WithMuzzleFlash: WithMuzzleFlash:
Cargo: Cargo:
InitialUnits: e1 InitialUnits: e1
@@ -464,9 +468,10 @@ PBOX.E3:
Image: PBOX Image: PBOX
RenderRangeCircle: RenderRangeCircle:
AutoTarget: AutoTarget:
Armament:
Weapon: Dragon
LocalOffset: 0,-11,0,0,0
AttackTurreted: AttackTurreted:
PrimaryWeapon: Dragon
PrimaryLocalOffset: 0,-11,0,0,0
PBOX.E4: PBOX.E4:
Inherits: PBOX Inherits: PBOX
@@ -476,9 +481,10 @@ PBOX.E4:
Image: PBOX Image: PBOX
RenderRangeCircle: RenderRangeCircle:
AutoTarget: AutoTarget:
Armament:
Weapon: Flamer
LocalOffset: 0,-11,0,0,0
AttackTurreted: AttackTurreted:
PrimaryWeapon: Flamer
PrimaryLocalOffset: 0,-11,0,0,0
PBOX.E7: PBOX.E7:
Inherits: PBOX Inherits: PBOX
@@ -488,9 +494,10 @@ PBOX.E7:
Image: PBOX Image: PBOX
RenderRangeCircle: RenderRangeCircle:
AutoTarget: AutoTarget:
Armament:
Weapon: Colt45
LocalOffset: 0,-11,0,0,0
AttackTurreted: AttackTurreted:
PrimaryWeapon: Colt45
PrimaryLocalOffset: 0,-11,0,0,0
PBOX.SHOK: PBOX.SHOK:
Inherits: PBOX Inherits: PBOX
@@ -500,9 +507,10 @@ PBOX.SHOK:
Image: PBOX Image: PBOX
RenderRangeCircle: RenderRangeCircle:
AutoTarget: AutoTarget:
Armament:
Weapon: PortaTesla
LocalOffset: 0,-11,0,0,0
AttackTurreted: AttackTurreted:
PrimaryWeapon: PortaTesla
PrimaryLocalOffset: 0,-11,0,0,0
PBOX.SNIPER: PBOX.SNIPER:
Inherits: PBOX Inherits: PBOX
@@ -512,9 +520,10 @@ PBOX.SNIPER:
Image: PBOX Image: PBOX
RenderRangeCircle: RenderRangeCircle:
AutoTarget: AutoTarget:
Armament:
Weapon: Sniper
LocalOffset: 0,-11,0,0,0
AttackTurreted: AttackTurreted:
PrimaryWeapon: Sniper
PrimaryLocalOffset: 0,-11,0,0,0
HBOX: HBOX:
Inherits: ^Building Inherits: ^Building
@@ -599,9 +608,10 @@ HBOX.E1:
Image: HBOX Image: HBOX
RenderRangeCircle: RenderRangeCircle:
AutoTarget: AutoTarget:
Armament:
Weapon: Vulcan
LocalOffset: 0,-11,0,0,0
AttackTurreted: AttackTurreted:
PrimaryWeapon: Vulcan
PrimaryLocalOffset: 0,-11,0,0,0
WithMuzzleFlash: WithMuzzleFlash:
Cargo: Cargo:
InitialUnits: e1 InitialUnits: e1
@@ -621,9 +631,10 @@ HBOX.E3:
Image: HBOX Image: HBOX
RenderRangeCircle: RenderRangeCircle:
AutoTarget: AutoTarget:
Armament:
Weapon: Dragon
LocalOffset: 0,-11,0,0,0
AttackTurreted: AttackTurreted:
PrimaryWeapon: Dragon
PrimaryLocalOffset: 0,-11,0,0,0
HBOX.E4: HBOX.E4:
Inherits: HBOX Inherits: HBOX
@@ -633,9 +644,10 @@ HBOX.E4:
Image: HBOX Image: HBOX
RenderRangeCircle: RenderRangeCircle:
AutoTarget: AutoTarget:
Armament:
Weapon: Flamer
LocalOffset: 0,-11,0,0,0
AttackTurreted: AttackTurreted:
PrimaryWeapon: Flamer
PrimaryLocalOffset: 0,-11,0,0,0
HBOX.E7: HBOX.E7:
Inherits: HBOX Inherits: HBOX
@@ -645,9 +657,10 @@ HBOX.E7:
Image: HBOX Image: HBOX
RenderRangeCircle: RenderRangeCircle:
AutoTarget: AutoTarget:
Armament:
Weapon: Colt45
LocalOffset: 0,-11,0,0,0
AttackTurreted: AttackTurreted:
PrimaryWeapon: Colt45
PrimaryLocalOffset: 0,-11,0,0,0
HBOX.SHOK: HBOX.SHOK:
Inherits: HBOX Inherits: HBOX
@@ -657,9 +670,10 @@ HBOX.SHOK:
Image: HBOX Image: HBOX
RenderRangeCircle: RenderRangeCircle:
AutoTarget: AutoTarget:
Armament:
Weapon: PortaTesla
LocalOffset: 0,-11,0,0,0
AttackTurreted: AttackTurreted:
PrimaryWeapon: PortaTesla
PrimaryLocalOffset: 0,-11,0,0,0
HBOX.SNIPER: HBOX.SNIPER:
Inherits: HBOX Inherits: HBOX
@@ -669,9 +683,10 @@ HBOX.SNIPER:
Image: HBOX Image: HBOX
RenderRangeCircle: RenderRangeCircle:
AutoTarget: AutoTarget:
Armament:
Weapon: Sniper
LocalOffset: 0,-11,0,0,0
AttackTurreted: AttackTurreted:
PrimaryWeapon: Sniper
PrimaryLocalOffset: 0,-11,0,0,0
GUN: GUN:
Inherits: ^Building Inherits: ^Building
@@ -699,8 +714,9 @@ GUN:
ROT: 12 ROT: 12
InitialFacing: 50 InitialFacing: 50
RenderBuildingTurreted: RenderBuildingTurreted:
Armament:
Weapon: TurretGun
AttackTurreted: AttackTurreted:
PrimaryWeapon: TurretGun
AutoTarget: AutoTarget:
IronCurtainable: IronCurtainable:
-RenderBuilding: -RenderBuilding:
@@ -732,10 +748,11 @@ FTUR:
Range: 6 Range: 6
Turreted: Turreted:
ROT: 255 ROT: 255
Offset: 0,0,0,-2
Armament:
Weapon: FireballLauncher
LocalOffset: 0,-12,0,0,0
AttackTurreted: AttackTurreted:
PrimaryWeapon: FireballLauncher
PrimaryOffset: 0,0,0,-2
PrimaryLocalOffset: 0,-12,0,0,0
AutoTarget: AutoTarget:
IronCurtainable: IronCurtainable:
RenderRangeCircle: RenderRangeCircle:
@@ -770,8 +787,9 @@ SAM:
ROT: 30 ROT: 30
InitialFacing: 0 InitialFacing: 0
RenderBuildingTurreted: RenderBuildingTurreted:
Armament:
Weapon: Nike
AttackTurreted: AttackTurreted:
PrimaryWeapon: Nike
WithMuzzleFlash: WithMuzzleFlash:
AutoTarget: AutoTarget:
IronCurtainable: IronCurtainable:

View File

@@ -19,8 +19,9 @@ V2RL:
Speed: 7 Speed: 7
RevealsShroud: RevealsShroud:
Range: 5 Range: 5
Armament:
Weapon: SCUD
AttackFrontal: AttackFrontal:
PrimaryWeapon: SCUD
RenderUnitReload: RenderUnitReload:
AutoTarget: AutoTarget:
Explodes: Explodes:
@@ -49,10 +50,11 @@ V2RL:
Range: 4 Range: 4
Turreted: Turreted:
ROT: 5 ROT: 5
Armament:
Weapon: 25mm
Recoil: 2
RecoilRecovery: 0.5
AttackTurreted: AttackTurreted:
PrimaryWeapon: 25mm
PrimaryRecoil: 2
PrimaryRecoilRecovery: 0.5
RenderUnitTurreted: RenderUnitTurreted:
AutoTarget: AutoTarget:
Explodes: Explodes:
@@ -85,10 +87,11 @@ V2RL:
Range: 5 Range: 5
Turreted: Turreted:
ROT: 5 ROT: 5
Armament:
Weapon: 90mm
Recoil: 3
RecoilRecovery: 0.9
AttackTurreted: AttackTurreted:
PrimaryWeapon: 90mm
PrimaryRecoil: 3
PrimaryRecoilRecovery: 0.9
RenderUnitTurreted: RenderUnitTurreted:
AutoTarget: AutoTarget:
Explodes: Explodes:
@@ -123,11 +126,12 @@ V2RL:
Range: 5 Range: 5
Turreted: Turreted:
ROT: 5 ROT: 5
Armament:
Weapon: 105mm
Recoil: 3
RecoilRecovery: 0.9
LocalOffset: 2,0,0,0,0, -2,0,0,0,0
AttackTurreted: AttackTurreted:
PrimaryWeapon: 105mm
PrimaryRecoil: 3
PrimaryRecoilRecovery: 0.9
PrimaryLocalOffset: 2,0,0,0,0, -2,0,0,0,0
RenderUnitTurreted: RenderUnitTurreted:
AutoTarget: AutoTarget:
Explodes: Explodes:
@@ -162,14 +166,16 @@ V2RL:
Range: 6 Range: 6
Turreted: Turreted:
ROT: 1 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: 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: RenderUnitTurreted:
AutoTarget: AutoTarget:
Explodes: Explodes:
@@ -207,8 +213,9 @@ ARTY:
Speed: 6 Speed: 6
RevealsShroud: RevealsShroud:
Range: 5 Range: 5
Armament:
Weapon: 155mm
AttackFrontal: AttackFrontal:
PrimaryWeapon: 155mm
RenderUnit: RenderUnit:
Explodes: Explodes:
Weapon: UnitExplode Weapon: UnitExplode
@@ -319,9 +326,10 @@ JEEP:
Range: 8 Range: 8
Turreted: Turreted:
ROT: 10 ROT: 10
Offset: 0,0,0,-2
Armament:
Weapon: M60mg
AttackTurreted: AttackTurreted:
PrimaryWeapon: M60mg
PrimaryOffset: 0,0,0,-2
WithMuzzleFlash: WithMuzzleFlash:
RenderUnitTurreted: RenderUnitTurreted:
AutoTarget: AutoTarget:
@@ -351,9 +359,10 @@ APC:
Speed: 10 Speed: 10
RevealsShroud: RevealsShroud:
Range: 5 Range: 5
Armament:
Weapon: M60mg
LocalOffset: 0,0,0,-4,0
AttackFrontal: AttackFrontal:
PrimaryWeapon: M60mg
PrimaryOffset: 0,0,0,-4
RenderUnit: RenderUnit:
WithMuzzleFlash: WithMuzzleFlash:
AutoTarget: AutoTarget:
@@ -614,9 +623,10 @@ TTNK:
Crushes: wall, atmine, crate, infantry Crushes: wall, atmine, crate, infantry
RevealsShroud: RevealsShroud:
Range: 7 Range: 7
Armament:
Weapon: TTankZap
LocalOffset: 0,0,0,-5,0
AttackFrontal: AttackFrontal:
PrimaryWeapon: TTankZap
PrimaryOffset: 0,0,0,-5
RenderUnitSpinner: RenderUnitSpinner:
Selectable: Selectable:
Bounds: 28,28,0,0 Bounds: 28,28,0,0
@@ -645,10 +655,11 @@ FTRK:
Range: 4 Range: 4
Turreted: Turreted:
ROT: 5 ROT: 5
Offset: 0,5,0,-4
Armament:
Weapon: FLAK-23
Recoil: 2
AttackTurreted: AttackTurreted:
PrimaryWeapon: FLAK-23
PrimaryOffset: 0,5,0,-4
PrimaryRecoil: 2
RenderUnitTurreted: RenderUnitTurreted:
AutoTarget: AutoTarget:
Explodes: Explodes:
@@ -714,9 +725,11 @@ CTNK:
Range: 6 Range: 6
RenderUnit: RenderUnit:
AutoTarget: 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: 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: ChronoshiftDeploy: