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