Allows clone backups from destroyed bodies (but for real) (#34460)

* fix destroyed bodies being uncloneable

* fixes slimes cloning when gibbed or dusted
This commit is contained in:
nervere
2023-06-27 14:45:42 -04:00
committed by GitHub
parent 3d18355fd9
commit 232b8b96e0
4 changed files with 49 additions and 29 deletions

View File

@@ -131,7 +131,7 @@
dorfpod.scan_body(src)
if(ticker && ticker.mode)
sql_report_death(src)
species.handle_death(src)
species.handle_death(src, gibbed)
if(become_zombie)
spawn(20 SECONDS)
if(!gcDestroyed)

View File

@@ -282,7 +282,7 @@ var/global/list/playable_species = list("Human")
else
return capitalize(pick(first_names_male)) + " " + capitalize(pick(last_names))
/datum/species/proc/handle_death(var/mob/living/carbon/human/H) //Handles any species-specific death events (such as dionaea nymph spawns).
/datum/species/proc/handle_death(var/mob/living/carbon/human/H, var/gibbed = 0) //Handles any species-specific death events (such as dionaea nymph spawns).
return
/datum/species/proc/can_artifact_revive()
@@ -1111,11 +1111,35 @@ var/list/has_died_as_golem = list()
"brain" = /datum/organ/internal/brain/slime_core,
)
/datum/species/slime/handle_death(var/mob/living/carbon/human/H) //Handles any species-specific death events (such as dionaea nymph spawns).
H.dropBorers()
/datum/species/slime/handle_death(var/mob/living/carbon/human/H, gibbed) //Handles any species-specific death events (such as dionaea nymph spawns).
H.dropBorers(gibbed)
for(var/atom/movable/I in H.contents)
I.forceMove(H.loc)
anim(target = H, a_icon = 'icons/mob/mob.dmi', flick_anim = "liquify", sleeptime = 15)
if(!gibbed)
handle_slime_puddle(H)
/datum/species/slime/gib(mob/living/carbon/human/H)
handle_slime_puddle(H)
..()
H.monkeyizing = TRUE
for(var/datum/organ/external/E in H.organs)
if(istype(E, /datum/organ/external/chest) || istype(E, /datum/organ/external/groin) || istype(E, /datum/organ/external/head))
continue
//Only make the limb drop if it's not too damaged
if(prob(100 - E.get_damage()))
//Override the current limb status and don't cause an explosion
E.droplimb(1, 1)
var/gib_radius = 0
if(H.reagents.has_reagent(LUBE))
gib_radius = 6
anim(target = H, a_icon = 'icons/mob/mob.dmi', flick_anim = "gibbed-h", sleeptime = 15)
hgibs(H.loc, H.virus2, H.dna, flesh_color, blood_color, gib_radius)
/datum/species/slime/proc/handle_slime_puddle(var/mob/living/carbon/human/H)
if(!H)
return
var/mob/living/slime_pile/S = new(H.loc)
if(H.real_name)
S.real_name = H.real_name
@@ -1127,10 +1151,6 @@ var/list/has_died_as_golem = list()
S.dna=H.dna
S.mind=H.mind
/datum/species/slime/gib(mob/living/carbon/human/H)
..()
H.default_gib()
/mob/living/slime_pile //serves as the corpse of slime people
name = "puddle of slime"
desc = "The remains of a slime person."