Adds Sound Code and toggles

This commit is contained in:
Poojawa
2019-10-13 02:05:16 -05:00
parent 493fec6667
commit f718201974
11 changed files with 367 additions and 96 deletions

View File

@@ -8,11 +8,12 @@
#define CHANNEL_AMBIENCE 1018 #define CHANNEL_AMBIENCE 1018
#define CHANNEL_BUZZ 1017 #define CHANNEL_BUZZ 1017
#define CHANNEL_BICYCLE 1016 #define CHANNEL_BICYCLE 1016
#define CHANNEL_PREYLOOP 1015 //VORESTATION ADD - Fancy Sound Loop channel
//THIS SHOULD ALWAYS BE THE LOWEST ONE! //THIS SHOULD ALWAYS BE THE LOWEST ONE!
//KEEP IT UPDATED //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 SOUND_MINIMUM_PRESSURE 10
#define FALLOFF_SOUNDS 0.5 #define FALLOFF_SOUNDS 0.5

View File

@@ -42,40 +42,8 @@ var/global/list/item_vore_blacklist = list(
/obj/item/weapon/disk/nuclear, /obj/item/weapon/disk/nuclear,
/obj/item/clothing/suit/storage/hooded/wintercoat/roiz) /obj/item/clothing/suit/storage/hooded/wintercoat/roiz)
var/global/list/digestion_sounds = list( //Classic Vore sounds
'sound/vore/digest1.ogg', var/global/list/classic_vore_sounds = list(
'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(
"Gulp" = 'sound/vore/gulp.ogg', "Gulp" = 'sound/vore/gulp.ogg',
"Insert" = 'sound/vore/insert.ogg', "Insert" = 'sound/vore/insert.ogg',
"Insertion1" = 'sound/vore/insertion1.ogg', "Insertion1" = 'sound/vore/insertion1.ogg',
@@ -86,15 +54,55 @@ var/global/list/vore_sounds = list(
"Squish2" = 'sound/vore/squish2.ogg', "Squish2" = 'sound/vore/squish2.ogg',
"Squish3" = 'sound/vore/squish3.ogg', "Squish3" = 'sound/vore/squish3.ogg',
"Squish4" = 'sound/vore/squish4.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) "None" = null)
var/global/list/struggle_sounds = list( var/global/list/classic_release_sounds = list(
"Squish1" = 'sound/vore/squish1.ogg', "Rustle (cloth)" = 'sound/effects/rustle1.ogg',
"Squish2" = 'sound/vore/squish2.ogg', "Rustle 2 (cloth)" = 'sound/effects/rustle2.ogg',
"Squish3" = 'sound/vore/squish3.ogg', "Rustle 3 (cloth)" = 'sound/effects/rustle3.ogg',
"Squish4" = 'sound/vore/squish4.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( var/global/list/global_vore_egg_types = list(
"Unathi" = UNATHI_EGG, "Unathi" = UNATHI_EGG,

View File

@@ -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 ("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 ("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') 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 return soundin
//Are these even used? //Are these even used?

View File

@@ -2,3 +2,35 @@
datum/preferences datum/preferences
var/show_in_directory = 1 //TFF 5/8/19 - show in Character Directory 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 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!

View File

@@ -923,7 +923,7 @@
overeatduration -= 2 //doubled the unfat rate overeatduration -= 2 //doubled the unfat rate
if(noisy == TRUE && nutrition < 250 && prob(10)) //VOREStation edit for hunger noises. 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) 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) playsound(src, growlsound, vol = growlmultiplier, vary = 1, falloff = 0.1, ignore_walls = TRUE, preference = /datum/client_preference/digestion_noises)
// VOREStation Edit End // VOREStation Edit End

View File

@@ -20,19 +20,22 @@
var/emote_time = 60 SECONDS // How long between stomach emotes at prey 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_brute = 2 // Brute damage per tick in digestion mode
var/digest_burn = 2 // Burn 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/immutable = FALSE // Prevents this belly from being deleted
var/escapable = 0 // Belly can be resisted out of at any time var/escapable = FALSE // Belly can be resisted out of at any time
var/escapetime = 60 SECONDS // Deciseconds, how long to escape this belly var/escapetime = 60 SECONDS // Deciseconds, how long to escape this belly
var/digestchance = 0 // % Chance of stomach beginning to digest if prey struggles 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/absorbchance = 0 // % Chance of stomach beginning to absorb if prey struggles
var/escapechance = 0 // % Chance of prey beginning to escape if prey struggles. var/escapechance = 0 // % Chance of prey beginning to escape if prey struggles.
var/transferchance = 0 // % Chance of prey being 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/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/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/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/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. //I don't think we've ever altered these lists. making them static until someone actually overrides them somewhere.
//Actual full digest modes //Actual full digest modes
@@ -147,7 +150,11 @@
"item_digest_mode", "item_digest_mode",
"contaminates", "contaminates",
"contamination_flavor", "contamination_flavor",
"contamination_color" "contamination_color",
"release_sound",
"fancy_vore",
"is_wet",
"wet_loop"
) )
/obj/belly/New(var/newloc) /obj/belly/New(var/newloc)
@@ -175,7 +182,11 @@
//Sound w/ antispam flag setting //Sound w/ antispam flag setting
if(vore_sound && !recent_sound) 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) if(soundfile)
playsound(src, soundfile, vol = 100, vary = 1, falloff = VORE_SOUND_FALLOFF, preference = /datum/client_preference/eating_noises) playsound(src, soundfile, vol = 100, vary = 1, falloff = VORE_SOUND_FALLOFF, preference = /datum/client_preference/eating_noises)
recent_sound = TRUE recent_sound = TRUE
@@ -196,7 +207,7 @@
//Don't bother if we don't have contents //Don't bother if we don't have contents
if(!contents.len) if(!contents.len)
return 0 return FALSE
//Find where we should drop things into (certainly not the owner) //Find where we should drop things into (certainly not the owner)
var/count = 0 var/count = 0
@@ -218,8 +229,13 @@
//Print notifications/sound if necessary //Print notifications/sound if necessary
if(!silent) if(!silent)
owner.visible_message("<font color='green'><b>[owner] expels everything from their [lowertext(name)]!</b></font>") owner.visible_message("<font color='green'><b>[owner] expels everything from their [lowertext(name)]!</b></font>")
if(release_sound) var/soundfile
playsound(src, 'sound/effects/splat.ogg', vol = 100, vary = 1, falloff = VORE_SOUND_FALLOFF, preference = /datum/client_preference/eating_noises) 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 return count
@@ -258,8 +274,13 @@
//Print notifications/sound if necessary //Print notifications/sound if necessary
if(!silent) if(!silent)
owner.visible_message("<font color='green'><b>[owner] expels [M] from their [lowertext(name)]!</b></font>") owner.visible_message("<font color='green'><b>[owner] expels [M] from their [lowertext(name)]!</b></font>")
if(release_sound) var/soundfile
playsound(src, 'sound/effects/splat.ogg', vol = 100, vary = 1, falloff = VORE_SOUND_FALLOFF, preference = /datum/client_preference/eating_noises) 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 return 1
@@ -403,6 +424,8 @@
else if(M.reagents) else if(M.reagents)
M.reagents.trans_to_holder(Pred.bloodstr, M.reagents.total_volume, 0.5, TRUE) 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 // Delete the digested mob
qdel(M) qdel(M)
@@ -515,9 +538,17 @@
M.show_message(struggle_outer_message, 2) // hearable M.show_message(struggle_outer_message, 2) // hearable
to_chat(R,struggle_user_message) to_chat(R,struggle_user_message)
var/strpick = pick(struggle_sounds) var/sound/struggle_snuggle
var/strsound = struggle_sounds[strpick] var/sound/struggle_rustle = sound(get_sfx("rustle"))
playsound(src, strsound, vary = 1, vol = 100, falloff = VORE_SOUND_FALLOFF, preference = /datum/client_preference/digestion_noises)
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(escapable) //If the stomach has escapable enabled.
if(prob(escapechance)) //Let's have it check to see if the prey escapes first. 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) I.gurgle_contaminate(target.contents, target.contamination_flavor, target.contamination_color)
items_preserved -= content items_preserved -= content
if(!silent && target.vore_sound && !recent_sound) 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) if(soundfile)
playsound(src, soundfile, vol = 100, vary = 1, falloff = VORE_SOUND_FALLOFF, preference = /datum/client_preference/digestion_noises) playsound(src, soundfile, vol = 100, vary = 1, falloff = VORE_SOUND_FALLOFF, preference = /datum/client_preference/digestion_noises)
owner.updateVRPanel() owner.updateVRPanel()
@@ -639,6 +674,10 @@
dupe.contaminates = contaminates dupe.contaminates = contaminates
dupe.contamination_flavor = contamination_flavor dupe.contamination_flavor = contamination_flavor
dupe.contamination_color = contamination_color 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 //// Object-holding variables
//struggle_messages_outside - strings //struggle_messages_outside - strings

View File

@@ -24,6 +24,35 @@
if(M.digestable || digest_mode != DM_DIGEST) // don't give digesty messages to indigestible people if(M.digestable || digest_mode != DM_DIGEST) // don't give digesty messages to indigestible people
to_chat(M,"<span class='notice'>[pick(EL)]</span>") to_chat(M,"<span class='notice'>[pick(EL)]</span>")
///////////////////// 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 //////////////////////////// /////////////////////////// Exit Early ////////////////////////////
var/list/touchable_atoms = contents - items_preserved var/list/touchable_atoms = contents - items_preserved
if(!length(touchable_atoms)) if(!length(touchable_atoms))
@@ -47,7 +76,7 @@
else else
items_preserved |= I items_preserved |= I
if(prob(25)) //Less often than with normal digestion 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) else if(item_digest_mode == IM_DIGEST)
if(I.digest_stage && I.digest_stage > 0) if(I.digest_stage && I.digest_stage > 0)
digest_item(I) digest_item(I)
@@ -56,7 +85,7 @@
did_an_item = TRUE did_an_item = TRUE
to_update = TRUE to_update = TRUE
if(prob(25)) //Less often than with normal digestion if(prob(25)) //Less often than with normal digestion
play_sound = pick(digestion_sounds) play_sound = pick(pred_digest)
//Handle eaten mobs //Handle eaten mobs
else if(isliving(A)) else if(isliving(A))
@@ -96,11 +125,15 @@
else else
items_preserved |= I items_preserved |= I
if(prob(25)) //Less often than with normal digestion 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) else if(item_digest_mode == IM_DIGEST)
digest_item(I) digest_item(I)
if(prob(25)) //Less often than with normal digestion 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 to_update = TRUE
break break
//get rid of things like blood drops and gibs that end up in there //get rid of things like blood drops and gibs that end up in there
@@ -115,7 +148,10 @@
else if(digest_mode == DM_DIGEST) else if(digest_mode == DM_DIGEST)
if(prob(50)) //Was SO OFTEN. AAAA. 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) for (var/target in touchable_mobs)
var/mob/living/M = target var/mob/living/M = target
@@ -142,7 +178,9 @@
to_chat(owner,"<span class='notice'>" + digest_alert_owner + "</span>") to_chat(owner,"<span class='notice'>" + digest_alert_owner + "</span>")
to_chat(M,"<span class='notice'>" + digest_alert_prey + "</span>") to_chat(M,"<span class='notice'>" + digest_alert_prey + "</span>")
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) if((mode_flags & DM_FLAG_LEAVEREMAINS) && M.digest_leave_remains)
handle_remains_leaving(M) handle_remains_leaving(M)
digestion_death(M) digestion_death(M)
@@ -183,7 +221,9 @@
for (var/target in touchable_mobs) for (var/target in touchable_mobs)
var/mob/living/M = target var/mob/living/M = target
if(prob(10)) //Less often than gurgles. People might leave this on forever. 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) if(M.absorbed)
continue continue
@@ -216,7 +256,9 @@
var/mob/living/M = target var/mob/living/M = target
if(prob(10)) //Less often than gurgles. People might leave this on forever. 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. if(M.nutrition >= 100) //Drain them until there's no nutrients left.
var/oldnutrition = (M.nutrition * 0.05) var/oldnutrition = (M.nutrition * 0.05)
@@ -230,7 +272,9 @@
var/mob/living/M = target var/mob/living/M = target
if(prob(10)) //Infinite gurgles! 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. if(M.size_multiplier > shrink_grow_size) //Shrink until smol.
M.resize(M.size_multiplier-0.01) //Shrink by 1% per tick. M.resize(M.size_multiplier-0.01) //Shrink by 1% per tick.
@@ -247,7 +291,9 @@
var/mob/living/M = target var/mob/living/M = target
if(prob(10)) 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. if(M.size_multiplier < shrink_grow_size) //Grow until large.
M.resize(M.size_multiplier+0.01) //Grow by 1% per tick. M.resize(M.size_multiplier+0.01) //Grow by 1% per tick.
@@ -261,7 +307,9 @@
var/mob/living/M = target var/mob/living/M = target
if(prob(10)) 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. 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. owner.resize(owner.size_multiplier+0.01) //Grow by 1% per tick.
@@ -276,7 +324,10 @@
else if(digest_mode == DM_HEAL) else if(digest_mode == DM_HEAL)
if(prob(50)) //Wet heals! The secret is you can leave this on for gurgle noises for fun. 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) for (var/target in touchable_mobs)
var/mob/living/M = target var/mob/living/M = target
@@ -303,7 +354,9 @@
/////////////////////////// Make any noise /////////////////////////// /////////////////////////// Make any noise ///////////////////////////
if(play_sound) 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) if(to_update)
for(var/mob/living/M in contents) for(var/mob/living/M in contents)
if(M.client) if(M.client)

View File

@@ -1,12 +1,12 @@
///////////////////// Mob Living ///////////////////// ///////////////////// Mob Living /////////////////////
/mob/living /mob/living
var/digestable = 1 // Can the mob be digested inside a belly? var/digestable = TRUE // 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/digest_leave_remains = FALSE // Will this mob leave bones/skull/etc after the melty demise?
var/allowmobvore = 1 // Will simplemobs attempt to eat the mob? var/allowmobvore = TRUE // 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/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/obj/belly/vore_selected // Default to no vore capability.
var/list/vore_organs = list() // List of vore containers inside a mob 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 = 137 // Weight for mobs for weightgain system
var/weight_gain = 1 // How fast you gain weight var/weight_gain = 1 // How fast you gain weight
var/weight_loss = 0.5 // How fast you lose 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/revive_ready = REVIVING_READY // Only used for creatures that have the xenochimera regen ability, so far.
var/metabolism = 0.0015 var/metabolism = 0.0015
var/vore_taste = null // What the character tastes like var/vore_taste = null // What the character tastes like
var/no_vore = 0 // If the character/mob can vore. var/no_vore = FALSE // If the character/mob can vore.
var/openpanel = 0 // Is the vore panel open? var/openpanel = FALSE // Is the vore panel open?
var/noisy = 0 // Toggle audible hunger. 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/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/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/fuzzy = 1 // Preference toggle for sharp/fuzzy icon.
var/tail_alt = 0 // Tail layer toggle. var/tail_alt = 0 // Tail layer toggle.
var/permit_healbelly = TRUE var/permit_healbelly = TRUE
var/can_be_drop_prey = 0 var/can_be_drop_prey = FALSE
var/can_be_drop_pred = 1 // Mobs are pred by default. 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 // Hook for generic creation of stuff on new creatures

View File

@@ -19,6 +19,8 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
-Aro <3 */ -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 // 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. // 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() /datum/vore_preferences/proc/save_vore()
if(!path) return 0 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( var/list/settings_list = list(
"version" = version, "version" = version,
"digestable" = digestable, "digestable" = digestable,

View File

@@ -189,6 +189,13 @@
dat += "<a href='?src=\ref[src];b_name=\ref[selected]'>Name:</a>" dat += "<a href='?src=\ref[src];b_name=\ref[selected]'>Name:</a>"
dat += " '[selected.name]'" dat += " '[selected.name]'"
//Belly Type button
dat += "<br><a href='?src=\ref[src];b_wetness=\ref[selected]'>Is this belly fleshy:</a>"
dat += "[selected.is_wet ? "Yes" : "No"]"
if(selected.is_wet)
dat += "<a href='?src=\ref[src];b_wetloop=\ref[selected]'>Internal loop for prey?:</a>"
dat += "[selected.wet_loop ? "Yes" : "No"]"
//Digest Mode Button //Digest Mode Button
dat += "<br><a href='?src=\ref[src];b_mode=\ref[selected]'>Belly Mode:</a>" dat += "<br><a href='?src=\ref[src];b_mode=\ref[selected]'>Belly Mode:</a>"
var/mode = selected.digest_mode var/mode = selected.digest_mode
@@ -229,10 +236,18 @@
dat += "<br><a href='?src=\ref[src];b_desc=\ref[selected]'>Flavor Text:</a>" dat += "<br><a href='?src=\ref[src];b_desc=\ref[selected]'>Flavor Text:</a>"
dat += " '[selected.desc]'" dat += " '[selected.desc]'"
//Belly Sound Fanciness
dat += "<br><a href='?src=\ref[src];b_fancy_sound=\ref[selected]'>Use Fancy Sounds:</a>"
dat += "[selected.fancy_vore ? "Yes" : "No"]"
//Belly sound //Belly sound
dat += "<br><a href='?src=\ref[src];b_sound=\ref[selected]'>Set Vore Sound</a>" dat += "<br><a href='?src=\ref[src];b_sound=\ref[selected]'>Vore Sound: [selected.vore_sound]</a>"
dat += "<a href='?src=\ref[src];b_soundtest=\ref[selected]'>Test</a>" dat += "<a href='?src=\ref[src];b_soundtest=\ref[selected]'>Test</a>"
//Release sound
dat += "<br><a href='?src=\ref[src];b_release=\ref[selected]'>Release Sound: [selected.release_sound]</a>"
dat += "<a href='?src=\ref[src];b_releasesoundtest=\ref[selected]'>Test</a>"
//Belly messages //Belly messages
dat += "<br><a href='?src=\ref[src];b_msgs=\ref[selected]'>Belly Messages</a>" dat += "<br><a href='?src=\ref[src];b_msgs=\ref[selected]'>Belly Messages</a>"
@@ -293,27 +308,27 @@
dat += "<HR>" dat += "<HR>"
switch(user.digestable) switch(user.digestable)
if(1) if(TRUE)
dat += "<a href='?src=\ref[src];toggledg=1'>Toggle Digestable</a>" dat += "<a href='?src=\ref[src];toggledg=1'>Toggle Digestable</a>"
if(0) if(FALSE)
dat += "<a href='?src=\ref[src];toggledg=1'><span style='color:green;'>Toggle Digestable</span></a>" dat += "<a href='?src=\ref[src];toggledg=1'><span style='color:green;'>Toggle Digestable</span></a>"
switch(user.digest_leave_remains) switch(user.digest_leave_remains)
if(1) if(TRUE)
dat += "<a href='?src=\ref[src];toggledlm=1'><span style='color:red;'>Toggle Leaving Remains</span></a>" dat += "<a href='?src=\ref[src];toggledlm=1'><span style='color:red;'>Toggle Leaving Remains</span></a>"
if(0) if(FALSE)
dat += "<a href='?src=\ref[src];toggledlm=1'>Toggle Leaving Remains</a>" dat += "<a href='?src=\ref[src];toggledlm=1'>Toggle Leaving Remains</a>"
switch(user.allowmobvore) switch(user.allowmobvore)
if(1) if(TRUE)
dat += "<br><a href='?src=\ref[src];togglemv=1'>Toggle Mob Vore</a>" dat += "<br><a href='?src=\ref[src];togglemv=1'>Toggle Mob Vore</a>"
if(0) if(FALSE)
dat += "<br><a href='?src=\ref[src];togglemv=1'><span style='color:green;'>Toggle Mob Vore</span></a>" dat += "<br><a href='?src=\ref[src];togglemv=1'><span style='color:green;'>Toggle Mob Vore</span></a>"
switch(user.permit_healbelly) switch(user.permit_healbelly)
if(1) if(TRUE)
dat += "<a href='?src=\ref[src];togglehealbelly=1'>Toggle Healbelly Permission</a>" dat += "<a href='?src=\ref[src];togglehealbelly=1'>Toggle Healbelly Permission</a>"
if(0) if(FALSE)
dat += "<a href='?src=\ref[src];togglehealbelly=1'><span style='color:red;'>Toggle Healbelly Permission</span></a>" dat += "<a href='?src=\ref[src];togglehealbelly=1'><span style='color:red;'>Toggle Healbelly Permission</span></a>"
dat += "<br><a href='?src=\ref[src];toggle_dropnom_prey=1'>Toggle Drop-nom Prey</a>" //These two get their own, custom row, too. dat += "<br><a href='?src=\ref[src];toggle_dropnom_prey=1'>Toggle Drop-nom Prey</a>" //These two get their own, custom row, too.
@@ -534,6 +549,12 @@
selected.name = new_name 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"]) if(href_list["b_mode"])
var/list/menu_list = selected.digest_modes.Copy() var/list/menu_list = selected.digest_modes.Copy()
if(istype(usr,/mob/living/carbon/human)) if(istype(usr,/mob/living/carbon/human))
@@ -658,17 +679,54 @@
selected.vore_verb = new_verb selected.vore_verb = new_verb
if(href_list["b_sound"]) if(href_list["b_fancy_sound"])
var/choice = input(user,"Currently set to [selected.vore_sound]","Select Sound") as null|anything in vore_sounds 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) 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 selected.vore_sound = choice
if(href_list["b_soundtest"]) if(href_list["b_soundtest"])
var/soundfile = vore_sounds[selected.vore_sound] var/sound/voretest
if(soundfile) if(selected.fancy_vore)
user << soundfile 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"]) if(href_list["b_tastes"])
selected.can_taste = !selected.can_taste selected.can_taste = !selected.can_taste

View File

@@ -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."