Burn wound surgery (#22105)

* adds burn wound surgery

* burn wounds review changes

* Update code/modules/surgery/other.dm

Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com>

* Update code/modules/surgery/other.dm

Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com>

* Update code/modules/surgery/abstract_steps.dm

Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com>

* Update code/modules/surgery/other.dm

Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com>

---------

Co-authored-by: cybercapitalism <petersmovie@live.com>
Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com>
This commit is contained in:
HMBGERDO
2023-09-18 02:17:56 +02:00
committed by GitHub
parent 3693e6d620
commit 2dd88fab76
2 changed files with 99 additions and 10 deletions
+20 -3
View File
@@ -292,13 +292,30 @@
to_chat(user, "<span class='warning'>The bones in [target]'s [parse_zone(affected)] look fully intact, they don't need mending.</span>")
return FALSE
/// Proxy surgery step to allow healing bleeding and mending bones.
/datum/surgery/intermediate/treat_burns
name = "Burns (abstract)"
desc = "An intermediate surgery to treat burn wounds while a patient is undergoing another procedure."
steps = list(/datum/surgery_step/treat_burns)
possible_locs = list(BODY_ZONE_CHEST, BODY_ZONE_HEAD, BODY_ZONE_PRECISE_GROIN, BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG, BODY_ZONE_PRECISE_R_HAND, BODY_ZONE_PRECISE_L_HAND, BODY_ZONE_PRECISE_R_FOOT, BODY_ZONE_PRECISE_L_FOOT)
/datum/surgery/intermediate/treat_burns/can_start(mob/user, mob/living/carbon/target)
. = ..()
if(!.)
return FALSE
var/mob/living/carbon/human/H = target
var/obj/item/organ/external/affected = H.get_organ(user.zone_selected)
if(affected.status & ORGAN_BURNT)
return TRUE
return FALSE
/// Proxy surgery step to allow healing bleeding, bones, and burns.
/// Should be added into surgeries just after the first three standard steps.
/datum/surgery_step/proxy/open_organ
name = "mend internal bleeding or mend bone (proxy)"
name = "mend internal bleeding, bones, or burns (proxy)"
branches = list(
/datum/surgery/intermediate/bleeding,
/datum/surgery/intermediate/mendbone
/datum/surgery/intermediate/mendbone,
/datum/surgery/intermediate/treat_burns
)
/// Mend IB without healing bones
+79 -7
View File
@@ -33,6 +33,26 @@
possible_locs = list(BODY_ZONE_CHEST, BODY_ZONE_HEAD, BODY_ZONE_PRECISE_GROIN, BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG, BODY_ZONE_PRECISE_R_HAND, BODY_ZONE_PRECISE_L_HAND, BODY_ZONE_PRECISE_R_FOOT, BODY_ZONE_PRECISE_L_FOOT)
requires_organic_bodypart = TRUE
/datum/surgery/treat_burns
name = "Treat Severe Burns"
steps = list(
/datum/surgery_step/generic/cut_open,
/datum/surgery_step/generic/clamp_bleeders,
/datum/surgery_step/generic/retract_skin,
/datum/surgery_step/proxy/open_organ,
/datum/surgery_step/generic/cauterize
)
possible_locs = list(BODY_ZONE_CHEST, BODY_ZONE_HEAD, BODY_ZONE_PRECISE_GROIN, BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG, BODY_ZONE_PRECISE_R_HAND, BODY_ZONE_PRECISE_L_HAND, BODY_ZONE_PRECISE_R_FOOT, BODY_ZONE_PRECISE_L_FOOT)
/datum/surgery/treat_burns/can_start(mob/user, mob/living/carbon/target)
. = ..()
if(!.)
return FALSE
var/obj/item/organ/external/affected = target.get_organ(user.zone_selected)
if(affected.status & ORGAN_BURNT)
return TRUE
return FALSE
/datum/surgery/bleeding/can_start(mob/user, mob/living/carbon/target)
. = ..()
if(!.)
@@ -51,7 +71,6 @@
return FALSE
return TRUE
/datum/surgery_step/fix_vein
name = "mend internal bleeding"
allowed_tools = list(
@@ -94,13 +113,66 @@
/datum/surgery_step/fix_vein/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/surgery/surgery)
var/obj/item/organ/external/affected = target.get_organ(target_zone)
user.visible_message(
"<span class='warning'> [user]'s hand slips, smearing [tool] in the incision in [target]'s [affected.name]!</span>",
"<span class='warning'> Your hand slips, smearing [tool] in the incision in [target]'s [affected.name]!</span>"
"<span class='warning'>[user]'s hand slips, smearing [tool] in the incision in [target]'s [affected.name]!</span>",
"<span class='warning'>Your hand slips, smearing [tool] in the incision in [target]'s [affected.name]!</span>"
)
affected.receive_damage(5, 0)
return SURGERY_STEP_RETRY
/datum/surgery_step/treat_burns
name = "mend burns"
allowed_tools = list(
/obj/item/stack/medical/ointment/advanced = 100,
/obj/item/stack/medical/ointment = 90
)
can_infect = TRUE
blood_level = SURGERY_BLOODSPREAD_HANDS
time = 3.2 SECONDS
/datum/surgery_step/treat_burns/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/surgery/surgery)
var/obj/item/organ/external/affected = target.get_organ(target_zone)
if(!(affected.status & ORGAN_BURNT))
to_chat(user, "<span class='warning'>The skin on [target]'s [parse_zone(affected)] seems to be in perfect condition, it doesn't need treatment.</span>")
return SURGERY_BEGINSTEP_SKIP
user.visible_message(
"[user] starts to treat the scorched tissue in [target]'s [affected.name] with [tool].",
"You start to treat the scorched tissue in [target]'s [affected.name] with [tool]."
)
target.custom_pain("Your [affected.name] flares with agony as its burn is touched!")
return ..()
/datum/surgery_step/treat_burns/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/surgery/surgery)
var/obj/item/organ/external/affected = target.get_organ(target_zone)
var/obj/item/stack/stack = tool
stack.use(1)
affected.fix_burn_wound()
affected.germ_level = 0
target.update_body()
user.visible_message(
"<span class='notice'>[user] finishes treating affected tissue in [target]'s [affected.name].</span>",
"<span class='notice'>You finish treating affected tissue in [target]'s [affected.name] with [tool].</span>"
)
return SURGERY_STEP_CONTINUE
/datum/surgery_step/treat_burns/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/surgery/surgery)
var/obj/item/organ/external/affected = target.get_organ(target_zone)
var/obj/item/stack/stack = tool
stack.use(1)
user.visible_message(
"<span class='warning'>[user]'s hand slips, applying [tool] in the wrong place on [target]'s [affected.name]!</span>",
"<span class='warning'>Your hand slips, applying [tool] in the wrong place on [target]'s [affected.name]!</span>"
)
return SURGERY_STEP_RETRY
/datum/surgery_step/fix_dead_tissue //Debridement
name = "remove dead tissue"
allowed_tools = list(
@@ -136,8 +208,8 @@
/datum/surgery_step/fix_dead_tissue/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/surgery/surgery)
var/obj/item/organ/external/affected = target.get_organ(target_zone)
user.visible_message(
"<span class='warning'> [user]'s hand slips, slicing an artery inside [target]'s [affected.name] with \the [tool]!</span>",
"<span class='warning'> Your hand slips, slicing an artery inside [target]'s [affected.name] with \the [tool]!</span>"
"<span class='warning'>[user]'s hand slips, slicing an artery inside [target]'s [affected.name] with [tool]!</span>",
"<span class='warning'>Your hand slips, slicing an artery inside [target]'s [affected.name] with [tool]!</span>"
)
affected.receive_damage(20)
@@ -223,8 +295,8 @@
container.reagents.reaction(target, REAGENT_INGEST) //technically it's contact, but the reagents are being applied to internal tissue
user.visible_message(
"<span class='warning'> [user]'s hand slips, applying [trans] units of the solution to the wrong place in [target]'s [affected.name] with the [tool]!</span>",
"<span class='warning'> Your hand slips, applying [trans] units of the solution to the wrong place in [target]'s [affected.name] with the [tool]!</span>"
"<span class='warning'>[user]'s hand slips, applying [trans] units of the solution to the wrong place in [target]'s [affected.name] with the [tool]!</span>",
"<span class='warning'>Your hand slips, applying [trans] units of the solution to the wrong place in [target]'s [affected.name] with the [tool]!</span>"
)
//no damage or anything, just wastes medicine