diff --git a/code/modules/reagents/chemistry/reagents/medicine.dm b/code/modules/reagents/chemistry/reagents/medicine.dm
index 451452936fe..2b3eee3237e 100644
--- a/code/modules/reagents/chemistry/reagents/medicine.dm
+++ b/code/modules/reagents/chemistry/reagents/medicine.dm
@@ -617,6 +617,9 @@
..()
/datum/reagent/medicine/strange_reagent/reaction_mob(mob/living/M, method=TOUCH, volume)
+ if(volume < 1)
+ // gotta pay to play
+ return ..()
if(isanimal(M))
if(method == TOUCH)
var/mob/living/simple_animal/SM = M
@@ -628,10 +631,11 @@
if(iscarbon(M))
if(method == INGEST)
if(M.stat == DEAD)
- if(M.getBruteLoss()+M.getFireLoss() >= 150)
+ if(M.getBruteLoss()+M.getFireLoss()+M.getCloneLoss() >= 150)
M.visible_message("[M]'s body starts convulsing!")
M.gib()
return
+ M.adjustCloneLoss(50)
var/mob/dead/observer/ghost = M.get_ghost()
if(ghost)
to_chat(ghost, "You are attempting to be revived with Strange Reagent. Return to your body if you want to be revived! (Verbs -> Ghost -> Re-enter corpse)")
@@ -639,11 +643,27 @@
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))
+ var/mob/living/carbon/human/H = M
+ 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
add_logs(M, M, "revived", object="strange reagent") //Yes, the logs say you revived yourself.
@@ -1003,4 +1023,4 @@
/datum/reagent/medicine/earthsblood/overdose_process(mob/living/M)
M.SetHallucinate(min(max(0, M.hallucination + 10), 50))
- M.adjustToxLoss(5 * REAGENTS_EFFECT_MULTIPLIER)
\ No newline at end of file
+ M.adjustToxLoss(5 * REAGENTS_EFFECT_MULTIPLIER)
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)