From ac975f4139881dd6ca34bab0ed07961e19505f28 Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Thu, 9 Jul 2020 22:08:38 +0100 Subject: [PATCH] Convert yaml-exposed facings to WAngle. --- OpenRA.Game/FieldLoader.cs | 3 + .../Activities/VoxelHarvesterDockSequence.cs | 2 +- .../Traits/Attack/AttackPopupTurreted.cs | 6 +- OpenRA.Mods.Cnc/Traits/ConyardChronoReturn.cs | 4 +- .../Traits/SupportPowers/DropPodsPower.cs | 4 +- OpenRA.Mods.Cnc/Traits/TDGunboat.cs | 8 +- .../Activities/Air/FallToEarth.cs | 11 +- OpenRA.Mods.Common/Activities/Air/Land.cs | 2 +- .../Activities/Air/ReturnToBase.cs | 2 +- .../Activities/DeployForGrantedCondition.cs | 4 +- .../Activities/HarvesterDockSequence.cs | 6 +- .../Activities/SpriteHarvesterDockSequence.cs | 2 +- OpenRA.Mods.Common/Activities/Transform.cs | 2 +- OpenRA.Mods.Common/Projectiles/Missile.cs | 34 +++--- .../Scripting/Global/ReinforcementsGlobal.cs | 2 +- OpenRA.Mods.Common/Traits/Air/Aircraft.cs | 23 ++-- OpenRA.Mods.Common/Traits/Air/FallsToEarth.cs | 6 +- OpenRA.Mods.Common/Traits/Buildings/Exit.cs | 2 +- .../Traits/Buildings/FreeActor.cs | 4 +- .../Traits/Buildings/ProductionAirdrop.cs | 6 +- .../Traits/Buildings/Refinery.cs | 6 +- OpenRA.Mods.Common/Traits/Cargo.cs | 6 +- .../Conditions/GrantConditionOnDeploy.cs | 24 ++-- OpenRA.Mods.Common/Traits/Husk.cs | 6 +- OpenRA.Mods.Common/Traits/Mobile.cs | 16 +-- OpenRA.Mods.Common/Traits/Production.cs | 6 +- .../Traits/ProductionParadrop.cs | 2 +- .../Traits/SupportPowers/AirstrikePower.cs | 2 +- .../Traits/SupportPowers/ParatroopersPower.cs | 2 +- OpenRA.Mods.Common/Traits/ThrowsParticle.cs | 6 +- OpenRA.Mods.Common/Traits/Transforms.cs | 4 +- OpenRA.Mods.Common/Traits/Turreted.cs | 14 ++- .../Traits/World/CrateSpawner.cs | 2 +- .../Traits/World/EditorCursorLayer.cs | 4 +- .../Traits/World/MPStartUnits.cs | 8 +- .../Traits/World/SpawnMPUnits.cs | 4 +- .../Rules/20200503/ReplaceFacingAngles.cs | 105 ++++++++++++++++++ OpenRA.Mods.Common/UpdateRules/UpdatePath.cs | 1 + mods/cnc/rules/aircraft.yaml | 16 +-- mods/cnc/rules/defaults.yaml | 6 +- mods/cnc/rules/ships.yaml | 4 +- mods/cnc/rules/structures.yaml | 16 +-- mods/cnc/rules/vehicles.yaml | 40 +++---- mods/cnc/weapons/missiles.yaml | 20 ++-- mods/d2k/rules/aircraft.yaml | 14 +-- mods/d2k/rules/defaults.yaml | 2 +- mods/d2k/rules/infantry.yaml | 2 +- mods/d2k/rules/misc.yaml | 2 +- mods/d2k/rules/structures.yaml | 10 +- mods/d2k/rules/vehicles.yaml | 26 ++--- mods/d2k/weapons/missiles.yaml | 6 +- mods/ra/maps/bomber-john/rules.yaml | 6 +- mods/ra/maps/fort-lonestar/rules.yaml | 4 +- mods/ra/maps/fort-lonestar/weapons.yaml | 2 +- mods/ra/maps/monster-tank-madness/rules.yaml | 2 +- mods/ra/rules/aircraft.yaml | 20 ++-- mods/ra/rules/defaults.yaml | 4 +- mods/ra/rules/husks.yaml | 16 +-- mods/ra/rules/infantry.yaml | 2 +- mods/ra/rules/ships.yaml | 18 +-- mods/ra/rules/structures.yaml | 50 ++++----- mods/ra/rules/vehicles.yaml | 22 ++-- mods/ra/weapons/missiles.yaml | 20 ++-- mods/ts/rules/aircraft.yaml | 20 ++-- mods/ts/rules/civilian-structures.yaml | 2 +- mods/ts/rules/civilian-vehicles.yaml | 16 +-- mods/ts/rules/defaults.yaml | 10 +- mods/ts/rules/gdi-support.yaml | 4 +- mods/ts/rules/gdi-vehicles.yaml | 24 ++-- mods/ts/rules/husks.yaml | 18 +-- mods/ts/rules/misc.yaml | 4 +- mods/ts/rules/nod-structures.yaml | 4 +- mods/ts/rules/nod-support.yaml | 8 +- mods/ts/rules/nod-vehicles.yaml | 30 ++--- mods/ts/rules/shared-structures.yaml | 6 +- mods/ts/rules/shared-support.yaml | 4 +- mods/ts/rules/shared-vehicles.yaml | 6 +- mods/ts/weapons/energyweapons.yaml | 2 +- mods/ts/weapons/missiles.yaml | 6 +- mods/ts/weapons/superweapons.yaml | 2 +- 80 files changed, 477 insertions(+), 370 deletions(-) create mode 100644 OpenRA.Mods.Common/UpdateRules/Rules/20200503/ReplaceFacingAngles.cs diff --git a/OpenRA.Game/FieldLoader.cs b/OpenRA.Game/FieldLoader.cs index 325083006a..9941eabc20 100644 --- a/OpenRA.Game/FieldLoader.cs +++ b/OpenRA.Game/FieldLoader.cs @@ -567,6 +567,9 @@ namespace OpenRA } else if (fieldType.IsGenericType && fieldType.GetGenericTypeDefinition() == typeof(Nullable<>)) { + if (string.IsNullOrEmpty(value)) + return null; + var innerType = fieldType.GetGenericArguments().First(); var innerValue = GetValue("Nullable", innerType, value, field); return fieldType.GetConstructor(new[] { innerType }).Invoke(new[] { innerValue }); diff --git a/OpenRA.Mods.Cnc/Activities/VoxelHarvesterDockSequence.cs b/OpenRA.Mods.Cnc/Activities/VoxelHarvesterDockSequence.cs index 64c935e316..e34e93125b 100644 --- a/OpenRA.Mods.Cnc/Activities/VoxelHarvesterDockSequence.cs +++ b/OpenRA.Mods.Cnc/Activities/VoxelHarvesterDockSequence.cs @@ -20,7 +20,7 @@ namespace OpenRA.Mods.Cnc.Activities readonly WithVoxelUnloadBody body; readonly WithDockingOverlay spriteOverlay; - public VoxelHarvesterDockSequence(Actor self, Actor refinery, int dockAngle, bool isDragRequired, WVec dragOffset, int dragLength) + public VoxelHarvesterDockSequence(Actor self, Actor refinery, WAngle dockAngle, bool isDragRequired, WVec dragOffset, int dragLength) : base(self, refinery, dockAngle, isDragRequired, dragOffset, dragLength) { body = self.Trait(); diff --git a/OpenRA.Mods.Cnc/Traits/Attack/AttackPopupTurreted.cs b/OpenRA.Mods.Cnc/Traits/Attack/AttackPopupTurreted.cs index 5ada871d8f..7535057a20 100644 --- a/OpenRA.Mods.Cnc/Traits/Attack/AttackPopupTurreted.cs +++ b/OpenRA.Mods.Cnc/Traits/Attack/AttackPopupTurreted.cs @@ -23,7 +23,7 @@ namespace OpenRA.Mods.Cnc.Traits [Desc("How many game ticks should pass before closing the actor's turret.")] public readonly int CloseDelay = 125; - public readonly int DefaultFacing = 0; + public readonly WAngle DefaultFacing = WAngle.Zero; [Desc("The percentage of damage that is received while this actor is closed.")] public readonly int ClosedDamageMultiplier = 50; @@ -107,10 +107,10 @@ namespace OpenRA.Mods.Cnc.Traits { if (state == PopupState.Open && idleTicks++ > info.CloseDelay) { - turret.DesiredFacing = info.DefaultFacing; + turret.DesiredFacing = info.DefaultFacing.Facing; state = PopupState.Rotating; } - else if (state == PopupState.Rotating && turret.TurretFacing == info.DefaultFacing) + else if (state == PopupState.Rotating && turret.TurretFacing == info.DefaultFacing.Facing) { state = PopupState.Transitioning; wsb.PlayCustomAnimation(self, info.ClosingSequence, () => diff --git a/OpenRA.Mods.Cnc/Traits/ConyardChronoReturn.cs b/OpenRA.Mods.Cnc/Traits/ConyardChronoReturn.cs index 4988c55a95..fdb60cf75e 100644 --- a/OpenRA.Mods.Cnc/Traits/ConyardChronoReturn.cs +++ b/OpenRA.Mods.Cnc/Traits/ConyardChronoReturn.cs @@ -52,7 +52,7 @@ namespace OpenRA.Mods.Cnc.Traits public readonly string OriginalActor = "mcv"; [Desc("Facing of the returned actor.")] - public readonly int Facing = 96; + public readonly WAngle Facing = new WAngle(384); public readonly string ChronoshiftSound = "chrono2.aud"; @@ -175,7 +175,7 @@ namespace OpenRA.Mods.Cnc.Traits { new LocationInit(destination.Value), new OwnerInit(self.Owner), - new FacingInit(WAngle.FromFacing(info.Facing)), + new FacingInit(info.Facing), new FactionInit(faction), new HealthInit((int)(health.HP * 100L / health.MaxHP)) }; diff --git a/OpenRA.Mods.Cnc/Traits/SupportPowers/DropPodsPower.cs b/OpenRA.Mods.Cnc/Traits/SupportPowers/DropPodsPower.cs index d8fe3716ab..cd40b8e464 100644 --- a/OpenRA.Mods.Cnc/Traits/SupportPowers/DropPodsPower.cs +++ b/OpenRA.Mods.Cnc/Traits/SupportPowers/DropPodsPower.cs @@ -31,7 +31,7 @@ namespace OpenRA.Mods.Cnc.Traits public readonly int2 Drops = new int2(5, 8); [Desc("Sets the approach direction.")] - public readonly int PodFacing = 32; + public readonly WAngle PodFacing = new WAngle(128); [Desc("Maximum offset from targetLocation")] public readonly int PodScatter = 3; @@ -91,7 +91,7 @@ namespace OpenRA.Mods.Cnc.Traits { base.Activate(self, order, manager); - SendDropPods(self, order, WAngle.FromFacing(info.PodFacing)); + SendDropPods(self, order, info.PodFacing); } public void SendDropPods(Actor self, Order order, WAngle facing) diff --git a/OpenRA.Mods.Cnc/Traits/TDGunboat.cs b/OpenRA.Mods.Cnc/Traits/TDGunboat.cs index 28de821502..dbaede3140 100644 --- a/OpenRA.Mods.Cnc/Traits/TDGunboat.cs +++ b/OpenRA.Mods.Cnc/Traits/TDGunboat.cs @@ -24,18 +24,18 @@ namespace OpenRA.Mods.Cnc.Traits public readonly int Speed = 28; [Desc("Facing to use when actor spawns. Only 64 and 192 supported.")] - public readonly int InitialFacing = 64; + public readonly WAngle InitialFacing = new WAngle(256); [Desc("Facing to use for actor previews (map editor, color picker, etc). Only 64 and 192 supported.")] - public readonly int PreviewFacing = 64; + public readonly WAngle PreviewFacing = new WAngle(256); public override object Create(ActorInitializer init) { return new TDGunboat(init, this); } - public WAngle GetInitialFacing() { return WAngle.FromFacing(InitialFacing); } + public WAngle GetInitialFacing() { return InitialFacing; } IEnumerable IActorPreviewInitInfo.ActorPreviewInits(ActorInfo ai, ActorPreviewType type) { - yield return new FacingInit(WAngle.FromFacing(PreviewFacing)); + yield return new FacingInit(PreviewFacing); } public IReadOnlyDictionary OccupiedCells(ActorInfo info, CPos location, SubCell subCell = SubCell.Any) diff --git a/OpenRA.Mods.Common/Activities/Air/FallToEarth.cs b/OpenRA.Mods.Common/Activities/Air/FallToEarth.cs index 0960678b35..7a7e697362 100644 --- a/OpenRA.Mods.Common/Activities/Air/FallToEarth.cs +++ b/OpenRA.Mods.Common/Activities/Air/FallToEarth.cs @@ -30,7 +30,7 @@ namespace OpenRA.Mods.Common.Activities this.info = info; IsInterruptible = false; aircraft = self.Trait(); - if (info.MaximumSpinSpeed != 0) + if (!info.MaximumSpinSpeed.HasValue || info.MaximumSpinSpeed.Value != WAngle.Zero) acceleration = self.World.SharedRandom.Next(2) * 2 - 1; } @@ -49,14 +49,13 @@ namespace OpenRA.Mods.Common.Activities return true; } - if (info.MaximumSpinSpeed != 0) + if (acceleration != 0) { - if (info.MaximumSpinSpeed < 0 || Math.Abs(spin) < info.MaximumSpinSpeed) - spin += acceleration; // TODO: Possibly unhardcode this + if (!info.MaximumSpinSpeed.HasValue || Math.Abs(spin) < info.MaximumSpinSpeed.Value.Angle) + spin += 4 * acceleration; // TODO: Possibly unhardcode this // Allow for negative spin values and convert from facing to angle units - // TODO: Remember to convert this when removing WAngle.FromFacing - aircraft.Facing = new WAngle(aircraft.Facing.Angle + 4 * spin); + aircraft.Facing = new WAngle(aircraft.Facing.Angle + spin); } var move = info.Moves ? aircraft.FlyStep(aircraft.Facing) : WVec.Zero; diff --git a/OpenRA.Mods.Common/Activities/Air/Land.cs b/OpenRA.Mods.Common/Activities/Air/Land.cs index b1450446a6..e6023cab83 100644 --- a/OpenRA.Mods.Common/Activities/Air/Land.cs +++ b/OpenRA.Mods.Common/Activities/Air/Land.cs @@ -61,7 +61,7 @@ namespace OpenRA.Mods.Common.Activities // NOTE: desiredFacing = -1 means we should not prefer any particular facing and instead just // use whatever facing gives us the most direct path to the landing site. if (!facing.HasValue && aircraft.Info.TurnToLand) - desiredFacing = WAngle.FromFacing(aircraft.Info.InitialFacing); + desiredFacing = aircraft.Info.InitialFacing; else desiredFacing = facing; } diff --git a/OpenRA.Mods.Common/Activities/Air/ReturnToBase.cs b/OpenRA.Mods.Common/Activities/Air/ReturnToBase.cs index d253bb4743..b779641678 100644 --- a/OpenRA.Mods.Common/Activities/Air/ReturnToBase.cs +++ b/OpenRA.Mods.Common/Activities/Air/ReturnToBase.cs @@ -114,7 +114,7 @@ namespace OpenRA.Mods.Common.Activities var exit = dest.FirstExitOrDefault(); var offset = exit != null ? exit.Info.SpawnOffset : WVec.Zero; if (aircraft.Info.TurnToDock || !aircraft.Info.VTOL) - facing = WAngle.FromFacing(aircraft.Info.InitialFacing); + facing = aircraft.Info.InitialFacing; aircraft.MakeReservation(dest); QueueChild(new Land(self, Target.FromActor(dest), offset, facing, Color.Green)); diff --git a/OpenRA.Mods.Common/Activities/DeployForGrantedCondition.cs b/OpenRA.Mods.Common/Activities/DeployForGrantedCondition.cs index 3554f6be4f..cdbfc16882 100644 --- a/OpenRA.Mods.Common/Activities/DeployForGrantedCondition.cs +++ b/OpenRA.Mods.Common/Activities/DeployForGrantedCondition.cs @@ -31,8 +31,8 @@ namespace OpenRA.Mods.Common.Activities protected override void OnFirstRun(Actor self) { // Turn to the required facing. - if (deploy.DeployState == DeployState.Undeployed && deploy.Info.Facing != -1 && canTurn && !moving) - QueueChild(new Turn(self, WAngle.FromFacing(deploy.Info.Facing))); + if (deploy.DeployState == DeployState.Undeployed && deploy.Info.Facing.HasValue && canTurn && !moving) + QueueChild(new Turn(self, deploy.Info.Facing.Value)); } public override bool Tick(Actor self) diff --git a/OpenRA.Mods.Common/Activities/HarvesterDockSequence.cs b/OpenRA.Mods.Common/Activities/HarvesterDockSequence.cs index b832dc5caf..a499fe3297 100644 --- a/OpenRA.Mods.Common/Activities/HarvesterDockSequence.cs +++ b/OpenRA.Mods.Common/Activities/HarvesterDockSequence.cs @@ -24,7 +24,7 @@ namespace OpenRA.Mods.Common.Activities protected readonly Actor Refinery; protected readonly Harvester Harv; - protected readonly int DockAngle; + protected readonly WAngle DockAngle; protected readonly bool IsDragRequired; protected readonly WVec DragOffset; protected readonly int DragLength; @@ -33,7 +33,7 @@ namespace OpenRA.Mods.Common.Activities protected DockingState dockingState; - public HarvesterDockSequence(Actor self, Actor refinery, int dockAngle, bool isDragRequired, WVec dragOffset, int dragLength) + public HarvesterDockSequence(Actor self, Actor refinery, WAngle dockAngle, bool isDragRequired, WVec dragOffset, int dragLength) { dockingState = DockingState.Turn; Refinery = refinery; @@ -55,7 +55,7 @@ namespace OpenRA.Mods.Common.Activities case DockingState.Turn: dockingState = DockingState.Dock; - QueueChild(new Turn(self, WAngle.FromFacing(DockAngle))); + QueueChild(new Turn(self, DockAngle)); if (IsDragRequired) QueueChild(new Drag(self, StartDrag, EndDrag, DragLength)); return false; diff --git a/OpenRA.Mods.Common/Activities/SpriteHarvesterDockSequence.cs b/OpenRA.Mods.Common/Activities/SpriteHarvesterDockSequence.cs index 4a34150910..81006d4cf1 100644 --- a/OpenRA.Mods.Common/Activities/SpriteHarvesterDockSequence.cs +++ b/OpenRA.Mods.Common/Activities/SpriteHarvesterDockSequence.cs @@ -20,7 +20,7 @@ namespace OpenRA.Mods.Common.Activities readonly WithSpriteBody wsb; readonly WithDockingAnimationInfo wda; - public SpriteHarvesterDockSequence(Actor self, Actor refinery, int dockAngle, bool isDragRequired, WVec dragOffset, int dragLength) + public SpriteHarvesterDockSequence(Actor self, Actor refinery, WAngle dockAngle, bool isDragRequired, WVec dragOffset, int dragLength) : base(self, refinery, dockAngle, isDragRequired, dragOffset, dragLength) { wsb = self.Trait(); diff --git a/OpenRA.Mods.Common/Activities/Transform.cs b/OpenRA.Mods.Common/Activities/Transform.cs index 3b6c03270b..49438de35f 100644 --- a/OpenRA.Mods.Common/Activities/Transform.cs +++ b/OpenRA.Mods.Common/Activities/Transform.cs @@ -22,7 +22,7 @@ namespace OpenRA.Mods.Common.Activities { public readonly string ToActor; public CVec Offset = CVec.Zero; - public WAngle Facing = WAngle.FromFacing(96); + public WAngle Facing = new WAngle(384); public string[] Sounds = { }; public string Notification = null; public int ForceHealthPercentage = 0; diff --git a/OpenRA.Mods.Common/Projectiles/Missile.cs b/OpenRA.Mods.Common/Projectiles/Missile.cs index 8346cedb25..eefb52e99e 100644 --- a/OpenRA.Mods.Common/Projectiles/Missile.cs +++ b/OpenRA.Mods.Common/Projectiles/Missile.cs @@ -84,10 +84,10 @@ namespace OpenRA.Mods.Common.Projectiles public readonly int LockOnProbability = 100; [Desc("Horizontal rate of turn.")] - public readonly int HorizontalRateOfTurn = 5; + public readonly WAngle HorizontalRateOfTurn = new WAngle(20); [Desc("Vertical rate of turn.")] - public readonly int VerticalRateOfTurn = 6; + public readonly WAngle VerticalRateOfTurn = new WAngle(24); [Desc("Gravity applied while in free fall.")] public readonly int Gravity = 10; @@ -288,7 +288,7 @@ namespace OpenRA.Mods.Common.Projectiles // to hit the target without passing it by (and thus having to do horizontal loops) var minSpeed = ((System.Math.Min(predClfDist * 1024 / (1024 - WAngle.FromFacing(vFacing).Sin()), (relTarHorDist + predClfDist) * 1024 / (2 * (2048 - WAngle.FromFacing(vFacing).Sin()))) - * info.VerticalRateOfTurn * 157) / 6400).Clamp(minLaunchSpeed, maxLaunchSpeed); + * info.VerticalRateOfTurn.Facing * 157) / 6400).Clamp(minLaunchSpeed, maxLaunchSpeed); if ((sbyte)vFacing < 0) speed = minSpeed; @@ -300,7 +300,7 @@ namespace OpenRA.Mods.Common.Projectiles var vFac = vFacing; speed = BisectionSearch(minSpeed, maxLaunchSpeed, spd => { - var lpRds = LoopRadius(spd, info.VerticalRateOfTurn); + var lpRds = LoopRadius(spd, info.VerticalRateOfTurn.Facing); return WillClimbWithinDistance(vFac, lpRds, predClfDist, diffClfMslHgt) || WillClimbAroundInclineTop(vFac, lpRds, predClfDist, diffClfMslHgt, spd); }); @@ -320,7 +320,7 @@ namespace OpenRA.Mods.Common.Projectiles void DetermineLaunchSpeedAndAngle(World world, out int speed, out int vFacing) { speed = maxLaunchSpeed; - loopRadius = LoopRadius(speed, info.VerticalRateOfTurn); + loopRadius = LoopRadius(speed, info.VerticalRateOfTurn.Facing); // Compute current distance from target position var tarDistVec = targetPosition + offset - pos; @@ -440,7 +440,7 @@ namespace OpenRA.Mods.Common.Projectiles speed = (speed + sign * info.Acceleration.Length).Clamp(0, maxSpeed); // Compute the vertical loop radius - loopRadius = LoopRadius(speed, info.VerticalRateOfTurn); + loopRadius = LoopRadius(speed, info.VerticalRateOfTurn.Facing); } WVec FreefallTick() @@ -509,7 +509,7 @@ namespace OpenRA.Mods.Common.Projectiles // If missile is below incline top height and facing downwards, bring back // its vertical facing above zero as soon as possible if ((sbyte)vFacing < 0) - desiredVFacing = info.VerticalRateOfTurn; + desiredVFacing = info.VerticalRateOfTurn.Facing; // Missile will climb around incline top if bringing vertical facing // down to zero on an arc of radius loopRadius @@ -525,7 +525,7 @@ namespace OpenRA.Mods.Common.Projectiles // for which the missile will be able to climb terrAltDiff w-units // within hHeightChange w-units all the while ending the ascent // with vertical facing 0 - for (var vFac = System.Math.Min(vFacing + info.VerticalRateOfTurn - 1, 63); vFac >= vFacing; vFac--) + for (var vFac = System.Math.Min(vFacing + info.VerticalRateOfTurn.Facing - 1, 63); vFac >= vFacing; vFac--) if (!WillClimbWithinDistance(vFac, loopRadius, predClfDist, diffClfMslHgt) && !(predClfDist <= loopRadius * (1024 - WAngle.FromFacing(vFac).Sin()) / 1024 && WillClimbAroundInclineTop(vFac, loopRadius, predClfDist, diffClfMslHgt, speed))) @@ -600,7 +600,7 @@ namespace OpenRA.Mods.Common.Projectiles // and thus needs smaller vertical facings so as not // to hit the ground prematurely if (targetPassedBy) - desiredVFacing = desiredVFacing.Clamp(-info.VerticalRateOfTurn, info.VerticalRateOfTurn); + desiredVFacing = desiredVFacing.Clamp(-info.VerticalRateOfTurn.Facing, info.VerticalRateOfTurn.Facing); else if (lastHt == 0) { // Before the target is passed by, missile speed should be changed // Target's height above loop's center @@ -662,7 +662,7 @@ namespace OpenRA.Mods.Common.Projectiles if (info.TerrainHeightAware && edgeVector.Length > loopRadius && lastHt > targetPosition.Z) { int vFac; - for (vFac = vFacing + 1; vFac <= vFacing + info.VerticalRateOfTurn - 1; vFac++) + for (vFac = vFacing + 1; vFac <= vFacing + info.VerticalRateOfTurn.Facing - 1; vFac++) { // Vector from missile's current position pointing to the loop's center radius = new WVec(loopRadius, 0, 0) @@ -681,7 +681,7 @@ namespace OpenRA.Mods.Common.Projectiles // Aim for the target var vDist = new WVec(-relTarHgt, -relTarHorDist, 0); desiredVFacing = (sbyte)vDist.HorizontalLengthSquared != 0 ? vDist.Yaw.Facing : vFacing; - if (desiredVFacing < 0 && info.VerticalRateOfTurn < (sbyte)vFacing) + if (desiredVFacing < 0 && info.VerticalRateOfTurn.Facing < (sbyte)vFacing) desiredVFacing = 0; } } @@ -691,7 +691,7 @@ namespace OpenRA.Mods.Common.Projectiles // Aim for the target var vDist = new WVec(-relTarHgt, relTarHorDist, 0); desiredVFacing = (sbyte)vDist.HorizontalLengthSquared != 0 ? vDist.Yaw.Facing : vFacing; - if (desiredVFacing < 0 && info.VerticalRateOfTurn < (sbyte)vFacing) + if (desiredVFacing < 0 && info.VerticalRateOfTurn.Facing < (sbyte)vFacing) desiredVFacing = 0; } } @@ -706,7 +706,7 @@ namespace OpenRA.Mods.Common.Projectiles if (-diffClfMslHgt > info.CruiseAltitude.Length) desiredVFacing = -desiredVFacing; - desiredVFacing = desiredVFacing.Clamp(-info.VerticalRateOfTurn, info.VerticalRateOfTurn); + desiredVFacing = desiredVFacing.Clamp(-info.VerticalRateOfTurn.Facing, info.VerticalRateOfTurn.Facing); ChangeSpeed(); } @@ -722,7 +722,7 @@ namespace OpenRA.Mods.Common.Projectiles if (-diffClfMslHgt > info.CruiseAltitude.Length) desiredVFacing = -desiredVFacing; - desiredVFacing = desiredVFacing.Clamp(-info.VerticalRateOfTurn, info.VerticalRateOfTurn); + desiredVFacing = desiredVFacing.Clamp(-info.VerticalRateOfTurn.Facing, info.VerticalRateOfTurn.Facing); ChangeSpeed(); } @@ -780,8 +780,8 @@ namespace OpenRA.Mods.Common.Projectiles desiredHFacing = hFacing; // Compute new direction the projectile will be facing - hFacing = Util.TickFacing(hFacing, desiredHFacing, info.HorizontalRateOfTurn); - vFacing = Util.TickFacing(vFacing, desiredVFacing, info.VerticalRateOfTurn); + hFacing = Util.TickFacing(hFacing, desiredHFacing, info.HorizontalRateOfTurn.Facing); + vFacing = Util.TickFacing(vFacing, desiredVFacing, info.VerticalRateOfTurn.Facing); // Compute the projectile's guided displacement return new WVec(0, -1024 * speed, 0) @@ -803,7 +803,7 @@ namespace OpenRA.Mods.Common.Projectiles speed = velocity.Length; // Compute the vertical loop radius - loopRadius = LoopRadius(speed, info.VerticalRateOfTurn); + loopRadius = LoopRadius(speed, info.VerticalRateOfTurn.Facing); } // Switch from homing mode to freefall mode diff --git a/OpenRA.Mods.Common/Scripting/Global/ReinforcementsGlobal.cs b/OpenRA.Mods.Common/Scripting/Global/ReinforcementsGlobal.cs index f6dc0546d6..a462e7ff10 100644 --- a/OpenRA.Mods.Common/Scripting/Global/ReinforcementsGlobal.cs +++ b/OpenRA.Mods.Common/Scripting/Global/ReinforcementsGlobal.cs @@ -157,7 +157,7 @@ namespace OpenRA.Mods.Common.Scripting // Scripted cargo aircraft must turn to default position before unloading. // TODO: pass facing through UnloadCargo instead. if (aircraft != null) - transport.QueueActivity(new Land(transport, Target.FromCell(transport.World, entryPath.Last()), WDist.FromCells(dropRange), WAngle.FromFacing(aircraft.Info.InitialFacing))); + transport.QueueActivity(new Land(transport, Target.FromCell(transport.World, entryPath.Last()), WDist.FromCells(dropRange), aircraft.Info.InitialFacing)); if (cargo != null) transport.QueueActivity(new UnloadCargo(transport, WDist.FromCells(dropRange))); diff --git a/OpenRA.Mods.Common/Traits/Air/Aircraft.cs b/OpenRA.Mods.Common/Traits/Air/Aircraft.cs index 5f0a574359..5638de62e2 100644 --- a/OpenRA.Mods.Common/Traits/Air/Aircraft.cs +++ b/OpenRA.Mods.Common/Traits/Air/Aircraft.cs @@ -47,12 +47,13 @@ namespace OpenRA.Mods.Common.Traits [Desc("The speed at which the aircraft is repulsed from other aircraft. Specify -1 for normal movement speed.")] public readonly int RepulsionSpeed = -1; - public readonly int InitialFacing = 0; + public readonly WAngle InitialFacing = WAngle.Zero; - public readonly int TurnSpeed = 255; + [Desc("Speed at which the actor turns.")] + public readonly WAngle TurnSpeed = new WAngle(512); - [Desc("Turn speed to apply when aircraft flies in circles while idle. Defaults to TurnSpeed if negative.")] - public readonly int IdleTurnSpeed = -1; + [Desc("Turn speed to apply when aircraft flies in circles while idle. Defaults to TurnSpeed if undefined.")] + public readonly WAngle? IdleTurnSpeed = null; public readonly int Speed = 1; @@ -145,7 +146,7 @@ namespace OpenRA.Mods.Common.Traits public readonly int NumberOfTicksToVerifyAvailableAirport = 150; [Desc("Facing to use for actor previews (map editor, color picker, etc)")] - public readonly int PreviewFacing = 96; + public readonly WAngle PreviewFacing = new WAngle(384); [Desc("Display order for the facing slider in the map editor")] public readonly int EditorFacingDisplayOrder = 3; @@ -160,14 +161,14 @@ namespace OpenRA.Mods.Common.Traits [Desc("Cursor to display when unable to land at target building.")] public readonly string EnterBlockedCursor = "enter-blocked"; - public WAngle GetInitialFacing() { return WAngle.FromFacing(InitialFacing); } + public WAngle GetInitialFacing() { return InitialFacing; } public WDist GetCruiseAltitude() { return CruiseAltitude; } public override object Create(ActorInitializer init) { return new Aircraft(init, this); } IEnumerable IActorPreviewInitInfo.ActorPreviewInits(ActorInfo ai, ActorPreviewType type) { - yield return new FacingInit(WAngle.FromFacing(PreviewFacing)); + yield return new FacingInit(PreviewFacing); } public IReadOnlyDictionary OccupiedCells(ActorInfo info, CPos location, SubCell subCell = SubCell.Any) { return new ReadOnlyDictionary(); } @@ -200,7 +201,7 @@ namespace OpenRA.Mods.Common.Traits actor => { var init = actor.GetInitOrDefault(this); - return (init != null ? init.Value : WAngle.FromFacing(InitialFacing)).Angle; + return (init != null ? init.Value : InitialFacing).Angle; }, (actor, value) => actor.ReplaceInit(new FacingInit(new WAngle((int)value)))); } @@ -250,8 +251,8 @@ namespace OpenRA.Mods.Common.Traits public WPos CenterPosition { get; private set; } public CPos TopLeft { get { return self.World.Map.CellContaining(CenterPosition); } } - public WAngle TurnSpeed { get { return !IsTraitDisabled && !IsTraitPaused ? new WAngle(4 * Info.TurnSpeed) : WAngle.Zero; } } - public WAngle? IdleTurnSpeed { get { return Info.IdleTurnSpeed != -1 ? new WAngle(4 * Info.IdleTurnSpeed) : (WAngle?)null; } } + public WAngle TurnSpeed { get { return !IsTraitDisabled && !IsTraitPaused ? Info.TurnSpeed : WAngle.Zero; } } + public WAngle? IdleTurnSpeed { get { return Info.IdleTurnSpeed; } } public Actor ReservedActor { get; private set; } public bool MayYieldReservation { get; private set; } @@ -292,7 +293,7 @@ namespace OpenRA.Mods.Common.Traits if (centerPositionInit != null) SetPosition(self, centerPositionInit.Value); - Facing = init.GetValue(WAngle.FromFacing(Info.InitialFacing)); + Facing = init.GetValue(Info.InitialFacing); creationActivityDelay = init.GetValue(0); } diff --git a/OpenRA.Mods.Common/Traits/Air/FallsToEarth.cs b/OpenRA.Mods.Common/Traits/Air/FallsToEarth.cs index 02c9a33d1e..85664eaed9 100644 --- a/OpenRA.Mods.Common/Traits/Air/FallsToEarth.cs +++ b/OpenRA.Mods.Common/Traits/Air/FallsToEarth.cs @@ -22,9 +22,9 @@ namespace OpenRA.Mods.Common.Traits [Desc("Explosion weapon that triggers when hitting ground.")] public readonly string Explosion = "UnitExplode"; - [Desc("Limit the maximum spin (in facing units per tick) that can be achieved while crashing.", - "0 disables spinning. Negative values imply no limit.")] - public readonly int MaximumSpinSpeed = -1; + [Desc("Limit the maximum spin (in angle units per tick) that can be achieved while crashing.", + "0 disables spinning. Leave undefined for no limit.")] + public readonly WAngle? MaximumSpinSpeed = null; [Desc("Does the aircraft (husk) move forward at aircraft speed?")] public readonly bool Moves = false; diff --git a/OpenRA.Mods.Common/Traits/Buildings/Exit.cs b/OpenRA.Mods.Common/Traits/Buildings/Exit.cs index 9684ddcbc2..4d8ca7680d 100644 --- a/OpenRA.Mods.Common/Traits/Buildings/Exit.cs +++ b/OpenRA.Mods.Common/Traits/Buildings/Exit.cs @@ -24,7 +24,7 @@ namespace OpenRA.Mods.Common.Traits [Desc("Cell offset where the exiting actor enters the ActorMap relative to the topleft cell of the producing actor.")] public readonly CVec ExitCell = CVec.Zero; - public readonly int Facing = -1; + public readonly WAngle? Facing = null; [Desc("Type tags on this exit.")] public readonly HashSet ProductionTypes = new HashSet(); diff --git a/OpenRA.Mods.Common/Traits/Buildings/FreeActor.cs b/OpenRA.Mods.Common/Traits/Buildings/FreeActor.cs index ebcaf43f04..db7ef9fadb 100644 --- a/OpenRA.Mods.Common/Traits/Buildings/FreeActor.cs +++ b/OpenRA.Mods.Common/Traits/Buildings/FreeActor.cs @@ -29,7 +29,7 @@ namespace OpenRA.Mods.Common.Traits public readonly CVec SpawnOffset = CVec.Zero; [Desc("Which direction the unit should face.")] - public readonly int Facing = 0; + public readonly WAngle Facing = WAngle.Zero; [Desc("Whether another actor should spawn upon re-enabling the trait.")] public readonly bool AllowRespawn = false; @@ -81,7 +81,7 @@ namespace OpenRA.Mods.Common.Traits new ParentActorInit(self), new LocationInit(self.Location + Info.SpawnOffset), new OwnerInit(self.Owner), - new FacingInit(WAngle.FromFacing(Info.Facing)), + new FacingInit(Info.Facing), }); }); } diff --git a/OpenRA.Mods.Common/Traits/Buildings/ProductionAirdrop.cs b/OpenRA.Mods.Common/Traits/Buildings/ProductionAirdrop.cs index e78c5f36f1..af562bb089 100644 --- a/OpenRA.Mods.Common/Traits/Buildings/ProductionAirdrop.cs +++ b/OpenRA.Mods.Common/Traits/Buildings/ProductionAirdrop.cs @@ -34,7 +34,7 @@ namespace OpenRA.Mods.Common.Traits public readonly bool BaselineSpawn = false; [Desc("Direction the aircraft should face to land.")] - public readonly int Facing = 64; + public readonly WAngle Facing = new WAngle(256); public override object Create(ActorInitializer init) { return new ProductionAirdrop(init, this); } } @@ -77,7 +77,7 @@ namespace OpenRA.Mods.Common.Traits var loc = self.Location.ToMPos(map); startPos = new MPos(loc.U + map.Bounds.Width, loc.V).ToCPos(map); endPos = new MPos(map.Bounds.Left, loc.V).ToCPos(map); - spawnFacing = WAngle.FromFacing(info.Facing); + spawnFacing = info.Facing; } // Assume a single exit point for simplicity @@ -99,7 +99,7 @@ namespace OpenRA.Mods.Common.Traits }); var exitCell = self.Location + exit.ExitCell; - actor.QueueActivity(new Land(actor, Target.FromActor(self), WDist.Zero, WVec.Zero, WAngle.FromFacing(info.Facing), clearCells: new CPos[1] { exitCell })); + actor.QueueActivity(new Land(actor, Target.FromActor(self), WDist.Zero, WVec.Zero, info.Facing, clearCells: new CPos[1] { exitCell })); actor.QueueActivity(new CallFunc(() => { if (!self.IsInWorld || self.IsDead) diff --git a/OpenRA.Mods.Common/Traits/Buildings/Refinery.cs b/OpenRA.Mods.Common/Traits/Buildings/Refinery.cs index ad7ff8946f..3300f13c15 100644 --- a/OpenRA.Mods.Common/Traits/Buildings/Refinery.cs +++ b/OpenRA.Mods.Common/Traits/Buildings/Refinery.cs @@ -23,8 +23,8 @@ namespace OpenRA.Mods.Common.Traits { public class RefineryInfo : TraitInfo, Requires, IAcceptResourcesInfo { - [Desc("Actual harvester facing when docking, 0-255 counter-clock-wise.")] - public readonly int DockAngle = 0; + [Desc("Actual harvester facing when docking.")] + public readonly WAngle DockAngle = WAngle.Zero; [Desc("Docking cell relative to top-left cell.")] public readonly CVec DockOffset = CVec.Zero; @@ -71,7 +71,7 @@ namespace OpenRA.Mods.Common.Traits public bool AllowDocking { get { return !preventDock; } } public CVec DeliveryOffset { get { return info.DockOffset; } } - public int DeliveryAngle { get { return info.DockAngle; } } + public WAngle DeliveryAngle { get { return info.DockAngle; } } public bool IsDragRequired { get { return info.IsDragRequired; } } public WVec DragOffset { get { return info.DragOffset; } } public int DragLength { get { return info.DragLength; } } diff --git a/OpenRA.Mods.Common/Traits/Cargo.cs b/OpenRA.Mods.Common/Traits/Cargo.cs index 3a3db4039b..38b86e1948 100644 --- a/OpenRA.Mods.Common/Traits/Cargo.cs +++ b/OpenRA.Mods.Common/Traits/Cargo.cs @@ -49,7 +49,7 @@ namespace OpenRA.Mods.Common.Traits public readonly WDist LoadRange = WDist.FromCells(5); [Desc("Which direction the passenger will face (relative to the transport) when unloading.")] - public readonly int PassengerFacing = 128; + public readonly WAngle PassengerFacing = new WAngle(512); [Desc("Delay (in ticks) before continuing after loading a passenger.")] public readonly int AfterLoadDelay = 8; @@ -370,10 +370,10 @@ namespace OpenRA.Mods.Common.Traits var passengerFacing = passenger.TraitOrDefault(); if (passengerFacing != null) - passengerFacing.Facing = facing.Value.Facing + WAngle.FromFacing(Info.PassengerFacing); + passengerFacing.Facing = facing.Value.Facing + Info.PassengerFacing; foreach (var t in passenger.TraitsImplementing()) - t.TurretFacing = facing.Value.Facing.Facing + Info.PassengerFacing; + t.TurretFacing = (facing.Value.Facing + Info.PassengerFacing).Facing; } public void Load(Actor self, Actor a) diff --git a/OpenRA.Mods.Common/Traits/Conditions/GrantConditionOnDeploy.cs b/OpenRA.Mods.Common/Traits/Conditions/GrantConditionOnDeploy.cs index 5ba4a9aec6..f847d3750e 100644 --- a/OpenRA.Mods.Common/Traits/Conditions/GrantConditionOnDeploy.cs +++ b/OpenRA.Mods.Common/Traits/Conditions/GrantConditionOnDeploy.cs @@ -43,8 +43,8 @@ namespace OpenRA.Mods.Common.Traits [Desc("Cursor to display when unable to (un)deploy the actor.")] public readonly string DeployBlockedCursor = "deploy-blocked"; - [Desc("Facing that the actor must face before deploying. Set to -1 to deploy regardless of facing.")] - public readonly int Facing = -1; + [Desc("Facing that the actor must face before deploying. Leave undefined to deploy regardless of facing.")] + public readonly WAngle? Facing = null; [Desc("Play a randomly selected sound from this list when deploying.")] public readonly string[] DeploySounds = null; @@ -94,8 +94,6 @@ namespace OpenRA.Mods.Common.Traits { readonly Actor self; readonly bool checkTerrainType; - readonly bool canTurn; - readonly IMove move; DeployState deployState; INotifyDeployTriggered[] notify; @@ -109,8 +107,6 @@ namespace OpenRA.Mods.Common.Traits { self = init.Self; checkTerrainType = info.AllowedTerrainTypes.Count > 0; - canTurn = self.Info.HasTraitInfo(); - move = self.TraitOrDefault(); deployState = init.GetValue(DeployState.Undeployed); } @@ -119,27 +115,25 @@ namespace OpenRA.Mods.Common.Traits notify = self.TraitsImplementing().ToArray(); base.Created(self); + if (Info.Facing.HasValue && deployState != DeployState.Undeployed) + { + var facing = self.TraitOrDefault(); + if (facing != null) + facing.Facing = Info.Facing.Value; + } + switch (deployState) { case DeployState.Undeployed: OnUndeployCompleted(); break; case DeployState.Deploying: - if (canTurn) - self.Trait().Facing = WAngle.FromFacing(Info.Facing); - Deploy(true); break; case DeployState.Deployed: - if (canTurn) - self.Trait().Facing = WAngle.FromFacing(Info.Facing); - OnDeployCompleted(); break; case DeployState.Undeploying: - if (canTurn) - self.Trait().Facing = WAngle.FromFacing(Info.Facing); - Undeploy(true); break; } diff --git a/OpenRA.Mods.Common/Traits/Husk.cs b/OpenRA.Mods.Common/Traits/Husk.cs index adb20a7637..75cb6809c5 100644 --- a/OpenRA.Mods.Common/Traits/Husk.cs +++ b/OpenRA.Mods.Common/Traits/Husk.cs @@ -23,16 +23,16 @@ namespace OpenRA.Mods.Common.Traits public readonly HashSet AllowedTerrain = new HashSet(); [Desc("Facing to use for actor previews (map editor, color picker, etc)")] - public readonly int PreviewFacing = 96; + public readonly WAngle PreviewFacing = new WAngle(384); IEnumerable IActorPreviewInitInfo.ActorPreviewInits(ActorInfo ai, ActorPreviewType type) { - yield return new FacingInit(WAngle.FromFacing(PreviewFacing)); + yield return new FacingInit(PreviewFacing); } public override object Create(ActorInitializer init) { return new Husk(init, this); } - public WAngle GetInitialFacing() { return WAngle.FromFacing(128); } + public WAngle GetInitialFacing() { return new WAngle(512); } public IReadOnlyDictionary OccupiedCells(ActorInfo info, CPos location, SubCell subCell = SubCell.Any) { diff --git a/OpenRA.Mods.Common/Traits/Mobile.cs b/OpenRA.Mods.Common/Traits/Mobile.cs index b1a4ac81b2..e0b4fac3e8 100644 --- a/OpenRA.Mods.Common/Traits/Mobile.cs +++ b/OpenRA.Mods.Common/Traits/Mobile.cs @@ -30,10 +30,10 @@ namespace OpenRA.Mods.Common.Traits [Desc("Which Locomotor does this trait use. Must be defined on the World actor.")] public readonly string Locomotor = null; - public readonly int InitialFacing = 0; + public readonly WAngle InitialFacing = WAngle.Zero; [Desc("Speed at which the actor turns.")] - public readonly int TurnSpeed = 255; + public readonly WAngle TurnSpeed = new WAngle(512); public readonly int Speed = 1; @@ -50,7 +50,7 @@ namespace OpenRA.Mods.Common.Traits public readonly string Voice = "Action"; [Desc("Facing to use for actor previews (map editor, color picker, etc)")] - public readonly int PreviewFacing = 96; + public readonly WAngle PreviewFacing = new WAngle(384); [Desc("Display order for the facing slider in the map editor")] public readonly int EditorFacingDisplayOrder = 3; @@ -65,7 +65,7 @@ namespace OpenRA.Mods.Common.Traits IEnumerable IActorPreviewInitInfo.ActorPreviewInits(ActorInfo ai, ActorPreviewType type) { - yield return new FacingInit(WAngle.FromFacing(PreviewFacing)); + yield return new FacingInit(PreviewFacing); } public override object Create(ActorInitializer init) { return new Mobile(init, this); } @@ -87,7 +87,7 @@ namespace OpenRA.Mods.Common.Traits base.RulesetLoaded(rules, ai); } - public WAngle GetInitialFacing() { return WAngle.FromFacing(InitialFacing); } + public WAngle GetInitialFacing() { return InitialFacing; } // initialized and used by CanEnterCell Locomotor locomotor; @@ -134,7 +134,7 @@ namespace OpenRA.Mods.Common.Traits actor => { var init = actor.GetInitOrDefault(this); - return (init != null ? init.Value : WAngle.FromFacing(InitialFacing)).Angle; + return (init != null ? init.Value : InitialFacing).Angle; }, (actor, value) => actor.ReplaceInit(new FacingInit(new WAngle((int)value)))); } @@ -206,7 +206,7 @@ namespace OpenRA.Mods.Common.Traits public WRot Orientation { get { return orientation; } } - public WAngle TurnSpeed { get { return new WAngle(4 * Info.TurnSpeed); } } + public WAngle TurnSpeed { get { return Info.TurnSpeed; } } #endregion [Sync] @@ -265,7 +265,7 @@ namespace OpenRA.Mods.Common.Traits SetVisualPosition(self, init.World.Map.CenterOfSubCell(FromCell, FromSubCell)); } - Facing = oldFacing = init.GetValue(WAngle.FromFacing(info.InitialFacing)); + Facing = oldFacing = init.GetValue(info.InitialFacing); // Sets the initial visual position // Unit will move into the cell grid (defined by LocationInit) as its initial activity diff --git a/OpenRA.Mods.Common/Traits/Production.cs b/OpenRA.Mods.Common/Traits/Production.cs index 878776d4f2..83c1f5d17c 100644 --- a/OpenRA.Mods.Common/Traits/Production.cs +++ b/OpenRA.Mods.Common/Traits/Production.cs @@ -56,8 +56,8 @@ namespace OpenRA.Mods.Common.Traits var spawn = self.CenterPosition + exitinfo.SpawnOffset; var to = self.World.Map.CenterOfCell(exit); - var initialFacing = WAngle.FromFacing(exitinfo.Facing); - if (exitinfo.Facing < 0) + WAngle initialFacing; + if (!exitinfo.Facing.HasValue) { var delta = to - spawn; if (delta.HorizontalLengthSquared == 0) @@ -68,6 +68,8 @@ namespace OpenRA.Mods.Common.Traits else initialFacing = delta.Yaw; } + else + initialFacing = exitinfo.Facing.Value; exitLocations = rp.Value != null && rp.Value.Path.Count > 0 ? rp.Value.Path : new List { exit }; diff --git a/OpenRA.Mods.Common/Traits/ProductionParadrop.cs b/OpenRA.Mods.Common/Traits/ProductionParadrop.cs index c381072fa9..27f87a96f5 100644 --- a/OpenRA.Mods.Common/Traits/ProductionParadrop.cs +++ b/OpenRA.Mods.Common/Traits/ProductionParadrop.cs @@ -124,7 +124,7 @@ namespace OpenRA.Mods.Common.Traits var spawn = self.World.Map.CenterOfCell(exit) + new WVec(WDist.Zero, WDist.Zero, altitude); var to = self.World.Map.CenterOfCell(exit); - var initialFacing = exitinfo == null || exitinfo.Facing < 0 ? (to - spawn).Yaw : WAngle.FromFacing(exitinfo.Facing); + var initialFacing = (exitinfo != null && exitinfo.Facing.HasValue) ? exitinfo.Facing.Value : (to - spawn).Yaw; exitLocations = rp.Value != null && rp.Value.Path.Count > 0 ? rp.Value.Path : new List { exit }; diff --git a/OpenRA.Mods.Common/Traits/SupportPowers/AirstrikePower.cs b/OpenRA.Mods.Common/Traits/SupportPowers/AirstrikePower.cs index 9076124973..c1e5eafb1c 100644 --- a/OpenRA.Mods.Common/Traits/SupportPowers/AirstrikePower.cs +++ b/OpenRA.Mods.Common/Traits/SupportPowers/AirstrikePower.cs @@ -87,7 +87,7 @@ namespace OpenRA.Mods.Common.Traits { var aircraft = new List(); if (!facing.HasValue) - facing = WAngle.FromFacing(256 * self.World.SharedRandom.Next(info.QuantizedFacings) / info.QuantizedFacings); + facing = new WAngle(1024 * self.World.SharedRandom.Next(info.QuantizedFacings) / info.QuantizedFacings); var altitude = self.World.Map.Rules.Actors[info.UnitType].TraitInfo().CruiseAltitude.Length; var attackRotation = WRot.FromYaw(facing.Value); diff --git a/OpenRA.Mods.Common/Traits/SupportPowers/ParatroopersPower.cs b/OpenRA.Mods.Common/Traits/SupportPowers/ParatroopersPower.cs index 12e01b5160..138a44a213 100644 --- a/OpenRA.Mods.Common/Traits/SupportPowers/ParatroopersPower.cs +++ b/OpenRA.Mods.Common/Traits/SupportPowers/ParatroopersPower.cs @@ -105,7 +105,7 @@ namespace OpenRA.Mods.Common.Traits var info = Info as ParatroopersPowerInfo; if (!facing.HasValue) - facing = WAngle.FromFacing(256 * self.World.SharedRandom.Next(info.QuantizedFacings) / info.QuantizedFacings); + facing = new WAngle(1024 * self.World.SharedRandom.Next(info.QuantizedFacings) / info.QuantizedFacings); var utLower = info.UnitType.ToLowerInvariant(); ActorInfo unitType; diff --git a/OpenRA.Mods.Common/Traits/ThrowsParticle.cs b/OpenRA.Mods.Common/Traits/ThrowsParticle.cs index f8f2db1405..58fd931f66 100644 --- a/OpenRA.Mods.Common/Traits/ThrowsParticle.cs +++ b/OpenRA.Mods.Common/Traits/ThrowsParticle.cs @@ -40,7 +40,7 @@ namespace OpenRA.Mods.Common.Traits public readonly int Velocity = 75; [Desc("Speed at which the particle turns.")] - public readonly int TurnSpeed = 15; + public readonly WAngle TurnSpeed = new WAngle(60); public override object Create(ActorInitializer init) { return new ThrowsParticle(init, this); } } @@ -80,9 +80,9 @@ namespace OpenRA.Mods.Common.Traits length = (finalPos - initialPos).Length / info.Velocity; // WAngle requires positive inputs, so track the speed and direction separately - var rotationSpeed = WDist.FromPDF(Game.CosmeticRandom, 2).Length * info.TurnSpeed / 1024; + var rotationSpeed = WDist.FromPDF(Game.CosmeticRandom, 2).Length * info.TurnSpeed.Angle / 1024; direction = rotationSpeed < 0 ? -1 : 1; - rotation = WAngle.FromFacing(Math.Abs(rotationSpeed)); + rotation = new WAngle(Math.Abs(rotationSpeed)); var anim = new Animation(init.World, rs.GetImage(self), () => facing); anim.PlayRepeating(info.Anim); diff --git a/OpenRA.Mods.Common/Traits/Transforms.cs b/OpenRA.Mods.Common/Traits/Transforms.cs index 6d6e70943b..bef966c057 100644 --- a/OpenRA.Mods.Common/Traits/Transforms.cs +++ b/OpenRA.Mods.Common/Traits/Transforms.cs @@ -29,7 +29,7 @@ namespace OpenRA.Mods.Common.Traits public readonly CVec Offset = CVec.Zero; [Desc("Facing that the actor must face before transforming.")] - public readonly int Facing = 96; + public readonly WAngle Facing = new WAngle(384); [Desc("Sounds to play when transforming.")] public readonly string[] TransformSounds = { }; @@ -91,7 +91,7 @@ namespace OpenRA.Mods.Common.Traits return new Transform(self, Info.IntoActor) { Offset = Info.Offset, - Facing = WAngle.FromFacing(Info.Facing), + Facing = Info.Facing, Sounds = Info.TransformSounds, Notification = Info.TransformNotification, Faction = faction diff --git a/OpenRA.Mods.Common/Traits/Turreted.cs b/OpenRA.Mods.Common/Traits/Turreted.cs index 58f4ff9243..94e174aeb0 100644 --- a/OpenRA.Mods.Common/Traits/Turreted.cs +++ b/OpenRA.Mods.Common/Traits/Turreted.cs @@ -20,9 +20,11 @@ namespace OpenRA.Mods.Common.Traits public class TurretedInfo : PausableConditionalTraitInfo, Requires, IActorPreviewInitInfo, IEditorActorOptions { public readonly string Turret = "primary"; + [Desc("Speed at which the turret turns.")] - public readonly int TurnSpeed = 255; - public readonly int InitialFacing = 0; + public readonly WAngle TurnSpeed = new WAngle(512); + + public readonly WAngle InitialFacing = WAngle.Zero; [Desc("Number of ticks before turret is realigned. (-1 turns off realignment)")] public readonly int RealignDelay = 40; @@ -35,7 +37,7 @@ namespace OpenRA.Mods.Common.Traits IEnumerable IActorPreviewInitInfo.ActorPreviewInits(ActorInfo ai, ActorPreviewType type) { - yield return new TurretFacingInit(this, WAngle.FromFacing(InitialFacing)); + yield return new TurretFacingInit(this, InitialFacing); } IEnumerable IEditorActorOptions.ActorOptions(ActorInfo ai, World world) @@ -47,7 +49,7 @@ namespace OpenRA.Mods.Common.Traits if (init != null) return init.Value.Angle; - return WAngle.FromFacing(InitialFacing).Angle; + return InitialFacing.Angle; }, (actor, value) => actor.ReplaceInit(new TurretFacingInit(this, new WAngle((int)value)), this)); } @@ -78,7 +80,7 @@ namespace OpenRA.Mods.Common.Traits public static Func TurretFacingFromInit(IActorInitializer init, TurretedInfo info) { - return TurretFacingFromInit(init, info, WAngle.FromFacing(info.InitialFacing)); + return TurretFacingFromInit(init, info, info.InitialFacing); } public static Func TurretFacingFromInit(IActorInitializer init, TraitInfo info, WAngle defaultFacing) @@ -155,7 +157,7 @@ namespace OpenRA.Mods.Common.Traits void MoveTurret() { var df = DesiredFacing ?? (facing != null ? facing.Facing.Facing : TurretFacing); - TurretFacing = Util.TickFacing(TurretFacing, df, Info.TurnSpeed); + TurretFacing = Util.TickFacing(TurretFacing, df, Info.TurnSpeed.Facing); } public bool FaceTarget(Actor self, Target target) diff --git a/OpenRA.Mods.Common/Traits/World/CrateSpawner.cs b/OpenRA.Mods.Common/Traits/World/CrateSpawner.cs index 293be25084..db89add518 100644 --- a/OpenRA.Mods.Common/Traits/World/CrateSpawner.cs +++ b/OpenRA.Mods.Common/Traits/World/CrateSpawner.cs @@ -141,7 +141,7 @@ namespace OpenRA.Mods.Common.Traits if (info.DeliveryAircraft != null) { var crate = w.CreateActor(false, crateActor, new TypeDictionary { new OwnerInit(w.WorldActor.Owner) }); - var dropFacing = WAngle.FromFacing(256 * self.World.SharedRandom.Next(info.QuantizedFacings) / info.QuantizedFacings); + var dropFacing = new WAngle(1024 * self.World.SharedRandom.Next(info.QuantizedFacings) / info.QuantizedFacings); var delta = new WVec(0, -1024, 0).Rotate(WRot.FromYaw(dropFacing)); var altitude = self.World.Map.Rules.Actors[info.DeliveryAircraft].TraitInfo().CruiseAltitude.Length; diff --git a/OpenRA.Mods.Common/Traits/World/EditorCursorLayer.cs b/OpenRA.Mods.Common/Traits/World/EditorCursorLayer.cs index f0d4b4241d..14e05686ef 100644 --- a/OpenRA.Mods.Common/Traits/World/EditorCursorLayer.cs +++ b/OpenRA.Mods.Common/Traits/World/EditorCursorLayer.cs @@ -21,7 +21,7 @@ namespace OpenRA.Mods.Common.Traits [Desc("Required for the map editor to work. Attach this to the world actor.")] public class EditorCursorLayerInfo : TraitInfo, Requires { - public readonly int PreviewFacing = 96; + public readonly WAngle PreviewFacing = new WAngle(384); public override object Create(ActorInitializer init) { return new EditorCursorLayer(init.Self, this); } } @@ -194,7 +194,7 @@ namespace OpenRA.Mods.Common.Traits } if (actor.HasTraitInfo()) - reference.Add(new FacingInit(WAngle.FromFacing(info.PreviewFacing))); + reference.Add(new FacingInit(info.PreviewFacing)); Type = EditorCursorType.Actor; Actor = new EditorActorPreview(wr, null, reference, owner); diff --git a/OpenRA.Mods.Common/Traits/World/MPStartUnits.cs b/OpenRA.Mods.Common/Traits/World/MPStartUnits.cs index eb459d8af9..314cdbf826 100644 --- a/OpenRA.Mods.Common/Traits/World/MPStartUnits.cs +++ b/OpenRA.Mods.Common/Traits/World/MPStartUnits.cs @@ -43,11 +43,11 @@ namespace OpenRA.Mods.Common.Traits [Desc("Outer radius for spawning support actors")] public readonly int OuterSupportRadius = 4; - [Desc("Initial facing of BaseActor. -1 means random.")] - public readonly int BaseActorFacing = 128; + [Desc("Initial facing of BaseActor. Leave undefined for random facings.")] + public readonly WAngle? BaseActorFacing = new WAngle(512); - [Desc("Initial facing of SupportActors. -1 means random.")] - public readonly int SupportActorsFacing = -1; + [Desc("Initial facing of SupportActors. Leave undefined for random facings.")] + public readonly WAngle? SupportActorsFacing = null; } public class MPStartUnits { } diff --git a/OpenRA.Mods.Common/Traits/World/SpawnMPUnits.cs b/OpenRA.Mods.Common/Traits/World/SpawnMPUnits.cs index ad31efeeac..ef40ba58ef 100644 --- a/OpenRA.Mods.Common/Traits/World/SpawnMPUnits.cs +++ b/OpenRA.Mods.Common/Traits/World/SpawnMPUnits.cs @@ -85,7 +85,7 @@ namespace OpenRA.Mods.Common.Traits if (unitGroup.BaseActor != null) { - var facing = unitGroup.BaseActorFacing < 0 ? new WAngle(w.SharedRandom.Next(1024)) : WAngle.FromFacing(unitGroup.BaseActorFacing); + var facing = unitGroup.BaseActorFacing.HasValue ? unitGroup.BaseActorFacing.Value : new WAngle(w.SharedRandom.Next(1024)); w.CreateActor(unitGroup.BaseActor.ToLowerInvariant(), new TypeDictionary { new LocationInit(sp + unitGroup.BaseActorOffset), @@ -113,7 +113,7 @@ namespace OpenRA.Mods.Common.Traits } var subCell = ip.SharesCell ? w.ActorMap.FreeSubCell(validCell) : 0; - var facing = unitGroup.SupportActorsFacing < 0 ? new WAngle(w.SharedRandom.Next(1024)) : WAngle.FromFacing(unitGroup.SupportActorsFacing); + var facing = unitGroup.SupportActorsFacing.HasValue ? unitGroup.SupportActorsFacing.Value : new WAngle(w.SharedRandom.Next(1024)); w.CreateActor(s.ToLowerInvariant(), new TypeDictionary { diff --git a/OpenRA.Mods.Common/UpdateRules/Rules/20200503/ReplaceFacingAngles.cs b/OpenRA.Mods.Common/UpdateRules/Rules/20200503/ReplaceFacingAngles.cs new file mode 100644 index 0000000000..cde295cc3e --- /dev/null +++ b/OpenRA.Mods.Common/UpdateRules/Rules/20200503/ReplaceFacingAngles.cs @@ -0,0 +1,105 @@ +#region Copyright & License Information +/* + * Copyright 2007-2020 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, either version 3 of + * the License, or (at your option) any later version. For more + * information, see COPYING. + */ +#endregion + +using System.Collections.Generic; +using System.Linq; + +namespace OpenRA.Mods.Common.UpdateRules.Rules +{ + class ReplaceFacingAngles : UpdateRule + { + static readonly Dictionary TraitFields = new Dictionary() + { + { "Aircraft", new[] { "InitialFacing", "PreviewFacing", "TurnSpeed", "IdleTurnSpeed" } }, + { "Mobile", new[] { "InitialFacing", "PreviewFacing", "TurnSpeed" } }, + { "Husk", new[] { "PreviewFacing" } }, + { "Turreted", new[] { "InitialFacing", "TurnSpeed" } }, + { "GrantConditionOnDeploy", new[] { "Facing" } }, + { "FreeActor", new[] { "Facing" } }, + { "ProductionAirdrop", new[] { "Facing" } }, + { "EditorCursorLayer", new[] { "PreviewFacing" } }, + { "MPStartUnits", new[] { "BaseActorFacing", "SupportActorsFacing" } }, + { "Refinery", new[] { "DockAngle" } }, + { "Cargo", new[] { "PassengerFacing" } }, + { "Exit", new[] { "Facing" } }, + { "ThrowsParticle", new[] { "TurnSpeed" } }, + { "Transforms", new[] { "Facing" } }, + { "FallsToEarth", new[] { "MaximumSpinSpeed" } }, + { "ConyardChronoReturn", new[] { "Facing" } }, + { "TDGunboat", new[] { "InitialFacing", "PreviewFacing" } }, + { "AttackPopupTurreted", new[] { "DefaultFacing" } }, + { "DropPodsPower", new[] { "PodFacing" } }, + { "TiberianSunRefinery", new[] { "DockAngle" } }, + }; + + static readonly Dictionary ProjectileFields = new Dictionary() + { + { "Missile", new[] { "HorizontalRateOfTurn", "VerticalRateOfTurn" } } + }; + + public override string Name { get { return "Increase facing angle resolution"; } } + public override string Description + { + get + { + return "Trait fields that defined facings (0-255) have been replaced with higher resolution angles (0-1023).\n" + + "Values for the following trait fields should be multiplied by 4, or if undefined (-1) replaced by an empty definition:\n" + + UpdateUtils.FormatMessageList(TraitFields.Select(t => t.Key + "\n" + UpdateUtils.FormatMessageList(t.Value))) + "\n" + + "Values for the following projectile files should be multiplied by 4:\n" + + UpdateUtils.FormatMessageList(ProjectileFields.Select(t => t.Key + "\n" + UpdateUtils.FormatMessageList(t.Value))); + } + } + + public override IEnumerable UpdateActorNode(ModData modData, MiniYamlNode actorNode) + { + foreach (var kv in TraitFields) + { + foreach (var traitNode in actorNode.ChildrenMatching(kv.Key)) + { + foreach (var fieldName in kv.Value) + { + foreach (var fieldNode in traitNode.ChildrenMatching(fieldName)) + { + var value = fieldNode.NodeValue(); + fieldNode.Value.Value = value != -1 ? FieldSaver.FormatValue(value != 255 ? 4 * value : 1023) : ""; + } + } + } + } + + yield break; + } + + public override IEnumerable UpdateWeaponNode(ModData modData, MiniYamlNode weaponNode) + { + foreach (var projectileNode in weaponNode.ChildrenMatching("Projectile")) + { + if (projectileNode.Value.Value == null) + continue; + + string[] fieldNames; + if (ProjectileFields.TryGetValue(projectileNode.Value.Value, out fieldNames)) + { + foreach (var fieldName in fieldNames) + { + foreach (var fieldNode in projectileNode.ChildrenMatching(fieldName)) + { + var value = fieldNode.NodeValue(); + fieldNode.Value.Value = FieldSaver.FormatValue(value != 255 ? 4 * value : 1023); + } + } + } + } + + yield break; + } + } +} diff --git a/OpenRA.Mods.Common/UpdateRules/UpdatePath.cs b/OpenRA.Mods.Common/UpdateRules/UpdatePath.cs index d6516de134..d31c39df24 100644 --- a/OpenRA.Mods.Common/UpdateRules/UpdatePath.cs +++ b/OpenRA.Mods.Common/UpdateRules/UpdatePath.cs @@ -69,6 +69,7 @@ namespace OpenRA.Mods.Common.UpdateRules new UpdateMapInits(), new CreateFlashPaletteEffectWarhead(), new ChangeTargetLineDelayToMilliseconds(), + new ReplaceFacingAngles(), }) }; diff --git a/mods/cnc/rules/aircraft.yaml b/mods/cnc/rules/aircraft.yaml index d700e473fb..942043dbcf 100644 --- a/mods/cnc/rules/aircraft.yaml +++ b/mods/cnc/rules/aircraft.yaml @@ -13,7 +13,7 @@ TRAN: Queue: Aircraft.GDI, Aircraft.Nod Description: Fast Infantry Transport Helicopter.\n Unarmed Aircraft: - TurnSpeed: 5 + TurnSpeed: 20 Speed: 150 AltitudeVelocity: 0c100 Health: @@ -64,7 +64,7 @@ HELI: Queue: Aircraft.Nod Description: Helicopter Gunship with Chainguns.\n Strong vs Infantry, Light Vehicles and\n Aircraft\n Weak vs Tanks Aircraft: - TurnSpeed: 7 + TurnSpeed: 28 Speed: 180 Health: HP: 12500 @@ -132,7 +132,7 @@ ORCA: Queue: Aircraft.GDI Description: Helicopter Gunship with AG Missiles.\n Strong vs Buildings, Tanks\n Weak vs Infantry Aircraft: - TurnSpeed: 7 + TurnSpeed: 28 Speed: 186 Health: HP: 9000 @@ -182,7 +182,7 @@ C17: Valued: Cost: 2000 Aircraft: - TurnSpeed: 5 + TurnSpeed: 20 Speed: 700 Repulsable: False MaximumPitch: 36 @@ -215,7 +215,7 @@ A10: Valued: Cost: 2000 Aircraft: - TurnSpeed: 4 + TurnSpeed: 16 Speed: 373 Repulsable: False AttackBomber: @@ -242,7 +242,7 @@ TRAN.Husk: Tooltip: Name: Chinook Transport Aircraft: - TurnSpeed: 5 + TurnSpeed: 20 Speed: 140 RevealsShroud: Range: 10c0 @@ -261,7 +261,7 @@ HELI.Husk: Tooltip: Name: Apache Longbow Aircraft: - TurnSpeed: 4 + TurnSpeed: 16 Speed: 186 RevealsShroud: Range: 10c0 @@ -277,7 +277,7 @@ ORCA.Husk: Tooltip: Name: Orca Aircraft: - TurnSpeed: 4 + TurnSpeed: 16 Speed: 186 RevealsShroud: Range: 10c0 diff --git a/mods/cnc/rules/defaults.yaml b/mods/cnc/rules/defaults.yaml index 03ddefbe47..11e8501ae1 100644 --- a/mods/cnc/rules/defaults.yaml +++ b/mods/cnc/rules/defaults.yaml @@ -267,7 +267,7 @@ Action: Kill Mobile: Locomotor: wheeled - TurnSpeed: 5 + TurnSpeed: 20 Selectable: Bounds: 24,24 Targetable: @@ -299,7 +299,7 @@ Inherits: ^Vehicle Mobile: Locomotor: tracked - TurnSpeed: 5 + TurnSpeed: 20 Tooltip: GenericName: Tank @@ -330,7 +330,7 @@ VTOL: true LandableTerrainTypes: Clear, Rough, Road, Beach, Tiberium, BlueTiberium Crushes: crate, infantry - InitialFacing: 224 + InitialFacing: 896 CanSlide: True HiddenUnderFog: Type: GroundPosition diff --git a/mods/cnc/rules/ships.yaml b/mods/cnc/rules/ships.yaml index 1ed6bfa565..15170e0f0f 100644 --- a/mods/cnc/rules/ships.yaml +++ b/mods/cnc/rules/ships.yaml @@ -18,7 +18,7 @@ BOAT: Range: 7c0 Type: CenterPosition Turreted: - TurnSpeed: 5 + TurnSpeed: 20 Offset: 0,896,171 Armament: Weapon: BoatMissile @@ -62,7 +62,7 @@ LST: Mobile: Locomotor: lcraft InitialFacing: 0 - TurnSpeed: 4 + TurnSpeed: 16 Speed: 142 PauseOnCondition: notmobile Health: diff --git a/mods/cnc/rules/structures.yaml b/mods/cnc/rules/structures.yaml index 0930d71d7a..5168b3ca55 100644 --- a/mods/cnc/rules/structures.yaml +++ b/mods/cnc/rules/structures.yaml @@ -24,7 +24,7 @@ FACT: PauseOnCondition: being-demolished || build-incomplete IntoActor: mcv Offset: 1,1 - Facing: 108 + Facing: 432 TransformsIntoMobile: RequiresCondition: factundeploy Locomotor: heavywheeled @@ -228,7 +228,7 @@ PROC: RevealsShroud: Range: 6c0 Refinery: - DockAngle: 112 + DockAngle: 448 DockOffset: 0,2 IsDragRequired: True DragOffset: -554,512,0 @@ -244,7 +244,7 @@ PROC: FreeActor: Actor: HARV SpawnOffset: 1,2 - Facing: 64 + Facing: 256 WithBuildingBib: WithResourceLevelOverlay: RequiresCondition: !build-incomplete @@ -850,8 +850,8 @@ GUN: WithBuildingBib: HasMinibib: true Turreted: - TurnSpeed: 12 - InitialFacing: 56 + TurnSpeed: 48 + InitialFacing: 224 -WithSpriteBody: WithEmbeddedTurretSpriteBody: Armament: @@ -901,7 +901,7 @@ SAM: RevealsShroud: Range: 6c0 Turreted: - TurnSpeed: 10 + TurnSpeed: 40 InitialFacing: 0 RealignDelay: -1 -WithSpriteBody: @@ -1006,7 +1006,7 @@ GTWR: Range: 3c0 WithMuzzleOverlay: Turreted: - TurnSpeed: 255 + TurnSpeed: 512 Power: Amount: -10 @@ -1041,7 +1041,7 @@ ATWR: WithBuildingBib: HasMinibib: true Turreted: - TurnSpeed: 255 + TurnSpeed: 512 Offset: 128,128,384 Armament@PRIMARY: Weapon: TowerMissile diff --git a/mods/cnc/rules/vehicles.yaml b/mods/cnc/rules/vehicles.yaml index 8bae4580a2..0094076e04 100644 --- a/mods/cnc/rules/vehicles.yaml +++ b/mods/cnc/rules/vehicles.yaml @@ -28,7 +28,7 @@ MCV: Transforms: IntoActor: fact Offset: -1,-1 - Facing: 108 + Facing: 432 TransformSounds: constru2.aud, hvydoor1.aud NoTransformNotification: BuildingCannotPlaceAudio MustBeDestroyed: @@ -114,7 +114,7 @@ APC: BuildDurationModifier: 40 Description: Armed infantry transport.\nCan attack Aircraft.\n Strong vs Vehicles\n Weak vs Infantry Mobile: - TurnSpeed: 5 + TurnSpeed: 20 Speed: 132 PauseOnCondition: notmobile Health: @@ -126,7 +126,7 @@ APC: RevealsShroud: Range: 6c0 Turreted: - TurnSpeed: 10 + TurnSpeed: 40 Armament@PRIMARY: Weapon: APCGun Recoil: 48 @@ -183,7 +183,7 @@ ARTY: Queue: Vehicle.Nod Description: Long-range artillery.\n Strong vs Infantry, Vehicles and Buildings Mobile: - TurnSpeed: 4 + TurnSpeed: 16 Speed: 85 Health: HP: 7500 @@ -229,7 +229,7 @@ FTNK: Queue: Vehicle.Nod Description: Heavily armored flame-throwing vehicle.\n Strong vs Infantry, Buildings and Vehicles\n Weak vs Tanks Mobile: - TurnSpeed: 7 + TurnSpeed: 28 Speed: 99 Health: HP: 27000 @@ -270,7 +270,7 @@ BGGY: Queue: Vehicle.Nod Description: Fast scout and anti-infantry vehicle.\n Strong vs Infantry\n Weak vs Tanks Mobile: - TurnSpeed: 10 + TurnSpeed: 40 Speed: 170 Health: HP: 12000 @@ -281,7 +281,7 @@ BGGY: RevealsShroud: Range: 8c0 Turreted: - TurnSpeed: 10 + TurnSpeed: 40 Offset: -43,0,128 Armament: Weapon: MachineGun @@ -312,7 +312,7 @@ BIKE: Queue: Vehicle.Nod Description: Fast scout vehicle, armed with\nrockets.\nCan attack Aircraft.\n Strong vs Vehicles, Tanks\n Weak vs Infantry Mobile: - TurnSpeed: 10 + TurnSpeed: 40 Speed: 213 Locomotor: bike Health: @@ -350,7 +350,7 @@ JEEP: Queue: Vehicle.GDI Description: Fast scout and anti-infantry vehicle.\n Strong vs Infantry\n Weak vs Tanks Mobile: - TurnSpeed: 10 + TurnSpeed: 40 Speed: 156 Health: HP: 16000 @@ -361,7 +361,7 @@ JEEP: RevealsShroud: Range: 8c0 Turreted: - TurnSpeed: 10 + TurnSpeed: 40 Offset: -85,0,128 Armament: Weapon: MachineGunH @@ -392,7 +392,7 @@ LTNK: Queue: Vehicle.Nod Description: Fast, light tank.\n Strong vs Vehicles, Tanks\n Weak vs Infantry Mobile: - TurnSpeed: 7 + TurnSpeed: 28 Speed: 110 Health: HP: 34000 @@ -403,7 +403,7 @@ LTNK: RevealsShroud: Range: 6c0 Turreted: - TurnSpeed: 7 + TurnSpeed: 28 Armament: Weapon: 70mm Recoil: 85 @@ -445,7 +445,7 @@ MTNK: RevealsShroud: Range: 6c0 Turreted: - TurnSpeed: 5 + TurnSpeed: 20 Armament: Weapon: 120mm Recoil: 128 @@ -481,7 +481,7 @@ HTNK: Mobile: Locomotor: heavytracked Speed: 56 - TurnSpeed: 3 + TurnSpeed: 12 Health: HP: 87000 Repairable: @@ -492,7 +492,7 @@ HTNK: Range: 6c0 WithSpriteTurret: Turreted: - TurnSpeed: 3 + TurnSpeed: 12 Armament@PRIMARY: Weapon: 120mmDual LocalOffset: 900,180,340, 900,-180,340 @@ -538,7 +538,7 @@ MSAM: Description: Long range rocket artillery.\n Strong vs all Ground units. Mobile: Speed: 85 - TurnSpeed: 4 + TurnSpeed: 16 Health: HP: 12000 Repairable: @@ -548,7 +548,7 @@ MSAM: RevealsShroud: Range: 5c0 Turreted: - TurnSpeed: 255 + TurnSpeed: 512 Offset: -256,0,128 Armament@PRIMARY: Weapon: 227mm @@ -586,7 +586,7 @@ MLRS: Description: Powerful anti-air unit.\nCannot attack Ground units. Mobile: Speed: 99 - TurnSpeed: 7 + TurnSpeed: 28 Health: HP: 18000 Repairable: @@ -596,7 +596,7 @@ MLRS: RevealsShroud: Range: 8c0 Turreted: - TurnSpeed: 8 + TurnSpeed: 32 Offset: -128,0,128 RealignDelay: 0 Armament: @@ -642,7 +642,7 @@ STNK: Description: Long-range missile tank that can cloak.\nCan attack Aircraft.\nHas weak armor. Can be spotted by infantry and defense structures.\n Strong vs Vehicles, Tanks\n Weak vs Infantry. Mobile: Locomotor: heavywheeled - TurnSpeed: 10 + TurnSpeed: 40 Speed: 142 Health: HP: 15000 diff --git a/mods/cnc/weapons/missiles.yaml b/mods/cnc/weapons/missiles.yaml index 1c48ad04c3..0f05902743 100644 --- a/mods/cnc/weapons/missiles.yaml +++ b/mods/cnc/weapons/missiles.yaml @@ -10,7 +10,7 @@ Inaccuracy: 128 Image: DRAGON Shadow: true - HorizontalRateOfTurn: 15 + HorizontalRateOfTurn: 60 TrailImage: smokey ContrailLength: 8 Speed: 298 @@ -49,7 +49,7 @@ Dragon: BurstDelays: 5 Projectile: Missile Speed: 426 - HorizontalRateOfTurn: 20 + HorizontalRateOfTurn: 80 RangeLimit: 12c0 Warhead@1Dam: SpreadDamage ValidTargets: Air @@ -68,7 +68,7 @@ BikeRockets: Burst: 2 BurstDelays: 10 Projectile: Missile - HorizontalRateOfTurn: 10 + HorizontalRateOfTurn: 40 Speed: 213 Warhead@1Dam: SpreadDamage Versus: @@ -85,7 +85,7 @@ OrcaAGMissiles: ValidTargets: Ground, Water Projectile: Missile Arm: 1 - HorizontalRateOfTurn: 20 + HorizontalRateOfTurn: 80 Speed: 256 RangeLimit: 6c0 Warhead@1Dam: SpreadDamage @@ -117,7 +117,7 @@ MammothMissiles: Burst: 2 BurstDelays: 15 Projectile: Missile - HorizontalRateOfTurn: 20 + HorizontalRateOfTurn: 80 Speed: 341 RangeLimit: 6c0 Warhead@1Dam: SpreadDamage @@ -174,7 +174,7 @@ MammothMissiles: BurstDelays: 10 Projectile: Missile Inaccuracy: 213 - HorizontalRateOfTurn: 10 + HorizontalRateOfTurn: 40 Speed: 213 RangeLimit: 8c409 Warhead@1Dam: SpreadDamage @@ -194,7 +194,7 @@ BoatMissile: Report: rocket2.aud Projectile: Missile Inaccuracy: 426 - HorizontalRateOfTurn: 5 + HorizontalRateOfTurn: 20 Speed: 170 RangeLimit: 9c614 Warhead@1Dam: SpreadDamage @@ -218,7 +218,7 @@ TowerMissile: Report: rocket2.aud ValidTargets: Ground, Water Projectile: Missile - HorizontalRateOfTurn: 20 + HorizontalRateOfTurn: 80 Speed: 298 RangeLimit: 8c409 Warhead@1Dam: SpreadDamage @@ -241,7 +241,7 @@ TowerAAMissile: ValidTargets: Air Projectile: Missile Image: MISSILE - HorizontalRateOfTurn: 20 + HorizontalRateOfTurn: 80 Speed: 426 RangeLimit: 9c614 Inaccuracy: 0 @@ -266,7 +266,7 @@ Patriot: ValidTargets: Air Projectile: Missile Image: MISSILE - HorizontalRateOfTurn: 20 + HorizontalRateOfTurn: 80 Speed: 300 RangeLimit: 10c819 Inaccuracy: 0 diff --git a/mods/d2k/rules/aircraft.yaml b/mods/d2k/rules/aircraft.yaml index 156dbe1149..81a32a94d7 100644 --- a/mods/d2k/rules/aircraft.yaml +++ b/mods/d2k/rules/aircraft.yaml @@ -13,13 +13,13 @@ carryall.reinforce: CruisingCondition: cruising InitialFacing: 0 Speed: 144 - TurnSpeed: 4 + TurnSpeed: 16 LandableTerrainTypes: Sand, Rock, Transition, Spice, SpiceSand, Dune, Concrete Repulsable: False AirborneCondition: airborne CanSlide: True VTOL: true - IdleTurnSpeed: 1 + IdleTurnSpeed: 4 Targetable@GROUND: TargetTypes: Ground, Vehicle RequiresCondition: !airborne @@ -78,7 +78,7 @@ frigate: Aircraft: IdleBehavior: LeaveMap Speed: 189 - TurnSpeed: 1 + TurnSpeed: 4 Repulsable: False MaximumPitch: 20 CruiseAltitude: 2048 @@ -101,7 +101,7 @@ ornithopter: Type: light Aircraft: Speed: 224 - TurnSpeed: 2 + TurnSpeed: 8 Repulsable: False CruiseAltitude: 1920 AmmoPool: @@ -119,7 +119,7 @@ ornithopter.husk: Tooltip: Name: Ornithopter Aircraft: - TurnSpeed: 5 + TurnSpeed: 20 Speed: 224 RenderSprites: Image: ornithopter @@ -129,7 +129,7 @@ carryall.husk: Tooltip: Name: Carryall Aircraft: - TurnSpeed: 4 + TurnSpeed: 16 Speed: 144 CanSlide: True VTOL: true @@ -144,7 +144,7 @@ carryall.huskVTOL: Moves: False Velocity: 0c128 Aircraft: - TurnSpeed: 4 + TurnSpeed: 16 CanSlide: True VTOL: true RenderSprites: diff --git a/mods/d2k/rules/defaults.yaml b/mods/d2k/rules/defaults.yaml index 4bc5521fac..27c321b5d6 100644 --- a/mods/d2k/rules/defaults.yaml +++ b/mods/d2k/rules/defaults.yaml @@ -194,7 +194,7 @@ OwnerLostAction: Action: Kill Mobile: - TurnSpeed: 5 + TurnSpeed: 20 Locomotor: vehicle PauseOnCondition: notmobile Selectable: diff --git a/mods/d2k/rules/infantry.yaml b/mods/d2k/rules/infantry.yaml index 944e66dca0..754946d27d 100644 --- a/mods/d2k/rules/infantry.yaml +++ b/mods/d2k/rules/infantry.yaml @@ -110,7 +110,7 @@ thumper: GrantConditionOnDeploy: DeployedCondition: deployed UndeployedCondition: undeployed - Facing: 128 + Facing: 512 AllowedTerrainTypes: Sand, Spice, Dune, SpiceSand WithInfantryBody: RequiresCondition: undeployed diff --git a/mods/d2k/rules/misc.yaml b/mods/d2k/rules/misc.yaml index 7ef30c88d8..adf289f9de 100644 --- a/mods/d2k/rules/misc.yaml +++ b/mods/d2k/rules/misc.yaml @@ -172,7 +172,7 @@ waypoint: carryall.colorpicker: Inherits: carryall Aircraft: - InitialFacing: 104 + InitialFacing: 416 -Buildable: -MapEditorData: RenderSprites: diff --git a/mods/d2k/rules/structures.yaml b/mods/d2k/rules/structures.yaml index 49a8f1f6f1..af9a74426b 100644 --- a/mods/d2k/rules/structures.yaml +++ b/mods/d2k/rules/structures.yaml @@ -261,7 +261,7 @@ refinery: RevealsShroud: Range: 3c768 Refinery: - DockAngle: 160 + DockAngle: 640 DockOffset: 2,1 TickRate: 20 StoresResources: @@ -744,8 +744,8 @@ medium_gun_turret: QuantizedFacings: 32 WithMuzzleOverlay: Turreted: - TurnSpeed: 6 - InitialFacing: 128 + TurnSpeed: 24 + InitialFacing: 512 Armament: Weapon: 110mm_Gun LocalOffset: 512,0,432 @@ -789,8 +789,8 @@ large_gun_turret: Weapon: TowerMissile LocalOffset: 256,384,768, 256,-384,768 Turreted: - TurnSpeed: 8 - InitialFacing: 128 + TurnSpeed: 32 + InitialFacing: 512 Power: Amount: -60 RevealOnDeath: diff --git a/mods/d2k/rules/vehicles.yaml b/mods/d2k/rules/vehicles.yaml index b7cdf1fc8c..af78aa2570 100644 --- a/mods/d2k/rules/vehicles.yaml +++ b/mods/d2k/rules/vehicles.yaml @@ -30,7 +30,7 @@ mcv: Weapon: UnitExplodeLarge EmptyWeapon: UnitExplodeLarge Transforms: - Facing: 16 + Facing: 64 IntoActor: construction_yard Offset: -1,-1 TransformSounds: BUILD1.WAV @@ -127,7 +127,7 @@ trike: Armor: Type: wood Mobile: - TurnSpeed: 10 + TurnSpeed: 40 Speed: 128 RevealsShroud: Range: 4c768 @@ -168,7 +168,7 @@ quad: Armor: Type: light Mobile: - TurnSpeed: 8 + TurnSpeed: 32 Speed: 96 RevealsShroud: Range: 4c768 @@ -207,11 +207,11 @@ siege_tank: Type: light Mobile: Speed: 43 - TurnSpeed: 3 + TurnSpeed: 12 RevealsShroud: Range: 6c768 Turreted: - TurnSpeed: 3 + TurnSpeed: 12 Offset: 0,0,-32 Armament: Weapon: 155mm @@ -255,7 +255,7 @@ missile_tank: Cost: 900 Mobile: Speed: 64 - TurnSpeed: 5 + TurnSpeed: 20 Health: HP: 13000 Armor: @@ -302,7 +302,7 @@ sonic_tank: Armor: Type: light Mobile: - TurnSpeed: 3 + TurnSpeed: 12 Speed: 31 RevealsShroud: Range: 5c768 @@ -342,7 +342,7 @@ devastator: Armor: Type: heavy Mobile: - TurnSpeed: 3 + TurnSpeed: 12 Speed: 31 Locomotor: devastator RequiresCondition: !overload @@ -414,7 +414,7 @@ raider: Armor: Type: wood Mobile: - TurnSpeed: 10 + TurnSpeed: 40 Speed: 149 RevealsShroud: Range: 4c768 @@ -479,7 +479,7 @@ deviator: BuildDurationModifier: 100 Description: Fires a warhead which changes\nthe allegiance of enemy vehicles Mobile: - TurnSpeed: 3 + TurnSpeed: 12 Speed: 53 Health: HP: 11000 @@ -525,11 +525,11 @@ deviator: Type: heavy Mobile: Speed: 75 - TurnSpeed: 5 + TurnSpeed: 20 RevealsShroud: Range: 5c768 Turreted: - TurnSpeed: 5 + TurnSpeed: 20 RealignDelay: 0 Armament: Weapon: 80mm_A @@ -578,7 +578,7 @@ combat_tank_o: Buildable: Prerequisites: ~heavy.ordos_combat Turreted: - TurnSpeed: 5 + TurnSpeed: 20 Armament: Weapon: 80mm_O Mobile: diff --git a/mods/d2k/weapons/missiles.yaml b/mods/d2k/weapons/missiles.yaml index a8c08a26a2..e0ea2dedbd 100644 --- a/mods/d2k/weapons/missiles.yaml +++ b/mods/d2k/weapons/missiles.yaml @@ -44,11 +44,11 @@ MinRange: 0c512 Projectile: Missile Shadow: true - HorizontalRateOfTurn: 3 + HorizontalRateOfTurn: 12 RangeLimit: 6c614 CruiseAltitude: 1c0 MinimumLaunchAngle: 64 - VerticalRateOfTurn: 10 + VerticalRateOfTurn: 40 Image: MISSILE2 TrailImage: large_trail Speed: 288 @@ -104,7 +104,7 @@ TowerMissile: BurstDelays: 60 ValidTargets: Ground, Air Projectile: Missile - HorizontalRateOfTurn: 1 + HorizontalRateOfTurn: 4 Warhead@1Dam: SpreadDamage ValidTargets: Ground, Air DamageTypes: Prone50Percent, TriggerProne, ExplosionDeath diff --git a/mods/ra/maps/bomber-john/rules.yaml b/mods/ra/maps/bomber-john/rules.yaml index 3e46962323..000db1fdd1 100644 --- a/mods/ra/maps/bomber-john/rules.yaml +++ b/mods/ra/maps/bomber-john/rules.yaml @@ -123,7 +123,7 @@ MNLYR: Type: Heavy Mobile: Speed: 128 - TurnSpeed: 900 + TurnSpeed: 512 RevealsShroud: Range: 40c0 MustBeDestroyed: @@ -131,7 +131,7 @@ MNLYR: Transforms: IntoActor: ftur Offset: 0,0 - Facing: 96 + Facing: 384 CashTrickler: Interval: 150 Amount: 20 @@ -147,7 +147,7 @@ FTUR: Transforms: IntoActor: mnlyr Offset: 0,0 - Facing: 96 + Facing: 384 MustBeDestroyed: RequiredForShortGame: true CashTrickler: diff --git a/mods/ra/maps/fort-lonestar/rules.yaml b/mods/ra/maps/fort-lonestar/rules.yaml index e27cef7d63..43adc15b18 100644 --- a/mods/ra/maps/fort-lonestar/rules.yaml +++ b/mods/ra/maps/fort-lonestar/rules.yaml @@ -161,7 +161,7 @@ MOBILETENT: Transforms: IntoActor: tent Offset: 0,0 - Facing: 96 + Facing: 384 TransformSounds: placbldg.aud, build5.aud NoTransformNotification: BuildingCannotPlaceAudio RenderSprites: @@ -328,7 +328,7 @@ V2RL: RevealsShroud: Range: 14c0 Turreted: - TurnSpeed: 1 + TurnSpeed: 4 Armament@PRIMARY: Recoil: 8 RecoilRecovery: 0c7 diff --git a/mods/ra/maps/fort-lonestar/weapons.yaml b/mods/ra/maps/fort-lonestar/weapons.yaml index c807c31d79..728419a7fd 100644 --- a/mods/ra/maps/fort-lonestar/weapons.yaml +++ b/mods/ra/maps/fort-lonestar/weapons.yaml @@ -30,7 +30,7 @@ MammothTusk: TrailImage: smokey ContrailLength: 150 Inaccuracy: 0c853 - HorizontalRateOfTurn: 10 + HorizontalRateOfTurn: 40 RangeLimit: 12c0 Warhead@1Dam: SpreadDamage Spread: 640 diff --git a/mods/ra/maps/monster-tank-madness/rules.yaml b/mods/ra/maps/monster-tank-madness/rules.yaml index 0a9ec42956..8a27bc7e61 100644 --- a/mods/ra/maps/monster-tank-madness/rules.yaml +++ b/mods/ra/maps/monster-tank-madness/rules.yaml @@ -141,7 +141,7 @@ PBOX: ExternalCondition@friendly: Condition: friendly Turreted: - TurnSpeed: 1 + TurnSpeed: 4 Armament@PRIMARY: Weapon: SuperTankPrimary LocalOffset: 900,180,340, 900,-180,340 diff --git a/mods/ra/rules/aircraft.yaml b/mods/ra/rules/aircraft.yaml index d925ace53e..d1a4f2936f 100644 --- a/mods/ra/rules/aircraft.yaml +++ b/mods/ra/rules/aircraft.yaml @@ -7,7 +7,7 @@ BADR: HP: 30000 Aircraft: CruiseAltitude: 2560 - TurnSpeed: 5 + TurnSpeed: 20 Speed: 180 Repulsable: False MaximumPitch: 56 @@ -84,8 +84,8 @@ MIG: OpportunityFire: False Aircraft: CruiseAltitude: 2560 - InitialFacing: 192 - TurnSpeed: 4 + InitialFacing: 768 + TurnSpeed: 16 Speed: 223 RepulsionSpeed: 40 MaximumPitch: 56 @@ -158,8 +158,8 @@ YAK: OpportunityFire: False Aircraft: CruiseAltitude: 2560 - InitialFacing: 192 - TurnSpeed: 4 + InitialFacing: 768 + TurnSpeed: 16 Speed: 178 RepulsionSpeed: 40 MaximumPitch: 56 @@ -216,7 +216,7 @@ TRAN: Range: 6c0 Type: GroundPosition Aircraft: - TurnSpeed: 5 + TurnSpeed: 20 Speed: 128 AltitudeVelocity: 0c58 WithIdleOverlay@ROTOR1AIR: @@ -283,7 +283,7 @@ HELI: AttackType: Hover OpportunityFire: False Aircraft: - TurnSpeed: 4 + TurnSpeed: 16 Speed: 149 AutoTarget: InitialStance: HoldFire @@ -356,7 +356,7 @@ HIND: AttackType: Hover OpportunityFire: False Aircraft: - TurnSpeed: 4 + TurnSpeed: 16 Speed: 112 AutoTarget: InitialStance: HoldFire @@ -396,7 +396,7 @@ U2: Name: Spy Plane Aircraft: CruiseAltitude: 2560 - TurnSpeed: 7 + TurnSpeed: 28 Speed: 373 Repulsable: False MaximumPitch: 56 @@ -458,7 +458,7 @@ MH60: PersistentTargeting: false AttackType: Hover Aircraft: - TurnSpeed: 4 + TurnSpeed: 16 Speed: 112 AutoTarget: InitialStance: HoldFire diff --git a/mods/ra/rules/defaults.yaml b/mods/ra/rules/defaults.yaml index 9d31e30f70..5304583d58 100644 --- a/mods/ra/rules/defaults.yaml +++ b/mods/ra/rules/defaults.yaml @@ -241,7 +241,7 @@ Mobile: PauseOnCondition: being-captured Locomotor: wheeled - TurnSpeed: 5 + TurnSpeed: 20 Selectable: Bounds: 24, 24 Targetable: @@ -609,7 +609,7 @@ VTOL: true LandableTerrainTypes: Clear, Rough, Road, Ore, Beach, Gems Crushes: crate, mine, infantry - InitialFacing: 224 + InitialFacing: 896 CanSlide: True GpsDot: String: Helicopter diff --git a/mods/ra/rules/husks.yaml b/mods/ra/rules/husks.yaml index 5bcb84a51e..92dea7c6a4 100644 --- a/mods/ra/rules/husks.yaml +++ b/mods/ra/rules/husks.yaml @@ -102,7 +102,7 @@ TRAN.Husk: Tooltip: Name: Chinook Aircraft: - TurnSpeed: 4 + TurnSpeed: 16 Speed: 149 WithIdleOverlay@PRIMARY: Offset: -597,0,341 @@ -146,7 +146,7 @@ BADR.Husk: Tooltip: Name: Badger Aircraft: - TurnSpeed: 5 + TurnSpeed: 20 Speed: 149 SmokeTrailWhenDamaged@0: Offset: -432,560,0 @@ -169,7 +169,7 @@ MIG.Husk: Contrail@2: Offset: -598,683,0 Aircraft: - TurnSpeed: 5 + TurnSpeed: 20 Speed: 186 SmokeTrailWhenDamaged: Offset: -853,0,171 @@ -193,7 +193,7 @@ YAK.Husk: Contrail: Offset: -853,0,0 Aircraft: - TurnSpeed: 5 + TurnSpeed: 20 Speed: 149 SmokeTrailWhenDamaged: Offset: -853,0,0 @@ -215,7 +215,7 @@ HELI.Husk: Tooltip: Name: Longbow Aircraft: - TurnSpeed: 4 + TurnSpeed: 16 Speed: 149 WithIdleOverlay: Offset: 0,0,85 @@ -239,7 +239,7 @@ HIND.Husk: Tooltip: Name: Hind Aircraft: - TurnSpeed: 4 + TurnSpeed: 16 Speed: 112 WithIdleOverlay: Sequence: rotor @@ -262,7 +262,7 @@ U2.Husk: Tooltip: Name: Husk (Spy Plane) Aircraft: - TurnSpeed: 7 + TurnSpeed: 28 Speed: 373 Contrail@1: Offset: -725,683,0 @@ -451,7 +451,7 @@ MH60.Husk: Tooltip: Name: Black Hawk Aircraft: - TurnSpeed: 4 + TurnSpeed: 16 Speed: 112 WithIdleOverlay: Sequence: rotor diff --git a/mods/ra/rules/infantry.yaml b/mods/ra/rules/infantry.yaml index 9229cd2563..c1d9224bc7 100644 --- a/mods/ra/rules/infantry.yaml +++ b/mods/ra/rules/infantry.yaml @@ -752,7 +752,7 @@ Ant: HP: 75000 Mobile: Speed: 99 - TurnSpeed: 12 + TurnSpeed: 48 Locomotor: lighttracked -Crushable: AutoTarget: diff --git a/mods/ra/rules/ships.yaml b/mods/ra/rules/ships.yaml index 15cfda4b6a..f9670f5df9 100644 --- a/mods/ra/rules/ships.yaml +++ b/mods/ra/rules/ships.yaml @@ -18,7 +18,7 @@ SS: Armor: Type: Light Mobile: - TurnSpeed: 4 + TurnSpeed: 16 Speed: 71 RevealsShroud: MinRange: 5c0 @@ -84,7 +84,7 @@ MSUB: Armor: Type: Light Mobile: - TurnSpeed: 3 + TurnSpeed: 12 Speed: 42 RevealsShroud: MinRange: 5c0 @@ -155,7 +155,7 @@ DD: Armor: Type: Heavy Mobile: - TurnSpeed: 7 + TurnSpeed: 28 Speed: 85 RevealsShroud: MinRange: 5c0 @@ -164,7 +164,7 @@ DD: RevealsShroud@GAPGEN: Range: 5c0 Turreted: - TurnSpeed: 7 + TurnSpeed: 28 Offset: 469,0,128 Armament@PRIMARY: Weapon: Stinger @@ -207,7 +207,7 @@ CA: Armor: Type: Heavy Mobile: - TurnSpeed: 3 + TurnSpeed: 12 Speed: 42 RevealsShroud: MinRange: 5c0 @@ -218,11 +218,11 @@ CA: Turreted@PRIMARY: Turret: primary Offset: -896,0,128 - TurnSpeed: 3 + TurnSpeed: 12 Turreted@SECONDARY: Turret: secondary Offset: 768,0,128 - TurnSpeed: 3 + TurnSpeed: 12 Armament@PRIMARY: Turret: primary Weapon: 8Inch @@ -309,7 +309,7 @@ PT: Armor: Type: Heavy Mobile: - TurnSpeed: 7 + TurnSpeed: 28 Speed: 128 RevealsShroud: MinRange: 5c0 @@ -318,7 +318,7 @@ PT: RevealsShroud@GAPGEN: Range: 5c0 Turreted: - TurnSpeed: 7 + TurnSpeed: 28 Offset: 512,0,0 Armament@PRIMARY: Weapon: 2Inch diff --git a/mods/ra/rules/structures.yaml b/mods/ra/rules/structures.yaml index 27d0deddd1..68cb19641e 100644 --- a/mods/ra/rules/structures.yaml +++ b/mods/ra/rules/structures.yaml @@ -154,49 +154,49 @@ SPEN: Exit@1: RequiresCondition: !being-captured SpawnOffset: 0,-213,0 - Facing: 96 + Facing: 384 ExitCell: -1,2 ProductionTypes: Submarine Exit@2: RequiresCondition: !being-captured SpawnOffset: 0,-213,0 - Facing: 160 + Facing: 640 ExitCell: 3,2 ProductionTypes: Submarine Exit@3: RequiresCondition: !being-captured SpawnOffset: 0,0,0 - Facing: 32 + Facing: 128 ExitCell: 0,0 ProductionTypes: Submarine Exit@4: RequiresCondition: !being-captured SpawnOffset: 0,0,0 - Facing: 224 + Facing: 896 ExitCell: 2,0 ProductionTypes: Submarine Exit@b1: RequiresCondition: !being-captured SpawnOffset: -1024,1024,0 - Facing: 160 + Facing: 640 ExitCell: 0,2 ProductionTypes: Ship Exit@b2: RequiresCondition: !being-captured SpawnOffset: 1024,1024,0 - Facing: 224 + Facing: 896 ExitCell: 2,2 ProductionTypes: Ship Exit@b3: RequiresCondition: !being-captured SpawnOffset: -1024,-1024,0 - Facing: 96 + Facing: 384 ExitCell: 0,0 ProductionTypes: Ship Exit@b4: RequiresCondition: !being-captured SpawnOffset: 1024,-1024,0 - Facing: 32 + Facing: 128 ExitCell: 2,0 ProductionTypes: Ship Production: @@ -292,25 +292,25 @@ SYRD: Exit@1: RequiresCondition: !being-captured SpawnOffset: -1024,1024,0 - Facing: 160 + Facing: 640 ExitCell: 0,2 ProductionTypes: Ship, Boat Exit@2: RequiresCondition: !being-captured SpawnOffset: 1024,1024,0 - Facing: 224 + Facing: 896 ExitCell: 2,2 ProductionTypes: Ship, Boat Exit@3: RequiresCondition: !being-captured SpawnOffset: -1024,-1024,0 - Facing: 96 + Facing: 384 ExitCell: 0,0 ProductionTypes: Ship, Boat Exit@4: RequiresCondition: !being-captured SpawnOffset: 1024,-1024,0 - Facing: 32 + Facing: 128 ExitCell: 2,0 ProductionTypes: Ship, Boat Production: @@ -601,8 +601,8 @@ AGUN: WithBuildingBib: HasMinibib: true Turreted: - TurnSpeed: 15 - InitialFacing: 224 + TurnSpeed: 60 + InitialFacing: 896 -WithSpriteBody: WithEmbeddedTurretSpriteBody: Armament: @@ -699,7 +699,7 @@ PBOX: WithBuildingBib: HasMinibib: true Turreted: - TurnSpeed: 255 + TurnSpeed: 512 -QuantizeFacingsFromSequence: BodyOrientation: QuantizedFacings: 8 @@ -761,7 +761,7 @@ HBOX: Condition: cloak-force-disabled ValidDamageStates: Critical Turreted: - TurnSpeed: 255 + TurnSpeed: 512 -QuantizeFacingsFromSequence: BodyOrientation: QuantizedFacings: 8 @@ -815,8 +815,8 @@ GUN: WithBuildingBib: HasMinibib: true Turreted: - TurnSpeed: 12 - InitialFacing: 56 + TurnSpeed: 48 + InitialFacing: 224 -WithSpriteBody: WithEmbeddedTurretSpriteBody: Armament: @@ -859,7 +859,7 @@ FTUR: WithBuildingBib: HasMinibib: true Turreted: - TurnSpeed: 255 + TurnSpeed: 512 Offset: 0,0,112 Armament: Weapon: FireballLauncher @@ -914,7 +914,7 @@ SAM: WithBuildingBib: HasMinibib: true Turreted: - TurnSpeed: 30 + TurnSpeed: 120 InitialFacing: 0 -WithSpriteBody: WithEmbeddedTurretSpriteBody: @@ -1158,7 +1158,7 @@ FACT: PauseOnCondition: chrono-vortex || being-captured || being-demolished || build-incomplete IntoActor: mcv Offset: 1,1 - Facing: 96 + Facing: 384 TransformsIntoMobile: RequiresCondition: factundeploy Locomotor: heavywheeled @@ -1238,7 +1238,7 @@ PROC: RevealsShroud@GAPGEN: Range: 4c0 Refinery: - DockAngle: 64 + DockAngle: 256 DockOffset: 1,2 StoresResources: Capacity: 2000 @@ -1247,7 +1247,7 @@ PROC: FreeActor: Actor: HARV SpawnOffset: 1,2 - Facing: 64 + Facing: 256 InfiltrateForCash: Percentage: 50 Types: SpyInfiltrate, ThiefInfiltrate @@ -1373,7 +1373,7 @@ HPAD: RequiresCondition: !being-captured SpawnOffset: 0,-256,0 ExitCell: 0,0 - Facing: 224 + Facing: 896 RallyPoint: Production: Produces: Aircraft, Helicopter @@ -1454,7 +1454,7 @@ AFLD: Exit@1: RequiresCondition: !being-captured ExitCell: 1,1 - Facing: 192 + Facing: 768 RallyPoint: Production: Produces: Aircraft, Plane diff --git a/mods/ra/rules/vehicles.yaml b/mods/ra/rules/vehicles.yaml index 95209e8dd8..e71ec662f9 100644 --- a/mods/ra/rules/vehicles.yaml +++ b/mods/ra/rules/vehicles.yaml @@ -76,7 +76,7 @@ V2RL: RevealsShroud@GAPGEN: Range: 4c0 Turreted: - TurnSpeed: 7 + TurnSpeed: 28 Armament: Weapon: 25mm Recoil: 85 @@ -120,7 +120,7 @@ V2RL: RevealsShroud@GAPGEN: Range: 4c0 Turreted: - TurnSpeed: 5 + TurnSpeed: 20 Armament: Weapon: 90mm Recoil: 128 @@ -166,7 +166,7 @@ V2RL: RevealsShroud@GAPGEN: Range: 4c0 Turreted: - TurnSpeed: 5 + TurnSpeed: 20 Armament: Weapon: 105mm Recoil: 128 @@ -213,7 +213,7 @@ V2RL: RevealsShroud@GAPGEN: Range: 4c0 Turreted: - TurnSpeed: 2 + TurnSpeed: 8 Armament@PRIMARY: Weapon: 120mm LocalOffset: 900,180,340, 900,-180,340 @@ -262,7 +262,7 @@ ARTY: Armor: Type: Light Mobile: - TurnSpeed: 2 + TurnSpeed: 8 Speed: 85 Locomotor: lighttracked RevealsShroud: @@ -374,7 +374,7 @@ MCV: Transforms: IntoActor: fact Offset: -1,-1 - Facing: 96 + Facing: 384 TransformSounds: placbldg.aud, build5.aud NoTransformNotification: BuildingCannotPlaceAudio MustBeDestroyed: @@ -406,7 +406,7 @@ JEEP: Armor: Type: Light Mobile: - TurnSpeed: 10 + TurnSpeed: 40 Speed: 170 PauseOnCondition: notmobile || being-captured RevealsShroud: @@ -416,7 +416,7 @@ JEEP: RevealsShroud@GAPGEN: Range: 4c0 Turreted: - TurnSpeed: 10 + TurnSpeed: 40 Offset: 0,0,128 Armament: Weapon: M60mg @@ -681,7 +681,7 @@ FTRK: Armor: Type: Light Mobile: - TurnSpeed: 10 + TurnSpeed: 40 Speed: 118 RevealsShroud: MinRange: 4c0 @@ -690,7 +690,7 @@ FTRK: RevealsShroud@GAPGEN: Range: 4c0 Turreted: - TurnSpeed: 10 + TurnSpeed: 40 Offset: -298,0,298 Armament@AA: Weapon: FLAK-23-AA @@ -871,7 +871,7 @@ STNK: Weapon: APTusk.stnk LocalOffset: 192,0,176 Turreted: - TurnSpeed: 5 + TurnSpeed: 20 AttackTurreted: WithSpriteTurret: Cargo: diff --git a/mods/ra/weapons/missiles.yaml b/mods/ra/weapons/missiles.yaml index 155de1cdda..9463b3b939 100644 --- a/mods/ra/weapons/missiles.yaml +++ b/mods/ra/weapons/missiles.yaml @@ -12,7 +12,7 @@ Inaccuracy: 128 Image: DRAGON Shadow: True - HorizontalRateOfTurn: 5 + HorizontalRateOfTurn: 20 RangeLimit: 6c0 Warhead@1Dam: SpreadDamage Spread: 128 @@ -79,7 +79,7 @@ HellfireAG: BurstDelays: 7 Projectile: Missile Speed: 256 - HorizontalRateOfTurn: 10 + HorizontalRateOfTurn: 40 RangeLimit: 8c512 Warhead@1Dam: SpreadDamage Damage: 6000 @@ -99,7 +99,7 @@ HellfireAA: Projectile: Missile Speed: 492 Inaccuracy: 128 - HorizontalRateOfTurn: 25 + HorizontalRateOfTurn: 100 RangeLimit: 7c0 CloseEnough: 0c600 Warhead@1Dam: SpreadDamage @@ -119,7 +119,7 @@ MammothTusk: ValidTargets: AirborneActor, Infantry Projectile: Missile Speed: 341 - HorizontalRateOfTurn: 15 + HorizontalRateOfTurn: 60 RangeLimit: 9c614 Warhead@1Dam: SpreadDamage Spread: 256 @@ -147,7 +147,7 @@ Nike: Arm: 3 Inaccuracy: 0 Image: MISSILE - HorizontalRateOfTurn: 25 + HorizontalRateOfTurn: 100 RangeLimit: 9c0 Speed: 341 Warhead@1Dam: SpreadDamage @@ -164,7 +164,7 @@ RedEye: ReloadDelay: 50 Projectile: Missile Inaccuracy: 0 - HorizontalRateOfTurn: 20 + HorizontalRateOfTurn: 80 Speed: 298 Warhead@1Dam: SpreadDamage Damage: 4000 @@ -182,7 +182,7 @@ Stinger: Projectile: Missile Arm: 3 Inaccuracy: 0 - HorizontalRateOfTurn: 20 + HorizontalRateOfTurn: 80 RangeLimit: 9c512 Speed: 170 CloseEnough: 149 @@ -212,7 +212,7 @@ APTusk: Projectile: Missile Speed: 298 TrailImage: smokey - HorizontalRateOfTurn: 10 + HorizontalRateOfTurn: 40 RangeLimit: 7c204 APTusk.stnk: @@ -231,7 +231,7 @@ TorpTube: Arm: 3 Speed: 85 TrailImage: bubbles - HorizontalRateOfTurn: 1 + HorizontalRateOfTurn: 4 RangeLimit: 10c819 BoundToTerrainType: Water Palette: shadow @@ -265,7 +265,7 @@ TorpTube: Projectile: Missile Speed: 234 Inaccuracy: 0c614 - HorizontalRateOfTurn: 15 + HorizontalRateOfTurn: 60 RangeLimit: 9c0 Image: MISSILE TrailImage: smokey diff --git a/mods/ts/rules/aircraft.yaml b/mods/ts/rules/aircraft.yaml index 11fb864b80..f84c04ae41 100644 --- a/mods/ts/rules/aircraft.yaml +++ b/mods/ts/rules/aircraft.yaml @@ -10,7 +10,7 @@ DPOD: IdleBehavior: Land Pitch: 0 Roll: 0 - TurnSpeed: 5 + TurnSpeed: 20 Speed: 149 InitialFacing: 0 Health: @@ -48,7 +48,7 @@ DPOD2: Armor: Type: Light Aircraft: - TurnSpeed: 5 + TurnSpeed: 20 Speed: 300 CruiseAltitude: 16c0 MaximumPitch: 110 @@ -96,7 +96,7 @@ DSHP: IdleBehavior: Land Pitch: 0 Roll: 0 - TurnSpeed: 5 + TurnSpeed: 20 Speed: 168 InitialFacing: 0 TakeoffSounds: dropup1.aud @@ -138,7 +138,7 @@ ORCA: Selectable: Bounds: 30,24 Aircraft: - TurnSpeed: 5 + TurnSpeed: 20 Speed: 186 TakeoffSounds: orcaup1.aud LandingSounds: orcadwn1.aud @@ -200,7 +200,7 @@ ORCAB: Bounds: 30,24 Aircraft: CruiseAltitude: 5c512 - TurnSpeed: 3 + TurnSpeed: 12 Speed: 96 CruisingCondition: cruising TakeoffSounds: orcaup1.aud @@ -262,7 +262,7 @@ ORCATRAN: Prerequisites: ~disabled RenderSprites: Aircraft: - TurnSpeed: 5 + TurnSpeed: 20 Speed: 84 InitialFacing: 0 LandableTerrainTypes: Clear, Road, Rail, DirtRoad, Rough, Tiberium, BlueTiberium, Veins @@ -304,7 +304,7 @@ TRNSPORT: Prerequisites: ~gahpad, gadept Description: VTOL aircraft capable of lifting\nand transporting vehicles.\n Unarmed Aircraft: - TurnSpeed: 5 + TurnSpeed: 20 Speed: 149 InitialFacing: 0 Pitch: 0 @@ -354,7 +354,7 @@ SCRIN: VoiceSet: Scrin Aircraft: CruiseAltitude: 5c0 - TurnSpeed: 3 + TurnSpeed: 12 Speed: 168 TakeoffSounds: dropup1.aud LandingSounds: dropdwn1.aud @@ -420,7 +420,7 @@ APACHE: PitchSpeed: 8 Roll: 16 RollSpeed: 8 - TurnSpeed: 5 + TurnSpeed: 20 Speed: 130 CanSlide: false TakeOffOnResupply: true @@ -480,7 +480,7 @@ HUNTER: Armor: Type: Light Aircraft: - TurnSpeed: 16 + TurnSpeed: 64 Speed: 355 Pitch: 0 Roll: 0 diff --git a/mods/ts/rules/civilian-structures.yaml b/mods/ts/rules/civilian-structures.yaml index 681c8553e2..c8d5b9f628 100644 --- a/mods/ts/rules/civilian-structures.yaml +++ b/mods/ts/rules/civilian-structures.yaml @@ -1690,7 +1690,7 @@ GAICBM: Transforms: IntoActor: icbm Offset: 1,1 - Facing: 96 + Facing: 384 TransformSounds: place2.aud NoTransformSounds: -WithDeathAnimation: diff --git a/mods/ts/rules/civilian-vehicles.yaml b/mods/ts/rules/civilian-vehicles.yaml index c52acff92d..55ea2b58e2 100644 --- a/mods/ts/rules/civilian-vehicles.yaml +++ b/mods/ts/rules/civilian-vehicles.yaml @@ -9,7 +9,7 @@ Name: Mammoth Tank Mobile: Speed: 56 - TurnSpeed: 5 + TurnSpeed: 20 Health: HP: 60000 Armor: @@ -19,7 +19,7 @@ MaxHeightDelta: 3 RequiresCondition: !inside-tunnel Turreted: - TurnSpeed: 3 + TurnSpeed: 12 Armament@PRIMARY: Weapon: 120mmx LocalOffset: 707,85,509, 707,-120,509 @@ -77,7 +77,7 @@ ICBM: Type: Light Mobile: Speed: 85 - TurnSpeed: 5 + TurnSpeed: 20 RevealsShroud: RequiresCondition: !inside-tunnel Range: 7c0 @@ -85,7 +85,7 @@ ICBM: Transforms: IntoActor: gaicbm Offset: -1,-1 - Facing: 96 + Facing: 384 TransformSounds: NoTransformSounds: Voice: Move @@ -98,7 +98,7 @@ BUS: Tooltip: Name: School Bus Mobile: - TurnSpeed: 5 + TurnSpeed: 20 Speed: 113 PauseOnCondition: empdisable || loading || being-captured || carried Health: @@ -124,7 +124,7 @@ PICK: Tooltip: Name: Pickup Mobile: - TurnSpeed: 5 + TurnSpeed: 20 Speed: 113 PauseOnCondition: empdisable || loading || being-captured || carried Health: @@ -150,7 +150,7 @@ CAR: Tooltip: Name: Automobile Mobile: - TurnSpeed: 5 + TurnSpeed: 20 Speed: 113 PauseOnCondition: empdisable || loading || being-captured || carried Health: @@ -176,7 +176,7 @@ WINI: Tooltip: Name: Recreational Vehicle Mobile: - TurnSpeed: 5 + TurnSpeed: 20 Speed: 113 PauseOnCondition: empdisable || loading || being-captured || carried Health: diff --git a/mods/ts/rules/defaults.yaml b/mods/ts/rules/defaults.yaml index 7d71119043..2f4b5f9d78 100644 --- a/mods/ts/rules/defaults.yaml +++ b/mods/ts/rules/defaults.yaml @@ -760,7 +760,7 @@ Mobile: PauseOnCondition: empdisable || being-captured || carried Locomotor: wheeled - TurnSpeed: 5 + TurnSpeed: 20 Voice: Move Selectable: Bounds: 40,24 @@ -875,7 +875,7 @@ RepairActors: gadept Voice: Move Aircraft: - InitialFacing: 224 + InitialFacing: 896 AirborneCondition: airborne CruisingCondition: cruising CruiseAltitude: 4c704 @@ -951,7 +951,7 @@ FallsToEarth: Moves: true Velocity: 112 - MaximumSpinSpeed: 10 + MaximumSpinSpeed: 40 HitShape: ^Visceroid: @@ -965,7 +965,7 @@ Type: Light Mobile: Speed: 113 - TurnSpeed: 16 + TurnSpeed: 64 Locomotor: visceroid Selectable: Bounds: 26,26,0,-3 @@ -1114,7 +1114,7 @@ RenderSprites: WithVoxelBody: Mobile: - TurnSpeed: 5 + TurnSpeed: 20 Voice: Move Speed: 113 PauseOnCondition: empdisable diff --git a/mods/ts/rules/gdi-support.yaml b/mods/ts/rules/gdi-support.yaml index 3131c5c679..36ebaeaa55 100644 --- a/mods/ts/rules/gdi-support.yaml +++ b/mods/ts/rules/gdi-support.yaml @@ -73,8 +73,8 @@ GACTWR: DetectCloaked: RequiresCondition: !empdisable && !disabled && (tower.vulcan || tower.rocket || tower.sam) Turreted: - TurnSpeed: 10 - InitialFacing: 224 + TurnSpeed: 40 + InitialFacing: 896 AttackTurreted: RequiresCondition: !build-incomplete && (tower.vulcan || tower.rocket || tower.sam) PauseOnCondition: empdisable || disabled diff --git a/mods/ts/rules/gdi-vehicles.yaml b/mods/ts/rules/gdi-vehicles.yaml index 595ea96d31..cbc3655ef9 100644 --- a/mods/ts/rules/gdi-vehicles.yaml +++ b/mods/ts/rules/gdi-vehicles.yaml @@ -14,7 +14,7 @@ APC: Prerequisites: ~gaweap, gapile, ~techlevel.medium Description: Armored infantry transport.\nCan move on water.\n Unarmed Mobile: - TurnSpeed: 5 + TurnSpeed: 20 Speed: 113 PauseOnCondition: empdisable || loading || being-captured || carried Locomotor: amphibious @@ -81,7 +81,7 @@ HVR: Weapon: HoverMissile LocalOffset: 0,242,543, 0,-242,543 Turreted: - TurnSpeed: 7 + TurnSpeed: 28 Offset: -128,0,85 AttackTurreted: Voice: Attack @@ -120,7 +120,7 @@ SMECH: Prerequisites: ~gaweap, ~techlevel.low Description: Anti-personnel walker.\n Strong vs Infantry, Light armor\n Weak vs Vehicles, Aircraft Mobile: - TurnSpeed: 5 + TurnSpeed: 20 Speed: 99 AlwaysTurnInPlace: true Health: @@ -168,7 +168,7 @@ MMCH: Prerequisites: ~gaweap, ~techlevel.medium Description: General purpose mechanized walker.\n Strong vs Vehicles\n Weak vs Infantry, Aircraft Mobile: - TurnSpeed: 5 + TurnSpeed: 20 Speed: 56 AlwaysTurnInPlace: true Health: @@ -188,7 +188,7 @@ MMCH: MoveSequence: walk ValidMovementTypes: Horizontal, Turn Turreted: - TurnSpeed: 5 + TurnSpeed: 20 AttackTurreted: Voice: Attack PauseOnCondition: empdisable @@ -232,7 +232,7 @@ HMEC: BuildLimit: 1 Description: Slow heavy walker.\nArmed with dual railguns and rocket launchers.\n Strong vs Infantry, Vehicles, Aircraft and Buildings\n Weak vs Nothing\nMaximum 1 can be built. Mobile: - TurnSpeed: 3 + TurnSpeed: 12 Speed: 42 Health: HP: 80000 @@ -280,7 +280,7 @@ SONIC: Targetable: TargetTypes: Ground, Vehicle, Disruptor Mobile: - TurnSpeed: 4 + TurnSpeed: 16 Speed: 56 Health: HP: 50000 @@ -298,7 +298,7 @@ SONIC: PauseOnCondition: empdisable OpportunityFire: False Turreted: - TurnSpeed: 5 + TurnSpeed: 20 Offset: -170,0,0 WithVoxelTurret: Explodes: @@ -333,7 +333,7 @@ JUGG: Type: Light Mobile: Speed: 71 - TurnSpeed: 5 + TurnSpeed: 20 AlwaysTurnInPlace: true ImmovableCondition: !undeployed RequireForceMoveCondition: !undeployed @@ -359,7 +359,7 @@ JUGG: UndeployedCondition: undeployed UndeployOnMove: true UndeployOnPickup: true - Facing: 96 + Facing: 384 AllowedTerrainTypes: Clear, Road, DirtRoad, Rough DeploySounds: place2.aud UndeploySounds: clicky1.aud @@ -379,8 +379,8 @@ JUGG: Name: deployedbody Turreted: Turret: deployed - TurnSpeed: 5 - InitialFacing: 96 + TurnSpeed: 20 + InitialFacing: 384 Offset: -153,-17,633 RealignDelay: -1 WithVoxelBarrel: diff --git a/mods/ts/rules/husks.yaml b/mods/ts/rules/husks.yaml index 8a2a1c8ccc..04bb798471 100644 --- a/mods/ts/rules/husks.yaml +++ b/mods/ts/rules/husks.yaml @@ -3,7 +3,7 @@ DSHP.Husk: Tooltip: Name: Dropship Aircraft: - TurnSpeed: 5 + TurnSpeed: 20 Speed: 168 -RenderSprites: RenderVoxels: @@ -14,7 +14,7 @@ ORCA.Husk: Tooltip: Name: Orca Fighter Aircraft: - TurnSpeed: 5 + TurnSpeed: 20 Speed: 186 RenderSprites: Image: orca @@ -30,10 +30,10 @@ ORCAB.Husk: Tooltip: Name: Orca Bomber Aircraft: - TurnSpeed: 3 + TurnSpeed: 12 Speed: 96 FallsToEarth: - MaximumSpinSpeed: 6 + MaximumSpinSpeed: 24 RenderSprites: Image: orcab RenderVoxels: @@ -48,7 +48,7 @@ ORCATRAN.Husk: Tooltip: Name: Orca Transport Aircraft: - TurnSpeed: 5 + TurnSpeed: 20 Speed: 84 RenderSprites: Image: orcatran @@ -64,7 +64,7 @@ TRNSPORT.Husk: Tooltip: Name: Carryall Aircraft: - TurnSpeed: 5 + TurnSpeed: 20 Speed: 149 RenderSprites: Image: trnsport @@ -80,10 +80,10 @@ SCRIN.Husk: Tooltip: Name: Banshee Fighter Aircraft: - TurnSpeed: 3 + TurnSpeed: 12 Speed: 168 FallsToEarth: - MaximumSpinSpeed: 6 + MaximumSpinSpeed: 24 RenderSprites: Image: scrin RenderVoxels: @@ -98,7 +98,7 @@ APACHE.Husk: Tooltip: Name: Harpy Aircraft: - TurnSpeed: 5 + TurnSpeed: 20 Speed: 130 WithIdleOverlay: Offset: 85,0,598 diff --git a/mods/ts/rules/misc.yaml b/mods/ts/rules/misc.yaml index def3b267f3..26cbd2a637 100644 --- a/mods/ts/rules/misc.yaml +++ b/mods/ts/rules/misc.yaml @@ -31,9 +31,9 @@ waypoint: mmch.colorpicker: Inherits: MMCH Mobile: - InitialFacing: 160 + InitialFacing: 640 Turreted: - InitialFacing: 160 + InitialFacing: 640 WithFacingSpriteBody: Sequence: walk -Buildable: diff --git a/mods/ts/rules/nod-structures.yaml b/mods/ts/rules/nod-structures.yaml index bb551094eb..dc37be9bc6 100644 --- a/mods/ts/rules/nod-structures.yaml +++ b/mods/ts/rules/nod-structures.yaml @@ -522,7 +522,7 @@ NAWAST: Range: 6c0 MaxHeightDelta: 3 TiberianSunRefinery: - DockAngle: 160 + DockAngle: 640 DockOffset: 2,1 StoresResources: Capacity: 56 @@ -531,7 +531,7 @@ NAWAST: FreeActor: Actor: WEED SpawnOffset: 3,1 - Facing: 160 + Facing: 640 WithIdleOverlay@GLOW: RequiresCondition: !build-incomplete Sequence: idle-glow diff --git a/mods/ts/rules/nod-support.yaml b/mods/ts/rules/nod-support.yaml index 7d1b3192ed..6a501610ba 100644 --- a/mods/ts/rules/nod-support.yaml +++ b/mods/ts/rules/nod-support.yaml @@ -163,8 +163,8 @@ NALASR: DetectCloaked: Range: 3c0 Turreted: - TurnSpeed: 10 - InitialFacing: 224 + TurnSpeed: 40 + InitialFacing: 896 Offset: 298,-171,288 AttackTurreted: RequiresCondition: !build-incomplete @@ -247,8 +247,8 @@ NASAM: RenderRangeCircle: RangeCircleType: aa Turreted: - TurnSpeed: 10 - InitialFacing: 224 + TurnSpeed: 40 + InitialFacing: 896 AttackTurreted: RequiresCondition: !build-incomplete PauseOnCondition: empdisable || disabled diff --git a/mods/ts/rules/nod-vehicles.yaml b/mods/ts/rules/nod-vehicles.yaml index ed13b8e4bc..3a13fc1ed7 100644 --- a/mods/ts/rules/nod-vehicles.yaml +++ b/mods/ts/rules/nod-vehicles.yaml @@ -15,7 +15,7 @@ BGGY: Prerequisites: ~naweap, ~techlevel.low Description: Fast scout and anti-infantry vehicle.\n Strong vs Infantry, Light armor\n Weak vs Vehicles, Aircraft Mobile: - TurnSpeed: 8 + TurnSpeed: 32 Speed: 142 Health: HP: 22000 @@ -55,7 +55,7 @@ BIKE: Prerequisites: ~naweap, ~techlevel.low Description: Fast scout vehicle, armed with\nrockets.\n Strong vs Vehicles\n Weak vs Infantry, Aircraft Mobile: - TurnSpeed: 8 + TurnSpeed: 32 Speed: 170 Health: HP: 15000 @@ -102,7 +102,7 @@ TTNK: Prerequisites: ~naweap, ~techlevel.medium Description: Nod's main battle tank.\nCan deploy to gain extra protection.\n Strong vs Vehicles\n Weak vs Infantry, Aircraft Mobile: - TurnSpeed: 5 + TurnSpeed: 20 Speed: 85 ImmovableCondition: !undeployed RequireForceMoveCondition: !undeployed @@ -137,7 +137,7 @@ TTNK: UndeployedCondition: undeployed UndeployOnMove: true UndeployOnPickup: true - Facing: 160 + Facing: 640 AllowedTerrainTypes: Clear, Road, DirtRoad, Rough DeploySounds: place2.aud UndeploySounds: clicky1.aud @@ -159,9 +159,9 @@ TTNK: RequiresCondition: undeployed PauseOnCondition: empdisable Turreted: - TurnSpeed: 6 + TurnSpeed: 24 Turret: deployed - InitialFacing: 160 + InitialFacing: 640 Offset: -20, -130, 128 RealignDelay: -1 WithVoxelBarrel: @@ -232,7 +232,7 @@ ART2: Type: Light Mobile: Speed: 71 - TurnSpeed: 2 + TurnSpeed: 8 ImmovableCondition: !undeployed RequireForceMoveCondition: !undeployed RevealsShroud: @@ -250,7 +250,7 @@ ART2: UndeployedCondition: undeployed UndeployOnMove: true UndeployOnPickup: true - Facing: 96 + Facing: 384 AllowedTerrainTypes: Clear, Road, DirtRoad, Rough DeploySounds: place2.aud UndeploySounds: clicky1.aud @@ -269,8 +269,8 @@ ART2: RequiresCondition: !undeployed && real-actor Turreted: Turret: deployed - TurnSpeed: 5 - InitialFacing: 96 + TurnSpeed: 20 + InitialFacing: 384 Offset: 0,0,256 RealignDelay: -1 WithVoxelBarrel: @@ -320,7 +320,7 @@ REPAIR: HP: 20000 Mobile: Speed: 85 - TurnSpeed: 5 + TurnSpeed: 20 RevealsShroud: RequiresCondition: !inside-tunnel Range: 5c0 @@ -365,7 +365,7 @@ WEED: DeliverVoice: Move Mobile: Speed: 71 - TurnSpeed: 5 + TurnSpeed: 20 Health: HP: 60000 SelfHealing: @@ -407,7 +407,7 @@ SAPC: Prerequisites: ~naweap, natech, ~techlevel.medium Description: Troop transport that can move\nunderground to avoid detection.\n Unarmed Mobile: - TurnSpeed: 5 + TurnSpeed: 20 Speed: 71 PauseOnCondition: empdisable || loading || being-captured || carried Locomotor: subterranean @@ -459,7 +459,7 @@ SUBTANK: Prerequisites: ~naweap, natech, ~techlevel.high Description: Subterranean Flame Tank.\nIs able to move underground.\n Strong vs Infantry, Buildings\n Weak vs Tanks, Aircraft Mobile: - TurnSpeed: 6 + TurnSpeed: 24 Speed: 71 Locomotor: subterranean Health: @@ -509,7 +509,7 @@ STNK: Queue: Vehicle Description: Lightly armoured tank equipped with a personal\nstealth generator. Armed with missiles.\nCan be spotted by infantry at close range.\n Strong vs Vehicles, Aircraft\n Weak vs Infantry Mobile: - TurnSpeed: 5 + TurnSpeed: 20 Speed: 85 Health: HP: 18000 diff --git a/mods/ts/rules/shared-structures.yaml b/mods/ts/rules/shared-structures.yaml index 55c085ff04..e81fe452a2 100644 --- a/mods/ts/rules/shared-structures.yaml +++ b/mods/ts/rules/shared-structures.yaml @@ -32,7 +32,7 @@ GACNST: PauseOnCondition: empdisable || being-demolished || build-incomplete IntoActor: mcv Offset: 1,1 - Facing: 96 + Facing: 384 DeployCursor: undeploy TransformsIntoMobile: RequiresCondition: factundeploy @@ -105,7 +105,7 @@ PROC: Range: 6c0 MaxHeightDelta: 3 TiberianSunRefinery: - DockAngle: 160 + DockAngle: 640 DockOffset: 2,1 DiscardExcessResources: true StoresResources: @@ -115,7 +115,7 @@ PROC: FreeActor: Actor: HARV SpawnOffset: 2,1 - Facing: 160 + Facing: 640 WithIdleOverlay@REDLIGHTS: RequiresCondition: !build-incomplete Sequence: idle-redlights diff --git a/mods/ts/rules/shared-support.yaml b/mods/ts/rules/shared-support.yaml index b841203425..0e883a81bf 100644 --- a/mods/ts/rules/shared-support.yaml +++ b/mods/ts/rules/shared-support.yaml @@ -21,8 +21,8 @@ NAPULS: RevealsShroud: Range: 8c0 Turreted: - TurnSpeed: 10 - InitialFacing: 224 + TurnSpeed: 40 + InitialFacing: 896 AttackTurreted: RequiresCondition: !build-incomplete && !empdisable && !disabled Armament: diff --git a/mods/ts/rules/shared-vehicles.yaml b/mods/ts/rules/shared-vehicles.yaml index d6cd4c5b45..66761b0373 100644 --- a/mods/ts/rules/shared-vehicles.yaml +++ b/mods/ts/rules/shared-vehicles.yaml @@ -30,7 +30,7 @@ MCV: PauseOnCondition: empdisable || being-captured IntoActor: gacnst Offset: -1,-1 - Facing: 96 + Facing: 384 TransformSounds: place2.aud NoTransformSounds: Voice: Move @@ -134,7 +134,7 @@ LPST: Type: Wood Mobile: Speed: 85 - TurnSpeed: 5 + TurnSpeed: 20 ImmovableCondition: !undeployed RequireForceMoveCondition: !undeployed RevealsShroud: @@ -159,7 +159,7 @@ LPST: UndeployedCondition: undeployed UndeployOnMove: true UndeployOnPickup: true - Facing: 160 + Facing: 640 AllowedTerrainTypes: Clear, Road, DirtRoad, Rough DeploySounds: place2.aud UndeploySounds: clicky1.aud diff --git a/mods/ts/weapons/energyweapons.yaml b/mods/ts/weapons/energyweapons.yaml index 1a3b752d76..7f781754d2 100644 --- a/mods/ts/weapons/energyweapons.yaml +++ b/mods/ts/weapons/energyweapons.yaml @@ -117,7 +117,7 @@ CyCannon: Projectile: Missile MaximumLaunchSpeed: 192 Blockable: false - HorizontalRateOfTurn: 2 + HorizontalRateOfTurn: 8 Shadow: true Image: TORPEDO MinimumLaunchSpeed: 75 diff --git a/mods/ts/weapons/missiles.yaml b/mods/ts/weapons/missiles.yaml index 6e3ca7ad0b..4dc4a7af29 100644 --- a/mods/ts/weapons/missiles.yaml +++ b/mods/ts/weapons/missiles.yaml @@ -11,7 +11,7 @@ Image: DRAGON TrailImage: small_smoke_trail TrailPalette: effectalpha75 - HorizontalRateOfTurn: 25 + HorizontalRateOfTurn: 100 RangeLimit: 15c0 Palette: ra MinimumLaunchSpeed: 75 @@ -19,7 +19,7 @@ Acceleration: 96 MinimumLaunchAngle: 128 MaximumLaunchAngle: 192 - VerticalRateOfTurn: 25 + VerticalRateOfTurn: 100 CruiseAltitude: 5c512 AllowSnapping: true TerrainHeightAware: true @@ -128,7 +128,7 @@ RedEye2: ValidTargets: Air Projectile: Missile Arm: 1 - VerticalRateOfTurn: 35 + VerticalRateOfTurn: 140 RangeLimit: 25c0 Speed: 288 Warhead@1Dam: SpreadDamage diff --git a/mods/ts/weapons/superweapons.yaml b/mods/ts/weapons/superweapons.yaml index 9f2aa078bd..81cd4c4a35 100644 --- a/mods/ts/weapons/superweapons.yaml +++ b/mods/ts/weapons/superweapons.yaml @@ -10,7 +10,7 @@ MultiCluster: MaximumLaunchAngle: 255 RangeLimit: 10c0 AllowSnapping: false - VerticalRateOfTurn: 16 + VerticalRateOfTurn: 64 Warhead@1Dam: SpreadDamage Spread: 216 Damage: 13000