Files
Paradise/code/modules/surgery/external_infection_treatment.dm
T
kyunkyunkyunandGitHub b0463d3c83 Convert most spans to defines (#31080)
* spanish?

* aaaagain

* keep maptext

* Update robot_items.dm

* Update span_defines.dm

* compiles

* Update silicon_mob.dm

* compile
2025-12-13 23:55:48 +00:00

173 lines
7.5 KiB
Plaintext

/datum/surgery/infection
name = "External Infection Treatment"
desc = "Gradually remove infected from an affected limb"
steps = list(
/datum/surgery_step/generic/cut_open,
/datum/surgery_step/heal_infection,
/datum/surgery_step/pull_skin,
/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_step/heal_infection
name = "tend infection"
allowed_tools = list(
/obj/item/scalpel/laser = 100,
TOOL_CAUTERY = 100,
/obj/item/clothing/mask/cigarette = 90,
/obj/item/lighter = 60,
TOOL_WELDER = 30,
/obj/item/flamethrower = 1
)
preop_sound = 'sound/surgery/cautery1.ogg'
success_sound = 'sound/surgery/cautery2.ogg'
failure_sound = 'sound/items/welder.ogg'
time = 2.4 SECONDS
repeatable = TRUE
var/shown_starting_message_already = FALSE
COOLDOWN_DECLARE(success_message_spam_cooldown)
var/germ_amount_healed = 50
/datum/surgery_step/heal_infection/proc/can_be_healed(mob/living/user, mob/living/carbon/target, target_zone)
if(germ_amount_healed == 0)
stack_trace("A healing surgery was given no healing values.")
return FALSE
var/obj/item/organ/external/affected = target.get_organ(target_zone)
return (germ_amount_healed && affected.germ_level)
/datum/surgery_step/heal_infection/can_repeat(mob/living/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
if(!can_be_healed(user, target, target_zone))
to_chat(user, SPAN_NOTICE("It doesn't look like [target] has any remaining infection."))
return FALSE
return TRUE
/datum/surgery_step/heal_infection/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(!shown_starting_message_already)
shown_starting_message_already = TRUE
user.visible_message(
"[user] starts to remove some of the infection on [target]'s [affected.name] with [tool].",
"You start to remove some of the infection on [target]'s [affected.name] with [tool].",
chat_message_type = MESSAGE_TYPE_COMBAT
)
affected.custom_pain("Your [affected.name] is being burned!")
return ..()
/datum/surgery_step/heal_infection/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/surgery/surgery)
if(!can_be_healed(user, target, target_zone))
to_chat(user, SPAN_NOTICE("It doesn't look like [target] has any remaining infection."))
return SURGERY_STEP_CONTINUE
var/outer_msg = "[user] succeeds in fixing some of [target]'s infection"
var/self_msg = "You successfully manage to remove some of [target]'s infection"
var/germ_healed = germ_amount_healed
var/obj/item/organ/external/affected = target.get_organ(target_zone)
germ_healed += germ_amount_healed
affected.germ_level = max(affected.germ_level - germ_amount_healed, 0)
self_msg += get_progress(user, target, target_zone, germ_healed)
if(COOLDOWN_FINISHED(src, success_message_spam_cooldown))
user.visible_message(
SPAN_NOTICE("[outer_msg]."),
SPAN_NOTICE("[self_msg]."),
chat_message_type = MESSAGE_TYPE_COMBAT
)
COOLDOWN_START(src, success_message_spam_cooldown, 7 SECONDS)
// retry ad nauseum; can_repeat should handle anything else.
if(affected.germ_level > 0)
return SURGERY_STEP_RETRY
else
return SURGERY_STEP_CONTINUE
/datum/surgery_step/heal_infection/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_WARNING("[user]'s hand slips, leaving a small burn on [target]'s [affected.name] with \the [tool]!"),
SPAN_WARNING("Your hand slips, leaving a small burn on [target]'s [affected.name] with \the [tool]!"),
chat_message_type = MESSAGE_TYPE_COMBAT
)
target.apply_damage(3, BURN, affected)
return SURGERY_STEP_RETRY
/datum/surgery_step/heal_infection/proc/get_progress(mob/user, mob/living/carbon/target, target_zone, germ_healed)
if(!germ_healed)
return
var/progress_text
var/obj/item/organ/external/affected = target.get_organ(target_zone)
switch(affected.germ_level)
if(1 to INFECTION_LEVEL_ONE - 1)
progress_text = ", removing the last traces of the infection"
if(INFECTION_LEVEL_ONE to INFECTION_LEVEL_ONE + 200)
progress_text = ", counting down the small bits of infection"
if(INFECTION_LEVEL_ONE + 200 to INFECTION_LEVEL_ONE + 300)
progress_text = ", continuing to eliminate the spots of infection"
if(INFECTION_LEVEL_ONE + 300 to INFECTION_LEVEL_ONE + 400)
progress_text = ", still counting some moderate spots of infection"
if(INFECTION_LEVEL_TWO to INFECTION_LEVEL_TWO + 200)
progress_text = ", steadying yourself for the long surgery ahead"
if(INFECTION_LEVEL_TWO + 200 to INFECTION_LEVEL_TWO + 300)
progress_text = ", burning through some of the severe spots of infection"
if(INFECTION_LEVEL_TWO + 300 to INFECTION_LEVEL_TWO + 400)
progress_text = ", though [target.p_their()] [parse_zone(target_zone)] still feels like more bacteria than flesh"
if(INFECTION_LEVEL_THREE to INFINITY)
progress_text = ", though you feel like you're barely making a dent in [target.p_their()] near-septic [parse_zone(target_zone)]"
return progress_text
/datum/surgery_step/pull_skin
name = "pull skin"
allowed_tools = list(
TOOL_RETRACTOR = 100,
/obj/item/scalpel/laser/manager = 100,
/obj/item/retractor = 100,
/obj/item/crowbar = 90,
/obj/item/kitchen/utensil/fork = 60
)
preop_sound = 'sound/surgery/retractor1.ogg'
success_sound = 'sound/surgery/retractor2.ogg'
failure_sound = 'sound/surgery/organ2.ogg'
time = 2.4 SECONDS
/datum/surgery_step/pull_skin/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)
var/msg = "[user] starts to pull closed the incision on [target]'s [affected.name] with [tool]."
var/self_msg = "You start to pull closed the incision on [target]'s [affected.name] with [tool]."
user.visible_message(msg, self_msg, chat_message_type = MESSAGE_TYPE_COMBAT)
affected.custom_pain("It feels like the skin on your [affected.name] is on fire!")
return ..()
/datum/surgery_step/pull_skin/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/msg = SPAN_NOTICE("[user] pulls the incision closed on [target]'s [affected.name] with [tool].")
var/self_msg = SPAN_NOTICE("You pull the incision closed on [target]'s [affected.name] with [tool].")
user.visible_message(msg, self_msg, chat_message_type = MESSAGE_TYPE_COMBAT)
affected.open = ORGAN_ORGANIC_ENCASED_OPEN
return SURGERY_STEP_CONTINUE
/datum/surgery_step/pull_skin/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/msg = SPAN_WARNING("[user]'s hand slips, tearing the edges of incision on [target]'s [affected.name] with [tool]!")
var/self_msg = SPAN_WARNING("Your hand slips, tearing the edges of incision on [target]'s [affected.name] with [tool]!")
user.visible_message(msg, self_msg, chat_message_type = MESSAGE_TYPE_COMBAT)
target.apply_damage(12, BRUTE, affected, sharp = TRUE)
return SURGERY_STEP_RETRY