Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add flash reaction effect #32377

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
82 changes: 82 additions & 0 deletions Content.Server/EntityEffects/Effects/FlashReactionEffect.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
using Content.Shared.EntityEffects;
using Content.Server.Flash;
using Robust.Server.GameObjects;
using Robust.Shared.Audio;
using Robust.Shared.Prototypes;

namespace Content.Server.EntityEffects.Effects;

[DataDefinition]
public sealed partial class FlashReactionEffect : EntityEffect
{
/// <summary>
/// Flash range per unit of reagent.
/// </summary>
[DataField]
public float RangePerUnit = 0.2f;

/// <summary>
/// Maximum flash range.
/// </summary>
[DataField]
public float MaxRange = 10f;

/// <summary>
/// How much to entities are slowed down.
/// </summary>
[DataField]
public float SlowTo = 0.5f;

/// <summary>
/// The time entities will be flashed in seconds.
/// The default is chosen to be better than the hand flash so it is worth using it for grenades etc.
/// </summary>
[DataField]
public float Duration = 4f;

/// <summary>
/// The prototype ID used for the visual effect.
/// </summary>
[DataField]
public EntProtoId? FlashEffectPrototype = "ReactionFlash";

/// <summary>
/// The sound the flash creates.
/// </summary>
[DataField]
public SoundSpecifier? Sound = new SoundPathSpecifier("/Audio/Weapons/flash.ogg");

protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys)
=> Loc.GetString("reagent-effect-guidebook-flash-reaction-effect", ("chance", Probability));

public override void Effect(EntityEffectBaseArgs args)
{
var transform = args.EntityManager.GetComponent<TransformComponent>(args.TargetEntity);
var transformSystem = args.EntityManager.System<SharedTransformSystem>();

var range = 1f;

if (args is EntityEffectReagentArgs reagentArgs)
range = MathF.Min((float)(reagentArgs.Quantity * RangePerUnit), MaxRange);

args.EntityManager.System<FlashSystem>().FlashArea(
args.TargetEntity,
null,
range,
Duration * 1000,
slowTo: SlowTo,
sound: Sound);

if (FlashEffectPrototype == null)
return;

var uid = args.EntityManager.SpawnEntity(FlashEffectPrototype, transformSystem.GetMapCoordinates(transform));
transformSystem.AttachToGridOrMap(uid);

if (!args.EntityManager.TryGetComponent<PointLightComponent>(uid, out var pointLightComp))
return;
var pointLightSystem = args.EntityManager.System<SharedPointLightSystem>();
// PointLights with a radius lower than 1.1 are too small to be visible, so this is hardcoded
pointLightSystem.SetRadius(uid, MathF.Max(1.1f, range), pointLightComp);
}
}
6 changes: 6 additions & 0 deletions Resources/Locale/en-US/guidebook/chemistry/effects.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,12 @@ reagent-effect-guidebook-emp-reaction-effect =
*[other] cause
} an electromagnetic pulse

reagent-effect-guidebook-flash-reaction-effect =
{ $chance ->
[1] Causes
*[other] cause
} a blinding flash

reagent-effect-guidebook-foam-area-reaction-effect =
{ $chance ->
[1] Creates
Expand Down
13 changes: 13 additions & 0 deletions Resources/Prototypes/Entities/Effects/chemistry_effects.yml
Original file line number Diff line number Diff line change
Expand Up @@ -222,3 +222,16 @@
state: metal_foam-north
- map: [ "enum.EdgeLayer.West" ]
state: metal_foam-west

- type: entity
id: ReactionFlash
categories: [ HideSpawnMenu ]
components:
- type: PointLight
enabled: true
radius: 2
energy: 8
- type: LightFade
duration: 0.5
- type: TimedDespawn
lifetime: 0.5
17 changes: 16 additions & 1 deletion Resources/Prototypes/Recipes/Reactions/chemicals.yml
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@
amount: 1
Sulfur:
amount: 1
Oxygen:
Oxygen:
amount: 2
products:
SulfuricAcid: 3
Expand Down Expand Up @@ -205,6 +205,20 @@
energyConsumption: 12500
duration: 15

- type: reaction
id: Flash
impact: High
priority: 20
reactants:
Aluminium:
amount: 1
Potassium:
amount: 1
Sulfur:
amount: 1
effects:
- !type:FlashReactionEffect

- type: reaction
id: TableSalt
minTemp: 370
Expand Down Expand Up @@ -501,3 +515,4 @@
amount: 1
products:
Tazinide: 1

Loading