diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/vore.dm b/code/modules/mob/living/simple_mob/subtypes/vore/vore.dm
index ca99f6ec32f..fb761a167bb 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/vore.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/vore.dm
@@ -28,6 +28,7 @@
selective_preference = client.prefs_vr.selective_preference
appendage_color = client.prefs_vr.appendage_color
appendage_alt_setting = client.prefs_vr.appendage_alt_setting
+ eating_privacy_global = client.prefs_vr.eating_privacy_global
drop_vore = client.prefs_vr.drop_vore
stumble_vore = client.prefs_vr.stumble_vore
diff --git a/code/modules/vore/eating/belly_obj_vr.dm b/code/modules/vore/eating/belly_obj_vr.dm
index 2ae59893136..02960e0a4bd 100644
--- a/code/modules/vore/eating/belly_obj_vr.dm
+++ b/code/modules/vore/eating/belly_obj_vr.dm
@@ -54,6 +54,7 @@
var/emote_active = TRUE // Are we even giving emotes out at all or not?
var/next_emote = 0 // When we're supposed to print our next emote, as a world.time
var/selective_preference = DM_DIGEST // Which type of selective bellymode do we default to?
+ var/eating_privacy_local = "default" //Overrides eating_privacy_global if not "default". Determines if attempt/success messages are subtle/loud
// Generally just used by AI
var/autotransferchance = 0 // % Chance of prey being autotransferred to transfer location
@@ -226,7 +227,8 @@
"belly_fullscreen_color",
"colorization_enabled",
"egg_type",
- "save_digest_mode"
+ "save_digest_mode",
+ "eating_privacy_local"
)
if (save_digest_mode == 1)
@@ -391,16 +393,28 @@
if(!ishuman(owner))
owner.update_icons()
+ //Determines privacy
+ var/privacy_range = world.view
+ var/privacy_volume = 100
+ switch(eating_privacy_local) //Third case of if("loud") not defined, as it'd just leave privacy_range and volume untouched
+ if("default")
+ if(owner.eating_privacy_global)
+ privacy_range = 1
+ privacy_volume = 25
+ if("subtle")
+ privacy_range = 1
+ privacy_volume = 25
+
//Print notifications/sound if necessary
if(!silent && count)
- owner.visible_message("[owner] [release_verb] everything from their [lowertext(name)]!")
+ owner.visible_message("[owner] [release_verb] everything from their [lowertext(name)]!", range = privacy_range)
var/soundfile
if(!fancy_vore)
soundfile = classic_release_sounds[release_sound]
else
soundfile = fancy_release_sounds[release_sound]
if(soundfile)
- playsound(src, soundfile, vol = 100, vary = 1, falloff = VORE_SOUND_FALLOFF, preference = /datum/client_preference/eating_noises, volume_channel = VOLUME_CHANNEL_VORE)
+ playsound(src, soundfile, vol = privacy_volume, vary = 1, falloff = VORE_SOUND_FALLOFF, preference = /datum/client_preference/eating_noises, volume_channel = VOLUME_CHANNEL_VORE)
return count
@@ -459,16 +473,28 @@
if(!ishuman(owner))
owner.update_icons()
+ //Determines privacy
+ var/privacy_range = world.view
+ var/privacy_volume = 100
+ switch(eating_privacy_local) //Third case of if("loud") not defined, as it'd just leave privacy_range and volume untouched
+ if("default")
+ if(owner.eating_privacy_global)
+ privacy_range = 1
+ privacy_volume = 25
+ if("subtle")
+ privacy_range = 1
+ privacy_volume = 25
+
//Print notifications/sound if necessary
if(!silent)
- owner.visible_message("[owner] [release_verb] [M] from their [lowertext(name)]!")
+ owner.visible_message("[owner] [release_verb] [M] from their [lowertext(name)]!",range = privacy_range)
var/soundfile
if(!fancy_vore)
soundfile = classic_release_sounds[release_sound]
else
soundfile = fancy_release_sounds[release_sound]
if(soundfile)
- playsound(src, soundfile, vol = 100, vary = 1, falloff = VORE_SOUND_FALLOFF, preference = /datum/client_preference/eating_noises, volume_channel = VOLUME_CHANNEL_VORE)
+ playsound(src, soundfile, vol = privacy_volume, vary = 1, falloff = VORE_SOUND_FALLOFF, preference = /datum/client_preference/eating_noises, volume_channel = VOLUME_CHANNEL_VORE)
//Should fix your view not following you out of mobs sometimes!
if(ismob(M))
var/mob/ourmob = M
@@ -1187,6 +1213,7 @@
dupe.emote_active = emote_active
dupe.selective_preference = selective_preference
dupe.save_digest_mode = save_digest_mode
+ dupe.eating_privacy_local = eating_privacy_local
//// Object-holding variables
//struggle_messages_outside - strings
diff --git a/code/modules/vore/eating/living_vr.dm b/code/modules/vore/eating/living_vr.dm
index 9e37b888cea..66739c747b6 100644
--- a/code/modules/vore/eating/living_vr.dm
+++ b/code/modules/vore/eating/living_vr.dm
@@ -50,6 +50,7 @@
var/selective_preference = DM_DEFAULT // Preference for selective bellymode
var/appendage_color = "#e03997" //Default pink. Used for the 'long_vore' trait.
var/appendage_alt_setting = FALSE // Dictates if 'long_vore' user pulls prey to them or not. 1 = user thrown towards target.
+ var/eating_privacy_global = FALSE //Makes eating attempt/success messages only reach for subtle range if true, overwritten by belly-specific var
var/regen_sounds = list(
'sound/effects/mob_effects/xenochimera/regen_1.ogg',
'sound/effects/mob_effects/xenochimera/regen_2.ogg',
@@ -286,6 +287,7 @@
P.slip_vore = src.slip_vore
P.throw_vore = src.throw_vore
P.stumble_vore = src.stumble_vore
+ P.eating_privacy_global = src.eating_privacy_global
P.nutrition_message_visible = src.nutrition_message_visible
P.nutrition_messages = src.nutrition_messages
@@ -335,6 +337,7 @@
slip_vore = P.slip_vore
throw_vore = P.throw_vore
stumble_vore = P.stumble_vore
+ eating_privacy_global = P.eating_privacy_global
nutrition_message_visible = P.nutrition_message_visible
nutrition_messages = P.nutrition_messages
@@ -600,6 +603,18 @@
to_chat(user, "They aren't aren't in a state to be devoured.")
return FALSE
+ //Determining vore attempt privacy
+ var/message_range = world.view
+ if(!pred.is_slipping && !prey.is_slipping) //We only care about privacy preference if it's NOT a spontaneous vore.
+ switch(belly.eating_privacy_local) //if("loud") case not added, as it would not modify message_range
+ if("default")
+ if(pred.eating_privacy_global)
+ message_range = 1
+ if("subtle")
+ message_range = 1
+
+
+
// Slipnoms from chompstation downstream, credit to cadyn for the original PR.
// Prepare messages
if(prey.is_slipping)
@@ -616,7 +631,10 @@
success_msg = "[user] manages to make [pred] [lowertext(belly.vore_verb)] [prey] into their [lowertext(belly.name)]!"
// Announce that we start the attempt!
- user.visible_message(attempt_msg)
+
+
+ user.visible_message(attempt_msg, range = message_range)
+
// Now give the prey time to escape... return if they did
var/swallow_time
@@ -633,7 +651,7 @@
return FALSE // Prey escpaed (or user disabled) before timer expired.
// If we got this far, nom successful! Announce it!
- user.visible_message(success_msg)
+ user.visible_message(success_msg, range = message_range)
// Actually shove prey into the belly.
if(istype(prey.loc, /obj/item/weapon/holder))
@@ -1079,6 +1097,7 @@
dispvoreprefs += "Spontaneous transformation: [allow_spontaneous_tf ? "Enabled" : "Disabled"]
"
dispvoreprefs += "Can be stepped on/over: [step_mechanics_pref ? "Allowed" : "Disallowed"]
"
dispvoreprefs += "Can be picked up: [pickup_pref ? "Allowed" : "Disallowed"]
"
+ dispvoreprefs += "Global Vore Privacy is: [eating_privacy_global ? "Subtle" : "Loud"]
"
user << browse("