From 1ef73311dab1c28f0cf42ac7d2c0f04d4cbd48a6 Mon Sep 17 00:00:00 2001 From: dnqbob Date: Fri, 28 Mar 2025 11:00:33 +0800 Subject: [PATCH 1/3] Add SpriteAthenaLaser --- .../Projectiles/SpriteAthenaLaser.cs | 204 ++++++++++++++++++ 1 file changed, 204 insertions(+) create mode 100644 OpenRA.Mods.CA/Projectiles/SpriteAthenaLaser.cs diff --git a/OpenRA.Mods.CA/Projectiles/SpriteAthenaLaser.cs b/OpenRA.Mods.CA/Projectiles/SpriteAthenaLaser.cs new file mode 100644 index 0000000000..9c4451c43a --- /dev/null +++ b/OpenRA.Mods.CA/Projectiles/SpriteAthenaLaser.cs @@ -0,0 +1,204 @@ +#region Copyright & License Information +/** + * Copyright (c) The OpenRA Combined Arms Developers (see CREDITS). + * This file is part of OpenRA Combined Arms, 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.Effects; +using OpenRA.GameRules; +using OpenRA.Graphics; +using OpenRA.Traits; + +namespace OpenRA.Mods.CA.Projectiles +{ + [Desc("Generate laser connect by image with different height offset, and trigger warheads on the ground until expires.")] + class SpriteAthenaLaserInfo : IProjectileInfo + { + [FieldLoader.Require] + [Desc("Laser Image to display.")] + public readonly string Image = null; + + [SequenceReference(nameof(Image), allowNullImage: false)] + [Desc("Laser sprite Sequence of Image from this list while this projectile is moving.")] + public readonly string Sequence = "idle"; + + [Desc("Number of the laser sprite to form the beam.")] + public readonly int SpriteNumber = 8; + + [Desc("Offset of laser sprite to form the beam.")] + public readonly int HeightOffset = 1024; + + [Desc("Laser ring image to display.")] + public readonly string RingImage = null; + + [SequenceReference(nameof(RingImage), allowNullImage: true)] + [Desc("Sequence of laser ring image from this list while this projectile is moving.")] + public readonly string RingSequence = "idle"; + + [PaletteReference(nameof(IsPlayerPalette))] + [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("Projectile speed in WDist / tick.")] + public readonly WDist Speed = new(90); + + [Desc("Rotation speed around the target.")] + public readonly WAngle RotSpeed = WAngle.Zero; + + [Desc("Rotation speed slowly add to max.")] + public readonly bool RotStartFromZero = true; + + [Desc("How many ticks will pass between explosions.")] + public readonly int ExplosionInterval = 3; + + [Desc("How many ticks will the projectile pierce even after reach the target location.")] + public readonly int PierceTicks = 0; + + [Desc("How many ticks will the projectile stay after motion.")] + public readonly int StayTicks = 8; + + public IProjectile Create(ProjectileArgs args) { return new SpriteAthenaLaser(this, args); } + } + + class SpriteAthenaLaser : IProjectile + { + readonly int explosionInterval; + readonly ProjectileArgs args; + readonly WarheadArgs warheadArgs; + readonly Animation[] animations; + readonly Animation ringAnim; + readonly int heightoffset; + readonly int rotAcc; + readonly int speed; + readonly World world; + readonly string paletteName; + readonly int length, flightticks, maxticks; + readonly WPos target; + readonly WPos source; + + WPos projectilepos; + WAngle rot; + int ticks; + int rotSpeed; + + protected bool FlightLengthReached => ticks > flightticks; + + protected bool LifeExpired => ticks > maxticks; + + public SpriteAthenaLaser(SpriteAthenaLaserInfo info, ProjectileArgs args) + { + this.args = args; + warheadArgs = new WarheadArgs(args); + speed = info.Speed.Length; + + world = args.SourceActor.World; + source = new WPos(args.Source.X, args.Source.Y, 0); + target = new WPos(args.PassiveTarget.X, args.PassiveTarget.Y, 0); + length = Math.Max((target - source).Length / Math.Max(speed, 1), 1); + rotSpeed = info.RotStartFromZero ? 0 : info.RotSpeed.Angle * 1000; + rotAcc = info.RotStartFromZero ? info.RotSpeed.Angle * 1000 / length : 0; + + projectilepos = source - new WVec(0, 0, world.Map.DistanceAboveTerrain(source).Length); + flightticks = length + info.PierceTicks; + maxticks = length + info.PierceTicks + info.StayTicks; + explosionInterval = Math.Max(info.ExplosionInterval, 1); + heightoffset = info.HeightOffset; + + paletteName = info.Palette; + if (paletteName != null && info.IsPlayerPalette) + paletteName += args.SourceActor.Owner.InternalName; + + if (!string.IsNullOrEmpty(info.Image)) + { + animations = new Animation[info.SpriteNumber]; + + for (var i = 0; i < animations.Length; i++) + { + animations[i] = new Animation(world, info.Image); + animations[i].PlayRepeating(info.Sequence); + } + } + + if (!string.IsNullOrEmpty(info.RingImage)) + { + ringAnim = new Animation(world, info.RingImage); + ringAnim.PlayRepeating(info.RingSequence); + } + } + + IEnumerable IEffect.Render(WorldRenderer wr) + { + if (LifeExpired) + yield break; + + foreach (var r in RenderAnimation(wr)) + yield return r; + } + + void IEffect.Tick(World world) + { + ticks++; + + if (ticks % explosionInterval == 0) + { + warheadArgs.ImpactPosition = projectilepos; + args.Weapon.Impact(Target.FromPos(projectilepos), warheadArgs); + } + + ringAnim?.Tick(); + for (var i = 0; i < animations.Length; i++) + animations[i].Tick(); + + rotSpeed += rotAcc; + if (!FlightLengthReached) + { + var pos = projectilepos; + if (speed != 0) + pos = WPos.Lerp(source, target, ticks, length); + + if (rotSpeed != 0) + { + rot += new WAngle(rotSpeed / 1000); + pos = target + (pos - target).Rotate(WRot.FromYaw(rot)); + } + + projectilepos = pos - new WVec(0, 0, world.Map.DistanceAboveTerrain(pos).Length); + } + + if (LifeExpired) + world.AddFrameEndTask(w => w.Remove(this)); + } + + protected IEnumerable RenderAnimation(WorldRenderer wr) + { + var renderpos = projectilepos; + var palette = wr.Palette(paletteName); + + if (world.FogObscures(projectilepos)) + yield break; + + if (ringAnim != null) + { + foreach (var r in ringAnim.Render(renderpos, palette)) + yield return r; + } + + for (var i = 0; i < animations.Length; i++) + { + foreach (var r in animations[i].Render(renderpos, palette)) + yield return r; + + renderpos += new WVec(0, 0, heightoffset); + } + } + } +} From eed98384e96ccbe71d44dc29b13dfe046779e251 Mon Sep 17 00:00:00 2001 From: dnqbob Date: Fri, 28 Mar 2025 11:07:37 +0800 Subject: [PATCH 2/3] Add FireReverseRadiusWarhead --- .../Warheads/FireReverseRadiusWarhead.cs | 114 ++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 OpenRA.Mods.CA/Warheads/FireReverseRadiusWarhead.cs diff --git a/OpenRA.Mods.CA/Warheads/FireReverseRadiusWarhead.cs b/OpenRA.Mods.CA/Warheads/FireReverseRadiusWarhead.cs new file mode 100644 index 0000000000..207f5e0ae4 --- /dev/null +++ b/OpenRA.Mods.CA/Warheads/FireReverseRadiusWarhead.cs @@ -0,0 +1,114 @@ +#region Copyright & License Information +/* + * Copyright 2015- OpenRA.Mods.AS Developers (see AUTHORS) + * This file is a part of a third-party plugin for OpenRA, which is + * free software. It is made available to you under the terms of the + * GNU General Public License as published by the Free Software + * Foundation. For more information, see COPYING. + */ +#endregion + +using System; +using System.Linq; +using OpenRA.GameRules; +using OpenRA.Mods.Common.Traits; +using OpenRA.Traits; + +namespace OpenRA.Mods.CA.Warheads +{ + [Desc("Fires a defined amount of weapons with their maximum range in a reverse wave pattern.")] + public class FireReverseRadiusWarhead : WarheadAS, IRulesetLoaded + { + [WeaponReference] + [FieldLoader.Require] + [Desc("Has to be defined in weapons.yaml as well.")] + public readonly string Weapon = null; + + [Desc("Amount of weapons fired.")] + public readonly int[] Amount = { 1 }; + + [Desc("Should the weapons be fired around the intended target or at the explosion's epicenter.")] + public readonly bool AroundTarget = false; + + WeaponInfo weapon; + + public void RulesetLoaded(Ruleset rules, WeaponInfo info) + { + if (!rules.Weapons.TryGetValue(Weapon.ToLowerInvariant(), out weapon)) + throw new YamlException($"Weapons Ruleset does not contain an entry '{Weapon.ToLowerInvariant()}'"); + } + + public override void DoImpact(in Target target, WarheadArgs args) + { + var firedBy = args.SourceActor; + if (!target.IsValidFor(firedBy)) + return; + + var world = firedBy.World; + var map = world.Map; + + if (!IsValidImpact(target.CenterPosition, firedBy)) + return; + + var epicenter = AroundTarget && args.WeaponTarget.Type != TargetType.Invalid + ? args.WeaponTarget.CenterPosition + : target.CenterPosition; + + var amount = Amount.Length == 2 + ? world.SharedRandom.Next(Amount[0], Amount[1]) + : Amount[0]; + + var offset = 1024 / amount; + + for (var i = 0; i < amount; i++) + { + var radiusSource = Target.Invalid; + + var rotation = WRot.FromYaw(new WAngle(i * offset)); + var targetpos = epicenter + new WVec(weapon.Range.Length, 0, 0).Rotate(rotation); + radiusSource = Target.FromPos(new WPos(targetpos.X, targetpos.Y, map.CenterOfCell(map.CellContaining(targetpos)).Z)); + + if (radiusSource.Type == TargetType.Invalid) + continue; + + // Lambdas can't use 'in' variables, so capture a copy for later + var centerPosition = target.CenterPosition; + + var projectileArgs = new ProjectileArgs + { + Weapon = weapon, + Facing = (target.CenterPosition - radiusSource.CenterPosition).Yaw, + CurrentMuzzleFacing = () => (centerPosition - radiusSource.CenterPosition).Yaw, + + DamageModifiers = args.DamageModifiers, + + InaccuracyModifiers = !firedBy.IsDead ? firedBy.TraitsImplementing() + .Select(a => a.GetInaccuracyModifier()).ToArray() : Array.Empty(), + + RangeModifiers = !firedBy.IsDead ? firedBy.TraitsImplementing() + .Select(a => a.GetRangeModifier()).ToArray() : Array.Empty(), + + Source = radiusSource.CenterPosition, + CurrentSource = () => radiusSource.CenterPosition, + SourceActor = firedBy, + GuidedTarget = target, + PassiveTarget = target.CenterPosition + }; + + if (projectileArgs.Weapon.Projectile != null) + { + var projectile = projectileArgs.Weapon.Projectile.Create(projectileArgs); + if (projectile != null) + firedBy.World.AddFrameEndTask(w => w.Add(projectile)); + + if (projectileArgs.Weapon.Report != null && projectileArgs.Weapon.Report.Length > 0) + { + var pos = target.CenterPosition; + if ((!firedBy.World.ShroudObscures(pos) && !firedBy.World.FogObscures(pos))) + Game.Sound.Play(SoundType.World, projectileArgs.Weapon.Report, firedBy.World, pos, null); + } + } + } + } + } +} From 264517baadad5cff0001c92c60620ffb7cacbce5 Mon Sep 17 00:00:00 2001 From: dnqbob Date: Fri, 28 Mar 2025 14:21:17 +0800 Subject: [PATCH 3/3] testcase --- mods/ca/bits/tsionbeam.shp | Bin 0 -> 34160 bytes mods/ca/bits/tsionbeamstart.shp | Bin 0 -> 22601 bytes mods/ca/bits/tsring1.shp | Bin 0 -> 48824 bytes mods/ca/bits/tsringmini2.shp | Bin 0 -> 25465 bytes mods/ca/rules/powers.yaml | 1 + mods/ca/sequences/misc.yaml | 31 +++++++++ mods/ca/weapons/other.yaml | 107 ++++++++++++++++++++++++++++++++ 7 files changed, 139 insertions(+) create mode 100644 mods/ca/bits/tsionbeam.shp create mode 100644 mods/ca/bits/tsionbeamstart.shp create mode 100644 mods/ca/bits/tsring1.shp create mode 100644 mods/ca/bits/tsringmini2.shp diff --git a/mods/ca/bits/tsionbeam.shp b/mods/ca/bits/tsionbeam.shp new file mode 100644 index 0000000000000000000000000000000000000000..a9002457b7ab60a66ebc5253d31bb6fdf3a93b82 GIT binary patch literal 34160 zcmZ{txt1i$mX;%jI+a=HGS7Yc4lEE*P*D+4TWnN>hP6;yKtSNB7#f9#K!#?mQ&kz^ z5grjMUxDu*wnt>$?z-pPQ#QESwrzX(_cn8n-R?KL|GfKKJN@}Je|zG;fA-)0kIR4l z;Q#zV{qgmO`oH*puK3fx`$PSI%{YJZ>mTa>;xAqCFaG(*`hWjFGtTe-<;VIz`yc-| z{r^?!|G0GihyT_7|N5`)|G)pu5A~h*PyghH`v0Es|NP(nP(O73yC3S?|K&gaHTD1L zhx+pKm;bWc{qb)1aNRwfFS`f+c|Y#o_Q&_@<#M_1KK*8QJ?|bbyQj;k4X3O7JzaK> zzuWB|)BJEbr}=bV-TcT?f3!QV$J6Rj&zIApagQgad4c(l*Y!dlDh|{y$J1%|cs}nw z{bQO=)SfQ_&d9n^`yR4<49iGe=4{AItKuh-pAf1ldRbzM5bvS;YOx7&TbUQ@+f%XRmH)Vy2{?zEgP2WtKfHP@pT zv7FY^?)7i)cCSmz$0g;oA5QBb3d%~AzZ zzMQY_u)Md!3VEXGeWSXJcpt{B8S(vGMzN!LphT}7U|ZCZMPAx}Ylo3$-1V3lhtuWT zyH@QEmv_sANfMi`+4pxOkmlk->Awp**=d5Jg-`zunYBu~z8KPc8_Hyz zA|Y9+nG@w)-mls6yE)*6gvP5noKR-VRQRx*4kMK#$l9;JDIv@vPP?BaAJ-^1rX~R;$BN3{VZTWfd}T8s_EHWnrT-ZC6dZ%co-> zs1lt=wlISgVaqte);X>bjYH`0+7BM%@UCY>#x*vwq`FHC2=dlpF;?OiD%*;+40x}^ zy__Rq2TX1#*{sqw#+a$87_)u4RR5MvYY`G1We4`YgVvlw7>}5R8T1(aQ_a$yq9)es z1^*#!q0i6k>=|K=hFwy0VHPs&sNxhYJ=dOgth%;kM1xC8Pu{(#ObRWO}2>@_@ z%Tm7|)+_A#NvvUVj6ha{H->3I8IZ*%2tVz!U&{hLM-YeB55d<9mbqM`Ui3e(gn*-m zE6T|KJR~B-ILFyRPU{IRMAcaOXj&>9@Nx%Ylv7*pC1yHs$fSKU|@z(z!pZtd(V0 z5T3Lt*Yk+-+xaLUWuaoT&Ok2+gsSd|TXEvPilPACQyCq&=zDzfq_f(A8FwfHrJVg?vWYIw

IZM*OV7F)Xs6#|*v!vwP2M>lmiF?>h=8 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 literal 0 HcmV?d00001 diff --git a/mods/ca/rules/powers.yaml b/mods/ca/rules/powers.yaml index f7613cf2eb..e9be89a2b6 100644 --- a/mods/ca/rules/powers.yaml +++ b/mods/ca/rules/powers.yaml @@ -1247,6 +1247,7 @@ ^SurgicalStrikePower: IonCannonPower@SurgicalStrike: OrderName: surgicalstrike + Weapon: TSIonCannonSpawner Prerequisites: ~eye.zocom Icon: surgicalstrike IconPalette: chrometd diff --git a/mods/ca/sequences/misc.yaml b/mods/ca/sequences/misc.yaml index 2250f7a63d..7384fca747 100644 --- a/mods/ca/sequences/misc.yaml +++ b/mods/ca/sequences/misc.yaml @@ -3371,5 +3371,36 @@ laserhit: Frames: 0, 0, 0, 0 Alpha: 1, 0.8, 0.6, 0.3 idle1: + idle2: FlipX: true + +tsioncannon: + Defaults: + Length: * + ZOffset: 2047 + Tick: 35 + IgnoreWorldTint: true + ionring: + Filename: tsring1.shp + ZRamp: 1 + Alpha: 0.75 + Tick: 50 + ionbeam: + Filename: tsionbeam.shp + Offset: 0, -60, 60 + ZRamp: 1 + Alpha: 0.75 + Tick: 40 + ionbeamstart: + Filename: tsionbeamstart.shp + Offset: 0, -60, 60 + ZRamp: 1 + Alpha: 0.75 + Tick: 30 + ringmini2: + Filename: tsringmini2.shp + Alpha: 0.75 + Offset: 0,-6 + Tick: 5 + Scale: 0.8 diff --git a/mods/ca/weapons/other.yaml b/mods/ca/weapons/other.yaml index 9496acead7..18c8b783cc 100644 --- a/mods/ca/weapons/other.yaml +++ b/mods/ca/weapons/other.yaml @@ -3769,3 +3769,110 @@ TroopCrawlerDummyWeapon: Projectile: InstantHit Warhead@1Dam: Dummy ValidRelationships: Ally + +TSIonCannonSpawner: ### THIS ONE GENERATES THE MAIN ION BEAM DUMMY + ReloadDelay: 6 + Range: 12c0 + AirThreshold: 8c0 + ValidTargets: Ground, Water, Air + Warhead@4BeamEff: FireReverseRadius + ValidTargets: Ground, Water, Air + Weapon: TSIonBeamMini + ImpactActors: false + Amount: 10 + AirThreshold: 8c0 + Warhead@5BeamEff: FireShrapnel + Delay: 100 + ImpactActors: false + Weapon: TSIonBeam + ValidTargets: Ground, Water, Air + AirThreshold: 8c0 + Warhead@6BeamEff: FireShrapnel + Delay: 110 + ImpactActors: false + Weapon: TSIonBeamMiniEnd + ValidTargets: Ground, Water, Air + AirThreshold: 8c0 + Warhead@3Smu_area: LeaveSmudge + Delay: 110 + SmudgeType: Scorch + Size: 3,2 + AirThreshold: 8c0 + Warhead@3Effect: CreateEffect + Delay: 110 + Image: tsioncannon + Explosions: ionring + ExplosionPalette: tseffect + ImpactSounds: ion1.aud + AffectsParent: true + ImpactActors: false + ValidTargets: Ground, Water, BlueTiberium, Tiberium, Air + AirThreshold: 8c0 + Warhead@Shake: ShakeScreen + Duration: 15 + Intensity: 8 + Multiplier: 1,1 + AirThreshold: 8c0 + Delay: 114 + Warhead@1Dam: SpreadDamage + Spread: 420 + Delay: 112 + Damage: 37500 + DamageTypes: Prone50Percent, TriggerProne, FireDeath + Versus: + None: 100 + Light: 100 + Wood: 100 + Heavy: 100 + Concrete: 100 + Brick: 100 + +TSIonBeam: + ReloadDelay: 9999 + AirThreshold: 8c0 + ValidTargets: Ground, Water, Air + Projectile: SpriteAthenaLaser + Image: tsioncannon + Sequence: ionbeam + Palette: tseffect-ignore-lighting-alpha75 + RingImage: tsioncannon + RingSequence: ringmini2 + SpriteNumber: 8 + HeightOffset: 4146 + StayTicks: 39 + Speed: 0 + ExplosionInterval: 9999 + +TSIonBeamMini: + Inherits: TSIonBeam + Range: 5c256 + AirThreshold: 8c0 + Projectile: SpriteAthenaLaser + Sequence: ionbeamstart + RingSequence: ringmini2 + Palette: tseffect + StayTicks: 5 + ExplosionInterval: 3 + Speed: 52 + RotSpeed: 12 + Warhead@1Dam: SpreadDamage + Spread: 100 + Damage: 5500 + DamageTypes: Prone50Percent, TriggerProne, FireDeath + Versus: + None: 250 + Light: 101 + Wood: 60 + Heavy: 101 + Concrete: 90 + Brick: 50 + Warhead@3Eff: CreateEffect + Explosions: small_explosion, small_explosion_alt1, small_explosion_alt2, small_explosion_alt3 + +TSIonBeamMiniEnd: + Inherits: TSIonBeam + Projectile: SpriteAthenaLaser + StayTicks: 43 + Sequence: ionbeamstart + RingSequence: ringmini2 + Palette: tseffect