diff --git a/Content.Server/_Impstation/Xenoarchaeology/XenoArtifacts/Triggers/Components/ArtifactExpressionTriggerComponent.cs b/Content.Server/_Impstation/Xenoarchaeology/XenoArtifacts/Triggers/Components/ArtifactExpressionTriggerComponent.cs new file mode 100644 index 000000000000..e81e0357e2e1 --- /dev/null +++ b/Content.Server/_Impstation/Xenoarchaeology/XenoArtifacts/Triggers/Components/ArtifactExpressionTriggerComponent.cs @@ -0,0 +1,14 @@ +namespace Content.Server.Xenoarchaeology.XenoArtifacts.Triggers.Components; + +/// +/// Triggers when a nearby entity emotes +/// +[RegisterComponent] +public sealed partial class ArtifactExpressionTriggerComponent : Component +{ + /// + /// How close to the emote event the artifact has to be for it to trigger. + /// + [DataField("range")] + public float Range = 2f; +} diff --git a/Content.Server/_Impstation/Xenoarchaeology/XenoArtifacts/Triggers/Systems/ArtifactExpressionTriggerSystem.cs b/Content.Server/_Impstation/Xenoarchaeology/XenoArtifacts/Triggers/Systems/ArtifactExpressionTriggerSystem.cs new file mode 100644 index 000000000000..bb2a5b91a5d2 --- /dev/null +++ b/Content.Server/_Impstation/Xenoarchaeology/XenoArtifacts/Triggers/Systems/ArtifactExpressionTriggerSystem.cs @@ -0,0 +1,38 @@ +using Content.Server.Xenoarchaeology.XenoArtifacts.Triggers.Components; +using Content.Server.Chat.Systems; +namespace Content.Server.Xenoarchaeology.XenoArtifacts.Triggers.Systems; + +public sealed class ArtifacExpressionTriggerSystem : EntitySystem +{ + [Dependency] private readonly ArtifactSystem _artifact = default!; + + /// + public override void Initialize() + { + SubscribeLocalEvent(OnEmote); + } + + private void OnEmote(EntityUid emoter, TransformComponent component, EmoteEvent args) + { + var emoterXform = Transform(emoter); + + var toActivate = new List>(); + var query = EntityQueryEnumerator(); + + while (query.MoveNext(out var uid, out var trigger, out var xform)) + { + if (!emoterXform.Coordinates.TryDistance(EntityManager, xform.Coordinates, out var distance)) + continue; + + if (distance > trigger.Range) + continue; + + toActivate.Add((uid, trigger)); + } + + foreach (var a in toActivate) + { + _artifact.TryActivateArtifact(a); + } + } +} diff --git a/Resources/Locale/en-US/xenoarchaeology/artifact-hints.ftl b/Resources/Locale/en-US/xenoarchaeology/artifact-hints.ftl index e7ad24347bb2..078a66e59390 100644 --- a/Resources/Locale/en-US/xenoarchaeology/artifact-hints.ftl +++ b/Resources/Locale/en-US/xenoarchaeology/artifact-hints.ftl @@ -45,6 +45,7 @@ artifact-trigger-hint-examine = Examination artifact-trigger-hint-resurrection = Resurrection artifact-trigger-hint-medical = Therapeutic chemicals artifact-trigger-hint-funny = Slapstick comedy +artifact-trigger-hint-expression = Expressiveness artifact-trigger-hint-drink-classic-martini = Beverage "Classically shaken" artifact-trigger-hint-drink-caffine = Beverage "Caffinated" diff --git a/Resources/Prototypes/_Impstation/XenoArch/artifact_triggers.yml b/Resources/Prototypes/_Impstation/XenoArch/artifact_triggers.yml index 77a1f98bd774..aecbf471b79d 100644 --- a/Resources/Prototypes/_Impstation/XenoArch/artifact_triggers.yml +++ b/Resources/Prototypes/_Impstation/XenoArch/artifact_triggers.yml @@ -1,3 +1,12 @@ +- type: artifactTrigger + id: TriggerExpression + targetDepth: 2 + triggerProb: 0.5 + triggerHint: artifact-trigger-hint-expression + components: + - type: ArtifactExpressionTrigger + range: 4 + - type: artifactTrigger id: TriggerResurrection targetDepth: 4 @@ -22,6 +31,15 @@ components: - type: ArtifactStunTrigger +- type: artifactTrigger + id: TriggerExpressionDeep + targetDepth: 4 + triggerProb: 0.7 + triggerHint: artifact-trigger-hint-expression + components: + - type: ArtifactExpressionTrigger + range: 3 + # Separate drinks into twenty chunks. one chunk has a total probability of 1/20, so all drinks together have same prob as normal trigger # Some Chunks have multiple drinks (such as the tricky drink chunk) @@ -388,13 +406,6 @@ - !type:ActivateArtifact # Below exist to pad out the depth 4 triggers. Can remove some of those when we get more triggers implemented -- type: artifactTrigger - id: TriggerMusicDeep - targetDepth: 4 - triggerHint: artifact-trigger-hint-music - components: - - type: ArtifactMusicTrigger - - type: artifactTrigger id: TriggerExamineDeep targetDepth: 4