mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-05-17 20:30:46 +01:00
fb81ffbe83
* Fixes necrosis steps setting bone Makes it so you the 'cut away' step doesn't set bones to open. This is entirely a non-internal fix (you're working on the flesh, not the organs inside) so you don't need the bone retracted. * Update other.dm * Crowbar Augment * descriptors * Update carbon.dm * no typecasting * removes unused proc * Limb status * Makes butchering take time Gives a warning as well when starting it. * Update organ.dm * Update organ.dm * Closing surgical stages and desc. Opened organs have descriptions that they're opened. Organs inform you that they have SPECIAL MECHANICS THAT'VE BEEN IN FOR 10 YEARS that you can do to them. Allows fixing amputated organs A BUNCH of stuff * Update organ.dm * Keep the washing * Update external_repair.dm * Update other.dm * Organizes surgeries * fix a typo * Update surgery.dm * More surgery * Nerve Surgery Adds template for nerve surgery * Prevents pain from limbs that feel no pain * Update external_repair.dm
260 lines
15 KiB
Plaintext
260 lines
15 KiB
Plaintext
///Has multiple stages. At or past stage 1, peridaxon can immediately treat it.
|
|
///0 = Not started
|
|
///1 = Dead tissue removed (Can use bioregen)
|
|
///2 = Flesh Rejuvenated (Can use hemostat)
|
|
///3 = Flesh Rearranged (Can use bioregen)
|
|
|
|
///////////////////////////////////////////////////////////////
|
|
// Necrosis Surgery Step 1
|
|
///////////////////////////////////////////////////////////////
|
|
|
|
/datum/surgery_step/necrotic
|
|
surgery_name = "Necrosis"
|
|
priority = 1
|
|
can_infect = 0 //It's already fully infected.
|
|
blood_level = 0 //Already gone.
|
|
|
|
/datum/surgery_step/necrotic/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
|
if(!ishuman(target))
|
|
return 0
|
|
|
|
if (target_zone == O_MOUTH || target_zone == O_EYES)
|
|
return 0
|
|
|
|
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
|
if(coverage_check(user, target, affected, tool))
|
|
return 0
|
|
|
|
return affected && affected.open >= FLESH_RETRACTED && (affected.status & ORGAN_DEAD)
|
|
|
|
/datum/surgery_step/necrotic/fix_dead_tissue //Debridement
|
|
surgery_name = "Remove Dead Tissue"
|
|
allowed_tools = list(
|
|
/obj/item/surgical/scalpel = 100, \
|
|
/obj/item/material/knife = 75, \
|
|
/obj/item/material/shard = 50, \
|
|
)
|
|
|
|
min_duration = 110
|
|
max_duration = 160
|
|
|
|
/datum/surgery_step/necrotic/fix_dead_tissue/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
|
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
|
return affected && affected.open >= 1 && (affected.status & ORGAN_DEAD) && !affected.remove_necrosis
|
|
|
|
/datum/surgery_step/necrotic/fix_dead_tissue/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
|
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
|
user.visible_message(span_filter_notice("[user] starts cutting away necrotic tissue in [target]'s [affected.name] with \the [tool].") , \
|
|
span_filter_notice("You start cutting away necrotic tissue in [target]'s [affected.name] with \the [tool]."))
|
|
user.balloon_alert_visible("starts cutting away necrotic tissue in [target]'s [affected.name]", "cutting away necrotic issue in \the [affected.name]")
|
|
target.custom_pain("The pain in [affected.name] is unbearable!", 100)
|
|
..()
|
|
|
|
/datum/surgery_step/necrotic/fix_dead_tissue/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
|
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
|
user.visible_message(span_notice("[user] has cut away necrotic tissue in [target]'s [affected.name] with \the [tool]."), \
|
|
span_notice("You have cut away necrotic tissue in [target]'s [affected.name] with \the [tool]."))
|
|
user.balloon_alert_visible("cuts away necrotic tissue in [target]'s [affected.name]", "cut away necrotic tissue in \the [affected.name]")
|
|
affected.remove_necrosis = 1
|
|
|
|
/datum/surgery_step/necrotic/fix_dead_tissue/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
|
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
|
user.visible_message(span_danger("[user]'s hand slips, slicing an artery inside [target]'s [affected.name] with \the [tool]!"), \
|
|
span_danger("Your hand slips, slicing an artery inside [target]'s [affected.name] with \the [tool]!"))
|
|
user.balloon_alert_visible("slips, slicing an artery inside [target]'s [affected.name]", "your hand slips, slicing an artery inside \the [affected.name]")
|
|
affected.createwound(CUT, 20, 1)
|
|
|
|
///////////////////////////////////////////////////////////////
|
|
// Necrosis Surgery Step 2
|
|
///////////////////////////////////////////////////////////////
|
|
/datum/surgery_step/necrotic/treat_necrosis
|
|
surgery_name = "Treat Necrosis"
|
|
priority = 2
|
|
allowed_tools = list(
|
|
/obj/item/reagent_containers/dropper = 100,
|
|
/obj/item/reagent_containers/glass/bottle = 75,
|
|
/obj/item/reagent_containers/glass/beaker = 75,
|
|
/obj/item/reagent_containers/spray = 50,
|
|
/obj/item/reagent_containers/glass/bucket = 50,
|
|
)
|
|
|
|
can_infect = 0
|
|
blood_level = 0
|
|
|
|
min_duration = 50
|
|
max_duration = 60
|
|
|
|
/datum/surgery_step/necrotic/treat_necrosis/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
|
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
|
var/obj/item/reagent_containers/container = tool
|
|
if(!istype(container))
|
|
return FALSE
|
|
if(!container.reagents.has_reagent(REAGENT_ID_PERIDAXON))
|
|
return FALSE
|
|
return ..() && affected.remove_necrosis >= 1
|
|
|
|
/datum/surgery_step/necrotic/treat_necrosis/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
|
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
|
user.visible_message(span_filter_notice("[user] starts applying medication to the affected tissue in [target]'s [affected.name] with \the [tool].") , \
|
|
span_filter_notice("You start applying medication to the affected tissue in [target]'s [affected.name] with \the [tool]."))
|
|
user.balloon_alert_visible("starts applying medication to the affected tissue in [target]'s [affected.name]", "applying medication to the affected tissue in \the [affected.name]")
|
|
target.custom_pain("Something in your [affected.name] is causing you a lot of pain!", 50)
|
|
..()
|
|
|
|
/datum/surgery_step/necrotic/treat_necrosis/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
|
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
|
|
|
if (!istype(tool, /obj/item/reagent_containers))
|
|
return
|
|
|
|
var/obj/item/reagent_containers/container = tool
|
|
|
|
var/trans = container.reagents.trans_to_mob(target, container.amount_per_transfer_from_this, CHEM_BLOOD) //technically it's contact, but the reagents are being applied to internal tissue
|
|
if (trans > 0)
|
|
affected.germ_level = 0 //CURE THE INFECTION
|
|
affected.status &= ~ORGAN_DEAD
|
|
affected.owner.update_icons_body()
|
|
|
|
user.visible_message(span_notice("[user] applies [trans] units of the solution to affected tissue in [target]'s [affected.name]."), \
|
|
span_notice("You apply [trans] units of the solution to affected tissue in [target]'s [affected.name] with \the [tool]."))
|
|
user.balloon_alert_visible("applies [trans] units of the solution to affected tissue in [target]'s [affected.name]", "applied [trans] units of the solution to afected tissue in [affected.name]")
|
|
affected.remove_necrosis = 0
|
|
|
|
/datum/surgery_step/necrotic/treat_necrosis/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
|
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
|
|
|
if (!istype(tool, /obj/item/reagent_containers))
|
|
return
|
|
|
|
var/obj/item/reagent_containers/container = tool
|
|
|
|
var/trans = container.reagents.trans_to_mob(target, container.amount_per_transfer_from_this, CHEM_BLOOD)
|
|
|
|
user.visible_message(span_danger("[user]'s hand slips, applying [trans] units of the solution to the wrong place in [target]'s [affected.name] with the [tool]!") , \
|
|
span_danger("Your hand slips, applying [trans] units of the solution to the wrong place in [target]'s [affected.name] with the [tool]!"))
|
|
user.balloon_alert_visible("slips, applying [trans] units of the solution to the wrong place in [target]'s [affected.name]",
|
|
"your hand slips, applying [trans] units of the solution to the wrong place in \the [affected.name]")
|
|
|
|
//no damage or anything, just wastes medicine
|
|
|
|
///////////////////////////////////////////////////////////////
|
|
// Necrosis Surgery Alternative Step 2
|
|
///////////////////////////////////////////////////////////////
|
|
|
|
/datum/surgery_step/necrotic/rejuvenate_dead_tissue
|
|
surgery_name = "Rejuvenate Dead Tissue"
|
|
allowed_tools = list(/obj/item/surgical/bioregen = 100)
|
|
|
|
min_duration = 110
|
|
max_duration = 160
|
|
|
|
/datum/surgery_step/necrotic/rejuvenate_dead_tissue/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
|
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
|
return ..() && affected.remove_necrosis == 1
|
|
|
|
/datum/surgery_step/necrotic/rejuvenate_dead_tissue/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
|
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
|
user.visible_message(span_filter_notice("[user] starts rejuvenating necrotic tissue in [target]'s [affected.name] with \the [tool].") , \
|
|
span_filter_notice("You start rejuvenating necrotic tissue in [target]'s [affected.name] with \the [tool]."))
|
|
user.balloon_alert_visible("starts rejuvenating necrotic tissue in [target]'s [affected.name]", "rejuvenating necrotic tissue in \the [affected.name]")
|
|
target.custom_pain("The pain in [affected.name] is unbearable!", 100)
|
|
..()
|
|
|
|
/datum/surgery_step/necrotic/rejuvenate_dead_tissue/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
|
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
|
user.visible_message(span_notice("[user] has rejuvenated necrotic tissue in [target]'s [affected.name] with \the [tool]."), \
|
|
span_notice("You have rejuvenated necrotic tissue in [target]'s [affected.name] with \the [tool]."))
|
|
user.balloon_alert_visible("rejuvenated necrotic tissue in [target]'s [affected.name]", "rejuvenated necrotic tissue in \the [affected.name]")
|
|
affected.remove_necrosis = 2
|
|
|
|
/datum/surgery_step/necrotic/rejuvenate_dead_tissue/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
|
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
|
user.visible_message(span_danger("[user]'s hand slips, bruising the muscle inside of [target]'s [affected.name] with \the [tool]!"), \
|
|
span_danger("Your hand slips, bruising the muscle inside of [target]'s [affected.name] with \the [tool]!"))
|
|
user.balloon_alert_visible("slips, bruising the muscle inside of [target]'s [affected.name]", "your hand slips, bruising the muscle inside of \the [affected.name]")
|
|
affected.createwound(BRUISE, 20, 1)
|
|
|
|
///////////////////////////////////////////////////////////////
|
|
// Necrosis Surgery Step 3
|
|
///////////////////////////////////////////////////////////////
|
|
/datum/surgery_step/necrotic/rearrange_dead_tissue
|
|
surgery_name = "Rearrange Tissue"
|
|
allowed_tools = list(
|
|
/obj/item/surgical/hemostat = 100, \
|
|
/obj/item/stack/cable_coil = 75, \
|
|
/obj/item/assembly/mousetrap = 20
|
|
)
|
|
min_duration = 110
|
|
max_duration = 160
|
|
|
|
/datum/surgery_step/necrotic/rearrange_dead_tissue/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
|
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
|
return ..() && affected.remove_necrosis == 2
|
|
|
|
/datum/surgery_step/necrotic/rearrange_dead_tissue/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
|
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
|
user.visible_message(span_filter_notice("[user] starts rearranging rejuvinated tissue in [target]'s [affected.name] with \the [tool].") , \
|
|
span_filter_notice("You start rearranging rejuvinated tissue in [target]'s [affected.name] with \the [tool]."))
|
|
user.balloon_alert_visible("starts rearranging rejuvinated tissue in [target]'s [affected.name]", "rearranging rejuvinated tissue in \the [affected.name]")
|
|
target.custom_pain("The pain in [affected.name] is unbearable!", 100)
|
|
..()
|
|
|
|
/datum/surgery_step/necrotic/rearrange_dead_tissue/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
|
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
|
user.visible_message(span_notice("[user] has rearranging rejuvinated tissue in [target]'s [affected.name] with \the [tool]."), \
|
|
span_notice("You have rearranging rejuvinated tissue in [target]'s [affected.name] with \the [tool]."))
|
|
user.balloon_alert_visible("rearranging rejuvinated tissue in [target]'s [affected.name]", "rearranging rejuvinated tissue in \the [affected.name]")
|
|
affected.remove_necrosis = 3
|
|
|
|
/datum/surgery_step/necrotic/rearrange_dead_tissue/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
|
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
|
user.visible_message(span_danger("[user]'s hand slips, slicing the fresh tissue on [target]'s [affected.name] with \the [tool]!"), \
|
|
span_danger("Your hand slips, slicing the fresh tissue on [target]'s [affected.name] with \the [tool]!"))
|
|
user.balloon_alert_visible("slips, slicing the fresh tissue on [target]'s [affected.name]", "your hand slips, slicing the fresh tissue on \the [affected.name]")
|
|
affected.createwound(CUT, 10, 1)
|
|
|
|
///////////////////////////////////////////////////////////////
|
|
// Necrosis Surgery Step 4
|
|
///////////////////////////////////////////////////////////////
|
|
/datum/surgery_step/necrotic/fix_necrotic_vessel
|
|
surgery_name = "Reroute Blood Vessels"
|
|
allowed_tools = list(
|
|
/obj/item/surgical/bioregen = 100, \
|
|
/obj/item/surgical/FixOVein = 100, \
|
|
/obj/item/stack/cable_coil = 75
|
|
)
|
|
|
|
min_duration = 110
|
|
max_duration = 160
|
|
|
|
/datum/surgery_step/necrotic/fix_necrotic_vessel/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
|
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
|
return ..() && affected.remove_necrosis == 3
|
|
|
|
/datum/surgery_step/necrotic/fix_necrotic_vessel/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
|
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
|
user.visible_message(span_filter_notice("[user] starts rerouting the vessels in [target]'s [affected.name] with \the [tool].") , \
|
|
span_filter_notice("You start rerouting the vessels in [target]'s [affected.name] with \the [tool]."))
|
|
user.balloon_alert_visible("starts rerouting the vessels in [target]'s [affected.name]", "rerouting vessels in \the [affected.name]")
|
|
target.custom_pain("The pain in [affected.name] is unbearable!", 100)
|
|
..()
|
|
|
|
/datum/surgery_step/necrotic/fix_necrotic_vessel/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
|
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
|
user.visible_message(span_notice("[user] has rerouted the vessels in [target]'s [affected.name] with \the [tool]."), \
|
|
span_notice("You have rerouted the vessels in [target]'s [affected.name] with \the [tool]."))
|
|
user.balloon_alert_visible("rerouted the vessels in [target]'s [affected.name]", "rerouted the vessels in \the [affected.name]")
|
|
|
|
//the actual heal stuffs
|
|
affected.germ_level = 0
|
|
affected.status &= ~ORGAN_DEAD
|
|
affected.owner.update_icons_body()
|
|
affected.remove_necrosis = 0
|
|
|
|
/datum/surgery_step/necrotic/fix_necrotic_vessel/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
|
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
|
user.visible_message(span_danger("[user]'s hand slips, slicing the fresh tissue on [target]'s [affected.name] with \the [tool]!"), \
|
|
span_danger("Your hand slips, slicing the fresh tissue on [target]'s [affected.name] with \the [tool]!"))
|
|
user.balloon_alert_visible("slips, slicing the fresh tissue on [target]'s [affected.name]", "your hand slips, slicing the fresh tissue on \the [affected.name]")
|
|
affected.createwound(CUT, 10, 1)
|