mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-09 16:12:17 +00:00
[MIRROR] More surgery tweaks and fixes (#12054)
Co-authored-by: Cameron Lennox <killer65311@gmail.com>
This commit is contained in:
committed by
GitHub
parent
77ec7cd6e4
commit
f72988f992
5
code/__defines/surgery.dm
Normal file
5
code/__defines/surgery.dm
Normal file
@@ -0,0 +1,5 @@
|
||||
//Defines for when surgery steps are performed. These are used to track progress through surgeries and how 'open' we are.
|
||||
#define INCISION_MADE 1
|
||||
#define FLESH_RETRACTED 2
|
||||
#define BONE_CUT 2.5
|
||||
#define BONE_RETRACTED 3
|
||||
@@ -55,7 +55,7 @@
|
||||
return
|
||||
if(owner.client && (owner.client.prefs.muted & MUTE_IC))
|
||||
return
|
||||
if(owner.paralysis <= 1 && (H.pulse == PULSE_NORM ? (prob(1)) : (prob(50))))
|
||||
if(owner.paralysis <= 1 && (H.pulse <= PULSE_NORM ? (prob(1)) : (prob(50))))
|
||||
owner.make_jittery(30 + rand(10, 30))
|
||||
owner.emote(pick(motor_tics))
|
||||
|
||||
|
||||
@@ -284,7 +284,7 @@
|
||||
return 0
|
||||
for(var/datum/medical_issue/MI in affected.medical_issues)
|
||||
if(MI.cure_surgery == "bone reinforcement")
|
||||
return affected && (affected.robotic < ORGAN_ROBOT) && affected.open >= 2
|
||||
return affected && (affected.robotic < ORGAN_ROBOT) && affected.open >= FLESH_RETRACTED
|
||||
return 0
|
||||
|
||||
/datum/surgery_step/medical_issue/strengthen_bone/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
@@ -325,7 +325,7 @@
|
||||
return 0
|
||||
for(var/datum/medical_issue/MI in affected.medical_issues)
|
||||
if(MI.cure_surgery == "remove growths")
|
||||
return affected && (affected.robotic < ORGAN_ROBOT) && affected.open >= 2
|
||||
return affected && (affected.robotic < ORGAN_ROBOT) && affected.open >= FLESH_RETRACTED
|
||||
return 0
|
||||
|
||||
/datum/surgery_step/medical_issue/remove_growth/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
@@ -366,7 +366,7 @@
|
||||
return 0
|
||||
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 >= 2
|
||||
return affected && (affected.robotic < ORGAN_ROBOT) && affected.open >= FLESH_RETRACTED
|
||||
return 0
|
||||
|
||||
/datum/surgery_step/medical_issue/redirect_vessels/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
@@ -407,7 +407,7 @@
|
||||
return 0
|
||||
for(var/datum/medical_issue/MI in affected.medical_issues)
|
||||
if(MI.cure_surgery == "extract object")
|
||||
return affected && (affected.robotic < ORGAN_ROBOT) && affected.open >= 2
|
||||
return affected && (affected.robotic < ORGAN_ROBOT) && affected.open >= FLESH_RETRACTED
|
||||
return 0
|
||||
|
||||
/datum/surgery_step/medical_issue/extract_object/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
@@ -448,7 +448,7 @@
|
||||
return 0
|
||||
for(var/datum/medical_issue/MI in affected.medical_issues)
|
||||
if(MI.cure_surgery == "flesh graft")
|
||||
return affected && (affected.robotic < ORGAN_ROBOT) && affected.open >= 2
|
||||
return affected && (affected.robotic < ORGAN_ROBOT) && affected.open >= FLESH_RETRACTED
|
||||
return 0
|
||||
|
||||
/datum/surgery_step/medical_issue/flesh_graft/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
@@ -492,7 +492,7 @@
|
||||
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 >= 2
|
||||
return affected && (affected.robotic < ORGAN_ROBOT) && affected.open >= FLESH_RETRACTED
|
||||
return 0
|
||||
|
||||
/datum/surgery_step/medical_issue/remove_growth_internal/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
@@ -535,7 +535,7 @@
|
||||
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 >= 2
|
||||
return affected && (affected.robotic < ORGAN_ROBOT) && affected.open >= FLESH_RETRACTED
|
||||
return 0
|
||||
|
||||
/datum/surgery_step/medical_issue/redirect_vessels_internal/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
@@ -578,7 +578,7 @@
|
||||
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 >= 2
|
||||
return affected && (affected.robotic < ORGAN_ROBOT) && affected.open >= FLESH_RETRACTED
|
||||
return 0
|
||||
|
||||
/datum/surgery_step/medical_issue/close_holes/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
@@ -621,7 +621,7 @@
|
||||
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 >= 2
|
||||
return affected && (affected.robotic < ORGAN_ROBOT) && affected.open >= FLESH_RETRACTED
|
||||
return 0
|
||||
|
||||
/datum/surgery_step/medical_issue/ultrasound/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
@@ -664,7 +664,7 @@
|
||||
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 >= 2
|
||||
return affected && (affected.robotic < ORGAN_ROBOT) && affected.open >= FLESH_RETRACTED
|
||||
return 0
|
||||
|
||||
/datum/surgery_step/medical_issue/reoxygenate_tissue/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
|
||||
@@ -79,7 +79,6 @@
|
||||
outgoing_melee_damage_percent = 0.9 // 10% less melee damage.
|
||||
disable_duration_percent = 1.25 // Stuns last 25% longer.
|
||||
incoming_healing_percent = 0.9 // -10% to all healing
|
||||
slowdown = 0.5 // Slower, by a smidge.
|
||||
evasion = -5 // 5% easier to hit.
|
||||
accuracy_dispersion = 1 // Inaccurate trait level of tile dispersion.
|
||||
|
||||
@@ -93,16 +92,6 @@
|
||||
|
||||
return ..()
|
||||
|
||||
/datum/modifier/franken_sickness/tick()
|
||||
if(holder.stat != DEAD)
|
||||
if(ishuman(holder))
|
||||
var/mob/living/carbon/human/F = holder
|
||||
if(F.can_defib)
|
||||
F.can_defib = 0
|
||||
|
||||
/datum/modifier/franken_sickness/on_expire() //Not permanent, but its child is.
|
||||
holder.add_modifier(/datum/modifier/franken_recovery, 0)
|
||||
|
||||
/datum/modifier/franken_recovery //When Franken_Sickness expires, this will be permanently applied in its place.
|
||||
name = "neural recovery"
|
||||
desc = "You feel out of touch, as your central nervous system is still recovering from being repaired."
|
||||
|
||||
@@ -1216,7 +1216,7 @@
|
||||
if(src.pulse)
|
||||
to_chat(usr, span_notice("[self ? "You have a" : "[src] has a"] pulse! Counting..."))
|
||||
else
|
||||
to_chat(usr, span_danger("[src] has no pulse!")) //it is REALLY UNLIKELY that a dead person would check his own pulse
|
||||
to_chat(usr, span_danger("[src] has no pulse!"))
|
||||
return
|
||||
|
||||
to_chat(usr, span_filter_notice("You must[self ? "" : " both"] remain still until counting is finished."))
|
||||
|
||||
@@ -186,20 +186,23 @@ BLOOD_VOLUME_SURVIVE = 40
|
||||
///Second, we process internal bleeding.
|
||||
for(var/datum/wound/internal_bleeding/W in temp.wounds)
|
||||
blood_loss_divisor = blood_loss_divisor+10 //IB is slower bloodloss than normal.
|
||||
var/bicardose = reagents.get_reagent_amount(REAGENT_ID_BICARIDINE)
|
||||
var/inaprovaline = reagents.get_reagent_amount(REAGENT_ID_INAPROVALINE)
|
||||
var/bicardose
|
||||
if(reagents.get_reagent_amount(REAGENT_ID_BICARIDINE) || reagents.get_reagent_amount(REAGENT_ID_BICARIDAZE))
|
||||
bicardose = TRUE
|
||||
var/inaprovaline
|
||||
if(reagents.get_reagent_amount(REAGENT_ID_INAPROVALINE) || reagents.get_reagent_amount(REAGENT_ID_INAPROVALAZE))
|
||||
inaprovaline = TRUE
|
||||
var/myeldose = reagents.get_reagent_amount(REAGENT_ID_MYELAMINE)
|
||||
if(!(W.can_autoheal() || (bicardose && inaprovaline) || myeldose)) //bicaridine and inaprovaline stop internal wounds from growing bigger with time, unless it is so small that it is already healing
|
||||
W.open_wound(0.1)
|
||||
if(prob(1))
|
||||
custom_pain("You feel a stabbing pain in your [temp.name]!", 50)
|
||||
if(CE_STABLE in chem_effects)
|
||||
if((CE_STABLE in chem_effects) || myeldose)
|
||||
blood_loss_divisor = max(blood_loss_divisor + 30, 1) //Inaprovaline is great on internal wounds.
|
||||
if(temp.applied_pressure) //Putting pressure on the afflicted wound helps stop the arterial bleeding.
|
||||
if(ishuman(temp.applied_pressure))
|
||||
var/mob/living/carbon/human/H = temp.applied_pressure
|
||||
H.bloody_hands(src, 0)
|
||||
blood_loss_divisor += 30 //If you're putting pressure on that limb due to there being an external bleed there, you apply some pressure to the internal bleed as well.
|
||||
blood_loss_divisor += 30
|
||||
if(W.clamped)
|
||||
blood_loss_divisor = blood_loss_divisor * 10 //We hemostatted the internal bleeding. Bloodloss is 10 times slower.
|
||||
remove_blood(W.damage/blood_loss_divisor) //line should possibly be moved to handle_blood, so all the bleeding stuff is in one place. //Hi. 2025 here. Just did that. ~Diana
|
||||
|
||||
///Thirdly, we check to see if the limb is bleeding EXTERNALLY
|
||||
|
||||
@@ -6,7 +6,7 @@ GLOBAL_LIST_BOILERPLATE(all_brain_organs, /obj/item/organ/internal/brain)
|
||||
desc = "A piece of juicy meat found in a person's head."
|
||||
organ_tag = O_BRAIN
|
||||
parent_organ = BP_HEAD
|
||||
vital = 1
|
||||
vital = TRUE
|
||||
icon_state = "brain2"
|
||||
force = 1.0
|
||||
w_class = ITEMSIZE_SMALL
|
||||
@@ -177,7 +177,6 @@ GLOBAL_LIST_BOILERPLATE(all_brain_organs, /obj/item/organ/internal/brain)
|
||||
parent_organ = BP_HEAD
|
||||
icon = 'icons/mob/alien.dmi'
|
||||
icon_state = "chitin"
|
||||
vital = 1
|
||||
can_assist = FALSE
|
||||
|
||||
/obj/item/organ/internal/brain/xeno
|
||||
|
||||
@@ -48,14 +48,7 @@
|
||||
parent_organ = BP_HEAD
|
||||
icon_state = "brain_prosthetic"
|
||||
organ_tag = "stack"
|
||||
vital = 1
|
||||
var/backup_time = 0
|
||||
var/datum/mind/backup
|
||||
|
||||
/obj/item/organ/internal/stack/process()
|
||||
if(owner && owner.stat != DEAD && !is_broken())
|
||||
backup_time = world.time
|
||||
if(owner.mind) backup = owner.mind
|
||||
vital = TRUE
|
||||
|
||||
/obj/item/organ/internal/stack/vox/stack
|
||||
name = "vox cortical stack"
|
||||
|
||||
@@ -140,7 +140,7 @@ var/list/organ_cache = list()
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
handle_organ_mod_special(TRUE)
|
||||
if(owner && vital)
|
||||
owner.can_defib = 0
|
||||
owner.can_defib = FALSE
|
||||
owner.death()
|
||||
|
||||
/obj/item/organ/proc/adjust_germ_level(var/amount) // Unless you're setting germ level directly to 0, use this proc instead
|
||||
|
||||
@@ -736,13 +736,15 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
handle_germ_effects()
|
||||
|
||||
/obj/item/organ/external/proc/handle_germ_sync()
|
||||
if(owner && isbelly(owner.loc)) //If we're in a belly, just skip infection spreading. This leads to extended vore scenes killing via infection.
|
||||
return
|
||||
var/antibiotics = owner.chem_effects[CE_ANTIBIOTIC]
|
||||
for(var/datum/wound/W in wounds)
|
||||
//Open wounds can become infected
|
||||
if (owner.germ_level > W.germ_level && W.infection_check())
|
||||
if(owner.germ_level > W.germ_level && W.infection_check())
|
||||
W.germ_level++
|
||||
|
||||
if (antibiotics < ANTIBIO_NORM)
|
||||
if(!antibiotics)
|
||||
for(var/datum/wound/W in wounds)
|
||||
//Infected wounds raise the organ's germ level
|
||||
if (W.germ_level > germ_level)
|
||||
|
||||
@@ -32,8 +32,8 @@
|
||||
min_broken_damage = 50
|
||||
w_class = ITEMSIZE_HUGE
|
||||
body_part = UPPER_TORSO
|
||||
vital = 1
|
||||
cannot_amputate = 1
|
||||
vital = TRUE
|
||||
cannot_amputate = TRUE
|
||||
parent_organ = null
|
||||
gendered_icon = 1
|
||||
|
||||
@@ -242,5 +242,5 @@
|
||||
amputation_point = "branch"
|
||||
joint = "structural ligament"
|
||||
dislocated = -1
|
||||
vital = 0
|
||||
vital = FALSE
|
||||
slot_flags = SLOT_BELT
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
icon_state = "scell"
|
||||
organ_tag = O_CELL
|
||||
parent_organ = BP_TORSO
|
||||
vital = 1
|
||||
vital = TRUE
|
||||
var/defib_timer = 1 // This sits in the brain organ slot, but is not a brain.
|
||||
|
||||
/obj/item/organ/internal/cell/Initialize(mapload, internal)
|
||||
@@ -34,7 +34,7 @@
|
||||
name = "brain interface"
|
||||
organ_tag = O_BRAIN
|
||||
parent_organ = BP_HEAD
|
||||
vital = 1
|
||||
vital = TRUE
|
||||
var/brain_type = /obj/item/mmi
|
||||
var/obj/item/mmi/stored_mmi
|
||||
robotic = ORGAN_ASSISTED
|
||||
|
||||
@@ -51,10 +51,10 @@
|
||||
|
||||
/obj/item/organ/external/head/unbreakable/slime //They don't need this anymore.
|
||||
nonsolid = 1
|
||||
cannot_gib = 0
|
||||
vital = 0
|
||||
cannot_gib = FALSE
|
||||
vital = FALSE
|
||||
max_damage = 45 //ChompEdit matching our changes to broken bones for less squishy people.
|
||||
encased = 0
|
||||
encased = FALSE
|
||||
spread_dam = 1
|
||||
|
||||
/*
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
min_broken_damage = 60 // CHOMPEdit: Increase all min_broken_damage (Ribs should take more force to break)
|
||||
w_class = ITEMSIZE_HUGE
|
||||
body_part = UPPER_TORSO
|
||||
vital = 1
|
||||
vital = TRUE
|
||||
amputation_point = "spine"
|
||||
joint = "neck"
|
||||
dislocated = -1
|
||||
@@ -62,7 +62,7 @@
|
||||
min_broken_damage = 50 // CHOMPEdit: Increase all min_broken_damage
|
||||
w_class = ITEMSIZE_LARGE
|
||||
body_part = LOWER_TORSO
|
||||
vital = 1
|
||||
vital = TRUE
|
||||
parent_organ = BP_TORSO
|
||||
amputation_point = "lumbar"
|
||||
joint = "hip"
|
||||
@@ -275,7 +275,7 @@
|
||||
min_broken_damage = 50 // CHOMPEdit: Increase all min_broken_damage
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
body_part = HEAD
|
||||
vital = 1
|
||||
vital = TRUE
|
||||
parent_organ = BP_TORSO
|
||||
joint = "jaw"
|
||||
amputation_point = "neck"
|
||||
|
||||
@@ -3,11 +3,27 @@
|
||||
// BONE SURGERY //
|
||||
//////////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/surgery_step/bones
|
||||
|
||||
/datum/surgery_step/bones/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.status & ORGAN_BROKEN))
|
||||
return FALSE
|
||||
if(coverage_check(user, target, affected, tool))
|
||||
return FALSE
|
||||
if(affected.cannot_break && !affected.encased)
|
||||
return FALSE
|
||||
if(affected.robotic >= ORGAN_ROBOT)
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
///////////////////////////////////////////////////////////////
|
||||
// Bone Glue Surgery
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/surgery_step/glue_bone
|
||||
/datum/surgery_step/bones/glue_bone
|
||||
surgery_name = "Glue Bone"
|
||||
allowed_tools = list(
|
||||
/obj/item/surgical/bonegel = 100
|
||||
@@ -21,15 +37,11 @@
|
||||
min_duration = 30 //CHOMPedit
|
||||
max_duration = 40 //CHOMPedit
|
||||
|
||||
/datum/surgery_step/glue_bone/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(!ishuman(target))
|
||||
return 0
|
||||
/datum/surgery_step/bones/glue_bone/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)
|
||||
if(coverage_check(user, target, affected, tool))
|
||||
return 0
|
||||
return affected && (affected.robotic < ORGAN_ROBOT) && affected.open >= 2 && affected.stage == 0
|
||||
return ..() && affected.open >= FLESH_RETRACTED && affected.stage == 0
|
||||
|
||||
/datum/surgery_step/glue_bone/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
/datum/surgery_step/bones/glue_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)
|
||||
if (affected.stage == 0)
|
||||
user.visible_message(span_notice("[user] starts applying medication to the damaged bones in [target]'s [affected.name] with \the [tool].") , \
|
||||
@@ -38,14 +50,14 @@
|
||||
target.custom_pain("Something in your [affected.name] is causing you a lot of pain!", 50)
|
||||
..()
|
||||
|
||||
/datum/surgery_step/glue_bone/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
/datum/surgery_step/bones/glue_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)
|
||||
user.visible_message(span_notice("[user] applies some [tool] to [target]'s bone in [affected.name]"), \
|
||||
span_notice("You apply some [tool] to [target]'s bone in [affected.name] with \the [tool]."))
|
||||
user.balloon_alert_visible("applies [tool] to [target]'s bone.", "applying [tool] to [target]'s bone.")
|
||||
affected.stage = 1
|
||||
|
||||
/datum/surgery_step/glue_bone/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
/datum/surgery_step/bones/glue_bone/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, smearing [tool] in the incision in [target]'s [affected.name]!") , \
|
||||
span_danger("Your hand slips, smearing [tool] in the incision in [target]'s [affected.name]!"))
|
||||
@@ -55,7 +67,7 @@
|
||||
// Bone Setting Surgery
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/surgery_step/set_bone
|
||||
/datum/surgery_step/bones/set_bone
|
||||
surgery_name = "Set Bone"
|
||||
allowed_tools = list(
|
||||
/obj/item/surgical/bonesetter = 100
|
||||
@@ -66,15 +78,11 @@
|
||||
min_duration = 30 //CHOMPedit
|
||||
max_duration = 45 //CHOMPedit
|
||||
|
||||
/datum/surgery_step/set_bone/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(!ishuman(target))
|
||||
return 0
|
||||
/datum/surgery_step/bones/set_bone/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)
|
||||
if(coverage_check(user, target, affected, tool))
|
||||
return 0
|
||||
return affected && affected.organ_tag != BP_HEAD && !(affected.robotic >= ORGAN_ROBOT) && affected.open >= 2 && affected.stage == 1
|
||||
return ..() && affected.organ_tag != BP_HEAD && affected.open >= FLESH_RETRACTED && affected.stage == 1
|
||||
|
||||
/datum/surgery_step/set_bone/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
/datum/surgery_step/bones/set_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 set the bone in [target]'s [affected.name] in place with \the [tool].") , \
|
||||
span_notice("You are beginning to set the bone in [target]'s [affected.name] in place with \the [tool]."))
|
||||
@@ -82,20 +90,14 @@
|
||||
target.custom_pain("The pain in your [affected.name] is going to make you pass out!", 50)
|
||||
..()
|
||||
|
||||
/datum/surgery_step/set_bone/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
/datum/surgery_step/bones/set_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)
|
||||
if (affected.status & ORGAN_BROKEN)
|
||||
user.visible_message(span_notice("[user] sets the bone in [target]'s [affected.name] in place with \the [tool]."), \
|
||||
span_notice("You set the bone in [target]'s [affected.name] in place with \the [tool]."))
|
||||
user.balloon_alert_visible("sets the bone in place.", "bone set in place.")
|
||||
affected.stage = 2
|
||||
else
|
||||
user.visible_message("[user] sets the bone in [target]'s [affected.name] " + span_danger("in the WRONG place with \the [tool]."), \
|
||||
"You set the bone in [target]'s [affected.name] " + span_danger("in the WRONG place with \the [tool]."))
|
||||
user.balloon_alert_visible("sets the bone in the WRONG place.", "bone set in the WRONG place.")
|
||||
affected.fracture()
|
||||
user.visible_message(span_notice("[user] sets the bone in [target]'s [affected.name] in place with \the [tool]."), \
|
||||
span_notice("You set the bone in [target]'s [affected.name] in place with \the [tool]."))
|
||||
user.balloon_alert_visible("sets the bone in place.", "bone set in place.")
|
||||
affected.stage = 2
|
||||
|
||||
/datum/surgery_step/set_bone/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
/datum/surgery_step/bones/set_bone/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]!"))
|
||||
@@ -106,7 +108,7 @@
|
||||
// Skull Mending Surgery
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/surgery_step/mend_skull
|
||||
/datum/surgery_step/bones/mend_skull
|
||||
surgery_name = "Mend Skull"
|
||||
allowed_tools = list(
|
||||
/obj/item/surgical/bonesetter = 100
|
||||
@@ -117,41 +119,37 @@
|
||||
min_duration = 40 //CHOMPedit
|
||||
max_duration = 50 //CHOMPedit
|
||||
|
||||
/datum/surgery_step/mend_skull/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(!ishuman(target))
|
||||
return 0
|
||||
/datum/surgery_step/bones/mend_skull/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)
|
||||
if(coverage_check(user, target, affected, tool))
|
||||
return 0
|
||||
return affected && affected.organ_tag == BP_HEAD && (affected.robotic < ORGAN_ROBOT) && affected.open >= 2 && affected.stage == 1
|
||||
return ..() && affected.organ_tag == BP_HEAD && affected.open >= FLESH_RETRACTED && affected.stage == 1
|
||||
|
||||
/datum/surgery_step/mend_skull/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
/datum/surgery_step/bones/mend_skull/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message(span_notice("[user] is beginning to piece together [target]'s skull with \the [tool].") , \
|
||||
span_notice("You are beginning to piece together [target]'s skull with \the [tool]."))
|
||||
user.balloon_alert_visible("pieces the skull together", "piecing skull together.")
|
||||
..()
|
||||
|
||||
/datum/surgery_step/mend_skull/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
/datum/surgery_step/bones/mend_skull/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] sets [target]'s skull with \the [tool].") , \
|
||||
span_notice("You set [target]'s skull with \the [tool]."))
|
||||
user.balloon_alert_visible("sets the skull back.", "skull set back.")
|
||||
affected.stage = 2
|
||||
|
||||
/datum/surgery_step/mend_skull/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
/datum/surgery_step/bones/mend_skull/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 [target]'s face with \the [tool]!") , \
|
||||
span_danger("Your hand slips, damaging [target]'s face with \the [tool]!"))
|
||||
user.balloon_alert_visible("slips, damaging [target]'s face", "your hand slips, damaging [target]'s face")
|
||||
var/obj/item/organ/external/head/h = affected
|
||||
h.createwound(BRUISE, 10)
|
||||
h.disfigured = 1
|
||||
h.disfigure()
|
||||
|
||||
///////////////////////////////////////////////////////////////
|
||||
// Bone Fixing Surgery
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/surgery_step/finish_bone
|
||||
/datum/surgery_step/bones/finish_bone
|
||||
surgery_name = "Finish Mending Bone"
|
||||
allowed_tools = list(
|
||||
/obj/item/surgical/bonegel = 100
|
||||
@@ -165,22 +163,18 @@
|
||||
min_duration = 30 //CHOMPedit
|
||||
max_duration = 30 //CHOMPedit
|
||||
|
||||
/datum/surgery_step/finish_bone/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(!ishuman(target))
|
||||
return 0
|
||||
/datum/surgery_step/bones/finish_bone/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)
|
||||
if(coverage_check(user, target, affected, tool))
|
||||
return 0
|
||||
return affected && affected.open >= 2 && !(affected.robotic >= ORGAN_ROBOT) && affected.stage == 2
|
||||
return ..() && affected.open >= FLESH_RETRACTED && affected.stage == 2
|
||||
|
||||
/datum/surgery_step/finish_bone/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
/datum/surgery_step/bones/finish_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] starts to finish mending the damaged bones in [target]'s [affected.name] with \the [tool]."), \
|
||||
span_notice("You start to finish mending the damaged bones in [target]'s [affected.name] with \the [tool]."))
|
||||
user.balloon_alert_visible("begins mending damaged bones.", "mending damaged bones.")
|
||||
..()
|
||||
|
||||
/datum/surgery_step/finish_bone/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
/datum/surgery_step/bones/finish_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)
|
||||
user.visible_message(span_notice("[user] has mended the damaged bones in [target]'s [affected.name] with \the [tool].") , \
|
||||
span_notice("You have mended the damaged bones in [target]'s [affected.name] with \the [tool].") )
|
||||
@@ -188,7 +182,7 @@
|
||||
affected.status &= ~ORGAN_BROKEN
|
||||
affected.stage = 0
|
||||
|
||||
/datum/surgery_step/finish_bone/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
/datum/surgery_step/bones/finish_bone/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, smearing [tool] in the incision in [target]'s [affected.name]!") , \
|
||||
span_danger("Your hand slips, smearing [tool] in the incision in [target]'s [affected.name]!"))
|
||||
@@ -198,7 +192,7 @@
|
||||
// Bone Clamp Surgery
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/surgery_step/clamp_bone
|
||||
/datum/surgery_step/bones/clamp_bone
|
||||
surgery_name = "Clamp Bone"
|
||||
allowed_tools = list(
|
||||
/obj/item/surgical/bone_clamp = 100
|
||||
@@ -210,15 +204,11 @@
|
||||
min_duration = 45 //CHOMPedit
|
||||
max_duration = 55 //CHOMPedit
|
||||
|
||||
/datum/surgery_step/clamp_bone/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(!ishuman(target))
|
||||
return 0
|
||||
/datum/surgery_step/bones/clamp_bone/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)
|
||||
if(coverage_check(user, target, affected, tool))
|
||||
return 0
|
||||
return affected && (affected.status & ORGAN_BROKEN) && (affected.robotic < ORGAN_ROBOT) && affected.open >= 2 && affected.stage == 0
|
||||
return ..() && affected.open >= FLESH_RETRACTED && affected.stage == 0
|
||||
|
||||
/datum/surgery_step/clamp_bone/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
/datum/surgery_step/bones/clamp_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)
|
||||
if (affected.stage == 0)
|
||||
user.visible_message(span_notice("[user] starts repairing the damaged bones in [target]'s [affected.name] with \the [tool].") , \
|
||||
@@ -227,14 +217,14 @@
|
||||
target.custom_pain("Something in your [affected.name] is causing you a lot of pain!", 50)
|
||||
..()
|
||||
|
||||
/datum/surgery_step/clamp_bone/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
/datum/surgery_step/bones/clamp_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)
|
||||
user.visible_message(span_notice("[user] sets the bone in [target]'s [affected.name] with \the [tool]."), \
|
||||
span_notice("You sets [target]'s bone in [affected.name] with \the [tool]."))
|
||||
user.balloon_alert_visible("sets the bone back in.", "bone set in.")
|
||||
affected.status &= ~ORGAN_BROKEN
|
||||
|
||||
/datum/surgery_step/clamp_bone/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
/datum/surgery_step/bones/clamp_bone/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]!"))
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
if(coverage_check(user, target, affected, tool))
|
||||
return 0
|
||||
return affected && !(affected.robotic >= ORGAN_ROBOT) && affected.encased && affected.open >= 2
|
||||
return affected && !(affected.robotic >= ORGAN_ROBOT) && affected.encased && affected.open >= FLESH_RETRACTED
|
||||
|
||||
///////////////////////////////////////////////////////////////
|
||||
// Rib Sawing Surgery
|
||||
@@ -148,7 +148,7 @@
|
||||
if(!ishuman(target))
|
||||
return
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
return (..() && affected && affected.open == 3)
|
||||
return (..() && affected && affected.open == BONE_RETRACTED)
|
||||
|
||||
/datum/surgery_step/open_encased/close/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(!ishuman(target))
|
||||
@@ -255,7 +255,7 @@
|
||||
if(!ishuman(target))
|
||||
return
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
return ..() && affected && affected.open >= 2 && affected.open < 3
|
||||
return ..() && affected && affected.open >= FLESH_RETRACTED && affected.open < BONE_RETRACTED
|
||||
|
||||
/datum/surgery_step/open_encased/advancedsaw_open/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(!ishuman(target))
|
||||
@@ -308,7 +308,7 @@
|
||||
if(!ishuman(target))
|
||||
return
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
return (..() && affected && affected.open == 3)
|
||||
return (..() && affected && affected.open == BONE_RETRACTED)
|
||||
|
||||
/datum/surgery_step/open_encased/advancedsaw_mend/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(!ishuman(target))
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
// COMMON STEPS //
|
||||
//////////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/surgery_step/generic/
|
||||
/datum/surgery_step/generic
|
||||
can_infect = 1
|
||||
|
||||
/datum/surgery_step/generic/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
@@ -43,7 +43,7 @@
|
||||
/datum/surgery_step/generic/cut_open/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(..())
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
return affected && affected.open == 0 && target_zone != O_MOUTH
|
||||
return affected && !affected.open && target_zone != O_MOUTH
|
||||
|
||||
/datum/surgery_step/generic/cut_open/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)
|
||||
@@ -58,7 +58,7 @@
|
||||
user.visible_message(span_notice("[user] has made an incision on [target]'s [affected.name] with \the [tool]."), \
|
||||
span_notice("You have made an incision on [target]'s [affected.name] with \the [tool]."),)
|
||||
user.balloon_alert_visible("opens an incision on [target]'s [affected.name]", "incision open on \the [affected.name]")
|
||||
affected.open = 1
|
||||
affected.open = INCISION_MADE
|
||||
|
||||
if(istype(target) && target.should_have_organ(O_HEART))
|
||||
affected.status |= ORGAN_BLEEDING
|
||||
@@ -93,7 +93,7 @@
|
||||
/datum/surgery_step/generic/cut_with_laser/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(..())
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
return affected && affected.open == 0 && target_zone != O_MOUTH
|
||||
return affected && !affected.open && target_zone != O_MOUTH
|
||||
|
||||
/datum/surgery_step/generic/cut_with_laser/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)
|
||||
@@ -105,7 +105,7 @@
|
||||
|
||||
/datum/surgery_step/generic/cut_with_laser/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)
|
||||
affected.open = 1
|
||||
affected.open = INCISION_MADE
|
||||
|
||||
affected.createwound(CUT, 1)
|
||||
var/clamp_chance = 0
|
||||
@@ -121,9 +121,6 @@
|
||||
user.visible_message(span_notice("[user] has made an incision on [target]'s [affected.name] with \the [tool], but blood is still escaping from the wound."), \
|
||||
span_notice("You have made an incision on [target]'s [affected.name] with \the [tool], but blood is still coming from the wound.."),)
|
||||
user.balloon_alert_visible("opens an incision on [target]'s [affected.name], blood still flowing", "incision open on \the [affected.name], but blood still flows")
|
||||
//Could be cleaner ...
|
||||
|
||||
spread_germs_to_organ(affected, user)
|
||||
|
||||
/datum/surgery_step/generic/cut_with_laser/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)
|
||||
@@ -152,7 +149,7 @@
|
||||
/datum/surgery_step/generic/incision_manager/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(..())
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
return affected && affected.open == 0 && target_zone != O_MOUTH
|
||||
return affected && !affected.open && target_zone != O_MOUTH
|
||||
|
||||
/datum/surgery_step/generic/incision_manager/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)
|
||||
@@ -167,14 +164,14 @@
|
||||
user.visible_message(span_notice("[user] has constructed a prepared incision on and within [target]'s [affected.name] with \the [tool]."), \
|
||||
span_notice("You have constructed a prepared incision on and within [target]'s [affected.name] with \the [tool]."),)
|
||||
user.balloon_alert_visible("constructs a prepared incision", "constructed prepared incision")
|
||||
affected.open = 1
|
||||
affected.open = INCISION_MADE
|
||||
|
||||
if(istype(target) && target.should_have_organ(O_HEART))
|
||||
affected.status |= ORGAN_BLEEDING
|
||||
|
||||
affected.createwound(CUT, 1)
|
||||
affected.organ_clamp()
|
||||
affected.open = 2
|
||||
affected.open = FLESH_RETRACTED
|
||||
|
||||
/datum/surgery_step/generic/incision_manager/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)
|
||||
@@ -202,7 +199,15 @@
|
||||
/datum/surgery_step/generic/clamp_bleeders/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(..())
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
return affected && affected.open && (affected.status & ORGAN_BLEEDING)
|
||||
if(!affected)
|
||||
return FALSE
|
||||
var/internally_bleeding = FALSE
|
||||
for(var/datum/wound/internal_bleeding/W in affected.wounds)
|
||||
if(W.clamped)
|
||||
continue
|
||||
internally_bleeding = TRUE
|
||||
break
|
||||
return affected && affected.open && ((affected.status & ORGAN_BLEEDING) || internally_bleeding)
|
||||
|
||||
/datum/surgery_step/generic/clamp_bleeders/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)
|
||||
@@ -218,7 +223,6 @@
|
||||
span_notice("You clamp bleeders in [target]'s [affected.name] with \the [tool]."))
|
||||
user.balloon_alert_visible("clamps bleeders", "clamped bleeders")
|
||||
affected.organ_clamp()
|
||||
spread_germs_to_organ(affected, user)
|
||||
|
||||
/datum/surgery_step/generic/clamp_bleeders/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)
|
||||
@@ -241,12 +245,12 @@
|
||||
allowed_procs = list(IS_CROWBAR = 75)
|
||||
|
||||
min_duration = 30
|
||||
max_duration = 30 //CHOMPedit
|
||||
max_duration = 30
|
||||
|
||||
/datum/surgery_step/generic/retract_skin/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(..())
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
return affected && affected.open == 1 //&& !(affected.status & ORGAN_BLEEDING)
|
||||
return affected && affected.open == INCISION_MADE
|
||||
|
||||
/datum/surgery_step/generic/retract_skin/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)
|
||||
@@ -286,7 +290,7 @@
|
||||
self_msgBall = "keeping the incision open on the lower abdomen."
|
||||
user.visible_message(msg, self_msg)
|
||||
user.balloon_alert_visible(msgBall, self_msgBall)
|
||||
affected.open = 2
|
||||
affected.open = FLESH_RETRACTED
|
||||
|
||||
/datum/surgery_step/generic/retract_skin/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)
|
||||
|
||||
@@ -11,13 +11,24 @@
|
||||
|
||||
/datum/surgery_step/brainstem/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(!ishuman(target))
|
||||
return 0
|
||||
return FALSE
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
if (!affected || (affected.robotic >= ORGAN_ROBOT) || !(affected.open >= 3))
|
||||
return 0
|
||||
if(!affected || (affected.robotic >= ORGAN_ROBOT))
|
||||
return FALSE
|
||||
//If our organ is encased (has a bone) the bone must be cut. If the organ is NOT encased (boneless) we can only get to encased == 2
|
||||
if(affected.open != (affected.encased ? 3 : 2))
|
||||
return FALSE
|
||||
if(coverage_check(user, target, affected, tool))
|
||||
return 0
|
||||
return target_zone == BP_HEAD
|
||||
return FALSE
|
||||
//Gets where our brain is located and allows us to do frankensurgery in the right location.
|
||||
var/obj/item/organ/internal/brain/sponge = locate(/obj/item/organ/internal/brain) in affected.internal_organs
|
||||
if(!sponge)
|
||||
return FALSE
|
||||
if(target_zone != sponge.parent_organ)
|
||||
return FALSE
|
||||
if((target.can_defib && !(sponge.status & ORGAN_DEAD)) && !target.op_stage.brainstem == 5) //Final step can be done after our can_defib step is set.
|
||||
return FALSE
|
||||
return target_zone == sponge.parent_organ
|
||||
|
||||
/////////////////////////////
|
||||
// Blood Vessel Mending
|
||||
@@ -35,7 +46,7 @@
|
||||
max_duration = 100
|
||||
|
||||
/datum/surgery_step/brainstem/mend_vessels/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
return ..() && target_zone == BP_HEAD && target.op_stage.brainstem == 0
|
||||
return ..() && target.op_stage.brainstem == 0
|
||||
|
||||
/datum/surgery_step/brainstem/mend_vessels/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message(span_filter_notice("[user] starts to mend the blood vessels on [target]'s brainstem with \the [tool]."), \
|
||||
@@ -73,10 +84,10 @@
|
||||
allowed_procs = list(IS_SCREWDRIVER = 75)
|
||||
|
||||
min_duration = 200 //Very. Very. Carefully.
|
||||
max_duration = 200 //CHOMPedit
|
||||
max_duration = 200
|
||||
|
||||
/datum/surgery_step/brainstem/drill_vertebrae/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
return ..() && target_zone == BP_HEAD && target.op_stage.brainstem == 1
|
||||
return ..() && target.op_stage.brainstem == 1
|
||||
|
||||
/datum/surgery_step/brainstem/drill_vertebrae/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message(span_filter_notice("[user] starts to drill around [target]'s brainstem with \the [tool]."), \
|
||||
@@ -100,9 +111,8 @@
|
||||
user.balloon_alert_visible("slips, shredding [target]'s brainstem", "your hand slips, shredding the brainstem.")
|
||||
affected.createwound(PIERCE, 10)
|
||||
target.AdjustParalysis(15)
|
||||
spawn()
|
||||
for(var/obj/item/organ/internal/brain/O in affected.internal_organs)
|
||||
O.take_damage(rand(5,10))
|
||||
for(var/obj/item/organ/internal/brain/O in affected.internal_organs)
|
||||
O.take_damage(rand(5,10))
|
||||
|
||||
/////////////////////////////
|
||||
// Bone Cleaning
|
||||
@@ -117,11 +127,11 @@
|
||||
|
||||
allowed_procs = list(IS_WIRECUTTER = 60)
|
||||
|
||||
min_duration = 90
|
||||
max_duration = 120
|
||||
min_duration = 100
|
||||
max_duration = 100
|
||||
|
||||
/datum/surgery_step/brainstem/clean_chips/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
return ..() && target_zone == BP_HEAD && target.op_stage.brainstem == 2
|
||||
return ..() && target.op_stage.brainstem == 2
|
||||
|
||||
/datum/surgery_step/brainstem/clean_chips/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message(span_filter_notice("[user] starts to pick around [target]'s brainstem for bone chips with \the [tool]."), \
|
||||
@@ -143,9 +153,8 @@
|
||||
user.balloon_alert_visible("slips, gouging [target]'s brainstem", "your hand slips, gouging the brainstem")
|
||||
affected.createwound(CUT, 5)
|
||||
target.AdjustParalysis(10)
|
||||
spawn()
|
||||
for(var/obj/item/organ/internal/brain/O in affected.internal_organs) //If there's more than one...
|
||||
O.take_damage(rand(1,10))
|
||||
for(var/obj/item/organ/internal/brain/O in affected.internal_organs) //If there's more than one...
|
||||
O.take_damage(rand(1,10))
|
||||
|
||||
/////////////////////////////
|
||||
// Spinal Cord Repair
|
||||
@@ -164,7 +173,7 @@
|
||||
max_duration = 100 //CHOMPedit
|
||||
|
||||
/datum/surgery_step/brainstem/mend_cord/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
return ..() && target_zone == BP_HEAD && target.op_stage.brainstem == 3
|
||||
return ..() && target.op_stage.brainstem == 3
|
||||
|
||||
/datum/surgery_step/brainstem/mend_cord/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message(span_filter_notice("[user] starts to fuse [target]'s spinal cord with \the [tool]."), \
|
||||
@@ -174,11 +183,10 @@
|
||||
|
||||
/datum/surgery_step/brainstem/mend_cord/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message(span_notice("[user] has fused [target]'s spinal cord with \the [tool].") , \
|
||||
span_notice(" You have fused [target]'s spinal cord with \the [tool]."),)
|
||||
span_notice("You have fused [target]'s spinal cord with \the [tool]."),)
|
||||
user.balloon_alert_visible("fused [target]'s spinal cord", "fused the spinal cord")
|
||||
target.op_stage.brainstem = 4
|
||||
target.AdjustParalysis(5)
|
||||
target.add_modifier(/datum/modifier/franken_sickness, 20 MINUTES)
|
||||
|
||||
/datum/surgery_step/brainstem/mend_cord/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)
|
||||
@@ -187,9 +195,8 @@
|
||||
user.balloon_alert_visible("slips, tearing [target]'s spinal cord", "your hand slips, tearing at the spinal cord")
|
||||
affected.createwound(PIERCE, 5)
|
||||
target.AdjustParalysis(20)
|
||||
spawn()
|
||||
for(var/obj/item/organ/internal/brain/O in affected.internal_organs)
|
||||
O.take_damage(rand(5,15)) //Down to the wire. Or rather, the cord.
|
||||
for(var/obj/item/organ/internal/brain/O in affected.internal_organs)
|
||||
O.take_damage(rand(5,15)) //Down to the wire. Or rather, the cord.
|
||||
|
||||
/////////////////////////////
|
||||
// Vertebrae repair
|
||||
@@ -204,10 +211,10 @@
|
||||
/obj/item/tape_roll = 50)
|
||||
|
||||
min_duration = 100
|
||||
max_duration = 100 //CHOMPedit
|
||||
max_duration = 100
|
||||
|
||||
/datum/surgery_step/brainstem/mend_vertebrae/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
return ..() && target_zone == BP_HEAD && target.op_stage.brainstem == 4
|
||||
return ..() && target.op_stage.brainstem == 4
|
||||
|
||||
/datum/surgery_step/brainstem/mend_vertebrae/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message(span_filter_notice("[user] starts to mend [target]'s opened vertebrae with \the [tool]."), \
|
||||
@@ -237,6 +244,7 @@
|
||||
// Realign tissues
|
||||
/////////////////////////////
|
||||
|
||||
///This step isn't essential BUT does heal brain loss and heals a dead brain.
|
||||
/datum/surgery_step/brainstem/realign_tissue
|
||||
surgery_name = "Realign Tissue"
|
||||
priority = 3 //Do this instead of searching for objects in the skull.
|
||||
@@ -246,11 +254,11 @@
|
||||
|
||||
allowed_procs = list(IS_WIRECUTTER = 60)
|
||||
|
||||
min_duration = 90
|
||||
max_duration = 120
|
||||
min_duration = 100
|
||||
max_duration = 100
|
||||
|
||||
/datum/surgery_step/brainstem/realign_tissue/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
return ..() && target_zone == BP_HEAD && target.op_stage.brainstem == 5
|
||||
return ..() && target.op_stage.brainstem == 5
|
||||
|
||||
/datum/surgery_step/brainstem/realign_tissue/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message(span_filter_notice("[user] starts to realign the tissues in [target]'s skull with \the [tool]."), \
|
||||
@@ -260,10 +268,13 @@
|
||||
|
||||
/datum/surgery_step/brainstem/realign_tissue/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message(span_notice("[user] has realigned the tissues in [target]'s skull back into place with \the [tool].") , \
|
||||
span_notice(" You have realigned the tissues in [target]'s skull back into place with \the [tool]."),)
|
||||
span_notice("You have realigned the tissues in [target]'s skull back into place with \the [tool]."),)
|
||||
user.balloon_alert_visible("realigned the tissues in [target]'s skull back in place", "realigned the tissues in the skull back into place")
|
||||
target.AdjustParalysis(5) //I n v a s i v e
|
||||
target.op_stage.brainstem = 0 //The cycle begins anew.
|
||||
target.brainloss = 0 //The cycle begins anew.
|
||||
for(var/obj/item/organ/internal/brain/sponge in target.internal_organs) //in case they have multiple brains. weirdo.
|
||||
sponge.status = 0
|
||||
|
||||
|
||||
/datum/surgery_step/brainstem/realign_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)
|
||||
@@ -272,6 +283,5 @@
|
||||
user.balloon_alert_visible("slips, gounging at [target]'s brainstem", "your hand slips, gouging at the brainstem")
|
||||
affected.createwound(CUT, 5)
|
||||
target.AdjustParalysis(30)
|
||||
spawn()
|
||||
for(var/obj/item/organ/internal/brain/O in affected.internal_organs)
|
||||
O.take_damage(rand(1,10))
|
||||
for(var/obj/item/organ/internal/brain/O in affected.internal_organs)
|
||||
O.take_damage(rand(1,10))
|
||||
|
||||
@@ -92,7 +92,7 @@
|
||||
if(coverage_check(user, target, affected, tool))
|
||||
return 0
|
||||
|
||||
return affected && affected.open >= 2 && (affected.status & ORGAN_DEAD)
|
||||
return affected && affected.open >= FLESH_RETRACTED && (affected.status & ORGAN_DEAD)
|
||||
|
||||
/datum/surgery_step/necrotic/fix_dead_tissue //Debridement
|
||||
surgery_name = "Remove Dead Tissue"
|
||||
@@ -154,7 +154,7 @@
|
||||
|
||||
/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)
|
||||
return ..() && affected.open >= 3 && affected.remove_necrosis >= 1
|
||||
return ..() && affected.open >= BONE_RETRACTED && 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)
|
||||
@@ -213,7 +213,7 @@
|
||||
|
||||
/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.open >= 3 && affected.remove_necrosis == 1
|
||||
return ..() && affected.open >= BONE_RETRACTED && 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)
|
||||
@@ -253,7 +253,7 @@
|
||||
|
||||
/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.open >= 3 && affected.remove_necrosis == 2
|
||||
return ..() && affected.open >= BONE_RETRACTED && 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)
|
||||
@@ -294,7 +294,7 @@
|
||||
|
||||
/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.open >= 3 && affected.remove_necrosis == 3
|
||||
return ..() && affected.open >= BONE_RETRACTED && 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)
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
/datum/surgery_step/robotics/unscrew_hatch/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(..())
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
return affected && affected.open == 0 && target_zone != O_MOUTH
|
||||
return affected && !affected.open && target_zone != O_MOUTH
|
||||
|
||||
/datum/surgery_step/robotics/unscrew_hatch/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)
|
||||
@@ -60,7 +60,7 @@
|
||||
user.visible_message(span_notice("[user] has opened the maintenance hatch on [target]'s [affected.name] with \the [tool]."), \
|
||||
span_notice("You have opened the maintenance hatch on [target]'s [affected.name] with \the [tool]."),)
|
||||
user.balloon_alert_visible("opens the maintenance hatch on [target]'s [affected.name]", "maintenance hatch opened on \the [affected.name]")
|
||||
affected.open = 1
|
||||
affected.open = INCISION_MADE
|
||||
|
||||
/datum/surgery_step/robotics/unscrew_hatch/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)
|
||||
@@ -213,7 +213,7 @@
|
||||
else
|
||||
if(!welder.isOn() || !welder.remove_fuel(1,user))
|
||||
return 0
|
||||
return affected && affected.open == 3 && (affected.disfigured || affected.brute_dam > 0) && target_zone != O_MOUTH // CHOMPEdit End.
|
||||
return affected && affected.open == BONE_RETRACTED && (affected.disfigured || affected.brute_dam > 0) && target_zone != O_MOUTH // CHOMPEdit End.
|
||||
|
||||
/datum/surgery_step/robotics/repair_brute/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)
|
||||
@@ -267,7 +267,7 @@
|
||||
else
|
||||
C.use(5)
|
||||
|
||||
return affected && affected.open == 3 && (affected.disfigured || affected.burn_dam > 0) && target_zone != O_MOUTH
|
||||
return affected && affected.open == BONE_RETRACTED && (affected.disfigured || affected.burn_dam > 0) && target_zone != O_MOUTH
|
||||
|
||||
/datum/surgery_step/robotics/repair_burn/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)
|
||||
@@ -319,7 +319,7 @@
|
||||
if(I.damage > 0 && (I.robotic >= ORGAN_ROBOT))
|
||||
is_organ_damaged = 1
|
||||
break
|
||||
return affected.open == 3 && is_organ_damaged
|
||||
return affected.open == BONE_RETRACTED && is_organ_damaged
|
||||
|
||||
/datum/surgery_step/robotics/fix_organ_robotic/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(!ishuman(target))
|
||||
@@ -518,7 +518,7 @@
|
||||
|
||||
var/obj/item/mmi/M = tool
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
if(!(affected && affected.open == 3))
|
||||
if(!(affected && affected.open == BONE_RETRACTED))
|
||||
return 0
|
||||
|
||||
if(!istype(M))
|
||||
@@ -621,7 +621,7 @@
|
||||
var/obj/item/holder/diona/N = tool
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
|
||||
if(!(affected && affected.open == 3))
|
||||
if(!(affected && affected.open == BONE_RETRACTED))
|
||||
return 0
|
||||
|
||||
if(!istype(N))
|
||||
|
||||
@@ -1152,14 +1152,33 @@
|
||||
var/mob/living/body_backup = T.body_backup
|
||||
if(ishuman(body_backup))
|
||||
var/mob/living/carbon/human/H = body_backup
|
||||
body_backup.adjustBruteLoss(-6)
|
||||
body_backup.adjustFireLoss(-6)
|
||||
body_backup.setOxyLoss(0)
|
||||
H.setOxyLoss(0)
|
||||
if(H.isSynthetic())
|
||||
H.adjustToxLoss(-H.getToxLoss())
|
||||
else
|
||||
H.adjustToxLoss(-6)
|
||||
body_backup.adjustCloneLoss(-6)
|
||||
H.adjustToxLoss(-25)
|
||||
if(H.health <= -H.getMaxHealth())
|
||||
H.adjustBruteLoss(-25)
|
||||
H.adjustFireLoss(-25)
|
||||
H.adjustCloneLoss(-25)
|
||||
|
||||
//This looks how much health we need to get to 'barely in crit'
|
||||
//We heal up to that point here, starting with toxins and moving up to the harder to heal types.
|
||||
//Once we heal one type, we check again to see if we're still dead. If so, we heal the next type in the list.
|
||||
if(H.health <= -H.getMaxHealth())
|
||||
var/barely_in_crit = -(H.get_crit_point() - 1)
|
||||
var/adjust_health = barely_in_crit - H.health
|
||||
if(adjust_health < 0)
|
||||
adjust_health *= -1
|
||||
|
||||
H.adjustToxLoss(adjust_health)
|
||||
if(H.health <= -H.getMaxHealth())
|
||||
H.adjustFireLoss(adjust_health)
|
||||
if(H.health <= -H.getMaxHealth())
|
||||
H.adjustBruteLoss(adjust_health)
|
||||
if(H.health <= -H.getMaxHealth())
|
||||
H.adjustCloneLoss(adjust_health)
|
||||
|
||||
body_backup.updatehealth()
|
||||
// Now we do the check to see if we should revive...
|
||||
var/should_proceed_with_revive = TRUE
|
||||
|
||||
@@ -195,6 +195,7 @@
|
||||
#include "code\__defines\status_effects.dm"
|
||||
#include "code\__defines\subsystems.dm"
|
||||
#include "code\__defines\supply.dm"
|
||||
#include "code\__defines\surgery.dm"
|
||||
#include "code\__defines\talksounds.dm"
|
||||
#include "code\__defines\targeting.dm"
|
||||
#include "code\__defines\text.dm"
|
||||
|
||||
Reference in New Issue
Block a user