diff --git a/Content.Server/GameObjects/Components/Explosion/ExplosiveComponent.cs b/Content.Server/GameObjects/Components/Explosion/ExplosiveComponent.cs index 29dc5ded3a..a5e401efd6 100644 --- a/Content.Server/GameObjects/Components/Explosion/ExplosiveComponent.cs +++ b/Content.Server/GameObjects/Components/Explosion/ExplosiveComponent.cs @@ -1,6 +1,7 @@ using System; using System.Linq; using System.Collections.Generic; +using Content.Server.GameObjects.Components.Mobs; using Robust.Server.Interfaces.GameObjects; using Robust.Server.GameObjects.EntitySystems; using Robust.Shared.GameObjects.EntitySystemMessages; @@ -15,6 +16,7 @@ using Robust.Shared.Serialization; using Content.Server.GameObjects.EntitySystems; using Content.Shared.GameObjects; using Content.Shared.Maps; +using Robust.Server.Interfaces.Player; namespace Content.Server.GameObjects.Components.Explosive { @@ -118,7 +120,8 @@ namespace Content.Server.GameObjects.Components.Explosive var time = IoCManager.Resolve().CurTime; var message = new EffectSystemMessage { - EffectSprite = "Effects/explosion.png", + EffectSprite = "Effects/explosion.rsi", + RsiState = "explosionfast", Born = time, DeathTime = time + TimeSpan.FromSeconds(5), Size = new Vector2(FlashRange / 2, FlashRange / 2), @@ -131,6 +134,32 @@ namespace Content.Server.GameObjects.Components.Explosive }; _entitySystemManager.GetEntitySystem().CreateParticle(message); _entitySystemManager.GetEntitySystem().Play("/Audio/effects/explosion.ogg", Owner); + + // Knock back cameras of all players in the area. + + var playerManager = IoCManager.Resolve(); + var selfPos = Owner.Transform.WorldPosition; + foreach (var player in playerManager.GetAllPlayers()) + { + if (player.AttachedEntity == null + || player.AttachedEntity.Transform.MapID != mapGrid.ParentMapId + || !player.AttachedEntity.TryGetComponent(out CameraRecoilComponent recoil)) + { + continue; + } + + var playerPos = player.AttachedEntity.Transform.WorldPosition; + var delta = selfPos - playerPos; + var distance = delta.LengthSquared; + + var effect = 1 / (1 + 0.2f * distance); + if (effect > 0.01f) + { + var kick = -delta.Normalized * effect; + recoil.Kick(kick); + } + } + return true; } diff --git a/Resources/Audio/effects/explosion.ogg b/Resources/Audio/effects/explosion.ogg index 14df2c88cc..32962ecb2c 100644 Binary files a/Resources/Audio/effects/explosion.ogg and b/Resources/Audio/effects/explosion.ogg differ diff --git a/Resources/Prototypes/Entities/Explosives.yml b/Resources/Prototypes/Entities/Explosives.yml index e7b379e5b9..689faadaa4 100644 --- a/Resources/Prototypes/Entities/Explosives.yml +++ b/Resources/Prototypes/Entities/Explosives.yml @@ -55,7 +55,7 @@ Size: 5 - type: OnUseTimerTrigger - delay: 5 + delay: 3.5 - type: Explosive devastationRange: 3 diff --git a/Resources/Textures/Effects/explosion.rsi/explosion.png b/Resources/Textures/Effects/explosion.rsi/explosion.png deleted file mode 100644 index 5dbdd0b854..0000000000 Binary files a/Resources/Textures/Effects/explosion.rsi/explosion.png and /dev/null differ diff --git a/Resources/Textures/Effects/explosion.rsi/explosionfast.png b/Resources/Textures/Effects/explosion.rsi/explosionfast.png new file mode 100644 index 0000000000..255047c06c Binary files /dev/null and b/Resources/Textures/Effects/explosion.rsi/explosionfast.png differ diff --git a/Resources/Textures/Effects/explosion.rsi/meta.json b/Resources/Textures/Effects/explosion.rsi/meta.json index 8179c1e152..d552172063 100644 --- a/Resources/Textures/Effects/explosion.rsi/meta.json +++ b/Resources/Textures/Effects/explosion.rsi/meta.json @@ -1,28 +1 @@ -{ - "version": 1, - "size": { - "x": 96, - "y": 96 - }, - "license": "CC-BY-SA-3.0", - "copyright": "Taken from https://github.com/vgstation-coders/vgstation13/icons/effects/96x96.dmi at commit 96d69b71a3a0549b4b668c0a095306580bd157c0", - "states": [ - { - "name": "explosion", - "select": [], - "flags": {}, - "directions": 1, - "delays": [ - [ - 0.2, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1 - ] - ] - } - ] -} +{"version": 1, "size": {"x": 96, "y": 96}, "states": [{"name": "explosionfast", "directions": 1, "delays": [[0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06]]}]} \ No newline at end of file