diff --git a/OpenRA.Mods.Sp/Projectiles/ProjetcileHusk.cs b/OpenRA.Mods.Sp/Projectiles/ProjetcileHusk.cs new file mode 100644 index 000000000..d8015ffc0 --- /dev/null +++ b/OpenRA.Mods.Sp/Projectiles/ProjetcileHusk.cs @@ -0,0 +1,243 @@ +#region Copyright & License Information +/* + * Copyright (c) The OpenRA Developers and Contributors + * 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; +using System.Collections.Generic; +using OpenRA.GameRules; +using OpenRA.Graphics; +using OpenRA.Mods.Common.Effects; +using OpenRA.Mods.SP.Traits; +using OpenRA.Primitives; +using OpenRA.Traits; +using Util = OpenRA.Mods.Common.Util; + +namespace OpenRA.Mods.SP.Projectiles +{ + [Desc("Projectile with customisable acceleration vector, recieve dead actor speed by using range modifier, used as aircraft husk.")] + public class ProjetcileHuskInfo : IProjectileInfo + { + public readonly string Image = null; + + [SequenceReference(nameof(Image), allowNullImage: true)] + [Desc("Loop a randomly chosen sequence of Image from this list while falling.")] + public readonly string[] Sequences = { "idle" }; + + [PaletteReference] + [Desc("The palette used to draw this projectile.")] + public readonly string Palette = "effect"; + + [Desc("Palette is a player palette BaseName")] + public readonly bool IsPlayerPalette = false; + + [Desc("Does this projectile have a shadow?")] + public readonly bool Shadow = false; + + [Desc("Color to draw shadow if Shadow is true.")] + public readonly Color ShadowColor = Color.FromArgb(140, 0, 0, 0); + + [Desc("Projectile movement vector per tick (forward, right, up), use negative values for opposite directions.")] + public readonly WVec Velocity = WVec.Zero; + + [Desc("Value added to Velocity every tick when spin is activated.")] + public readonly WVec AccelerationWhenSpin = new(0, 0, -10); + + [Desc("Value added to Velocity every tickwhen spin is NOT activated.")] + public readonly WVec Acceleration = new(0, 0, -10); + + [Desc("The X of the speed becomes dead actor speed by using range modifier, coop with " + nameof(SpawnHuskEffectOnDeath) + ".")] + public readonly bool UseRangeModifierAsVelocityX = true; + + [Desc("Chance of Spin. Activate Spin.")] + public readonly int SpinChance = 100; + + [Desc("Limit the maximum spin (in angle units per tick) that can be achieved.", + "0 Disables spinning.")] + public readonly int MaximumSpinSpeed = 0; + + [Desc("Spin acceleration.")] + public readonly int SpinAcc = 0; + + [Desc("begin spin speed.")] + public readonly int Spin = 0; + + [Desc("Revert the Y of the speed, spin and horizongtal acceleration at 50% randomness.")] + public readonly bool HorizontalRevert = false; + + [Desc("Trail animation.")] + public readonly string TrailImage = null; + + [SequenceReference(nameof(TrailImage), allowNullImage: true)] + [Desc("Loop a randomly chosen sequence of TrailImage from this list while this projectile is moving.")] + public readonly string[] TrailSequences = { "idle" }; + + [Desc("Interval in ticks between each spawned Trail animation.")] + public readonly int TrailInterval = 2; + + [Desc("Delay in ticks until trail animation is spawned.")] + public readonly int TrailDelay = 0; + + [PaletteReference(nameof(TrailUsePlayerPalette))] + [Desc("Palette used to render the trail sequence.")] + public readonly string TrailPalette = "effect"; + + [Desc("Use the Player Palette to render the trail sequence.")] + public readonly bool TrailUsePlayerPalette = false; + + public IProjectile Create(ProjectileArgs args) { return new ProjetcileHusk(this, args); } + } + + public class ProjetcileHusk : IProjectile, ISync + { + readonly ProjetcileHuskInfo info; + readonly Animation anim; + readonly ProjectileArgs args; + readonly string trailPalette; + + readonly float3 shadowColor; + readonly float shadowAlpha; + readonly int spinAcc; + readonly int maxSpin; + + WVec velocity; + WVec acceleration; + WAngle facing; + int spin; + + [Sync] + WPos pos, lastPos; + int smokeTicks; + + public ProjetcileHusk(ProjetcileHuskInfo info, ProjectileArgs args) + { + this.info = info; + this.args = args; + pos = args.Source; + facing = args.Facing; + var world = args.SourceActor.World; + + var vx = info.UseRangeModifierAsVelocityX && args.RangeModifiers.Length > 0 ? args.RangeModifiers[0] : info.Velocity.X; + + if (info.HorizontalRevert && world.SharedRandom.Next(2) == 0) + { + velocity = new WVec(-info.Velocity.Y, -vx, info.Velocity.Z); + if (info.MaximumSpinSpeed > 0 && world.SharedRandom.Next(1, 101) <= info.SpinChance) + { + acceleration = new WVec(-info.AccelerationWhenSpin.Y, info.AccelerationWhenSpin.X, info.AccelerationWhenSpin.Z); + spin = -info.Spin; + spinAcc = -info.SpinAcc; + maxSpin = -info.MaximumSpinSpeed; + } + else + acceleration = new WVec(-info.Acceleration.Y, info.Acceleration.X, info.Acceleration.Z); + } + else + { + velocity = new WVec(info.Velocity.Y, -vx, info.Velocity.Z); + if (info.MaximumSpinSpeed > 0 && world.SharedRandom.Next(1, 101) <= info.SpinChance) + { + acceleration = new WVec(info.AccelerationWhenSpin.Y, -info.AccelerationWhenSpin.X, info.AccelerationWhenSpin.Z); + spin = info.Spin; + spinAcc = info.SpinAcc; + maxSpin = info.MaximumSpinSpeed; + } + else + acceleration = new WVec(info.Acceleration.Y, -info.Acceleration.X, info.Acceleration.Z); + } + + velocity = velocity.Rotate(WRot.FromYaw(facing)); + acceleration = acceleration.Rotate(WRot.FromYaw(facing)); + + if (!string.IsNullOrEmpty(info.Image)) + { + anim = new Animation(args.SourceActor.World, info.Image, GetEffectiveFacing); + anim.PlayRepeating(info.Sequences.Random(args.SourceActor.World.SharedRandom)); + } + + shadowColor = new float3(info.ShadowColor.R, info.ShadowColor.G, info.ShadowColor.B) / 255f; + shadowAlpha = info.ShadowColor.A / 255f; + + trailPalette = info.TrailPalette; + if (info.TrailUsePlayerPalette) + trailPalette += args.SourceActor.Owner.InternalName; + smokeTicks = info.TrailDelay; + } + + public void Tick(World world) + { + lastPos = pos; + pos += velocity; + var spinAngle = new WAngle(spin); + facing += spinAngle; + acceleration = acceleration.Rotate(WRot.FromYaw(spinAngle)); + velocity += acceleration; + + spin = Math.Abs(spin) < Math.Abs(maxSpin) ? spin + spinAcc : maxSpin; + + if (pos.Z <= args.PassiveTarget.Z) + { + pos += new WVec(0, 0, args.PassiveTarget.Z - pos.Z); + world.AddFrameEndTask(w => w.Remove(this)); + + var warheadArgs = new WarheadArgs(args) + { + ImpactOrientation = new WRot(WAngle.Zero, Util.GetVerticalAngle(lastPos, pos), args.Facing), + ImpactPosition = pos, + }; + + args.Weapon.Impact(Target.FromPos(pos), warheadArgs); + } + + if (!string.IsNullOrEmpty(info.TrailImage) && --smokeTicks < 0) + { + world.AddFrameEndTask(w => w.Add(new SpriteEffect(pos, GetEffectiveFacing(), w, + info.TrailImage, info.TrailSequences.Random(world.SharedRandom), trailPalette))); + + smokeTicks = info.TrailInterval; + } + + anim?.Tick(); + } + + WAngle GetEffectiveFacing() + { + return facing; + } + + public IEnumerable Render(WorldRenderer wr) + { + if (anim == null) + yield break; + + var world = args.SourceActor.World; + if (!world.FogObscures(pos)) + { + var paletteName = info.Palette; + if (paletteName != null && info.IsPlayerPalette) + paletteName += args.SourceActor.Owner.InternalName; + + var palette = wr.Palette(paletteName); + + if (info.Shadow) + { + var dat = world.Map.DistanceAboveTerrain(pos); + var shadowPos = pos - new WVec(0, 0, dat.Length); + foreach (var r in anim.Render(shadowPos, palette)) + yield return ((IModifyableRenderable)r) + .WithTint(shadowColor, ((IModifyableRenderable)r).TintModifiers | TintModifiers.ReplaceColor) + .WithAlpha(shadowAlpha); + } + + foreach (var r in anim.Render(pos, palette)) + yield return r; + } + } + } +} diff --git a/OpenRA.Mods.Sp/Traits/SpawnHuskEffectOnDeath.cs b/OpenRA.Mods.Sp/Traits/SpawnHuskEffectOnDeath.cs new file mode 100644 index 000000000..02368e90a --- /dev/null +++ b/OpenRA.Mods.Sp/Traits/SpawnHuskEffectOnDeath.cs @@ -0,0 +1,139 @@ +#region Copyright & License Information +/* + * Copyright (c) The OpenRA Developers and Contributors + * 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; +using System.Linq; +using OpenRA.GameRules; +using OpenRA.Mods.Common.Activities; +using OpenRA.Mods.Common.Traits; +using OpenRA.Primitives; +using OpenRA.Traits; + +namespace OpenRA.Mods.SP.Traits +{ + [Desc("Spawn projectile as husk upon death.")] + public class SpawnHuskEffectOnDeathInfo : ConditionalTraitInfo, IRulesetLoaded + { + [WeaponReference] + [FieldLoader.Require] + [Desc("Weapon to spawn on death as husk.")] + public readonly string Weapon = null; + + [Desc("DeathType(s) that trigger the effect. Leave empty to always trigger an effect.")] + public readonly BitSet DeathTypes = default; + + [Desc("Offset to fire husk weapon from on death.")] + public readonly WVec LocalOffset = WVec.Zero; + + [Desc("Give random facing instead of actor facing to husk weapon.")] + public readonly bool RandomFacing = false; + + [Desc("Offset to fire husk weapon to on death.")] + public readonly WVec TargetOffset = new(200, 0, 0); + + [Desc("Always target ground level when fire at TargetOffset.")] + public readonly bool ForceToGround = true; + + [Desc("Pass current actor speed as RangeModifier to husk weapon.", + "Only supports aircraft for now.")] + public readonly bool UnitSpeedAsRangeModifier = true; + + public WeaponInfo WeaponInfo { get; private set; } + + public override void RulesetLoaded(Ruleset rules, ActorInfo ai) + { + if (string.IsNullOrEmpty(Weapon)) + return; + + var weaponToLower = Weapon.ToLowerInvariant(); + if (!rules.Weapons.TryGetValue(weaponToLower, out var weapon)) + throw new YamlException($"Weapons Ruleset does not contain an entry '{weaponToLower}'"); + + WeaponInfo = weapon; + + base.RulesetLoaded(rules, ai); + } + + public override object Create(ActorInitializer init) { return new SpawnHuskEffectOnDeath(this); } + } + + public class SpawnHuskEffectOnDeath : ConditionalTrait, INotifyKilled + { + public SpawnHuskEffectOnDeath(SpawnHuskEffectOnDeathInfo info) + : base(info) { } + + void INotifyKilled.Killed(Actor self, AttackInfo e) + { + if (IsTraitDisabled || (!Info.DeathTypes.IsEmpty && !e.Damage.DamageTypes.Overlaps(Info.DeathTypes))) + return; + + var weapon = Info.WeaponInfo; + var body = self.TraitOrDefault(); + var facing = Info.RandomFacing ? new WAngle(self.World.SharedRandom.Next(1024)) : self.TraitOrDefault()?.Facing; + if (!facing.HasValue) facing = WAngle.Zero; + + var epicenter = self.CenterPosition + (body != null + ? body.LocalToWorld(Info.LocalOffset.Rotate(body.QuantizeOrientation(self.Orientation))) + : Info.LocalOffset); + var world = self.World; + + var map = world.Map; + var targetpos = epicenter + body.LocalToWorld(new WVec(Info.TargetOffset.Length, 0, 0).Rotate(body.QuantizeOrientation(self.Orientation))); + var target = Target.FromPos(new WPos(targetpos.X, targetpos.Y, Info.ForceToGround ? map.CenterOfCell(map.CellContaining(targetpos)).Z : targetpos.Z)); + + var rangeModifiers = Array.Empty(); + if (Info.UnitSpeedAsRangeModifier) + { + var aircraft = self.TraitOrDefault(); + if (aircraft != null && !self.IsIdle) + { + if (self.CurrentActivity is FlyIdle) + rangeModifiers = new int[1] { aircraft.Info.CanHover ? 0 : aircraft.IdleMovementSpeed }; + else if (self.CurrentActivity.ActivitiesImplementing().Any()) + rangeModifiers = new int[1] { aircraft.MovementSpeed }; + } + else + rangeModifiers = new int[1] { 0 }; + } + + var projectileArgs = new ProjectileArgs + { + Weapon = weapon, + Facing = facing.Value, + CurrentMuzzleFacing = () => facing.Value, + + DamageModifiers = Array.Empty(), + + InaccuracyModifiers = Array.Empty(), + + RangeModifiers = rangeModifiers, + Source = epicenter, + CurrentSource = () => epicenter, + SourceActor = self, + GuidedTarget = target, + PassiveTarget = target.CenterPosition + }; + + if (projectileArgs.Weapon.Projectile != null) + { + var projectile = projectileArgs.Weapon.Projectile.Create(projectileArgs); + if (projectile != null) + world.AddFrameEndTask(w => w.Add(projectile)); + } + + if (weapon.Report != null && weapon.Report.Any()) + { + if (weapon.AudibleThroughFog || (!self.World.ShroudObscures(epicenter) && !self.World.FogObscures(epicenter))) + Game.Sound.Play(SoundType.World, weapon.Report, world, epicenter, null, weapon.SoundVolume); + } + } + } +} diff --git a/mods/sp/bits/gdi/infantry/jumpjet1.shp b/mods/sp/bits/gdi/infantry/jumpjet1.shp new file mode 100644 index 000000000..0f8048bb9 Binary files /dev/null and b/mods/sp/bits/gdi/infantry/jumpjet1.shp differ diff --git a/mods/sp/mod.yaml b/mods/sp/mod.yaml index 7d4c4cd59..ff2aadab9 100755 --- a/mods/sp/mod.yaml +++ b/mods/sp/mod.yaml @@ -142,7 +142,6 @@ Rules: sp|rules/civilianrules.yaml sp|rules/techrules.yaml sp|rules/creeps.yaml - sp|rules/husks.yaml sp|rules/bridges.yaml sp|rules/decorations.yaml sp|rules/misc.yaml diff --git a/mods/sp/rules/aircraft.yaml b/mods/sp/rules/aircraft.yaml index e02483a16..5dfd78234 100644 --- a/mods/sp/rules/aircraft.yaml +++ b/mods/sp/rules/aircraft.yaml @@ -58,9 +58,12 @@ ORCA: ReloadCount: 2 ReloadDelay: 50 AmmoCondition: ammo - SpawnActorOnDeath: - Actor: ORCA.Husk - RequiresCondition: airborne + SpawnHuskEffectOnDeath: + Weapon: orca.husk + RequiresCondition: airborne && !ceramic_plating + SpawnHuskEffectOnDeath@white: + Weapon: orcaw.husk + RequiresCondition: airborne && ceramic_plating WithFacingSpriteBody: RequiresCondition: !ceramic_plating WithFacingSpriteBody@white: @@ -124,7 +127,7 @@ ORCAB: TurnSpeed: 20 Speed: 180 IdleTurnSpeed: 10 - IdleSpeed: 65 + IdleSpeed: 72 AirborneCondition: airborne MoveIntoShroud: true VTOL: true @@ -149,9 +152,12 @@ ORCAB: AmmoCondition: ammo Hovers@CRUISING: RequiresCondition: cruising - SpawnActorOnDeath: - Actor: ORCAB.Husk - RequiresCondition: airborne + SpawnHuskEffectOnDeath: + Weapon: orcab.husk + RequiresCondition: airborne && !ceramic_plating + SpawnHuskEffectOnDeath@white: + Weapon: orcabw.husk + RequiresCondition: airborne && ceramic_plating WithFacingSpriteBody: RequiresCondition: !ceramic_plating WithFacingSpriteBody@white: @@ -215,8 +221,8 @@ DSHP: OwnerChangedAffectsPassengers: false Selectable: Bounds: 3009,3335,0,-923 - SpawnActorOnDeath: - Actor: DSHP.Husk + SpawnHuskEffectOnDeath: + Weapon: dshp.husk RequiresCondition: airborne RenderSprites: BodyOrientation: @@ -242,6 +248,8 @@ DSHP.HIGH: Image: dshp WithFacingSpriteBody: RequiresCondition: !outofsight + SpawnHuskEffectOnDeath: + Weapon: dshp.high.husk -Targetable@AIRBORNE: -Targetable@GROUND: -Targetable@MC: @@ -300,9 +308,12 @@ ORCATRAN: OwnerChangedAffectsPassengers: false Selectable: Bounds: 2709,3015 - SpawnActorOnDeath: - Actor: ORCATRAN.Husk - RequiresCondition: airborne + SpawnHuskEffectOnDeath: + Weapon: orcatran.husk + RequiresCondition: airborne && !ceramic_plating + SpawnHuskEffectOnDeath@white: + Weapon: orcatranw.husk + RequiresCondition: airborne && ceramic_plating WithCargoPipsDecoration: Position: BottomLeft RequiresSelection: true @@ -390,8 +401,13 @@ APACHE: Offset: 150,0,200 Sequence: slow-rotor RequiresCondition: !airborne - SpawnActorOnDeath: - Actor: APACHE.Husk + SpawnHuskEffectOnDeath: + Weapon: apache.husk + RequiresCondition: airborne + SpawnHuskEffectOnDeath@ROTOR: + Weapon: big.rotor.husk + RandomFacing: true + LocalOffset: 150,0,200 RequiresCondition: airborne WithAmmoPipsDecoration: Position: BottomLeft @@ -473,8 +489,8 @@ SCRIN: InitialStanceAI: AttackAnything DeathSounds: VolumeMultiplier: 25 - SpawnActorOnDeath: - Actor: SCRIN.Husk + SpawnHuskEffectOnDeath: + Weapon: banshee.husk RequiresCondition: airborne WithAmmoPipsDecoration: Position: BottomLeft @@ -582,8 +598,8 @@ CERBERUS: RequiresCondition: HeavyDamaged SpawnSparks: RequiresCondition: HeavyDamaged - SpawnActorOnDeath: - Actor: CERBERUS.Husk + SpawnHuskEffectOnDeath: + Weapon: CERBERUS.Husk RequiresCondition: airborne ReloadArmamentsBar: WithRangeCircle@cloakgenerator: @@ -722,8 +738,13 @@ MUTHELI: AutoTarget: InitialStance: HoldFire InitialStanceAI: AttackAnything - SpawnActorOnDeath: - Actor: MUTHELI.Husk + SpawnHuskEffectOnDeath: + Weapon: mutheli.husk + RequiresCondition: airborne + SpawnHuskEffectOnDeath@ROTOR: + Weapon: big.rotor.husk + RandomFacing: true + LocalOffset: 150,0,200 RequiresCondition: airborne WithAmmoPipsDecoration: Position: BottomLeft @@ -890,8 +911,8 @@ WETP: RenderSprites: Hovers@CRUISING: RequiresCondition: cruising - SpawnActorOnDeath: - Actor: WETP.Husk + SpawnHuskEffectOnDeath: + Weapon: wetp.husk RequiresCondition: airborne WithAmmoPipsDecoration: Position: BottomLeft @@ -1023,15 +1044,15 @@ STORMRIDER: FacingTolerance: 512 AutoTarget: ScanRadius: 7 #PREF: save trait looks up and scan armaments - SpawnActorOnDeath: - Actor: STORMRIDER.Husk - RequiresCondition: airborne FloatingSpriteEmitter@spawnsmoke: Image: scrsmoke Palette: jascblue Explodes@Shrapnel: Weapon: SmalLScrinAircraftShrapnel EmptyWeapon: SmalLScrinAircraftShrapnel + SpawnHuskEffectOnDeath: + Weapon: stormrider.husk + RequiresCondition: airborne Contrail@1: RequiresCondition: airborne Offset: -550,-150,-50 @@ -1108,8 +1129,8 @@ DRACHE: WithFacingSpriteBody: Sequence: stand Hovers: - SpawnActorOnDeath: - Actor: DRACHE.Husk + SpawnHuskEffectOnDeath: + Weapon: drache.husk RequiresCondition: airborne FloatingSpriteEmitter@spawnsmoke: Offset: 0,0,1000 @@ -1174,8 +1195,8 @@ SCRGLYDER1: ScanRadius: 7 #PREF: save trait looks up and scan armaments BodyOrientation: QuantizedFacings: 32 - SpawnActorOnDeath: - Actor: GLYDER1.Husk + SpawnHuskEffectOnDeath: + Weapon: scrglyder1.husk RequiresCondition: airborne Armament@AITransformDummyWeapon: Weapon: AIGlyder1AimingDummyWeapon @@ -1273,8 +1294,8 @@ SCRDESTROYER: TargetFrozenActors: true BodyOrientation: QuantizedFacings: 32 - SpawnActorOnDeath: - Actor: SCRDESTROYER.Husk + SpawnHuskEffectOnDeath: + Weapon: scrdestroyer.husk RequiresCondition: airborne Contrail@1: RequiresCondition: airborne && hyperflight @@ -1344,8 +1365,8 @@ SCRTRANS: TargetTypes: ScrinUnit BodyOrientation: QuantizedFacings: 32 - SpawnActorOnDeath: - Actor: SCRTRANS.Husk + SpawnHuskEffectOnDeath: + Weapon: scrtrans.husk RequiresCondition: airborne WithCargoPipsDecoration: Position: BottomLeft @@ -1432,8 +1453,8 @@ SCRCARRIER: ScanRadius: 8 #PREF: save trait looks up and scan armaments BodyOrientation: QuantizedFacings: 32 - SpawnActorOnDeath: - Actor: SCRCARRIER.Husk + SpawnHuskEffectOnDeath: + Weapon: scrcarrier.husk RequiresCondition: airborne WithSpawnerMasterPipsDecoration: Margin: 4, 3 @@ -1534,9 +1555,9 @@ SCRBATTLESHIP: ScanRadius: 7 #PREF: save trait looks up and scan armaments BodyOrientation: QuantizedFacings: 32 - SpawnActorOnDeath: + SpawnHuskEffectOnDeath: + Weapon: scrbattleship.husk RequiresCondition: airborne - Actor: SCRBATTLESHIP.Husk ExternalCondition@PRODUCED: Condition: produced VoiceAnnouncement: @@ -1629,9 +1650,9 @@ WASP: WithFacingSpriteBody: BodyOrientation: QuantizedFacings: 32 - SpawnActorOnDeath: + SpawnHuskEffectOnDeath: + Weapon: wasp.husk RequiresCondition: airborne - Actor: WASP.Husk WithIdleOverlay@Wind: Image: flywave Sequence: idle @@ -1689,9 +1710,9 @@ BASILISK: ScanRadius: 7 #PREF: save trait looks up and scan armaments RenderSprites: WithFacingSpriteBody: - SpawnActorOnDeath: + SpawnHuskEffectOnDeath: + Weapon: basilisk.husk RequiresCondition: airborne - Actor: BASILISK.Husk Explodes@Shrapnel: Weapon: BigAircraftShrapnel EmptyWeapon: BigAircraftShrapnel @@ -1800,9 +1821,9 @@ DEVOURER: RequiresCondition: airborne Palette: apcybl IsDecoration: true ## so this doesn't have shadow - SpawnActorOnDeath: + SpawnHuskEffectOnDeath: + Weapon: devourer.husk RequiresCondition: airborne - Actor: DEVOURER.Husk Explodes@Shrapnel: Weapon: BigAircraftShrapnel EmptyWeapon: BigAircraftShrapnel diff --git a/mods/sp/rules/campaignstuff.yaml b/mods/sp/rules/campaignstuff.yaml index 6130798b7..f105b9e57 100644 --- a/mods/sp/rules/campaignstuff.yaml +++ b/mods/sp/rules/campaignstuff.yaml @@ -1369,8 +1369,8 @@ KODK: -Rearmable: Health: HP: 45000 - SpawnActorOnDeath: - Actor: KODK.Husk + SpawnHuskEffectOnDeath: + Weapon: kodk.husk RequiresCondition: airborne Explodes@Shrapnel: Weapon: BigAircraftShrapnel @@ -1416,22 +1416,6 @@ KODK: IconPalette: chrome Stats: Armor, Sight, Speed -KODK.Husk: - Inherits: ^AircraftHusk - Tooltip: - Name: Kodiak Command Ship - Aircraft: - TurnSpeed: 20 - Speed: 149 - WithShadow: - WithFacingSpriteBody: - BodyOrientation: - QuantizedFacings: 32 - RenderSprites: - Image: kodk - FallsToEarth: - Explosion: DevourerExplode - CABGRINDER: Inherits: ^TechBuilding Inherits@1: ^CabRender @@ -2338,9 +2322,9 @@ SCRINCOUNCIL: ScanRadius: 9 BodyOrientation: QuantizedFacings: 32 - SpawnActorOnDeath: + SpawnHuskEffectOnDeath: + Weapon: scrincouncil.husk RequiresCondition: airborne - Actor: SCRCOUNCIL.Husk ExternalCondition@PRODUCED: Condition: produced VoiceAnnouncement: diff --git a/mods/sp/rules/husks.yaml b/mods/sp/rules/husks.yaml deleted file mode 100644 index bc48a185e..000000000 --- a/mods/sp/rules/husks.yaml +++ /dev/null @@ -1,571 +0,0 @@ -^AircraftHusk: - Inherits: ^SpriteActor - HitShape: - RenderSprites: - Interactable: - Bounds: 784,1568 - BodyOrientation: - QuantizedFacings: 0 - CameraPitch: 90 - Aircraft: - WithFacingSpriteBody: - WithShadow: - Health: - HP: 28000 - HiddenUnderFog: - Type: GroundPosition - Targetable@Ignore: - TargetTypes: NoAutoTarget - ScriptTriggers: - Tooltip: - GenericName: Destroyed Aircraft - FallsToEarth: - Moves: true - Velocity: 180 - MaximumSpinSpeed: 100 - Explosion: SmallPlaneExplode - FloatingSpriteEmitter@spawnsmoke: - Sequences: idle - SpawnFrequency: 3 - Speed: 6 - Gravity: 70 - Offset: 0,0,0 - Image: sgrysmk1 - Palette: effect - Lifetime: 60 - Duration: -1 - RandomFacing: True - -^BigAircraftHusk: - Inherits: ^AircraftHusk - FallsToEarth: - Moves: true - Velocity: 100 - Explosion: BigAircraftExplode - -ORCA.Husk: - Inherits: ^AircraftHusk - Inherits@CERAMICS: ^AffectedByCeramicPlating - Tooltip: - Name: Orca Fighter - Aircraft: - TurnSpeed: 20 - Speed: 186 - WithFacingSpriteBody: - RequiresCondition: !ceramic_plating - WithFacingSpriteBody@white: - Name: white - Sequence: idle-white - RequiresCondition: ceramic_plating - RenderSprites: - Image: orca - -ORCAB.Husk: - Inherits: ^AircraftHusk - Inherits@CERAMICS: ^AffectedByCeramicPlating - Tooltip: - Name: Orca Bomber - Aircraft: - TurnSpeed: 20 - Speed: 96 - RenderSprites: - Image: orcab - WithFacingSpriteBody: - RequiresCondition: !ceramic_plating - WithFacingSpriteBody@white: - Name: white - Sequence: idle-white - RequiresCondition: ceramic_plating - FallsToEarth: - Moves: true - MaximumSpinSpeed: 0 - -ORCATRAN.Husk: - Inherits: ^AircraftHusk - Inherits@CERAMICS: ^AffectedByCeramicPlating - Tooltip: - Name: Orca Transport - Aircraft: - TurnSpeed: 20 - Speed: 84 - RenderSprites: - Image: orcatran - WithFacingSpriteBody: - RequiresCondition: !ceramic_plating - WithFacingSpriteBody@white: - Name: white - Sequence: idle-white - RequiresCondition: ceramic_plating - -^CarryallHusk: - Inherits: ^AircraftHusk - Aircraft: - TurnSpeed: 20 - Speed: 149 - -TRNSPORT.Husk: - Inherits: ^CarryallHusk - Inherits@CERAMICS: ^AffectedByCeramicPlating - Tooltip: - Name: Orca Carryall - WithFacingSpriteBody: - RequiresCondition: !ceramic_plating - WithFacingSpriteBody@white: - Name: white - Sequence: idle-white - RequiresCondition: ceramic_plating - RenderSprites: - Image: trnsport - -TRNSPORT.nod.Husk: - Inherits: ^CarryallHusk - Tooltip: - Name: Nod Carryall - RenderSprites: - Image: nodcarryall - -TRNSPORT.mut.Husk: - Inherits: ^CarryallHusk - Tooltip: - Name: Chinook Carryall - WithIdleOverlay@1Air: - Offset: 500,0,650 - Sequence: rotor - WithIdleOverlay@3Air: - Offset: -700,0,900 - Sequence: rotor - RenderSprites: - Image: forgcarryall - -TRNSPORT.cab.Husk: - Inherits: ^CarryallHusk - Tooltip: - Name: C.A.B.A.L. Carryall - RenderSprites: - Image: cabcarryall - -TRNSPORT.scr.Husk: - Inherits: ^CarryallHusk - Inherits@RENDER: ^ScrinRender - Tooltip: - Name: Scrin Carryall - RenderSprites: - Image: scrpod - FallsToEarth: - Explosion: ScrinSmallPlaneExplode - FloatingSpriteEmitter@spawnsmoke: - Image: scrsmoke - Palette: jascblue - -DSHP.Husk - Inherits: ^BigAircraftHusk - Tooltip: - Name: Drop Ship - Aircraft: - TurnSpeed: 20 - Speed: 149 - WithShadow: - WithFacingSpriteBody: - BodyOrientation: - QuantizedFacings: 32 - RenderSprites: - Image: dshp - -APACHE.Husk: - Inherits: ^AircraftHusk - Tooltip: - Name: Harpy - Aircraft: - TurnSpeed: 20 - Speed: 130 - WithIdleOverlay: - Offset: 85,0,384 - Sequence: rotor - RenderSprites: - Image: apache - -SCRIN.Husk: - Inherits: ^AircraftHusk - Tooltip: - Name: Banshee Fighter - Aircraft: - TurnSpeed: 20 - Speed: 168 - RenderSprites: - Image: scrin - FallsToEarth: - Moves: true - MaximumSpinSpeed: 0 - -CERBERUS.Husk: - Inherits: ^BigAircraftHusk - Tooltip: - Name: Paladin Cruiser - Aircraft: - TurnSpeed: 20 - Speed: 149 - WithShadow: - WithFacingSpriteBody: - BodyOrientation: - QuantizedFacings: 32 - RenderSprites: - Image: cerberus - -MUTHELI.Husk: - Inherits: ^AircraftHusk - Tooltip: - Name: Gargoyle - Aircraft: - TurnSpeed: 20 - Speed: 168 - WithIdleOverlay@ROTORAIR: - Offset: 85,0,384 - Sequence: rotor - RenderSprites: - Image: mutheli - -WETP.Husk: - Inherits: ^AircraftHusk - Tooltip: - Name: Falcon - Aircraft: - TurnSpeed: 20 - Speed: 168 - RenderSprites: - Image: wetp - FallsToEarth: - Moves: true - MaximumSpinSpeed: 0 - Contrail@1: - Offset: -100,-700,55 - StartColor: AAAAAA80 - StartColorAlpha: 128 - StartColorUsePlayerColor: false - EndColor: AAAAAA00 - StartWidth: 32 - TrailLength: 16 - Contrail@2: - Offset: -100,700,55 - StartColor: AAAAAA80 - StartColorAlpha: 128 - StartColorUsePlayerColor: false - EndColor: AAAAAA00 - StartWidth: 32 - TrailLength: 16 - -WASP.Husk: - Inherits: ^AircraftHusk - Inherits@RENDER: ^CabRender - Tooltip: - Name: Wasp - Aircraft: - TurnSpeed: 20 - Speed: 149 - WithShadow: - WithFacingSpriteBody: - BodyOrientation: - QuantizedFacings: 32 - RenderSprites: - Image: wasp - -CABDRONEJET.Husk: - Inherits: ^AircraftHusk - Inherits@RENDER: ^CabRender - Tooltip: - Name: Imp - Aircraft: - TurnSpeed: 20 - Speed: 149 - WithShadow: - WithFacingSpriteBody: - BodyOrientation: - QuantizedFacings: 32 - RenderSprites: - Image: cabdronejet - -DEVOURER.Husk: - Inherits: ^BigAircraftHusk - Inherits@RENDER: ^CabRender - Tooltip: - Name: Devourer - Aircraft: - TurnSpeed: 20 - Speed: 149 - WithShadow: - WithFacingSpriteBody: - BodyOrientation: - QuantizedFacings: 32 - RenderSprites: - Image: devourer - FallsToEarth: - Explosion: DevourerExplode - -BASILISK.Husk: - Inherits: ^BigAircraftHusk - Inherits@RENDER: ^CabRender - Tooltip: - Name: Basilisk - Aircraft: - TurnSpeed: 20 - Speed: 168 - RenderSprites: - Image: basilisk - -STORMRIDER.Husk: - Inherits: ^AircraftHusk - Tooltip: - Name: Stormrider - Aircraft: - TurnSpeed: 20 - Speed: 168 - RenderSprites: - Image: stormrider - FallsToEarth: - Moves: true - Explosion: StormriderExplode #ScrinUnitExplode2 - MaximumSpinSpeed: 0 - FloatingSpriteEmitter@spawnsmoke: - Image: scrsmoke - Palette: jascblue - -WYVERM2.Husk: - Inherits: ^AircraftHusk - Inherits@RENDER: ^ScrinRender - Tooltip: - Name: Wyvern - WithShadow: - WithFacingSpriteBody: - BodyOrientation: - QuantizedFacings: 32 - Aircraft: - TurnSpeed: 20 - Speed: 149 - RenderSprites: - Image: wyverm2 - FallsToEarth: - Explosion: SmallPlaneExplode - -GLYDER1.Husk: - Inherits: ^AircraftHusk - Inherits@RENDER: ^ScrinRender - RenderSprites: - PlayerPalette: playersilver - Cloak@CLOAKGENERATOR: - Palette: cloaksilver - -Cloak@CLOAKGENERATOR: - -ExternalCondition@CLOAKGENERATOR: - Tooltip: - Name: Glyder - WithShadow: - WithFacingSpriteBody: - FallsToEarth: - Explosion: ScrinUnitExplode - BodyOrientation: - QuantizedFacings: 32 - Aircraft: - TurnSpeed: 20 - Speed: 149 - RenderSprites: - Image: scrglyder1 - FloatingSpriteEmitter@spawnsmoke: - Image: scrsmoke - Palette: jascblue - -DRACHE.Husk: - Inherits: ^BigAircraftHusk - Inherits@RENDER: ^ScrinRender - -Buildable: - Tooltip: - Name: Scrin Host Station - FallsToEarth: - Explosion: DracheExplode - WithShadow: - WithFacingSpriteBody: - BodyOrientation: - QuantizedFacings: 32 - -Cloak@CLOAKGENERATOR: - -ExternalCondition@CLOAKGENERATOR: - Aircraft: - TurnSpeed: 20 - Speed: 149 - RenderSprites: - Image: drache.falling - FloatingSpriteEmitter@spawnsmoke: - Image: scrsmoke - Palette: jascblue - -SCRDESTROYER.Husk: - Inherits: ^BigAircraftHusk - Inherits@RENDER: ^ScrinRender - Tooltip: - Name: Destroyer - WithShadow: - WithFacingSpriteBody: - BodyOrientation: - QuantizedFacings: 32 - Aircraft: - TurnSpeed: 20 - Speed: 149 - RenderSprites: - Image: scrdestroyer - -Cloak@CLOAKGENERATOR: - -ExternalCondition@CLOAKGENERATOR: - FallsToEarth: - Explosion: DestroyerExplode - FloatingSpriteEmitter@spawnsmoke: - Image: scrsmoke - Palette: jascblue - -SCRBATTLESHIP.Husk: - Inherits: ^BigAircraftHusk - Inherits@RENDER: ^ScrinRender - Tooltip: - Name: Battlecruiser - WithShadow: - WithFacingSpriteBody: - BodyOrientation: - QuantizedFacings: 32 - Aircraft: - TurnSpeed: 20 - Speed: 149 - RenderSprites: - Image: scrbattleship - -Cloak@CLOAKGENERATOR: - -ExternalCondition@CLOAKGENERATOR: - FallsToEarth: - Explosion: BattleshipExplode - FloatingSpriteEmitter@spawnsmoke: - Image: scrsmoke - Palette: jascblue - -SCRCARRIER.Husk: - Inherits: ^BigAircraftHusk - Inherits@RENDER: ^ScrinRender - Tooltip: - Name: Assault Carrier - WithShadow: - WithFacingSpriteBody: - BodyOrientation: - QuantizedFacings: 32 - Aircraft: - TurnSpeed: 20 - Speed: 149 - RenderSprites: - Image: scrcarrier - -Cloak@CLOAKGENERATOR: - -ExternalCondition@CLOAKGENERATOR: - FallsToEarth: - Explosion: DestroyerExplode - FloatingSpriteEmitter@spawnsmoke: - Image: scrsmoke - Palette: jascblue - -SCRTRANS.Husk: - Inherits: ^AircraftHusk - Inherits@RENDER: ^ScrinRender - Tooltip: - Name: Scrin Transport - FallsToEarth: - Explosion: DestroyerExplode - WithShadow: - WithFacingSpriteBody: - BodyOrientation: - QuantizedFacings: 32 - Aircraft: - TurnSpeed: 20 - Speed: 149 - -Cloak@CLOAKGENERATOR: - -ExternalCondition@CLOAKGENERATOR: - RenderSprites: - Image: scrtrans - FloatingSpriteEmitter@spawnsmoke: - Image: scrsmoke - Palette: jascblue - -SCRCOUNCIL.Husk: - Inherits: ^AircraftHusk - Inherits@RENDER: ^ScrinRender - Tooltip: - Name: Scrin Council - WithShadow: - WithFacingSpriteBody: - BodyOrientation: - QuantizedFacings: 32 - Aircraft: - TurnSpeed: 20 - Speed: 149 - -Cloak@CLOAKGENERATOR: - -ExternalCondition@CLOAKGENERATOR: - RenderSprites: - Image: scrincouncil - FallsToEarth: - Explosion: BattleshipExplode - FloatingSpriteEmitter@spawnsmoke: - Image: scrsmoke - Palette: jascblue - -JUMPJET.Husk: - Inherits: ^AircraftHusk - Tooltip: - Name: Jumpjet Infantry - RenderSprites: - Image: jumpjetair - QuantizeFacingsFromSequence: - Sequence: stand - -WithFacingSpriteBody: - WithSpriteBody: - StartSequence: die-make - Sequence: die-fall - FallsToEarth: - Moves: true - Velocity: 180 - Explosion: JumjetFall - WithIdleOverlay: - Image: explosion - Sequence: fire1 - Offset: 0,0,700 - Palette: effectalpha50 - FloatingSpriteEmitter@spawnsmoke: - Sequences: idle - SpawnFrequency: 4 - Speed: 6 - Gravity: 70 - Offset: 0,0,0 - Image: sgrysmk1 - Palette: effect - Lifetime: 60 - Duration: 1000 - RandomFacing: True - -JJCOMM.Husk: - Inherits: ^AircraftHusk - Tooltip: - Name: Jumpjet Commando - RenderSprites: - Image: jjcommair - QuantizeFacingsFromSequence: - Sequence: stand - -WithFacingSpriteBody: - WithSpriteBody: - StartSequence: die-make - Sequence: die-fall - FallsToEarth: - Moves: true - Velocity: 180 - Explosion: CJumjetFall - WithIdleOverlay: - Image: explosion - Sequence: fire1 - Offset: 0,0,700 - Palette: effectalpha50 - FloatingSpriteEmitter@spawnsmoke: - Sequences: idle - SpawnFrequency: 4 - Speed: 6 - Gravity: 70 - Offset: 0,0,0 - Image: sgrysmk1 - Palette: effect - Lifetime: 60 - Duration: 1000 - RandomFacing: True diff --git a/mods/sp/rules/infantry.yaml b/mods/sp/rules/infantry.yaml index 9144ed280..453b98831 100644 --- a/mods/sp/rules/infantry.yaml +++ b/mods/sp/rules/infantry.yaml @@ -427,9 +427,11 @@ JUMPJETAIR: DeathTypes: EnergyDeath QuantizeFacingsFromSequence: Sequence: stand - SpawnActorOnDeath: - Actor: JUMPJET.Husk ### TheHusk cannot fall properly if at ground level - RequiresCondition: airborne + SpawnHuskEffectOnDeath: + Weapon: jumpjetair.husk + SpawnHuskEffectOnDeath@fire: + Weapon: jumpjetair-fire.husk + LocalOffset: 0,0,700 Explodes: Weapon: JumjetFall EmptyWeapon: JumjetFall @@ -673,9 +675,11 @@ JJCOMMAIR: DeathTypes: EnergyDeath QuantizeFacingsFromSequence: Sequence: stand - SpawnActorOnDeath: - Actor: JJCOMM.Husk - RequiresCondition: airborne + SpawnHuskEffectOnDeath: + Weapon: jjcommair.husk + SpawnHuskEffectOnDeath@fire: + Weapon: jumpjetair-fire.husk + LocalOffset: 0,0,700 Explodes: Weapon: CJumjetFall EmptyWeapon: CJumjetFall diff --git a/mods/sp/rules/sharedrules.yaml b/mods/sp/rules/sharedrules.yaml index a3fc4c204..5d6aa0af6 100644 --- a/mods/sp/rules/sharedrules.yaml +++ b/mods/sp/rules/sharedrules.yaml @@ -1513,7 +1513,7 @@ GASILO: OrderChance: 100 OrderTrigger: Periodically OrderInterval: 2066 - SpawnActorOnDeath: + SpawnHuskEffectOnDeath: RequiresCondition: airborne ProvidesPrerequisite@darkdefender: Prerequisite: DarkDefenderExists @@ -1532,8 +1532,12 @@ TRNSPORT: Prerequisites: ~gahpad, gadept, ~techlevel.4 RenderSprites: Image: trnsport - SpawnActorOnDeath: - Actor: TRNSPORT.Husk + SpawnHuskEffectOnDeath: + Weapon: trnsport.husk + RequiresCondition: airborne && !ceramic_plating + SpawnHuskEffectOnDeath@white: + Weapon: trnsportw.husk + RequiresCondition: airborne && ceramic_plating WithFacingSpriteBody: RequiresCondition: !ceramic_plating WithFacingSpriteBody@white: @@ -1582,8 +1586,8 @@ trnsport.nod: Prerequisites: ~nahpad, gadept, ~techlevel.4 RenderSprites: Image: nodcarryall - SpawnActorOnDeath: - Actor: TRNSPORT.nod.Husk + SpawnHuskEffectOnDeath: + Weapon: nodcarryall.husk Contrail@1: Offset: -850,-190,340 StartColor: FFEA0080 @@ -1611,8 +1615,18 @@ trnsport.mut: Prerequisites: ~muair, gadept, ~techlevel.4 RenderSprites: Image: forgcarryall - SpawnActorOnDeath: - Actor: TRNSPORT.mut.Husk + SpawnHuskEffectOnDeath: + Weapon: forgcarryall.husk + SpawnHuskEffectOnDeath@1: + Weapon: small.rotor.husk + RandomFacing: true + LocalOffset: 500,0,650 + RequiresCondition: airborne + SpawnHuskEffectOnDeath@2: + Weapon: small.rotor.husk + RandomFacing: true + LocalOffset: -700,0,900 + RequiresCondition: airborne WithIdleOverlay@1Air: Offset: 500,0,650 Sequence: rotor @@ -1643,8 +1657,8 @@ trnsport.cab: Voiced: VoiceSet: CabalAirDrone Volume: 1.25 - SpawnActorOnDeath: - Actor: TRNSPORT.cab.Husk + SpawnHuskEffectOnDeath: + Weapon: cabcarryall.husk Contrail@1: Offset: -1200,-175, 40 StartColor: FFEA0080 @@ -1673,8 +1687,8 @@ trnsport.scr: ## only used for AI Prerequisites: ~scrair, scrdepot, ~techlevel.4, ~AIOnly RenderSprites: Image: scrpod - SpawnActorOnDeath: - Actor: TRNSPORT.scr.Husk + SpawnHuskEffectOnDeath: + Weapon: scrpod.husk FloatingSpriteEmitter@spawnsmoke: Image: scrsmoke Palette: jascblue diff --git a/mods/sp/sequences/gdiseq.yaml b/mods/sp/sequences/gdiseq.yaml index 6348fc5d6..672ed3d1e 100644 --- a/mods/sp/sequences/gdiseq.yaml +++ b/mods/sp/sequences/gdiseq.yaml @@ -265,7 +265,7 @@ grenadier: jumpjet: Inherits@1: ^InfantryDeathAnims Defaults: - Filename: jumpjet.shp + Filename: jumpjet1.shp Tick: 80 stand: Facings: 8 @@ -329,7 +329,7 @@ jumpjet: jumpjetair: Inherits@1: ^InfantryDeathAnims Defaults: - Filename: jumpjet.shp + Filename: jumpjet1.shp stand: Start: 340 Length: 6 diff --git a/mods/sp/sequences/scrseq.yaml b/mods/sp/sequences/scrseq.yaml index bdb24596a..a19b19570 100644 --- a/mods/sp/sequences/scrseq.yaml +++ b/mods/sp/sequences/scrseq.yaml @@ -527,15 +527,6 @@ drache: Start: 22 Length: 13 -drache.falling: - Inherits: ^EmpOverlay - Defaults: - Tick: 150 - Offset: 0, 0 - idle: - Filename: drache.shp - Start: 1 - scrscorpion: Inherits: ^EmpOverlay Defaults: diff --git a/mods/sp/weapons/explosionweapons.yaml b/mods/sp/weapons/explosionweapons.yaml index b93f9c216..317b3b565 100644 --- a/mods/sp/weapons/explosionweapons.yaml +++ b/mods/sp/weapons/explosionweapons.yaml @@ -46,133 +46,6 @@ CyborgExplode: Inherits@2: ^Medium_Bang -Warhead@op: -StormriderExplode: - Inherits: ^ExploDefaults - Inherits@2: ^Mediuml_Clsn - Inherits@3: ^DelayedSmokeEffect - Warhead@1Dam: SpreadDamage - Spread: 0c080 - Damage: 2500 - DamageTypes: Prone50Percent, TriggerProne, FireDeath - InvalidTargets: Air - Warhead@2Eff: CreateEffect - ExplosionPalette: gensmkexplojFblue - Warhead@op: FireRadius - Weapon: SmallDebrisScrin - -SmallPlaneExplode: - Inherits: ^ExploDefaults - Inherits@2: ^Mediuml_Clsn - Inherits@3: ^DelayedSmokeEffect - Warhead@1Dam: SpreadDamage - Spread: 0c350 - Damage: 5000 - DamageTypes: Prone50Percent, TriggerProne, FireDeath - InvalidTargets: Air - Warhead@1: FireRadius - Amount: 3 - Weapon: SmallPlaneExplosion - ImpactActors: false - ValidTargets: Ground, Air, Water - -SmallPlaneExplosion: - Inherits: ^ExploDefaults - Inherits@3: ^DelayedSmokeEffect - Inherits@2: ^Mediuml_Clsn - Range: 0c512 - Projectile: InstantHit - -ScrinSmallPlaneExplode: - Inherits: SmallPlaneExplode - Warhead@2Eff: CreateEffect - ExplosionPalette: gensmkexplojFblue - Warhead@1: FireRadius - Weapon: ScrinSmallPlaneExplosion - -ScrinSmallPlaneExplosion: - Inherits: SmallPlaneExplosion - Warhead@2Eff: CreateEffect - ExplosionPalette: gensmkexplojFblue - Warhead@op: FireRadius - Weapon: SmallDebrisScrin - -BigAircraftExplode: - Inherits: ^ExploDefaults - Inherits@2: ^Large_Explosion - Inherits@3: ^DelayedSmokeEffect - Warhead@1Dam: SpreadDamage - Spread: 0c400 - Damage: 5000 - DamageTypes: Prone50Percent, TriggerProne, FireDeath - InvalidTargets: Air - Warhead@1: FireRadius - Amount: 5 - Weapon: BigAircraftExplosion - ImpactActors: false - ValidTargets: Ground, Air, Water - -DevourerExplode: - Inherits: BigAircraftExplode - Warhead@1Dam: SpreadDamage - Spread: 0c512 - Damage: 8000 - -BigAircraftExplosion: - Inherits: ^ExploDefaults - Inherits@2: ^Large_Explosion - Inherits@3: ^DelayedSmokeEffect - Range: 1c0 - Projectile: InstantHit - -DestroyerExplode: - Inherits: BigAircraftExplode - Warhead@2Eff: CreateEffect - ExplosionPalette: gensmkexplojFblue - Warhead@1: FireRadius - Weapon: DestroyerExplosion - -DestroyerExplosion: - Inherits: BigAircraftExplosion - Warhead@2Eff: CreateEffect - ExplosionPalette: gensmkexplojFblue - Warhead@op: FireRadius - Weapon: SmallDebrisScrin - -BattleshipExplode: - Inherits: ^ExploDefaults - Inherits@2: ^GreyExplo - Inherits@3: ^DelayedSmokeEffect - Warhead@1Dam: SpreadDamage - Spread: 0c800 - Damage: 10000 - DamageTypes: Prone50Percent, TriggerProne, FireDeath - InvalidTargets: Air - Warhead@1: FireRadius - Amount: 8 - Weapon: BattleshipExplosion - ImpactActors: false - ValidTargets: Ground, Air, Water - Warhead@2Eff: CreateEffect - ExplosionPalette: gensmkexplojFblue - Warhead@op: FireRadius - Weapon: SmallDebrisScrin - -BattleshipExplosion: - Inherits: ^ExploDefaults - Inherits@2: ^GreyExplo - Inherits@3: ^DelayedSmokeEffect - Range: 1c0 - Projectile: InstantHit - Warhead@2Eff: CreateEffect - ExplosionPalette: gensmkexplojFblue - Warhead@op: FireRadius - Weapon: SmallDebrisScrin - -DracheExplode: - Inherits: BattleshipExplosion - Warhead@1Dam: SpreadDamage - Damage: 8000 - SimpleDroneExplode: ## save performance, used for spamming summoned actor Warhead@2Eff: CreateEffect Explosions: infdeathexplo1, infdeathexplo2, infdeathexplo3 @@ -790,34 +663,6 @@ DefenderExplosion: ValidTargets: Ground, Air, Water ExplosionPalette: effect -JumjetFall: - Inherits: ^DelayedSmokeEffect - Warhead@1: CreateEffect - Image: jumpjetair - Explosions: die-onground - ValidTargets: Ground, Air, Water - ExplosionPalette: player - UsePlayerPalette: true - Warhead@2: CreateEffect - Image: jumpjetair - Explosions: dieblood1, dieblood2, dieblood3, dieblood4, dieblood5, dieblood6 - ValidTargets: Ground, Air, Water - ExplosionPalette: gradientred - -CJumjetFall: - Inherits: ^DelayedSmokeEffect - Warhead@1: CreateEffect - Image: jjcommair - Explosions: die-onground - ValidTargets: Ground, Air, Water - ExplosionPalette: player - UsePlayerPalette: true - Warhead@2: CreateEffect - Image: jjcommair - Explosions: dieblood1, dieblood2, dieblood3, dieblood4, dieblood5, dieblood6 - ValidTargets: Ground, Air, Water - ExplosionPalette: gradientred - BloodTiny: Warhead@2: CreateEffect Image: jumpjetair @@ -1023,3 +868,451 @@ ChemicalFlame2: Sequences: idle Warhead@3Eff: CreateEffect ExplosionPalette: jascgreen + +## Aircraft HUSK +StormriderExplode: + Inherits: ^ExploDefaults + Inherits@2: ^Mediuml_Clsn + Inherits@3: ^DelayedSmokeEffect + Warhead@1Dam: SpreadDamage + Spread: 0c080 + Damage: 2500 + DamageTypes: Prone50Percent, TriggerProne, FireDeath + InvalidTargets: Air + Warhead@2Eff: CreateEffect + ExplosionPalette: gensmkexplojFblue + Warhead@op: FireRadius + Weapon: SmallDebrisScrin + +SmallPlaneExplode: + Inherits: ^ExploDefaults + Inherits@2: ^Mediuml_Clsn + Inherits@3: ^DelayedSmokeEffect + Warhead@1Dam: SpreadDamage + Spread: 0c350 + Damage: 5000 + DamageTypes: Prone50Percent, TriggerProne, FireDeath + InvalidTargets: Air + Warhead@1: FireRadius + Amount: 3 + Weapon: SmallPlaneExplosion + ImpactActors: false + ValidTargets: Ground, Air, Water + +SmallPlaneExplosion: + Inherits: ^ExploDefaults + Inherits@3: ^DelayedSmokeEffect + Inherits@2: ^Mediuml_Clsn + Range: 0c512 + Projectile: InstantHit + +ScrinSmallPlaneExplode: + Inherits: SmallPlaneExplode + Warhead@2Eff: CreateEffect + ExplosionPalette: gensmkexplojFblue + Warhead@1: FireRadius + Weapon: ScrinSmallPlaneExplosion + +ScrinSmallPlaneExplosion: + Inherits: SmallPlaneExplosion + Warhead@2Eff: CreateEffect + ExplosionPalette: gensmkexplojFblue + Warhead@op: FireRadius + Weapon: SmallDebrisScrin + +BigAircraftExplode: + Inherits: ^ExploDefaults + Inherits@2: ^Large_Explosion + Inherits@3: ^DelayedSmokeEffect + Warhead@1Dam: SpreadDamage + Spread: 0c400 + Damage: 5000 + DamageTypes: Prone50Percent, TriggerProne, FireDeath + InvalidTargets: Air + Warhead@1: FireRadius + Amount: 5 + Weapon: BigAircraftExplosion + ImpactActors: false + ValidTargets: Ground, Air, Water + +DevourerExplode: + Inherits: BigAircraftExplode + Warhead@1Dam: SpreadDamage + Spread: 0c512 + Damage: 8000 + +BigAircraftExplosion: + Inherits: ^ExploDefaults + Inherits@2: ^Large_Explosion + Inherits@3: ^DelayedSmokeEffect + Range: 1c0 + Projectile: InstantHit + +ScrinCarrierExplode: + Inherits: BigAircraftExplode + Warhead@2Eff: CreateEffect + ExplosionPalette: gensmkexplojFblue + Warhead@1: FireRadius + Weapon: ScrinCarrierExplosion + +ScrinCarrierExplosion: + Inherits: BigAircraftExplosion + Warhead@2Eff: CreateEffect + ExplosionPalette: gensmkexplojFblue + Warhead@op: FireRadius + Weapon: SmallDebrisScrin + +BattleshipExplode: + Inherits: ^ExploDefaults + Inherits@2: ^GreyExplo + Inherits@3: ^DelayedSmokeEffect + Warhead@1Dam: SpreadDamage + Spread: 0c800 + Damage: 10000 + DamageTypes: Prone50Percent, TriggerProne, FireDeath + InvalidTargets: Air + Warhead@1: FireRadius + Amount: 8 + Weapon: BattleshipExplosion + ImpactActors: false + ValidTargets: Ground, Air, Water + Warhead@2Eff: CreateEffect + ExplosionPalette: gensmkexplojFblue + Warhead@op: FireRadius + Weapon: SmallDebrisScrin + +BattleshipExplosion: + Inherits: ^ExploDefaults + Inherits@2: ^GreyExplo + Inherits@3: ^DelayedSmokeEffect + Range: 1c0 + Projectile: InstantHit + Warhead@2Eff: CreateEffect + ExplosionPalette: gensmkexplojFblue + Warhead@op: FireRadius + Weapon: SmallDebrisScrin + +DracheExplode: + Inherits: BattleshipExplosion + Warhead@1Dam: SpreadDamage + Damage: 8000 + +JumjetFall: + Inherits: ^DelayedSmokeEffect + Warhead@1: CreateEffect + Image: jumpjetair + Explosions: die-onground + ValidTargets: Ground, Air, Water + ExplosionPalette: player + UsePlayerPalette: true + Warhead@2: CreateEffect + Image: jumpjetair + Explosions: dieblood1, dieblood2, dieblood3, dieblood4, dieblood5, dieblood6 + ValidTargets: Ground, Air, Water + ExplosionPalette: gradientred + +CJumjetFall: + Inherits: ^DelayedSmokeEffect + Warhead@1: CreateEffect + Image: jjcommair + Explosions: die-onground + ValidTargets: Ground, Air, Water + ExplosionPalette: player + UsePlayerPalette: true + Warhead@2: CreateEffect + Image: jjcommair + Explosions: dieblood1, dieblood2, dieblood3, dieblood4, dieblood5, dieblood6 + ValidTargets: Ground, Air, Water + ExplosionPalette: gradientred + +^plane.husk: + ValidTargets: Air, Ground, Water, Vehicle, Infantry, Building + Projectile: ProjetcileHusk + Velocity: 0, 0, -8 + Acceleration: 0, 0, -8 + AccelerationWhenSpin: 1, -3, -8 + UseRangeModifierAsVelocityX: true + Shadow: true + Palette: player + Sequences: idle + IsPlayerPalette: true + TrailImage: sgrysmk1 + TrailPalette: effect + TrailDelay: 0 + TrailInterval: 6 + SpinAcc: 2 + Spin: 16 + MaximumSpinSpeed: 40 + HorizontalRevert: true + +^rotor.husk: + Inherits@explo: SmallDebris + ValidTargets: Air, Ground, Water, Vehicle, Infantry, Building + Projectile: ProjetcileHusk + Velocity: 40, 0, 20 + AccelerationWhenSpin: 6, -12, -8 + SpinAcc: 2 + Spin: 16 + MaximumSpinSpeed: 40 + UseRangeModifierAsVelocityX: true + + Shadow: true + IsPlayerPalette: true + Image: apache + Palette: player + Sequences: slow-rotor + TrailImage: sgrysmk1 + TrailPalette: effect + TrailDelay: 0 + TrailInterval: 6 + +trnsport.husk: + Inherits@explo: SmallPlaneExplode + Inherits: ^plane.husk + Projectile: ProjetcileHusk + Image: trnsport + +trnsportw.husk: + Inherits: trnsport.husk + Projectile: ProjetcileHusk + Sequences: idle-white + +orca.husk: + Inherits@explo: SmallPlaneExplode + Inherits: ^plane.husk + Projectile: ProjetcileHusk + Image: orca + +orcaw.husk: + Inherits: orca.husk + Projectile: ProjetcileHusk + Sequences: idle-white + +orcab.husk: + Inherits@explo: SmallPlaneExplode + Inherits: ^plane.husk + Projectile: ProjetcileHusk + Image: orcab + SpinChance: 50 + +orcabw.husk: + Inherits: orcab.husk + Projectile: ProjetcileHusk + Sequences: idle-white + +dshp.husk: + Inherits@explo: BigAircraftExplode + Inherits: ^plane.husk + Projectile: ProjetcileHusk + Image: dshp + SpinChance: 50 + +kodk.husk: + Inherits@explo: BigAircraftExplode + Inherits: ^plane.husk + Projectile: ProjetcileHusk + Image: kodk + SpinChance: 50 + +dshp.high.husk: + Inherits: dshp.husk + Projectile: ProjetcileHusk + UseRangeModifierAsVelocityX: false + +orcatran.husk: + Inherits@explo: SmallPlaneExplode + Inherits: ^plane.husk + Projectile: ProjetcileHusk + Image: orcatran + SpinChance: 50 + +orcatranw.husk: + Inherits: orcatran.husk + Projectile: ProjetcileHusk + Sequences: idle-white + +jumpjetair.husk: + Inherits@explo: JumjetFall + Inherits: ^plane.husk + Projectile: GravityBomb + Image: jumpjetair + Sequences: die-fall + OpenSequence: die-make + +jjcommair.husk: + Inherits@explo: CJumjetFall + Inherits: ^plane.husk + Projectile: GravityBomb + Image: jjcommair + Sequences: die-fall + OpenSequence: die-make + +jumpjetair-fire.husk: + Inherits: ^plane.husk + Projectile: GravityBomb + Image: explosion + Sequences: fire1 + OpenSequence: fire2 + Palette: effectalpha50 + IsPlayerPalette: false + +nodcarryall.husk: + Inherits@explo: SmallPlaneExplode + Inherits: ^plane.husk + Projectile: ProjetcileHusk + Image: nodcarryall + +big.rotor.husk: + Inherits: ^rotor.husk + +apache.husk: + Inherits@explo: SmallPlaneExplode + Inherits: ^plane.husk + Projectile: ProjetcileHusk + Image: apache + SpinAcc: 8 + +banshee.husk: + Inherits@explo: SmallPlaneExplode + Inherits: ^plane.husk + Projectile: ProjetcileHusk + Image: scrin + SpinChance: 50 + Spin: 0 + +cerberus.husk: + Inherits@explo: BigAircraftExplode + Inherits: ^plane.husk + Projectile: ProjetcileHusk + Image: cerberus + SpinChance: 50 +small.rotor.husk: + Inherits: ^rotor.husk + Projectile: ProjetcileHusk + Image: forgcarryall + Palette: playermut + +forgcarryall.husk: + Inherits@explo: SmallPlaneExplode + Inherits: ^plane.husk + Projectile: ProjetcileHusk + Image: forgcarryall + Palette: playermut + +mutheli.husk: + Inherits@explo: SmallPlaneExplode + Inherits: ^plane.husk + Projectile: ProjetcileHusk + Image: mutheli + Palette: playermut + SpinAcc: 8 + +wetp.husk: + Inherits@explo: SmallPlaneExplode + Inherits: ^plane.husk + Projectile: ProjetcileHusk + Image: wetp + Palette: playermut + MaximumSpinSpeed: 0 + +cabcarryall.husk: + Inherits@explo: SmallPlaneExplode + Inherits: ^plane.husk + Projectile: ProjetcileHusk + Image: cabcarryall + Palette: playercab + +wasp.Husk: + Inherits@explo: SmallPlaneExplode + Inherits: ^plane.husk + Projectile: ProjetcileHusk + Image: wasp + Palette: playercab + +basilisk.husk: + Inherits@explo: BigAircraftExplode + Inherits: ^plane.husk + Projectile: ProjetcileHusk + Image: basilisk + Palette: playercab + SpinChance: 50 + +devourer.husk: + Inherits@explo: DevourerExplode + Inherits: ^plane.husk + Projectile: ProjetcileHusk + Image: devourer + Palette: playercab + MaximumSpinSpeed: 0 + Acceleration: 0, 0, -4 + +^scrplane.husk: + Inherits: ^plane.husk + Projectile: ProjetcileHusk + TrailImage: scrsmoke + TrailPalette: jascblue + Palette: playerscrin + +scrpod.husk: + Inherits@explo: ScrinSmallPlaneExplode + Inherits: ^scrplane.husk + Projectile: ProjetcileHusk + Image: scrpod + +stormrider.husk: + Inherits@explo: StormriderExplode + Inherits: ^scrplane.husk + Projectile: ProjetcileHusk + Image: stormrider + SpinChance: 50 + +drache.husk: + Inherits@explo: DracheExplode + Inherits: ^scrplane.husk + Projectile: ProjetcileHusk + Image: drache + Sequences: stand + MaximumSpinSpeed: 0 + +scrglyder1.husk: + Inherits@explo: ScrinUnitExplode + Inherits: ^scrplane.husk + Projectile: ProjetcileHusk + Image: scrglyder1 + +scrtrans.husk: + Inherits@explo: ScrinSmallPlaneExplode + Inherits: ^scrplane.husk + Projectile: ProjetcileHusk + Image: scrtrans + SpinChance: 50 + +scrdestroyer.husk: + Inherits@explo: ScrinCarrierExplode + Inherits: ^scrplane.husk + Projectile: ProjetcileHusk + Image: scrdestroyer + SpinChance: 50 + +scrcarrier.husk: + Inherits@explo: ScrinCarrierExplode + Inherits: ^scrplane.husk + Projectile: ProjetcileHusk + Image: scrcarrier + SpinChance: 50 + +scrbattleship.husk: + Inherits@explo: BattleshipExplode + Inherits: ^scrplane.husk + Projectile: ProjetcileHusk + Image: scrbattleship + SpinChance: 50 + +scrincouncil.husk: + Inherits@explo: BattleshipExplode + Inherits: ^scrplane.husk + Projectile: ProjetcileHusk + Image: scrincouncil + MaximumSpinSpeed: 0 + Acceleration: 0, 0, -4 +