diff --git a/Content.Server/Chat/Systems/AutoEmoteSystem.cs b/Content.Server/Chat/Systems/AutoEmoteSystem.cs index 3d6bd53540..1e1b7b9034 100644 --- a/Content.Server/Chat/Systems/AutoEmoteSystem.cs +++ b/Content.Server/Chat/Systems/AutoEmoteSystem.cs @@ -46,7 +46,11 @@ public sealed class AutoEmoteSystem : EntitySystem if (autoEmotePrototype.WithChat) { - _chatSystem.TryEmoteWithChat(uid, autoEmotePrototype.EmoteId, autoEmotePrototype.HiddenFromChatWindow ? ChatTransmitRange.HideChat : ChatTransmitRange.Normal); + _chatSystem.TryEmoteWithChat(uid, + autoEmotePrototype.EmoteId, + autoEmotePrototype.HiddenFromChatWindow ? ChatTransmitRange.HideChat : ChatTransmitRange.Normal, + ignoreActionBlocker: autoEmotePrototype.IgnoreActionBlocker, + forceEmote: autoEmotePrototype.Force); } else { diff --git a/Content.Shared/Chat/Prototypes/AutoEmotePrototype.cs b/Content.Shared/Chat/Prototypes/AutoEmotePrototype.cs index e6fdae4cf1..a3d6ccce7f 100644 --- a/Content.Shared/Chat/Prototypes/AutoEmotePrototype.cs +++ b/Content.Shared/Chat/Prototypes/AutoEmotePrototype.cs @@ -14,30 +14,44 @@ public sealed partial class AutoEmotePrototype : IPrototype /// The ID of the emote prototype. /// [DataField("emote", required: true, customTypeSerializer: typeof(PrototypeIdSerializer))] - public string EmoteId = String.Empty; + public string EmoteId = string.Empty; /// /// How often an attempt at the emote will be made. /// - [DataField("interval", required: true)] + [DataField(required: true)] public TimeSpan Interval; /// /// Probability of performing the emote each interval. - /// + /// [DataField("chance")] public float Chance = 1; /// /// Also send the emote in chat. - /// - [DataField("withChat")] + /// + [DataField] public bool WithChat = true; + /// + /// Should we ignore action blockers? + /// This does nothing if WithChat is false. + /// + [DataField] + public bool IgnoreActionBlocker; + + /// + /// Should we ignore whitelists and force the emote? + /// This does nothing if WithChat is false. + /// + [DataField] + public bool Force; + /// /// Hide the chat message from the chat window, only showing the popup. /// This does nothing if WithChat is false. - /// - [DataField("hiddenFromChatWindow")] - public bool HiddenFromChatWindow = false; + /// + [DataField] + public bool HiddenFromChatWindow; } diff --git a/Resources/Prototypes/Entities/Objects/Misc/kudzu.yml b/Resources/Prototypes/Entities/Objects/Misc/kudzu.yml index 6c01a2a8dd..1afe45e5ef 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/kudzu.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/kudzu.yml @@ -256,13 +256,9 @@ Quantity: 2 - ReagentId: Protein Quantity: 1 - - type: Respirator - damage: - types: - Asphyxiation: 0.25 - damageRecovery: - types: - Asphyxiation: -0.25 + - type: AutoEmote # Meat Kudzu used to have respirator, but couldn't breathe so all it would do is gasp. + emotes: + - MeatGasp - type: Tag tags: - Meat diff --git a/Resources/Prototypes/Voice/auto_emotes.yml b/Resources/Prototypes/Voice/auto_emotes.yml index 2d2de26604..4b9830ccd5 100644 --- a/Resources/Prototypes/Voice/auto_emotes.yml +++ b/Resources/Prototypes/Voice/auto_emotes.yml @@ -12,3 +12,12 @@ interval: 5.0 chance: 0.5 withChat: false +# Kudzu +- type: autoEmote + id: MeatGasp + emote: Gasp + interval: 4.0 # Same interval as a full breathing cycle + chance: 0.01 # Make it very rare + ignoreActionBlocker: true + force: true + hiddenFromChatWindow: true