Merge pull request #14874 from Runa-Dacino/subtlenoms

Adds new preference for vore privacy
This commit is contained in:
Heroman3003
2023-05-22 06:59:12 +10:00
committed by GitHub
8 changed files with 103 additions and 9 deletions
@@ -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
+32 -5
View File
@@ -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("<font color='green'><b>[owner] [release_verb] everything from their [lowertext(name)]!</b></font>")
owner.visible_message("<font color='green'><b>[owner] [release_verb] everything from their [lowertext(name)]!</b></font>", 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("<font color='green'><b>[owner] [release_verb] [M] from their [lowertext(name)]!</b></font>")
owner.visible_message("<font color='green'><b>[owner] [release_verb] [M] from their [lowertext(name)]!</b></font>",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
+21 -2
View File
@@ -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, "<span class='warning'>They aren't aren't in a state to be devoured.</span>")
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 = "<span class='warning'>[user] manages to make [pred] [lowertext(belly.vore_verb)] [prey] into their [lowertext(belly.name)]!</span>"
// 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 += "<b>Spontaneous transformation:</b> [allow_spontaneous_tf ? "Enabled" : "Disabled"]<br>"
dispvoreprefs += "<b>Can be stepped on/over:</b> [step_mechanics_pref ? "Allowed" : "Disallowed"]<br>"
dispvoreprefs += "<b>Can be picked up:</b> [pickup_pref ? "Allowed" : "Disallowed"]<br>"
dispvoreprefs += "<b>Global Vore Privacy is:</b> [eating_privacy_global ? "Subtle" : "Loud"]<br>"
user << browse("<html><head><title>Vore prefs: [src]</title></head><body><center>[dispvoreprefs]</center></body></html>", "window=[name]mvp;size=300x400;can_resize=1;can_minimize=0")
onclose(user, "[name]")
return
+5
View File
@@ -55,6 +55,7 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
var/allowmobvore = TRUE
var/permit_healbelly = TRUE
var/noisy = FALSE
var/eating_privacy_global = FALSE //Makes eating attempt/success messages only reach for subtle range if true, overwritten by belly-specific var
// These are 'modifier' prefs, do nothing on their own but pair with drop_prey/drop_pred settings.
var/drop_vore = TRUE
@@ -192,6 +193,7 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
nutrition_messages = json_from_file["nutrition_messages"]
weight_message_visible = json_from_file["weight_message_visible"]
weight_messages = json_from_file["weight_messages"]
eating_privacy_global = json_from_file["eating_privacy_global"]
//Quick sanitize
if(isnull(digestable))
@@ -246,6 +248,8 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
nutrition_message_visible = TRUE
if(isnull(weight_message_visible))
weight_message_visible = TRUE
if(isnull(eating_privacy_global))
eating_privacy_global = FALSE
if(isnull(nutrition_messages))
nutrition_messages = list(
"They are starving! You can hear their stomach snarling from across the room!",
@@ -316,6 +320,7 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
"nutrition_messages" = nutrition_messages,
"weight_message_visible" = weight_message_visible,
"weight_messages" = weight_messages,
"eating_privacy_global" = eating_privacy_global,
)
//List to JSON
+15 -1
View File
@@ -191,6 +191,7 @@
"belly_fullscreen" = selected.belly_fullscreen,
"belly_fullscreen_color" = selected.belly_fullscreen_color,
"colorization_enabled" = selected.colorization_enabled,
"eating_privacy_local" = selected.eating_privacy_local
)
var/list/addons = list()
@@ -284,7 +285,8 @@
"nutrition_message_visible" = host.nutrition_message_visible,
"nutrition_messages" = host.nutrition_messages,
"weight_message_visible" = host.weight_message_visible,
"weight_messages" = host.weight_messages
"weight_messages" = host.weight_messages,
"eating_privacy_global" = host.eating_privacy_global
)
return data
@@ -450,6 +452,12 @@
host.client.prefs_vr.digestable = host.digestable
unsaved_changes = TRUE
return TRUE
if("toggle_global_privacy")
host.eating_privacy_global = !host.eating_privacy_global
if(host.client.prefs_vr)
host.eating_privacy_global = host.eating_privacy_global
unsaved_changes = TRUE
return TRUE
if("toggle_devour")
host.devourable = !host.devourable
if(host.client.prefs_vr)
@@ -1101,6 +1109,12 @@
host.vore_selected.release_verb = new_release_verb
. = TRUE
if("b_eating_privacy")
var/privacy_choice = tgui_input_list(usr, "Choose your belly-specific preference. Default uses global preference!", "Eating message privacy", list("default", "subtle", "loud"), "default")
if(privacy_choice == null)
return FALSE
host.vore_selected.eating_privacy_local = privacy_choice
. = TRUE
if("b_fancy_sound")
host.vore_selected.fancy_vore = !host.vore_selected.fancy_vore
host.vore_selected.vore_sound = "Gulp"
+1
View File
@@ -245,6 +245,7 @@
new_mob.vore_smell = vore_smell
new_mob.nutrition_message_visible = nutrition_message_visible
new_mob.allow_spontaneous_tf = allow_spontaneous_tf
new_mob.eating_privacy_global = eating_privacy_global
/////SUBTYPES/////
@@ -451,6 +451,7 @@ const VoreSelectedBellyOptions = (props, context) => {
egg_type,
selective_preference,
save_digest_mode,
eating_privacy_local,
} = belly;
return (
@@ -512,6 +513,12 @@ const VoreSelectedBellyOptions = (props, context) => {
content={display_absorbed_examine ? 'True' : 'False'}
/>
</LabeledList.Item>
<LabeledList.Item label="Toggle Vore Privacy">
<Button
onClick={() => act('set_attribute', { attribute: 'b_eating_privacy' })}
content={capitalize(eating_privacy_local)}
/>
</LabeledList.Item>
<LabeledList.Item label="Save Digest Mode">
<Button
@@ -878,6 +885,7 @@ const VoreUserPreferences = (props, context) => {
throw_vore,
nutrition_message_visible,
weight_message_visible,
eating_privacy_global,
} = data.prefs;
const { show_pictures } = data;
@@ -1198,6 +1206,22 @@ const VoreUserPreferences = (props, context) => {
disabled: 'Examine Weight Messages Inactive',
},
},
eating_privacy_global: {
action: 'toggle_global_privacy',
test: eating_privacy_global,
tooltip: {
main:
'Sets default belly behaviour for vorebellies for announcing' +
' ingesting or expelling prey' +
' Overwritten by belly-specific preferences if set.',
enable: ' Click here to turn your messages subtle',
disable: ' Click here to turn your messages loud',
},
content: {
enabled: 'Global Vore Privacy: Subtle',
disabled: 'Global Vore Privacy: Loud',
},
},
};
return (
@@ -1272,6 +1296,9 @@ const VoreUserPreferences = (props, context) => {
<Flex.Item basis="32%">
<Button fluid content="Selective Mode Preference" onClick={() => act('switch_selective_mode_pref')} />
</Flex.Item>
<Flex.Item basis="32%" grow={3}>
<VoreUserPreferenceItem spec={preferences.eating_privacy_global} />
</Flex.Item>
</Flex>
<Section title="Aesthetic Preferences">
<Flex spacing={1} wrap="wrap" justify="center">
File diff suppressed because one or more lines are too long