mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-05-17 20:30:46 +01:00
9a8b885d38
* Scannable rework Makes scannable have tiers. WIP * Some more adjustments * Scanning * Bodyscanner * Some more fixes Fixes amatoxin Fixes synap not processing when drank Makes fakedeath show up as braindeath, not massive O2 loss. Makes zombie and lich powder show time of death properly * Scanners for fakedeath * This too * Refactors bloodloss * rounding
678 lines
30 KiB
Plaintext
678 lines
30 KiB
Plaintext
// These medical issues are designed to be simple, custom medical issues that can be created on the fly by GMs.
|
|
// Designed to be more simple than diseases, they use a separate system.
|
|
// They are not designed to replace any existing medical work, just allow GMs to make them up for events
|
|
|
|
/datum/medical_issue
|
|
var/name = "medical issue"
|
|
var/mob/living/carbon/human/owner //Who is affected by this issue? Who's it attached to?
|
|
var/advscan = 0 //The required level of advanced scan to see this issue with health analysers, set to 4 to disable.
|
|
var/showscanner = FALSE //Should this issue show up on body scanners?
|
|
|
|
var/obj/item/organ/affectedorgan //Which organ is this attached to?
|
|
|
|
var/damagetype //What sort of damage should this deal to the owner?
|
|
var/damagestrength //How much damage should this deal over time to the owner?
|
|
var/maxdamage = 300 //What is the maximum amount of damage it can cause?
|
|
var/damageorgan = FALSE //Should this damage the organ it's attached to or the body in general?
|
|
|
|
var/cure_reagent //Which reagent cures this issue, if any?
|
|
var/datum/surgery_step/cure_surgery //Which surgery step can be used to cure this?
|
|
var/unhealth = 100 //The amount of health the issue has, depleted by reagent
|
|
var/reagent_strength = 10 //How much health the reagent will remove per processing
|
|
var/advscan_cure = SCANNABLE_BENEFICIAL //What level of advanced scan is required to reveal the cure?
|
|
|
|
var/symptom_text //Messages relayed to the patient about their symptoms
|
|
var/symptom_affect //Visible effects on the patient such as vomiting or weakness
|
|
|
|
/datum/medical_issue/proc/handle_effects()
|
|
if(!owner || !affectedorgan)
|
|
return
|
|
if(!istype(owner) || !istype(affectedorgan))
|
|
return
|
|
|
|
if(!(affectedorgan in owner.organs) && !(affectedorgan in owner.internal_organs))
|
|
return
|
|
|
|
if(unhealth <= 0)
|
|
cure_issue()
|
|
|
|
if(damagestrength)
|
|
handle_damage()
|
|
|
|
if(cure_reagent && reagent_strength)
|
|
handle_curing()
|
|
|
|
if(symptom_text)
|
|
if(prob(1))
|
|
to_chat(owner, span_danger("[symptom_text]"))
|
|
|
|
if(symptom_affect)
|
|
handle_symptoms()
|
|
|
|
/datum/medical_issue/proc/cure_issue()
|
|
LAZYREMOVE(affectedorgan.medical_issues,src)
|
|
qdel(src)
|
|
|
|
/datum/medical_issue/proc/handle_damage()
|
|
if(damagestrength)
|
|
if(damageorgan)
|
|
var/maxtotal = max(maxdamage,affectedorgan.damage) //We don't want it to heal damage that's above the max by this
|
|
affectedorgan.damage = max((affectedorgan.damage + damagestrength),maxtotal)
|
|
else
|
|
switch(damagetype)
|
|
if(BRUTE)
|
|
if(maxdamage >= owner.getBruteLoss())
|
|
owner.adjustBruteLoss(damagestrength)
|
|
if(BURN)
|
|
if(maxdamage >= owner.getFireLoss())
|
|
owner.adjustFireLoss(damagestrength)
|
|
if(OXY)
|
|
if(maxdamage >= owner.getOxyLoss())
|
|
owner.adjustFireLoss(damagestrength)
|
|
if(TOX)
|
|
if(maxdamage >= owner.getToxLoss())
|
|
owner.adjustToxLoss(damagestrength)
|
|
if(CLONE)
|
|
if(maxdamage >= owner.getCloneLoss())
|
|
owner.adjustCloneLoss(damagestrength)
|
|
if(HALLOSS)
|
|
if(maxdamage >= owner.getHalLoss())
|
|
owner.adjustHalLoss(damagestrength)
|
|
|
|
/datum/medical_issue/proc/handle_curing()
|
|
for(var/datum/reagent/R in owner.reagents.reagent_list)
|
|
if(R.name == cure_reagent)
|
|
unhealth = unhealth - reagent_strength
|
|
for(var/datum/reagent/R in owner.ingested.reagent_list)
|
|
if(R.name == cure_reagent)
|
|
unhealth = unhealth - reagent_strength
|
|
|
|
/datum/medical_issue/proc/handle_symptoms()
|
|
switch(symptom_affect)
|
|
if("vomit")
|
|
if(prob(5))
|
|
owner.vomit(10)
|
|
if("temporary weakness")
|
|
if(prob(5))
|
|
owner.AdjustWeakened(5)
|
|
if("permanent weakness")
|
|
owner.SetWeakened(max(owner.weakened,10))
|
|
if("temporary sleeping")
|
|
if(prob(5))
|
|
owner.AdjustSleeping(5)
|
|
if("permanent sleeping")
|
|
owner.SetSleeping(max(owner.sleeping+10,10))
|
|
if("jittery")
|
|
if(owner.get_jittery() < 100)
|
|
owner.make_jittery(100)
|
|
if("paralysed")
|
|
owner.SetParalysis(max(owner.paralysis,10))
|
|
if("cough")
|
|
if(prob(3))
|
|
owner.emote("cough")
|
|
if("confusion")
|
|
owner.SetConfused(max(owner.confused,10))
|
|
|
|
// Proc for setting all this up for GMs
|
|
|
|
/mob/living/carbon/human/proc/custom_medical_issue(var/mob/user)
|
|
|
|
var/list/external_organ_surgeries = list("bone reinforcement","remove growths","redirect blood vessels","extract object","flesh graft")
|
|
var/list/internal_organ_surgeries = list("remove growths","redirect blood vessels","close holes","ultrasound","reoxygenate tissue")
|
|
|
|
var/issue_name = tgui_input_text(user,"What would you like to call this medical issue?","Name")
|
|
var/list/organ_options = list()
|
|
for(var/obj/item/organ/E in src.organs)
|
|
organ_options |= E
|
|
for(var/obj/item/organ/I in src.internal_organs)
|
|
organ_options |= I
|
|
var/obj/item/organ/issue_organ = tgui_input_list(user,"Which organ should this issue be attached to?","Affect organ",organ_options)
|
|
if(!issue_organ)
|
|
return
|
|
|
|
var/damage = tgui_alert(user, "Should this apply damage?","Damage",list("Yes","No","Cancel"))
|
|
if(!damage || (damage == "Cancel"))
|
|
return
|
|
var/damage_organ
|
|
var/damage_value_pre
|
|
var/damage_value
|
|
var/damage_max
|
|
var/damage_type
|
|
if(damage == "Yes")
|
|
damage_organ = tgui_alert(user, "Should this damage the organ or body?","Damage",list("Organ","Body"))
|
|
if(!damage_organ)
|
|
return
|
|
damage_value_pre = tgui_input_number(user,"How much damage should this apply per processing. Low values are recommended, automatically divided by 10.","Damage",1)
|
|
damage_value = damage_value_pre / 10
|
|
damage_max = tgui_input_number(user,"What is the maximum about of damage this issue can apply? It will not damage above this value.","Damage",300)
|
|
if(damage_organ == "Body")
|
|
damage_type = tgui_input_list(user, "Should this damage the organ or body?","Damage",list(BRUTE,BURN,OXY,TOX,CLONE,HALLOSS),BRUTE)
|
|
if(!damage_type)
|
|
return
|
|
|
|
var/cure_q = tgui_alert(user, "Should this be cured by a reagent, surgery or organ removal only? Note that organ removal will always be an option if it's not a vital body part.","Cure",list("Reagent","Surgery","Removal","Cancel"))
|
|
if(!cure_q || (cure_q == "Cancel"))
|
|
return
|
|
var/datum/reagent/cure_reagent
|
|
var/cure_reagent_ID
|
|
var/cure_surgery
|
|
if(cure_q == "Reagent")
|
|
var/list/chem_list = typesof(/datum/reagent)
|
|
cure_reagent = tgui_input_list(user, "Which reagent should be the cure?", "Cure", chem_list)
|
|
if(!cure_reagent)
|
|
return
|
|
cure_reagent_ID = cure_reagent.name
|
|
|
|
if(cure_q == "Surgery")
|
|
if(istype(issue_organ,/obj/item/organ/internal))
|
|
cure_surgery = tgui_input_list(user, "Which surgery step should cure it?", "Cure", internal_organ_surgeries)
|
|
else
|
|
cure_surgery = tgui_input_list(user, "Which surgery step should cure it?", "Cure", external_organ_surgeries)
|
|
if(!cure_surgery)
|
|
return
|
|
|
|
var/list/possible_symptoms = list("vomit","temporary weakness","permanent weakness","temporary sleeping","permanent sleeping","jittery","paralysed","cough","confusion","None")
|
|
|
|
var/symptom_text = tgui_input_text(user,"What text should be displayed to the affected patient about their symptoms?","Symptoms")
|
|
var/symptom_affect = tgui_input_list(user, "What observable symptom should they display?", "Symptoms", possible_symptoms)
|
|
if(!symptom_affect)
|
|
return
|
|
|
|
var/scanner_show = tgui_alert(user, "Should this show on body scanners?","Diagnosis",list("Yes","No","Cancel"))
|
|
if(!scanner_show || (scanner_show == "Cancel"))
|
|
return
|
|
|
|
var/scanner_strength = tgui_input_number(user,"What level of health analyser is needed to see this? 0 for standard, 1 for improved, 2 for advanced, 3 for phasic and 4 for impossible.","Diagnosis",0)
|
|
var/advscan_cure = tgui_input_number(user, "What level of health analyser is required to display the cure? 0 for standard, 1 for improved, 2 for advanced, 3 for phasic and 4 for impossible.","Diagnosis",0)
|
|
|
|
var/datum/medical_issue/M = new()
|
|
LAZYADD(issue_organ.medical_issues,M)
|
|
M.affectedorgan = issue_organ
|
|
M.name = issue_name
|
|
M.owner = src
|
|
M.advscan = scanner_strength
|
|
M.advscan_cure = advscan_cure
|
|
M.showscanner = scanner_show
|
|
|
|
if(damage == "Yes")
|
|
if(damage_organ == "Body")
|
|
M.damagetype = damage_type
|
|
M.damageorgan = FALSE
|
|
else
|
|
M.damageorgan = TRUE
|
|
M.damagestrength = damage_value
|
|
M.maxdamage = damage_max
|
|
|
|
if(cure_reagent)
|
|
M.cure_reagent = cure_reagent_ID
|
|
if(cure_surgery)
|
|
M.cure_surgery = cure_surgery
|
|
|
|
if(symptom_text)
|
|
M.symptom_text = symptom_text
|
|
if(symptom_affect != "None")
|
|
M.symptom_affect = symptom_affect
|
|
|
|
to_chat(user,"[issue_name] applied to [issue_organ] inside of [src]!")
|
|
if(damage == "Yes")
|
|
to_chat(user,"[issue_name] will damage the [damage_organ] with a strength of [damage_value], up to a maximum of [damage_max].")
|
|
if(cure_reagent)
|
|
to_chat(user,"[issue_name] can be cured with [cure_reagent_ID].")
|
|
else if(cure_surgery)
|
|
to_chat(user,"[issue_name] can be cured via the [cure_surgery] surgery.")
|
|
else
|
|
to_chat(user,"[issue_name] can only be cured by amputation or removal of \the [issue_organ]!")
|
|
|
|
/mob/living/carbon/human/proc/clear_medical_issue(var/mob/user)
|
|
var/list/all_issues = list()
|
|
for(var/obj/item/organ/O in contents)
|
|
for(var/datum/medical_issue/MI in O.medical_issues)
|
|
all_issues |= MI
|
|
if(!all_issues.len)
|
|
to_chat(user,"No custom medical issues found in [src]!")
|
|
return
|
|
var/broad = tgui_alert(user, "Would you like to clear all custom medical issues or a specific one?","Damage",list("All","One","Cancel"))
|
|
if(!broad || (broad == "Cancel"))
|
|
return
|
|
|
|
if(broad == "All")
|
|
for(var/datum/medical_issue/MI in all_issues)
|
|
MI.cure_issue()
|
|
to_chat(user,"[MI.name] removed from [MI.affectedorgan] in [src].")
|
|
|
|
if(broad == "One")
|
|
var/datum/medical_issue/one_issue = tgui_input_list(user, "Which issue would you like to remove?", "Symptoms", all_issues)
|
|
if(!one_issue)
|
|
return
|
|
one_issue.cure_issue()
|
|
to_chat(user,"[one_issue.name] removed from [one_issue.affectedorgan] in [src].")
|
|
|
|
|
|
///////////////////////////////////////////////////////////////
|
|
//////////////External Organ Surgeries/////////////////////////
|
|
///////////////////////////////////////////////////////////////
|
|
|
|
/datum/surgery_step/medical_issue
|
|
|
|
/datum/surgery_step/medical_issue/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
|
if(!ishuman(target))
|
|
return FALSE
|
|
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
|
if(!affected) //happens if we try to target an organ that was amputated.
|
|
return FALSE
|
|
if(coverage_check(user, target, affected, tool))
|
|
return FALSE
|
|
if(!affected.medical_issues)
|
|
return FALSE
|
|
return TRUE
|
|
|
|
/datum/surgery_step/medical_issue/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, damaging the bone in [target]'s [affected.name] with \the [tool]!") , \
|
|
span_danger("Your hand slips, damaging the bone in [target]'s [affected.name] with \the [tool]!"))
|
|
user.balloon_alert_visible("slips, damaging the bone.", "your hand slips, damaging the bone")
|
|
affected.createwound(BRUISE, 5)
|
|
|
|
//Bone-gel
|
|
/datum/surgery_step/medical_issue/strengthen_bone
|
|
surgery_name = "Reinforce Bone"
|
|
allowed_tools = list(
|
|
/obj/item/surgical/bonegel = 100
|
|
)
|
|
|
|
allowed_procs = list(IS_SCREWDRIVER = 75)
|
|
|
|
can_infect = 1
|
|
blood_level = 1
|
|
|
|
min_duration = 50
|
|
max_duration = 60
|
|
|
|
/datum/surgery_step/medical_issue/strengthen_bone/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
|
if(!..(user, target, target_zone, tool))
|
|
return FALSE
|
|
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
|
for(var/datum/medical_issue/MI in affected.medical_issues)
|
|
if(MI.cure_surgery == "bone reinforcement")
|
|
return affected && (affected.robotic < ORGAN_ROBOT) && affected.open >= FLESH_RETRACTED
|
|
|
|
/datum/surgery_step/medical_issue/strengthen_bone/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_notice("[user] is beginning to reinforce the bone in [target]'s [affected.name] in place with \the [tool].") , \
|
|
span_notice("You are beginning to reinforce the bone in [target]'s [affected.name] in place with \the [tool]."))
|
|
user.balloon_alert_visible("begins to reinforce the bone.", "reinforcing the bone.")
|
|
target.custom_pain("The pain in your [affected.name] is going to make you pass out!", 50)
|
|
..()
|
|
|
|
/datum/surgery_step/medical_issue/strengthen_bone/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)
|
|
for(var/datum/medical_issue/MI in affected.medical_issues)
|
|
if(MI.cure_surgery == "bone reinforcement")
|
|
user.visible_message(span_notice("[user] reinforces the bone in [target]'s [affected.name] with \the [tool]."), \
|
|
span_notice("You reinforce the bone in [target]'s [affected.name] with \the [tool]."))
|
|
user.balloon_alert_visible("reinforces the bone.", "bone reinforced.")
|
|
MI.cure_issue()
|
|
|
|
//scalpel
|
|
/datum/surgery_step/medical_issue/remove_growth
|
|
surgery_name = "Remove Growth"
|
|
allowed_tools = list(
|
|
/obj/item/surgical/scalpel = 100
|
|
)
|
|
|
|
can_infect = 1
|
|
blood_level = 1
|
|
|
|
min_duration = 50
|
|
max_duration = 60
|
|
|
|
/datum/surgery_step/medical_issue/remove_growth/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
|
if(!..(user, target, target_zone, tool))
|
|
return FALSE
|
|
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
|
for(var/datum/medical_issue/MI in affected.medical_issues)
|
|
if(MI.cure_surgery == "remove growths")
|
|
return affected && (affected.robotic < ORGAN_ROBOT) && affected.open >= FLESH_RETRACTED
|
|
return FALSE
|
|
|
|
/datum/surgery_step/medical_issue/remove_growth/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_notice("[user] is beginning to remove growths in [target]'s [affected.name] with \the [tool].") , \
|
|
span_notice("You are beginning to remove growths in [target]'s [affected.name] with \the [tool]."))
|
|
user.balloon_alert_visible("begins to remove growths.", "removing growths.")
|
|
target.custom_pain("The pain in your [affected.name] is going to make you pass out!", 50)
|
|
..()
|
|
|
|
/datum/surgery_step/medical_issue/remove_growth/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)
|
|
for(var/datum/medical_issue/MI in affected.medical_issues)
|
|
if(MI.cure_surgery == "remove growths")
|
|
user.visible_message(span_notice("[user] removes the growths in [target]'s [affected.name] with \the [tool]."), \
|
|
span_notice("You removes the growths in [target]'s [affected.name] with \the [tool]."))
|
|
user.balloon_alert_visible("removes the growth.", "removed growth.")
|
|
MI.cure_issue()
|
|
|
|
//fixovein
|
|
/datum/surgery_step/medical_issue/redirect_vessels
|
|
surgery_name = "Redirect Blood Vessels"
|
|
allowed_tools = list(
|
|
/obj/item/surgical/FixOVein = 100
|
|
)
|
|
|
|
can_infect = 1
|
|
blood_level = 1
|
|
|
|
min_duration = 50
|
|
max_duration = 60
|
|
|
|
/datum/surgery_step/medical_issue/redirect_vessels/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
|
if(!..(user, target, target_zone, tool))
|
|
return FALSE
|
|
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
|
for(var/datum/medical_issue/MI in affected.medical_issues)
|
|
if(MI.cure_surgery == "redirect blood vessels")
|
|
return affected && (affected.robotic < ORGAN_ROBOT) && affected.open >= FLESH_RETRACTED
|
|
return FALSE
|
|
|
|
/datum/surgery_step/medical_issue/redirect_vessels/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_notice("[user] is beginning to redirect blood vessels in [target]'s [affected.name] with \the [tool].") , \
|
|
span_notice("You are beginning to redirect blood vessels in [target]'s [affected.name] with \the [tool]."))
|
|
user.balloon_alert_visible("begins to redirect blood vessels.", "redirecting blood vessels.")
|
|
target.custom_pain("The pain in your [affected.name] is going to make you pass out!", 50)
|
|
..()
|
|
|
|
/datum/surgery_step/medical_issue/redirect_vessels/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)
|
|
for(var/datum/medical_issue/MI in affected.medical_issues)
|
|
if(MI.cure_surgery == "redirect blood vessels")
|
|
user.visible_message(span_notice("[user] redirected blood vessels in [target]'s [affected.name] with \the [tool]."), \
|
|
span_notice("You redirected blood vessels in [target]'s [affected.name] with \the [tool]."))
|
|
user.balloon_alert_visible("redirected blood vessels.", "redirected blood vessels.")
|
|
MI.cure_issue()
|
|
|
|
//hemostat
|
|
/datum/surgery_step/medical_issue/extract_object
|
|
surgery_name = "Extract Object"
|
|
allowed_tools = list(
|
|
/obj/item/surgical/hemostat = 100
|
|
)
|
|
|
|
can_infect = 1
|
|
blood_level = 1
|
|
|
|
min_duration = 50
|
|
max_duration = 60
|
|
|
|
/datum/surgery_step/medical_issue/extract_object/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
|
if(!..(user, target, target_zone, tool))
|
|
return FALSE
|
|
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
|
for(var/datum/medical_issue/MI in affected.medical_issues)
|
|
if(MI.cure_surgery == "extract object")
|
|
return affected && (affected.robotic < ORGAN_ROBOT) && affected.open >= FLESH_RETRACTED
|
|
return FALSE
|
|
|
|
/datum/surgery_step/medical_issue/extract_object/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_notice("[user] is beginning to remove objects in [target]'s [affected.name] with \the [tool].") , \
|
|
span_notice("You are beginning to remove objects in [target]'s [affected.name] with \the [tool]."))
|
|
user.balloon_alert_visible("begins to remove objects.", "removing objects.")
|
|
target.custom_pain("The pain in your [affected.name] is going to make you pass out!", 50)
|
|
..()
|
|
|
|
/datum/surgery_step/medical_issue/extract_object/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)
|
|
for(var/datum/medical_issue/MI in affected.medical_issues)
|
|
if(MI.cure_surgery == "extract object")
|
|
user.visible_message(span_notice("[user] removes the objects in [target]'s [affected.name] with \the [tool]."), \
|
|
span_notice("You removes the objects in [target]'s [affected.name] with \the [tool]."))
|
|
user.balloon_alert_visible("removes the objects.", "removed objects.")
|
|
MI.cure_issue()
|
|
|
|
//brute kit
|
|
/datum/surgery_step/medical_issue/flesh_graft
|
|
surgery_name = "Graft Flesh"
|
|
allowed_tools = list(
|
|
/obj/item/stack/medical/advanced/bruise_pack = 100
|
|
)
|
|
|
|
can_infect = 1
|
|
blood_level = 1
|
|
|
|
min_duration = 50
|
|
max_duration = 60
|
|
|
|
/datum/surgery_step/medical_issue/flesh_graft/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
|
if(!..(user, target, target_zone, tool))
|
|
return FALSE
|
|
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
|
for(var/datum/medical_issue/MI in affected.medical_issues)
|
|
if(MI.cure_surgery == "flesh graft")
|
|
return affected && (affected.robotic < ORGAN_ROBOT) && affected.open >= FLESH_RETRACTED
|
|
return FALSE
|
|
|
|
/datum/surgery_step/medical_issue/flesh_graft/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_notice("[user] is beginning to graft flesh in [target]'s [affected.name] with \the [tool].") , \
|
|
span_notice("You are beginning to graft flesh in [target]'s [affected.name] with \the [tool]."))
|
|
user.balloon_alert_visible("begins to graft flesh.", "grafting flesh.")
|
|
target.custom_pain("The pain in your [affected.name] is going to make you pass out!", 50)
|
|
..()
|
|
|
|
/datum/surgery_step/medical_issue/flesh_graft/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)
|
|
for(var/datum/medical_issue/MI in affected.medical_issues)
|
|
if(MI.cure_surgery == "flesh graft")
|
|
user.visible_message(span_notice("[user] grafts the flesh in [target]'s [affected.name] with \the [tool]."), \
|
|
span_notice("You grafts the flesh in [target]'s [affected.name] with \the [tool]."))
|
|
user.balloon_alert_visible("grafted flesh.", "grafted flesh.")
|
|
MI.cure_issue()
|
|
|
|
///////////////////Internal Organs
|
|
|
|
//scalpel
|
|
/datum/surgery_step/medical_issue/remove_growth_internal
|
|
surgery_name = "Remove Growth on Organ"
|
|
allowed_tools = list(
|
|
/obj/item/surgical/scalpel = 100
|
|
)
|
|
|
|
can_infect = 1
|
|
blood_level = 1
|
|
|
|
min_duration = 50
|
|
max_duration = 60
|
|
|
|
/datum/surgery_step/medical_issue/remove_growth_internal/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
|
if(!..(user, target, target_zone, tool))
|
|
return FALSE
|
|
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
|
for(var/obj/item/organ/internal/I in affected.internal_organs)
|
|
for(var/datum/medical_issue/MI in I.medical_issues)
|
|
if(MI.cure_surgery == "remove growths")
|
|
return affected && (affected.robotic < ORGAN_ROBOT) && affected.open >= FLESH_RETRACTED
|
|
return FALSE
|
|
|
|
/datum/surgery_step/medical_issue/remove_growth_internal/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_notice("[user] is beginning to remove growths in [target]'s [affected.name] with \the [tool].") , \
|
|
span_notice("You are beginning to remove growths in [target]'s [affected.name] with \the [tool]."))
|
|
user.balloon_alert_visible("begins to remove growths.", "removing growths.")
|
|
target.custom_pain("The pain in your [affected.name] is going to make you pass out!", 50)
|
|
..()
|
|
|
|
/datum/surgery_step/medical_issue/remove_growth_internal/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)
|
|
for(var/obj/item/organ/internal/I in affected.internal_organs)
|
|
for(var/datum/medical_issue/MI in I.medical_issues)
|
|
if(MI.cure_surgery == "remove growths")
|
|
user.visible_message(span_notice("[user] removes the growths in [target]'s [affected.name] with \the [tool]."), \
|
|
span_notice("You removes the growths in [target]'s [affected.name] with \the [tool]."))
|
|
user.balloon_alert_visible("removes the growth.", "removed growth.")
|
|
MI.cure_issue()
|
|
|
|
//fixovein
|
|
/datum/surgery_step/medical_issue/redirect_vessels_internal
|
|
surgery_name = "Redirect Blood Vessels"
|
|
allowed_tools = list(
|
|
/obj/item/surgical/FixOVein = 100
|
|
)
|
|
|
|
can_infect = 1
|
|
blood_level = 1
|
|
|
|
min_duration = 50
|
|
max_duration = 60
|
|
|
|
/datum/surgery_step/medical_issue/redirect_vessels_internal/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
|
if(!..(user, target, target_zone, tool))
|
|
return FALSE
|
|
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
|
for(var/obj/item/organ/internal/I in affected.internal_organs)
|
|
for(var/datum/medical_issue/MI in I.medical_issues)
|
|
if(MI.cure_surgery == "redirect blood vessels")
|
|
return affected && (affected.robotic < ORGAN_ROBOT) && affected.open >= FLESH_RETRACTED
|
|
return FALSE
|
|
|
|
/datum/surgery_step/medical_issue/redirect_vessels_internal/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_notice("[user] is beginning to redirect blood vessels in [target]'s [affected.name] with \the [tool].") , \
|
|
span_notice("You are beginning to redirect blood vessels in [target]'s [affected.name] with \the [tool]."))
|
|
user.balloon_alert_visible("begins to redirect blood vessels.", "redirecting blood vessels.")
|
|
target.custom_pain("The pain in your [affected.name] is going to make you pass out!", 50)
|
|
..()
|
|
|
|
/datum/surgery_step/medical_issue/redirect_vessels_internal/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)
|
|
for(var/obj/item/organ/internal/I in affected.internal_organs)
|
|
for(var/datum/medical_issue/MI in I.medical_issues)
|
|
if(MI.cure_surgery == "redirect blood vessels")
|
|
user.visible_message(span_notice("[user] redirected blood vessels in [target]'s [affected.name] with \the [tool]."), \
|
|
span_notice("You redirected blood vessels in [target]'s [affected.name] with \the [tool]."))
|
|
user.balloon_alert_visible("redirected blood vessels.", "redirected blood vessels.")
|
|
MI.cure_issue()
|
|
|
|
//cautery
|
|
/datum/surgery_step/medical_issue/close_holes
|
|
surgery_name = "Close Holes"
|
|
allowed_tools = list(
|
|
/obj/item/surgical/cautery = 100
|
|
)
|
|
|
|
can_infect = 1
|
|
blood_level = 1
|
|
|
|
min_duration = 50
|
|
max_duration = 60
|
|
|
|
/datum/surgery_step/medical_issue/close_holes/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
|
if(!..(user, target, target_zone, tool))
|
|
return FALSE
|
|
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
|
for(var/obj/item/organ/internal/I in affected.internal_organs)
|
|
for(var/datum/medical_issue/MI in I.medical_issues)
|
|
if(MI.cure_surgery == "close holes")
|
|
return affected && (affected.robotic < ORGAN_ROBOT) && affected.open >= FLESH_RETRACTED
|
|
return FALSE
|
|
|
|
/datum/surgery_step/medical_issue/close_holes/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_notice("[user] is beginning to close holes in [target]'s [affected.name] with \the [tool].") , \
|
|
span_notice("You are beginning to close holes in [target]'s [affected.name] with \the [tool]."))
|
|
user.balloon_alert_visible("begins to close holes.", "closing holes.")
|
|
target.custom_pain("The pain in your [affected.name] is going to make you pass out!", 50)
|
|
..()
|
|
|
|
/datum/surgery_step/medical_issue/close_holes/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)
|
|
for(var/obj/item/organ/internal/I in affected.internal_organs)
|
|
for(var/datum/medical_issue/MI in I.medical_issues)
|
|
if(MI.cure_surgery == "close holes")
|
|
user.visible_message(span_notice("[user] closed holes in [target]'s [affected.name] with \the [tool]."), \
|
|
span_notice("You closed holes in [target]'s [affected.name] with \the [tool]."))
|
|
user.balloon_alert_visible("closed holes.", "closed holes.")
|
|
MI.cure_issue()
|
|
|
|
//cautery
|
|
/datum/surgery_step/medical_issue/ultrasound
|
|
surgery_name = "Ultrasound"
|
|
allowed_tools = list(
|
|
/obj/item/autopsy_scanner = 100
|
|
)
|
|
|
|
can_infect = 1
|
|
blood_level = 1
|
|
|
|
min_duration = 50
|
|
max_duration = 60
|
|
|
|
/datum/surgery_step/medical_issue/ultrasound/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
|
if(!..(user, target, target_zone, tool))
|
|
return FALSE
|
|
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
|
for(var/obj/item/organ/internal/I in affected.internal_organs)
|
|
for(var/datum/medical_issue/MI in I.medical_issues)
|
|
if(MI.cure_surgery == "ultrasound")
|
|
return affected && (affected.robotic < ORGAN_ROBOT) && affected.open >= FLESH_RETRACTED
|
|
return FALSE
|
|
|
|
/datum/surgery_step/medical_issue/ultrasound/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_notice("[user] is beginning to break up material using ultrasound in [target]'s [affected.name] with \the [tool].") , \
|
|
span_notice("You are beginning to break up material using ultrasound in [target]'s [affected.name] with \the [tool]."))
|
|
user.balloon_alert_visible("begins to break up material using ultrasound.", "breaking up material using ultrasound.")
|
|
target.custom_pain("The pain in your [affected.name] is going to make you pass out!", 50)
|
|
..()
|
|
|
|
/datum/surgery_step/medical_issue/ultrasound/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)
|
|
for(var/obj/item/organ/internal/I in affected.internal_organs)
|
|
for(var/datum/medical_issue/MI in I.medical_issues)
|
|
if(MI.cure_surgery == "ultrasound")
|
|
user.visible_message(span_notice("[user] broke up material with ultrasound in [target]'s [affected.name] with \the [tool]."), \
|
|
span_notice("You broke up material with ultrasound in [target]'s [affected.name] with \the [tool]."))
|
|
user.balloon_alert_visible("broke up material with ultrasound.", "broke up material with ultrasound.")
|
|
MI.cure_issue()
|
|
|
|
//cautery
|
|
/datum/surgery_step/medical_issue/reoxygenate_tissue
|
|
surgery_name = "Reoxygenate Tissue"
|
|
allowed_tools = list(
|
|
/obj/item/surgical/bioregen = 100
|
|
)
|
|
|
|
can_infect = 1
|
|
blood_level = 1
|
|
|
|
min_duration = 50
|
|
max_duration = 60
|
|
|
|
/datum/surgery_step/medical_issue/reoxygenate_tissue/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
|
if(!..(user, target, target_zone, tool))
|
|
return FALSE
|
|
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
|
for(var/obj/item/organ/internal/I in affected.internal_organs)
|
|
for(var/datum/medical_issue/MI in I.medical_issues)
|
|
if(MI.cure_surgery == "reoxygenate tissue")
|
|
return affected && (affected.robotic < ORGAN_ROBOT) && affected.open >= FLESH_RETRACTED
|
|
return FALSE
|
|
|
|
/datum/surgery_step/medical_issue/reoxygenate_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_notice("[user] is beginning to reoxygenate tissue in [target]'s [affected.name] with \the [tool].") , \
|
|
span_notice("You are beginning to reoxygenate tissue in [target]'s [affected.name] with \the [tool]."))
|
|
user.balloon_alert_visible("begins to reoxygenate tissue.", "reoxygenating tissue.")
|
|
target.custom_pain("The pain in your [affected.name] is going to make you pass out!", 50)
|
|
..()
|
|
|
|
/datum/surgery_step/medical_issue/reoxygenate_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)
|
|
for(var/obj/item/organ/internal/I in affected.internal_organs)
|
|
for(var/datum/medical_issue/MI in I.medical_issues)
|
|
if(MI.cure_surgery == "reoxygenate tissue")
|
|
user.visible_message(span_notice("[user] reoxygenated tissue in [target]'s [affected.name] with \the [tool]."), \
|
|
span_notice("You reoxygenated tissue in [target]'s [affected.name] with \the [tool]."))
|
|
user.balloon_alert_visible("reoxygenated tissue.", "reoxygenated tissue.")
|
|
MI.cure_issue()
|