From 3a6b3ee1f4d83a5a2b280457d1a93f440fbbc1f3 Mon Sep 17 00:00:00 2001 From: ThereDrD <88589686+ThereDrD0@users.noreply.github.com> Date: Sat, 17 Aug 2024 23:59:11 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A8=D0=B5=D0=B9=D0=B4=D0=B5=D1=80=20=D1=83?= =?UTF-8?q?=D0=B4=D0=B0=D1=80=D0=BD=D0=BE=D0=B9=20=D0=B2=D0=BE=D0=BB=D0=BD?= =?UTF-8?q?=D1=8B=20=D0=B4=D0=BB=D1=8F=20=D0=B2=D0=B7=D1=80=D1=8B=D0=B2?= =?UTF-8?q?=D0=BE=D0=B2=20(#633)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Adds shock wave shader (#2631) Co-authored-by: DOOM Co-authored-by: Whisper <121047731+QuietlyWhisper@users.noreply.github.com> * add explosive shockwave * add shockwave to fireball * wd edit * cleanup * remove exgreande beeping sound --------- Co-authored-by: Vero <73014819+vero5123@users.noreply.github.com> Co-authored-by: Whisper <121047731+QuietlyWhisper@users.noreply.github.com> --- Content.Client/Entry/EntryPoint.cs | 4 +- .../Explosion/RMCExplosionShockWaveOverlay.cs | 90 +++++++++++++++++ .../EntitySystems/ClusterGrenadeSystem.cs | 11 ++- .../EntitySystems/ExplosionSystem.cs | 6 ++ .../Projectiles/ProjectileSystem.cs | 6 +- .../Projectiles/SharedProjectileSystem.cs | 4 +- .../Weapons/Ranged/Systems/SharedGunSystem.cs | 2 +- .../Explosion/CMExplosionEffectComponent.cs | 27 +++++ .../Explosion/ExplosiveTriggeredEvent.cs | 4 + .../RMCExplosionShockWaveComponent.cs | 28 ++++++ .../Explosion/SharedCMExplosionSystem.cs | 36 +++++++ .../Weapons/Guns/Projectiles/magic.yml | 2 + .../Weapons/Guns/Projectiles/projectiles.yml | 4 + .../Objects/Weapons/Throwable/grenades.yml | 25 ++--- .../Structures/Storage/Tanks/tanks.yml | 2 + .../Objects/Weapons/Throwable/grenades.yml | 92 ++++++++++++++++++ .../Prototypes/_White/Shaders/shaders.yml | 4 + .../Effects/grenade_explosion.rsi/grenade.png | Bin 0 -> 7913 bytes .../Effects/grenade_explosion.rsi/meta.json | 26 +++++ .../shotgun_projectiles.rsi/autocannon.png | Bin 0 -> 298 bytes .../shotgun_projectiles.rsi/beanbag.png | Bin 0 -> 259 bytes .../shotgun_projectiles.rsi/buckshot.png | Bin 0 -> 212 bytes .../shotgun_projectiles.rsi/flechette.png | Bin 0 -> 298 bytes .../shotgun_projectiles.rsi/meta.json | 23 +++++ .../Objects/Weapons/shrapnel.rsi/meta.json | 55 +++++++++++ .../Weapons/shrapnel.rsi/shrapnel_bright1.png | Bin 0 -> 465 bytes .../Weapons/shrapnel.rsi/shrapnel_bright2.png | Bin 0 -> 548 bytes .../Weapons/shrapnel.rsi/shrapnel_glass.png | Bin 0 -> 206 bytes .../Weapons/shrapnel.rsi/shrapnel_human.png | Bin 0 -> 257 bytes .../Weapons/shrapnel.rsi/shrapnel_human1.png | Bin 0 -> 484 bytes .../Weapons/shrapnel.rsi/shrapnel_human2.png | Bin 0 -> 336 bytes .../Weapons/shrapnel.rsi/shrapnel_light.png | Bin 0 -> 204 bytes .../Weapons/shrapnel.rsi/shrapnel_xeno.png | Bin 0 -> 269 bytes .../Weapons/shrapnel.rsi/shrapnelshot.png | Bin 0 -> 330 bytes .../Weapons/shrapnel.rsi/shrapnelshot_bit.png | Bin 0 -> 245 bytes .../Textures/White/Shaders/shock_wave.swsl | 40 ++++++++ 36 files changed, 468 insertions(+), 23 deletions(-) create mode 100644 Content.Client/_White/Explosion/RMCExplosionShockWaveOverlay.cs create mode 100644 Content.Shared/_White/Explosion/CMExplosionEffectComponent.cs create mode 100644 Content.Shared/_White/Explosion/ExplosiveTriggeredEvent.cs create mode 100644 Content.Shared/_White/Explosion/RMCExplosionShockWaveComponent.cs create mode 100644 Content.Shared/_White/Explosion/SharedCMExplosionSystem.cs create mode 100644 Resources/Prototypes/_White/Entities/Objects/Weapons/Throwable/grenades.yml create mode 100644 Resources/Prototypes/_White/Shaders/shaders.yml create mode 100644 Resources/Textures/White/Effects/grenade_explosion.rsi/grenade.png create mode 100644 Resources/Textures/White/Effects/grenade_explosion.rsi/meta.json create mode 100644 Resources/Textures/White/Objects/Weapons/Ammunition/Projectiles/shotgun_projectiles.rsi/autocannon.png create mode 100644 Resources/Textures/White/Objects/Weapons/Ammunition/Projectiles/shotgun_projectiles.rsi/beanbag.png create mode 100644 Resources/Textures/White/Objects/Weapons/Ammunition/Projectiles/shotgun_projectiles.rsi/buckshot.png create mode 100644 Resources/Textures/White/Objects/Weapons/Ammunition/Projectiles/shotgun_projectiles.rsi/flechette.png create mode 100644 Resources/Textures/White/Objects/Weapons/Ammunition/Projectiles/shotgun_projectiles.rsi/meta.json create mode 100644 Resources/Textures/White/Objects/Weapons/shrapnel.rsi/meta.json create mode 100644 Resources/Textures/White/Objects/Weapons/shrapnel.rsi/shrapnel_bright1.png create mode 100644 Resources/Textures/White/Objects/Weapons/shrapnel.rsi/shrapnel_bright2.png create mode 100644 Resources/Textures/White/Objects/Weapons/shrapnel.rsi/shrapnel_glass.png create mode 100644 Resources/Textures/White/Objects/Weapons/shrapnel.rsi/shrapnel_human.png create mode 100644 Resources/Textures/White/Objects/Weapons/shrapnel.rsi/shrapnel_human1.png create mode 100644 Resources/Textures/White/Objects/Weapons/shrapnel.rsi/shrapnel_human2.png create mode 100644 Resources/Textures/White/Objects/Weapons/shrapnel.rsi/shrapnel_light.png create mode 100644 Resources/Textures/White/Objects/Weapons/shrapnel.rsi/shrapnel_xeno.png create mode 100644 Resources/Textures/White/Objects/Weapons/shrapnel.rsi/shrapnelshot.png create mode 100644 Resources/Textures/White/Objects/Weapons/shrapnel.rsi/shrapnelshot_bit.png create mode 100644 Resources/Textures/White/Shaders/shock_wave.swsl diff --git a/Content.Client/Entry/EntryPoint.cs b/Content.Client/Entry/EntryPoint.cs index 328c3e6e06..6478973a22 100644 --- a/Content.Client/Entry/EntryPoint.cs +++ b/Content.Client/Entry/EntryPoint.cs @@ -1,7 +1,6 @@ using Content.Client._White.Chat; using Content.Client._White.JoinQueue; using Content.Client._White.Jukebox; -using Content.Client._White.Overlays; using Content.Client._White.Reputation; using Content.Client._White.Sponsors; using Content.Client._White.Stalin; @@ -10,7 +9,6 @@ using Content.Client.Administration.Managers; using Content.Client.Changelog; using Content.Client.Chat.Managers; using Content.Client.Eui; -using Content.Client.Flash; using Content.Client.Fullscreen; using Content.Client.GhostKick; using Content.Client.Guidebook; @@ -26,6 +24,7 @@ using Content.Client.Radiation.Overlays; using Content.Client.Replay; using Content.Client.Screenshot; using Content.Client.Singularity; +using Content.Client._White.Explosion; using Content.Client.Stylesheets; using Content.Client.Viewport; using Content.Client.Voting; @@ -179,6 +178,7 @@ namespace Content.Client.Entry _parallaxManager.LoadDefaultParallax(); _overlayManager.AddOverlay(new SingularityOverlay()); + _overlayManager.AddOverlay(new ExplosionShockWaveOverlay()); _overlayManager.AddOverlay(new RadiationPulseOverlay()); // _overlayManager.AddOverlay(new GrainOverlay()); // _overlayManager.AddOverlay(new AtmOverlay()); diff --git a/Content.Client/_White/Explosion/RMCExplosionShockWaveOverlay.cs b/Content.Client/_White/Explosion/RMCExplosionShockWaveOverlay.cs new file mode 100644 index 0000000000..aa8efedc31 --- /dev/null +++ b/Content.Client/_White/Explosion/RMCExplosionShockWaveOverlay.cs @@ -0,0 +1,90 @@ +using Robust.Client.Graphics; +using Robust.Shared.Enums; +using Robust.Shared.Prototypes; +using System.Numerics; +using Content.Shared._White.Explosion; + +namespace Content.Client._White.Explosion; + +public sealed class ExplosionShockWaveOverlay : 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; + + /// + /// Maximum number of distortions that can be shown on screen at a time. + /// + public const int MaxCount = 30; + + public ExplosionShockWaveOverlay() + { + IoCManager.InjectDependencies(this); + _shader = _prototypeManager.Index("ShockWave").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 int _count; + 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; + + _positions[_count] = tempCoords; + _falloffPower[_count] = distortion.FalloffPower; + _sharpness[_count] = distortion.Sharpness; + _width[_count] = distortion.Width; + _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("SCREEN_TEXTURE", ScreenTexture); + + var worldHandle = args.WorldHandle; + worldHandle.UseShader(_shader); + worldHandle.DrawRect(args.WorldAABB, Color.White); + worldHandle.UseShader(null); + } +} diff --git a/Content.Server/Explosion/EntitySystems/ClusterGrenadeSystem.cs b/Content.Server/Explosion/EntitySystems/ClusterGrenadeSystem.cs index 78e41c59ae..68cdbce037 100644 --- a/Content.Server/Explosion/EntitySystems/ClusterGrenadeSystem.cs +++ b/Content.Server/Explosion/EntitySystems/ClusterGrenadeSystem.cs @@ -1,14 +1,14 @@ +using System.Numerics; using Content.Server.Explosion.Components; +using Content.Server.Weapons.Ranged.Systems; +using Content.Shared.Explosion.Components; using Content.Shared.Flash.Components; using Content.Shared.Interaction; using Content.Shared.Throwing; -using Robust.Shared.Containers; -using Robust.Shared.Random; -using Content.Server.Weapons.Ranged.Systems; -using System.Numerics; -using Content.Shared.Explosion.Components; using Robust.Server.Containers; using Robust.Server.GameObjects; +using Robust.Shared.Containers; +using Robust.Shared.Random; namespace Content.Server.Explosion.EntitySystems; @@ -114,6 +114,7 @@ public sealed class ClusterGrenadeSystem : EntitySystem RaiseLocalEvent(uid, ref ev); } } + // delete the empty shell of the clusterbomb Del(uid); } diff --git a/Content.Server/Explosion/EntitySystems/ExplosionSystem.cs b/Content.Server/Explosion/EntitySystems/ExplosionSystem.cs index 1b34a07a8e..dddc1a53f1 100644 --- a/Content.Server/Explosion/EntitySystems/ExplosionSystem.cs +++ b/Content.Server/Explosion/EntitySystems/ExplosionSystem.cs @@ -7,6 +7,7 @@ using Content.Server.Explosion.Components; using Content.Server.NodeContainer.EntitySystems; using Content.Server.NPC.Pathfinding; using Content.Server.Station.Systems; +using Content.Shared._White.Explosion; using Content.Shared.Audio; using Content.Shared.Armor; using Content.Shared.Camera; @@ -176,6 +177,11 @@ public sealed partial class ExplosionSystem totalIntensity ??= RadiusToIntensity((float) radius, explosive.IntensitySlope, explosive.MaxIntensity); totalIntensity ??= explosive.TotalIntensity; + // WD edit start + var ev = new ExplosiveTriggeredEvent(); + RaiseLocalEvent(uid, ref ev); + // WD edit end + QueueExplosion(uid, explosive.ExplosionType, (float) totalIntensity, diff --git a/Content.Server/Projectiles/ProjectileSystem.cs b/Content.Server/Projectiles/ProjectileSystem.cs index cbe05d1a77..9f87e79505 100644 --- a/Content.Server/Projectiles/ProjectileSystem.cs +++ b/Content.Server/Projectiles/ProjectileSystem.cs @@ -69,16 +69,18 @@ public sealed class ProjectileSystem : SharedProjectileSystem var modifiedDamage = _damageableSystem.TryChangeDamage(target, ev.Damage * DamageModifier, component.IgnoreResistances, origin: component.Shooter); var deleted = Deleted(target); - if (modifiedDamage is not null && EntityManager.EntityExists(component.Shooter)) + if (modifiedDamage is not null && (EntityManager.EntityExists(component.Shooter) || EntityManager.EntityExists(component.Weapon))) { if (modifiedDamage.Any() && !deleted) { _color.RaiseEffect(Color.Red, new List { target }, Filter.Pvs(target, entityManager: EntityManager)); } + var shooterOrWeapon = EntityManager.EntityExists(component.Shooter) ? component.Shooter!.Value : component.Weapon!.Value; + _adminLogger.Add(LogType.BulletHit, HasComp(target) ? LogImpact.Extreme : LogImpact.High, - $"Projectile {ToPrettyString(uid):projectile} shot by {ToPrettyString(component.Shooter!.Value):user} hit {otherName:target} and dealt {modifiedDamage.GetTotal():damage} damage"); + $"Projectile {ToPrettyString(uid):projectile} shot by {ToPrettyString(shooterOrWeapon):source} hit {otherName:target} and dealt {modifiedDamage.GetTotal():damage} damage"); } if (!deleted) diff --git a/Content.Shared/Projectiles/SharedProjectileSystem.cs b/Content.Shared/Projectiles/SharedProjectileSystem.cs index 5fe5c7b208..ff051d24e5 100644 --- a/Content.Shared/Projectiles/SharedProjectileSystem.cs +++ b/Content.Shared/Projectiles/SharedProjectileSystem.cs @@ -203,9 +203,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 878b6cbc3a..0502077356 100644 --- a/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs +++ b/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs @@ -423,7 +423,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; TransformSystem.SetWorldRotation(uid, direction.ToWorldAngle()); diff --git a/Content.Shared/_White/Explosion/CMExplosionEffectComponent.cs b/Content.Shared/_White/Explosion/CMExplosionEffectComponent.cs new file mode 100644 index 0000000000..311384782c --- /dev/null +++ b/Content.Shared/_White/Explosion/CMExplosionEffectComponent.cs @@ -0,0 +1,27 @@ +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; + +namespace Content.Shared._White.Explosion; + +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +[Access(typeof(SharedExplosionSystem))] +public sealed partial class ExplosionEffectComponent : Component +{ + [DataField, AutoNetworkedField] + public EntProtoId Explosion = "ExplosionEffectGrenade"; + + [DataField, AutoNetworkedField] + public EntProtoId ShockWave = "ExplosionEffectGrenadeShockWave"; + + [DataField, AutoNetworkedField] + public List ShrapnelEffects = new() { "ExplosionEffectShrapnel1", "ExplosionEffectShrapnel2" }; + + [DataField, AutoNetworkedField] + public int MinShrapnel = 5; + + [DataField, AutoNetworkedField] + public int MaxShrapnel = 9; + + [DataField, AutoNetworkedField] + public float ShrapnelSpeed = 5; +} diff --git a/Content.Shared/_White/Explosion/ExplosiveTriggeredEvent.cs b/Content.Shared/_White/Explosion/ExplosiveTriggeredEvent.cs new file mode 100644 index 0000000000..a42cbb7bc9 --- /dev/null +++ b/Content.Shared/_White/Explosion/ExplosiveTriggeredEvent.cs @@ -0,0 +1,4 @@ +namespace Content.Shared._White.Explosion; + +[ByRefEvent] +public readonly record struct ExplosiveTriggeredEvent; diff --git a/Content.Shared/_White/Explosion/RMCExplosionShockWaveComponent.cs b/Content.Shared/_White/Explosion/RMCExplosionShockWaveComponent.cs new file mode 100644 index 0000000000..44d14e65fa --- /dev/null +++ b/Content.Shared/_White/Explosion/RMCExplosionShockWaveComponent.cs @@ -0,0 +1,28 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared._White.Explosion +{ + [RegisterComponent, NetworkedComponent] + [AutoGenerateComponentState] + [Access(typeof(SharedExplosionSystem))] + public sealed partial class ExplosionShockWaveComponent : Component + { + /// + /// The rate at which the wave fades, lower values means it's active for longer. + /// + [DataField, AutoNetworkedField, ViewVariables(VVAccess.ReadWrite)] + public float FalloffPower = 40f; + + /// + /// How sharp the wave distortion is. Higher values make the wave more pronounced. + /// + [DataField, AutoNetworkedField, ViewVariables(VVAccess.ReadWrite)] + public float Sharpness = 10.0f; + + /// + /// Width of the wave. + /// + [DataField, AutoNetworkedField, ViewVariables(VVAccess.ReadWrite)] + public float Width = 0.8f; + } +} diff --git a/Content.Shared/_White/Explosion/SharedCMExplosionSystem.cs b/Content.Shared/_White/Explosion/SharedCMExplosionSystem.cs new file mode 100644 index 0000000000..9cb343aba7 --- /dev/null +++ b/Content.Shared/_White/Explosion/SharedCMExplosionSystem.cs @@ -0,0 +1,36 @@ +using Content.Shared.Throwing; +using Robust.Shared.Random; + +namespace Content.Shared._White.Explosion; + +public sealed class SharedExplosionSystem : EntitySystem +{ + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly ThrowingSystem _throwing = default!; + + public override void Initialize() + { + SubscribeLocalEvent(OnExplosionEffectTriggered); + } + + private void OnExplosionEffectTriggered(EntityUid uid, ExplosionEffectComponent component, ref ExplosiveTriggeredEvent args) + { + SpawnNextToOrDrop(component.ShockWave, uid); + SpawnNextToOrDrop(component.Explosion, uid); + + if (component.MaxShrapnel <= 0) + return; + + foreach (var effect in component.ShrapnelEffects) + { + var shrapnelCount = _random.Next(component.MinShrapnel, component.MaxShrapnel); + for (var i = 0; i < shrapnelCount; i++) + { + var angle = _random.NextAngle(); + var direction = angle.ToVec().Normalized() * 10; + var shrapnel = SpawnNextToOrDrop(effect, uid); + _throwing.TryThrow(shrapnel, direction, component.ShrapnelSpeed / 10); + } + } + } +} diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/magic.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/magic.yml index e98dc0a087..535ebf6b0e 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/magic.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/magic.yml @@ -29,6 +29,8 @@ ignited: true - type: IgniteOnCollide fireStacks: 0.35 + - type: ExplosionEffect # WD + maxShrapnel: 0 - type: entity id: ProjectileAnomalyFireball diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml index 685b72c962..607a287909 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml @@ -743,6 +743,8 @@ totalIntensity: 150 # a ~2 tile radius intensitySlope: 5 maxIntensity: 10 + - type: ExplosionEffect # WD + maxShrapnel: 0 - type: entity id: BulletGrenadeFlash @@ -781,6 +783,8 @@ totalIntensity: 175 # about a ~6 tile radius intensitySlope: 1 maxIntensity: 10 + - type: ExplosionEffect # WD + maxShrapnel: 0 - type: entity id: BulletGrenadeEMP diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Throwable/grenades.yml b/Resources/Prototypes/Entities/Objects/Weapons/Throwable/grenades.yml index 0313a75868..1a1be4ac89 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Throwable/grenades.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Throwable/grenades.yml @@ -36,10 +36,18 @@ Primed: { state: primed } Unprimed: { state: icon } +- type: entity # WD + abstract: true + parent: GrenadeBase + id: GrenadeBaseExplosionEffect + components: + - type: ExplosionEffect + maxShrapnel: 0 + - type: entity name: explosive grenade description: Grenade that creates a small but devastating explosion. - parent: GrenadeBase + parent: GrenadeBaseExplosionEffect # WD id: ExGrenade components: - type: ExplodeOnTrigger @@ -49,13 +57,8 @@ intensitySlope: 3 totalIntensity: 120 # about a ~4 tile radius canCreateVacuum: false - - type: OnUseTimerTrigger - beepSound: - path: "/Audio/Effects/beep1.ogg" - params: - volume: 5 - initialBeepDelay: 0 - beepInterval: 2 # 2 beeps total (at 0 and 2) + - type: ExplosionEffect + maxShrapnel: 12 - type: entity name: flashbang @@ -102,7 +105,7 @@ - type: entity name: syndicate minibomb description: A syndicate-manufactured explosive used to stow destruction and cause chaos. - parent: GrenadeBase + parent: GrenadeBaseExplosionEffect # WD id: SyndieMiniBomb components: - type: Sprite @@ -235,7 +238,7 @@ - type: entity name: the nuclear option description: Please don't throw it, think of the children. - parent: GrenadeBase + parent: GrenadeBaseExplosionEffect # WD id: NuclearGrenade components: - type: Sprite @@ -326,7 +329,7 @@ - type: entity name: holy hand grenade description: O Lord, bless this thy hand grenade, that with it thou mayst blow thine enemies to tiny bits, in thy mercy. - parent: GrenadeBase + parent: GrenadeBaseExplosionEffect # WD id: HolyHandGrenade components: - type: Sprite diff --git a/Resources/Prototypes/Entities/Structures/Storage/Tanks/tanks.yml b/Resources/Prototypes/Entities/Structures/Storage/Tanks/tanks.yml index 455577a371..c820b5a236 100644 --- a/Resources/Prototypes/Entities/Structures/Storage/Tanks/tanks.yml +++ b/Resources/Prototypes/Entities/Structures/Storage/Tanks/tanks.yml @@ -35,6 +35,8 @@ explosionType: FireBomb # WD EDIT totalIntensity: 120 # ~ 5 tile radius canCreateVacuum: false + - type: ExplosionEffect # WD + maxShrapnel: 0 - type: entity id: WeldingFuelTankFull diff --git a/Resources/Prototypes/_White/Entities/Objects/Weapons/Throwable/grenades.yml b/Resources/Prototypes/_White/Entities/Objects/Weapons/Throwable/grenades.yml new file mode 100644 index 0000000000..fea6ec5ec6 --- /dev/null +++ b/Resources/Prototypes/_White/Entities/Objects/Weapons/Throwable/grenades.yml @@ -0,0 +1,92 @@ +- type: entity + id: ExplosionEffectGrenade + noSpawn: true + components: + - type: Sprite + sprite: White/Effects/grenade_explosion.rsi + state: grenade + - type: TimedDespawn + lifetime: 0.5 + +- type: entity + id: ExplosionEffectGrenadeShockWave + components: + - type: TimedDespawn + lifetime: 0.5 + - type: ExplosionShockWave + falloffPower: 30 + sharpness: 15 + width: 1.3 + +- type: entity + id: ExplosionEffectShrapnel1 + noSpawn: true + components: + - type: CollisionWake + - type: Physics + bodyType: Dynamic + fixedRotation: true + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeAabb + bounds: "-0.25,-0.25,0.25,0.25" + density: 20 + mask: + - ItemMask + restitution: 0.3 + friction: 0 + - type: Sprite + sprite: White/Objects/Weapons/shrapnel.rsi + state: shrapnel_bright1 + - type: TimedDespawn + lifetime: 0.5 +# - type: DeleteOnCollide + +- type: entity + parent: ExplosionEffectShrapnel1 + id: ExplosionEffectShrapnel2 + noSpawn: true + components: + - type: Sprite + state: shrapnel_bright2 + +# Не работает каким-то хуем +- type: entity + parent: BaseBullet + id: ProjectileShrapnel + name: shrapnel + noSpawn: true + components: + - type: Sprite + sprite: White/Objects/Weapons/Ammunition/Projectiles/shotgun_projectiles.rsi + layers: + - state: buckshot + - type: Fixtures + fixtures: + projectile: + shape: + !type:PhysShapeAabb + bounds: "-0.1,-0.1,0.1,0.1" + hard: false + mask: + - Impassable + - BulletImpassable + - LowImpassable + fly-by: + shape: !type:PhysShapeCircle + radius: 1.5 + layer: + - Impassable + - MidImpassable + - HighImpassable + - LowImpassable + hard: False + - type: Projectile + damage: + types: + Piercing: 12 + deleteOnCollide: true + - type: TimedDespawn + lifetime: 0.5 diff --git a/Resources/Prototypes/_White/Shaders/shaders.yml b/Resources/Prototypes/_White/Shaders/shaders.yml new file mode 100644 index 0000000000..0f307d2742 --- /dev/null +++ b/Resources/Prototypes/_White/Shaders/shaders.yml @@ -0,0 +1,4 @@ +- type: shader + id: ShockWave + kind: source + path: "/Textures/White/Shaders/shock_wave.swsl" diff --git a/Resources/Textures/White/Effects/grenade_explosion.rsi/grenade.png b/Resources/Textures/White/Effects/grenade_explosion.rsi/grenade.png new file mode 100644 index 0000000000000000000000000000000000000000..d00b7283afd68e7e283bb54de771729592a5bbe4 GIT binary patch literal 7913 zcmV*LB`ABU=s%Hl8>d*D^{Yw^7tmQ|itb(JIbE z4NVn90!4!y>h#4>urTeIy!4^?rF{rQEyaRBUuqXej9O?(C0uY{tSK1H)Fr45ikfO% z3(3_??GZ8-w(87G&$svf_E~4$eg5t}=gyrw_k-cyIrsdmz4y1)UVERt*V<*aF{U5e zzqxev+L+m<7zX*bHG#Hs@^@&6C@fDs03|kZ&SE?EF%I5=&rz` zMeS`2l<}FrcLWibdEtcl$y;Z0FP;0!x|z@axfCM;dBnN`piS-V8L&Q*JRbP}!*lEA z(18t0o*+LV%duj5!iYd7rz`NQ)hUJb_%drMfGj&1Kp<^QR}wMRTTaB!ayA?i=^dUpM!EeWFuFKylc}R+m2Jl*(G5v?Vl`7~8y9LN|XwQbJ0(4u? zO>bD4?RAOVI7Z6^1i2}5kJwQJ;z*-Zqm{2ys>LwIQd~ z(#h)HeT`c(VHCzPWWX*eAqoi3G6l<+xeP!{5Pwn5SD-%imrg9#6Aax}cZg1HCU%$Q) z+5i^nNMfOIZGb1ENvvAmW}-m`2z_~3jc#b>1&L7MuU~hKcX3bu7G=p1SU?pm_K0cm zDKWkiebUTnm zJNF9{pEn15L7)UTuB$4YoH94=tc2NV`bWg+t7Cy|eSI50{owA+(^tWClkpcwB50+a z+0DE@c&EjA69K8YkP{Vo>HXd`nCHr2w(J6$1{zkbm?TlG924m=i9FdQaQ)J)kH?m7 zbthNP76_G$K2|zqSc^*%0U!)l$+=d)@67b7Qw@1YHv-yi4Fj8?K?&?t6dZZT~TlBi#hnoH}E(O@BSRD(_S9DNf`$ zzvhEb83z*o0Wwg2$R{=UK#m4W6lrjgHa7wIKYT_N%ZPJG5O(1jT7Hld-|HwqR|G=C zV_)>%&rO=u57yF#xSRI1k}$R~yHiU*2eoZ&l?XBdchoxvZ$SfzOlnb}(Zt^UllEGW zk7Set4A1F<{7wNjoDwHK5arL1Vvq0MeB0o+y}x+Kn4exwWe0kYzbgWfJON6JDFnL< zn$lo;{jiev>dPMS$+R+^d_s%YvV@ZF^MGK9u3dJG;;j%ZFz)%0S0<@MO#yYp@2K}> zD{sF1tZ#W-mSJ_$|L)Jt$e)mLdeT&GldhfUgAYGsuH1Y-6lxV;!d!!T*W#T#D=-=l z+A!%f2iHy;(<+H*nxTD8?n$#R`TQu6-&UIcZJC;Bvi_a4SXOc1S0ojW@3C!u8-`1@+kv&-70D+2kOZXWsN zFS&>NMuD*ENXW(jP)V|~LZx~igZ@QbSTgP+SjObj zbx6yJoJAGQ`^PL1k*CFZ<<~OHMh*U(=~Tvybz+z6f73pcJVs@Tb)8avX;mA08xL*6 z@Q;Gw6GOwj$@kB4bmnJ8Q5ZVlts@}@MqRQ}09J}759N|w2aiiFl=ss_(w2g#t0*xm z#Aj!^vYg-eJGy3Tc@%V=$YZ+vG5H%0ac6xFZ zre04cXlGk@M|sXTKnHyFgQ=d$bAIthwhm+RXc855IZmE6=jSLZB+uhLq!s0J%Lv)Z zl2($)3<%i0cFb25%t@6sR1}j_jaeQ`qM2W{bto+mzQ6Hr|K8!R#aHRs~`Hj%hp(d+Wst)8}MVtH^kO3+sVHJ!MmSFJ~-zx?!i*p_TokfdbX?$iWy zgSeoa+32P+I>*UN6SWqk_vB!E*#U0U{P3KUpIeRCXaChdSV>4P z$fNh;3x93q7rx+RlatY+9a!$V3+j7%nX0vs8Da_vF<^;Hq$SY}ph*xKKq-KXso3_` z9tj!Ss3@)xf$%#S0!7O5^5f2m)LAQKC!?s#500BBjj6UhJURd5+mD!+AAQgL@1xDi_(s69-^UIO zw<|*~acO={bU}s~06SL^(}usH0cKt}-fG&R81gpCg;y9;rXxK7chtg~APEa{VAzNv zLVFoF0t6l92@22*?6PCG=fg1H`B`ZBPbXy|AE%>94z zjS2Jo@}`Yfv~b&)8%f35rMLbXb_=vB)@Nb^TtEY;2=-Qi+;K^=&j`QwYT34D??9R@aJ6dC;8)+EJ;1Gn|w7X9*b&#& z)auA>&3`-oOJ?raLqX$DzOj(m?o3T)11#U22-h-ZVsi23*l+$#Vr?D99e1x5gsFSq|#lIjL9zPl9N3FAU^#crkccOl?e7O3P^Td2MF;H-*usf z5j_Ot26-r#-I63$1mHVXff|2|zj2i)t~>mV=LVJZ47xa4gt>f$k4T+@&vf7K`(Q_CmKR_ zVF;$_%H_JVi^t98$u}GUP=-tvpbE0<2>Oh%E$b21=jm^x_ zp*{Jj9@7f(QA`DSBuVsA2voM*X~C}TPd@V>NyU1(54${D^oeQ**-RSx(4(&YWZY^X zH`sX&U}aE-*W{3vs|n(Ss|Jgzz? z)3IDP*8)|^QN=7Vv^4O6(EqdWr>}09=lwhd$R>kvTf|Zhb(wd<&Gp>7sT(WL8tAPn z(Pa=O)mph(QZLGinRxmSRU+7H+4IPwA@`|ix%bA_c*`zLtiF`KUg*;0Otrsm@gI+y znQyxtRXI?uylP3LuhGFKkjg&(goWGFdNgKtHofFW~mnb3$Dw*b< zT8WV%^E10k)kusXUo1%?J5QuV&08xS zMqT2)+TtruSrQRZ0@cY;1=z^vca4pd&QP~90(wXE_lhZp>gJtrZ_y|0s3>E3RQ++} zC4C)99=&Up#36ZD`Ow4{zYDE(rXP-}M4brslpRBP36KX0ddVBeqMfe+e!Eh~5?!&4 ziLn*sHgf_q*C*NS`S~UIM|3mrB9{}3#iOtaIjZDLFNhLC-D24JZurlZK=qSr_aL<`tps!Xj=9ME#Ak1eVg#o@7<){jg zLUV#RqVX(oL;-ZlAzW9Ka;TfU6I{^W+2x*o|u zdru{n$SQ@1Tt9!df)XV4bQ%G_Z>PaAnP!2q?-h&W&x_TNdAH<_RNJNLfD2+@88;E; zZ8k(X>;UQQ>?{0S3xst&AQ8H=yc|^;ndqk`jd+USQW&SOE0Zay%Tf;29TM}!DYO}X zX}rb_OJ+HbgGL82WS6A_6IiRmZOh`gYy`cZDk#&6dyl50y_P}+jk2;&JZ#@_$*?Tb zW+l7!D6$d2%AFHjL4qXW_8@H(I%eF9oM?h1vRd$NygT5~oezW`goa{FAoS^WG-mtu z^~|V^*W{%fs-(3Q5J;71DopoB%7@Ui&9X~#tk|?n~R61e@!DBS}+828Ky$gx89ZN&xb-8%G5|MHcyH>|r zkP#N+U&~q6i5*$UY<#p)-K5oSF06I#T zu3Wtv)mE(7t;%pM+!iezU8&uHNa(gFKcAV+?Mm**R%!c1S%DB&F^6z+%MU@)$m_zK z5SGA*NOFxwX_bjf_~Mk{`Wtp#uV2r9Hpzq6B{28>$Ta~lhEeP{8w-#G(eo(qIk-}f z=hH#;|K4VKNV&t(K4in;V(_!qzu#OF2EfoGD6O?(VMIfDW2xM_S zjJ0Y+6a#?bT5R9G742aRPWz`{h7Y8>0eC0_mwkv6HH$lVPpjV*$7c zNyxSn$8>Z5JVNIMWp90JGdy>Y#_rx+b7>1O{f=(S_#u24naRN2Xq-JJ#EWJc0a&tW zpYV)UtL+p}xkF!-f`KEeyr^D%%QO^0)wn@~Rf4O{2RE%uAer#YCQh;6R@__NJyXHz z=(!%oDdu;O%vzz_S&}jPOxuZA7<5u*2$F=-IVyA*+*m*<-C$cuEGZL4VzfXV-B*o( z=S8SYAerziyp%I0Ghrqt4Kv*nmlyn$8D%yy$xJe%9zWmGMgzoAPfbOf;IvQKf z%o4G;_IVft@(}&-$0`x1W6s1+py@0L7RjwB~Ve`DlYZ3Kqft|OYtcfxlzr+`$0$>Dc7P{_*q{goK?If zZ<<81JJP8OfY7ChnQG|=$t}kE-txRQ(CsLxo98qZ;!ftRlF`gLGGRjlmP~Sgl6V;@ zE!Dx*E6IU_*+pC`hOx{L(}pF|4PEvOmi@emJK%C{5YKBHRqCa!;GPo27D(i+ie-w? z>vAPBX@@+SFzahy)QR;e^o#gXQ{TJIejFrCp0Sx19xi58V&stucIt=!+)8)BdZzO~ zD1KHUfns^9VrE({uHvYS%Pa#?a1N8Y`5aXim>cpVBiRsgm0VL``T%K3B|)|3F=Z!(z`ZgQV(Ok6tpDF>v&|kI`Lvs zXN=Kk!&H~eiPV|eXFiLz0dmS|h&EBjkK0w&KytmW&XJ`dNhNm-NGF-+X`e^mzaJG< z1R214kkE#;lar`*?_Jo1(cJ6E6|ptMGT#)y5gPVj>7*q^+5Y5tgJ7cj;onpR8@A~o zJ=YGgoOLW}sSm{DXEK=wp{)doML}XCEA5!dq-xwHu{2;axr0DtqAl_ebuC*ZC))P& zi$CgkSPXgDVgNlQ!1FWTYc6OSp*P4;Xg7*d>ur22Zxx_-XmW?6-a)A|>=CkC92DyV z43aEF(=zpXzxpc@a~5=ShbF-+e?VTAW*y9_AH(1gnnfdd<2hR4&PI-+!o(qFpnu$% zQk$O(qi$>4qLEw~a_>>@>@i5R;3p7Cm_DWc9-%!nmTaZ619oe$mO6~k8!`kMq{UEW z*iNzzGcp9)P7Sg&BF{je{-Sz6>XNZ$fCGNtm)@G(gr#UQ7yDL$^&q414}%r$$_J7! zM#CyS;}+iQbDO9jkkf`7exiQt=&gWUDod~)q=GFCffcm`s;l974s+GO2zAply89;N zyaHJt$!Kja3G4DK0OhkgQT9wV($LdG>a*>#CbdSv@+zTD1=+>-HA#yA-^l-W^QM~yKB)7{swV3!Mc(EZSw=DLn{feZ%{GPq|~1D=5f$V>XM9WZR<0Xlpj z=B6ssY`JNT|Ch}LNe%2)y9WVzF?yDE;K(qupp3py)o#IF>(|a!nMfpgs+qJjZHL~bEFDO)%%Bs>ZOGDDV3`04#?V9K|F+K8uDxRI)%zBl1L1cdx%0 zLX5hwK46$FcrJmKMpma3a^kaWKb#p-473FrWX+9jK$w1P=lP0J0!@#c=2FOac>LUn z!KR`F8kF#Db)Gp0q+i;BN;fp4ut6dHPQ$?ZK)o*g95nI_E1^pXbab?^y%8*3y|#1b zf%-|JVO%pa%&3~Rxv%K;nIo&&KMafy#369rzWO>CH1Z5Hp$CRQOQR9fw#5GfY)_-5 TV*(qn00000NkvXXu0mjfv~5lo literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Effects/grenade_explosion.rsi/meta.json b/Resources/Textures/White/Effects/grenade_explosion.rsi/meta.json new file mode 100644 index 0000000000..faef7a9557 --- /dev/null +++ b/Resources/Textures/White/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/White/Objects/Weapons/Ammunition/Projectiles/shotgun_projectiles.rsi/autocannon.png b/Resources/Textures/White/Objects/Weapons/Ammunition/Projectiles/shotgun_projectiles.rsi/autocannon.png new file mode 100644 index 0000000000000000000000000000000000000000..9b69b25c948a755dd1602d167c45451b4472cd6d GIT binary patch literal 298 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DinK$vl=HlH+5aKEREV@QO1a*BfRpZi*>$36r{bv6EdY3%ks zef@$%D$Hscwh0L*tQ~l~CiAWkWKs&4rDHIQ?L-lS1-Da!(G)f503oIiJKT!|P9{Vw zVdT{C6nis7M*o{n*{U!lvI6;>1s;*b3=DinK$vl=HlH+5aE7OgV@QO1vIOhm1QDLf5B003NKEk*OK7^p z%;qNRz{}3zn7QddhDeW9!WG6V1q~uo)VO&nI09Jy*}wVm|M~g8{|ZuCE=CJ9SpIoQ z8yMK{Wmv|})8NE#N`>3N38-_veDFWx{eKR92%pp5*s9#FvsuHtMMo>)v}2!wc)+s; y`|<!lvI6;>1s;*b3=DinK$vl=HlH+5Fw@h;F(ktM?UjR^42B#m4m-Po=BeIH?Gv5P zzC7bZ`g7$*0dY<)LD9D>lIN|Ej1JxVE7QY@Vb=Psd(?XTPtA;cmgvLv{ankB=4TvI zitjx9x{hr*7JHL9{?_h=q6}xbcR%F$SD~b|NN%Edhp6hp_*%=qKuZ}sUHx3vIVCg! E0FZx1cK`qY literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Objects/Weapons/Ammunition/Projectiles/shotgun_projectiles.rsi/flechette.png b/Resources/Textures/White/Objects/Weapons/Ammunition/Projectiles/shotgun_projectiles.rsi/flechette.png new file mode 100644 index 0000000000000000000000000000000000000000..b8fec141ec929d135350b1ff5d390f3a13ea82cd GIT binary patch literal 298 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCiji0(?STYfC%NocV9ekY-@vF?H^?-if`LnUz4v`t5cmK#HRz$S?Rm1Tfrd z-Wv%N<1FxqEM{QfI|9OtQ?>b|fr9OxE{-7<{&)Kwg&Guim<1>N`+wX^!({2Xifb}U zj7~dE+ViB?!K&ne!Gz6xGHj=eCY+XB#rLM@z)I$we?(s&kCDr;@`%)9-(tl->ooJr zumue}WhVT(9e5z--UWLNhU*;699#!Xg&0IOsM|2y_G5Wb;?J;xL5NYifu(^<;o^eV gJ`CUfFbeEs@ad3xBXlBB0O%wJPgg&ebxsLQ0E0PaC;$Ke literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Objects/Weapons/Ammunition/Projectiles/shotgun_projectiles.rsi/meta.json b/Resources/Textures/White/Objects/Weapons/Ammunition/Projectiles/shotgun_projectiles.rsi/meta.json new file mode 100644 index 0000000000..0bbcb43c40 --- /dev/null +++ b/Resources/Textures/White/Objects/Weapons/Ammunition/Projectiles/shotgun_projectiles.rsi/meta.json @@ -0,0 +1,23 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from cmss13 at https://github.com/cmss13-devs/cmss13/blob/a86a9e2e57e5c00195cab704713a4962e8bc973a/icons/obj/items/weapons/projectiles.dmi", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "autocannon" + }, + { + "name": "buckshot" + }, + { + "name": "beanbag" + }, + { + "name": "flechette" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/White/Objects/Weapons/shrapnel.rsi/meta.json b/Resources/Textures/White/Objects/Weapons/shrapnel.rsi/meta.json new file mode 100644 index 0000000000..a17dcce10c --- /dev/null +++ b/Resources/Textures/White/Objects/Weapons/shrapnel.rsi/meta.json @@ -0,0 +1,55 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from cmss13 at https://github.com/cmss13-devs/cmss13/blob/a86a9e2e57e5c00195cab704713a4962e8bc973a/icons/obj/items/weapons/projectiles.dmi", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "shrapnelshot" + }, + { + "name": "shrapnelshot_bit" + }, + { + "name": "shrapnel_glass" + }, + { + "name": "shrapnel_light" + }, + { + "name": "shrapnel_xeno" + }, + { + "name": "shrapnel_human" + }, + { + "name": "shrapnel_human1" + }, + { + "name": "shrapnel_human2" + }, + { + "name": "shrapnel_bright1", + "delays": [ + [ + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "shrapnel_bright2", + "delays": [ + [ + 0.1, + 0.1, + 0.1 + ] + ] + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/White/Objects/Weapons/shrapnel.rsi/shrapnel_bright1.png b/Resources/Textures/White/Objects/Weapons/shrapnel.rsi/shrapnel_bright1.png new file mode 100644 index 0000000000000000000000000000000000000000..e3e8c5c8d279155448924af50caa8adaffee819d GIT binary patch literal 465 zcmV;?0WSWDP)z#v2QUVD|v+#ZT_lSOj(f^lEyL2crS_ z1lRy~JB-Dtb{NU2d4OjzeJmcp(hnpeaD+h5T?Leuy$U4H0Y~;6aK8^o+YAZ)eLxIL zUyViJd@hgWsbOg|vB!Drs0ezD6x z=3TyE6UCreh0jW92!=RapwAL!T|wOFL| z{hLppW(M^hF;3>pIGyPZ*NwB!|GwHSbkL&P$ULX(bE9zD{rEcxGS@a8na}kh z?69DWlw6=_{gqw6mKV;r{QmNj+MP9%Sf@)q=-(4{|FmjNTufcNwA|u9eym$89v53g zJ$$9Az$nUq5&!~yTnz;w3@wY96l8!>C3ocmnw1#$`p?sN$G@VE`-{P!e+^&vEpe@P z@a6i&obhS>I(2`8-^_Q?4XY3AvrpLnYVSObH~$)DEWDg^;x@C;?%Gv47T-UwJ^6mdKI;Vst0KVVx3;+NC literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Objects/Weapons/shrapnel.rsi/shrapnel_glass.png b/Resources/Textures/White/Objects/Weapons/shrapnel.rsi/shrapnel_glass.png new file mode 100644 index 0000000000000000000000000000000000000000..7c399cf53ccf433c4b06a524567abefafebdaaf5 GIT binary patch literal 206 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5DA?fX z;uumf=j|0ot^)=fEC+bMto`Ww(Z6zXYfw?xWTBvI-Paw%^>g%?I20Nfm^dtCE}T(V z`i5~!+T!jdf|U&=3$zx<8k=rp(!G%7f1kNRaB}GdQ5}yOxeXd0D;-om9`v*ff8bM- z6x1kSB{csBZ})nIf6{gqhi~LtyxyIe2ExPVihMpi{4dz9;iNlElP{&hVcYr3UE08K#eDuJ zdR!a08}EtUI4hRQu>Tk{M{GFXhxI^9SZf&n*J@Apesy^U(D@9Wu6{1-oD!M<8MRWm literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Objects/Weapons/shrapnel.rsi/shrapnel_human1.png b/Resources/Textures/White/Objects/Weapons/shrapnel.rsi/shrapnel_human1.png new file mode 100644 index 0000000000000000000000000000000000000000..30311c9210f5363bcc5ed442ba93f7c258bf735e GIT binary patch literal 484 zcmVYE?Az@& z+z5d0`_dNz!WOr)0Fcp0JQx|!W;PapC{5v9*P(6Nu>nxpgOfuU#i?X30o7UvQ4*mN zOfdD7g%GpB1|V-PeZ=(zHH|IC1};p8Mv5cz#C02-;5Wl7a_m6_+s;=5uw>S9?I z6dvPk)1FQla8aDDbJL^+bPe(ZL3p3vK;2U3k+s?|2k8^9clY>nA}a05{w<(WFElIx zcF|SM#AFAcE&?<#nRQY#u2}){pOOeo7~q;_27;8lzzRU(`GCq(zxYT>9kCG)6xV82 aHsK$6$*c*Qbp(F^0000nwsIaM~S_Zt{b9UB1ckNfV3 z#o^+uV|@k7z6@pwwoF)efz`@{J`X>Y7eH(6Qp4Fk06?QB8w$%4NP_?*HB6w8{AnWM i4x~W_~`(9S}L5zL#aiM2#7?hNjJxptG-^M5x|4!&m zV36i4e9q=AB-v7_8FX&?%rh(Q~Eo}13r5K)V`dItgR`x-7A_KF;2iCG{hGBM`{~rOp O!r_ zY?5F7ZkKIXq+xUM(B9W?7&_K`{NKxv^7wMF*WrTS{0*mm9N^FBJ;U^(r+-mL+&{<4 zdnwXsj3vjyLtU+3>ZF6&(^EZtF9+P-cE9|cnFHU7ys6KB`k%d%+rS|3c;{^f#s$ZU zw=ptZkkoJA%q!4vsv^_^D0t%7>n5{Q9tG+3+_$C}GDvM%d6wbAGBf4}M;I*{%>R8V VPO@WejsS)OgQu&X%Q~loCIAQUf9U`K literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Objects/Weapons/shrapnel.rsi/shrapnelshot_bit.png b/Resources/Textures/White/Objects/Weapons/shrapnel.rsi/shrapnelshot_bit.png new file mode 100644 index 0000000000000000000000000000000000000000..1b85ff3b8fccd5ab31916c9e79a06b534261e03f GIT binary patch literal 245 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5D7f6y z#WAE}&f6;+d7BLc+#brSid= (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); + coord += (DiffTexCoord * DiffTime) / (CurrentTime * Dist * falloffPower[i]); + highp vec4 Color = zTextureSpec(SCREEN_TEXTURE, coord); + Color += (Color * ScaleDiff) / (CurrentTime * Dist * 40.0); + COLOR = Color; + } else { + COLOR = zTextureSpec(SCREEN_TEXTURE, UV); + } + } +}