mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2025-12-30 04:02:33 +00:00
405 lines
17 KiB
Plaintext
405 lines
17 KiB
Plaintext
//Procedures in this file: Generic ribcage opening steps, Removing alien embryo, Fixing internal organs.
|
|
//////////////////////////////////////////////////////////////////
|
|
// GENERIC RIBCAGE SURGERY //
|
|
//////////////////////////////////////////////////////////////////
|
|
/datum/surgery_step/ribcage
|
|
priority = 2
|
|
can_infect = 1
|
|
blood_level = 1
|
|
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
|
return target_zone == "chest"
|
|
|
|
/datum/surgery_step/ribcage/saw_ribcage
|
|
allowed_tools = list(
|
|
/obj/item/weapon/circular_saw = 100, \
|
|
/obj/item/weapon/hatchet = 75
|
|
)
|
|
|
|
min_duration = 50
|
|
max_duration = 70
|
|
|
|
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
|
if (!ishuman(target))
|
|
return 0
|
|
var/datum/organ/external/affected = target.get_organ(target_zone)
|
|
return ..() && target.op_stage.ribcage == 0 && affected.open >= 2
|
|
|
|
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
|
user.visible_message("[user] begins to cut through [target]'s ribcage with \the [tool].", \
|
|
"You begin to cut through [target]'s ribcage with \the [tool].")
|
|
target.custom_pain("Something hurts horribly in your chest!",1)
|
|
..()
|
|
|
|
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
|
user.visible_message("\blue [user] has cut through [target]'s ribcage open with \the [tool].", \
|
|
"\blue You have cut through [target]'s ribcage open with \the [tool].")
|
|
target.op_stage.ribcage = 1
|
|
|
|
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
|
user.visible_message("\red [user]'s hand slips, cracking [target]'s ribcage with \the [tool]!" , \
|
|
"\red Your hand slips, cracking [target]'s ribcage with \the [tool]!" )
|
|
var/datum/organ/external/affected = target.get_organ(target_zone)
|
|
affected.createwound(CUT, 20)
|
|
affected.fracture()
|
|
|
|
|
|
/datum/surgery_step/ribcage/retract_ribcage
|
|
allowed_tools = list(
|
|
/obj/item/weapon/retractor = 100, \
|
|
/obj/item/weapon/crowbar = 75, \
|
|
/obj/item/weapon/kitchen/utensil/fork = 20
|
|
)
|
|
|
|
min_duration = 30
|
|
max_duration = 40
|
|
|
|
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
|
return ..() && target.op_stage.ribcage == 1
|
|
|
|
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
|
var/msg = "[user] starts to force open the ribcage in [target]'s torso with \the [tool]."
|
|
var/self_msg = "You start to force open the ribcage in [target]'s torso with \the [tool]."
|
|
user.visible_message(msg, self_msg)
|
|
target.custom_pain("Something hurts horribly in your chest!",1)
|
|
..()
|
|
|
|
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
|
var/msg = "\blue [user] forces open [target]'s ribcage with \the [tool]."
|
|
var/self_msg = "\blue You force open [target]'s ribcage with \the [tool]."
|
|
user.visible_message(msg, self_msg)
|
|
target.op_stage.ribcage = 2
|
|
|
|
// Whoops!
|
|
if(prob(10))
|
|
var/datum/organ/external/affected = target.get_organ(target_zone)
|
|
affected.fracture()
|
|
|
|
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
|
var/msg = "\red [user]'s hand slips, breaking [target]'s ribcage!"
|
|
var/self_msg = "\red Your hand slips, breaking [target]'s ribcage!"
|
|
user.visible_message(msg, self_msg)
|
|
var/datum/organ/external/affected = target.get_organ(target_zone)
|
|
affected.createwound(BRUISE, 20)
|
|
affected.fracture()
|
|
|
|
/datum/surgery_step/ribcage/close_ribcage
|
|
allowed_tools = list(
|
|
/obj/item/weapon/retractor = 100, \
|
|
/obj/item/weapon/crowbar = 75, \
|
|
/obj/item/weapon/kitchen/utensil/fork = 20
|
|
)
|
|
|
|
|
|
min_duration = 20
|
|
max_duration = 40
|
|
|
|
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
|
return ..() && target.op_stage.ribcage == 2
|
|
|
|
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
|
var/msg = "[user] starts bending [target]'s ribcage back into place with \the [tool]."
|
|
var/self_msg = "You start bending [target]'s ribcage back into place with \the [tool]."
|
|
user.visible_message(msg, self_msg)
|
|
target.custom_pain("Something hurts horribly in your chest!",1)
|
|
..()
|
|
|
|
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
|
var/msg = "\blue [user] bends [target]'s ribcage back into place with \the [tool]."
|
|
var/self_msg = "\blue You bend [target]'s ribcage back into place with \the [tool]."
|
|
user.visible_message(msg, self_msg)
|
|
|
|
target.op_stage.ribcage = 1
|
|
|
|
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
|
var/msg = "\red [user]'s hand slips, bending [target]'s ribcage in a wrong shape!"
|
|
var/self_msg = "\red Your hand slips, bending [target]'s ribcage in a wrong shape!"
|
|
user.visible_message(msg, self_msg)
|
|
var/datum/organ/external/chest/affected = target.get_organ("chest")
|
|
affected.createwound(BRUISE, 20)
|
|
affected.fracture()
|
|
if (prob(40))
|
|
user.visible_message("\red Rib pierces the lung!")
|
|
target.rupture_lung()
|
|
|
|
/datum/surgery_step/ribcage/mend_ribcage
|
|
allowed_tools = list(
|
|
/obj/item/weapon/bonegel = 100, \
|
|
/obj/item/weapon/screwdriver = 75
|
|
)
|
|
|
|
min_duration = 20
|
|
max_duration = 40
|
|
|
|
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
|
return ..() && target.op_stage.ribcage == 1
|
|
|
|
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
|
var/msg = "[user] starts applying \the [tool] to [target]'s ribcage."
|
|
var/self_msg = "You start applying \the [tool] to [target]'s ribcage."
|
|
user.visible_message(msg, self_msg)
|
|
target.custom_pain("Something hurts horribly in your chest!",1)
|
|
..()
|
|
|
|
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
|
var/msg = "\blue [user] applied \the [tool] to [target]'s ribcage."
|
|
var/self_msg = "\blue You applied \the [tool] to [target]'s ribcage."
|
|
user.visible_message(msg, self_msg)
|
|
|
|
target.op_stage.ribcage = 0
|
|
|
|
//////////////////////////////////////////////////////////////////
|
|
// ALIEN EMBRYO SURGERY //
|
|
//////////////////////////////////////////////////////////////////
|
|
/datum/surgery_step/ribcage/remove_embryo
|
|
allowed_tools = list(
|
|
/obj/item/weapon/hemostat = 100, \
|
|
/obj/item/weapon/wirecutters = 75, \
|
|
/obj/item/weapon/kitchen/utensil/fork = 20
|
|
)
|
|
blood_level = 2
|
|
|
|
min_duration = 80
|
|
max_duration = 100
|
|
|
|
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
|
var/embryo = 0
|
|
for(var/mob/living/carbon/alien/embryo/A in target)
|
|
embryo = 1
|
|
break
|
|
return ..() && embryo && target.op_stage.ribcage == 2
|
|
|
|
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
|
var/msg = "[user] starts to pull something out from [target]'s ribcage with \the [tool]."
|
|
var/self_msg = "You start to pull something out from [target]'s ribcage with \the [tool]."
|
|
user.visible_message(msg, self_msg)
|
|
target.custom_pain("Something hurts horribly in your chest!",1)
|
|
..()
|
|
|
|
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
|
user.visible_message("\red [user] rips the larva out of [target]'s ribcage!",
|
|
"You rip the larva out of [target]'s ribcage!")
|
|
|
|
for(var/mob/living/carbon/alien/embryo/A in target)
|
|
A.loc = A.loc.loc
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////
|
|
// CHEST INTERNAL ORGAN SURGERY //
|
|
//////////////////////////////////////////////////////////////////
|
|
/datum/surgery_step/ribcage/fix_chest_internal
|
|
allowed_tools = list(
|
|
/obj/item/stack/medical/advanced/bruise_pack= 100, \
|
|
/obj/item/stack/medical/bruise_pack = 20, \
|
|
/obj/item/stack/medical/bruise_pack/tajaran = 70, \
|
|
)
|
|
|
|
min_duration = 70
|
|
max_duration = 90
|
|
|
|
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
|
if (!ishuman(target))
|
|
return 0
|
|
var/is_chest_organ_damaged = 0
|
|
var/datum/organ/external/chest/chest = target.get_organ("chest")
|
|
for(var/datum/organ/internal/I in chest.internal_organs) if(I.damage > 0)
|
|
is_chest_organ_damaged = 1
|
|
break
|
|
return ..() && is_chest_organ_damaged && target.op_stage.ribcage == 2
|
|
|
|
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
|
var/datum/organ/internal/heart/heart = target.internal_organs["heart"]
|
|
var/datum/organ/internal/lungs/lungs = target.internal_organs["lungs"]
|
|
var/datum/organ/internal/liver/liver = target.internal_organs["liver"]
|
|
var/datum/organ/internal/liver/kidney = target.internal_organs["kidney"]
|
|
|
|
if (istype(tool, /obj/item/stack/medical/advanced/bruise_pack))
|
|
if(lungs.damage > 0)
|
|
user.visible_message("[user] starts sealing the rupture in [target]'s lungs with regenerative membrane.", \
|
|
"You start mending the rupture in [target]'s lungs with regenerative membrane." )
|
|
if(heart.damage > 0)
|
|
if(heart.robotic < 2)
|
|
user.visible_message("[user] starts mending the bruises on [target]'s heart with regenerative membrane.", \
|
|
"You start mending the bruises on [target]'s heart with regenerative membrane." )
|
|
if(heart.robotic == 2)
|
|
user.visible_message("\blue [user] attempts to repair [target]'s mechanical heart with regenerative membrane...", \
|
|
"\blue You attempt to repair [target]'s heart with regenerative membrane...")
|
|
if(liver.damage > 0)
|
|
user.visible_message("[user] starts mending the bruises on [target]'s liver with regenerative membrane.", \
|
|
"You start mending the bruises on [target]'s liver with regenerative membrane." )
|
|
if(kidney.damage > 0)
|
|
user.visible_message("[user] starts mending the bruises on [target]'s kidney with regenerative membrane.", \
|
|
"You start mending the bruises on [target]'s kidney with regenerative membrane." )
|
|
if (istype(tool, /obj/item/stack/medical/bruise_pack))
|
|
if (istype(tool, /obj/item/stack/medical/bruise_pack/tajaran/))
|
|
if(lungs.damage > 0)
|
|
user.visible_message("[user] starts covering the rupture in [target]'s lungs with the poultice.", \
|
|
"You start covering the rupture in [target]'s lungs with the poultice." )
|
|
if(heart.damage > 0)
|
|
if(heart.robotic < 2)
|
|
user.visible_message("[user] starts mending the bruises on [target]'s heart with the poultice.", \
|
|
"You start mending the bruises on [target]'s heart with the poultice." )
|
|
if(heart.robotic == 2)
|
|
user.visible_message("\blue [user] attempts to repair [target]'s mechanical heart with \the [tool]...", \
|
|
"\blue You attempt to repair [target]'s heart with \the [tool]...")
|
|
if(liver.damage > 0)
|
|
user.visible_message("[user] starts putting the poultice to the bruises on [target]'s liver.", \
|
|
"You start putting the poultice to the bruises on [target]'s liver." )
|
|
if(kidney.damage > 0)
|
|
user.visible_message("[user] starts putting the poultice to the bruises on [target]'s kidney.", \
|
|
"You start putting the poultice to the bruises on [target]'s kidney." )
|
|
if(lungs.damage > 0)
|
|
user.visible_message("[user] starts mending the rupture in [target]'s lungs with \the [tool].", \
|
|
"You start mending the rupture in [target]'s lungs \the [tool]." )
|
|
else
|
|
if(heart.damage > 0)
|
|
if(heart.robotic < 2)
|
|
user.visible_message("[user] starts mending the bruises on [target]'s heart with \the [tool].", \
|
|
"You start mending the bruises on [target]'s heart with \the [tool]." )
|
|
if(heart.robotic == 2)
|
|
user.visible_message("\blue [user] attempts to repair [target]'s mechanical heart with \the [tool]...", \
|
|
"\blue You attempt to repair [target]'s heart with \the [tool]...")
|
|
if(liver.damage > 0)
|
|
user.visible_message("[user] starts mending the bruises on [target]'s liver with \the [tool].", \
|
|
"You start mending the bruises on [target]'s liver with \the [tool]." )
|
|
if(kidney.damage > 0)
|
|
user.visible_message("[user] starts mending the bruises on [target]'s kidney with \the [tool].", \
|
|
"You start mending the bruises on [target]'s kidney with \the [tool]." )
|
|
target.custom_pain("The pain in your chest is living hell!",1)
|
|
..()
|
|
|
|
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
|
var/datum/organ/internal/heart/heart = target.internal_organs["heart"]
|
|
var/datum/organ/internal/lungs/lungs = target.internal_organs["lungs"]
|
|
var/datum/organ/internal/liver/liver = target.internal_organs["liver"]
|
|
var/datum/organ/internal/liver/kidney = target.internal_organs["kidney"]
|
|
|
|
if(lungs.damage > 0)
|
|
user.visible_message("\blue [user] mends the rupture in [target]'s lungs with \the [tool].", \
|
|
"\blue You mend the rupture in [target]'s lungs with \the [tool]." )
|
|
lungs.damage = 0
|
|
|
|
if(heart.damage > 0)
|
|
if(heart.robotic == 2)
|
|
user.visible_message("\blue [user] pokes [target]'s mechanical heart with \the [tool].", \
|
|
"\red [target]'s heart is not organic, you cannot operate on it with \the [tool]!")
|
|
else
|
|
user.visible_message("\blue [user] treats the bruises on [target]'s heart with \the [tool].", \
|
|
"\blue You treat the bruises on [target]'s heart with \the [tool]." )
|
|
heart.damage = 0
|
|
|
|
if(liver.damage > 0)
|
|
user.visible_message("\blue [user] treats the bruises on [target]'s liver with \the [tool].", \
|
|
"\blue You treats the bruises on [target]'s liver with \the [tool]." )
|
|
liver.damage = 0
|
|
|
|
if(kidney.damage > 0)
|
|
user.visible_message("\blue [user] treats the bruises on [target]'s kidney with \the [tool].", \
|
|
"\blue You treats the bruises on [target]'s kidney with \the [tool]." )
|
|
kidney.damage = 0
|
|
|
|
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
|
var/datum/organ/internal/heart/heart = target.internal_organs["heart"]
|
|
var/datum/organ/internal/lungs/lungs = target.internal_organs["lungs"]
|
|
var/datum/organ/internal/liver/liver = target.internal_organs["liver"]
|
|
var/datum/organ/internal/liver/kidney = target.internal_organs["kidney"]
|
|
var/datum/organ/external/chest/affected = target.get_organ("chest")
|
|
user.visible_message("\red [user]'s hand slips, getting mess and tearing the inside of [target]'s chest with \the [tool]!", \
|
|
"\red Your hand slips, getting mess and tearing the inside of [target]'s chest with \the [tool]!")
|
|
switch(tool)
|
|
if(/obj/item/stack/medical/advanced/bruise_pack)
|
|
if(heart.damage > 0)
|
|
heart.take_damage(2, 0)
|
|
if(liver.damage > 0)
|
|
liver.take_damage(2, 0)
|
|
if(kidney.damage > 0)
|
|
kidney.take_damage(2, 0)
|
|
if(lungs.damage > 0)
|
|
lungs.take_damage(2, 0)
|
|
target.adjustToxLoss(5)
|
|
if(/obj/item/stack/medical/bruise_pack/tajaran)
|
|
if(heart.damage > 0)
|
|
heart.take_damage(2, 0)
|
|
if(liver.damage > 0)
|
|
liver.take_damage(2, 0)
|
|
if(kidney.damage > 0)
|
|
kidney.take_damage(2, 0)
|
|
if(lungs.damage > 0)
|
|
lungs.take_damage(2, 0)
|
|
target.adjustToxLoss(7)
|
|
if(/obj/item/stack/medical/bruise_pack)
|
|
if(heart.damage > 0)
|
|
heart.take_damage(5, 0)
|
|
if(liver.damage > 0)
|
|
liver.take_damage(5, 0)
|
|
if(kidney.damage > 0)
|
|
kidney.take_damage(5, 0)
|
|
if(lungs.damage > 0)
|
|
lungs.take_damage(5, 0)
|
|
target.adjustToxLoss(10)
|
|
affected.createwound(CUT, 5)
|
|
|
|
|
|
/datum/surgery_step/ribcage/fix_chest_internal_robot //For artificial organs
|
|
allowed_tools = list(
|
|
/obj/item/stack/nanopaste = 100, \
|
|
/obj/item/weapon/bonegel = 30, \
|
|
/obj/item/weapon/screwdriver = 70, \
|
|
)
|
|
|
|
min_duration = 70
|
|
max_duration = 90
|
|
|
|
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
|
var/is_chest_organ_damaged = 0
|
|
var/datum/organ/external/chest/chest = target.get_organ("chest")
|
|
for(var/datum/organ/internal/I in chest.internal_organs) if(I.damage > 0)
|
|
is_chest_organ_damaged = 1
|
|
break
|
|
return ..() && is_chest_organ_damaged && target.op_stage.ribcage == 2
|
|
|
|
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
|
var/datum/organ/internal/heart/heart = target.internal_organs["heart"]
|
|
|
|
if(heart.damage > 0)
|
|
if(heart.robotic == 2)
|
|
user.visible_message("[user] starts mending the mechanisms on [target]'s heart with \the [tool].", \
|
|
"You start mending the mechanisms on [target]'s heart with \the [tool]." )
|
|
else
|
|
user.visible_message("[user] cannot mend an organic heart with this!")
|
|
return
|
|
target.custom_pain("The pain in your chest is living hell!",1)
|
|
..()
|
|
|
|
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
|
var/datum/organ/internal/heart/heart = target.internal_organs["heart"]
|
|
if(heart.damage > 0)
|
|
if(heart.robotic == 2)
|
|
user.visible_message("\blue [user] repairs [target]'s heart with \the [tool].", \
|
|
"\blue You repair [target]'s heart with \the [tool]." )
|
|
heart.damage = 0
|
|
|
|
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
|
var/datum/organ/internal/heart/heart = target.internal_organs["heart"]
|
|
user.visible_message("\red [user]'s hand slips, smearing [tool] in the incision in [target]'s heart, gumming it up!!" , \
|
|
"\red Your hand slips, smearing [tool] in the incision in [target]'s heart, gumming it up!")
|
|
heart.take_damage(5, 0)
|
|
target.adjustToxLoss(5)
|
|
|
|
//////////////////////////////////////////////////////////////////
|
|
// HEART SURGERY //
|
|
//////////////////////////////////////////////////////////////////
|
|
|
|
/datum/surgery_step/ribcage/heart/cut
|
|
allowed_tools = list(
|
|
/obj/item/weapon/scalpel = 100, \
|
|
/obj/item/weapon/kitchenknife = 75, \
|
|
/obj/item/weapon/shard = 50, \
|
|
)
|
|
|
|
min_duration = 30
|
|
max_duration = 40
|
|
|
|
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
|
return ..() && target.op_stage.ribcage == 2
|
|
|