Patch fix, Neurotoxins, and Paralysis (#18853)

* Makes zombie powder and lich powder somewhat more useful

Also makes the scanners act mostly the same with fakedeath

* Makes patches actually apply via touch

I killed myself during testing with bicaridaze

* Make things respect fakedeath

* Some more fixes

* Makes paralysis apply in more places

Also makes paralysis  no longer make you unable to see emotes.

Makes it so you can not /me, but you can /subtle while paralyzed

* Adds another method for zombie powder mix
This commit is contained in:
Cameron Lennox
2025-12-10 10:17:38 -05:00
committed by GitHub
parent acb8cabd8f
commit dfe47e084f
23 changed files with 101 additions and 83 deletions
@@ -397,6 +397,12 @@
required_reagents = list(REAGENT_ID_CARPOTOXIN = 5, REAGENT_ID_STOXIN = 5, REAGENT_ID_COPPER = 5)
result_amount = 2
/decl/chemical_reaction/instant/zombiepowder/alt
name = REAGENT_ZOMBIEPOWDER + "_alternative_mix"
id = REAGENT_ID_ZOMBIEPOWDER + "_alternative_mix"
required_reagents = list(REAGENT_ID_POTASSIUMCHLOROPHORIDE = 5, REAGENT_ID_STOXIN = 5, REAGENT_ID_CHLORALHYDRATE = 5, REAGENT_ID_MERCURY = 5)
result_amount = 2
/decl/chemical_reaction/instant/carpotoxin
name = REAGENT_CARPOTOXIN
id = REAGENT_ID_CARPOTOXIN
@@ -87,3 +87,9 @@
desc = "A measuring cup."
icon_state = "measure_cup"
item_state = "measure_cup"
/obj/item/reagent_containers/glass/beaker/lichpowder
prefill = list(REAGENT_ID_LICHPOWDER = 50)
/obj/item/reagent_containers/glass/beaker/zombiepowder
prefill = list(REAGENT_ID_ZOMBIEPOWDER = 50)
@@ -40,7 +40,7 @@
to_chat(H, span_notice("\The [src] is placed on your [affecting]."))
M.drop_from_inventory(src) //icon update
if(reagents.total_volume)
reagents.trans_to_mob(M, reagents.total_volume, CHEM_BLOOD) //CHEM_TOUCH
reagents.trans_to_mob(M, reagents.total_volume, CHEM_TOUCH)
qdel(src)
return 1
@@ -74,7 +74,7 @@
M.drop_from_inventory(src) //icon update
if(reagents.total_volume)
reagents.trans_to_mob(M, reagents.total_volume, CHEM_BLOOD) //CHEM_TOUCH
reagents.trans_to_mob(M, reagents.total_volume, CHEM_TOUCH) //CHEM_TOUCH
qdel(src)
return 1
@@ -195,6 +195,7 @@
return
/datum/reagent/proc/affect_touch(var/mob/living/carbon/M, var/alien, var/removed)
M.bloodstr.add_reagent(id, removed * 0.25) //Medications that are dermal compatible use affect_touch. Those that aren't apply the reagent to the bloodstream at 25% efficiency.
return
/datum/reagent/proc/overdose(var/mob/living/carbon/M, var/alien, var/removed) // Overdose effect.
@@ -1289,7 +1289,6 @@
affect_blood(M, alien, removed * 0.8)
/datum/reagent/spacomycaze/affect_touch(var/mob/living/carbon/M, var/alien, var/removed)
..()
if(alien == IS_SLIME)
if(volume <= 0.1 && data != -1)
data = -1
-3
View File
@@ -353,15 +353,12 @@
// Same as if you boop it wrong. It touches you, you die
/datum/reagent/supermatter/affect_touch(mob/living/carbon/M, alien, removed)
. = ..()
M.ash()
/datum/reagent/supermatter/affect_ingest(mob/living/carbon/M, alien, removed)
. = ..()
M.ash()
/datum/reagent/supermatter/affect_blood(mob/living/carbon/M, alien, removed)
. = ..()
M.ash()
+13 -9
View File
@@ -364,6 +364,7 @@
metabolism = REM
strength = 3
mrate_static = TRUE
scannable = FALSE
supply_conversion_value = REFINERYEXPORT_VALUE_HIGHREFINED
industrial_use = REFINERYEXPORT_REASON_MEDSCI
@@ -371,10 +372,12 @@
..()
if(alien == IS_DIONA)
return
if(!(M.status_flags & FAKEDEATH))
M.emote("deathgasp")
M.status_flags |= FAKEDEATH
M.adjustOxyLoss(3 * removed)
M.Weaken(10)
M.adjustOxyLoss(1 * removed)
M.silent = max(M.silent, 10)
M.paralysis = max(M.paralysis, 10)
M.tod = stationtime2text()
/datum/reagent/toxin/zombiepowder/Destroy()
@@ -383,32 +386,33 @@
M.status_flags &= ~FAKEDEATH
return ..()
/datum/reagent/toxin/lichpowder
/datum/reagent/lichpowder
name = REAGENT_LICHPOWDER
id = REAGENT_ID_LICHPOWDER
description = "A stablized nerve agent that puts the subject into a strange state of un-death."
reagent_state = SOLID
color = "#666666"
metabolism = REM * 0.75
strength = 2
mrate_static = TRUE
scannable = FALSE
supply_conversion_value = REFINERYEXPORT_VALUE_MASSINDUSTRY
industrial_use = REFINERYEXPORT_REASON_MEDSCI
/datum/reagent/toxin/lichpowder/affect_touch(var/mob/living/carbon/M, var/alien, var/removed)
..()
/datum/reagent/lichpowder/affect_touch(var/mob/living/carbon/M, var/alien, var/removed)
if(alien == IS_DIONA)
return
if(!(M.status_flags & FAKEDEATH))
M.emote("deathgasp")
M.status_flags |= FAKEDEATH
M.adjustOxyLoss(1 * removed)
M.silent = max(M.silent, 10)
M.paralysis = max(M.paralysis, 10)
M.tod = stationtime2text()
if(prob(1))
if(prob(0.1))
M.visible_message("[M] wheezes.", "You wheeze sharply... it's cold.")
M.bodytemperature = max(M.bodytemperature - 10 * TEMPERATURE_DAMAGE_COEFFICIENT, T0C - 10)
/datum/reagent/toxin/lichpowder/Destroy()
/datum/reagent/lichpowder/Destroy()
if(holder && holder.my_atom && ismob(holder.my_atom))
var/mob/M = holder.my_atom
M.status_flags &= ~FAKEDEATH