[MIRROR] Fixes synth surgery (#12847)

Co-authored-by: Cameron Lennox <killer65311@gmail.com>
This commit is contained in:
CHOMPStation2StaffMirrorBot
2026-06-25 08:51:42 -07:00
committed by GitHub
parent 482b7b9f7f
commit 269cb3da18
14 changed files with 117 additions and 115 deletions
+3 -3
View File
@@ -13,12 +13,12 @@
/datum/surgery_step/dehusk/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))
return 0
return FALSE
if(coverage_check(user,target,affected,tool))
return 0
return FALSE
return target_zone == BP_TORSO && (HUSK in target.mutations)
/datum/surgery_step/dehusk/structinitial
+2 -2
View File
@@ -10,11 +10,11 @@
/datum/surgery_step/open_encased/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(coverage_check(user, target, affected, tool))
return 0
return FALSE
return affected && !(affected.robotic >= ORGAN_ROBOT) && affected.encased && affected.open >= FLESH_RETRACTED
///////////////////////////////////////////////////////////////
+17 -17
View File
@@ -11,21 +11,21 @@
/datum/surgery_step/repairflesh/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
if (isslime(target))
return 0
return FALSE
if (target_zone == O_EYES || target_zone == O_MOUTH)
return 0
return FALSE
if(!ishuman(target))
return 0
return FALSE
var/obj/item/organ/external/affected = target.get_organ(target_zone)
if (affected == null)
return 0
return FALSE
if (affected.is_stump())
return 0
return FALSE
if (affected.robotic >= ORGAN_ROBOT)
return 0
return FALSE
if(coverage_check(user, target, affected, tool))
return 0
return 1
return FALSE
return TRUE
//////////////////////////////////////////////////////////////////
@@ -50,9 +50,9 @@
if(..())
var/obj/item/organ/external/affected = target.get_organ(target_zone)
if(affected.burn_stage || affected.brute_stage)
return 0
return 1
return 0
return FALSE
return TRUE
return FALSE
/datum/surgery_step/repairflesh/scan_injury/begin_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)
@@ -103,9 +103,9 @@
if(..())
var/obj/item/organ/external/affected = target.get_organ(target_zone)
if(affected.burn_stage < 1 || !(affected.burn_dam))
return 0
return 1
return 0
return FALSE
return TRUE
return FALSE
/datum/surgery_step/repairflesh/repair_burns/begin_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)
@@ -175,9 +175,9 @@
if(..())
var/obj/item/organ/external/affected = target.get_organ(target_zone)
if(affected.brute_stage < 1 || !(affected.brute_dam))
return 0
return 1
return 0
return FALSE
return TRUE
return FALSE
/datum/surgery_step/repairflesh/repair_brute/begin_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)
+3 -3
View File
@@ -11,12 +11,12 @@
/datum/surgery_step/face/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))
return 0
return FALSE
if(coverage_check(user, target, affected, tool))
return 0
return FALSE
return target_zone == O_MOUTH
///////////////////////////////////////////////////////////////
+11 -11
View File
@@ -8,21 +8,21 @@
/datum/surgery_step/generic/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
if (isslime(target))
return 0
return FALSE
if (target_zone == O_EYES) //there are specific steps for eye surgery
return 0
return FALSE
if(!ishuman(target))
return 0
return FALSE
var/obj/item/organ/external/affected = target.get_organ(target_zone)
if (affected == null)
return 0
return FALSE
if (affected.is_stump())
return 0
return FALSE
if (affected.robotic >= ORGAN_ROBOT)
return 0
return FALSE
if(coverage_check(user, target, affected, tool))
return 0
return 1
return FALSE
return TRUE
///////////////////////////////////////////////////////////////
// Scalpel Surgery
@@ -377,12 +377,12 @@
/datum/surgery_step/generic/amputate/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
if (target_zone == O_EYES) //there are specific steps for eye surgery
return 0
return FALSE
if(!ishuman(target))
return 0
return FALSE
var/obj/item/organ/external/affected = target.get_organ(target_zone)
if (affected == null)
return 0
return FALSE
return !affected.cannot_amputate
/datum/surgery_step/generic/amputate/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+2 -2
View File
@@ -19,11 +19,11 @@
/datum/surgery_step/hardsuit/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
if(!istype(target))
return 0
return FALSE
if(istype(tool,/obj/item/weldingtool))
var/obj/item/weldingtool/welder = tool
if(!welder.isOn() || !welder.remove_fuel(1,user))
return 0
return FALSE
return (target_zone == BP_TORSO) && ((istype(target.back, /obj/item/rig) && !(target.back.canremove)) || (istype(target.belt, /obj/item/rig) && !(target.belt.canremove)))
/datum/surgery_step/hardsuit/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+4 -4
View File
@@ -10,10 +10,10 @@
/datum/surgery_step/cavity/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(coverage_check(user, target, affected, tool))
return 0
return FALSE
return affected && affected.open == (affected.encased ? 3 : 2)
/datum/surgery_step/cavity/proc/get_max_wclass(obj/item/organ/external/affected)
@@ -24,7 +24,7 @@
return ITEMSIZE_NORMAL
if (BP_GROIN)
return ITEMSIZE_SMALL
return 0
return FALSE
/datum/surgery_step/cavity/proc/get_cavity(obj/item/organ/external/affected)
switch (affected.organ_tag)
@@ -129,7 +129,7 @@
/datum/surgery_step/cavity/place_item/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
if(!istype(tool))
return 0
return FALSE
if(..())
var/obj/item/organ/external/affected = target.get_organ(target_zone)
if(istype(user,/mob/living/silicon/robot))
+9 -9
View File
@@ -11,10 +11,10 @@
/datum/surgery_step/limb/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)
return 0
return FALSE
var/list/organ_data = target.species.has_limbs["[target_zone]"]
return !isnull(organ_data)
@@ -31,28 +31,28 @@
/datum/surgery_step/limb/attach/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
if(!istype(tool))
return 0
return FALSE
var/obj/item/organ/external/E = tool
var/obj/item/organ/external/P = target.organs_by_name[E.parent_organ]
var/obj/item/organ/external/affected = target.get_organ(target_zone)
if (affected)
to_chat(user, span_warning("Something is in the way! You can't attach [E] here!"))
user.balloon_alert(user, "something is in the way!")
return 0
return FALSE
if(!P)
to_chat(user, span_warning("There's nothing to attach [E] to!"))
user.balloon_alert(user, "there's nothing to attach [E] to!")
return 0
return FALSE
else if((P.robotic >= ORGAN_ROBOT) && (E.robotic < ORGAN_ROBOT))
to_chat(user, span_warning("Attaching [E] to [P] wouldn't work well."))
user.balloon_alert(user, "attaching [E] to [P] wouldn't work well")
return 0
return FALSE
else if(istype(E, /obj/item/organ/external/head) && E.robotic >= ORGAN_ROBOT && P.robotic < ORGAN_ROBOT)
to_chat(user, span_warning("Attaching [E] to [P] might break [E]."))
user.balloon_alert(user, "attaching [E] to [P] might break [E]")
return 0
return FALSE
else
return 1
return TRUE
/datum/surgery_step/limb/attach/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/obj/item/organ/external/E = tool
@@ -147,7 +147,7 @@
var/obj/item/robot_parts/p = tool
if (p.part)
if (!(target_zone in p.part))
return 0
return FALSE
return isnull(target.get_organ(target_zone))
/datum/surgery_step/limb/mechanize/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+3 -3
View File
@@ -16,14 +16,14 @@
/datum/surgery_step/necrotic/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
if(!ishuman(target))
return 0
return FALSE
if (target_zone == O_MOUTH || target_zone == O_EYES)
return 0
return FALSE
var/obj/item/organ/external/affected = target.get_organ(target_zone)
if(coverage_check(user, target, affected, tool))
return 0
return FALSE
return affected && affected.open >= FLESH_RETRACTED && (affected.status & ORGAN_DEAD)
+7 -7
View File
@@ -15,15 +15,15 @@
/datum/surgery_step/generic/ripper/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/surgical/scalpel/ripper/tool)
if (!..())
return 0
return FALSE
var/obj/item/organ/external/affected = target.get_organ(target_zone)
if(!istype(tool)) //Only rippers can use the ripper!
return 0
return FALSE
if(affected.robotic >= ORGAN_ROBOT) //You can't damage robutts.
return 0
return FALSE
return affected && affected.open != 0 && target_zone != O_MOUTH //Have to cut them open at a minimum.
@@ -100,7 +100,7 @@
/datum/surgery_step/generic/ripper/destroy_organ/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
if (!..())
return 0
return FALSE
var/list/removable_organs = list()
for(var/organ in target.internal_organs_by_name)
@@ -109,7 +109,7 @@
removable_organs |= organ
if(!removable_organs.len)
return 0
return FALSE
return ..()
/datum/surgery_step/generic/ripper/destroy_organ/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
@@ -179,7 +179,7 @@
/datum/surgery_step/generic/ripper/rip_organ/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
if (!..())
return 0
return FALSE
var/list/removable_organs = list()
for(var/organ in target.internal_organs_by_name)
@@ -188,7 +188,7 @@
removable_organs[I.name] = organ
if(!removable_organs.len)
return 0
return FALSE
return ..()
+22 -20
View File
@@ -7,12 +7,19 @@
/datum/surgery_step/internal/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)
return FALSE
if(coverage_check(user, target, affected, tool))
return 0
return affected && affected.open == (affected.encased ? 3 : 2)
return FALSE
if(affected.encased)
return affected.open == BONE_RETRACTED
return affected.open >= FLESH_RETRACTED
//Removed unused Embryo Surgery, derelict and broken.
@@ -114,11 +121,6 @@
if(I && I.damage > 0)
I.take_damage(dam_amt,0)
//Robo internal organ fix. For when an organic has robotic limbs.
/datum/surgery_step/fix_organic_organ_robotic //For artificial organs
surgery_name = "Mend Organ"
@@ -212,15 +214,15 @@
/datum/surgery_step/internal/detatch_organ/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
if (!..())
return 0
return FALSE
if(!istype(tool))
return 0
return FALSE
var/obj/item/organ/external/affected = target.get_organ(target_zone)
if(!(affected && !(affected.robotic >= ORGAN_ROBOT)))
return 0
return FALSE
target.op_stage.current_organ = null
@@ -232,9 +234,9 @@
var/organ_to_remove = tgui_input_list(user, "Which organ do you want to prepare for removal?", "Organ Choice", attached_organs)
if(!organ_to_remove)
return 0
return FALSE
if(!attached_organs[organ_to_remove])
return 0
return FALSE
target.op_stage.current_organ = attached_organs[organ_to_remove]
@@ -284,10 +286,10 @@
/datum/surgery_step/internal/remove_organ/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
if (!..())
return 0
return FALSE
if(!istype(tool))
return 0
return FALSE
var/list/removable_organs = list()
for(var/organ in target.internal_organs_by_name)
@@ -296,7 +298,7 @@
removable_organs |= organ
if(!removable_organs.len)
return 0
return FALSE
return ..()
@@ -373,7 +375,7 @@
var/organ_missing
if(!istype(O))
return 0
return FALSE
if((affected.robotic >= ORGAN_ROBOT) && !(O.robotic >= ORGAN_ROBOT))
to_chat(user, span_danger("You cannot install a naked organ into a robotic body."))
@@ -458,10 +460,10 @@
/datum/surgery_step/internal/attach_organ/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
if (!..())
return 0
return FALSE
if(!istype(tool))
return 0
return FALSE
target.op_stage.current_organ = null
@@ -473,7 +475,7 @@
var/organ_to_replace = tgui_input_list(user, "Which organ do you want to reattach?", "Organ Choice", removable_organs)
if(!organ_to_replace)
return 0
return FALSE
target.op_stage.current_organ = removable_organs[organ_to_replace]
return ..()
+2 -2
View File
@@ -21,12 +21,12 @@
/datum/surgery_step/fix_vein/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) return
if(coverage_check(user, target, affected, tool))
return 0
return FALSE
var/internal_bleeding = 0
for(var/datum/wound/W in affected.wounds) if(W.internal)
internal_bleeding = 1
+22 -22
View File
@@ -9,21 +9,21 @@
/datum/surgery_step/robotics/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
if (isslime(target))
return 0
return FALSE
if (target_zone == O_EYES) //there are specific steps for eye surgery
return 0
return FALSE
if(!ishuman(target))
return 0
return FALSE
var/obj/item/organ/external/affected = target.get_organ(target_zone)
if (affected == null)
return 0
return FALSE
if (affected.status & ORGAN_DESTROYED)
return 0
return FALSE
if (!(affected.robotic == ORGAN_ROBOT || affected.robotic == ORGAN_LIFELIKE)) //VOREStation Edit - No good on ORGAN_NANOFORM
return 0
return FALSE
if(coverage_check(user, target, affected, tool))
return 0
return 1
return FALSE
return TRUE
///////////////////////////////////////////////////////////////
// Unscrew Hatch Surgery
@@ -212,8 +212,8 @@
return SURGERY_FAILURE
else
if(!welder.isOn() || !welder.remove_fuel(1,user))
return 0
return affected && affected.open == BONE_RETRACTED && (affected.disfigured || affected.brute_dam > 0) && target_zone != O_MOUTH // CHOMPEdit End.
return FALSE //CHOMPEdit End
return affected && affected.open == BONE_RETRACTED && (affected.disfigured || affected.brute_dam > 0) && target_zone != O_MOUTH
/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)
@@ -383,9 +383,9 @@
/datum/surgery_step/robotics/detatch_organ_robotic/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(!(affected && (affected.robotic >= ORGAN_ROBOT)))
return 0
return FALSE
if(affected.open < 3)
return 0
return FALSE
var/list/attached_organs = list() //Let's see if we have any organs able to be detached!
for(var/organ in target.internal_organs_by_name)
@@ -394,7 +394,7 @@
attached_organs |= organ
if(!attached_organs.len) //No organs able to be detached!
return 0
return FALSE
return ..()
@@ -447,9 +447,9 @@
/datum/surgery_step/robotics/attach_organ_robotic/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(!(affected && (affected.robotic >= ORGAN_ROBOT)))
return 0
return FALSE
if(affected.open < 3)
return 0
return FALSE
var/list/attachable_organs = list()
for(var/organ in target.internal_organs_by_name)
@@ -458,7 +458,7 @@
attachable_organs |= organ
if(!attachable_organs.len)
return 0
return FALSE
return ..()
@@ -516,10 +516,10 @@
var/obj/item/mmi/M = tool
var/obj/item/organ/external/affected = target.get_organ(target_zone)
if(!(affected && affected.open == BONE_RETRACTED))
return 0
return FALSE
if(!istype(M))
return 0
return FALSE
/* VOREStation Edit - Don't worry about it. We can put these in regardless, because resleeving might make it useful after.
if(!M.brainmob || !M.brainmob.client || !M.brainmob.ckey || M.brainmob.stat >= DEAD)
@@ -542,7 +542,7 @@
user.balloon_alert(user, "your subject already has a brain")
return SURGERY_FAILURE
return 1
return TRUE
/datum/surgery_step/robotics/install_mmi/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)
@@ -619,10 +619,10 @@
var/obj/item/organ/external/affected = target.get_organ(target_zone)
if(!(affected && affected.open == BONE_RETRACTED))
return 0
return FALSE
if(!istype(N))
return 0
return FALSE
if(!N.held_mob.client || N.held_mob.stat >= DEAD)
to_chat(user, span_danger("That nymph is not viable."))
@@ -649,7 +649,7 @@
user.balloon_alert(user, "your subject already has a cephalon")
return SURGERY_FAILURE
return 1
return TRUE
/datum/surgery_step/robotics/install_nymph/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)
+10 -10
View File
@@ -53,25 +53,25 @@
if(IS_WRENCH)
if(tool.has_tool_quality(TOOL_WRENCH))
return allowed_procs[P]
return 0
return FALSE
// Checks if this step applies to the user mob at all
/datum/surgery_step/proc/is_valid_target(mob/living/carbon/human/target)
if(!ishuman(target))
return 0
return FALSE
if(allowed_species)
for(var/species in allowed_species)
if(target.species.get_bodytype() == species)
return 1
return TRUE
if(disallowed_species)
for(var/species in disallowed_species)
if(target.species.get_bodytype() == species)
return 0
return FALSE
return 1
return TRUE
// Let's check if stuff blocks us from doing surgery on them
// TODO: make it based on area coverage rather than just forbid spacesuits?
@@ -91,7 +91,7 @@
// checks whether this step can be applied with the given user and target
/datum/surgery_step/proc/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
return 0
return FALSE
// does stuff to begin the step, usually just printing messages. Moved germs transfering and bloodying here too
/datum/surgery_step/proc/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
@@ -128,11 +128,11 @@
/obj/item/proc/can_do_surgery(mob/living/carbon/M, mob/living/user)
// if(M == user)
// return 0
// return FALSE
if(!ishuman(M))
return 1
return TRUE
return 1
return TRUE
/obj/item/proc/do_surgery(mob/living/carbon/M, mob/living/user)
if(!can_do_surgery(M, user))
@@ -164,7 +164,7 @@
continue
if(!available_surgeries.len) //No available surgeries. Failure.
return 0
return FALSE
// Having trouble with an ASSOSCIATED LIST? or REMOVING SOMETHING FROM AN ASSOCIATED LIST? Look here for a quick guide, developed out of frustration.
// Note: This is an ultra edge case. Like, what is being done here is horrible and is so rare this should never happen again in the code.