diff --git a/code/__DEFINES/voreconstants.dm b/code/__DEFINES/voreconstants.dm
index 710b11ae16..9c91de0be2 100644
--- a/code/__DEFINES/voreconstants.dm
+++ b/code/__DEFINES/voreconstants.dm
@@ -20,7 +20,7 @@ GLOBAL_LIST_INIT(player_sizes_list, list("Macro" = SIZESCALE_HUGE, "Big" = SIZES
// Edited to make the new travis check go away
*/
-GLOBAL_LIST_INIT(vore_sounds, list(
+GLOBAL_LIST_INIT(pred_vore_sounds, list(
"Gulp" = 'sound/vore/pred/swallow_01.ogg',
"Swallow" = 'sound/vore/pred/swallow_02.ogg',
"Insertion1" = 'sound/vore/pred/insertion_01.ogg',
@@ -40,7 +40,27 @@ GLOBAL_LIST_INIT(vore_sounds, list(
"None" = null
))
-GLOBAL_LIST_INIT(release_sounds, list(
+GLOBAL_LIST_INIT(prey_vore_sounds, list(
+ "Gulp" = 'sound/vore/prey/swallow_01.ogg',
+ "Swallow" = 'sound/vore/prey/swallow_02.ogg',
+ "Insertion1" = 'sound/vore/prey/insertion_01.ogg',
+ "Insertion2" = 'sound/vore/prey/insertion_02.ogg',
+ "Tauric Swallow" = 'sound/vore/prey/taurswallow.ogg',
+ "Stomach Move" = 'sound/vore/prey/stomachmove.ogg',
+ "Schlorp" = 'sound/vore/prey/schlorp.ogg',
+ "Squish1" = 'sound/vore/prey/squish_01.ogg',
+ "Squish2" = 'sound/vore/prey/squish_02.ogg',
+ "Squish3" = 'sound/vore/prey/squish_03.ogg',
+ "Squish4" = 'sound/vore/prey/squish_04.ogg',
+ "Rustle (cloth)" = 'sound/effects/rustle5.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
+ ))
+
+GLOBAL_LIST_INIT(pred_release_sounds, list(
"Rustle (cloth)" = 'sound/effects/rustle1.ogg',
"Rustle 2 (cloth)" = 'sound/effects/rustle2.ogg',
"Rustle 3 (cloth)" = 'sound/effects/rustle3.ogg',
@@ -51,3 +71,15 @@ GLOBAL_LIST_INIT(release_sounds, list(
"Splatter" = 'sound/effects/splat.ogg',
"None" = null
))
+
+GLOBAL_LIST_INIT(prey_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/prey/stomachmove.ogg',
+ "Pred Escape" = 'sound/vore/prey/escape.ogg',
+ "Splatter" = 'sound/effects/splat.ogg',
+ "None" = null
+ ))
diff --git a/code/modules/vore/eating/belly_obj.dm b/code/modules/vore/eating/belly_obj.dm
index 9b54b39ba9..b88be59863 100644
--- a/code/modules/vore/eating/belly_obj.dm
+++ b/code/modules/vore/eating/belly_obj.dm
@@ -170,12 +170,21 @@
//Sound w/ antispam flag setting
if(vore_sound && !recent_sound)
- var/turf/source = get_turf(owner)
- var/sound/eating = GLOB.vore_sounds[vore_sound]
- for(var/mob/living/M in get_hearers_in_view(3, source))
- if(M.client && M.client.prefs.cit_toggles & EATING_NOISES)
- SEND_SOUND(M, eating)
- recent_sound = TRUE
+ if((world.time + NORMIE_HEARCHECK) > last_hearcheck)
+ LAZYCLEARLIST(hearing_mobs)
+ for(var/mob/living/H in get_hearers_in_view(3, owner))
+ if(!H.client || !(H.client.prefs.cit_toggles & EATING_NOISES))
+ continue
+ LAZYADD(hearing_mobs, H)
+ last_hearcheck = world.time
+ for(var/mob/living/H in hearing_mobs)
+ if(H && H.client && (isturf(H.loc) || (H.loc != src.contents)))
+ var/sound/eating = GLOB.pred_vore_sounds[vore_sound]
+ SEND_SOUND(H,eating)
+ else if(H && H in contents && H.client)
+ var/sound/eating = GLOB.prey_vore_sounds[vore_sound]
+ SEND_SOUND(H,eating)
+ recent_sound = TRUE
//Messages if it's a mob
if(isliving(thing))
@@ -214,10 +223,22 @@
owner.update_icons()
if(!silent)
- for(var/mob/living/M in get_hearers_in_view(2, get_turf(owner)))
- if(M.client && (M.client.prefs.cit_toggles & EATING_NOISES))
- var/sound/releasement = GLOB.release_sounds[release_sound]
- SEND_SOUND(M, releasement)
+ if(release_sound && !recent_sound)
+ if((world.time + NORMIE_HEARCHECK) > last_hearcheck)
+ LAZYCLEARLIST(hearing_mobs)
+ for(var/mob/living/H in get_hearers_in_view(3, owner))
+ if(!H.client || !(H.client.prefs.cit_toggles & EATING_NOISES))
+ continue
+ LAZYADD(hearing_mobs, H)
+ last_hearcheck = world.time
+ for(var/mob/living/H in hearing_mobs)
+ if(H && H.client && (isturf(H.loc) || (H.loc != src.contents)))
+ var/sound/releasement = GLOB.pred_release_sounds[release_sound]
+ SEND_SOUND(H,releasement)
+ else if(H && H in contents && H.client)
+ var/sound/releasement = GLOB.prey_release_sounds[release_sound]
+ SEND_SOUND(H,releasement)
+ recent_sound = TRUE
owner.visible_message("[owner] expels everything from their [lowertext(name)]!")
return count
@@ -259,10 +280,22 @@
owner.update_icons()
if(!silent)
- for(var/mob/living/H in get_hearers_in_view(2, get_turf(owner)))
- if(H.client && (H.client.prefs.cit_toggles & EATING_NOISES))
- var/sound/releasement = GLOB.release_sounds[release_sound]
- SEND_SOUND(H, releasement)
+ if(release_sound && !recent_sound)
+ if((world.time + NORMIE_HEARCHECK) > last_hearcheck)
+ LAZYCLEARLIST(hearing_mobs)
+ for(var/mob/living/H in get_hearers_in_view(3, owner))
+ if(!H.client || !(H.client.prefs.cit_toggles & EATING_NOISES))
+ continue
+ LAZYADD(hearing_mobs, H)
+ last_hearcheck = world.time
+ for(var/mob/living/H in hearing_mobs)
+ if(H && H.client && (isturf(H.loc) || (H.loc != src.contents)))
+ var/sound/releasement = GLOB.pred_release_sounds[release_sound]
+ SEND_SOUND(H,releasement)
+ else if(H && H in contents && H.client)
+ var/sound/releasement = GLOB.prey_release_sounds[release_sound]
+ SEND_SOUND(H,releasement)
+ recent_sound = TRUE
owner.visible_message("[owner] expels [M] from their [lowertext(name)]!")
return TRUE
@@ -312,11 +345,22 @@
for(var/mob/living/M in contents)
M.cure_blind("belly_[REF(src)]")
// target.nom_mob(content, target.owner)
- if(!silent)
- var/sound/eating = GLOB.vore_sounds[vore_sound]
- for(var/mob/living/M in get_hearers_in_view(3, src))
- if(M.client && M.client.prefs.cit_toggles & EATING_NOISES)
- SEND_SOUND(M, eating)
+ if(vore_sound && !recent_sound && !silent)
+ if((world.time + NORMIE_HEARCHECK) > last_hearcheck)
+ LAZYCLEARLIST(hearing_mobs)
+ for(var/mob/living/H in get_hearers_in_view(3, owner))
+ if(!H.client || !(H.client.prefs.cit_toggles & EATING_NOISES))
+ continue
+ LAZYADD(hearing_mobs, H)
+ last_hearcheck = world.time
+ for(var/mob/living/H in hearing_mobs)
+ if(H && H.client && (isturf(H.loc) || (H.loc != src.contents)))
+ var/sound/eating = GLOB.pred_vore_sounds[vore_sound]
+ SEND_SOUND(H,eating)
+ else if(H && H in contents && H.client)
+ var/sound/eating = GLOB.prey_vore_sounds[vore_sound]
+ SEND_SOUND(H,eating)
+ recent_sound = TRUE
owner.updateVRPanel()
for(var/mob/living/M in contents)
@@ -524,23 +568,31 @@
struggle_outer_message = "" + struggle_outer_message + ""
struggle_user_message = "" + struggle_user_message + ""
- var/sound/struggle_snuggle = sound(get_sfx("struggle_sound"))
+ var/sound/pred_struggle_snuggle = sound(get_sfx("struggle_sound"))
+ var/sound/prey_struggle_snuggle = sound(get_sfx("prey_struggle"))
var/sound/struggle_rustle = sound(get_sfx("rustle"))
+ LAZYCLEARLIST(hearing_mobs)
+ for(var/mob/living/H in get_hearers_in_view(3, owner))
+ if(!H.client || !(H.client.prefs.cit_toggles & EATING_NOISES))
+ continue
+ LAZYADD(hearing_mobs, H)
+
if(is_wet)
- for(var/mob/living/M in get_hearers_in_view(3, src))
- if(M.client && M.client.prefs.cit_toggles & EATING_NOISES)
- SEND_SOUND(M, struggle_snuggle)
+ for(var/mob/living/H in hearing_mobs)
+ if(H && H.client && (isturf(H.loc) || (H.loc != src.contents)))
+ SEND_SOUND(H,pred_struggle_snuggle)
+ else if(H && H in contents && H.client)
+ SEND_SOUND(H,prey_struggle_snuggle)
else
- for(var/mob/living/M in get_hearers_in_view(3, src))
- if(M.client && M.client.prefs.cit_toggles & EATING_NOISES)
- SEND_SOUND(M, struggle_rustle)
+ for(var/mob/living/H in hearing_mobs)
+ if(H && H.client)
+ SEND_SOUND(H, struggle_rustle)
- var/list/watching = hearers(3, owner)
- for(var/mob/living/M in watching)
- if(M.client && (M.client.prefs.cit_toggles & EATING_NOISES)) //Might as well censor the normies here too.
- M.show_message(struggle_outer_message, 1) // visible
+ for(var/mob/living/H in hearing_mobs)
+ if(H && H.client && (isturf(H.loc)))
+ H.show_message(struggle_outer_message, 1) // visible
to_chat(R,struggle_user_message)
diff --git a/code/modules/vore/eating/bellymodes.dm b/code/modules/vore/eating/bellymodes.dm
index 69b517ee3b..0ecaf49abc 100644
--- a/code/modules/vore/eating/bellymodes.dm
+++ b/code/modules/vore/eating/bellymodes.dm
@@ -31,16 +31,16 @@
///////////////////// Prey Loop Refresh/hack //////////////////////
for(var/mob/living/M in contents)
- if(isbelly(M.loc))
+ if(M && isbelly(M.loc))
if(world.time > M.next_preyloop)
if(is_wet && wet_loop)
if(!M.client)
continue
M.stop_sound_channel(CHANNEL_PREYLOOP) // sanity just in case
if(M.client.prefs.cit_toggles & DIGESTION_NOISES)
- var/sound/preyloop = sound('sound/vore/prey/loop.ogg', repeat = TRUE)
+ var/sound/preyloop = sound('sound/vore/prey/loop.ogg')
M.playsound_local(get_turf(src),preyloop, 80,0, channel = CHANNEL_PREYLOOP)
- M.next_preyloop = (world.time + 52 SECONDS)
+ M.next_preyloop = (world.time + 51 SECONDS)
/////////////////////////// Exit Early ////////////////////////////
@@ -71,7 +71,7 @@
for (var/mob/living/M in contents)
if(prob(25))
- if((world.time - NORMIE_HEARCHECK) > last_hearcheck)
+ if((world.time + NORMIE_HEARCHECK) > last_hearcheck)
LAZYCLEARLIST(hearing_mobs)
for(var/mob/living/H in get_hearers_in_view(3, owner))
if(!H.client || !(H.client.prefs.cit_toggles & DIGESTION_NOISES))
@@ -79,9 +79,9 @@
LAZYADD(hearing_mobs, H)
last_hearcheck = world.time
for(var/mob/living/H in hearing_mobs)
- if(H.client && (isturf(H.loc) || (H.loc != src.contents)))
+ if(H && H.client && (isturf(H.loc) || (H.loc != src.contents)))
SEND_SOUND(H,pred_digest)
- else if(H in contents && H.client)
+ else if(H && H in contents && H.client)
SEND_SOUND(H,prey_digest)
//Pref protection!
@@ -108,7 +108,7 @@
M.visible_message("You watch as [owner]'s form loses its additions.")
owner.nutrition += 400 // so eating dead mobs gives you *something*.
- if((world.time - NORMIE_HEARCHECK) > last_hearcheck)
+ if((world.time + NORMIE_HEARCHECK) > last_hearcheck)
LAZYCLEARLIST(hearing_mobs)
for(var/mob/living/H in get_hearers_in_view(3, owner))
if(!H.client || !(H.client.prefs.cit_toggles & DIGESTION_NOISES))
@@ -116,9 +116,9 @@
LAZYADD(hearing_mobs, H)
last_hearcheck = world.time
for(var/mob/living/H in hearing_mobs)
- if(H.client && (isturf(H.loc) || (H.loc != src.contents)))
+ if(H && H.client && (isturf(H.loc) || (H.loc != src.contents)))
SEND_SOUND(H,pred_death)
- else if(H in contents && H.client)
+ else if(H && H in contents && H.client)
SEND_SOUND(H,prey_death)
M.stop_sound_channel(CHANNEL_PREYLOOP)
digestion_death(M)
@@ -142,7 +142,7 @@
if(digest_mode == DM_HEAL)
for (var/mob/living/M in contents)
if(prob(25))
- if((world.time - NORMIE_HEARCHECK) > last_hearcheck)
+ if((world.time + NORMIE_HEARCHECK) > last_hearcheck)
LAZYCLEARLIST(hearing_mobs)
for(var/mob/living/H in get_hearers_in_view(3, owner))
if(!H.client || !(H.client.prefs.cit_toggles & DIGESTION_NOISES))
@@ -150,9 +150,9 @@
LAZYADD(hearing_mobs, H)
last_hearcheck = world.time
for(var/mob/living/H in hearing_mobs)
- if(H.client && (isturf(H.loc) || (H.loc != src.contents)))
+ if(H && H.client && (isturf(H.loc) || (H.loc != src.contents)))
SEND_SOUND(H,pred_digest)
- else if(H in contents && H.client)
+ else if(H && H in contents && H.client)
SEND_SOUND(H,prey_digest)
if(M.stat != DEAD)
@@ -165,7 +165,7 @@
//for when you just want people to squelch around
if(digest_mode == DM_NOISY)
if(prob(35))
- if((world.time - NORMIE_HEARCHECK) > last_hearcheck)
+ if((world.time + NORMIE_HEARCHECK) > last_hearcheck)
LAZYCLEARLIST(hearing_mobs)
for(var/mob/living/H in get_hearers_in_view(3, owner))
if(!H.client || !(H.client.prefs.cit_toggles & DIGESTION_NOISES))
@@ -173,9 +173,9 @@
LAZYADD(hearing_mobs, H)
last_hearcheck = world.time
for(var/mob/living/H in hearing_mobs)
- if(H.client && (isturf(H.loc) || (H.loc != src.contents)))
+ if(H && H.client && (isturf(H.loc) || (H.loc != src.contents)))
SEND_SOUND(H,pred_digest)
- else if(H in contents && H.client)
+ else if(H && H in contents && H.client)
SEND_SOUND(H,prey_digest)
@@ -185,7 +185,7 @@
for (var/mob/living/M in contents)
if(prob(10))//Less often than gurgles. People might leave this on forever.
- if((world.time - NORMIE_HEARCHECK) > last_hearcheck)
+ if((world.time + NORMIE_HEARCHECK) > last_hearcheck)
LAZYCLEARLIST(hearing_mobs)
for(var/mob/living/H in get_hearers_in_view(3, owner))
if(!H.client || !(H.client.prefs.cit_toggles & DIGESTION_NOISES))
@@ -193,9 +193,9 @@
LAZYADD(hearing_mobs, H)
last_hearcheck = world.time
for(var/mob/living/H in hearing_mobs)
- if(H.client && (isturf(H.loc) || (H.loc != src.contents)))
+ if(H && H.client && (isturf(H.loc) || (H.loc != src.contents)))
SEND_SOUND(H,pred_digest)
- else if(H in contents && H.client)
+ else if(H && H in contents && H.client)
SEND_SOUND(H,prey_digest)
if(M.absorbed)
@@ -229,7 +229,7 @@
for (var/mob/living/M in contents)
if(prob(55)) //if you're hearing this, you're a vore ho anyway.
- if((world.time - NORMIE_HEARCHECK) > last_hearcheck)
+ if((world.time + NORMIE_HEARCHECK) > last_hearcheck)
LAZYCLEARLIST(hearing_mobs)
for(var/mob/living/H in get_hearers_in_view(3, owner))
if(!H.client || !(H.client.prefs.cit_toggles & DIGESTION_NOISES))
@@ -237,9 +237,9 @@
LAZYADD(hearing_mobs, H)
last_hearcheck = world.time
for(var/mob/living/H in hearing_mobs)
- if(H.client && (isturf(H.loc) || (H.loc != src.contents)))
+ if(H && H.client && (isturf(H.loc) || (H.loc != src.contents)))
SEND_SOUND(H,pred_digest)
- else if(H in contents && H.client)
+ else if(H && H in contents && H.client)
SEND_SOUND(H,prey_digest)
//No digestion protection for megafauna.
@@ -262,7 +262,7 @@
to_chat(owner, "[digest_alert_owner]")
to_chat(M, "[digest_alert_prey]")
M.visible_message("You watch as [owner]'s guts loudly rumble as it finishes off a meal.")
- if((world.time - NORMIE_HEARCHECK) > last_hearcheck)
+ if((world.time + NORMIE_HEARCHECK) > last_hearcheck)
LAZYCLEARLIST(hearing_mobs)
for(var/mob/living/H in get_hearers_in_view(3, owner))
if(!H.client || !(H.client.prefs.cit_toggles & DIGESTION_NOISES))
@@ -270,9 +270,9 @@
LAZYADD(hearing_mobs, H)
last_hearcheck = world.time
for(var/mob/living/H in hearing_mobs)
- if(H.client && (isturf(H.loc) || (H.loc != src.contents)))
+ if(H && H.client && (isturf(H.loc) || (H.loc != src.contents)))
SEND_SOUND(H,pred_death)
- else if(H in contents && H.client)
+ else if(H && H in contents && H.client)
SEND_SOUND(H,prey_death)
M.spill_organs(FALSE,TRUE,TRUE)
M.stop_sound_channel(CHANNEL_PREYLOOP)
diff --git a/code/modules/vore/eating/living.dm b/code/modules/vore/eating/living.dm
index e6ddcdc56d..1a00dde64f 100644
--- a/code/modules/vore/eating/living.dm
+++ b/code/modules/vore/eating/living.dm
@@ -126,7 +126,7 @@
//Sanity
if(!user || !prey || !pred || !istype(belly) || !(belly in pred.vore_organs))
testing("[user] attempted to feed [prey] to [pred], via [lowertext(belly.name)] but it went wrong.")
- return FALSE
+ return
if (!prey.devourable)
to_chat(user, "This can't be eaten!")
@@ -151,9 +151,14 @@
user.visible_message(attempt_msg)
// Now give the prey time to escape... return if they did
- var/swallow_time = delay || ishuman(prey) ? belly.human_prey_swallow_time : belly.nonhuman_prey_swallow_time
+ var/swallow_time
+ if(delay)
+ swallow_time = delay
+ else
+ swallow_time = istype(prey, /mob/living/carbon/human) ? belly.human_prey_swallow_time : belly.nonhuman_prey_swallow_time
- if(!do_mob(src, user, swallow_time))
+ //Timer and progress bar
+ if(!do_after(user, swallow_time, prey))
return FALSE // Prey escaped (or user disabled) before timer expired.
if(!prey.Adjacent(user)) //double check'd just in case they moved during the timer and the do_mob didn't fail for whatever reason
@@ -162,13 +167,6 @@
// If we got this far, nom successful! Announce it!
user.visible_message(success_msg)
- // incredibly contentious eating noises time
- var/turf/source = get_turf(user)
- var/sound/eating = GLOB.vore_sounds[belly.vore_sound]
- for(var/mob/living/M in get_hearers_in_view(3, source))
- if(M.client && M.client.prefs.cit_toggles & EATING_NOISES)
- SEND_SOUND(M, eating)
-
// Actually shove prey into the belly.
belly.nom_mob(prey, user)
stop_pulling()
@@ -218,9 +216,9 @@
/mob/living/proc/preyloop_refresh()
set name = "Internal loop refresh"
set category = "Vore"
+ src.stop_sound_channel(CHANNEL_PREYLOOP) // sanity just in case
if(isbelly(loc))
- src.stop_sound_channel(CHANNEL_PREYLOOP) // sanity just in case
- var/sound/preyloop = sound('sound/vore/prey/loop.ogg', repeat = TRUE)
+ var/sound/preyloop = sound('sound/vore/prey/loop.ogg')
SEND_SOUND(src, preyloop)
else
to_chat(src, "You aren't inside anything, you clod.")
diff --git a/code/modules/vore/eating/vorepanel.dm b/code/modules/vore/eating/vorepanel.dm
index 781417d17c..962fe54af7 100644
--- a/code/modules/vore/eating/vorepanel.dm
+++ b/code/modules/vore/eating/vorepanel.dm
@@ -548,7 +548,7 @@
selected.vore_verb = new_verb
if(href_list["b_release"])
- var/choice = input(user,"Currently set to [selected.release_sound]","Select Sound") as null|anything in GLOB.release_sounds
+ var/choice = input(user,"Currently set to [selected.release_sound]","Select Sound") as null|anything in GLOB.pred_release_sounds
if(!choice)
return
@@ -556,12 +556,12 @@
selected.release_sound = choice
if(href_list["b_releasesoundtest"])
- var/sound/releasetest = GLOB.release_sounds[selected.release_sound]
+ var/sound/releasetest = GLOB.prey_release_sounds[selected.release_sound]
if(releasetest)
SEND_SOUND(user, releasetest)
if(href_list["b_sound"])
- var/choice = input(user,"Currently set to [selected.vore_sound]","Select Sound") as null|anything in GLOB.vore_sounds
+ var/choice = input(user,"Currently set to [selected.vore_sound]","Select Sound") as null|anything in GLOB.pred_vore_sounds
if(!choice)
return
@@ -569,7 +569,7 @@
selected.vore_sound = choice
if(href_list["b_soundtest"])
- var/sound/voretest = GLOB.vore_sounds[selected.vore_sound]
+ var/sound/voretest = GLOB.prey_vore_sounds[selected.vore_sound]
if(voretest)
SEND_SOUND(user, voretest)