From 258d55da2ac11dd6a7cd90c6d1bdb681db1895fd Mon Sep 17 00:00:00 2001 From: FoxxoTrystan Date: Sun, 8 Dec 2024 17:33:33 +0100 Subject: [PATCH 1/8] Mantis/RD can hypno --- Resources/Prototypes/Floof/Traits/mental.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Resources/Prototypes/Floof/Traits/mental.yml b/Resources/Prototypes/Floof/Traits/mental.yml index 237bb819ea2..ac16c8e4559 100644 --- a/Resources/Prototypes/Floof/Traits/mental.yml +++ b/Resources/Prototypes/Floof/Traits/mental.yml @@ -14,6 +14,8 @@ jobs: - Chaplain - Librarian + - ForensicMantis + - ResearchDirector - !type:CharacterLogicOrRequirement requirements: - !type:CharacterSpeciesRequirement From c54eb6feaa0737a055e73594af6e43f4ff8fd8f0 Mon Sep 17 00:00:00 2001 From: FoxxoTrystan Date: Sun, 8 Dec 2024 20:15:50 +0100 Subject: [PATCH 2/8] vore patch --- Content.Client/Floofstation/VoredSystem.cs | 22 ++++++++- Content.Client/Options/UI/Tabs/AudioTab.xaml | 1 + .../Options/UI/Tabs/AudioTab.xaml.cs | 9 +++- .../Psionics/Abilities/PsionicHypnoSystem.cs | 2 +- Content.Server/FloofStation/VoreSystem.cs | 48 ++++++++++++++++--- .../Resist/EscapeInventorySystem.cs | 23 +++++---- Content.Shared/Floofstation/FloofCCvars.cs | 14 ++++++ Resources/Locale/en-US/Blep/consent.ftl | 5 +- Resources/Locale/en-US/Floof/hypno.ftl | 30 ++++++------ Resources/Locale/en-US/Floof/vore.ftl | 2 + Resources/Prototypes/consent.yml | 3 ++ 11 files changed, 123 insertions(+), 36 deletions(-) create mode 100644 Content.Shared/Floofstation/FloofCCvars.cs diff --git a/Content.Client/Floofstation/VoredSystem.cs b/Content.Client/Floofstation/VoredSystem.cs index c39a4c9fe25..ad1f6add230 100644 --- a/Content.Client/Floofstation/VoredSystem.cs +++ b/Content.Client/Floofstation/VoredSystem.cs @@ -1,5 +1,7 @@ +using Content.Shared.CCVar; using Content.Shared.FloofStation; using Robust.Shared.Audio.Systems; +using Robust.Shared.Configuration; using Robust.Shared.Player; namespace Content.Client.Floofstation; @@ -8,6 +10,7 @@ public sealed partial class VoredSystem : EntitySystem { [Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly ISharedPlayerManager _playerMan = default!; + [Dependency] private readonly IConfigurationManager _configManager = default!; public override void Initialize() { @@ -17,11 +20,14 @@ public override void Initialize() SubscribeLocalEvent(Onhutdown); SubscribeLocalEvent(OnPlayerAttached); SubscribeLocalEvent(OnPlayerDetached); + + Subs.CVar(_configManager, FloofCCVars.VoreSoundEnabled, VoreSoundCVarChanged); } private void OnInit(EntityUid uid, VoredComponent component, ComponentInit args) { - if (uid != _playerMan.LocalEntity) + if (uid != _playerMan.LocalEntity + || !_configManager.GetCVar(FloofCCVars.VoreSoundEnabled)) return; component.Stream = _audio.PlayGlobal(component.SoundBelly, Filter.Local(), false)?.Entity; @@ -35,8 +41,22 @@ private void Onhutdown(EntityUid uid, VoredComponent component, ComponentShutdow QueueDel(component.Stream); } + private void VoreSoundCVarChanged(bool voreEnabled) + { + if (!TryComp(_playerMan.LocalEntity, out var component)) + return; + + if (voreEnabled) + component.Stream = _audio.PlayGlobal(component.SoundBelly, Filter.Local(), false)?.Entity; + else + QueueDel(component.Stream); + } + private void OnPlayerAttached(EntityUid uid, VoredComponent component, LocalPlayerAttachedEvent args) { + if (!_configManager.GetCVar(FloofCCVars.VoreSoundEnabled)) + return; + component.Stream = _audio.PlayGlobal(component.SoundBelly, Filter.Local(), false)?.Entity; } diff --git a/Content.Client/Options/UI/Tabs/AudioTab.xaml b/Content.Client/Options/UI/Tabs/AudioTab.xaml index 78b0e82629e..b012e874c17 100644 --- a/Content.Client/Options/UI/Tabs/AudioTab.xaml +++ b/Content.Client/Options/UI/Tabs/AudioTab.xaml @@ -121,6 +121,7 @@ Text="{Loc 'ui-options-announcer-disable-multiple-sounds'}" ToolTip="{Loc 'ui-options-announcer-disable-multiple-sounds-tooltip'}" /> + diff --git a/Content.Client/Options/UI/Tabs/AudioTab.xaml.cs b/Content.Client/Options/UI/Tabs/AudioTab.xaml.cs index 7da80d774bd..368ee1363a7 100644 --- a/Content.Client/Options/UI/Tabs/AudioTab.xaml.cs +++ b/Content.Client/Options/UI/Tabs/AudioTab.xaml.cs @@ -1,5 +1,6 @@ using Content.Client.Audio; using Content.Shared.CCVar; +using Content.Shared.FloofStation; using Robust.Client.Audio; using Robust.Client.AutoGenerated; using Robust.Client.UserInterface; @@ -24,6 +25,7 @@ public AudioTab() _audio = IoCManager.Resolve(); LobbyMusicCheckBox.Pressed = _cfg.GetCVar(CCVars.LobbyMusicEnabled); + VoreSoundCheckBox.Pressed = _cfg.GetCVar(FloofCCVars.VoreSoundEnabled); RestartSoundsCheckBox.Pressed = _cfg.GetCVar(CCVars.RestartSoundsEnabled); EventMusicCheckBox.Pressed = _cfg.GetCVar(CCVars.EventMusicEnabled); AdminSoundsCheckBox.Pressed = _cfg.GetCVar(CCVars.AdminSoundsEnabled); @@ -42,6 +44,7 @@ public AudioTab() AnnouncerVolumeSlider, LobbyMusicCheckBox, + VoreSoundCheckBox, RestartSoundsCheckBox, EventMusicCheckBox, AnnouncerDisableMultipleSoundsCheckBox, @@ -87,6 +90,7 @@ protected override void Dispose(bool disposing) AnnouncerVolumeSlider, LobbyMusicCheckBox, + VoreSoundCheckBox, RestartSoundsCheckBox, EventMusicCheckBox, AnnouncerDisableMultipleSoundsCheckBox, @@ -129,6 +133,7 @@ private void OnApplyButtonPressed(BaseButton.ButtonEventArgs args) _cfg.SetCVar(CCVars.MaxAmbientSources, (int)AmbienceSoundsSlider.Value); _cfg.SetCVar(CCVars.LobbyMusicEnabled, LobbyMusicCheckBox.Pressed); + _cfg.SetCVar(FloofCCVars.VoreSoundEnabled, VoreSoundCheckBox.Pressed); _cfg.SetCVar(CCVars.RestartSoundsEnabled, RestartSoundsCheckBox.Pressed); _cfg.SetCVar(CCVars.EventMusicEnabled, EventMusicCheckBox.Pressed); _cfg.SetCVar(CCVars.AnnouncerDisableMultipleSounds, AnnouncerDisableMultipleSoundsCheckBox.Pressed); @@ -155,6 +160,7 @@ private void Reset() AmbienceSoundsSlider.Value = _cfg.GetCVar(CCVars.MaxAmbientSources); LobbyMusicCheckBox.Pressed = _cfg.GetCVar(CCVars.LobbyMusicEnabled); + VoreSoundCheckBox.Pressed = _cfg.GetCVar(FloofCCVars.VoreSoundEnabled); RestartSoundsCheckBox.Pressed = _cfg.GetCVar(CCVars.RestartSoundsEnabled); EventMusicCheckBox.Pressed = _cfg.GetCVar(CCVars.EventMusicEnabled); AnnouncerDisableMultipleSoundsCheckBox.Pressed = _cfg.GetCVar(CCVars.AnnouncerDisableMultipleSounds); @@ -182,12 +188,13 @@ private void UpdateChanges() var isAmbientSoundsSame = (int)AmbienceSoundsSlider.Value == _cfg.GetCVar(CCVars.MaxAmbientSources); var isLobbySame = LobbyMusicCheckBox.Pressed == _cfg.GetCVar(CCVars.LobbyMusicEnabled); + var isVoreSoundSame = VoreSoundCheckBox.Pressed == _cfg.GetCVar(FloofCCVars.VoreSoundEnabled); var isRestartSoundsSame = RestartSoundsCheckBox.Pressed == _cfg.GetCVar(CCVars.RestartSoundsEnabled); var isEventSame = EventMusicCheckBox.Pressed == _cfg.GetCVar(CCVars.EventMusicEnabled); var isAnnouncerDisableMultipleSoundsSame = AnnouncerDisableMultipleSoundsCheckBox.Pressed == _cfg.GetCVar(CCVars.AnnouncerDisableMultipleSounds); var isAdminSoundsSame = AdminSoundsCheckBox.Pressed == _cfg.GetCVar(CCVars.AdminSoundsEnabled); var isEverythingSame = isMasterVolumeSame && isMidiVolumeSame && isAmbientVolumeSame - && isAmbientMusicVolumeSame && isAmbientSoundsSame && isLobbySame && isRestartSoundsSame && isEventSame + && isAmbientMusicVolumeSame && isAmbientSoundsSame && isLobbySame && isVoreSoundSame && isRestartSoundsSame && isEventSame && isAnnouncerDisableMultipleSoundsSame && isAdminSoundsSame && isLobbyVolumeSame && isInterfaceVolumeSame && isAnnouncerVolumeSame; ApplyButton.Disabled = isEverythingSame; diff --git a/Content.Server/FloofStation/Abilities/Psionics/Abilities/PsionicHypnoSystem.cs b/Content.Server/FloofStation/Abilities/Psionics/Abilities/PsionicHypnoSystem.cs index 57a91e8a868..cb2a01fa792 100644 --- a/Content.Server/FloofStation/Abilities/Psionics/Abilities/PsionicHypnoSystem.cs +++ b/Content.Server/FloofStation/Abilities/Psionics/Abilities/PsionicHypnoSystem.cs @@ -62,7 +62,7 @@ private void OnPowerUsed(EntityUid uid, PsionicHypnoComponent component, HypnoPo if (HasComp(args.Target)) { - _popups.PopupEntity(Loc.GetString("hypno-already-under", ("target", uid)), uid, uid, PopupType.Large); + _popups.PopupEntity(Loc.GetString("hypno-already-under", ("target", args.Target)), uid, uid, PopupType.Large); return; } diff --git a/Content.Server/FloofStation/VoreSystem.cs b/Content.Server/FloofStation/VoreSystem.cs index 88f41787cf3..6e2fb2195b6 100644 --- a/Content.Server/FloofStation/VoreSystem.cs +++ b/Content.Server/FloofStation/VoreSystem.cs @@ -26,7 +26,6 @@ using Content.Shared.Nutrition.Components; using Content.Shared.Nutrition.EntitySystems; using Content.Server.Power.EntitySystems; -using Content.Server.Silicon.Charge; using Content.Shared.PowerCell.Components; using System.Linq; using Content.Shared.Forensics; @@ -34,8 +33,10 @@ using Content.Shared.Contests; using Content.Shared.Standing; using Content.Server.Power.Components; -using Content.Shared.PowerCell; using Content.Server.Nutrition.EntitySystems; +using Content.Shared.Interaction.Events; +using Content.Shared.Hands.Components; +using Content.Shared.Hands.EntitySystems; namespace Content.Server.FloofStation; @@ -60,6 +61,7 @@ public sealed class VoreSystem : EntitySystem [Dependency] private readonly StandingStateSystem _standingState = default!; [Dependency] private readonly SharedTransformSystem _transform = default!; [Dependency] private readonly FoodSystem _food = default!; + [Dependency] private readonly SharedHandsSystem _hands = default!; public override void Initialize() { @@ -73,6 +75,7 @@ public override void Initialize() SubscribeLocalEvent(OnRelease); SubscribeLocalEvent(OnSeeAttempt); + SubscribeLocalEvent(CheckInteraction); } private void OnInit(EntityUid uid, VoreComponent component, MapInitEvent args) @@ -83,6 +86,7 @@ private void OnInit(EntityUid uid, VoreComponent component, MapInitEvent args) private void AddVerbs(EntityUid uid, VoreComponent component, GetVerbsEvent args) { DevourVerb(uid, component, args); + InsertSelfVerb(uid, args); VoreVerb(uid, component, args); } @@ -92,21 +96,42 @@ private void DevourVerb(EntityUid uid, VoreComponent component, GetVerbsEvent(args.Target) - || !_consent.HasConsent(args.Target, "Vore") - || HasComp(args.User)) + || !_consent.HasConsent(args.User, "VorePred") + || !_consent.HasConsent(args.Target, "Vore")) return; InnateVerb verbDevour = new() { - Act = () => TryDevour(uid, args.Target, component), + Act = () => TryDevour(args.User, args.Target, component), Text = Loc.GetString("vore-devour"), - Category = VerbCategory.Vore, + Category = VerbCategory.Interaction, Icon = new SpriteSpecifier.Rsi(new ResPath("Interface/Actions/devour.rsi"), "icon-on"), Priority = -1 }; args.Verbs.Add(verbDevour); } + private void InsertSelfVerb(EntityUid uid, GetVerbsEvent args) + { + if (!args.CanInteract + || !args.CanAccess + || args.User == args.Target + || !TryComp(args.Target, out var component) + || !_consent.HasConsent(args.Target, "VorePred") + || !_consent.HasConsent(args.User, "Vore")) + return; + + InnateVerb verbInsert = new() + { + Act = () => TryDevour(args.Target, args.User, component), + Text = Loc.GetString("action-name-insert-self"), + Category = VerbCategory.Interaction, + Icon = new SpriteSpecifier.Rsi(new ResPath("Interface/Actions/devour.rsi"), "icon"), + Priority = -1 + }; + args.Verbs.Add(verbInsert); + } + private void VoreVerb(EntityUid uid, VoreComponent component, GetVerbsEvent args) { if (args.User != args.Target) @@ -210,6 +235,7 @@ public void Devour(EntityUid uid, EntityUid target, VoreComponent? component = n temp.AtmosTemperatureTransferEfficiency = 0; _containerSystem.Insert(target, component.Stomach); + _audioSystem.PlayPvs(component.SoundDevour, uid); _popups.PopupEntity(Loc.GetString("vore-devoured", ("entity", uid), ("prey", target)), uid, PopupType.LargeCaution); @@ -388,6 +414,14 @@ private void OnGibContents(EntityUid uid, VoreComponent component, ref BeingGibb _containerSystem.EmptyContainer(component.Stomach); } + private void CheckInteraction(EntityUid uid, VoredComponent component, InteractionAttemptEvent args) + { + if (component.Pred != args.Target) + return; + + args.Cancel(); + } + public override void Update(float frameTime) { base.Update(frameTime); @@ -400,7 +434,7 @@ public override void Update(float frameTime) vored.Accumulator += frameTime; - if (vored.Accumulator <= 1) + if (vored.Accumulator <= 5) continue; vored.Accumulator -= 1; diff --git a/Content.Server/Resist/EscapeInventorySystem.cs b/Content.Server/Resist/EscapeInventorySystem.cs index 610a7a7774c..7cab3d463be 100644 --- a/Content.Server/Resist/EscapeInventorySystem.cs +++ b/Content.Server/Resist/EscapeInventorySystem.cs @@ -59,8 +59,17 @@ private void OnRelayMovement(EntityUid uid, CanEscapeInventoryComponent componen if (!args.HasDirectionalMovement) return; - if (!_containerSystem.TryGetContainingContainer(uid, out var container) - || !_actionBlockerSystem.CanInteract(uid, container.Owner)) + if (!_containerSystem.TryGetContainingContainer(uid, out var container)) + return; + + // Vore - Floofstation + if (HasComp(uid)) + { + AttemptEscape(uid, container.Owner, component, 5f); + return; + } + + if (!_actionBlockerSystem.CanInteract(uid, container.Owner)) return; // Make sure there's nothing stopped the removal (like being glued) @@ -78,13 +87,6 @@ private void OnRelayMovement(EntityUid uid, CanEscapeInventoryComponent componen return; } - // Vore - Floofstation - if (HasComp(uid)) - { - AttemptEscape(uid, container.Owner, component, 5f); - return; - } - // Uncontested if (HasComp(container.Owner) || HasComp(container.Owner) || HasComp(container.Owner)) AttemptEscape(uid, container.Owner, component); @@ -100,7 +102,8 @@ private void OnRelayMovement(EntityUid uid, CanEscapeInventoryComponent componen BreakOnTargetMove = false, BreakOnUserMove = true, BreakOnDamage = true, - NeedHand = false + NeedHand = false, + RequireCanInteract = false }; if (!_doAfterSystem.TryStartDoAfter(doAfterEventArgs, out component.DoAfter)) diff --git a/Content.Shared/Floofstation/FloofCCvars.cs b/Content.Shared/Floofstation/FloofCCvars.cs new file mode 100644 index 00000000000..7c842395982 --- /dev/null +++ b/Content.Shared/Floofstation/FloofCCvars.cs @@ -0,0 +1,14 @@ +using Robust.Shared.Configuration; + +namespace Content.Shared.FloofStation; + +/// +/// Floofstation specific cvars. +/// +[CVarDefs] +// ReSharper disable once InconsistentNaming - Shush you +public sealed class FloofCCVars +{ + public static readonly CVarDef VoreSoundEnabled = + CVarDef.Create("ambience.vore_sound_enabled", true, CVar.ARCHIVE | CVar.CLIENTONLY); +} diff --git a/Resources/Locale/en-US/Blep/consent.ftl b/Resources/Locale/en-US/Blep/consent.ftl index 80bc6b08cd6..a3f032c475a 100644 --- a/Resources/Locale/en-US/Blep/consent.ftl +++ b/Resources/Locale/en-US/Blep/consent.ftl @@ -18,9 +18,12 @@ consent-examine-verb = Consent Info consent-examine-not-set = This player has no consent preferences set. Ask for consent first before engaging in any erotic roleplay. # Consent toggles -consent-Vore-name = Vore +consent-Vore-name = Vore Prey consent-Vore-desc = Allow yourself to be devoured by anyone... or anything. +consent-VorePred-name = Vore Pred +consent-VorePred-desc = Allow to devoured critters... or anyone that has the consent option 'vore' enabled. + consent-Digestion-name = Digestion consent-Digestion-desc = Allow yourself to be digested. WARNING: BEING DIGESTED WILL ROUND-REMOVE YOU. diff --git a/Resources/Locale/en-US/Floof/hypno.ftl b/Resources/Locale/en-US/Floof/hypno.ftl index fff095e5644..905b8d7e78e 100644 --- a/Resources/Locale/en-US/Floof/hypno.ftl +++ b/Resources/Locale/en-US/Floof/hypno.ftl @@ -1,24 +1,24 @@ action-name-hypno = Psionic Hypnosis -action-description-hypno = You are capable to hypnotize people and make them do your bidding. +action-description-hypno = You are capable to mentally interfere with people's thoughts, and make them do your bidding. -hypnosis-power-initialization-feedback = I am able to hypnotize and make people do my bidding, reaching them in the deepest parts of their mind. -hypnosis-power-feedback = {CAPITALIZE($entity)} wields the power to control minds. +hypnosis-power-initialization-feedback = I am able to place other in a trance and have them do my bidding, cementing my will in the deepest parts of their mind. +hypnosis-power-feedback = The air around {CAPITALIZE($entity)} shimmers hypnotically from the force of their personality" -hypno-already-under = {CAPITALIZE($target)} is already hypnotized. -examined-hypno = Looks mindless, happy... -lost-subject = I lost control of one of my subjects. -hypno-free = I feel able to make my own toughts again. +hypno-already-under = {CAPITALIZE($target)} is already under hypnosis. +examined-hypno = Seems completely content with everything +lost-subject = I feel my powers dissipate. My subject is once again free... +hypno-free = I have awoken from my trance... hypno-release = Release Subject hypno-break = Break Hypnosis hypno-start = You stare into {POSS-ADJ($target)} eyes... -hypno-phase-1 = {CAPITALIZE($target)} eyes glows in such pretty colors... it's hard to look away... -hypno-phase-2 = The more you stare at {POSS-ADJ($target)} eyes... the more its i's hard to think... to have a thought... -hypno-phase-3 = What was I doing... again? It's so hard to think... maybe I don't need to anymore, just stare... its just... so pretty... +hypno-phase-1 = {CAPITALIZE($target)} eyes are shining with a powerful but calming aura... +hypno-phase-2 = The deeper you look into {POSS-ADJ($target)} eyes... the more difficult it is to think... easier to listen... +hypno-phase-3 = It's so hard to think. Maybe... I don't need to anymore? Just sink... only {POSS-ADJ($target)}. hypno-success = {CAPITALIZE($target)} stares into your eyes, lost in them, lost in you. -mood-effect-BeingHypnotized = It's nice to not think, to be mindless... I love to obey. -mood-effect-LostHypnosis = It was nice to not think, I miss that. +mood-effect-BeingHypnotized = It's so wonderful to not have to think... to be mindless... Obedience is pleasure... +mood-effect-LostHypnosis = I miss being under trance like that... it was so much easier... hypnotized = [bold][color=red]You have been HYPNOTISED by {CAPITALIZE($entity)}! Warning: You are not an antag, and still cannot help antags. THIS IS NOT AN ANTAGONIST ROLE. @@ -30,11 +30,11 @@ hypnotist = [bold][color=red]You have enthralled {CAPITALIZE($entity)}! "in accordinace to server rules, of course."[/color][/bold] stophypno = [bold][color=red]You are no longer hypnotized! - You are no longer hypnotized by {CAPITALIZE($entity)}, you are now thinking properly again.[/color][/bold] + You are no longer under the mental control of {CAPITALIZE($entity)}.[/color][/bold] has-no-consent = I cannot enter his mind. trait-name-HypnoticGaze = Hypnotic Gaze trait-description-HypnoticGaze = - Your eyes pretty colors to enters peoples minds, you are capable of hypnotizing peoples, regardless of - whether or not you possess any notable psychic powers. + Within your eyes lies the ability to place others under your control. You are capable of placing others in a trance, regardless of + whether or not you possess any other notable psychic powers. diff --git a/Resources/Locale/en-US/Floof/vore.ftl b/Resources/Locale/en-US/Floof/vore.ftl index 3a46118c0ee..be3d0722a04 100644 --- a/Resources/Locale/en-US/Floof/vore.ftl +++ b/Resources/Locale/en-US/Floof/vore.ftl @@ -31,3 +31,5 @@ vore-digested-prey-7 = [color=red]{CAPITALIZE($entity)} belly kneads on every fi vore-digested-prey-8 = [color=red]{CAPITALIZE($entity)} belly churns you down into a hot slush. Your nutrient-rich remains course through their digestive track with a series of long, wet glorps.[/color] vore-examine = Their belly is larger, you can see {$count} shapes. + +ui-options-vore-sounds = Vore Sounds diff --git a/Resources/Prototypes/consent.yml b/Resources/Prototypes/consent.yml index f1c355e61dc..4096f7ab3b8 100644 --- a/Resources/Prototypes/consent.yml +++ b/Resources/Prototypes/consent.yml @@ -1,6 +1,9 @@ - type: consentToggle id: Vore +- type: consentToggle + id: VorePred + - type: consentToggle id: Digestion From adfe704e071431140e55a0eefa38d35909b69375 Mon Sep 17 00:00:00 2001 From: FoxxoTrystan Date: Sun, 8 Dec 2024 20:58:41 +0100 Subject: [PATCH 3/8] resomi patch --- .../Floof/Entities/Mobs/Species/resomi.yml | 65 ++++++++++++++++-- Resources/Prototypes/Floof/Species/resomi.yml | 8 ++- .../Customization/resomi_parts.rsi/tail.png | Bin 647 -> 725 bytes .../resomi_parts.rsi/tail_feathers.png | Bin 1111 -> 467 bytes .../Species/Resomi/displacement.rsi/belt.png | Bin 285 -> 357 bytes .../Species/Resomi/displacement.rsi/head.png | Bin 197 -> 340 bytes .../Species/Resomi/displacement.rsi/neck.png | Bin 564 -> 591 bytes 7 files changed, 68 insertions(+), 5 deletions(-) diff --git a/Resources/Prototypes/Floof/Entities/Mobs/Species/resomi.yml b/Resources/Prototypes/Floof/Entities/Mobs/Species/resomi.yml index ddbe45fd288..d4b00193300 100644 --- a/Resources/Prototypes/Floof/Entities/Mobs/Species/resomi.yml +++ b/Resources/Prototypes/Floof/Entities/Mobs/Species/resomi.yml @@ -13,14 +13,15 @@ - type: Fixtures fixtures: fix1: - shape: !type:PhysShapeCircle + shape: + !type:PhysShapeCircle radius: 0.35 density: 185 restitution: 0.0 mask: - - MobMask + - MobMask layer: - - MobLayer + - MobLayer - type: DamageVisuals thresholds: [ 10, 30, 50, 70 ] damageOverlayGroups: @@ -122,11 +123,67 @@ components: - type: HumanoidAppearance species: Resomi + - type: Hands + handDisplacement: + sizeMaps: + 32: + sprite: Floof/Mobs/Species/Resomi/displacement.rsi + state: inHand - type: Inventory - speciesId: Resomi + speciesId: resomi displacements: jumpsuit: sizeMaps: 32: sprite: Floof/Mobs/Species/Resomi/displacement.rsi state: jumpsuit + eyes: + sizeMaps: + 32: + sprite: Floof/Mobs/Species/Resomi/displacement.rsi + state: eyes + gloves: + sizeMaps: + 32: + sprite: Floof/Mobs/Species/Resomi/displacement.rsi + state: hands + head: + sizeMaps: + 32: + sprite: Floof/Mobs/Species/Resomi/displacement.rsi + state: head + back: + sizeMaps: + 32: + sprite: Floof/Mobs/Species/Resomi/displacement.rsi + state: back + ears: + sizeMaps: + 32: + sprite: Floof/Mobs/Species/Resomi/displacement.rsi + state: ears + shoes: + sizeMaps: + 32: + sprite: Floof/Mobs/Species/Resomi/displacement.rsi + state: feet + neck: + sizeMaps: + 32: + sprite: Floof/Mobs/Species/Resomi/displacement.rsi + state: neck + mask: + sizeMaps: + 32: + sprite: Floof/Mobs/Species/Resomi/displacement.rsi + state: mask + suitstorage: + sizeMaps: + 32: + sprite: Floof/Mobs/Species/Resomi/displacement.rsi + state: suitStorage + belt: + sizeMaps: + 32: + sprite: Floof/Mobs/Species/Resomi/displacement.rsi + state: belt diff --git a/Resources/Prototypes/Floof/Species/resomi.yml b/Resources/Prototypes/Floof/Species/resomi.yml index 1e8487952ae..85f94595b7e 100644 --- a/Resources/Prototypes/Floof/Species/resomi.yml +++ b/Resources/Prototypes/Floof/Species/resomi.yml @@ -12,6 +12,8 @@ femaleFirstNames: names_resomi_female naming: First customName: true + sexes: + - Unsexed - type: speciesBaseSprites id: MobResomiSprites @@ -42,7 +44,7 @@ points: 1 required: false Tail: - points: 1 + points: 2 required: true defaultMarkings: [ ResomiTail, ResomiTailFeathers ] Head: @@ -54,15 +56,19 @@ RightFoot: points: 1 required: false + defaultMarkings: [ ResomiRLegFeathers ] LeftFoot: points: 1 required: false + defaultMarkings: [ ResomiLLegFeathers ] RightHand: points: 1 required: false + defaultMarkings: [ ResomiRArmFeathers ] LeftHand: points: 1 required: false + defaultMarkings: [ ResomiLArmFeathers ] - type: humanoidBaseSprite id: MobResomiEyes diff --git a/Resources/Textures/Floof/Mobs/Customization/resomi_parts.rsi/tail.png b/Resources/Textures/Floof/Mobs/Customization/resomi_parts.rsi/tail.png index 59939326f957ec1dcbcc1a7501242e719b978c0d..5535c2d525ecf3af5998863fc03eb82050839a67 100644 GIT binary patch delta 701 zcmV;u0z&LrWb|kz!u4ctx_n1~3@j`je1=1T*t924)7pVzF2(7K_DV zu~;k?i{-CDM4MZ#*DJlV@1135`T~q42m)$b9||KHeXLQ^G=HTeNdN#+N}Nt7HfEg7 z32;82NlMxJTaqO3eSeS;jEL}fJaE6?0RV9vKmDOB%iaMz&l_?+EfhsT0Khp{+o-n( zIe$1D@S)qdC8!;x#x?+qngWvrh@uFepPy5Q8ADTqQO*Mz1OR}`<)UMl!6@O!p5OQV zZBBt2Qui%8wzV}$8Rbd^GFm(*$ z^#IdPht2i{bYTTBZGdU40HzHvjTJzx#Bsc>CgB8{zV4>9mbXq21hf-EAPhtLtqJ-+ zQI;jbFeD)aK3vyjx7+PcMS;peT-Rm0s;Wp;Nunrv5~3$6$oKs@Z5%{xOY22^^+EZ_ zIY(7hw0{G@9LE9Yyfbt9Eu&f^eZFwcRa=dzWQeJc4&LDV3k?(fz%HbeNRs5OCTUR= za2$sL&+h?D2my42QjKz+rD;0BT)ot`u-dj>`)eP+MS4w#nGk~VJa7B(fTWZ^s;Xj6v%L5+a`e1%wJ?yR21MO2OhEjH7mt02Mv!1KJu6EoO5bM jYEcwxx7%W|Sj_MbG9RfAKf9?K00000NkvXXu0mjf7uhbh delta 622 zcmV-!0+IdI1&0NYB!3BTNLh0L01FcU01FcV0GgZ_0006xNkl=B%6hv1{ zO2!S1S~YY!hEG7_OL77ZzyUNgZrrNY(5X<0*a;BZ7%Y3uSg%Vai2V;mk-lOPLcp5Y zumiA30@wlABmwLIY?1(W05(YgI{=#`fE|EM62K0?CJA5%V1JVYumiA30@wlAtX{wu z0C?}=oC5%y&*!@zxL&Wl1LS!=QM5rc9bNIxi+8(SngL&92RNNhI2;Z!vQQW;00551 zV~k;5rV;<{`xiwKM*xY?tXue53*K4>q6yGi#~NxdS(c4{?`VslF(%efLlI?JqAW|` z%}*bQyboYVz<-G1feAK31PP;USeTsxhcY>cFVe+l;5+z6}vET0j%yb%D zk_0K`-Pf}nhL#|qs;YnAoAorvl+ac@Kxl|CBy<%IkUBzhO6V&dhuiK7jt&eHnu(_;-yjn28?y$>4zqP}A4e0u8HiE4>F$sFpMMROPu*4lt!myDq~ z#xm{$yU<$07&9opwH8^H3E+MW5K1YaXC~mUcyYO0#^jAkoki5ydh^#c{z`g04hyAJ zsH&>%UuRE(*7{#pb&0ghga81K#RKjA0HKr$Hv<9qnPO7P-z({*bMqlKg##_W9$gI) z0RVZPKTfAnH?cDy06 diff --git a/Resources/Textures/Floof/Mobs/Customization/resomi_parts.rsi/tail_feathers.png b/Resources/Textures/Floof/Mobs/Customization/resomi_parts.rsi/tail_feathers.png index 9d26d682491c4ab1297ce22b1caa3b50b3d9e200..ac22a353b4f7121db64593fab07e4120e1ee3e71 100644 GIT binary patch delta 441 zcmV;q0Y?7U2-5?QB!2;OQb$4nuFf3k0004vNkl{l5Cz}^F*f}S_&&ewawhZY@%GF{OPdqd?lhebL6KOfQX2Qh=_=Y=+~&Kb%e=8j2hRfOPc1y~2L#saJZSYrX!0XAdFhBYhQbUX~?9MEkzC&hs^W z-$O*SEX&)0rfD>8Tz|p+ym<&gZI(zZM7ak(4BKGiz}wKZ9kcF z6ZZQ(ilV^baDa2}aiu=yfw*W9`C((Sy`AyZ30odMdNP%9^czn^ba-+K!$-rc&*mBZ jLn#eDlzM(5BKovHz%l5}yJuW$00000NkvXXu0mjfjHJ@c literal 1111 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9GG!XV7ZFl&wk0|VnG zPZ!6KiaBp*8m>EJAmDObu&6aCaEY%!-x1E*23xNenVKsCR+;?fPGR}U;lt#!=8d-E z0`um#9czL^b!Il{9yrF8z`bE3(+#GaH4NJrq_rE+g=QZWZ;+Ai=s02j(tZ72r_j%_ zjN2QJxAa?twidrL4zo|$e?R;7Him{}nH%or-RE1l>ZhoH(}iW3a{I1t(=FQ_TQoz5 zn?Y~C9YaVcD}#kxKf{M_S|_$KFj&m>EB{@$`DV{8rpSA&O11a1?|)y+oKh?PL*%BI zfK$Nxz1H*3b13%2AKRJVs5$@qKb{#~a~V(k;Q1jE#t_}mD|$dIA(?dp>x~G;97Z$j zLJ4L*GdDatmU}J9^I&^NhgfN>v&)v(R@=^>f3b^CX;EoxvZ(qRZ>7HLt5-P%PJ3E< zW{y=7m*R^#Y+9>+O|vfGjGv|&cCT98-KYKV!`bsTC+v-jKV1F(z56Ro_D4$`pG@~G zte*MtCTlUDeC4wlHOGYoW#i^J|2T2sYv8;m`lmF1Oc1FzUw(Pc!AJkO;jTO@uM~7^ z&Yey5?Z7By@O1TaS?83{^x_-Geq?@o9KZXAQp=?erl0wx_~rZ28Wk-E%~kW5Wr8@B zepKnrwD+AV`rzBQvg|o?R2!AH{%)bE3r=w@c;MP8QmoZ@uCw>deE+S^4jvP_ z7Wl~Da+(m8_B(mW^s0>lB2#wptSREyv48*jZ+1U^{<`(Hcku)FXV)ca6eEw`y&L;m zV+)_a>UveDLb3a7-&$V;XCFA;v0q)R<jlM*<(yjAoiLtyw#wHy$dwsd-?|Y?H&4n^ha~((OvUizCF&FrJYVY4Cc$EP7y$ zF5{xfsy{x&v%c7#-I!`@$?_uT!;ROBRl3h4N)0p^e5cpk5K_q9HieH_heLPzMa2fK z2M5nhGt9~pxx4mgy0r8$8z)g$(Pb%{RemHC3C##=O7>w%wpe)R%E2|u0s}eu-sVqF z+oy3;M{?WDH4KeLW=s_xstHPw>eX9&Uxzm(yixr%Q(xlu>!dPPjzvO8%v|k%^!zQ| zIGtgm--NpK1q|Ak+qXG97y4smxuQ7Z)^D@7pY7dlsYcIDMB diff --git a/Resources/Textures/Floof/Mobs/Species/Resomi/displacement.rsi/belt.png b/Resources/Textures/Floof/Mobs/Species/Resomi/displacement.rsi/belt.png index 3bfc191dbaebe38095aa14c04680f1b86c1047b5..46abece46b7839ddd6e8e00bd8828d3c9155f422 100644 GIT binary patch delta 318 zcmV-E0m1&A0_6gbFn<9bNkl9rHB2e+#xDhz>xb;kdj>8=r3 z7iuC200000036MbdqcQrX}Q33%a8HP@lVBf^atj|q-uk98G!T}LQBieHn+2{aM3c~ zG`xh6St@JX1(2%0^lU+C5bl=1w@tC81?~cn(jn9?fqVc%C z11z}>V7^A50N47ixedUI+Wlep8vpRKn`$Q{7w6Gm1Lvtw~82!+HUUntV^B>!f#ndx1-C?|=a6t9|FN|^a1JkPMD|f2C6!d;B z^kdb>_V*1FnEKA;Wgl-9QFzP!Zf2e$>yp<8H)VMpt*@`{^|*7Mr;K&}xw6$A1+o*g zH!S5o#5tjlJ9jRVBCE&mrs(eJOxz40(4e=fET~G(Y{@>^*-Mk(>`c1zP`*vz0pEjV z8Vkz*S+6|l$G(Gkhhu|vgER|}VfpszjhpwGRlH8$oVRq73%ddX<2!~ti24WN+qY}4 uIB8d-#@_PV?Zw<#wfkibmjmtSIm3N*gJs;+l9OvdR(iVnxvXML?-Y}Sk_R|V8XhDdC63L1`t><#eMhhi+%q( zKOdHF{QUUM-Tw`SAZbknSp{FlmkgO)9_$|4@gSuRVwUC$i}bR87Y(WHF#!o&nOJXC zrwEB}0U-!548yoEw0!vdKy2!ulKa=bnTCHSuzxE|0PO&@F#)s#(8dJN4nP|dpv747 zC8Q@k{5J`}{@T`=9{w*s1^n_M7IKP{a+36{^-mrYzc&fsL4SCB#_>ID29RHj)618G zAq7ZppFHR}_-#g1vYG7T{G7^pE1ixCkZ6 zUkh&vBsaNsrGNjIsPRv$$KT@v<=d3tWk8M2+Gk{@_$&cJp>=eCJ8)ki?O$LF!!V3D zW3{o|m<0-y`MX4}K;kYakdW-UH!G0%!vxR{KpPW4I{> z;6G9{2><{gb`(KWRM6(~@>8IX01X8S+CJA)Kp=-p_kZ=m`}q|$Lt54ccu(cyIFv+_Xds-VXx1|w-0pK1+qva;Mx#QvI~Sw7~AI)`)Dhb-LpPo@Gtrfjgw8h z3lM++U`jUWhW6+?{*9jrzzkp#`em;H4*K_>d(4ZVIASy{f|Ix!svq;_N`7M6iv&nM sQ*E#2StGzV`erYJq0Qgvxcp)02UxyoyR)g*nE(I)07*qoM6N<$f?pB(ZvX%Q delta 527 zcmV+q0`UFM1hfQ@Fnpg$G+z>x|l4V2;7XkdvL80@&fCK;=Bvd#LbV>n6|0aniFoma@30$ji z$Or&{m-7G+E>;CvVz?^MTB$q&3=aTDR7-gf6Y$OmI*}aag(+OWEwU7t)oiWV`(2Bo zyfE-M%Fy;Rdw-Bcz!9FU&&WdZMFdPcPjdi5$GSq+|G+pL4u|8*K);FsiDkvJs!&n6 z{_>|mC&1bOYd8Vc23W%hur|ONPJp!m)<~Mg6M$$vE33qV0EH77%68QFU!KdSKpO(O zT(6v?GifP^^L>5g{k&XZF&U!N*FFWd1{gk6wwi#vwtoXXNLZ8EAlmw6?-_4}20GfL zz*Ou+`T2u&s0avaJJ7@VH?p%*WOWJz6rJFFL)(2e=D(f@Aai|3DsF`%%)8fB=E`D%PDHLkV1l(V=@|e3 From 75d9838bfd0d677209407bd769179537a4c7ad64 Mon Sep 17 00:00:00 2001 From: FoxxoTrystan Date: Sun, 8 Dec 2024 21:24:36 +0100 Subject: [PATCH 4/8] subtle --- Content.Server/FloofStation/VoreSystem.cs | 6 +++--- Content.Shared/Floofstation/VoreComponent.cs | 2 +- Content.Shared/Floofstation/VoredComponent.cs | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Content.Server/FloofStation/VoreSystem.cs b/Content.Server/FloofStation/VoreSystem.cs index 6e2fb2195b6..211ecf43d5e 100644 --- a/Content.Server/FloofStation/VoreSystem.cs +++ b/Content.Server/FloofStation/VoreSystem.cs @@ -189,7 +189,7 @@ public void TryDevour(EntityUid uid, EntityUid target, VoreComponent? component if (_food.IsMouthBlocked(uid, uid)) return; - _popups.PopupEntity(Loc.GetString("vore-attempt-devour", ("entity", uid), ("prey", target)), uid, PopupType.LargeCaution); + _popups.PopupEntity(Loc.GetString("vore-attempt-devour", ("entity", uid), ("prey", target)), uid, PopupType.MediumCaution); if (!TryComp(uid, out var predPhysics) || !TryComp(target, out var preyPhysics)) @@ -238,7 +238,7 @@ public void Devour(EntityUid uid, EntityUid target, VoreComponent? component = n _audioSystem.PlayPvs(component.SoundDevour, uid); - _popups.PopupEntity(Loc.GetString("vore-devoured", ("entity", uid), ("prey", target)), uid, PopupType.LargeCaution); + _popups.PopupEntity(Loc.GetString("vore-devoured", ("entity", uid), ("prey", target)), uid, PopupType.SmallCaution); _adminLog.Add(LogType.Action, LogImpact.High, $"{ToPrettyString(uid)} vored {ToPrettyString(target)}"); } @@ -260,7 +260,7 @@ private void OnRelease(EntityUid uid, VoredComponent component, EntGotRemovedFro _audioSystem.PlayPvs(component.SoundRelease, args.Container.Owner); - _popups.PopupEntity(Loc.GetString("vore-released", ("entity", uid), ("pred", args.Container.Owner)), uid, PopupType.Large); + _popups.PopupEntity(Loc.GetString("vore-released", ("entity", uid), ("pred", args.Container.Owner)), uid, PopupType.Medium); _adminLog.Add(LogType.Action, LogImpact.Medium, $"{ToPrettyString(uid)} got released from {ToPrettyString(args.Container.Owner)} belly"); } diff --git a/Content.Shared/Floofstation/VoreComponent.cs b/Content.Shared/Floofstation/VoreComponent.cs index e551f482851..160f489ebd6 100644 --- a/Content.Shared/Floofstation/VoreComponent.cs +++ b/Content.Shared/Floofstation/VoreComponent.cs @@ -14,7 +14,7 @@ public sealed partial class VoreComponent : Component [DataField] public SoundSpecifier? SoundDevour = new SoundPathSpecifier("/Audio/Floof/Vore/gulp.ogg") { - Params = AudioParams.Default.WithVolume(-3f), + Params = AudioParams.Default.WithVolume(-4f).WithMaxDistance(1f), }; public Container Stomach = default!; } diff --git a/Content.Shared/Floofstation/VoredComponent.cs b/Content.Shared/Floofstation/VoredComponent.cs index 92a7b251d13..b37b06946c1 100644 --- a/Content.Shared/Floofstation/VoredComponent.cs +++ b/Content.Shared/Floofstation/VoredComponent.cs @@ -18,12 +18,12 @@ public sealed partial class VoredComponent : Component [DataField, AutoNetworkedField] public SoundSpecifier? SoundBelly = new SoundPathSpecifier("/Audio/Floof/Vore/stomach_loop.ogg") { - Params = AudioParams.Default.WithLoop(true).WithVolume(-3f), + Params = AudioParams.Default.WithLoop(true).WithVolume(-4f), }; [DataField] public SoundSpecifier? SoundRelease = new SoundPathSpecifier("/Audio/Effects/Fluids/splat.ogg") { - Params = AudioParams.Default.WithVolume(-3f), + Params = AudioParams.Default.WithVolume(-4f), }; } From 9e2887364026684b1af1cdd1d9ba020dd4d72579 Mon Sep 17 00:00:00 2001 From: FoxxoTrystan Date: Sun, 8 Dec 2024 23:15:15 +0100 Subject: [PATCH 5/8] private --- Content.Server/FloofStation/VoreSystem.cs | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/Content.Server/FloofStation/VoreSystem.cs b/Content.Server/FloofStation/VoreSystem.cs index 211ecf43d5e..89ff8b53b36 100644 --- a/Content.Server/FloofStation/VoreSystem.cs +++ b/Content.Server/FloofStation/VoreSystem.cs @@ -35,8 +35,8 @@ using Content.Server.Power.Components; using Content.Server.Nutrition.EntitySystems; using Content.Shared.Interaction.Events; -using Content.Shared.Hands.Components; using Content.Shared.Hands.EntitySystems; +using Robust.Shared.Player; namespace Content.Server.FloofStation; @@ -189,7 +189,8 @@ public void TryDevour(EntityUid uid, EntityUid target, VoreComponent? component if (_food.IsMouthBlocked(uid, uid)) return; - _popups.PopupEntity(Loc.GetString("vore-attempt-devour", ("entity", uid), ("prey", target)), uid, PopupType.MediumCaution); + _popups.PopupEntity(Loc.GetString("vore-attempt-devour", ("entity", uid), ("prey", target)), uid, target, PopupType.MediumCaution); + _popups.PopupEntity(Loc.GetString("vore-attempt-devour", ("entity", uid), ("prey", target)), target, uid, PopupType.MediumCaution); if (!TryComp(uid, out var predPhysics) || !TryComp(target, out var preyPhysics)) @@ -236,9 +237,10 @@ public void Devour(EntityUid uid, EntityUid target, VoreComponent? component = n _containerSystem.Insert(target, component.Stomach); - _audioSystem.PlayPvs(component.SoundDevour, uid); + _audioSystem.PlayEntity(component.SoundDevour, Filter.Pvs(uid), uid, false); - _popups.PopupEntity(Loc.GetString("vore-devoured", ("entity", uid), ("prey", target)), uid, PopupType.SmallCaution); + _popups.PopupEntity(Loc.GetString("vore-devoured", ("entity", uid), ("prey", target)), uid, target, PopupType.SmallCaution); + _popups.PopupEntity(Loc.GetString("vore-devoured", ("entity", uid), ("prey", target)), target, uid, PopupType.SmallCaution); _adminLog.Add(LogType.Action, LogImpact.High, $"{ToPrettyString(uid)} vored {ToPrettyString(target)}"); } @@ -258,9 +260,11 @@ private void OnRelease(EntityUid uid, VoredComponent component, EntGotRemovedFro if (TryComp(uid, out var temp)) temp.AtmosTemperatureTransferEfficiency = 0.1f; - _audioSystem.PlayPvs(component.SoundRelease, args.Container.Owner); + _audioSystem.PlayEntity(component.SoundRelease, Filter.Pvs(uid), uid, false); + _audioSystem.PlayEntity(component.SoundRelease, Filter.Pvs(args.Container.Owner), args.Container.Owner, false); - _popups.PopupEntity(Loc.GetString("vore-released", ("entity", uid), ("pred", args.Container.Owner)), uid, PopupType.Medium); + _popups.PopupEntity(Loc.GetString("vore-released", ("entity", uid), ("pred", args.Container.Owner)), uid, args.Container.Owner, PopupType.Medium); + _popups.PopupEntity(Loc.GetString("vore-released", ("entity", uid), ("pred", args.Container.Owner)), args.Container.Owner, uid, PopupType.Medium); _adminLog.Add(LogType.Action, LogImpact.Medium, $"{ToPrettyString(uid)} got released from {ToPrettyString(args.Container.Owner)} belly"); } From 493efb1277015c69ab827996239993c865b527f1 Mon Sep 17 00:00:00 2001 From: FoxxoTrystan Date: Mon, 9 Dec 2024 00:52:55 +0100 Subject: [PATCH 6/8] voresound local --- Content.Server/FloofStation/VoreSystem.cs | 33 ++++++++++++++++++----- 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/Content.Server/FloofStation/VoreSystem.cs b/Content.Server/FloofStation/VoreSystem.cs index 89ff8b53b36..86fc7cf2417 100644 --- a/Content.Server/FloofStation/VoreSystem.cs +++ b/Content.Server/FloofStation/VoreSystem.cs @@ -95,7 +95,7 @@ private void DevourVerb(EntityUid uid, VoreComponent component, GetVerbsEvent(args.Target) + || !HasComp(args.Target) || !_consent.HasConsent(args.User, "VorePred") || !_consent.HasConsent(args.Target, "Vore")) return; @@ -237,9 +237,25 @@ public void Devour(EntityUid uid, EntityUid target, VoreComponent? component = n _containerSystem.Insert(target, component.Stomach); - _audioSystem.PlayEntity(component.SoundDevour, Filter.Pvs(uid), uid, false); + if (_playerManager.TryGetSessionByEntity(target, out var sessionprey) + || sessionprey is not null) + _audioSystem.PlayEntity(component.SoundDevour, sessionprey, uid); + + if (_playerManager.TryGetSessionByEntity(uid, out var sessionpred) + || sessionpred is not null) + { + _audioSystem.PlayEntity(component.SoundDevour, sessionpred, uid); + // var message = Loc.GetString("", ("entity", uid)); + // _chatManager.ChatMessageToOne( + // ChatChannel.Emotes, + // message, + // message, + // EntityUid.Invalid, + // false, + // sessionprey.Channel); + } - _popups.PopupEntity(Loc.GetString("vore-devoured", ("entity", uid), ("prey", target)), uid, target, PopupType.SmallCaution); + _popups.PopupEntity(Loc.GetString("vore-devoured", ("entity", uid), ("prey", target)), target, target, PopupType.SmallCaution); _popups.PopupEntity(Loc.GetString("vore-devoured", ("entity", uid), ("prey", target)), target, uid, PopupType.SmallCaution); _adminLog.Add(LogType.Action, LogImpact.High, $"{ToPrettyString(uid)} vored {ToPrettyString(target)}"); @@ -260,11 +276,16 @@ private void OnRelease(EntityUid uid, VoredComponent component, EntGotRemovedFro if (TryComp(uid, out var temp)) temp.AtmosTemperatureTransferEfficiency = 0.1f; - _audioSystem.PlayEntity(component.SoundRelease, Filter.Pvs(uid), uid, false); - _audioSystem.PlayEntity(component.SoundRelease, Filter.Pvs(args.Container.Owner), args.Container.Owner, false); + if (_playerManager.TryGetSessionByEntity(args.Container.Owner, out var sessionpred) + || sessionpred is not null) + _audioSystem.PlayEntity(component.SoundRelease, sessionpred, uid); + + if (_playerManager.TryGetSessionByEntity(uid, out var sessionprey) + || sessionprey is not null) + _audioSystem.PlayEntity(component.SoundRelease, sessionprey, uid); _popups.PopupEntity(Loc.GetString("vore-released", ("entity", uid), ("pred", args.Container.Owner)), uid, args.Container.Owner, PopupType.Medium); - _popups.PopupEntity(Loc.GetString("vore-released", ("entity", uid), ("pred", args.Container.Owner)), args.Container.Owner, uid, PopupType.Medium); + _popups.PopupEntity(Loc.GetString("vore-released", ("entity", uid), ("pred", args.Container.Owner)), uid, uid, PopupType.Medium); _adminLog.Add(LogType.Action, LogImpact.Medium, $"{ToPrettyString(uid)} got released from {ToPrettyString(args.Container.Owner)} belly"); } From 2bc778dadcf945988d157a1c69fb195b17bed31c Mon Sep 17 00:00:00 2001 From: FloofStation Changelogs <175611579+Floof-Station-Bot@users.noreply.github.com> Date: Sun, 8 Dec 2024 23:57:08 +0000 Subject: [PATCH 7/8] Automatic Changelog Update (#398) --- Resources/Changelog/Floof.yml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/Resources/Changelog/Floof.yml b/Resources/Changelog/Floof.yml index 6431ac16e9a..e2d2386db26 100644 --- a/Resources/Changelog/Floof.yml +++ b/Resources/Changelog/Floof.yml @@ -1747,3 +1747,18 @@ Entries: id: 228 time: '2024-12-07T15:06:13.0000000+00:00' url: https://github.com/Fansana/floofstation1/pull/385 +- author: FoxxoTrystan + changes: + - type: Add + message: Add Vore Sound toggle in options. + - type: Add + message: Added Vore Pred and allow to insert yourself. + - type: Tweak + message: Vore Consent was changed to Vore Prey. + - type: Tweak + message: You can only vore others with the ability to vore. + - type: Fix + message: Fix Resomi Displacement Maps + id: 229 + time: '2024-12-08T23:56:42.0000000+00:00' + url: https://github.com/Fansana/floofstation1/pull/398 From 044a74bc61e13a63124c5602ad814456e572a7a2 Mon Sep 17 00:00:00 2001 From: FloofStation Changelogs <175611579+Floof-Station-Bot@users.noreply.github.com> Date: Sun, 8 Dec 2024 23:58:19 +0000 Subject: [PATCH 8/8] Automatic Changelog Update (#397) --- Resources/Changelog/Floof.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Resources/Changelog/Floof.yml b/Resources/Changelog/Floof.yml index e2d2386db26..b25d336e028 100644 --- a/Resources/Changelog/Floof.yml +++ b/Resources/Changelog/Floof.yml @@ -1762,3 +1762,10 @@ Entries: id: 229 time: '2024-12-08T23:56:42.0000000+00:00' url: https://github.com/Fansana/floofstation1/pull/398 +- author: Memeji + changes: + - type: Add + message: .20 Rifle Rubber Ammo Box to Bartender loadout. + id: 230 + time: '2024-12-08T23:57:51.0000000+00:00' + url: https://github.com/Fansana/floofstation1/pull/397