diff --git a/code/game/objects/items/devices/scanners/health.dm b/code/game/objects/items/devices/scanners/health.dm
index 02a5304b8d..57ae2fd4dc 100644
--- a/code/game/objects/items/devices/scanners/health.dm
+++ b/code/game/objects/items/devices/scanners/health.dm
@@ -80,17 +80,14 @@
var/analyzed_results = ""
if(M.status_flags & FAKEDEATH)
OX = fake_oxy > 50 ? span_bold("[fake_oxy]") : fake_oxy
- dat += span_notice("Analyzing Results for [M]:")
- dat += "
"
- dat += span_notice("Overall Status: dead")
- dat += "
"
+ TX = 0 //This is a dead giveaway if they're using zombiepowder.
+ analyzed_results += "Analyzing Results for [M]:\n\t Overall Status: dead
"
else
analyzed_results += "Analyzing Results for [M]:\n\t Overall Status: [M.stat > 1 ? "dead" : "[round((M.health/M.getMaxHealth())*100) ]% healthy"]
"
analyzed_results += "\tKey: [span_cyan("Suffocation")]/[span_green("Toxin")]/[span_orange("Burns")]/[span_red("Brute")]
"
analyzed_results += "\tDamage Specifics: [span_cyan("[OX]")] - [span_green("[TX]")] - [span_orange("[BU]")] - [span_red("[BR]")]
"
analyzed_results += "Body Temperature: [M.bodytemperature-T0C]°C ([M.bodytemperature*1.8-459.67]°F)
"
- if(!(M.status_flags & FAKEDEATH))
- analyzed_results = span_notice(analyzed_results)
+ analyzed_results = span_notice(analyzed_results)
dat += analyzed_results
if(M.timeofdeath && (M.stat == DEAD || (M.status_flags & FAKEDEATH)))
dat += span_notice("Time of Death: [worldtime2stationtime(M.timeofdeath)]")
@@ -134,6 +131,7 @@
BR = M.getBruteLoss() > 50 ? "[span_red(span_bold("Severe anatomical damage detected"))]" : "Subject brute-force injury status O.K"
if(M.status_flags & FAKEDEATH)
OX = fake_oxy > 50 ? span_warning("Severe oxygen deprivation detected") : "Subject bloodstream oxygen level normal"
+ TX = 0 //This is a dead giveaway if they're using zombiepowder.
dat += "[OX] | [TX] | [BU] | [BR]
"
if(M.radiation)
if(advscan >= 2 && showadvscan == 1)
diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm
index b029e7ecae..ccc602fdd5 100644
--- a/code/game/objects/items/weapons/storage/storage.dm
+++ b/code/game/objects/items/weapons/storage/storage.dm
@@ -127,36 +127,37 @@
return
if (isliving(usr) || isobserver(usr))
+ var/mob/user = usr
- if (istype(usr.loc,/obj/mecha)) // stops inventory actions in a mech. why?
+ if(istype(user.loc,/obj/mecha)) // stops inventory actions in a mech. why?
return
- if(over_object == usr && Adjacent(usr)) // this must come before the screen objects only block
- src.open(usr)
+ if(over_object == user && Adjacent(user)) // this must come before the screen objects only block
+ open(user)
return
- if (!( istype(over_object, /atom/movable/screen) ))
+ if(!(istype(over_object, /atom/movable/screen)))
return ..()
//makes sure that the storage is equipped, so that we can't drag it into our hand from miles away.
//there's got to be a better way of doing this.
- if (!(src.loc == usr) || (src.loc && src.loc.loc == usr))
+ if(!(loc == user) || (loc && loc.loc == user))
return
- if (( usr.restrained() ) || ( usr.stat ))
+ if(user.restrained() || user.stat || user.is_paralyzed() || !user.incapacitated(INCAPACITATION_KNOCKOUT))
return
- if ((src.loc == usr) && !(istype(over_object, /atom/movable/screen)) && !usr.unEquip(src))
+ if((loc == user) && !(istype(over_object, /atom/movable/screen)) && !user.unEquip(src))
return
switch(over_object.name)
if("r_hand")
- usr.unEquip(src)
- usr.put_in_r_hand(src)
+ user.unEquip(src)
+ user.put_in_r_hand(src)
if("l_hand")
- usr.unEquip(src)
- usr.put_in_l_hand(src)
- src.add_fingerprint(usr)
+ user.unEquip(src)
+ user.put_in_l_hand(src)
+ add_fingerprint(user)
/obj/item/storage/click_alt(mob/user)
if(user in is_seeing)
diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm
index 48616c4743..560dee5afd 100644
--- a/code/game/turfs/turf.dm
+++ b/code/game/turfs/turf.dm
@@ -203,7 +203,7 @@
return
if(istype(O, /atom/movable/screen))
return
- if(user.restrained() || user.stat || user.stunned || user.paralysis || (!user.lying && !isrobot(user)) || LAZYLEN(user.grabbed_by))
+ if(user.restrained() || user.stat || user.stunned || user.paralysis || (!user.lying && !isrobot(user)) || LAZYLEN(user.grabbed_by) || user.is_paralyzed())
return
if((!(istype(O, /atom/movable)) || O.anchored || !Adjacent(user) || !Adjacent(O) || !user.Adjacent(O)))
return
diff --git a/code/modules/admin/health_scan.dm b/code/modules/admin/health_scan.dm
index 8d7d71d9bd..02b0a460c5 100644
--- a/code/modules/admin/health_scan.dm
+++ b/code/modules/admin/health_scan.dm
@@ -100,8 +100,7 @@
analyzed_results += "\tKey: [span_cyan("Suffocation")]/[span_green("Toxin")]/[span_orange("Burns")]/[span_red("Brute")]
"
analyzed_results += "\tDamage Specifics: [span_cyan("[OX]")] - [span_green("[TX]")] - [span_orange("[BU]")] - [span_red("[BR]")]
"
analyzed_results += "Body Temperature: [M.bodytemperature-T0C]°C ([M.bodytemperature*1.8-459.67]°F)
"
- if(!(M.status_flags & FAKEDEATH))
- analyzed_results = span_notice(analyzed_results)
+ analyzed_results = span_notice(analyzed_results)
dat += analyzed_results
if(M.timeofdeath && (M.stat == DEAD || (M.status_flags & FAKEDEATH)))
dat += span_notice("Time of Death: [worldtime2stationtime(M.timeofdeath)]")
diff --git a/code/modules/emotes/custom_emote.dm b/code/modules/emotes/custom_emote.dm
index 0262dcdf03..91086a8194 100644
--- a/code/modules/emotes/custom_emote.dm
+++ b/code/modules/emotes/custom_emote.dm
@@ -2,7 +2,7 @@
/// This is the custom_emote that you'll want to use if you want the mob to be able to input their emote.
/mob/proc/custom_emote(var/m_type = VISIBLE_MESSAGE, var/message, var/range = world.view, var/check_stat = TRUE)
- if((check_stat && (src && stat)) || (!use_me && usr == src))
+ if((check_stat && (src && stat)) || is_paralyzed() || (!use_me && usr == src))
to_chat(src, "You are unable to emote.")
return
@@ -16,7 +16,7 @@
/// This is the custom_emote that you'll want to use if you're forcing something to custom emote with no input from the mob.
/// By default, we have a visible message, our range is world.view, and we do NOT check the stat.
/mob/proc/automatic_custom_emote(var/m_type = VISIBLE_MESSAGE, var/message, var/range = world.view, var/check_stat = FALSE)
- if(check_stat && (src && stat))
+ if(check_stat && (src && stat) || is_paralyzed())
return
var/input = message
process_automatic_emote(m_type, message, input, range)
@@ -38,10 +38,6 @@
log_the_emote(m_type, message, input, range, runemessage)
-/mob/proc/format_the_emote(var/m_type = VISIBLE_MESSAGE, var/message, var/input, var/range = world.view)
-
-
-
/mob/proc/process_automatic_emote(var/m_type = VISIBLE_MESSAGE, var/message, var/input, var/range = world.view)
var/list/formatted
var/runemessage
diff --git a/code/modules/emotes/emote_mob.dm b/code/modules/emotes/emote_mob.dm
index 6fbfc475b6..71aff19251 100644
--- a/code/modules/emotes/emote_mob.dm
+++ b/code/modules/emotes/emote_mob.dm
@@ -18,6 +18,8 @@
// s-s-snowflake
if(src.stat == DEAD && act != "deathgasp")
return
+ if(is_paralyzed())
+ return
if(usr == src) //client-called emote
if (client && (client.prefs.muted & MUTE_IC))
diff --git a/code/modules/examine/examine.dm b/code/modules/examine/examine.dm
index 8f2bc0d24e..9c37ac3ba3 100644
--- a/code/modules/examine/examine.dm
+++ b/code/modules/examine/examine.dm
@@ -72,8 +72,8 @@
//Could be gone by the time they finally pick something
if(!A)
return 1
-
- face_atom(A)
+ if(!is_paralyzed())
+ face_atom(A)
var/list/results = A.examine(src)
if(!results || !results.len)
results = list("You were unable to examine that. Tell a developer!")
@@ -211,7 +211,7 @@
if(!B)
return
if(!isbelly(loc) && !istype(loc, /obj/item/holder) && !isAI(src))
- if(B.z == src.z)
+ if(B.z == src.z && !is_paralyzed())
face_atom(B)
var/list/results = B.examine(src)
if(!results || !results.len)
diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm
index 811a839ddd..b82963f1b0 100644
--- a/code/modules/mob/living/carbon/human/examine.dm
+++ b/code/modules/mob/living/carbon/human/examine.dm
@@ -284,10 +284,10 @@
if(mSmallsize in mutations)
msg += "[p_Theyre()] very short!"
- if (src.stat)
+ if (src.stat || (status_flags & FAKEDEATH))
msg += span_warning("[p_Theyre()] not responding to anything around [p_they()] and seems to be asleep.")
var/obj/item/organ/internal/lungs/L = internal_organs_by_name[O_LUNGS]
- if(((stat == 2 || src.losebreath) || !L) && get_dist(user, src) <= 3)
+ if(((stat == DEAD || losebreath || !L || (status_flags & FAKEDEATH)) && get_dist(user, src) <= 3))
msg += span_warning("[p_They()] [user.p_do()] not appear to be breathing.")
if(ishuman(user) && !user.stat && Adjacent(user))
user.visible_message(span_infoplain(span_bold("[user]") + " checks [src]'s pulse."), span_infoplain("You check [src]'s pulse."))
@@ -304,7 +304,7 @@
msg += span_warning("[p_Theyre()] on fire!.")
var/ssd_msg = species.get_ssd(src)
- if(ssd_msg && (!should_have_organ(O_BRAIN) || has_brain()) && stat != DEAD)
+ if(ssd_msg && (!should_have_organ(O_BRAIN) || has_brain()) && stat != DEAD && !(status_flags & FAKEDEATH))
if(!key)
msg += span_deadsay("[p_Theyre()] [ssd_msg]. It doesn't look like [p_theyre()] waking up anytime soon.")
else if(!client)
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index 92fe483ddb..358e5e8b01 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -1305,8 +1305,8 @@
var/fear_other = pick(fear_message_other)
visible_message(span_notice("\The [src][fear_other]"),span_warning("[fear_self]"))
- if(paralysis || sleeping)
- blinded = 1
+ if(sleeping)
+ blinded = TRUE
set_stat(UNCONSCIOUS)
animate_tail_reset()
adjustHalLoss(-3)
diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm
index 1c8bd80a21..dd23ac606f 100644
--- a/code/modules/mob/living/carbon/human/say.dm
+++ b/code/modules/mob/living/carbon/human/say.dm
@@ -134,7 +134,7 @@
return special_voice
/mob/living/carbon/human/handle_speech_problems(var/list/message_data)
- if(silent || (sdisabilities & MUTE))
+ if(silent || (sdisabilities & MUTE) || is_paralyzed())
message_data[1] = ""
. = 1
diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm
index b979d3750e..2acadff473 100644
--- a/code/modules/mob/living/life.dm
+++ b/code/modules/mob/living/life.dm
@@ -135,13 +135,8 @@
/mob/living/proc/handle_regular_status_updates()
updatehealth()
if(stat != DEAD)
- if(paralysis)
- set_stat(UNCONSCIOUS)
- else if (status_flags & FAKEDEATH)
- set_stat(UNCONSCIOUS)
- else
- set_stat(CONSCIOUS)
- return 1
+ set_stat(CONSCIOUS)
+ return TRUE
/mob/living/proc/handle_statuses()
handle_stunned()
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index 8ee97b930d..c5e921b62c 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -826,7 +826,7 @@
set name = "Resist"
set category = "IC.Game"
- if(!incapacitated(INCAPACITATION_KNOCKOUT) && (last_resist_time + RESIST_COOLDOWN < world.time))
+ if(!incapacitated(INCAPACITATION_KNOCKOUT) && !is_paralyzed() && (last_resist_time + RESIST_COOLDOWN < world.time))
last_resist_time = world.time
resist_grab()
if(!weakened)
@@ -1086,40 +1086,44 @@
/mob/living/update_canmove()
if(!resting && cannot_stand() && can_stand_overridden())
- lying = 0
- canmove = 1
+ lying = FALSE
+ canmove = TRUE
else
if(istype(buckled, /obj/vehicle))
var/obj/vehicle/V = buckled
if(is_physically_disabled())
- lying = 0
- canmove = 1
+ lying = FALSE
+ canmove = TRUE
if(!V.riding_datum) // If it has a riding datum, the datum handles moving the pixel_ vars.
pixel_y = V.mob_offset_y - 5
else
if(buckled.buckle_lying != -1)
lying = buckled.buckle_lying
- canmove = 1
+ canmove = TRUE
if(!V.riding_datum) // If it has a riding datum, the datum handles moving the pixel_ vars.
pixel_y = V.mob_offset_y
else if(buckled)
anchored = TRUE
- canmove = 1 //The line above already makes the chair not swooce away if the sitter presses a button. No need to incapacitate them as a criminally large amount of mechanics read this var as a type of stun.
+ canmove = TRUE //The line above already makes the chair not swooce away if the sitter presses a button. No need to incapacitate them as a criminally large amount of mechanics read this var as a type of stun.
if(istype(buckled))
if(buckled.buckle_lying != -1)
lying = buckled.buckle_lying
canmove = buckled.buckle_movable
if(buckled.buckle_movable)
anchored = FALSE
- canmove = 1
+ canmove = TRUE
else
lying = incapacitated(INCAPACITATION_KNOCKDOWN)
canmove = !incapacitated(INCAPACITATION_DISABLED)
if(incapacitated(INCAPACITATION_KNOCKOUT) || incapacitated(INCAPACITATION_STUNNED)) // Making sure we're in good condition to crawl
- canmove = 0
+ canmove = FALSE
else
- canmove = 1
+ canmove = TRUE
+
+ if(is_paralyzed())
+ lying = TRUE
+ canmove = FALSE
if(lying)
density = FALSE
diff --git a/code/modules/mob/living/status_indicators.dm b/code/modules/mob/living/status_indicators.dm
index bbb3f03268..8eaf07968f 100644
--- a/code/modules/mob/living/status_indicators.dm
+++ b/code/modules/mob/living/status_indicators.dm
@@ -47,7 +47,7 @@
if(!LAZYLEN(status_indicators))
return
- if(stat == DEAD)
+ if(stat == DEAD || (status_flags & FAKEDEATH))
return
// Now put them back on in the right spot.
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index 22fff66e04..e2c6c0c696 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -210,6 +210,9 @@
/mob/proc/is_deaf()
return ((sdisabilities & DEAF) || ear_deaf || incapacitated(INCAPACITATION_KNOCKOUT))
+/mob/proc/is_paralyzed()
+ return paralysis
+
/mob/proc/is_physically_disabled()
return incapacitated(INCAPACITATION_DISABLED)
@@ -217,13 +220,13 @@
return incapacitated(INCAPACITATION_KNOCKDOWN)
/mob/proc/incapacitated(var/incapacitation_flags = INCAPACITATION_DEFAULT)
- if ((incapacitation_flags & INCAPACITATION_STUNNED) && stunned)
+ if((incapacitation_flags & INCAPACITATION_STUNNED) && stunned)
return 1
- if ((incapacitation_flags & INCAPACITATION_FORCELYING) && (weakened || resting))
+ if((incapacitation_flags & INCAPACITATION_FORCELYING) && (weakened || resting))
return 1
- if ((incapacitation_flags & INCAPACITATION_KNOCKOUT) && (stat || paralysis || sleeping || (status_flags & FAKEDEATH)))
+ if((incapacitation_flags & INCAPACITATION_KNOCKOUT) && (stat || sleeping))
return 1
if((incapacitation_flags & INCAPACITATION_RESTRAINED) && restrained())
diff --git a/code/modules/pda/utilities.dm b/code/modules/pda/utilities.dm
index 5b39a458c9..366a5a374c 100644
--- a/code/modules/pda/utilities.dm
+++ b/code/modules/pda/utilities.dm
@@ -46,13 +46,20 @@
/datum/data/pda/utility/scanmode/medical/scan_mob(mob/living/C as mob, mob/living/user as mob)
C.visible_message(span_warning("[user] has analyzed [C]'s vitals!"))
-
user.show_message(span_notice("Analyzing Results for [C]:"))
- user.show_message(span_notice(" Overall Status: [C.stat > 1 ? "dead" : "[C.health - C.halloss]% healthy"]"), 1)
- user.show_message(span_notice(" Damage Specifics:") + " [(C.getOxyLoss() > 50) ? span_warning("[C.getOxyLoss()]") : C.getOxyLoss()]-\
- [(C.getToxLoss() > 50) ? span_warning("[C.getToxLoss()]") : C.getToxLoss()]-\
- [(C.getFireLoss() > 50) ? span_warning("[C.getFireLoss()]") : C.getFireLoss()]-\
- [(C.getBruteLoss() > 50) ? span_warning("[C.getBruteLoss()]") : C.getBruteLoss()]", 1)
+ if(C.status_flags & FAKEDEATH)
+ user.show_message(span_notice(" Overall Status: dead"))
+ var/fake_oxy = max(rand(1,40), C.getOxyLoss(), (300 - (C.getToxLoss() + C.getFireLoss() + C.getBruteLoss())))
+ var/OX = fake_oxy > 50 ? span_bold("[fake_oxy]") : fake_oxy //Easier to do this. All this needs consolidation, eventually.
+ user.show_message(span_notice(" Damage Specifics:") + " [OX]-0-\
+ [(C.getFireLoss() > 50) ? span_warning("[C.getFireLoss()]") : C.getFireLoss()]-\
+ [(C.getBruteLoss() > 50) ? span_warning("[C.getBruteLoss()]") : C.getBruteLoss()]", 1)
+ else
+ user.show_message(span_notice(" Overall Status: [C.stat > 1 ? "dead" : "[C.health - C.halloss]% healthy"]"), 1)
+ user.show_message(span_notice(" Damage Specifics:") + " [(C.getOxyLoss() > 50) ? span_warning("[C.getOxyLoss()]") : C.getOxyLoss()]-\
+ [(C.getToxLoss() > 50) ? span_warning("[C.getToxLoss()]") : C.getToxLoss()]-\
+ [(C.getFireLoss() > 50) ? span_warning("[C.getFireLoss()]") : C.getFireLoss()]-\
+ [(C.getBruteLoss() > 50) ? span_warning("[C.getBruteLoss()]") : C.getBruteLoss()]", 1)
user.show_message(span_notice(" Key: Suffocation/Toxin/Burns/Brute"), 1)
user.show_message(span_notice(" Body Temperature: [C.bodytemperature-T0C]°C ([C.bodytemperature*1.8-459.67]°F)"), 1)
if(C.tod && (C.stat == DEAD || (C.status_flags & FAKEDEATH)))
diff --git a/code/modules/reagents/reactions/instant/instant.dm b/code/modules/reagents/reactions/instant/instant.dm
index b0b6d2eeec..cf3b27a40a 100644
--- a/code/modules/reagents/reactions/instant/instant.dm
+++ b/code/modules/reagents/reactions/instant/instant.dm
@@ -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
diff --git a/code/modules/reagents/reagent_containers/glass_vr.dm b/code/modules/reagents/reagent_containers/glass_vr.dm
index 030ee4cf4e..e91ff238fc 100644
--- a/code/modules/reagents/reagent_containers/glass_vr.dm
+++ b/code/modules/reagents/reagent_containers/glass_vr.dm
@@ -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)
diff --git a/code/modules/reagents/reagent_containers/patch.dm b/code/modules/reagents/reagent_containers/patch.dm
index 3acb36a3c3..b93783f02c 100644
--- a/code/modules/reagents/reagent_containers/patch.dm
+++ b/code/modules/reagents/reagent_containers/patch.dm
@@ -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
diff --git a/code/modules/reagents/reagents/_reagents.dm b/code/modules/reagents/reagents/_reagents.dm
index cc29f092b8..2039cdb685 100644
--- a/code/modules/reagents/reagents/_reagents.dm
+++ b/code/modules/reagents/reagents/_reagents.dm
@@ -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.
diff --git a/code/modules/reagents/reagents/medicine.dm b/code/modules/reagents/reagents/medicine.dm
index f0668605de..298731cd37 100644
--- a/code/modules/reagents/reagents/medicine.dm
+++ b/code/modules/reagents/reagents/medicine.dm
@@ -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
diff --git a/code/modules/reagents/reagents/other.dm b/code/modules/reagents/reagents/other.dm
index 17a6224531..d6bde13c5c 100644
--- a/code/modules/reagents/reagents/other.dm
+++ b/code/modules/reagents/reagents/other.dm
@@ -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()
diff --git a/code/modules/reagents/reagents/toxins.dm b/code/modules/reagents/reagents/toxins.dm
index 250fa21a5a..f35c92fede 100644
--- a/code/modules/reagents/reagents/toxins.dm
+++ b/code/modules/reagents/reagents/toxins.dm
@@ -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
diff --git a/code/modules/vore/eating/living_vr.dm b/code/modules/vore/eating/living_vr.dm
index d7ae220ee3..9a69191d15 100644
--- a/code/modules/vore/eating/living_vr.dm
+++ b/code/modules/vore/eating/living_vr.dm
@@ -446,7 +446,7 @@
if(!istype(tasted))
return
- if(!checkClickCooldown() || incapacitated(INCAPACITATION_KNOCKOUT))
+ if(!checkClickCooldown() || incapacitated(INCAPACITATION_KNOCKOUT) || is_paralyzed())
return
setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
@@ -493,7 +493,7 @@
if(!istype(smelled))
return
- if(!checkClickCooldown() || incapacitated(INCAPACITATION_KNOCKOUT))
+ if(!checkClickCooldown() || incapacitated(INCAPACITATION_KNOCKOUT) || is_paralyzed())
return
setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
@@ -780,7 +780,7 @@
set category = "Abilities.General"
set desc = "Toggle your glowing on/off!"
- if(stat || paralysis || weakened || stunned || world.time < last_special)
+ if(stat || is_paralyzed() || weakened || stunned || world.time < last_special)
to_chat(src, span_warning("You can't do that in your current state."))
return
@@ -812,7 +812,7 @@
set category = "Abilities.Vore"
set desc = "Consume held garbage."
- if(stat || paralysis || weakened || stunned || world.time < last_special)
+ if(stat || is_paralyzed() || weakened || stunned || world.time < last_special)
to_chat(src, span_warning("You can't do that in your current state."))
return
@@ -1373,7 +1373,7 @@
set desc = "Transfer liquid from an organ to another or stomach, or into another person or container."
set popup_menu = FALSE
- if(!checkClickCooldown() || incapacitated(INCAPACITATION_KNOCKOUT))
+ if(!checkClickCooldown() || incapacitated(INCAPACITATION_KNOCKOUT) || is_paralyzed())
return FALSE
var/mob/living/user = src