diff --git a/code/__defines/sound.dm b/code/__defines/sound.dm index 0995f0e071f..d954d34b2a0 100644 --- a/code/__defines/sound.dm +++ b/code/__defines/sound.dm @@ -8,11 +8,12 @@ #define CHANNEL_AMBIENCE 1018 #define CHANNEL_BUZZ 1017 #define CHANNEL_BICYCLE 1016 +#define CHANNEL_PREYLOOP 1015 //VORESTATION ADD - Fancy Sound Loop channel //THIS SHOULD ALWAYS BE THE LOWEST ONE! //KEEP IT UPDATED -#define CHANNEL_HIGHEST_AVAILABLE 1015 +#define CHANNEL_HIGHEST_AVAILABLE 1014 //VORESTATION EDIT - Fancy Sound Loop channel from 1015 #define SOUND_MINIMUM_PRESSURE 10 #define FALLOFF_SOUNDS 0.5 diff --git a/code/_helpers/global_lists_vr.dm b/code/_helpers/global_lists_vr.dm index d1037b37abd..c9a64048a8b 100644 --- a/code/_helpers/global_lists_vr.dm +++ b/code/_helpers/global_lists_vr.dm @@ -42,40 +42,8 @@ var/global/list/item_vore_blacklist = list( /obj/item/weapon/disk/nuclear, /obj/item/clothing/suit/storage/hooded/wintercoat/roiz) -var/global/list/digestion_sounds = list( - 'sound/vore/digest1.ogg', - 'sound/vore/digest2.ogg', - 'sound/vore/digest3.ogg', - 'sound/vore/digest4.ogg', - 'sound/vore/digest5.ogg', - 'sound/vore/digest6.ogg', - 'sound/vore/digest7.ogg', - 'sound/vore/digest8.ogg', - 'sound/vore/digest9.ogg', - 'sound/vore/digest10.ogg', - 'sound/vore/digest11.ogg', - 'sound/vore/digest12.ogg') - -var/global/list/death_sounds = list( - 'sound/vore/death1.ogg', - 'sound/vore/death2.ogg', - 'sound/vore/death3.ogg', - 'sound/vore/death4.ogg', - 'sound/vore/death5.ogg', - 'sound/vore/death6.ogg', - 'sound/vore/death7.ogg', - 'sound/vore/death8.ogg', - 'sound/vore/death9.ogg', - 'sound/vore/death10.ogg') - -var/global/list/hunger_sounds = list( - 'sound/vore/growl1.ogg', - 'sound/vore/growl2.ogg', - 'sound/vore/growl3.ogg', - 'sound/vore/growl4.ogg', - 'sound/vore/growl5.ogg') - -var/global/list/vore_sounds = list( +//Classic Vore sounds +var/global/list/classic_vore_sounds = list( "Gulp" = 'sound/vore/gulp.ogg', "Insert" = 'sound/vore/insert.ogg', "Insertion1" = 'sound/vore/insertion1.ogg', @@ -86,15 +54,55 @@ var/global/list/vore_sounds = list( "Squish2" = 'sound/vore/squish2.ogg', "Squish3" = 'sound/vore/squish3.ogg', "Squish4" = 'sound/vore/squish4.ogg', - "Rustle (cloth)" = 'sound/effects/rustle5.ogg', + "Rustle (cloth)" = 'sound/effects/rustle1.ogg', + "Rustle 2 (cloth)" = 'sound/effects/rustle2.ogg', + "Rustle 3 (cloth)" = 'sound/effects/rustle3.ogg', + "Rustle 4 (cloth)" = 'sound/effects/rustle4.ogg', + "Rustle 5 (cloth)" = 'sound/effects/rustle5.ogg', "None" = null) -var/global/list/struggle_sounds = list( - "Squish1" = 'sound/vore/squish1.ogg', - "Squish2" = 'sound/vore/squish2.ogg', - "Squish3" = 'sound/vore/squish3.ogg', - "Squish4" = 'sound/vore/squish4.ogg') +var/global/list/classic_release_sounds = list( + "Rustle (cloth)" = 'sound/effects/rustle1.ogg', + "Rustle 2 (cloth)" = 'sound/effects/rustle2.ogg', + "Rustle 3 (cloth)" = 'sound/effects/rustle3.ogg', + "Rustle 4 (cloth)" = 'sound/effects/rustle4.ogg', + "Rustle 5 (cloth)" = 'sound/effects/rustle5.ogg', + "Splatter" = 'sound/effects/splat.ogg', + "None" = null + ) +//Poojy's Fancy Sounds +var/global/list/fancy_vore_sounds = list( + "Gulp" = 'sound/vore/sunesound/pred/swallow_01.ogg', + "Swallow" = 'sound/vore/sunesound/pred/swallow_02.ogg', + "Insertion1" = 'sound/vore/sunesound/pred/insertion_01.ogg', + "Insertion2" = 'sound/vore/sunesound/pred/insertion_02.ogg', + "Tauric Swallow" = 'sound/vore/sunesound/pred/taurswallow.ogg', + "Stomach Move" = 'sound/vore/sunesound/pred/stomachmove.ogg', + "Schlorp" = 'sound/vore/sunesound/pred/schlorp.ogg', + "Squish1" = 'sound/vore/sunesound/pred/squish_01.ogg', + "Squish2" = 'sound/vore/sunesound/pred/squish_02.ogg', + "Squish3" = 'sound/vore/sunesound/pred/squish_03.ogg', + "Squish4" = 'sound/vore/sunesound/pred/squish_04.ogg', + "Rustle (cloth)" = 'sound/effects/rustle1.ogg', + "Rustle 2 (cloth)" = 'sound/effects/rustle2.ogg', + "Rustle 3 (cloth)" = 'sound/effects/rustle3.ogg', + "Rustle 4 (cloth)" = 'sound/effects/rustle4.ogg', + "Rustle 5 (cloth)" = 'sound/effects/rustle5.ogg', + "None" = null + ) + +var/global/list/fancy_release_sounds = list( + "Rustle (cloth)" = 'sound/effects/rustle1.ogg', + "Rustle 2 (cloth)" = 'sound/effects/rustle2.ogg', + "Rustle 3 (cloth)" = 'sound/effects/rustle3.ogg', + "Rustle 4 (cloth)" = 'sound/effects/rustle4.ogg', + "Rustle 5 (cloth)" = 'sound/effects/rustle5.ogg', + "Stomach Move" = 'sound/vore/sunesound/pred/stomachmove.ogg', + "Pred Escape" = 'sound/vore/sunesound/pred/escape.ogg', + "Splatter" = 'sound/effects/splat.ogg', + "None" = null + ) var/global/list/global_vore_egg_types = list( "Unathi" = UNATHI_EGG, diff --git a/code/game/sound.dm b/code/game/sound.dm index b1f0c32f66c..cd3b140bd9f 100644 --- a/code/game/sound.dm +++ b/code/game/sound.dm @@ -137,6 +137,46 @@ if ("button") soundin = pick('sound/machines/button1.ogg','sound/machines/button2.ogg','sound/machines/button3.ogg','sound/machines/button4.ogg') if ("switch") soundin = pick('sound/machines/switch1.ogg','sound/machines/switch2.ogg','sound/machines/switch3.ogg','sound/machines/switch4.ogg') if ("casing_sound") soundin = pick('sound/weapons/casingfall1.ogg','sound/weapons/casingfall2.ogg','sound/weapons/casingfall3.ogg') + //VORESTATION EDIT - vore sounds for better performance + if ("hunger_sounds") soundin = pick('sound/vore/growl1.ogg','sound/vore/growl2.ogg','sound/vore/growl3.ogg','sound/vore/growl4.ogg','sound/vore/growl5.ogg') + + if("classic_digestion_sounds") soundin = pick( + 'sound/vore/digest1.ogg','sound/vore/digest2.ogg','sound/vore/digest3.ogg','sound/vore/digest4.ogg', + 'sound/vore/digest5.ogg','sound/vore/digest6.ogg','sound/vore/digest7.ogg','sound/vore/digest8.ogg', + 'sound/vore/digest9.ogg','sound/vore/digest10.ogg','sound/vore/digest11.ogg','sound/vore/digest12.ogg') + if("classic_death_sounds") soundin = pick( + 'sound/vore/death1.ogg','sound/vore/death2.ogg','sound/vore/death3.ogg','sound/vore/death4.ogg','sound/vore/death5.ogg', + 'sound/vore/death6.ogg','sound/vore/death7.ogg','sound/vore/death8.ogg','sound/vore/death9.ogg','sound/vore/death10.ogg') + if("classic_struggle_sounds") soundin = pick('sound/vore/squish1.ogg','sound/vore/squish2.ogg','sound/vore/squish3.ogg','sound/vore/squish4.ogg') + + if("fancy_prey_struggle") soundin = pick( + 'sound/vore/sunesound/prey/struggle_01.ogg','sound/vore/sunesound/prey/struggle_02.ogg','sound/vore/sunesound/prey/struggle_03.ogg', + 'sound/vore/sunesound/prey/struggle_04.ogg','sound/vore/sunesound/prey/struggle_05.ogg') + if("fancy_digest_pred") soundin = pick( + 'sound/vore/sunesound/pred/digest_01.ogg','sound/vore/sunesound/pred/digest_02.ogg','sound/vore/sunesound/pred/digest_03.ogg', + 'sound/vore/sunesound/pred/digest_04.ogg','sound/vore/sunesound/pred/digest_05.ogg','sound/vore/sunesound/pred/digest_06.ogg', + 'sound/vore/sunesound/pred/digest_07.ogg','sound/vore/sunesound/pred/digest_08.ogg','sound/vore/sunesound/pred/digest_09.ogg', + 'sound/vore/sunesound/pred/digest_10.ogg','sound/vore/sunesound/pred/digest_11.ogg','sound/vore/sunesound/pred/digest_12.ogg', + 'sound/vore/sunesound/pred/digest_13.ogg','sound/vore/sunesound/pred/digest_14.ogg','sound/vore/sunesound/pred/digest_15.ogg', + 'sound/vore/sunesound/pred/digest_16.ogg','sound/vore/sunesound/pred/digest_17.ogg','sound/vore/sunesound/pred/digest_18.ogg') + if("fancy_death_pred") soundin = pick( + 'sound/vore/sunesound/pred/death_01.ogg','sound/vore/sunesound/pred/death_02.ogg','sound/vore/sunesound/pred/death_03.ogg', + 'sound/vore/sunesound/pred/death_04.ogg','sound/vore/sunesound/pred/death_05.ogg','sound/vore/sunesound/pred/death_06.ogg', + 'sound/vore/sunesound/pred/death_07.ogg','sound/vore/sunesound/pred/death_08.ogg','sound/vore/sunesound/pred/death_09.ogg', + 'sound/vore/sunesound/pred/death_10.ogg') + if("fancy_digest_prey") soundin = pick( + 'sound/vore/sunesound/prey/digest_01.ogg','sound/vore/sunesound/prey/digest_02.ogg','sound/vore/sunesound/prey/digest_03.ogg', + 'sound/vore/sunesound/prey/digest_04.ogg','sound/vore/sunesound/prey/digest_05.ogg','sound/vore/sunesound/prey/digest_06.ogg', + 'sound/vore/sunesound/prey/digest_07.ogg','sound/vore/sunesound/prey/digest_08.ogg','sound/vore/sunesound/prey/digest_09.ogg', + 'sound/vore/sunesound/prey/digest_10.ogg','sound/vore/sunesound/prey/digest_11.ogg','sound/vore/sunesound/prey/digest_12.ogg', + 'sound/vore/sunesound/prey/digest_13.ogg','sound/vore/sunesound/prey/digest_14.ogg','sound/vore/sunesound/prey/digest_15.ogg', + 'sound/vore/sunesound/prey/digest_16.ogg','sound/vore/sunesound/prey/digest_17.ogg','sound/vore/sunesound/prey/digest_18.ogg') + if("fancy_death_prey") soundin = pick( + 'sound/vore/sunesound/prey/death_01.ogg','sound/vore/sunesound/prey/death_02.ogg','sound/vore/sunesound/prey/death_03.ogg', + 'sound/vore/sunesound/prey/death_04.ogg','sound/vore/sunesound/prey/death_05.ogg','sound/vore/sunesound/prey/death_06.ogg', + 'sound/vore/sunesound/prey/death_07.ogg','sound/vore/sunesound/prey/death_08.ogg','sound/vore/sunesound/prey/death_09.ogg', + 'sound/vore/sunesound/prey/death_10.ogg') + //END VORESTATION EDIT return soundin //Are these even used? diff --git a/code/modules/client/preferences_vr.dm b/code/modules/client/preferences_vr.dm index 61c2d83025a..5c8171ce27c 100644 --- a/code/modules/client/preferences_vr.dm +++ b/code/modules/client/preferences_vr.dm @@ -2,3 +2,35 @@ datum/preferences var/show_in_directory = 1 //TFF 5/8/19 - show in Character Directory var/sensorpref = 5 //TFF 5/8/19 - set character's suit sensor level + +//Why weren't these in game toggles already? +/client/verb/toggle_eating_noises() + set name = "Eating Noises" + set category = "Preferences" + set desc = "Toggles Vore Eating noises." + + var/pref_path = /datum/client_preference/eating_noises + + toggle_preference(pref_path) + + src << "You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] hear eating related vore noises." + + SScharacter_setup.queue_preferences_save(prefs) + + feedback_add_details("admin_verb","TEatNoise") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + + +/client/verb/toggle_digestion_noises() + set name = "Digestion Noises" + set category = "Preferences" + set desc = "Toggles Vore Digestion noises." + + var/pref_path = /datum/client_preference/digestion_noises + + toggle_preference(pref_path) + + src << "You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] hear digestion related vore noises." + + 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! diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index cb63df8d563..bfa1d82e374 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -923,7 +923,7 @@ overeatduration -= 2 //doubled the unfat rate if(noisy == TRUE && nutrition < 250 && prob(10)) //VOREStation edit for hunger noises. - var/growlsound = pick(hunger_sounds) + var/sound/growlsound = sound(get_sfx("hunger_sounds")) var/growlmultiplier = 100 - (nutrition / 250 * 100) playsound(src, growlsound, vol = growlmultiplier, vary = 1, falloff = 0.1, ignore_walls = TRUE, preference = /datum/client_preference/digestion_noises) // VOREStation Edit End diff --git a/code/modules/vore/eating/belly_obj_vr.dm b/code/modules/vore/eating/belly_obj_vr.dm index d7559ce66c6..1c4fba15e2e 100644 --- a/code/modules/vore/eating/belly_obj_vr.dm +++ b/code/modules/vore/eating/belly_obj_vr.dm @@ -20,19 +20,22 @@ var/emote_time = 60 SECONDS // How long between stomach emotes at prey var/digest_brute = 2 // Brute damage per tick in digestion mode var/digest_burn = 2 // Burn damage per tick in digestion mode - var/immutable = 0 // Prevents this belly from being deleted - var/escapable = 0 // Belly can be resisted out of at any time + var/immutable = FALSE // Prevents this belly from being deleted + var/escapable = FALSE // Belly can be resisted out of at any time var/escapetime = 60 SECONDS // Deciseconds, how long to escape this belly var/digestchance = 0 // % Chance of stomach beginning to digest if prey struggles var/absorbchance = 0 // % Chance of stomach beginning to absorb if prey struggles var/escapechance = 0 // % Chance of prey beginning to escape if prey struggles. var/transferchance = 0 // % Chance of prey being - var/can_taste = 0 // If this belly prints the flavor of prey when it eats someone. + var/can_taste = FALSE // If this belly prints the flavor of prey when it eats someone. var/bulge_size = 0.25 // The minimum size the prey has to be in order to show up on examine. var/shrink_grow_size = 1 // This horribly named variable determines the minimum/maximum size it will shrink/grow prey to. var/transferlocation // Location that the prey is released if they struggle and get dropped off. - var/release_sound = TRUE // Boolean for now, maybe replace with something else later + var/release_sound = "Splatter" // Sound for letting someone out. Replaced from True/false var/mode_flags = 0 // Stripping, numbing, etc. + var/fancy_vore = FALSE // Using the new sounds? + var/is_wet = TRUE // Is this belly's insides made of slimy parts? + var/wet_loop = TRUE // Does the belly have a fleshy loop playing? //I don't think we've ever altered these lists. making them static until someone actually overrides them somewhere. //Actual full digest modes @@ -147,7 +150,11 @@ "item_digest_mode", "contaminates", "contamination_flavor", - "contamination_color" + "contamination_color", + "release_sound", + "fancy_vore", + "is_wet", + "wet_loop" ) /obj/belly/New(var/newloc) @@ -175,7 +182,11 @@ //Sound w/ antispam flag setting if(vore_sound && !recent_sound) - var/soundfile = vore_sounds[vore_sound] + var/soundfile + if(!fancy_vore) + soundfile = classic_vore_sounds[vore_sound] + else + soundfile = fancy_vore_sounds[vore_sound] if(soundfile) playsound(src, soundfile, vol = 100, vary = 1, falloff = VORE_SOUND_FALLOFF, preference = /datum/client_preference/eating_noises) recent_sound = TRUE @@ -196,7 +207,7 @@ //Don't bother if we don't have contents if(!contents.len) - return 0 + return FALSE //Find where we should drop things into (certainly not the owner) var/count = 0 @@ -218,8 +229,13 @@ //Print notifications/sound if necessary if(!silent) owner.visible_message("[owner] expels everything from their [lowertext(name)]!") - if(release_sound) - playsound(src, 'sound/effects/splat.ogg', vol = 100, vary = 1, falloff = VORE_SOUND_FALLOFF, preference = /datum/client_preference/eating_noises) + 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) return count @@ -258,8 +274,13 @@ //Print notifications/sound if necessary if(!silent) owner.visible_message("[owner] expels [M] from their [lowertext(name)]!") - if(release_sound) - playsound(src, 'sound/effects/splat.ogg', vol = 100, vary = 1, falloff = VORE_SOUND_FALLOFF, preference = /datum/client_preference/eating_noises) + 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) return 1 @@ -403,6 +424,8 @@ else if(M.reagents) M.reagents.trans_to_holder(Pred.bloodstr, M.reagents.total_volume, 0.5, TRUE) + //Incase they have the loop going, let's double check to stop it. + M.stop_sound_channel(CHANNEL_PREYLOOP) // Delete the digested mob qdel(M) @@ -515,9 +538,17 @@ M.show_message(struggle_outer_message, 2) // hearable to_chat(R,struggle_user_message) - var/strpick = pick(struggle_sounds) - var/strsound = struggle_sounds[strpick] - playsound(src, strsound, vary = 1, vol = 100, falloff = VORE_SOUND_FALLOFF, preference = /datum/client_preference/digestion_noises) + var/sound/struggle_snuggle + var/sound/struggle_rustle = sound(get_sfx("rustle")) + + if(is_wet) + if(!fancy_vore) + struggle_snuggle = sound(get_sfx("classic_struggle_sounds")) + else + struggle_snuggle = sound(get_sfx("fancy_prey_struggle")) + playsound(src, struggle_snuggle, vary = 1, vol = 75, falloff = VORE_SOUND_FALLOFF, preference = /datum/client_preference/digestion_noises) + else + playsound(src, struggle_rustle, vary = 1, vol = 75, falloff = VORE_SOUND_FALLOFF, preference = /datum/client_preference/digestion_noises) if(escapable) //If the stomach has escapable enabled. if(prob(escapechance)) //Let's have it check to see if the prey escapes first. @@ -601,7 +632,11 @@ I.gurgle_contaminate(target.contents, target.contamination_flavor, target.contamination_color) items_preserved -= content if(!silent && target.vore_sound && !recent_sound) - var/soundfile = vore_sounds[target.vore_sound] + var/soundfile + if(!fancy_vore) + soundfile = classic_vore_sounds[target.vore_sound] + else + soundfile = fancy_vore_sounds[target.vore_sound] if(soundfile) playsound(src, soundfile, vol = 100, vary = 1, falloff = VORE_SOUND_FALLOFF, preference = /datum/client_preference/digestion_noises) owner.updateVRPanel() @@ -639,6 +674,10 @@ dupe.contaminates = contaminates dupe.contamination_flavor = contamination_flavor dupe.contamination_color = contamination_color + dupe.release_sound = release_sound + dupe.fancy_vore = fancy_vore + dupe.is_wet = is_wet + dupe.wet_loop = wet_loop //// Object-holding variables //struggle_messages_outside - strings diff --git a/code/modules/vore/eating/bellymodes_vr.dm b/code/modules/vore/eating/bellymodes_vr.dm index d7c40618719..f66edcbf80c 100644 --- a/code/modules/vore/eating/bellymodes_vr.dm +++ b/code/modules/vore/eating/bellymodes_vr.dm @@ -24,6 +24,35 @@ if(M.digestable || digest_mode != DM_DIGEST) // don't give digesty messages to indigestible people to_chat(M,"[pick(EL)]") +///////////////////// Prey Loop Refresh/hack ////////////////////// + for(var/mob/living/M in contents) + M.stop_sound_channel(CHANNEL_PREYLOOP) // sanity just in case, because byond is whack and you can't trust it + if(isbelly(M.loc)) //sanity check + if(world.time > M.next_preyloop) //We don't want it to overlap, but we also want it to replay. + if(is_wet && wet_loop) // Is it a fleshy environment, and does the pred have a fleshy heartbeat loop to play? + if(!M.client) + continue + if(M.is_preference_enabled(/datum/client_preference/digestion_noises)) //then we check if the mob has sounds enabled at all + var/sound/preyloop = sound('sound/vore/sunesound/prey/loop.ogg') + M.playsound_local(get_turf(src),preyloop, 80,0, channel = CHANNEL_PREYLOOP) + M.next_preyloop = (world.time + 52 SECONDS) + +/////////////////////////// Sound Selections /////////////////////////// + var/sound/prey_digest + var/sound/prey_death + var/sound/pred_digest + var/sound/pred_death + if(!fancy_vore) + prey_digest = sound(get_sfx("classic_digestion_sounds")) + prey_death = sound(get_sfx("classic_death_sounds")) + pred_digest = sound(get_sfx("classic_digestion_sounds")) + pred_death = sound(get_sfx("classic_death_sounds")) + else + prey_digest = sound(get_sfx("fancy_digest_prey")) + prey_death = sound(get_sfx("fancy_death_prey")) + pred_digest = sound(get_sfx("fancy_digest_pred")) + pred_death = sound(get_sfx("fancy_death_pred")) + /////////////////////////// Exit Early //////////////////////////// var/list/touchable_atoms = contents - items_preserved if(!length(touchable_atoms)) @@ -47,7 +76,7 @@ else items_preserved |= I if(prob(25)) //Less often than with normal digestion - play_sound = pick(digestion_sounds) + play_sound = pick(pred_digest) else if(item_digest_mode == IM_DIGEST) if(I.digest_stage && I.digest_stage > 0) digest_item(I) @@ -56,7 +85,7 @@ did_an_item = TRUE to_update = TRUE if(prob(25)) //Less often than with normal digestion - play_sound = pick(digestion_sounds) + play_sound = pick(pred_digest) //Handle eaten mobs else if(isliving(A)) @@ -96,11 +125,15 @@ else items_preserved |= I if(prob(25)) //Less often than with normal digestion - play_sound = pick(digestion_sounds) + if(L && L.client && L.is_preference_enabled(/datum/client_preference/digestion_noises)) + SEND_SOUND(L,prey_digest) + play_sound = pick(pred_digest) else if(item_digest_mode == IM_DIGEST) digest_item(I) if(prob(25)) //Less often than with normal digestion - play_sound = pick(digestion_sounds) + if(L && L.client && L.is_preference_enabled(/datum/client_preference/digestion_noises)) + SEND_SOUND(L,prey_digest) + play_sound = pick(pred_digest) to_update = TRUE break //get rid of things like blood drops and gibs that end up in there @@ -115,7 +148,10 @@ else if(digest_mode == DM_DIGEST) if(prob(50)) //Was SO OFTEN. AAAA. - play_sound = pick(digestion_sounds) + for(var/mob/M in contents) + if(M && M.client && M.is_preference_enabled(/datum/client_preference/digestion_noises)) + SEND_SOUND(M,prey_digest) + play_sound = pick(pred_digest) for (var/target in touchable_mobs) var/mob/living/M = target @@ -142,7 +178,9 @@ to_chat(owner,"" + digest_alert_owner + "") to_chat(M,"" + digest_alert_prey + "") - play_sound = pick(death_sounds) + play_sound = pick(pred_death) + if(M && M.client && M.is_preference_enabled(/datum/client_preference/digestion_noises)) + SEND_SOUND(M,prey_death) if((mode_flags & DM_FLAG_LEAVEREMAINS) && M.digest_leave_remains) handle_remains_leaving(M) digestion_death(M) @@ -183,7 +221,9 @@ for (var/target in touchable_mobs) var/mob/living/M = target if(prob(10)) //Less often than gurgles. People might leave this on forever. - play_sound = pick(digestion_sounds) + if(M && M.client && M.is_preference_enabled(/datum/client_preference/digestion_noises)) + SEND_SOUND(M,prey_digest) + play_sound = pick(pred_digest) if(M.absorbed) continue @@ -216,7 +256,9 @@ var/mob/living/M = target if(prob(10)) //Less often than gurgles. People might leave this on forever. - play_sound = pick(digestion_sounds) + if(M && M.client && M.is_preference_enabled(/datum/client_preference/digestion_noises)) + SEND_SOUND(M,prey_digest) + play_sound = pick(pred_digest) if(M.nutrition >= 100) //Drain them until there's no nutrients left. var/oldnutrition = (M.nutrition * 0.05) @@ -230,7 +272,9 @@ var/mob/living/M = target if(prob(10)) //Infinite gurgles! - play_sound = pick(digestion_sounds) + if(M && M.client && M.is_preference_enabled(/datum/client_preference/digestion_noises)) + SEND_SOUND(M,prey_digest) + play_sound = pick(pred_digest) if(M.size_multiplier > shrink_grow_size) //Shrink until smol. M.resize(M.size_multiplier-0.01) //Shrink by 1% per tick. @@ -247,7 +291,9 @@ var/mob/living/M = target if(prob(10)) - play_sound = pick(digestion_sounds) + if(M && M.client && M.is_preference_enabled(/datum/client_preference/digestion_noises)) + SEND_SOUND(M,prey_digest) + play_sound = pick(pred_digest) if(M.size_multiplier < shrink_grow_size) //Grow until large. M.resize(M.size_multiplier+0.01) //Grow by 1% per tick. @@ -261,7 +307,9 @@ var/mob/living/M = target if(prob(10)) - play_sound = pick(digestion_sounds) + if(M && M.client && M.is_preference_enabled(/datum/client_preference/digestion_noises)) + SEND_SOUND(M,prey_digest) + play_sound = pick(pred_digest) if(M.size_multiplier > shrink_grow_size && owner.size_multiplier < 2) //Grow until either pred is large or prey is small. owner.resize(owner.size_multiplier+0.01) //Grow by 1% per tick. @@ -276,7 +324,10 @@ else if(digest_mode == DM_HEAL) if(prob(50)) //Wet heals! The secret is you can leave this on for gurgle noises for fun. - play_sound = pick(digestion_sounds) + for(var/mob/M in contents) + if(M && M.client && M.is_preference_enabled(/datum/client_preference/digestion_noises)) + SEND_SOUND(M,prey_digest) + play_sound = pick(pred_digest) for (var/target in touchable_mobs) var/mob/living/M = target @@ -303,7 +354,9 @@ /////////////////////////// Make any noise /////////////////////////// if(play_sound) - playsound(src, play_sound, vol = 100, vary = 1, falloff = VORE_SOUND_FALLOFF, ignore_walls = TRUE, preference = /datum/client_preference/digestion_noises) + for(var/mob/M in hearers(4, owner)) //so we don't fill the whole room with the sound effect + if(M && M.client && (isturf(M.loc) || (M.loc != src.contents)) && M.is_preference_enabled(/datum/client_preference/digestion_noises)) //to avoid people on the inside getting the outside sounds and their direct sounds + built in sound pref check + SEND_SOUND(M, play_sound) //these are all external sound triggers now, so it's ok. if(to_update) for(var/mob/living/M in contents) if(M.client) diff --git a/code/modules/vore/eating/living_vr.dm b/code/modules/vore/eating/living_vr.dm index 1b666c8fe81..7097aaf27d9 100644 --- a/code/modules/vore/eating/living_vr.dm +++ b/code/modules/vore/eating/living_vr.dm @@ -1,12 +1,12 @@ ///////////////////// Mob Living ///////////////////// /mob/living - var/digestable = 1 // Can the mob be digested inside a belly? - var/digest_leave_remains = 0 // Will this mob leave bones/skull/etc after the melty demise? - var/allowmobvore = 1 // Will simplemobs attempt to eat the mob? - var/showvoreprefs = 1 // Determines if the mechanical vore preferences button will be displayed on the mob or not. + var/digestable = TRUE // Can the mob be digested inside a belly? + var/digest_leave_remains = FALSE // Will this mob leave bones/skull/etc after the melty demise? + var/allowmobvore = TRUE // Will simplemobs attempt to eat the mob? + var/showvoreprefs = TRUE // Determines if the mechanical vore preferences button will be displayed on the mob or not. var/obj/belly/vore_selected // Default to no vore capability. var/list/vore_organs = list() // List of vore containers inside a mob - var/absorbed = 0 // If a mob is absorbed into another + var/absorbed = FALSE // If a mob is absorbed into another var/weight = 137 // Weight for mobs for weightgain system var/weight_gain = 1 // How fast you gain weight var/weight_loss = 0.5 // How fast you lose weight @@ -15,16 +15,17 @@ var/revive_ready = REVIVING_READY // Only used for creatures that have the xenochimera regen ability, so far. var/metabolism = 0.0015 var/vore_taste = null // What the character tastes like - var/no_vore = 0 // If the character/mob can vore. - var/openpanel = 0 // Is the vore panel open? - var/noisy = 0 // Toggle audible hunger. + var/no_vore = FALSE // If the character/mob can vore. + var/openpanel = FALSE // Is the vore panel open? + var/noisy = FALSE // Toggle audible hunger. var/absorbing_prey = 0 // Determines if the person is using the succubus drain or not. See station_special_abilities_vr. var/drain_finalized = 0 // Determines if the succubus drain will be KO'd/absorbed. Can be toggled on at any time. var/fuzzy = 1 // Preference toggle for sharp/fuzzy icon. var/tail_alt = 0 // Tail layer toggle. var/permit_healbelly = TRUE - var/can_be_drop_prey = 0 - var/can_be_drop_pred = 1 // Mobs are pred by default. + var/can_be_drop_prey = FALSE + var/can_be_drop_pred = TRUE // Mobs are pred by default. + var/next_preyloop // For Fancy sound internal loop // // Hook for generic creation of stuff on new creatures diff --git a/code/modules/vore/eating/vore_vr.dm b/code/modules/vore/eating/vore_vr.dm index 2b4a82da6c1..efc0c451c8b 100644 --- a/code/modules/vore/eating/vore_vr.dm +++ b/code/modules/vore/eating/vore_vr.dm @@ -19,6 +19,8 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE -Aro <3 */ +#define VORE_VERSION 1 //This is a Define so you don't have to worry about magic numbers. + // // Overrides/additions to stock defines go here, as well as hooks. Sort them by // the object they are overriding. So all /mob/living together, etc. @@ -139,7 +141,7 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE /datum/vore_preferences/proc/save_vore() if(!path) return 0 - var/version = 1 //For "good times" use in the future + var/version = VORE_VERSION //For "good times" use in the future var/list/settings_list = list( "version" = version, "digestable" = digestable, diff --git a/code/modules/vore/eating/vorepanel_vr.dm b/code/modules/vore/eating/vorepanel_vr.dm index 4bd8a7bc585..1527092a295 100644 --- a/code/modules/vore/eating/vorepanel_vr.dm +++ b/code/modules/vore/eating/vorepanel_vr.dm @@ -189,6 +189,13 @@ dat += "Name:" dat += " '[selected.name]'" + //Belly Type button + dat += "
Is this belly fleshy:" + dat += "[selected.is_wet ? "Yes" : "No"]" + if(selected.is_wet) + dat += "Internal loop for prey?:" + dat += "[selected.wet_loop ? "Yes" : "No"]" + //Digest Mode Button dat += "
Belly Mode:" var/mode = selected.digest_mode @@ -229,10 +236,18 @@ dat += "
Flavor Text:" dat += " '[selected.desc]'" + //Belly Sound Fanciness + dat += "
Use Fancy Sounds:" + dat += "[selected.fancy_vore ? "Yes" : "No"]" + //Belly sound - dat += "
Set Vore Sound" + dat += "
Vore Sound: [selected.vore_sound]" dat += "Test" + //Release sound + dat += "
Release Sound: [selected.release_sound]" + dat += "Test" + //Belly messages dat += "
Belly Messages" @@ -293,27 +308,27 @@ dat += "
" switch(user.digestable) - if(1) + if(TRUE) dat += "Toggle Digestable" - if(0) + if(FALSE) dat += "Toggle Digestable" switch(user.digest_leave_remains) - if(1) + if(TRUE) dat += "Toggle Leaving Remains" - if(0) + if(FALSE) dat += "Toggle Leaving Remains" switch(user.allowmobvore) - if(1) + if(TRUE) dat += "
Toggle Mob Vore" - if(0) + if(FALSE) dat += "
Toggle Mob Vore" switch(user.permit_healbelly) - if(1) + if(TRUE) dat += "Toggle Healbelly Permission" - if(0) + if(FALSE) dat += "Toggle Healbelly Permission" dat += "
Toggle Drop-nom Prey" //These two get their own, custom row, too. @@ -534,6 +549,12 @@ selected.name = new_name + if(href_list["b_wetness"]) + selected.is_wet = !selected.is_wet + + if(href_list["b_wetloop"]) + selected.wet_loop = !selected.wet_loop + if(href_list["b_mode"]) var/list/menu_list = selected.digest_modes.Copy() if(istype(usr,/mob/living/carbon/human)) @@ -658,17 +679,54 @@ selected.vore_verb = new_verb - if(href_list["b_sound"]) - var/choice = input(user,"Currently set to [selected.vore_sound]","Select Sound") as null|anything in vore_sounds + if(href_list["b_fancy_sound"]) + selected.fancy_vore = !selected.fancy_vore + selected.vore_sound = "Gulp" + selected.release_sound = "Splatter" + // defaults as to avoid potential bugs + + if(href_list["b_release"]) + var/choice + if(selected.fancy_vore) + choice = input(user,"Currently set to [selected.release_sound]","Select Sound") as null|anything in fancy_release_sounds + else + choice = input(user,"Currently set to [selected.release_sound]","Select Sound") as null|anything in classic_release_sounds + if(!choice) - return 0 + return FALSE + + selected.release_sound = choice + + if(href_list["b_releasesoundtest"]) + var/sound/releasetest + if(selected.fancy_vore) + releasetest = fancy_release_sounds[selected.release_sound] + else + releasetest = classic_release_sounds[selected.release_sound] + + if(releasetest) + SEND_SOUND(user, releasetest) + + if(href_list["b_sound"]) + var/choice + if(selected.fancy_vore) + choice = input(user,"Currently set to [selected.vore_sound]","Select Sound") as null|anything in fancy_vore_sounds + else + choice = input(user,"Currently set to [selected.vore_sound]","Select Sound") as null|anything in classic_vore_sounds + + if(!choice) + return FALSE selected.vore_sound = choice if(href_list["b_soundtest"]) - var/soundfile = vore_sounds[selected.vore_sound] - if(soundfile) - user << soundfile + var/sound/voretest + if(selected.fancy_vore) + voretest = fancy_vore_sounds[selected.vore_sound] + else + voretest = classic_vore_sounds[selected.vore_sound] + if(voretest) + SEND_SOUND(user, voretest) if(href_list["b_tastes"]) selected.can_taste = !selected.can_taste diff --git a/html/changelogs/Poojawa - Sunesoundsntoggles.yml b/html/changelogs/Poojawa - Sunesoundsntoggles.yml new file mode 100644 index 00000000000..ed329d766eb --- /dev/null +++ b/html/changelogs/Poojawa - Sunesoundsntoggles.yml @@ -0,0 +1,37 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +################################# + +# Your name. +author: Poojawa + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - soundadd: "Added my fancy vore sounds." + - rscadd: "Porting of a few QoL Citadel changes to vore menu related to sounds." \ No newline at end of file