diff --git a/code/modules/reagents/chemistry/reagents/medicine.dm b/code/modules/reagents/chemistry/reagents/medicine.dm index cf4bce5cec1..2b3eee3237e 100644 --- a/code/modules/reagents/chemistry/reagents/medicine.dm +++ b/code/modules/reagents/chemistry/reagents/medicine.dm @@ -643,25 +643,26 @@ ghost << sound('sound/effects/genetics.ogg') M.visible_message("[M] doesn't appear to respond, perhaps try again later?") if(!M.suiciding && !ghost && !(NOCLONE in M.mutations)) + var/time_dead = world.time - M.timeofdeath M.visible_message("[M] seems to rise from the dead!") M.setOxyLoss(0) M.adjustBruteLoss(rand(0,15)) M.adjustToxLoss(rand(0,15)) M.adjustFireLoss(rand(0,15)) - if(ishuman(M) && M.mind && prob(10)) // To prevent people from using this on monkies to cause pandemics + if(ishuman(M)) var/mob/living/carbon/human/H = M - // Their body is being suffused with magical life-inducing stuff - so other things get lively, too - // Things are going to get interesting for the reviving party, too - var/virus_type = pick(list( - /datum/disease/advance/flu, - /datum/disease/advance/cold, - /datum/disease/brainrot, - /datum/disease/magnitis, - /datum/disease/fake_gbs, // honk - /datum/disease/cold9 - )) - var/datum/disease/D = new virus_type() - H.AddDisease(D) + var/necrosis_prob = 40 * min((20 MINUTES), max((time_dead - (1 MINUTES)), 0)) / ((20 MINUTES) - (1 MINUTES)) + to_chat(world, "Necrosis prob: [necrosis_prob]") + for(var/obj/item/organ/O in (H.organs | H.internal_organs)) + // Per non-vital body part: + // 0% chance of necrosis within 1 minute of death + // 40% chance of necrosis after 20 minutes of death + if(!O.vital && prob(necrosis_prob)) + // side effects may include: Organ failure + O.necrotize(FALSE) + if(O.status & ORGAN_DEAD) + O.germ_level = INFECTION_LEVEL_THREE + H.update_body() M.update_revive() M.stat = UNCONSCIOUS diff --git a/code/modules/surgery/organs/organ.dm b/code/modules/surgery/organs/organ.dm index 16a22ea81f6..aa32375792e 100644 --- a/code/modules/surgery/organs/organ.dm +++ b/code/modules/surgery/organs/organ.dm @@ -66,7 +66,7 @@ var/list/organ_cache = list() blood_DNA = list() blood_DNA[dna.unique_enzymes] = dna.b_type -/obj/item/organ/proc/die() +/obj/item/organ/proc/necrotize(update_sprite=TRUE) if(status & ORGAN_ROBOT) return damage = max_damage @@ -105,10 +105,10 @@ var/list/organ_cache = list() if(germ_level >= INFECTION_LEVEL_TWO) germ_level += rand(2,6) if(germ_level >= INFECTION_LEVEL_THREE) - die() + necrotize() if(damage >= max_damage) - die() + necrotize() else if(owner.bodytemperature >= 170) //cryo stops germs from moving and doing their bad stuffs //** Handle antibiotics and curing infections @@ -117,7 +117,7 @@ var/list/organ_cache = list() //check if we've hit max_damage if(damage >= max_damage) - die() + necrotize() /obj/item/organ/proc/is_preserved() if(istype(loc,/obj/item/device/mmi)) diff --git a/code/modules/surgery/organs/organ_external.dm b/code/modules/surgery/organs/organ_external.dm index 110584d5d2a..242b6e48217 100644 --- a/code/modules/surgery/organs/organ_external.dm +++ b/code/modules/surgery/organs/organ_external.dm @@ -68,6 +68,19 @@ var/can_stand var/wound_cleanup_timer +/obj/item/organ/external/necrotize(update_sprite=TRUE) + if(status & (ORGAN_ROBOT|ORGAN_DEAD)) + return + to_chat(owner, "You can't feel your [name] anymore...") + status |= ORGAN_DEAD + if(dead_icon) + icon_state = dead_icon + if(owner) + owner.update_body(update_sprite) + owner.bad_external_organs |= src + if(vital) + owner.death() + /obj/item/organ/external/Destroy() if(parent && parent.children) parent.children -= src @@ -541,10 +554,7 @@ Note that amputating the affected organ does in fact remove the infection from t parent.germ_level++ if(germ_level >= INFECTION_LEVEL_THREE && antibiotics < 30) //overdosing is necessary to stop severe infections - if(!(status & ORGAN_DEAD)) - status |= ORGAN_DEAD - to_chat(owner, "You can't feel your [name] anymore...") - owner.update_body(1) + necrotize() germ_level++ owner.adjustToxLoss(1)