From 6c8050eb1e94e35c68017fefe2ed056163ba2dbb Mon Sep 17 00:00:00 2001 From: ThereDrD <88589686+ThereDrD0@users.noreply.github.com> Date: Thu, 20 Feb 2025 17:29:41 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9D=D0=BE=D0=B2=D1=8B=D0=B5=20=D1=8D=D1=84?= =?UTF-8?q?=D1=84=D0=B5=D0=BA=D1=82=D1=8B=20=D0=B2=D0=B7=D1=80=D1=8B=D0=B2?= =?UTF-8?q?=D0=BE=D0=B2=20(#1410)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Vero <73014819+vero5123@users.noreply.github.com> Co-authored-by: Whisper <121047731+QuietlyWhisper@users.noreply.github.com> Co-authored-by: DrSmugleaf <10968691+DrSmugleaf@users.noreply.github.com> --- Content.Client/Entry/EntryPoint.cs | 6 + .../Explosion/RMCExplosionShockWaveOverlay.cs | 101 +++++++++++++++ .../Screech/RMCXenoScreechShockWaveOverlay.cs | 77 +++++++++++ .../ClientExplosionShockWaveSystem.cs | 21 +++ .../_Sunrise/Explosion/RMCExplosionSystem.cs | 82 ++++++++++++ .../Changeling/ChangelingSystem.Abilities.cs | 19 +++ Content.Server/Changeling/ChangelingSystem.cs | 9 ++ .../Effects/ExplosionReactionEffect.cs | 8 +- .../EntitySystems/ExplosionSystem.Visuals.cs | 10 +- .../EntitySystems/ExplosionSystem.cs | 12 +- .../_Sunrise/Explosions/RMCExplosionSystem.cs | 8 ++ .../Explosion/ExplosionPrototype.cs | 14 ++ .../Projectiles/SharedProjectileSystem.cs | 4 +- .../Weapons/Ranged/Systems/SharedGunSystem.cs | 2 +- .../Explosion/CMExplosionEffectComponent.cs | 44 +++++++ .../RMCExplosionShockWaveComponent.cs | 30 +++++ .../Explosion/SharedRMCExplosionSystem.cs | 122 ++++++++++++++++++ .../RMCXenoScreechShockWaveComponent.cs | 27 ++++ .../Xenonids/Screech/XenoScreechComponent.cs | 15 +++ .../Explosion/SharedSunriseExplosionSystem.cs | 35 +++++ .../_Sunrise/Helpers/CoordinatesHelpers.cs | 39 ++++++ .../Audio/_RMC14/Xeno/alien_queen_screech.ogg | Bin 0 -> 26593 bytes .../Objects/Weapons/Bombs/pipebomb.yml | 2 +- .../Entities/Structures/Machines/nuke.yml | 2 +- .../Prototypes/_RMC14/Effects/explosive.yml | 16 +++ .../Prototypes/_RMC14/Effects/screech.yml | 35 +++++ .../Prototypes/_RMC14/Shaders/shaders.yml | 9 ++ .../_Sunrise/Entities/Effects/explosion.yml | 11 ++ Resources/Prototypes/_Sunrise/explosion.yml | 14 ++ .../Effects/grenade_explosion.rsi/grenade.png | Bin 0 -> 7913 bytes .../Effects/grenade_explosion.rsi/meta.json | 26 ++++ .../_RMC14/Effects/xeno_screech.rsi/meta.json | 26 ++++ .../Effects/xeno_screech.rsi/screech.png | Bin 0 -> 2426 bytes .../_RMC14/Shaders/screech_shock_wave.swsl | 28 ++++ .../Textures/_RMC14/Shaders/shock_wave.swsl | 40 ++++++ .../Effects/explosion_smoke.rsi/dust.png | Bin 0 -> 13944 bytes .../Effects/explosion_smoke.rsi/fire.png | Bin 0 -> 16590 bytes .../Effects/explosion_smoke.rsi/gas.png | Bin 0 -> 12478 bytes .../Effects/explosion_smoke.rsi/meta.json | 25 ++++ .../Effects/explosion_smoke.rsi/smoke.png | Bin 0 -> 12423 bytes 40 files changed, 910 insertions(+), 9 deletions(-) create mode 100644 Content.Client/_RMC14/Explosion/RMCExplosionShockWaveOverlay.cs create mode 100644 Content.Client/_RMC14/Xenonids/Screech/RMCXenoScreechShockWaveOverlay.cs create mode 100644 Content.Client/_RMC14/_Sunrise/Explosion/ClientExplosionShockWaveSystem.cs create mode 100644 Content.Client/_RMC14/_Sunrise/Explosion/RMCExplosionSystem.cs create mode 100644 Content.Server/_Sunrise/Explosions/RMCExplosionSystem.cs create mode 100644 Content.Shared/_RMC14/Explosion/CMExplosionEffectComponent.cs create mode 100644 Content.Shared/_RMC14/Explosion/RMCExplosionShockWaveComponent.cs create mode 100644 Content.Shared/_RMC14/Explosion/SharedRMCExplosionSystem.cs create mode 100644 Content.Shared/_RMC14/Xenonids/Screech/RMCXenoScreechShockWaveComponent.cs create mode 100644 Content.Shared/_RMC14/Xenonids/Screech/XenoScreechComponent.cs create mode 100644 Content.Shared/_Sunrise/Explosion/SharedSunriseExplosionSystem.cs create mode 100644 Content.Shared/_Sunrise/Helpers/CoordinatesHelpers.cs create mode 100644 Resources/Audio/_RMC14/Xeno/alien_queen_screech.ogg create mode 100644 Resources/Prototypes/_RMC14/Effects/explosive.yml create mode 100644 Resources/Prototypes/_RMC14/Effects/screech.yml create mode 100644 Resources/Prototypes/_RMC14/Shaders/shaders.yml create mode 100644 Resources/Prototypes/_Sunrise/Entities/Effects/explosion.yml create mode 100644 Resources/Prototypes/_Sunrise/explosion.yml create mode 100644 Resources/Textures/_RMC14/Effects/grenade_explosion.rsi/grenade.png create mode 100644 Resources/Textures/_RMC14/Effects/grenade_explosion.rsi/meta.json create mode 100644 Resources/Textures/_RMC14/Effects/xeno_screech.rsi/meta.json create mode 100644 Resources/Textures/_RMC14/Effects/xeno_screech.rsi/screech.png create mode 100644 Resources/Textures/_RMC14/Shaders/screech_shock_wave.swsl create mode 100644 Resources/Textures/_RMC14/Shaders/shock_wave.swsl create mode 100644 Resources/Textures/_Sunrise/Effects/explosion_smoke.rsi/dust.png create mode 100644 Resources/Textures/_Sunrise/Effects/explosion_smoke.rsi/fire.png create mode 100644 Resources/Textures/_Sunrise/Effects/explosion_smoke.rsi/gas.png create mode 100644 Resources/Textures/_Sunrise/Effects/explosion_smoke.rsi/meta.json create mode 100644 Resources/Textures/_Sunrise/Effects/explosion_smoke.rsi/smoke.png diff --git a/Content.Client/Entry/EntryPoint.cs b/Content.Client/Entry/EntryPoint.cs index f42c2d27fb..d47d040259 100644 --- a/Content.Client/Entry/EntryPoint.cs +++ b/Content.Client/Entry/EntryPoint.cs @@ -1,3 +1,5 @@ +using Content.Client._RMC14.Explosion; +using Content.Client._RMC14.Xenonids.Screech; using Content.Client._Sunrise.Entry; using Content.Client._Sunrise.ServersHub; using Content.Client.Administration.Managers; @@ -174,6 +176,10 @@ namespace Content.Client.Entry _parallaxManager.LoadDefaultParallax(); _overlayManager.AddOverlay(new SingularityOverlay()); + // Sunrise edit start + _overlayManager.AddOverlay(new RMCExplosionShockWaveOverlay()); + _overlayManager.AddOverlay(new RMCXenoScreechShockWaveOverlay()); + // Sunrise edit end _overlayManager.AddOverlay(new RadiationPulseOverlay()); _chatManager.Initialize(); _clientPreferencesManager.Initialize(); diff --git a/Content.Client/_RMC14/Explosion/RMCExplosionShockWaveOverlay.cs b/Content.Client/_RMC14/Explosion/RMCExplosionShockWaveOverlay.cs new file mode 100644 index 0000000000..c408fc6ec6 --- /dev/null +++ b/Content.Client/_RMC14/Explosion/RMCExplosionShockWaveOverlay.cs @@ -0,0 +1,101 @@ +using System.Numerics; +using Content.Shared._RMC14.Explosion.Components; +using Robust.Client.Graphics; +using Robust.Shared.Enums; +using Robust.Shared.Prototypes; +using Robust.Shared.Timing; + +namespace Content.Client._RMC14.Explosion; + +public sealed class RMCExplosionShockWaveOverlay : Overlay, IEntityEventSubscriber +{ + [Dependency] private readonly IEntityManager _entMan = default!; + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + [Dependency] private readonly IGameTiming _timing = default!; + + private SharedTransformSystem? _xformSystem; + + public override OverlaySpace Space => OverlaySpace.WorldSpace; + public override bool RequestScreenTexture => true; + + private readonly ShaderInstance _shader; + + /// + /// Maximum number of distortions that can be shown on screen at a time. + /// + public const int MaxCount = 10; + + public RMCExplosionShockWaveOverlay() + { + IoCManager.InjectDependencies(this); + _shader = _prototypeManager.Index("RMCShockWave").Instance().Duplicate(); + } + + private readonly Vector2[] _positions = new Vector2[MaxCount]; + private readonly float[] _falloffPower = new float[MaxCount]; + private readonly float[] _sharpness = new float[MaxCount]; + private readonly float[] _width = new float[MaxCount]; + private readonly float[] _times = new float[MaxCount]; + private int _count; + + private readonly TimeSpan _timeCompensation = TimeSpan.FromSeconds(0.2f); + + protected override bool BeforeDraw(in OverlayDrawArgs args) + { + if (args.Viewport.Eye == null || _xformSystem is null && !_entMan.TrySystem(out _xformSystem)) + return false; + + var query = _entMan.EntityQueryEnumerator(); + + _count = 0; + + while (query.MoveNext(out var uid, out var distortion, out var xform)) + { + if (xform.MapID != args.MapId) + continue; + + var mapPos = _xformSystem.GetWorldPosition(uid); + + var tempCoords = args.Viewport.WorldToLocal(mapPos); + + // normalized coords, 0 - 1 plane. This is pure hell, we subtract 1 because fragment calculates from the bottom and local goes from the top of the viewport + tempCoords.Y = 1 - (tempCoords.Y / args.Viewport.Size.Y); + tempCoords.X /= args.Viewport.Size.X; + + var currentTime = (float)(_timing.CurTime - distortion.CreationTime - _timeCompensation).TotalSeconds; + currentTime = Math.Clamp(currentTime, 0.1f, float.MaxValue); + + _positions[_count] = tempCoords; + _falloffPower[_count] = distortion.FalloffPower ?? 20f; // Sunrise edit - фолбек + _sharpness[_count] = distortion.Sharpness; + _width[_count] = distortion.Width ?? 0.8f; + _times[_count] = currentTime; + _count++; + + if (_count == MaxCount) + break; + } + + return _count > 0; + } + + protected override void Draw(in OverlayDrawArgs args) + { + if (ScreenTexture == null || args.Viewport.Eye == null) + return; + + _shader?.SetParameter("renderScale", args.Viewport.RenderScale * args.Viewport.Eye.Scale); + _shader?.SetParameter("count", _count); + _shader?.SetParameter("position", _positions); + _shader?.SetParameter("falloffPower", _falloffPower); + _shader?.SetParameter("sharpness", _sharpness); + _shader?.SetParameter("width", _width); + _shader?.SetParameter("time", _times); + _shader?.SetParameter("SCREEN_TEXTURE", ScreenTexture); + + var worldHandle = args.WorldHandle; + worldHandle.UseShader(_shader); + worldHandle.DrawRect(args.WorldBounds, Color.White); + worldHandle.UseShader(null); + } +} diff --git a/Content.Client/_RMC14/Xenonids/Screech/RMCXenoScreechShockWaveOverlay.cs b/Content.Client/_RMC14/Xenonids/Screech/RMCXenoScreechShockWaveOverlay.cs new file mode 100644 index 0000000000..daaa8fe312 --- /dev/null +++ b/Content.Client/_RMC14/Xenonids/Screech/RMCXenoScreechShockWaveOverlay.cs @@ -0,0 +1,77 @@ +using System.Numerics; +using Content.Shared._RMC14.Xenonids.Screech; +using Robust.Client.Graphics; +using Robust.Shared.Enums; +using Robust.Shared.Prototypes; + +namespace Content.Client._RMC14.Xenonids.Screech; + +public sealed class RMCXenoScreechShockWaveOverlay : Overlay, IEntityEventSubscriber +{ + [Dependency] private readonly IEntityManager _entMan = default!; + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + + private SharedTransformSystem? _xformSystem; + + public override OverlaySpace Space => OverlaySpace.WorldSpace; + public override bool RequestScreenTexture => true; + + private readonly ShaderInstance _shader; + + public RMCXenoScreechShockWaveOverlay() + { + IoCManager.InjectDependencies(this); + _shader = _prototypeManager.Index("RMCXenoScreechShockWave").Instance().Duplicate(); + } + + private Vector2 _position; + private float _waveStrength; + private float _waveSpeed; + private float _downScale; + protected override bool BeforeDraw(in OverlayDrawArgs args) + { + if (args.Viewport.Eye == null || _xformSystem is null && !_entMan.TrySystem(out _xformSystem)) + return false; + + var query = _entMan.EntityQueryEnumerator(); + + if (query.MoveNext(out var uid, out var distortion, out var xform)) + { + if (xform.MapID != args.MapId) + return false; + + var mapPos = _xformSystem.GetWorldPosition(uid); + var tempCoords = args.Viewport.WorldToLocal(mapPos); + + // normalized coords, 0 - 1 plane. This is pure hell, we subtract 1 because fragment calculates from the bottom and local goes from the top of the viewport + tempCoords.Y = 1 - (tempCoords.Y / args.Viewport.Size.Y); + tempCoords.X /= args.Viewport.Size.X; + + _position = tempCoords; + _waveStrength = distortion.WaveStrength; + _waveSpeed = distortion.WaveSpeed; + _downScale = distortion.DownScale; + + return true; + } + + return false; + } + + protected override void Draw(in OverlayDrawArgs args) + { + if (ScreenTexture == null || args.Viewport.Eye == null) + return; + + _shader?.SetParameter("position", _position); + _shader?.SetParameter("waveSpeed", _waveSpeed); + _shader?.SetParameter("downScale", _downScale); + _shader?.SetParameter("waveStrength", _waveStrength); + _shader?.SetParameter("SCREEN_TEXTURE", ScreenTexture); + + var worldHandle = args.WorldHandle; + worldHandle.UseShader(_shader); + worldHandle.DrawRect(args.WorldBounds, Color.White); + worldHandle.UseShader(null); + } +} diff --git a/Content.Client/_RMC14/_Sunrise/Explosion/ClientExplosionShockWaveSystem.cs b/Content.Client/_RMC14/_Sunrise/Explosion/ClientExplosionShockWaveSystem.cs new file mode 100644 index 0000000000..063ca10db2 --- /dev/null +++ b/Content.Client/_RMC14/_Sunrise/Explosion/ClientExplosionShockWaveSystem.cs @@ -0,0 +1,21 @@ +using Content.Shared._RMC14.Explosion.Components; +using Robust.Shared.Timing; + +namespace Content.Client._RMC14._Sunrise.Explosion; + +public sealed class ClientExplosionShockWaveSystem : EntitySystem +{ + [Dependency] private readonly IGameTiming _timing = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnInit); + } + + private void OnInit(Entity ent, ref ComponentInit args) + { + ent.Comp.CreationTime = _timing.CurTime; + } +} diff --git a/Content.Client/_RMC14/_Sunrise/Explosion/RMCExplosionSystem.cs b/Content.Client/_RMC14/_Sunrise/Explosion/RMCExplosionSystem.cs new file mode 100644 index 0000000000..f2b47ac5c8 --- /dev/null +++ b/Content.Client/_RMC14/_Sunrise/Explosion/RMCExplosionSystem.cs @@ -0,0 +1,82 @@ +using System.Numerics; +using Content.Shared._RMC14.Explosion; +using Robust.Client.Animations; +using Robust.Client.GameObjects; +using Robust.Shared.Animations; +using Robust.Shared.Random; + +namespace Content.Client._RMC14._Sunrise.Explosion; + +// Омг это же партикл систем за 1$ +public sealed class RMCExplosionSystem : SharedRMCExplosionSystem +{ + [Dependency] private readonly SpriteSystem _sprite = default!; + [Dependency] private readonly AnimationPlayerSystem _player = default!; + [Dependency] private readonly IRobustRandom _random = default!; + + private const string SmokeTrack = "smoke-animation"; + private const string ExplosionTrack = "explosion-animation"; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnSmokeStartup); + SubscribeLocalEvent(OnExplosionStartup); + } + + private void OnSmokeStartup(Entity ent, ref ComponentStartup args) + { + if (!TryComp(ent, out var sprite)) + return; + + var targetX = 2f + _random.NextFloat(-ExplosionSmokeEffectComponent.Variation, ExplosionSmokeEffectComponent.Variation); + var targetY = 2f + _random.NextFloat(-ExplosionSmokeEffectComponent.Variation, ExplosionSmokeEffectComponent.Variation); + + var animation = new Animation() + { + Length = TimeSpan.FromSeconds(ent.Comp.LifeTime), + AnimationTracks = + { + new AnimationTrackComponentProperty() + { + Property = nameof(SpriteComponent.Offset), + ComponentType = typeof(SpriteComponent), + InterpolationMode = AnimationInterpolationMode.Linear, + KeyFrames = + { + new AnimationTrackProperty.KeyFrame(sprite.Offset, 0f), + new AnimationTrackProperty.KeyFrame(new Vector2(targetX, targetY), ent.Comp.LifeTime), + }, + }, + new AnimationTrackComponentProperty() + { + Property = nameof(SpriteComponent.Color), + ComponentType = typeof(SpriteComponent), + InterpolationMode = AnimationInterpolationMode.Linear, + KeyFrames = + { + new AnimationTrackProperty.KeyFrame(sprite.Color, 0f), + new AnimationTrackProperty.KeyFrame(GetTransparentColor(sprite.Color), ent.Comp.LifeTime), + }, + }, + }, + }; + + _player.Play(ent, animation, SmokeTrack); + } + + private void OnExplosionStartup(Entity ent, ref ComponentStartup args) + { + if (!TryComp(ent, out var sprite)) + return; + + sprite.Scale = new Vector2(ent.Comp.SizeModifier); + _sprite.SetAutoAnimateSync(sprite, ent.Comp.LifeTime); + } + + private static Color GetTransparentColor(Color color) + { + return new Color(color.R, color.G, color.B, 0f); + } +} diff --git a/Content.Server/Changeling/ChangelingSystem.Abilities.cs b/Content.Server/Changeling/ChangelingSystem.Abilities.cs index ec25d1127b..a1fa1a904e 100644 --- a/Content.Server/Changeling/ChangelingSystem.Abilities.cs +++ b/Content.Server/Changeling/ChangelingSystem.Abilities.cs @@ -20,6 +20,8 @@ using Content.Shared.Stealth.Components; using Content.Shared.Damage.Components; using Content.Server.Radio.Components; using Content.Shared._Sunrise.CollectiveMind; +using Content.Shared._RMC14.Xenonids.Screech; +using Content.Shared.Coordinates; namespace Content.Server.Changeling; @@ -263,6 +265,10 @@ public sealed partial class ChangelingSystem : EntitySystem _popup.PopupEntity(Loc.GetString("changeling-stasis-exit"), uid, uid); + // Sunrise edit start + StartScreech(uid); + // Sunrise edit end + comp.IsInStasis = false; args.Handled = true; @@ -637,4 +643,17 @@ public sealed partial class ChangelingSystem : EntitySystem } #endregion + + // Sunrise edit start + private void StartScreech(EntityUid uid, XenoScreechComponent? component = null, bool playSound = true) + { + if (!Resolve(uid, ref component)) + return; + + if (playSound) + _audio.PlayPvs(component.Sound, uid); + + SpawnAttachedTo(component.Effect, uid.ToCoordinates()); + } + // Sunrise edit end } diff --git a/Content.Server/Changeling/ChangelingSystem.cs b/Content.Server/Changeling/ChangelingSystem.cs index 2fdd9a1d27..bec0bfc385 100644 --- a/Content.Server/Changeling/ChangelingSystem.cs +++ b/Content.Server/Changeling/ChangelingSystem.cs @@ -55,6 +55,7 @@ using Content.Shared.Mobs.Components; using Content.Server.Stunnable; using Content.Shared.Jittering; using System.Linq; +using Content.Shared._RMC14.Xenonids.Screech; using Content.Shared.Forensics.Components; using Content.Shared.Radio; @@ -266,6 +267,10 @@ public sealed partial class ChangelingSystem : EntitySystem { _audio.PlayPvs(comp.ShriekSound, uid); + // Sunrise edit start + StartScreech(uid, playSound: false); + // Sunrise edit end + var center = Transform(uid).MapPosition; var gamers = Filter.Empty(); gamers.AddInRange(center, comp.ShriekPower, _player, EntityManager); @@ -607,6 +612,10 @@ public sealed partial class ChangelingSystem : EntitySystem RemComp(uid); EnsureComp(uid); + // Sunrise edit start + EnsureComp(uid); + // Sunrise edit end + // add actions foreach (var actionId in comp.BaseChangelingActions) _actions.AddAction(uid, actionId); diff --git a/Content.Server/EntityEffects/Effects/ExplosionReactionEffect.cs b/Content.Server/EntityEffects/Effects/ExplosionReactionEffect.cs index 24c58898c6..0a378ef230 100644 --- a/Content.Server/EntityEffects/Effects/ExplosionReactionEffect.cs +++ b/Content.Server/EntityEffects/Effects/ExplosionReactionEffect.cs @@ -5,6 +5,7 @@ using Content.Shared.Explosion; using Robust.Shared.Prototypes; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; using System.Text.Json.Serialization; +using Content.Shared._Sunrise.Explosion; namespace Content.Server.EntityEffects.Effects; @@ -45,7 +46,7 @@ public sealed partial class ExplosionReactionEffect : EntityEffect /// [DataField] public float IntensityPerUnit = 1; - + /// /// Factor used to scale the explosion intensity when calculating tile break chances. Allows for stronger /// explosives that don't space tiles, without having to create a new explosion-type prototype. @@ -68,6 +69,11 @@ public sealed partial class ExplosionReactionEffect : EntityEffect intensity = MathF.Min((float) reagentArgs.Quantity * IntensityPerUnit, MaxTotalIntensity); } + // Sunrise edit start + args.EntityManager.System() + .TryAddExplosionEffect(args.TargetEntity, ExplosionType); + // Sunrise edit end + args.EntityManager.System() .QueueExplosion( args.TargetEntity, diff --git a/Content.Server/Explosion/EntitySystems/ExplosionSystem.Visuals.cs b/Content.Server/Explosion/EntitySystems/ExplosionSystem.Visuals.cs index 57323e4de7..f2bd914f61 100644 --- a/Content.Server/Explosion/EntitySystems/ExplosionSystem.Visuals.cs +++ b/Content.Server/Explosion/EntitySystems/ExplosionSystem.Visuals.cs @@ -37,9 +37,15 @@ public sealed partial class ExplosionSystem /// /// Constructor for the shared using the server-exclusive explosion classes. /// - private EntityUid CreateExplosionVisualEntity(MapCoordinates epicenter, string prototype, Matrix3x2 spaceMatrix, ExplosionSpaceTileFlood? spaceData, IEnumerable gridData, List iterationIntensity) + private EntityUid CreateExplosionVisualEntity(MapCoordinates epicenter, ExplosionPrototype prototype, Matrix3x2 spaceMatrix, ExplosionSpaceTileFlood? spaceData, IEnumerable gridData, List iterationIntensity) { var explosionEntity = Spawn(null, MapCoordinates.Nullspace); + + // Sunrise added start + if (prototype.EffectType != ExplosionEffectType.Standard) + return explosionEntity; + // Sunrise added end + var comp = AddComp(explosionEntity); foreach (var grid in gridData) @@ -49,7 +55,7 @@ public sealed partial class ExplosionSystem comp.SpaceTiles = spaceData?.TileLists; comp.Epicenter = epicenter; - comp.ExplosionType = prototype; + comp.ExplosionType = prototype.ID; // Sunrise edit comp.Intensity = iterationIntensity; comp.SpaceMatrix = spaceMatrix; comp.SpaceTileSize = spaceData?.TileSize ?? DefaultTileSize; diff --git a/Content.Server/Explosion/EntitySystems/ExplosionSystem.cs b/Content.Server/Explosion/EntitySystems/ExplosionSystem.cs index beffbd6d68..43cca7a962 100644 --- a/Content.Server/Explosion/EntitySystems/ExplosionSystem.cs +++ b/Content.Server/Explosion/EntitySystems/ExplosionSystem.cs @@ -5,6 +5,7 @@ using Content.Server.Atmos.Components; using Content.Server.Chat.Managers; using Content.Server.NodeContainer.EntitySystems; using Content.Server.NPC.Pathfinding; +using Content.Shared._RMC14.Explosion; using Content.Shared.Camera; using Content.Shared.CCVar; using Content.Shared.Damage; @@ -319,6 +320,14 @@ public sealed partial class ExplosionSystem : SharedExplosionSystem }; _explosionQueue.Enqueue(boom); _queuedExplosions.Add(boom); + + // Sunrise added start + if (!cause.HasValue) + return; + + var ev = new CMExplosiveTriggeredEvent(); + RaiseLocalEvent(cause.Value, ref ev); + // Sunrise added end } /// @@ -339,7 +348,8 @@ public sealed partial class ExplosionSystem : SharedExplosionSystem var (area, iterationIntensity, spaceData, gridData, spaceMatrix) = results.Value; - var visualEnt = CreateExplosionVisualEntity(pos, queued.Proto.ID, spaceMatrix, spaceData, gridData.Values, iterationIntensity); + // Sunrise edit - queued.Proto.ID -> queued.Proto + var visualEnt = CreateExplosionVisualEntity(pos, queued.Proto, spaceMatrix, spaceData, gridData.Values, iterationIntensity); // camera shake CameraShake(iterationIntensity.Count * 4f, pos, queued.TotalIntensity); diff --git a/Content.Server/_Sunrise/Explosions/RMCExplosionSystem.cs b/Content.Server/_Sunrise/Explosions/RMCExplosionSystem.cs new file mode 100644 index 0000000000..090c0bc683 --- /dev/null +++ b/Content.Server/_Sunrise/Explosions/RMCExplosionSystem.cs @@ -0,0 +1,8 @@ +using Content.Shared._RMC14.Explosion; + +namespace Content.Server._Sunrise.Explosions; + +public sealed class RMCExplosionSystem : SharedRMCExplosionSystem +{ + +} diff --git a/Content.Shared/Explosion/ExplosionPrototype.cs b/Content.Shared/Explosion/ExplosionPrototype.cs index df2fb18360..cbc6836249 100644 --- a/Content.Shared/Explosion/ExplosionPrototype.cs +++ b/Content.Shared/Explosion/ExplosionPrototype.cs @@ -1,6 +1,7 @@ using Content.Shared.Damage; using Robust.Shared.Audio; using Robust.Shared.Prototypes; +using Robust.Shared.Serialization; using Robust.Shared.Utility; namespace Content.Shared.Explosion; @@ -110,6 +111,11 @@ public sealed partial class ExplosionPrototype : IPrototype [DataField("fireStates")] public int FireStates = 3; + // Sunrise added start + [DataField] + public ExplosionEffectType EffectType = ExplosionEffectType.Fancy; + // Sunrise added end + /// /// Basic function for linear interpolation of the _tileBreakChance and _tileBreakIntensity arrays /// @@ -133,3 +139,11 @@ public sealed partial class ExplosionPrototype : IPrototype return _tileBreakChance[i - 1] + slope * (intensity - _tileBreakIntensity[i - 1]); } } + +[Serializable, NetSerializable] +public enum ExplosionEffectType : byte +{ + Standard, + Fancy, +} + diff --git a/Content.Shared/Projectiles/SharedProjectileSystem.cs b/Content.Shared/Projectiles/SharedProjectileSystem.cs index be86fd1af2..5ae7a80c19 100644 --- a/Content.Shared/Projectiles/SharedProjectileSystem.cs +++ b/Content.Shared/Projectiles/SharedProjectileSystem.cs @@ -193,9 +193,9 @@ public abstract partial class SharedProjectileSystem : EntitySystem } } - public void SetShooter(EntityUid id, ProjectileComponent component, EntityUid shooterId) + public void SetShooter(EntityUid id, ProjectileComponent component, EntityUid? shooterId = null) { - if (component.Shooter == shooterId) + if (component.Shooter == shooterId || shooterId == null) return; component.Shooter = shooterId; diff --git a/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs b/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs index 426fe84c1c..4b7af890f7 100644 --- a/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs +++ b/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs @@ -484,7 +484,7 @@ public abstract partial class SharedGunSystem : EntitySystem Physics.SetLinearVelocity(uid, finalLinear, body: physics); var projectile = EnsureComp(uid); - Projectiles.SetShooter(uid, projectile, user ?? gunUid); + Projectiles.SetShooter(uid, projectile, user); projectile.Weapon = gunUid; // Sunrise-Start diff --git a/Content.Shared/_RMC14/Explosion/CMExplosionEffectComponent.cs b/Content.Shared/_RMC14/Explosion/CMExplosionEffectComponent.cs new file mode 100644 index 0000000000..dcd75d6264 --- /dev/null +++ b/Content.Shared/_RMC14/Explosion/CMExplosionEffectComponent.cs @@ -0,0 +1,44 @@ +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; + +namespace Content.Shared._RMC14.Explosion; + +[RegisterComponent, NetworkedComponent] +[Access(typeof(SharedRMCExplosionSystem))] +public sealed partial class CMExplosionEffectComponent : Component +{ + [DataField] + public EntProtoId? Explosion = "CMExplosionEffectGrenade"; + + [DataField] + public EntProtoId? ShockWave = "RMCExplosionEffectGrenadeShockWave"; + + // Sunrise added + [DataField] + public EntProtoId? Smoke = "ExplosionEffectSmoke"; + // Sunrise added +} + +// Sunrise added start +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class ExplosionSmokeEffectComponent : Component +{ + public const float AnimationDuration = 2.5f; + public const float Variation = 1f; + + [DataField, AutoNetworkedField] + public float LifeTime = AnimationDuration; +} + +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class ExplosionEffectComponent : Component +{ + public const float AnimationDuration = 2.5f; + + [DataField, AutoNetworkedField] + public float LifeTime = AnimationDuration; + + [DataField, AutoNetworkedField] + public float SizeModifier = 2f; +} +// Sunrise added end diff --git a/Content.Shared/_RMC14/Explosion/RMCExplosionShockWaveComponent.cs b/Content.Shared/_RMC14/Explosion/RMCExplosionShockWaveComponent.cs new file mode 100644 index 0000000000..c8776a1bfc --- /dev/null +++ b/Content.Shared/_RMC14/Explosion/RMCExplosionShockWaveComponent.cs @@ -0,0 +1,30 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared._RMC14.Explosion.Components +{ + [RegisterComponent, NetworkedComponent] + [AutoGenerateComponentState] + public sealed partial class RMCExplosionShockWaveComponent : Component + { + /// + /// The rate at which the wave fades, lower values means it's active for longer. + /// + [DataField, AutoNetworkedField, ViewVariables(VVAccess.ReadWrite)] + public float? FalloffPower = 20f; + + /// + /// How sharp the wave distortion is. Higher values make the wave more pronounced. + /// + [DataField, AutoNetworkedField, ViewVariables(VVAccess.ReadWrite)] + public float Sharpness = 5.0f; + + /// + /// Width of the wave. + /// + [DataField, AutoNetworkedField, ViewVariables(VVAccess.ReadWrite)] + public float? Width = 0.8f; + + [DataField] + public TimeSpan CreationTime; + } +} diff --git a/Content.Shared/_RMC14/Explosion/SharedRMCExplosionSystem.cs b/Content.Shared/_RMC14/Explosion/SharedRMCExplosionSystem.cs new file mode 100644 index 0000000000..31cc1d5181 --- /dev/null +++ b/Content.Shared/_RMC14/Explosion/SharedRMCExplosionSystem.cs @@ -0,0 +1,122 @@ +using Content.Shared._RMC14.Explosion.Components; +using Content.Shared._Sunrise.Helpers; +using Content.Shared.Explosion.Components; +using Robust.Shared.Prototypes; +using Robust.Shared.Random; +using Robust.Shared.Spawners; + +namespace Content.Shared._RMC14.Explosion; + +public abstract class SharedRMCExplosionSystem : EntitySystem +{ + [Dependency] private readonly IRobustRandom _random = default!; + + private const float MinSmokeCountPer100 = 12f; + private const float MaxSmokeCountPer100 = 17f; + + private const float SmokeSpawnRadiusPer100 = 2f; + + public override void Initialize() + { + SubscribeLocalEvent(OnExplosionEffectTriggered); + } + + private void OnExplosionEffectTriggered(Entity ent, ref CMExplosiveTriggeredEvent args) + { + DoEffect(ent); + } + + // Sunrise edit start + public void DoEffect(Entity ent) + { + if (!TryComp(ent, out var explosionComponent)) + return; + + if (ent.Comp.ShockWave is { } shockwave) + { + var wave = SpawnNextToOrDrop(shockwave, ent); + ModifyShockwave(wave, explosionComponent); + } + + if (ent.Comp.Explosion is { } explosion) + { + var explosionEntity = SpawnNextToOrDrop(explosion, ent); + CreateFancyExplosionEffect(explosionEntity, explosionComponent); + } + + if (ent.Comp.Smoke is { } smoke) + CreateFancySmoke(ent, explosionComponent, smoke); + } + + private void ModifyShockwave(EntityUid wave, ExplosiveComponent explosionComponent) + { + // Дальше идут просто числа, которые я придумал особо не думая, мб нужно подумать + // Но идея в том, чтобы чем сильнее взрыв, тем сильнее эффект и наоборот + // TODO: Реализовать радиус действия волны и убрать стандартные значения в компоненте + + if (TryComp(wave, out var waveComponent)) + { + waveComponent.FalloffPower ??= explosionComponent.TotalIntensity / 4f; + waveComponent.Width ??= Math.Clamp(explosionComponent.TotalIntensity / 200f, 0.1f, 0.5f); + + Dirty(wave, waveComponent); + } + + if (TryComp(wave, out var timedDespawnComponent)) + timedDespawnComponent.Lifetime = Math.Clamp(explosionComponent.TotalIntensity / 50f, 0.1f, 0.8f); + } + + private void CreateFancyExplosionEffect(EntityUid explosionEntity, ExplosiveComponent explosionComponent) + { + if (!TryComp(explosionEntity, out var timedDespawnComponent)) + return; + + if (!TryComp(explosionEntity, out var explosionEffectComponent)) + return; + + var sizeModifier = Math.Clamp(explosionComponent.TotalIntensity / 50f, 1f, 12f); + explosionEffectComponent.SizeModifier = sizeModifier; + explosionEffectComponent.LifeTime = timedDespawnComponent.Lifetime; + + Dirty(explosionEntity, explosionEffectComponent); + } + + private void CreateFancySmoke(Entity ent, ExplosiveComponent explosionComponent, EntProtoId smokeId) + { + var modifier = explosionComponent.TotalIntensity / 100f; + + var smokeCount = _random.NextFloat(MinSmokeCountPer100 * modifier, MaxSmokeCountPer100 * modifier); + var coords = Transform(ent).Coordinates; + var modifiedRadius = Math.Clamp(SmokeSpawnRadiusPer100 * modifier, 2f, 10f); + + for (var i = 0; i < smokeCount; i++) + { + var smoke = Spawn(smokeId, coords.GetRandomInRadius(modifiedRadius)); + + if (!TryComp(smoke, out var timedDespawnComponent)) + continue; + + if (!TryComp(smoke, out var explosionSmokeEffectComponent)) + continue; + + timedDespawnComponent.Lifetime = ExplosionSmokeEffectComponent.AnimationDuration + _random.NextFloat(-ExplosionSmokeEffectComponent.Variation, ExplosionSmokeEffectComponent.Variation); + + // Это нужно, чтобы анимация на клиенте знала, когда мы решили заканчиваться + explosionSmokeEffectComponent.LifeTime = timedDespawnComponent.Lifetime; + Dirty(smoke, explosionSmokeEffectComponent); + } + } + // Sunrise edit end + + public void TryDoEffect(Entity ent) + { + if (!Resolve(ent, ref ent.Comp, false)) + return; + + DoEffect((ent, ent.Comp)); + } +} + +[ByRefEvent] +public readonly record struct CMExplosiveTriggeredEvent; + diff --git a/Content.Shared/_RMC14/Xenonids/Screech/RMCXenoScreechShockWaveComponent.cs b/Content.Shared/_RMC14/Xenonids/Screech/RMCXenoScreechShockWaveComponent.cs new file mode 100644 index 0000000000..f78caa9d12 --- /dev/null +++ b/Content.Shared/_RMC14/Xenonids/Screech/RMCXenoScreechShockWaveComponent.cs @@ -0,0 +1,27 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared._RMC14.Xenonids.Screech; + +[RegisterComponent, NetworkedComponent] +[AutoGenerateComponentState] +public sealed partial class RMCXenoScreechShockWaveComponent : Component +{ + /// + /// The speed of each individual wave from the center axis. + /// + [DataField, AutoNetworkedField, ViewVariables(VVAccess.ReadWrite)] + public float WaveSpeed = 15.3f; + + /// + /// The size of each wave in its width and distortion effect + /// + [DataField, AutoNetworkedField, ViewVariables(VVAccess.ReadWrite)] + public float WaveStrength = 1.0f; + + /// + /// The scale of the effect, lower number means a larger total area while smaller numbers downscale it and reduce the effected area. + /// + [DataField, AutoNetworkedField, ViewVariables(VVAccess.ReadWrite)] + public float DownScale = 1f; +} + diff --git a/Content.Shared/_RMC14/Xenonids/Screech/XenoScreechComponent.cs b/Content.Shared/_RMC14/Xenonids/Screech/XenoScreechComponent.cs new file mode 100644 index 0000000000..08905ed73c --- /dev/null +++ b/Content.Shared/_RMC14/Xenonids/Screech/XenoScreechComponent.cs @@ -0,0 +1,15 @@ +using Robust.Shared.Audio; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; + +namespace Content.Shared._RMC14.Xenonids.Screech; + +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class XenoScreechComponent : Component +{ + [DataField, AutoNetworkedField] + public EntProtoId Effect = "CMEffectScreechShort"; + + [DataField, AutoNetworkedField] + public SoundSpecifier Sound = new SoundPathSpecifier("/Audio/_RMC14/Xeno/alien_queen_screech.ogg", AudioParams.Default.WithVolume(-7).WithPlayOffset(1.4f)); +} diff --git a/Content.Shared/_Sunrise/Explosion/SharedSunriseExplosionSystem.cs b/Content.Shared/_Sunrise/Explosion/SharedSunriseExplosionSystem.cs new file mode 100644 index 0000000000..8a79e68a07 --- /dev/null +++ b/Content.Shared/_Sunrise/Explosion/SharedSunriseExplosionSystem.cs @@ -0,0 +1,35 @@ +using Content.Shared._RMC14.Explosion; +using Content.Shared.Explosion; +using Content.Shared.Explosion.Components; +using Robust.Shared.Prototypes; + +namespace Content.Shared._Sunrise.Explosion; + +public sealed class SharedSunriseExplosionSystem : EntitySystem +{ + [Dependency] private readonly IPrototypeManager _prototype = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnInit); + } + + private void OnInit(Entity ent, ref ComponentInit args) + { + TryAddExplosionEffect(ent, ent.Comp.ExplosionType); + } + + public bool TryAddExplosionEffect(EntityUid uid, string explosionType) + { + if (!_prototype.TryIndex(explosionType, out var explosionPrototype)) + return false; + + if (explosionPrototype.EffectType != ExplosionEffectType.Fancy) + return false; + + EnsureComp(uid); + return true; + } +} diff --git a/Content.Shared/_Sunrise/Helpers/CoordinatesHelpers.cs b/Content.Shared/_Sunrise/Helpers/CoordinatesHelpers.cs new file mode 100644 index 0000000000..fe97f3d28e --- /dev/null +++ b/Content.Shared/_Sunrise/Helpers/CoordinatesHelpers.cs @@ -0,0 +1,39 @@ +using System.Numerics; +using Robust.Shared.Map; +using Robust.Shared.Random; + +namespace Content.Shared._Sunrise.Helpers; + +public static class EntityCoordinatesExtensions +{ + /// + /// Генерирует случайные координаты в заданном радиусе от исходных координат. + /// + /// Исходные координаты. + /// Радиус для генерации случайной точки. + /// Опциональный экземпляр Random для контроля генерации. + /// Новые координаты в пределах радиуса. + public static EntityCoordinates GetRandomInRadius(this EntityCoordinates origin, float radius, IRobustRandom? rand = null) + { + if (radius < 0) + throw new ArgumentOutOfRangeException(nameof(radius), "Radius cannot be negative."); + + if (radius == 0) + return origin; + + rand ??= IoCManager.Resolve(); + + // Генерируем угол и расстояние. + var angle = rand.NextDouble() * Math.Tau; // 0..2π + var distance = Math.Sqrt(rand.NextDouble()) * radius; // Равномерное распределение + + // Преобразуем в декартовы координаты. + var x = (float)(distance * Math.Cos(angle)); + var y = (float)(distance * Math.Sin(angle)); + + // Смещаем относительно исходной позиции. + var newPosition = origin.Position + new Vector2(x, y); + + return new EntityCoordinates(origin.EntityId, newPosition); + } +} diff --git a/Resources/Audio/_RMC14/Xeno/alien_queen_screech.ogg b/Resources/Audio/_RMC14/Xeno/alien_queen_screech.ogg new file mode 100644 index 0000000000000000000000000000000000000000..1fb9ccd531a37279c230b282172664d575ffe634 GIT binary patch literal 26593 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 TV*(qn00000NkvXXu0mjfv~5lo literal 0 HcmV?d00001 diff --git a/Resources/Textures/_RMC14/Effects/grenade_explosion.rsi/meta.json b/Resources/Textures/_RMC14/Effects/grenade_explosion.rsi/meta.json new file mode 100644 index 0000000000..faef7a9557 --- /dev/null +++ b/Resources/Textures/_RMC14/Effects/grenade_explosion.rsi/meta.json @@ -0,0 +1,26 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from cmss13 at https://github.com/cmss13-devs/cmss13/blob/add6123ac6b3263f257e4b233ef5a8fea5d3d317/icons/effects/explosion.dmi", + "size": { + "x": 48, + "y": 48 + }, + "states": [ + { + "name": "grenade", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/_RMC14/Effects/xeno_screech.rsi/meta.json b/Resources/Textures/_RMC14/Effects/xeno_screech.rsi/meta.json new file mode 100644 index 0000000000..0d9e8d5bad --- /dev/null +++ b/Resources/Textures/_RMC14/Effects/xeno_screech.rsi/meta.json @@ -0,0 +1,26 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from cmss13 at https://github.com/cmss13-devs/cmss13/blob/d5b119380250ea512db2a5319e36592c7f604250/icons/effects/xeno_screech.dmi", + "size": { + "x": 64, + "y": 64 + }, + "states": [ + { + "name": "screech", + "delays": [ + [ + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2 + ] + ] + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/_RMC14/Effects/xeno_screech.rsi/screech.png b/Resources/Textures/_RMC14/Effects/xeno_screech.rsi/screech.png new file mode 100644 index 0000000000000000000000000000000000000000..e93bed0eab975c891358228d87ff9f817bf6b4c6 GIT binary patch literal 2426 zcmajhdoC47Z9}JOOMgB4ALG5; z!z{_#@+FjmOp~>ZWQ3@lgl(ir*4N^r=KM-USBP``3k^icl`oYoNQ8REO84R^?y?hV zd_x#{fLGNe{W=6_y&dX_@L-jQpH4>3r;F@pABen9>*^+=b=SFOkk-3az+5kL<$1+Z z8wGMjVBaE)v@199j62S2=9-@ArPRD_J{M+B*>;fRl7eQ+;LZ zQ)rY_bsoD~?5p@j1sKwIn1phVC!0xDR;X_ouX;slODkuG8$I&abz&ZGoqL>x#L>-p z1;a)fJ6RQmKUt~tGHDz2PsFDB=6!2z-9t_^%Y>oGA3#AFpLwQc0tqGvI!26E8V_q#@?l4Y_j2}%*cvUKYW>a{Pv8x&guEx z>Jq1k?TZUOwAQr-b#x1QXEK&Ok&<^%k*8Y9=JDb|K6+`3{m%OMv-*e6h_X802n1tq~J z@C*XjDuaB~vS-Yw)z-{K(kQ4?qx-BXE@NeW!Lt|2f+@tXGTiGDah9kgHk{@GF^5Xp zf&Ismz+2uBG$k|xupKP}qC?C99eE7_)NyF=XOpE$(@G4Uk&ZQv6ij+)Q+EB>A{-or zYUjHj5+qcCBEo-SQ8^;_enh?U$a88tVgd#21@!$6F0p5`&_!Hetk&tYikE?B#{Qr_ zMiClJ8~hrXx@xMb^L(xfhrJutkqNo49KWu2Jggh?a5-QGSse-GLmzcOt2bG$sGyW8 zzxeojxYYJZA$y8ae2*TX>t@*!twGAe>tSGHfyj+9O+04?QF2}m2yazNwYZQwQ)G(r z?PyCK)<~G>t1XBMru7}tOmCYSyM8_Jaj4@ne*F#FjGq4fH1t7#8lOy#xt7`mSq+uO z?&EOz*EycFrRsSh#3P=TiME{Zz$R{N-}}m~*GBcGu9qo#u@wIyuk9sxQq1lL2GTnm z_XyM`4R_`~SX?R#*42CTyOe;%*4NRI!s=sS#{j%4t75mKq^rQ9PC37nx|m5m-6ATd znd-bf1d2&WM~fgeRae9f4gBX9BVN2uc1{k|=HCTD9XF2LUL6$kv`iSee0Bi1U{_62Ifql^4$-K!x`dQp|&&Nr23EA#b4dJqJ7HM-P0{wWY>I!x$;$ zf7euq!Ao1*lwtkmxOtoRTP}mX2euXR{{im52zhyLLq%gBNlViu34g~D0=^~)4w&Qq z?g_tDhD@N~o60DMVRal51f)!#54k705`~J{ZlO;{&^_^?!|_5KfWcTm|2uqPjx1^-k}-bW5ev%|SB{e%#~S&*8t6mW>JZ zfFm!A>FK*dn3>9WuNDl!Lg};8rb2QGRzi{aYp$}xih~Ed>-E#`;o{OJzl!>-^W2iQ zJ=N!vAN@{?-jGkRtEqN{t!!V+rH=*8?LVnNuUS=+FXCrECVIdFi#`^Lqnpk>SO{b% zBaDw}xsS&k1)ERuS86?q5W1#&DDn>yhO5vVz^;pnmWT9)SYcsfH^q0qkgY){ht#pl z7vafCr$)d^Qix3!3U~Z=rBZ4B1rA>C9XkhH#=TmcaM|LGKORyS<1C_E8_SsABoX?NN;Ph?o1m1qXJw{ZJfGUwhWitqAM zj!OMevai*o9nlq-mGnZ1|FvCA38#HLvD2r7qviepv>GIM>{k~zefa1>J zu&=_N%JKG^_h@RW;jP!V%{KBh#YN2QkpmXeK5#=xQ9H)Mc7Bk|?Cm6w*lLdZ;ri~1 z!TAD8nMzYnve`k@XS)`(t~-xxkY-sSo|h=bk)& zNWGm|_(Ya-Pn?^aj3Q)P3gkjz@||Z?6l_O(J3_p)8KhrvnZj7LxIWoH8IhciLA9Sb zOIF{aesSZ?Cgpjr_-Ntkmb%`ky}K=}CMbi!iV6ydrqh=fZmK21VdT!Kg7%g2pV6nb z1Lq8)h*(Vem)k|TbFR?fzzr;du+KN1KPA-YxM5rYk~XQFJ&bxsFT5F^kalCDz(&zc zQW4L`7kqDg?IZxVjdSR;)&2tn^R0mMrpkg7KY8bXGDkJ83XSr1f7ZW$1N+86^-hIs pD*(rL%p;CO%{~3@pC29j<=uA{oX?jF= (CurrentTime - 0.1)) { + highp float Diff = Dist - CurrentTime; + highp float ScaleDiff = 1.0 - pow(abs(Diff * sharpness[i]), width[i]); + highp float DiffTime = Diff * ScaleDiff; + highp vec2 DiffTexCoord = normalize(coord - WaveCentre); + + totalOffset += (DiffTexCoord * DiffTime) / (CurrentTime * Dist * falloffPower[i]); + } + } + + coord += totalOffset; + + highp vec4 Color = texture(SCREEN_TEXTURE, coord); + COLOR = Color; +} diff --git a/Resources/Textures/_Sunrise/Effects/explosion_smoke.rsi/dust.png b/Resources/Textures/_Sunrise/Effects/explosion_smoke.rsi/dust.png new file mode 100644 index 0000000000000000000000000000000000000000..91101e019fa808d164342fdd9f5732d97de52059 GIT binary patch literal 13944 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 X$I8MnIf|SO@(V_vFhw literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Sunrise/Effects/explosion_smoke.rsi/fire.png b/Resources/Textures/_Sunrise/Effects/explosion_smoke.rsi/fire.png new file mode 100644 index 0000000000000000000000000000000000000000..b8fd19b04298382ab0f18646bd51006e0e85cd01 GIT binary patch literal 16590 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�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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Sunrise/Effects/explosion_smoke.rsi/gas.png b/Resources/Textures/_Sunrise/Effects/explosion_smoke.rsi/gas.png new file mode 100644 index 0000000000000000000000000000000000000000..f8cae98ddf62ae9aa25414d078850be83b65cc39 GIT binary patch literal 12478 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 IM6N<$g5ixrt^fc4 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Sunrise/Effects/explosion_smoke.rsi/meta.json b/Resources/Textures/_Sunrise/Effects/explosion_smoke.rsi/meta.json new file mode 100644 index 0000000000..f569eb2d7c --- /dev/null +++ b/Resources/Textures/_Sunrise/Effects/explosion_smoke.rsi/meta.json @@ -0,0 +1,25 @@ +{ + "version": 1, + "license": "CLA", + "copyright": "SUNRISE", + "size": + { + "x": 128, + "y": 128 + }, + "states": + [ + { + "name": "smoke" + }, + { + "name": "dust" + }, + { + "name": "fire" + }, + { + "name": "gas" + } + ] +} diff --git a/Resources/Textures/_Sunrise/Effects/explosion_smoke.rsi/smoke.png b/Resources/Textures/_Sunrise/Effects/explosion_smoke.rsi/smoke.png new file mode 100644 index 0000000000000000000000000000000000000000..4d8da1a69e46b6fa4bcf8800a85a3356a179be33 GIT binary patch literal 12423 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