From dd8d13d8bcc6f1fbd6bcdd534a044f7d30c800d7 Mon Sep 17 00:00:00 2001 From: carlarctg <53100513+carlarctg@users.noreply.github.com> Date: Mon, 11 Sep 2023 17:44:31 -0300 Subject: [PATCH] Several common 'household' reagents can be used as improvised medicine treatment. Updated first aid analyzer information. (#77746) ## About The Pull Request Several common 'household' reagents can be used as improvised medicine treatment. Drinking tea will help mend (non-bone) wounds over time. Flour and corn starch may be splashed onto wounds to help dry them up, though they'll have a negative effect on burn wounds. Added a new reagent, saltwater, made by combining table salt with water. Table salt and saltwater can be splashed onto wounds as well, reducing bleeding and improving sanitization and disinfection significantly. However, the coarse undiluted salt will irritate the wounds, reducing clot rate and flesh healing, and both of the reagents will increase a burn wound's infestation rate. Altered Table Salt's recipe to just need sodium and chloride. Changed the recipe of Pentetic Acid and Heparin to need table salt (sodium x chloride) and thus slightly altered the total output of those reagents (pentacid went from 5u per reaction to 4u, heparin 4u->3u) Saline-Glucose Solution now needs 2u of saltwater and 1u of sugar, meaning the overall recipe should be completely unchanged in practice. Contact me on discord if any issues arise from these chemical changes! First aid analyzers now give easy-to-understand direct information, with the specific recommended treatments bolded in the analysis text. They also have a 'unique' extra bit of info, telling you about improvised ways to remedy your wound. ## Why It's Good For The Game Wounds have a very poor amount of interaction with the rest of the game and have not had much added to them post-merge, especially in 'improvised' ways to help Not Die to a wound while you crawl your way to a emergency medkit or medbay. I researched info on this and found some interesting ideas - some of them I'll have to leave for later because this PR kept growing out of scope (Improvised bone gel, ice on wounds which turned into wound temperature mechanics, crutches, a 'suture item' component refactor...) As for what this actually does to benefit the game, it allows more dynamic wound Gameplay as people use first aid analyzers to get information on treatment when medbay blows up, helps them stabilize by splashing flour onto themselves before looking for some actual treatment, helps traitors realize how they can self-treat many crippling wounds (at risk, of course). It expands treatment options to things beside medkits and medbay, but always does so in ways that have downsides that make them not ideal as _treatment_, and more beneficial as stabilizing before seeking true professional help. This thus significantly increases the rather shallow depth of wounds as a system to interact with. > Several common 'household' reagents can be used as improvised medicine treatment. From what I could tell by looking at several sources for each 'realistic' treatment, these are indeed semi-reasonable things that are done to wounds by some people as household treatment. It goes without saying that you should **not do any of these things in real life** without consulting a doctor unless your blood is also spilling out by the gallon into the floor. All these 'realistic treatments' have drastic downsides and are meant for the short-term only. Except the tea. > Drinking tea will help mend (non-bone) wounds over time. Tea is healthy, we all know that. > Flour and corn starch may be splashed onto wounds to help dry them up, though they'll have a negative effect on burn wounds. Flour and apparently starch dries wounds up but risks infection. That's not a thing for blood wounds yet but oh well. > Table salt and saltwater can be splashed onto wounds as well, reducing bleeding and improving sanitization and disinfection significantly. However, the coarse undiluted salt will irritate the wounds, reducing clot rate and flesh healing, and both of the reagents will increase a burn wound's infestation rate. Salt kills bacteria via osmosis, but it also kills your own cells, and some bacteria like salt. > Added a new reagent, saltwater, made by combining table salt with water. > Altered Table Salt's recipe to just need sodium and chloride. Changed the recipe of Pentetic Acid and Heparin to need table salt (sodium x chloride) and thus slightly altered the total output of those reagents (pentacid went from 5u per reaction to 4u, heparin 4u->3u) > Saline-Glucose Solution now needs 2u of saltwater and 1u of sugar, meaning the overall recipe should be completely unchanged in practice. Contact me on discord if any issues arise from these chemical changes! I wish I hadn't had to mess with reagents like this, but I needed to because just adding mixing salt and water caused the saline glucose recipe to basically split itself into half saltwater half glucose. I removed the water requirement for table salt (Why did it even have that, salt ain't wet bro?), made saline-glucose need 2u saltwater and 1u sugar, and altered relevant recipes so they didn't also cause unwanted table salt to react from their sodium and chloride ingredients. A happy side-effect is that saline glucose solution is even easier to make now as an improvised chem by mixing salt, water, and sugar, which fits pretty perfectly (especially as a temporary blood substitute) > First aid analyzers now give easy-to-understand direct information, with the specific recommended treatments bolded in the analysis text. They also have a 'unique' extra bit of info, telling you about improvised ways to remedy your wound. You might notice that as the wounds get more serious the text gets more direct and concise and reluctantly hands out more and more improvised treatment options, so that's fun. As for the improvised section itself, it helps people be actually aware of these ways to help treat themselves rather than delegating it to hyper-gamer knowledge. The bolded treatment bit is pretty neat and means your eyes can inmediately focus on what you can do to save yourself - very useful if you have a weeping avulsion and no bandages. ## Changelog :cl: add: Several common 'household' reagents can be used as improvised medicine treatment. add: Drinking tea will help mend (non-bone) wounds over time. add: Flour and corn starch may be splashed onto wounds to help dry them up, though they'll have a negative effect on burn wounds. add: Added a new reagent, saltwater, made by combining table salt with water. add: Table salt and saltwater can be splashed onto wounds as well, reducing bleeding and improving sanitization and disinfection significantly. However, the coarse undiluted salt will irritate the wounds, reducing clot rate and flesh healing, and both of the reagents will increase a burn wound's infestation rate. add: Altered Table Salt's recipe to just need sodium and chloride. Changed the recipe of Pentetic Acid and Heparin to need table salt (sodium x chloride) and thus slightly altered the total output of those reagents (pentacid went from 5u per reaction to 4u, heparin 4u->3u) add: Saline-Glucose Solution now needs 2u of saltwater and 1u of sugar, meaning the overall recipe should be completely unchanged in practice. Contact me on discord if any issues arise from these chemical changes! qol: First aid analyzers now give easy-to-understand direct information, with the specific recommended treatments bolded in the analysis text. They also have a 'unique' extra bit of info, telling you about improvised ways to remedy your wound. /:cl: --------- Co-authored-by: san7890 Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> --- code/__DEFINES/maths.dm | 3 + code/__DEFINES/reagents.dm | 2 + code/datums/wounds/_wounds.dm | 25 +++-- code/datums/wounds/bones.dm | 13 +++ code/datums/wounds/burns.dm | 38 +++++--- code/datums/wounds/pierce.dm | 13 ++- code/datums/wounds/slash.dm | 13 ++- .../items/devices/scanners/health_analyzer.dm | 15 ++- .../recipes/drinks/drinks_alcoholic.dm | 2 +- .../food_and_drinks/recipes/soup_mixtures.dm | 14 +-- .../recipes/tablecraft/recipes_misc.dm | 3 +- code/modules/reagents/chemistry/reagents.dm | 4 + .../reagents/drinks/drink_reagents.dm | 29 ++++++ .../chemistry/reagents/food_reagents.dm | 96 ++++++++++++++++++- .../chemistry/reagents/medicine_reagents.dm | 6 +- .../chemistry/reagents/other_reagents.dm | 65 ++++++++++++- .../reagents/chemistry/recipes/medicine.dm | 6 +- .../reagents/chemistry/recipes/others.dm | 9 +- .../reagents/chemistry/recipes/toxins.dm | 4 +- code/modules/surgery/bodyparts/wounds.dm | 2 +- 20 files changed, 305 insertions(+), 57 deletions(-) diff --git a/code/__DEFINES/maths.dm b/code/__DEFINES/maths.dm index c40f3c4f59c..3f3d548d6ac 100644 --- a/code/__DEFINES/maths.dm +++ b/code/__DEFINES/maths.dm @@ -240,6 +240,9 @@ #define SPT_PROB(prob_per_second_percent, seconds_per_tick) (prob(100*SPT_PROB_RATE((prob_per_second_percent)/100, (seconds_per_tick)))) // ) +// This value per these many units. Very unnecessary but helpful for readability (For example wanting 30 units of synthflesh to heal 50 damage - VALUE_PER(50, 30)) +#define VALUE_PER(value, per) (value / per) + #define GET_TRUE_DIST(a, b) (a == null || b == null) ? -1 : max(abs(a.x -b.x), abs(a.y-b.y), abs(a.z-b.z)) //We used to use linear regression to approximate the answer, but Mloc realized this was actually faster. diff --git a/code/__DEFINES/reagents.dm b/code/__DEFINES/reagents.dm index 7bee2b1040b..1118a8f372b 100644 --- a/code/__DEFINES/reagents.dm +++ b/code/__DEFINES/reagents.dm @@ -115,6 +115,8 @@ #define REAGENT_NO_RANDOM_RECIPE (1<<7) ///Does this reagent clean things? #define REAGENT_CLEANS (1<<8) +///Does this reagent affect wounds? Used to check if some procs should be ran. +#define REAGENT_AFFECTS_WOUNDS (1<<9) //Chemical reaction flags, for determining reaction specialties ///Convert into impure/pure on reaction completion diff --git a/code/datums/wounds/_wounds.dm b/code/datums/wounds/_wounds.dm index 66caa2a4520..7bd9e0aad37 100644 --- a/code/datums/wounds/_wounds.dm +++ b/code/datums/wounds/_wounds.dm @@ -31,6 +31,14 @@ /// What the limb looks like on a cursory examine var/examine_desc = "is badly hurt" + /// Simple description, shortened for clarity if defined. Otherwise just takes the normal desc in the analyzer proc. + var/simple_desc + /// Simple analyzer's wound description, which focuses less on the clinical aspect of the wound and more on easily readable treatment instructions. + var/simple_treat_text = "Go to medbay idiot" + /// Improvised remedies indicated by the first aid analyzer only. + var/homemade_treat_text = "Remember to drink lots of water!" + + /// If this wound can generate a scar. var/can_scar = TRUE @@ -66,7 +74,7 @@ /// Using this limb in a do_after interaction will multiply the length by this duration (arms) var/interaction_efficiency_penalty = 1 /// Incoming damage on this limb will be multiplied by this, to simulate tenderness and vulnerability (mostly burns). - var/damage_mulitplier_penalty = 1 + var/damage_multiplier_penalty = 1 /// If set and this wound is applied to a leg, we take this many deciseconds extra per step on this leg var/limp_slowdown /// If this wound has a limp_slowdown and is applied to a leg, it has this chance to limp each step @@ -547,7 +555,7 @@ return base_xadone_progress_to_qdel * severity /// When synthflesh is applied to the victim, we call this. No sense in setting up an entire chem reaction system for wounds when we only care for a few chems. Probably will change in the future -/datum/wound/proc/on_synthflesh(power) +/datum/wound/proc/on_synthflesh(reac_volume) return /// Called when the patient is undergoing stasis, so that having fully treated a wound doesn't make you sit there helplessly until you think to unbuckle them @@ -641,18 +649,21 @@ return "[desc]." /datum/wound/proc/get_scanner_description(mob/user) - return "Type: [name]\nSeverity: [severity_text()]\nDescription: [desc]\nRecommended Treatment: [treat_text]" + return "Type: [name]\nSeverity: [severity_text(simple = FALSE)]\nDescription: [desc]\nRecommended Treatment: [treat_text]" -/datum/wound/proc/severity_text() +/datum/wound/proc/get_simple_scanner_description(mob/user) + return "[name] detected!\nRisk: [severity_text(simple = TRUE)]\nDescription: [simple_desc ? simple_desc : desc]\nTreatment Guide: [simple_treat_text]\nHomemade Remedies: [homemade_treat_text]" + +/datum/wound/proc/severity_text(simple = FALSE) switch(severity) if(WOUND_SEVERITY_TRIVIAL) return "Trivial" if(WOUND_SEVERITY_MODERATE) - return "Moderate" + return "Moderate" + (simple ? "!" : "") if(WOUND_SEVERITY_SEVERE) - return "Severe" + return "Severe" + (simple ? "!!" : "") if(WOUND_SEVERITY_CRITICAL) - return "Critical" + return "Critical" + (simple ? "!!!" : "") /// Returns TRUE if our limb is the head or chest, FALSE otherwise. /// Essential in the sense of "we cannot live without it". diff --git a/code/datums/wounds/bones.dm b/code/datums/wounds/bones.dm index 6a9d1e237f3..4300d27d5b0 100644 --- a/code/datums/wounds/bones.dm +++ b/code/datums/wounds/bones.dm @@ -198,6 +198,10 @@ status_effect_type = /datum/status_effect/wound/blunt/bone/moderate scar_keyword = "dislocate" + simple_desc = "Patient's bone has been dislocated, causing limping or reduced dexterity." + simple_treat_text = "Bandaging the wound will reduce its impact until treated with a bonesetter. Most commonly, it is treated by aggressively grabbing someone and helpfully wrenching the limb in place, though there's room for malfeasance when doing this." + homemade_treat_text = "Besides bandaging and wrenching, bone setters can be printed in lathes and utilized on oneself at the cost of great pain. As a last resort, crushing the patient with a firelock has sometimes been noted to fix their dislocated limb." + /datum/wound_pregen_data/bone/dislocate abstract = FALSE @@ -333,6 +337,11 @@ wound_flags = (ACCEPTS_GAUZE | MANGLES_INTERIOR) regen_ticks_needed = 120 // ticks every 2 seconds, 240 seconds, so roughly 4 minutes default + simple_desc = "Patient's bone has cracked in the middle, drastically reducing limb functionality." + simple_treat_text = "Bandaging the wound will reduce its impact until surgically treated with bone gel and surgical tape." + homemade_treat_text = "Bone gel and surgical tape may be applied directly to the wound, though this is quite difficult for most people to do so individually unless they've dosed themselves with one or more painkillers (Morphine and Miner's Salve have been known to help)" + + /datum/wound_pregen_data/bone/hairline abstract = FALSE @@ -364,6 +373,10 @@ wound_flags = (ACCEPTS_GAUZE | MANGLES_INTERIOR) regen_ticks_needed = 240 // ticks every 2 seconds, 480 seconds, so roughly 8 minutes default + simple_desc = "Patient's bones have effectively shattered completely, causing total immobilization of the limb." + simple_treat_text = "Bandaging the wound will slightly reduce its impact until surgically treated with bone gel and surgical tape." + homemade_treat_text = "Although this is extremely difficult and slow to function, Bone gel and surgical tape may be applied directly to the wound, though this is nigh-impossible for most people to do so individually unless they've dosed themselves with one or more painkillers (Morphine and Miner's Salve have been known to help)" + /datum/wound_pregen_data/bone/compound abstract = FALSE diff --git a/code/datums/wounds/burns.dm b/code/datums/wounds/burns.dm index 524cc4158a4..51cf0e5ac91 100644 --- a/code/datums/wounds/burns.dm +++ b/code/datums/wounds/burns.dm @@ -47,14 +47,12 @@ victim.visible_message(span_danger("The infection on the remnants of [victim]'s [limb.plaintext_zone] shift and bubble nauseatingly!"), span_warning("You can feel the infection on the remnants of your [limb.plaintext_zone] coursing through your veins!"), vision_distance = COMBAT_MESSAGE_RANGE) return - if(victim.reagents) - if(HAS_TRAIT(victim, TRAIT_VIRUS_RESISTANCE)) - sanitization += 0.9 - if(victim.reagents.has_reagent(/datum/reagent/space_cleaner/sterilizine/)) - sanitization += 0.9 - if(victim.reagents.has_reagent(/datum/reagent/medicine/mine_salve)) - sanitization += 0.3 - flesh_healing += 0.5 + for(var/datum/reagent/reagent as anything in victim.reagents.reagent_list) + if(reagent.chemical_flags & REAGENT_AFFECTS_WOUNDS) + reagent.on_burn_wound_processing() + + if(HAS_TRAIT(victim, TRAIT_VIRUS_RESISTANCE)) + sanitization += 0.9 if(limb.current_gauze) limb.seep_gauze(WOUND_BURN_SANITIZATION_RATE * seconds_per_tick) @@ -262,8 +260,8 @@ if(sanitization > 0) infestation = max(infestation - (0.1 * WOUND_BURN_SANITIZATION_RATE * seconds_per_tick), 0) -/datum/wound/burn/flesh/on_synthflesh(amount) - flesh_healing += amount * 0.5 // 20u patch will heal 10 flesh standard +/datum/wound/burn/flesh/on_synthflesh(reac_volume) + flesh_healing += reac_volume * 0.5 // 20u patch will heal 10 flesh standard /datum/wound_pregen_data/flesh_burn abstract = TRUE @@ -284,12 +282,16 @@ examine_desc = "is badly burned and breaking out in blisters" occur_text = "breaks out with violent red burns" severity = WOUND_SEVERITY_MODERATE - damage_mulitplier_penalty = 1.1 + damage_multiplier_penalty = 1.1 threshold_penalty = 30 // burns cause significant decrease in limb integrity compared to other wounds status_effect_type = /datum/status_effect/wound/burn/flesh/moderate flesh_damage = 5 scar_keyword = "burnmoderate" + simple_desc = "Patient's skin is burned, weakening the limb and multiplying percieved damage!" + simple_treat_text = "Ointment will speed up recovery, as will regenerative mesh. Risk of infection is negligible." + homemade_treat_text = "Healthy tea will speed up recovery. Salt, or preferably a salt-water mixture, will sanitize the wound, but the former will cause skin irritation, increasing the risk of infection." + /datum/wound_pregen_data/flesh_burn/second_degree abstract = FALSE @@ -304,7 +306,7 @@ examine_desc = "appears seriously charred, with aggressive red splotches" occur_text = "chars rapidly, exposing ruined tissue and spreading angry red burns" severity = WOUND_SEVERITY_SEVERE - damage_mulitplier_penalty = 1.2 + damage_multiplier_penalty = 1.2 threshold_penalty = 40 status_effect_type = /datum/status_effect/wound/burn/flesh/severe treatable_by = list(/obj/item/flashlight/pen/paramedic, /obj/item/stack/medical/ointment, /obj/item/stack/medical/mesh) @@ -312,6 +314,10 @@ flesh_damage = 12.5 scar_keyword = "burnsevere" + simple_desc = "Patient's skin is badly burned, significantly weakening the limb and compounding further damage!!" + simple_treat_text = "Bandages will speed up recovery, as will ointment or regenerative mesh. Spaceacilin, sterilizine, and 'Miner's Salve' will help with infection." + homemade_treat_text = "Healthy tea will speed up recovery. Salt, or preferably a salt-water mixture, will sanitize the wound, but the former especially will cause skin irritation and dehydration, speeding up infection. Space Cleaner can be used as disinfectant in a pinch." + /datum/wound_pregen_data/flesh_burn/third_degree abstract = FALSE @@ -326,7 +332,7 @@ examine_desc = "is a ruined mess of blanched bone, melted fat, and charred tissue" occur_text = "vaporizes as flesh, bone, and fat melt together in a horrifying mess" severity = WOUND_SEVERITY_CRITICAL - damage_mulitplier_penalty = 1.3 + damage_multiplier_penalty = 1.3 sound_effect = 'sound/effects/wounds/sizzle2.ogg' threshold_penalty = 80 status_effect_type = /datum/status_effect/wound/burn/flesh/critical @@ -335,6 +341,10 @@ flesh_damage = 20 scar_keyword = "burncritical" + simple_desc = "Patient's skin is destroyed and tissue charred, leaving the limb with almost no integrity and a drastic chance of infection!!!" + simple_treat_text = "Immediately bandage the wound and treat it with ointment or regenerative mesh. Spaceacilin, sterilizine, or 'Miner's Salve' will stave off infection. Seek professional care immediately, before sepsis sets in and the wound becomes untreatable." + homemade_treat_text = "Healthy tea will help with recovery. A salt-water mixture, topically applied, might help stave off infection in the short term, but pure table salt is NOT recommended. Space Cleaner can be used as disinfectant in a pinch." + /datum/wound_pregen_data/flesh_burn/fourth_degree abstract = FALSE @@ -349,6 +359,8 @@ examine_desc = "appears to have holy symbols painfully branded into their flesh, leaving severe burns." occur_text = "chars rapidly into a strange pattern of holy symbols, burned into the flesh." + simple_desc = "Patient's skin has had strange markings burned onto it, significantly weakening the limb and compounding further damage!!" + /datum/wound_pregen_data/flesh_burn/third_degree/holy abstract = FALSE can_be_randomly_generated = FALSE diff --git a/code/datums/wounds/pierce.dm b/code/datums/wounds/pierce.dm index 6c4e75d15a7..bcbc35079f1 100644 --- a/code/datums/wounds/pierce.dm +++ b/code/datums/wounds/pierce.dm @@ -107,9 +107,9 @@ if (limb) // parent can cause us to be removed, so its reasonable to check if we're still applied adjust_blood_flow(-0.03 * power) // i think it's like a minimum of 3 power, so .09 blood_flow reduction per tick is pretty good for 0 effort -/datum/wound/pierce/bleed/on_synthflesh(power) +/datum/wound/pierce/bleed/on_synthflesh(reac_volume) . = ..() - adjust_blood_flow(-0.025 * power) // 20u * 0.05 = -1 blood flow, less than with slashes but still good considering smaller bleed rates + adjust_blood_flow(-0.025 * reac_volume) // 20u * 0.05 = -1 blood flow, less than with slashes but still good considering smaller bleed rates /// If someone is using a suture to close this puncture /datum/wound/pierce/bleed/proc/suture(obj/item/stack/medical/suture/I, mob/user) @@ -193,6 +193,9 @@ status_effect_type = /datum/status_effect/wound/pierce/moderate scar_keyword = "piercemoderate" + simple_treat_text = "Bandaging the wound will reduce blood loss, help the wound close by itself quicker, and speed up the blood recovery period. The wound itself can be slowly sutured shut." + homemade_treat_text = "Tea stimulates the body's natural healing systems, slightly fastening clotting. The wound itself can be rinsed off on a sink or shower as well. Other remedies are unnecessary." + /datum/wound_pregen_data/flesh_pierce/breakage abstract = FALSE @@ -221,6 +224,9 @@ status_effect_type = /datum/status_effect/wound/pierce/severe scar_keyword = "piercesevere" + simple_treat_text = "Bandaging the wound is essential, and will reduce blood loss. Afterwards, the wound can be sutured shut, preferably while the patient is resting and/or grasping their wound." + homemade_treat_text = "Bed sheets can be ripped up to make makeshift gauze. Flour, table salt, or salt mixed with water can be applied directly to stem the flow, though unmixed salt will irritate the skin and worsen natural healing. Resting and grabbing your wound will also reduce bleeding." + /datum/wound_pregen_data/flesh_pierce/open_puncture abstract = FALSE @@ -249,6 +255,9 @@ scar_keyword = "piercecritical" wound_flags = (ACCEPTS_GAUZE | MANGLES_EXTERIOR | CAN_BE_GRASPED) + simple_treat_text = "Bandaging the wound is of utmost importance, as is seeking direct medical attention - Death will ensue if treatment is delayed whatsoever, with lack of oxygen killing the patient, thus Food, Iron, and saline solution is always recommended after treatment. This wound will not naturally seal itself." + homemade_treat_text = "Bed sheets can be ripped up to make makeshift gauze. Flour, salt, and saltwater topically applied will help. Dropping to the ground and grabbing your wound will reduce blood flow." + /datum/wound_pregen_data/flesh_pierce/cavity abstract = FALSE diff --git a/code/datums/wounds/slash.dm b/code/datums/wounds/slash.dm index 6f7ec3017b8..4475d95f508 100644 --- a/code/datums/wounds/slash.dm +++ b/code/datums/wounds/slash.dm @@ -233,9 +233,9 @@ if (limb) // parent can cause us to be removed, so its reasonable to check if we're still applied adjust_blood_flow(-0.03 * power) // i think it's like a minimum of 3 power, so .09 blood_flow reduction per tick is pretty good for 0 effort -/datum/wound/slash/flesh/on_synthflesh(power) +/datum/wound/slash/flesh/on_synthflesh(reac_volume) . = ..() - adjust_blood_flow(-0.075 * power) // 20u * 0.075 = -1.5 blood flow, pretty good for how little effort it is + adjust_blood_flow(-0.075 * reac_volume) // 20u * 0.075 = -1.5 blood flow, pretty good for how little effort it is /// If someone's putting a laser gun up to our cut to cauterize it /datum/wound/slash/flesh/proc/las_cauterize(obj/item/gun/energy/laser/lasgun, mob/user) @@ -328,6 +328,9 @@ status_effect_type = /datum/status_effect/wound/slash/flesh/moderate scar_keyword = "slashmoderate" + simple_treat_text = "Bandaging the wound will reduce blood loss, help the wound close by itself quicker, and speed up the blood recovery period. The wound itself can be slowly sutured shut." + homemade_treat_text = "Tea stimulates the body's natural healing systems, slightly fastening clotting. The wound itself can be rinsed off on a sink or shower as well. Other remedies are unnecessary." + /datum/wound/slash/flesh/moderate/update_descriptions() if(!limb.can_bleed()) occur_text = "is cut open" @@ -355,6 +358,9 @@ status_effect_type = /datum/status_effect/wound/slash/flesh/severe scar_keyword = "slashsevere" + simple_treat_text = "Bandaging the wound is essential, and will reduce blood loss. Afterwards, the wound can be sutured shut, preferably while the patient is resting and/or grasping their wound." + homemade_treat_text = "Bed sheets can be ripped up to make makeshift gauze. Flour, table salt, or salt mixed with water can be applied directly to stem the flow, though unmixed salt will irritate the skin and worsen natural healing. Resting and grabbing your wound will also reduce bleeding." + /datum/wound_pregen_data/flesh_slash/laceration abstract = FALSE @@ -382,6 +388,8 @@ status_effect_type = /datum/status_effect/wound/slash/flesh/critical scar_keyword = "slashcritical" wound_flags = (ACCEPTS_GAUZE | MANGLES_EXTERIOR | CAN_BE_GRASPED) + simple_treat_text = "Bandaging the wound is of utmost importance, as is seeking direct medical attention - Death will ensue if treatment is delayed whatsoever, with lack of oxygen killing the patient, thus Food, Iron, and saline solution is always recommended after treatment. This wound will not naturally seal itself." + homemade_treat_text = "Bed sheets can be ripped up to make makeshift gauze. Flour, salt, and saltwater topically applied will help. Dropping to the ground and grabbing your wound will reduce blood flow." /datum/wound/slash/flesh/critical/update_descriptions() if (!limb.can_bleed()) @@ -391,7 +399,6 @@ abstract = FALSE wound_path_to_generate = /datum/wound/slash/flesh/critical - threshold_minimum = 80 /datum/wound/slash/flesh/moderate/many_cuts diff --git a/code/game/objects/items/devices/scanners/health_analyzer.dm b/code/game/objects/items/devices/scanners/health_analyzer.dm index 49dc76bfa56..e397cc4fbb8 100644 --- a/code/game/objects/items/devices/scanners/health_analyzer.dm +++ b/code/game/objects/items/devices/scanners/health_analyzer.dm @@ -496,7 +496,7 @@ #define AID_EMOTION_SAD "sad" /// Displays wounds with extended information on their status vs medscanners -/proc/woundscan(mob/user, mob/living/carbon/patient, obj/item/healthanalyzer/scanner) +/proc/woundscan(mob/user, mob/living/carbon/patient, obj/item/healthanalyzer/scanner, simple_scan = FALSE) if(!istype(patient) || user.incapacitated()) return @@ -507,7 +507,7 @@ render_list += "Warning: Physical trauma[LAZYLEN(wounded_part.wounds) > 1? "s" : ""] detected in [wounded_part.name]" for(var/limb_wound in wounded_part.wounds) var/datum/wound/current_wound = limb_wound - render_list += "
[current_wound.get_scanner_description()]
\n" + render_list += "
[simple_scan ? current_wound.get_simple_scanner_description() : current_wound.get_scanner_description()]
\n" if (scanner.give_wound_treatment_bonus) ADD_TRAIT(current_wound, TRAIT_WOUND_SCANNED, ANALYZER_TRAIT) if(!advised) @@ -515,11 +515,9 @@ advised = TRUE render_list += "
" - var/obj/item/healthanalyzer/simple/simple_scanner - if(istype(scanner, /obj/item/healthanalyzer/simple)) - simple_scanner = scanner if(render_list == "") - if (simple_scanner) + if(simple_scan) + var/obj/item/healthanalyzer/simple/simple_scanner = scanner // Only emit the cheerful scanner message if this scan came from a scanner playsound(simple_scanner, 'sound/machines/ping.ogg', 50, FALSE) to_chat(user, span_notice("\The [simple_scanner] makes a happy ping and briefly displays a smiley face with several exclamation points! It's really excited to report that [patient] has no wounds!")) @@ -527,7 +525,8 @@ to_chat(user, "No wounds detected in subject.") else to_chat(user, examine_block(jointext(render_list, "")), type = MESSAGE_TYPE_INFO) - if (simple_scanner) + if(simple_scan) + var/obj/item/healthanalyzer/simple/simple_scanner = scanner simple_scanner.show_emotion(AID_EMOTION_WARN) playsound(simple_scanner, 'sound/machines/twobeep.ogg', 50, FALSE) @@ -586,7 +585,7 @@ show_emotion(AI_EMOTION_SAD) return - woundscan(user, patient, src) + woundscan(user, patient, src, simple_scan = TRUE) flick(icon_state + "_pinprick", src) /obj/item/healthanalyzer/simple/update_overlays() diff --git a/code/modules/food_and_drinks/recipes/drinks/drinks_alcoholic.dm b/code/modules/food_and_drinks/recipes/drinks/drinks_alcoholic.dm index 7e84fe4f5c0..1da96fc0aae 100644 --- a/code/modules/food_and_drinks/recipes/drinks/drinks_alcoholic.dm +++ b/code/modules/food_and_drinks/recipes/drinks/drinks_alcoholic.dm @@ -410,7 +410,7 @@ /datum/chemical_reaction/drink/squirt_cider results = list(/datum/reagent/consumable/ethanol/squirt_cider = 4) - required_reagents = list(/datum/reagent/water = 2, /datum/reagent/consumable/tomatojuice = 2, /datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/salt = 1) + required_reagents = list(/datum/reagent/water/salt = 2, /datum/reagent/consumable/tomatojuice = 2, /datum/reagent/consumable/nutriment = 1) mix_message = "The mix swirls and turns a bright red that reminds you of an apple's skin." reaction_tags = REACTION_TAG_DRINK | REACTION_TAG_EASY | REACTION_TAG_OTHER diff --git a/code/modules/food_and_drinks/recipes/soup_mixtures.dm b/code/modules/food_and_drinks/recipes/soup_mixtures.dm index 6e78c0f5f2f..e298b0274d5 100644 --- a/code/modules/food_and_drinks/recipes/soup_mixtures.dm +++ b/code/modules/food_and_drinks/recipes/soup_mixtures.dm @@ -560,8 +560,8 @@ /datum/chemical_reaction/food/soup/chili_sin_carne required_reagents = list( - /datum/reagent/water = 40, - /datum/reagent/consumable/salt = 5, + /datum/reagent/water = 30, + /datum/reagent/water/salt = 10, ) required_ingredients = list( /obj/item/food/grown/chili = 1, @@ -1097,8 +1097,8 @@ /datum/chemical_reaction/food/soup/electron required_reagents = list( - /datum/reagent/water = 45, - /datum/reagent/consumable/salt = 5, + /datum/reagent/water = 40, + /datum/reagent/water/salt = 10, ) required_ingredients = list( /obj/item/food/grown/mushroom/jupitercup = 1, @@ -1661,8 +1661,8 @@ /datum/chemical_reaction/food/soup/rice_porridge required_reagents = list( - /datum/reagent/water = 30, - /datum/reagent/consumable/salt = 5, + /datum/reagent/water = 20, + /datum/reagent/water/salt = 10, ) required_ingredients = list( /obj/item/food/boiledrice = 1, @@ -1803,7 +1803,7 @@ /obj/item/food/spaghetti/rawnoodles = 1 ) required_catalysts = list( - /datum/reagent/water = 30 + /datum/reagent/water/salt = 10, ) resulting_food_path = /obj/item/food/spaghetti/boilednoodles ingredient_reagent_multiplier = 0 diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm index 1c400bfeac4..67d1ca54c00 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm @@ -422,8 +422,7 @@ reqs = list( /obj/item/reagent_containers/cup/beaker/large = 1, /obj/item/food/grown/cucumber = 10, - /datum/reagent/water = 10, - /datum/reagent/consumable/salt = 10, + /datum/reagent/water/salt = 20, ) result = /obj/item/storage/fancy/pickles_jar category = CAT_MISCFOOD diff --git a/code/modules/reagents/chemistry/reagents.dm b/code/modules/reagents/chemistry/reagents.dm index 016253baa3e..8de1d98cc2e 100644 --- a/code/modules/reagents/chemistry/reagents.dm +++ b/code/modules/reagents/chemistry/reagents.dm @@ -162,6 +162,10 @@ GLOBAL_LIST_INIT(name2reagent, build_name2reagent()) return holder.remove_reagent(type, metabolization_rate * M.metabolism_efficiency * seconds_per_tick) //By default it slowly disappears. +/// Called in burns.dm *if* the reagent has the REAGENT_AFFECTS_WOUNDS process flag +/datum/reagent/proc/on_burn_wound_processing(datum/wound/burn/flesh/burn_wound) + return + /* Used to run functions before a reagent is transferred. Returning TRUE will block the transfer attempt. Primarily used in reagents/reaction_agents diff --git a/code/modules/reagents/chemistry/reagents/drinks/drink_reagents.dm b/code/modules/reagents/chemistry/reagents/drinks/drink_reagents.dm index 83aa18eebb5..36444d6229b 100644 --- a/code/modules/reagents/chemistry/reagents/drinks/drink_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drinks/drink_reagents.dm @@ -296,10 +296,39 @@ affected_mob.AdjustSleeping(-20 * REM * seconds_per_tick) if(affected_mob.getToxLoss() && SPT_PROB(10, seconds_per_tick)) affected_mob.adjustToxLoss(-1, FALSE, required_biotype = affected_biotype) + var/to_chatted = FALSE + for(var/datum/wound/iter_wound as anything in affected_mob.all_wounds) + if(SPT_PROB(10, seconds_per_tick)) + var/helped = iter_wound.tea_life_process() + if(!to_chatted && helped) + to_chat(affected_mob, span_notice("A calm, relaxed feeling suffuses you. Your wounds feel a little healthier.")) + to_chatted = TRUE affected_mob.adjust_bodytemperature(20 * REM * TEMPERATURE_DAMAGE_COEFFICIENT * seconds_per_tick, 0, affected_mob.get_body_temp_normal()) ..() . = TRUE +// Different handling, different name. +// Returns FALSE by default so broken bones and 'loss' wounds don't give a false message +/datum/wound/proc/tea_life_process() + return FALSE + +// Slowly increase (gauzed) clot rate +/datum/wound/pierce/bleed/tea_life_process() + gauzed_clot_rate += 0.1 + return TRUE + +// Slowly increase clot rate +/datum/wound/slash/flesh/tea_life_process() + clot_rate += 0.2 + return TRUE + +// There's a designated burn process, but I felt this would be better for consistency with the rest of the reagent's procs +/datum/wound/burn/flesh/tea_life_process() + // Sanitizes and heals, but with a limit + flesh_healing = (flesh_healing > 0.1) ? flesh_healing : flesh_healing + 0.02 + infestation_rate = max(infestation_rate - 0.005, 0) + return TRUE + /datum/reagent/consumable/lemonade name = "Lemonade" description = "Sweet, tangy lemonade. Good for the soul." diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm index fd24b163ac6..67b24f2bfb3 100644 --- a/code/modules/reagents/chemistry/reagents/food_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm @@ -468,6 +468,40 @@ return exposed_turf.spawn_unique_cleanable(/obj/effect/decal/cleanable/food/salt) +/datum/reagent/consumable/salt/expose_mob(mob/living/exposed_mob, methods, reac_volume) + . = ..() + var/mob/living/carbon/carbies = exposed_mob + if(!(methods & (PATCH|TOUCH|VAPOR))) + return + for(var/datum/wound/iter_wound as anything in carbies.all_wounds) + iter_wound.on_salt(reac_volume, carbies) + +// Salt can help with wounds by soaking up fluid, but undiluted salt will also cause irritation from the loose crystals, and it might soak up the body's water as well! +// A saltwater mixture would be best, but we're making improvised chems here, not real ones. +/datum/wound/proc/on_salt(reac_volume, mob/living/carbon/carbies) + return + +/datum/wound/pierce/bleed/on_salt(reac_volume, mob/living/carbon/carbies) + adjust_blood_flow(-0.06 * reac_volume, initial_flow * 0.6) // 20u of a salt shacker * 0.1 = -1.6~ blood flow, but is always clamped to, at best, third blood loss from that wound. + // Crystal irritation worsening recovery. + gauzed_clot_rate *= 0.65 + to_chat(carbies, span_notice("The salt bits seep in and stick to [lowertext(src)], painfully irritating the skin but soaking up most of the blood.")) + +/datum/wound/slash/flesh/on_salt(reac_volume, mob/living/carbon/carbies) + adjust_blood_flow(-0.1 * reac_volume, initial_flow * 0.5) // 20u of a salt shacker * 0.1 = -2~ blood flow, but is always clamped to, at best, halve blood loss from that wound. + // Crystal irritation worsening recovery. + clot_rate *= 0.75 + to_chat(carbies, span_notice("The salt bits seep in and stick to [lowertext(src)], painfully irritating the skin but soaking up most of the blood.")) + +/datum/wound/burn/flesh/on_salt(reac_volume) + // Slightly sanitizes and disinfects, but also increases infestation rate (some bacteria are aided by salt), and decreases flesh healing (can damage the skin from moisture absorption) + sanitization += VALUE_PER(0.4, 30) * reac_volume + infestation -= max(VALUE_PER(0.3, 30) * reac_volume, 0) + infestation_rate += VALUE_PER(0.12, 30) * reac_volume + flesh_healing -= max(VALUE_PER(5, 30) * reac_volume, 0) + to_chat(victim, span_notice("The salt bits seep in and stick to [lowertext(src)], painfully irritating the skin! After a few moments, it feels marginally better.")) + + /datum/reagent/consumable/blackpepper name = "Black Pepper" description = "A powder ground from peppercorns. *AAAACHOOO*" @@ -606,9 +640,38 @@ reagent_state = SOLID color = "#FFFFFF" // rgb: 0, 0, 0 taste_description = "chalky wheat" - chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED|REAGENT_AFFECTS_WOUNDS default_container = /obj/item/reagent_containers/condiment/flour +/datum/reagent/consumable/flour/expose_mob(mob/living/exposed_mob, methods, reac_volume) + . = ..() + var/mob/living/carbon/carbies = exposed_mob + if(!(methods & (PATCH|TOUCH|VAPOR))) + return + for(var/datum/wound/iter_wound as anything in carbies.all_wounds) + iter_wound.on_flour(reac_volume, carbies) + +/datum/wound/proc/on_flour(reac_volume, mob/living/carbon/carbies) + return + +/datum/wound/pierce/bleed/on_flour(reac_volume, mob/living/carbon/carbies) + adjust_blood_flow(-0.015 * reac_volume) // 30u of a flour sack * 0.015 = -0.45~ blood flow, prettay good + to_chat(carbies, span_notice("The flour seeps into [lowertext(src)], painfully drying it up and absorbing some of the blood.")) + // When some nerd adds infection for wounds, make this increase the infection + +/datum/wound/slash/flesh/on_flour(reac_volume, mob/living/carbon/carbies) + adjust_blood_flow(-0.04 * reac_volume) // 30u of a flour sack * 0.04 = -1.25~ blood flow, pretty good! + to_chat(carbies, span_notice("The flour seeps into [lowertext(src)], painfully drying some of it up and absorbing a little blood.")) + // When some nerd adds infection for wounds, make this increase the infection + +// Don't pour flour onto burn wounds, it increases infection risk! Very unwise. Backed up by REAL info from REAL professionals. +// https://www.reuters.com/article/uk-factcheck-flour-burn-idUSKCN26F2N3 +/datum/wound/burn/flesh/on_flour(reac_volume) + to_chat(victim, span_notice("The flour seeps into [lowertext(src)], spiking you with intense pain! That probably wasn't a good idea...")) + sanitization -= min(0, 1) + infestation += 0.2 + return + /datum/reagent/consumable/flour/expose_turf(turf/exposed_turf, reac_volume) . = ..() if(isspaceturf(exposed_turf)) @@ -681,6 +744,37 @@ description = "A slippery solution." color = "#DBCE95" taste_description = "slime" + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED|REAGENT_AFFECTS_WOUNDS + +// Starch has similar absorbing properties to flour (Stronger here because it's rarer) +/datum/reagent/consumable/corn_starch/expose_mob(mob/living/exposed_mob, methods, reac_volume) + . = ..() + var/mob/living/carbon/carbies = exposed_mob + if(!(methods & (PATCH|TOUCH|VAPOR))) + return + for(var/datum/wound/iter_wound as anything in carbies.all_wounds) + iter_wound.on_starch(reac_volume, carbies) + +/datum/wound/proc/on_starch(reac_volume, mob/living/carbon/carbies) + return + +/datum/wound/pierce/bleed/on_starch(reac_volume, mob/living/carbon/carbies) + adjust_blood_flow(-0.03 * reac_volume) + to_chat(carbies, span_notice("The slimey starch seeps into [lowertext(src)], painfully drying some of it up and absorbing a little blood.")) + // When some nerd adds infection for wounds, make this increase the infection + return + +/datum/wound/slash/flesh/on_starch(reac_volume, mob/living/carbon/carbies) + adjust_blood_flow(-0.06 * reac_volume) + to_chat(carbies, span_notice("The slimey starch seeps into [lowertext(src)], painfully drying it up and absorbing some of the blood.")) + // When some nerd adds infection for wounds, make this increase the infection + return + +/datum/wound/burn/flesh/on_starch(reac_volume, mob/living/carbon/carbies) + to_chat(carbies, span_notice("The slimey starch seeps into [lowertext(src)], spiking you with intense pain! That probably wasn't a good idea...")) + sanitization -= min(0, 0.5) + infestation += 0.1 + return /datum/reagent/consumable/corn_syrup name = "Corn Syrup" diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm index 86978985ff8..0265bfab41c 100644 --- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm @@ -346,7 +346,7 @@ color = "#6D6374" metabolization_rate = 0.4 * REAGENTS_METABOLISM ph = 2.6 - chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED|REAGENT_AFFECTS_WOUNDS /datum/reagent/medicine/mine_salve/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) affected_mob.adjustBruteLoss(-0.25 * REM * seconds_per_tick, FALSE, required_bodytype = affected_bodytype) @@ -380,6 +380,10 @@ . = ..() metabolizer.remove_status_effect(/datum/status_effect/grouped/screwy_hud/fake_healthy, type) +/datum/reagent/medicine/mine_salve/on_burn_wound_processing(datum/wound/burn/flesh/burn_wound) + burn_wound.sanitization += 0.3 + burn_wound.flesh_healing += 0.5 + /datum/reagent/medicine/omnizine name = "Omnizine" description = "Slowly heals all damage types. Overdose will cause damage in all types instead." diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index 7d64f095113..12bc5dcc4ee 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -281,6 +281,53 @@ //You don't belong in this world, monster! mytray.reagents.remove_reagent(type, volume) +/datum/reagent/water/salt + name = "Saltwater" + description = "Water, but salty. Smells like... the station infirmary?" + color = "#aaaaaa9d" // rgb: 170, 170, 170, 77 (alpha) + taste_description = "the sea" + cooling_temperature = 3 + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED|REAGENT_CLEANS + default_container = /obj/item/reagent_containers/cup/glass/waterbottle + +/datum/glass_style/shot_glass/water/salt + required_drink_type = /datum/reagent/water/salt + icon_state = "shotglassclear" + +/datum/glass_style/drinking_glass/water/salt + required_drink_type = /datum/reagent/water/salt + name = "glass of saltwater" + desc = "If you have a sore throat, gargle some saltwater and watch the pain go away. Can be used as a very improvised topical medicine against wounds." + icon_state = "glass_clear" + +/datum/reagent/water/salt/expose_mob(mob/living/exposed_mob, methods, reac_volume) + . = ..() + var/mob/living/carbon/carbies = exposed_mob + if(!(methods & (PATCH|TOUCH|VAPOR))) + return + for(var/datum/wound/iter_wound as anything in carbies.all_wounds) + iter_wound.on_saltwater(reac_volume, carbies) + +// Mixed salt with water! All the help of salt with none of the irritation. Plus increased volume. +/datum/wound/proc/on_saltwater(reac_volume, mob/living/carbon/carbies) + return + +/datum/wound/pierce/bleed/on_saltwater(reac_volume, mob/living/carbon/carbies) + adjust_blood_flow(-0.06 * reac_volume, initial_flow * 0.6) + to_chat(carbies, span_notice("The salt water splashes over [lowertext(src)], soaking up the blood.")) + +/datum/wound/slash/flesh/on_saltwater(reac_volume, mob/living/carbon/carbies) + adjust_blood_flow(-0.1 * reac_volume, initial_flow * 0.5) + to_chat(carbies, span_notice("The salt water splashes over [lowertext(src)], soaking up the blood.")) + +/datum/wound/burn/flesh/on_saltwater(reac_volume) + // Similar but better stats from normal salt. + sanitization += VALUE_PER(0.6, 30) * reac_volume + infestation -= max(VALUE_PER(0.5, 30) * reac_volume, 0) + infestation_rate += VALUE_PER(0.07, 30) * reac_volume + to_chat(victim, span_notice("The salt water splashes over [lowertext(src)], soaking up the... miscellaneous fluids. It feels somewhat better afterwards.")) + return + /datum/reagent/water/holywater name = "Holy Water" description = "Water blessed by some deity." @@ -1037,7 +1084,7 @@ color = "#D0EFEE" // space cleaner but lighter taste_description = "bitterness" ph = 10.5 - chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED|REAGENT_AFFECTS_WOUNDS /datum/reagent/space_cleaner/sterilizine/expose_mob(mob/living/carbon/exposed_carbon, methods=TOUCH, reac_volume) . = ..() @@ -1047,6 +1094,9 @@ for(var/datum/surgery/surgery as anything in exposed_carbon.surgeries) surgery.speed_modifier = max(0.2, surgery.speed_modifier) +/datum/reagent/space_cleaner/sterilizine/on_burn_wound_processing(datum/wound/burn/flesh/burn_wound) + burn_wound.sanitization += 0.9 + /datum/reagent/iron name = "Iron" description = "Pure iron is a metal." @@ -1210,14 +1260,14 @@ /datum/reagent/space_cleaner name = "Space Cleaner" - description = "A compound used to clean things. Now with 50% more sodium hypochlorite!" + description = "A compound used to clean things. Now with 50% more sodium hypochlorite! Can be used to clean wounds, but it's not really meant for that." color = "#A5F0EE" // rgb: 165, 240, 238 taste_description = "sourness" reagent_weight = 0.6 //so it sprays further - penetrates_skin = NONE + penetrates_skin = VAPOR var/clean_types = CLEAN_WASH ph = 5.5 - chemical_flags = REAGENT_CAN_BE_SYNTHESIZED|REAGENT_CLEANS + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED|REAGENT_CLEANS|REAGENT_AFFECTS_WOUNDS /datum/reagent/space_cleaner/expose_obj(obj/exposed_obj, reac_volume) . = ..() @@ -1243,6 +1293,13 @@ if(methods & (TOUCH|VAPOR)) exposed_mob.wash(clean_types) +/datum/reagent/space_cleaner/on_burn_wound_processing(datum/wound/burn/flesh/burn_wound) + burn_wound.sanitization += 0.3 + if(prob(5)) + to_chat(burn_wound.victim, span_notice("Your [burn_wound] stings and burns from the [src] covering it! It does look pretty clean though.")) + burn_wound.victim.adjustToxLoss(0.5) + burn_wound.limb.receive_damage(burn = 0.5, wound_bonus = CANT_WOUND) + /datum/reagent/space_cleaner/ez_clean name = "EZ Clean" description = "A powerful, acidic cleaner sold by Waffle Co. Affects organic matter while leaving other objects unaffected." diff --git a/code/modules/reagents/chemistry/recipes/medicine.dm b/code/modules/reagents/chemistry/recipes/medicine.dm index 2002e9b62a3..7c4c9dfe7e9 100644 --- a/code/modules/reagents/chemistry/recipes/medicine.dm +++ b/code/modules/reagents/chemistry/recipes/medicine.dm @@ -90,7 +90,7 @@ /datum/chemical_reaction/medicine/salglu_solution results = list(/datum/reagent/medicine/salglu_solution = 3) - required_reagents = list(/datum/reagent/consumable/salt = 1, /datum/reagent/water = 1, /datum/reagent/consumable/sugar = 1) + required_reagents = list(/datum/reagent/water/salt = 2, /datum/reagent/consumable/sugar = 1) reaction_tags = REACTION_TAG_EASY | REACTION_TAG_HEALING | REACTION_TAG_ORGAN /datum/chemical_reaction/medicine/mine_salve @@ -138,8 +138,8 @@ reaction_tags = REACTION_TAG_EASY | REACTION_TAG_HEALING | REACTION_TAG_OTHER /datum/chemical_reaction/medicine/pen_acid - results = list(/datum/reagent/medicine/pen_acid = 6) - required_reagents = list(/datum/reagent/fuel = 1, /datum/reagent/chlorine = 1, /datum/reagent/ammonia = 1, /datum/reagent/toxin/formaldehyde = 1, /datum/reagent/sodium = 1, /datum/reagent/toxin/cyanide = 1) + results = list(/datum/reagent/medicine/pen_acid = 5) + required_reagents = list(/datum/reagent/fuel = 1, /datum/reagent/ammonia = 1, /datum/reagent/toxin/formaldehyde = 1, /datum/reagent/consumable/salt = 1, /datum/reagent/toxin/cyanide = 1) reaction_tags = REACTION_TAG_EASY | REACTION_TAG_HEALING | REACTION_TAG_OTHER /datum/chemical_reaction/medicine/sal_acid diff --git a/code/modules/reagents/chemistry/recipes/others.dm b/code/modules/reagents/chemistry/recipes/others.dm index 80f33b7a85f..5fd92a74af0 100644 --- a/code/modules/reagents/chemistry/recipes/others.dm +++ b/code/modules/reagents/chemistry/recipes/others.dm @@ -35,8 +35,8 @@ reaction_tags = REACTION_TAG_EASY | REACTION_TAG_UNIQUE | REACTION_TAG_EXPLOSIVE /datum/chemical_reaction/sodiumchloride - results = list(/datum/reagent/consumable/salt = 3) - required_reagents = list(/datum/reagent/water = 1, /datum/reagent/sodium = 1, /datum/reagent/chlorine = 1) + results = list(/datum/reagent/consumable/salt = 2) + required_reagents = list(/datum/reagent/sodium = 1, /datum/reagent/chlorine = 1) // That's what I said! Sodium Chloride! reaction_tags = REACTION_TAG_EASY | REACTION_TAG_FOOD /datum/chemical_reaction/stable_plasma @@ -770,6 +770,11 @@ required_catalysts = list(/datum/reagent/water/holywater = 1) reaction_tags = REACTION_TAG_EASY | REACTION_TAG_UNIQUE | REACTION_TAG_PLANT | REACTION_TAG_OTHER +/datum/chemical_reaction/saltwater + results = list(/datum/reagent/water/salt = 2) + required_reagents = list(/datum/reagent/water = 1, /datum/reagent/consumable/salt = 1) + reaction_tags = REACTION_TAG_EASY | REACTION_TAG_DRINK | REACTION_TAG_ORGAN + /datum/chemical_reaction/exotic_stabilizer results = list(/datum/reagent/exotic_stabilizer = 2) required_reagents = list(/datum/reagent/plasma_oxide = 1,/datum/reagent/stabilizing_agent = 1) diff --git a/code/modules/reagents/chemistry/recipes/toxins.dm b/code/modules/reagents/chemistry/recipes/toxins.dm index b4e80e01cd0..0fcae783d89 100644 --- a/code/modules/reagents/chemistry/recipes/toxins.dm +++ b/code/modules/reagents/chemistry/recipes/toxins.dm @@ -307,8 +307,8 @@ reaction_tags = REACTION_TAG_EASY | REACTION_TAG_DAMAGING | REACTION_TAG_OTHER /datum/chemical_reaction/heparin - results = list(/datum/reagent/toxin/heparin = 4) - required_reagents = list(/datum/reagent/toxin/formaldehyde = 1, /datum/reagent/sodium = 1, /datum/reagent/chlorine = 1, /datum/reagent/lithium = 1) + results = list(/datum/reagent/toxin/heparin = 3) + required_reagents = list(/datum/reagent/toxin/formaldehyde = 1, /datum/reagent/consumable/salt = 1, /datum/reagent/lithium = 1) mix_message = "The mixture thins and loses all color." is_cold_recipe = FALSE required_temp = 100 diff --git a/code/modules/surgery/bodyparts/wounds.dm b/code/modules/surgery/bodyparts/wounds.dm index 3ac2071b4ac..07107089791 100644 --- a/code/modules/surgery/bodyparts/wounds.dm +++ b/code/modules/surgery/bodyparts/wounds.dm @@ -308,7 +308,7 @@ // we can (normally) only have one wound per type, but remember there's multiple types (smites like :B:loodless can generate multiple cuts on a limb) for(var/datum/wound/iter_wound as anything in wounds) - dam_mul *= iter_wound.damage_mulitplier_penalty + dam_mul *= iter_wound.damage_multiplier_penalty if(!LAZYLEN(wounds) && current_gauze && !replaced) // no more wounds = no need for the gauze anymore owner.visible_message(span_notice("\The [current_gauze.name] on [owner]'s [name] falls away."), span_notice("The [current_gauze.name] on your [parse_zone(body_zone)] falls away."))