diff --git a/code/modules/client/preference_setup/global/02_settings.dm b/code/modules/client/preference_setup/global/02_settings.dm index 16dc0f91bd..b3da6ef214 100644 --- a/code/modules/client/preference_setup/global/02_settings.dm +++ b/code/modules/client/preference_setup/global/02_settings.dm @@ -83,9 +83,17 @@ return ..() +/** + * This can take either a single preference datum or a list of preferences, and will return true if *all* preferences in the arguments are enabled. + */ /client/proc/is_preference_enabled(var/preference) - var/datum/client_preference/cp = get_client_preference(preference) - return cp && (cp.key in prefs.preferences_enabled) + if(!islist(preference)) + preference = list(preference) + for(var/p in preference) + var/datum/client_preference/cp = get_client_preference(p) + if(!cp || !(cp.key in prefs.preferences_enabled)) + return FALSE + return TRUE /client/proc/set_preference(var/preference, var/set_preference) var/datum/client_preference/cp = get_client_preference(preference) diff --git a/code/modules/client/preference_setup/global/setting_datums.dm b/code/modules/client/preference_setup/global/setting_datums.dm index 854ecfc357..06e44c3fd8 100644 --- a/code/modules/client/preference_setup/global/setting_datums.dm +++ b/code/modules/client/preference_setup/global/setting_datums.dm @@ -95,6 +95,12 @@ var/list/_client_preferences_by_type key = "DIGEST_NOISES" enabled_description = "Noisy" disabled_description = "Silent" + +/datum/client_preference/belch_noises // Belching noises - pref toggle for 'em + description = "Burping" + key = "BELCH_NOISES" + enabled_description = "Noisy" + disabled_description = "Silent" /datum/client_preference/emote_noises description = "Emote Noises" //MERP diff --git a/code/modules/client/preferences_vr.dm b/code/modules/client/preferences_vr.dm index 783ee0c4ae..5dda608597 100644 --- a/code/modules/client/preferences_vr.dm +++ b/code/modules/client/preferences_vr.dm @@ -39,7 +39,21 @@ SScharacter_setup.queue_preferences_save(prefs) feedback_add_details("admin_verb","TDigestNoise") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/client/verb/toggle_belch_noises() + set name = "Audible belching" + set category = "Preferences" + set desc = "Toggles audible belches." + var/pref_path = /datum/client_preference/belch_noises + + toggle_preference(pref_path) + + to_chat(src, "You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] hear belching.") + + SScharacter_setup.queue_preferences_save(prefs) + + feedback_add_details("admin_verb","TBelchNoise") /client/verb/toggle_emote_noises() set name = "Emote Noises" diff --git a/code/modules/emotes/definitions/audible_belch.dm b/code/modules/emotes/definitions/audible_belch.dm index 68de583061..3bb3b6a17c 100644 --- a/code/modules/emotes/definitions/audible_belch.dm +++ b/code/modules/emotes/definitions/audible_belch.dm @@ -2,6 +2,7 @@ key = "belch" emote_message_3p = "belches." message_type = AUDIBLE_MESSAGE + sound_preferences = list(/datum/client_preference/emote_noises,/datum/client_preference/belch_noises) /decl/emote/audible/belch/get_emote_sound(var/atom/user) return list( diff --git a/code/modules/emotes/emote_define.dm b/code/modules/emotes/emote_define.dm index 9a1debb429..4bedd91eb0 100644 --- a/code/modules/emotes/emote_define.dm +++ b/code/modules/emotes/emote_define.dm @@ -42,6 +42,8 @@ var/global/list/emotes_by_key var/check_range // falsy, or a range outside which the emote will not work var/conscious = TRUE // Do we need to be awake to emote this? var/emote_range = 0 // If >0, restricts emote visibility to viewers within range. + + var/sound_preferences = list(/datum/client_preference/emote_noises) // Default emote sound_preferences is just emote_noises. Belch emote overrides this list for pref-checks. /decl/emote/Initialize() . = ..() @@ -176,7 +178,7 @@ var/global/list/emotes_by_key if(islist(sound_to_play) && length(sound_to_play)) sound_to_play = pick(sound_to_play) if(sound_to_play) - playsound(user.loc, sound_to_play, use_sound["vol"], 0, preference = /datum/client_preference/emote_noises) //VOREStation Add - Preference + playsound(user.loc, sound_to_play, use_sound["vol"], 0, preference = sound_preferences) //VOREStation Add - Preference /decl/emote/proc/mob_can_use(var/mob/user) return istype(user) && user.stat != DEAD && (type in user.get_available_emotes()) diff --git a/code/modules/vore/eating/vorepanel_vr.dm b/code/modules/vore/eating/vorepanel_vr.dm index d823ad8bae..2b00d23391 100644 --- a/code/modules/vore/eating/vorepanel_vr.dm +++ b/code/modules/vore/eating/vorepanel_vr.dm @@ -51,6 +51,7 @@ if(!ui) ui = new(user, src, "VorePanel", "Vore Panel") ui.open() + ui.set_autoupdate(FALSE) // This looks weird, but all tgui_host is used for is state checking // So this allows us to use the self_state just fine.