using Content.Shared.Chat.Prototypes; using Content.Shared.Humanoid; using Robust.Shared.Audio; using Robust.Shared.GameStates; using Robust.Shared.Prototypes; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.Dictionary; namespace Content.Shared.Speech.Components; /// /// Component required for entities to be able to do vocal emotions. /// [RegisterComponent, NetworkedComponent] [AutoGenerateComponentState] public sealed partial class VocalComponent : Component { /// /// Emote sounds prototype id for each sex (not gender). /// Entities without considered to be . /// [DataField] [AutoNetworkedField] public Dictionary>? Sounds; [DataField("screamId", customTypeSerializer: typeof(PrototypeIdSerializer))] [AutoNetworkedField] public string ScreamId = "Scream"; [DataField("wilhelm")] [AutoNetworkedField] public SoundSpecifier Wilhelm = new SoundPathSpecifier("/Audio/Voice/Human/wilhelm_scream.ogg"); [DataField("wilhelmProbability")] [AutoNetworkedField] public float WilhelmProbability = 0.0002f; [DataField("screamAction", customTypeSerializer: typeof(PrototypeIdSerializer))] [AutoNetworkedField] public string? ScreamAction = "ActionScream"; [DataField("screamActionEntity")] [AutoNetworkedField] public EntityUid? ScreamActionEntity; /// /// Currently loaded emote sounds prototype, based on entity sex. /// Null if no valid prototype for entity sex was found. /// [ViewVariables] [AutoNetworkedField] public ProtoId? EmoteSounds = null; }