diff --git a/code/modules/mob/living/carbon/human/dummy.dm b/code/modules/mob/living/carbon/human/dummy.dm
index 3406d29b3a..6da188dd2d 100644
--- a/code/modules/mob/living/carbon/human/dummy.dm
+++ b/code/modules/mob/living/carbon/human/dummy.dm
@@ -4,6 +4,7 @@
status_flags = GODMODE|CANPUSH
mouse_drag_pointer = MOUSE_INACTIVE_POINTER
var/in_use = FALSE
+ no_vore = TRUE
INITIALIZE_IMMEDIATE(/mob/living/carbon/human/dummy)
diff --git a/code/modules/mob/living/simple_animal/simple_animal_vr.dm b/code/modules/mob/living/simple_animal/simple_animal_vr.dm
index 6736dc737f..f81496b22d 100644
--- a/code/modules/mob/living/simple_animal/simple_animal_vr.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal_vr.dm
@@ -29,6 +29,7 @@
/mob/living/simple_animal/Destroy()
release_vore_contents(include_absorbed = TRUE, silent = TRUE)
prey_excludes.Cut()
+ QDEL_NULL_LIST(vore_organs)
. = ..()
// Update fullness based on size & quantity of belly contents
diff --git a/code/modules/vore/eating/belly_obj.dm b/code/modules/vore/eating/belly_obj.dm
index 8b70e35ab1..9b54b39ba9 100644
--- a/code/modules/vore/eating/belly_obj.dm
+++ b/code/modules/vore/eating/belly_obj.dm
@@ -169,13 +169,13 @@
to_chat(owner,"[thing] slides into your [lowertext(name)].")
//Sound w/ antispam flag setting
- if(vore_sound && (world.time > recent_sound))
+ 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 = (world.time + 20 SECONDS)
+ recent_sound = TRUE
//Messages if it's a mob
if(isliving(thing))
diff --git a/code/modules/vore/eating/bellymodes.dm b/code/modules/vore/eating/bellymodes.dm
index 4784ec6f3b..69b517ee3b 100644
--- a/code/modules/vore/eating/bellymodes.dm
+++ b/code/modules/vore/eating/bellymodes.dm
@@ -18,14 +18,16 @@
return SSBELLIES_PROCESSED
next_process = times_fired + (6 SECONDS/wait) //Set up our next process time.
+ var/to_update = FALSE
/////////////////////////// Auto-Emotes ///////////////////////////
if(contents.len && next_emote <= times_fired)
next_emote = times_fired + round(emote_time/wait,1)
var/list/EL = emote_lists[digest_mode]
- for(var/mob/living/M in contents)
- if(M.digestable || !(digest_mode == DM_DIGEST)) // don't give digesty messages to indigestible people
- to_chat(M,"[pick(EL)]")
+ if(LAZYLEN(EL))
+ for(var/mob/living/M in contents)
+ 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)
@@ -56,7 +58,6 @@
var/sound/prey_death = sound(get_sfx("death_prey"))
var/sound/pred_digest = sound(get_sfx("digest_pred"))
var/sound/pred_death = sound(get_sfx("death_pred"))
- var/turf/source = get_turf(owner)
///////////////////////////// DM_HOLD /////////////////////////////
if(digest_mode == DM_HOLD)
@@ -72,16 +73,16 @@
if(prob(25))
if((world.time - NORMIE_HEARCHECK) > last_hearcheck)
LAZYCLEARLIST(hearing_mobs)
- for(var/mob/living/H in get_hearers_in_view(3, source))
+ for(var/mob/living/H in get_hearers_in_view(3, owner))
if(!H.client || !(H.client.prefs.cit_toggles & DIGESTION_NOISES))
continue
LAZYADD(hearing_mobs, H)
last_hearcheck = world.time
for(var/mob/living/H in hearing_mobs)
- if(!isbelly(H.loc))
- H.playsound_local(source, null, 45, falloff = 0, S = pred_digest)
- else if(H in contents)
- H.playsound_local(source, null, 65, falloff = 0, S = prey_digest)
+ if(H.client && (isturf(H.loc) || (H.loc != src.contents)))
+ SEND_SOUND(H,pred_digest)
+ else if(H in contents && H.client)
+ SEND_SOUND(H,prey_digest)
//Pref protection!
if (!M.digestable || M.absorbed)
@@ -109,19 +110,20 @@
owner.nutrition += 400 // so eating dead mobs gives you *something*.
if((world.time - NORMIE_HEARCHECK) > last_hearcheck)
LAZYCLEARLIST(hearing_mobs)
- for(var/mob/living/H in get_hearers_in_view(3, source))
+ for(var/mob/living/H in get_hearers_in_view(3, owner))
if(!H.client || !(H.client.prefs.cit_toggles & DIGESTION_NOISES))
continue
LAZYADD(hearing_mobs, H)
last_hearcheck = world.time
for(var/mob/living/H in hearing_mobs)
- if(!isbelly(H.loc))
- H.playsound_local(source, null, 45, falloff = 0, S = pred_death)
- else if(H in contents)
- H.playsound_local(source, null, 65, falloff = 0, S = prey_death)
+ if(H.client && (isturf(H.loc) || (H.loc != src.contents)))
+ SEND_SOUND(H,pred_death)
+ else if(H in contents && H.client)
+ SEND_SOUND(H,prey_death)
M.stop_sound_channel(CHANNEL_PREYLOOP)
digestion_death(M)
owner.update_icons()
+ to_update = TRUE
continue
@@ -136,31 +138,28 @@
if(istype(T,/obj/item/reagent_containers/food) || istype(T,/obj/item/organ))
digest_item(T)
- owner.updateVRPanel()
-
///////////////////////////// DM_HEAL /////////////////////////////
if(digest_mode == DM_HEAL)
for (var/mob/living/M in contents)
if(prob(25))
if((world.time - NORMIE_HEARCHECK) > last_hearcheck)
LAZYCLEARLIST(hearing_mobs)
- for(var/mob/living/H in get_hearers_in_view(3, source))
+ for(var/mob/living/H in get_hearers_in_view(3, owner))
if(!H.client || !(H.client.prefs.cit_toggles & DIGESTION_NOISES))
continue
LAZYADD(hearing_mobs, H)
last_hearcheck = world.time
for(var/mob/living/H in hearing_mobs)
- if(!isbelly(H.loc))
- H.playsound_local(source, null, 45, falloff = 0, S = pred_digest)
- else if(H in contents)
- H.playsound_local(source, null, 65, falloff = 0, S = prey_digest)
+ if(H.client && (isturf(H.loc) || (H.loc != src.contents)))
+ SEND_SOUND(H,pred_digest)
+ else if(H in contents && H.client)
+ SEND_SOUND(H,prey_digest)
if(M.stat != DEAD)
if(owner.nutrition >= NUTRITION_LEVEL_STARVING && (M.health < M.maxHealth))
M.adjustBruteLoss(-3)
M.adjustFireLoss(-3)
owner.nutrition -= 5
- return
////////////////////////// DM_NOISY /////////////////////////////////
//for when you just want people to squelch around
@@ -168,16 +167,16 @@
if(prob(35))
if((world.time - NORMIE_HEARCHECK) > last_hearcheck)
LAZYCLEARLIST(hearing_mobs)
- for(var/mob/living/H in get_hearers_in_view(3, source))
+ for(var/mob/living/H in get_hearers_in_view(3, owner))
if(!H.client || !(H.client.prefs.cit_toggles & DIGESTION_NOISES))
continue
LAZYADD(hearing_mobs, H)
last_hearcheck = world.time
for(var/mob/living/H in hearing_mobs)
- if(!isbelly(H.loc))
- H.playsound_local(source, null, 45, falloff = 0, S = pred_digest)
- else if(H in contents)
- H.playsound_local(source, null, 65, falloff = 0, S = prey_digest)
+ if(H.client && (isturf(H.loc) || (H.loc != src.contents)))
+ SEND_SOUND(H,pred_digest)
+ else if(H in contents && H.client)
+ SEND_SOUND(H,prey_digest)
//////////////////////////// DM_ABSORB ////////////////////////////
@@ -188,16 +187,16 @@
if(prob(10))//Less often than gurgles. People might leave this on forever.
if((world.time - NORMIE_HEARCHECK) > last_hearcheck)
LAZYCLEARLIST(hearing_mobs)
- for(var/mob/living/H in get_hearers_in_view(3, source))
+ for(var/mob/living/H in get_hearers_in_view(3, owner))
if(!H.client || !(H.client.prefs.cit_toggles & DIGESTION_NOISES))
continue
LAZYADD(hearing_mobs, H)
last_hearcheck = world.time
for(var/mob/living/H in hearing_mobs)
- if(!isbelly(H.loc))
- H.playsound_local(source, null, 45, falloff = 0, S = pred_digest)
- else if(H in contents)
- H.playsound_local(source, null, 65, falloff = 0, S = prey_digest)
+ if(H.client && (isturf(H.loc) || (H.loc != src.contents)))
+ SEND_SOUND(H,pred_digest)
+ else if(H in contents && H.client)
+ SEND_SOUND(H,prey_digest)
if(M.absorbed)
continue
@@ -208,16 +207,18 @@
owner.nutrition += oldnutrition
else if(M.nutrition < 100) //When they're finally drained.
absorb_living(M)
+ to_update = TRUE
//////////////////////////// DM_UNABSORB ////////////////////////////
else if(digest_mode == DM_UNABSORB)
for (var/mob/living/M in contents)
if(M.absorbed && owner.nutrition >= 100)
- M.absorbed = 0
+ M.absorbed = FALSE
to_chat(M,"You suddenly feel solid again ")
to_chat(owner,"You feel like a part of you is missing.")
owner.nutrition -= 100
+ to_update = TRUE
//////////////////////////DM_DRAGON /////////////////////////////////////
//because dragons need snowflake guts
@@ -230,16 +231,16 @@
if(prob(55)) //if you're hearing this, you're a vore ho anyway.
if((world.time - NORMIE_HEARCHECK) > last_hearcheck)
LAZYCLEARLIST(hearing_mobs)
- for(var/mob/living/H in get_hearers_in_view(3, source))
+ for(var/mob/living/H in get_hearers_in_view(3, owner))
if(!H.client || !(H.client.prefs.cit_toggles & DIGESTION_NOISES))
continue
LAZYADD(hearing_mobs, H)
last_hearcheck = world.time
for(var/mob/living/H in hearing_mobs)
- if(!isbelly(H.loc))
- H.playsound_local(source, null, 45, falloff = 0, S = pred_digest)
- else if(H in contents)
- H.playsound_local(source, null, 65, falloff = 0, S = prey_digest)
+ if(H.client && (isturf(H.loc) || (H.loc != src.contents)))
+ SEND_SOUND(H,pred_digest)
+ else if(H in contents && H.client)
+ SEND_SOUND(H,prey_digest)
//No digestion protection for megafauna.
@@ -263,20 +264,21 @@
M.visible_message("You watch as [owner]'s guts loudly rumble as it finishes off a meal.")
if((world.time - NORMIE_HEARCHECK) > last_hearcheck)
LAZYCLEARLIST(hearing_mobs)
- for(var/mob/living/H in get_hearers_in_view(3, source))
+ for(var/mob/living/H in get_hearers_in_view(3, owner))
if(!H.client || !(H.client.prefs.cit_toggles & DIGESTION_NOISES))
continue
LAZYADD(hearing_mobs, H)
last_hearcheck = world.time
for(var/mob/living/H in hearing_mobs)
- if(!isbelly(H.loc))
- H.playsound_local(source, null, 45, falloff = 0, S = pred_death)
- else if(H in contents)
- H.playsound_local(source, null, 65, falloff = 0, S = prey_death)
+ if(H.client && (isturf(H.loc) || (H.loc != src.contents)))
+ SEND_SOUND(H,pred_death)
+ else if(H in contents && H.client)
+ SEND_SOUND(H,prey_death)
M.spill_organs(FALSE,TRUE,TRUE)
M.stop_sound_channel(CHANNEL_PREYLOOP)
digestion_death(M)
owner.update_icons()
+ to_update = TRUE
continue
@@ -291,4 +293,11 @@
if(istype(T,/obj/item/reagent_containers/food) || istype(T,/obj/item/organ))
digest_item(T)
- owner.updateVRPanel()
\ No newline at end of file
+ if(to_update)
+ for(var/mob/living/M in contents)
+ if(M.client)
+ M.updateVRPanel()
+ if(owner.client)
+ owner.updateVRPanel()
+
+ return SSBELLIES_PROCESSED
\ No newline at end of file