diff --git a/code/modules/vore/eating/belly_obj_vr.dm b/code/modules/vore/eating/belly_obj_vr.dm index 690f03c08a0..8436586bc11 100644 --- a/code/modules/vore/eating/belly_obj_vr.dm +++ b/code/modules/vore/eating/belly_obj_vr.dm @@ -363,18 +363,31 @@ STOP_PROCESSING(SSbellies, src) owner?.vore_organs?.Remove(src) owner = null + for(var/mob/observer/G in src) + G.forceMove(get_turf(src)) //ported from CHOMPStation PR#7132 return ..() // Called whenever an atom enters this belly /obj/belly/Entered(atom/movable/thing, atom/OldLoc) + + if(istype(thing, /mob/observer)) //Ports CHOMPStation PR#3072 + if(desc) //Ports CHOMPStation PR#4772 + //Allow ghosts see where they are if they're still getting squished along inside. + var/formatted_desc + formatted_desc = replacetext(desc, "%belly", lowertext(name)) //replace with this belly's name + formatted_desc = replacetext(formatted_desc, "%pred", owner) //replace with this belly's owner + formatted_desc = replacetext(formatted_desc, "%prey", thing) //replace with whatever mob entered into this belly + to_chat(thing, "[formatted_desc]") + if(OldLoc in contents) return //Someone dropping something (or being stripdigested) //Generic entered message - to_chat(owner,"[thing] slides into your [lowertext(name)].") + if(!istype(thing, /mob/observer)) //Don't have ghosts announce they're reentering the belly on death + to_chat(owner,"[thing] slides into your [lowertext(name)].") //Sound w/ antispam flag setting - if(vore_sound && !recent_sound) + if(vore_sound && !recent_sound && !istype(thing, /mob/observer)) var/soundfile if(!fancy_vore) soundfile = classic_vore_sounds[vore_sound] @@ -639,7 +652,7 @@ privacy_volume = 25 //Print notifications/sound if necessary - if(!silent) + if(!silent && !isobserver(M)) owner.visible_message("[span_green("[owner] [release_verb] [M] from their [lowertext(name)]!")]",range = privacy_range) var/soundfile if(!fancy_vore) @@ -699,6 +712,15 @@ for(var/mob/living/L in contents) living_count++ + var/count_total = contents.len + for(var/mob/observer/C in contents) + count_total-- //Exclude any ghosts from %count + + var/list/vore_contents = list() + for(var/G in contents) + if(!isobserver(G)) + vore_contents += G //Exclude any ghosts from %prey + for(var/mob/living/P in contents) if(!P.absorbed) //This is required first, in case there's a person absorbed and not absorbed in a stomach. total_bulge += P.size_multiplier @@ -708,9 +730,9 @@ formatted_message = replacetext(raw_message, "%belly", lowertext(name)) formatted_message = replacetext(formatted_message, "%pred", owner) - formatted_message = replacetext(formatted_message, "%prey", english_list(contents)) + formatted_message = replacetext(formatted_message, "%prey", english_list(vore_contents)) formatted_message = replacetext(formatted_message, "%countprey", living_count) - formatted_message = replacetext(formatted_message, "%count", contents.len) + formatted_message = replacetext(formatted_message, "%count", count_total) return(span_red("[formatted_message]")) @@ -1020,7 +1042,9 @@ //Incase they have the loop going, let's double check to stop it. M.stop_sound_channel(CHANNEL_PREYLOOP) // Delete the digested mob - M.ghostize() // Make sure they're out, so we can copy attack logs and such. + var/mob/observer/G = M.ghostize() //Ports CHOMPStation PR#3074 Make sure they're out, so we can copy attack logs and such. + if(G) + G.forceMove(src) qdel(M) // Handle a mob being absorbed @@ -1636,7 +1660,7 @@ if(!(content in src) || !istype(target)) return content.forceMove(target) - if(ismob(content)) + if(ismob(content) && !isobserver(content)) var/mob/ourmob = content ourmob.reset_view(owner) if(isitem(content))