|
|
|
@@ -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,"<span class='notice'>[pick(EL)]</span>")
|
|
|
|
|
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,"<span class='notice'>[pick(EL)]</span>")
|
|
|
|
|
|
|
|
|
|
///////////////////// 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,"<span class='notice'>You suddenly feel solid again </span>")
|
|
|
|
|
to_chat(owner,"<span class='notice'>You feel like a part of you is missing.</span>")
|
|
|
|
|
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("<span class='notice'>You watch as [owner]'s guts loudly rumble as it finishes off a meal.</span>")
|
|
|
|
|
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()
|
|
|
|
|
if(to_update)
|
|
|
|
|
for(var/mob/living/M in contents)
|
|
|
|
|
if(M.client)
|
|
|
|
|
M.updateVRPanel()
|
|
|
|
|
if(owner.client)
|
|
|
|
|
owner.updateVRPanel()
|
|
|
|
|
|
|
|
|
|
return SSBELLIES_PROCESSED
|