diff --git a/code/modules/mob/living/status_procs.dm b/code/modules/mob/living/status_procs.dm index e8a26a76528..a71b4712801 100644 --- a/code/modules/mob/living/status_procs.dm +++ b/code/modules/mob/living/status_procs.dm @@ -556,7 +556,7 @@ if(stat != DEAD) tod = null - +/// Induces fake death on a living mob. /mob/living/proc/fakedeath(source, silent = FALSE) if(stat == DEAD) return diff --git a/code/modules/reagents/chemistry/reagents.dm b/code/modules/reagents/chemistry/reagents.dm index ad1f0affbfa..11854fb06d5 100644 --- a/code/modules/reagents/chemistry/reagents.dm +++ b/code/modules/reagents/chemistry/reagents.dm @@ -40,7 +40,7 @@ GLOBAL_LIST_INIT(name2reagent, build_name2reagent()) var/datum/reagents/holder = null /// LIQUID, SOLID, GAS var/reagent_state = LIQUID - /// special data associated with this like viruses etc + /// Special data associated with the reagent that will be passed on upon transfer to a new holder. var/list/data /// increments everytime on_mob_life is called var/current_cycle = 0 diff --git a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm index 01ef3228a6b..1abba7c6719 100644 --- a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm @@ -225,31 +225,30 @@ toxpwr = 0.5 taste_description = "death" penetrates_skin = NONE - var/fakedeath_active = FALSE ph = 13 chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/reagent/toxin/zombiepowder/on_mob_metabolize(mob/living/L) - ..() - ADD_TRAIT(L, TRAIT_FAKEDEATH, type) - if(fakedeath_active) - L.fakedeath(type) - -/datum/reagent/toxin/zombiepowder/on_mob_end_metabolize(mob/living/L) - L.cure_fakedeath(type) - ..() - -/datum/reagent/toxin/zombiepowder/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume) +/datum/reagent/toxin/zombiepowder/on_mob_metabolize(mob/living/holder_mob) . = ..() - exposed_mob.adjustOxyLoss(0.5*REM, 0) - if(methods & INGEST) - var/datum/reagent/toxin/zombiepowder/zombiepowder = exposed_mob.reagents.has_reagent(/datum/reagent/toxin/zombiepowder) - if(istype(zombiepowder)) - zombiepowder.fakedeath_active = TRUE + holder_mob.adjustOxyLoss(0.5*REM, 0) + if(data?["method"] & INGEST) + holder_mob.fakedeath(type) + +/datum/reagent/toxin/zombiepowder/on_mob_end_metabolize(mob/living/holder_mob) + holder_mob.cure_fakedeath(type) + return ..() + +/datum/reagent/toxin/zombiepowder/on_transfer(atom/target_atom, methods, trans_volume) + . = ..() + var/datum/reagent/zombiepowder = target_atom.reagents.has_reagent(/datum/reagent/toxin/zombiepowder) + if(!zombiepowder || !(methods & INGEST)) + return + LAZYINITLIST(zombiepowder.data) + zombiepowder.data["method"] |= INGEST /datum/reagent/toxin/zombiepowder/on_mob_life(mob/living/M, delta_time, times_fired) ..() - if(fakedeath_active) + if(HAS_TRAIT(M, TRAIT_FAKEDEATH) && HAS_TRAIT(M, TRAIT_DEATHCOMA)) return TRUE switch(current_cycle) if(1 to 5) @@ -259,7 +258,6 @@ if(5 to 8) M.adjustStaminaLoss(40 * REM * delta_time, 0) if(9 to INFINITY) - fakedeath_active = TRUE M.fakedeath(type) /datum/reagent/toxin/ghoulpowder