Fixes multisurgery, reduces surgical times (#16779)

* Fixes multisurgery, reduces surgical times

* Reflect laser scalpels in CL
This commit is contained in:
Doxxmedearly
2023-07-21 19:35:07 +00:00
committed by GitHub
parent 9ae368a3bc
commit 5ce0e5a8a9
12 changed files with 125 additions and 111 deletions
+9 -9
View File
@@ -12,8 +12,8 @@
can_infect = TRUE
blood_level = 1
min_duration = 50
max_duration = 60
min_duration = 30
max_duration = 40
/singleton/surgery_step/glue_bone/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
if(!..())
@@ -48,8 +48,8 @@
WRENCH = 75 \
)
min_duration = 60
max_duration = 70
min_duration = 30
max_duration = 50
/singleton/surgery_step/set_bone/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
if(!..())
@@ -88,8 +88,8 @@
WRENCH = 75 \
)
min_duration = 60
max_duration = 70
min_duration = 40
max_duration = 50
/singleton/surgery_step/mend_skull/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
if(!..())
@@ -125,8 +125,8 @@
can_infect = TRUE
blood_level = 1
min_duration = 50
max_duration = 60
min_duration = 30
max_duration = 40
/singleton/surgery_step/finish_bone/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
if(!..())
@@ -153,4 +153,4 @@
var/obj/item/organ/external/affected = target.get_organ(target_zone)
user.visible_message(SPAN_WARNING("[user]'s hand slips, smearing [tool] in the incision in [target]'s [affected.name]!") , \
SPAN_WARNING("Your hand slips, smearing [tool] in the incision in [target]'s [affected.name]!"))
target.apply_damage(15, DAMAGE_PAIN)
target.apply_damage(15, DAMAGE_PAIN)
+7 -7
View File
@@ -24,8 +24,8 @@
/obj/item/material/hatchet = 75
)
min_duration = 50
max_duration = 70
min_duration = 30
max_duration = 50
/singleton/surgery_step/open_encased/saw/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
if(!..())
@@ -71,8 +71,8 @@
/obj/item/crowbar = 75
)
min_duration = 30
max_duration = 40
min_duration = 20
max_duration = 30
/singleton/surgery_step/open_encased/retract/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
if(!..())
@@ -123,7 +123,7 @@
)
min_duration = 20
max_duration = 40
max_duration = 30
/singleton/surgery_step/open_encased/close/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
if(!..())
@@ -181,7 +181,7 @@
)
min_duration = 20
max_duration = 40
max_duration = 30
/singleton/surgery_step/open_encased/mend/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
if(!..())
@@ -211,4 +211,4 @@
target.custom_pain("Something hurts horribly in your [affected.name]!", 75)
..()
affected.open = ORGAN_OPEN_RETRACTED
affected.open = ORGAN_OPEN_RETRACTED
+5 -5
View File
@@ -23,8 +23,8 @@
/obj/item/material/shard = 50
)
min_duration = 90
max_duration = 110
min_duration = 70
max_duration = 90
/singleton/surgery_step/generic/cut_face/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
return ..() && target_zone == BP_MOUTH && target.op_stage.face == FACE_NORMAL
@@ -62,8 +62,8 @@
/obj/item/material/shard = 50
)
min_duration = 90
max_duration = 110
min_duration = 70
max_duration = 90
/singleton/surgery_step/robotics/face/synthskin/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
return ..() && target.op_stage.face == FACE_NORMAL && target.get_species() == SPECIES_IPC_SHELL
@@ -81,4 +81,4 @@
/singleton/surgery_step/robotics/face/synthskin/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
user.visible_message(SPAN_WARNING("[user]'s hand slips, slicing [target]'s throat wth \the [tool]!") , \
SPAN_WARNING("Your hand slips, slicing [target]'s throat wth \the [tool]!") )
target.apply_damage(40, DAMAGE_BRUTE, target_zone, 0, tool, damage_flags = tool.damage_flags())
target.apply_damage(40, DAMAGE_BRUTE, target_zone, 0, tool, damage_flags = tool.damage_flags())
+14 -14
View File
@@ -23,8 +23,8 @@
/obj/item/material/knife/tacknife = 75
)
min_duration = 90
max_duration = 110
min_duration = 70
max_duration = 90
/singleton/surgery_step/generic/prepare_face/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
return ..() && target_zone == BP_MOUTH && target.op_stage.face == FACE_CUT_OPEN
@@ -55,8 +55,8 @@
/obj/item/device/assembly/mousetrap = 10 //I don't know. Don't ask me. But I'm leaving it because hilarity.
)
min_duration = 40
max_duration = 90
min_duration = 30
max_duration = 70
/singleton/surgery_step/generic/alter_face/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
return ..() && target_zone == BP_MOUTH && target.op_stage.face == FACE_RETRACTED
@@ -102,8 +102,8 @@
/obj/item/weldingtool = 25
)
min_duration = 70
max_duration = 100
min_duration = 50
max_duration = 80
/singleton/surgery_step/face/cauterize/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
return ..() && target.op_stage.face > FACE_NORMAL
@@ -145,8 +145,8 @@
/obj/item/material/shard = 50
)
min_duration = 90
max_duration = 110
min_duration = 70
max_duration = 90
/singleton/surgery_step/robotics/face/synthskinopen/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
return ..() && target.op_stage.face == FACE_NORMAL && target.get_species() == SPECIES_IPC_SHELL
@@ -173,8 +173,8 @@
/obj/item/material/knife/tacknife = 75
)
min_duration = 90
max_duration = 110
min_duration = 70
max_duration = 90
/singleton/surgery_step/robotics/face/prepare_face/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
return ..() && target_zone == BP_MOUTH && target.op_stage.face == FACE_CUT_OPEN
@@ -202,8 +202,8 @@
/obj/item/device/assembly/mousetrap = 10 //I don't know. Don't ask me. But I'm leaving it because hilarity.
)
min_duration = 40
max_duration = 90
min_duration = 30
max_duration = 70
/singleton/surgery_step/robotics/face/alter_synthface/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
return ..() && target_zone == BP_MOUTH && target.op_stage.face == FACE_RETRACTED
@@ -247,8 +247,8 @@
/obj/item/weldingtool = 25
)
min_duration = 70
max_duration = 100
min_duration = 50
max_duration = 80
/singleton/surgery_step/robotics/face/seal_face/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
return ..() && target.op_stage.face > FACE_NORMAL
+14 -14
View File
@@ -30,8 +30,8 @@
/obj/item/surgery/scalpel/laser1 = 75
)
priority = 2
min_duration = 90
max_duration = 110
min_duration = 50
max_duration = 70
/singleton/surgery_step/generic/cut_with_laser/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
if(!..())
@@ -73,8 +73,8 @@
/obj/item/surgery/scalpel/manager = 100
)
priority = 2
min_duration = 80
max_duration = 120
min_duration = 60
max_duration = 80
/singleton/surgery_step/generic/incision_manager/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
if(!..())
@@ -117,8 +117,8 @@
/obj/item/material/shard = 50
)
min_duration = 90
max_duration = 110
min_duration = 60
max_duration = 80
/singleton/surgery_step/generic/cut_open/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
if(!..())
@@ -161,8 +161,8 @@
/obj/item/pickaxe/ = 15
)
min_duration = 110
max_duration = 130
min_duration = 80
max_duration = 100
/singleton/surgery_step/generic/cut_open_vaurca/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
if(!..())
@@ -205,8 +205,8 @@
/obj/item/device/assembly/mousetrap = 20
)
min_duration = 40
max_duration = 60
min_duration = 20
max_duration = 30
/singleton/surgery_step/generic/clamp_bleeders/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
if(!..())
@@ -244,8 +244,8 @@
/obj/item/material/kitchen/utensil/fork = 50
)
min_duration = 30
max_duration = 40
min_duration = 20
max_duration = 30
/singleton/surgery_step/generic/retract_skin/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
if(!..())
@@ -303,8 +303,8 @@
/obj/item/weldingtool = 75
)
min_duration = 70
max_duration = 100
min_duration = 40
max_duration = 70
/singleton/surgery_step/generic/cauterize/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
if(!..())
+8 -8
View File
@@ -47,8 +47,8 @@
/obj/item/stack/rods = 50
)
min_duration = 60
max_duration = 80
min_duration = 50
max_duration = 70
/singleton/surgery_step/cavity/make_space/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
if(!..())
@@ -80,8 +80,8 @@
/obj/item/weldingtool = 25
)
min_duration = 60
max_duration = 80
min_duration = 50
max_duration = 70
/singleton/surgery_step/cavity/close_space/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
if(!..())
@@ -107,8 +107,8 @@
priority = 0
allowed_tools = list(/obj/item = 100)
min_duration = 80
max_duration = 100
min_duration = 60
max_duration = 80
/singleton/surgery_step/cavity/place_item/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
if(!..())
@@ -162,8 +162,8 @@
/obj/item/material/kitchen/utensil/fork = 20
)
min_duration = 80
max_duration = 100
min_duration = 60
max_duration = 80
/singleton/surgery_step/cavity/implant_removal/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
if(!..())
+7 -7
View File
@@ -25,8 +25,8 @@
name = "Replace Limb"
allowed_tools = list(/obj/item/organ/external = 100)
min_duration = 50
max_duration = 70
min_duration = 40
max_duration = 60
/singleton/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
@@ -58,8 +58,8 @@
)
can_infect = TRUE
min_duration = 100
max_duration = 120
min_duration = 80
max_duration = 100
/singleton/surgery_step/limb/connect/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
if(!..())
@@ -95,8 +95,8 @@
name = "Attach Prosthetic Limb"
allowed_tools = list(/obj/item/robot_parts = 100)
min_duration = 80
max_duration = 100
min_duration = 60
max_duration = 80
/singleton/surgery_step/limb/mechanize/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
if(!..())
@@ -138,4 +138,4 @@
/singleton/surgery_step/limb/mechanize/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
user.visible_message(SPAN_WARNING("[user]'s hand slips, damaging [target]'s flesh!"), \
SPAN_WARNING("Your hand slips, damaging [target]'s flesh!"))
target.apply_damage(10, DAMAGE_BRUTE, null, damage_flags = DAMAGE_FLAG_SHARP)
target.apply_damage(10, DAMAGE_BRUTE, null, damage_flags = DAMAGE_FLAG_SHARP)
+14 -14
View File
@@ -26,8 +26,8 @@
/obj/item/stack/medical/bruise_pack = 20
)
min_duration = 70
max_duration = 90
min_duration = 50
max_duration = 70
/singleton/surgery_step/internal/fix_organ/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
if(!..())
@@ -113,8 +113,8 @@
SCREWDRIVER = 70
)
min_duration = 70
max_duration = 90
min_duration = 50
max_duration = 70
/singleton/surgery_step/internal/fix_organ_robotic/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
if(!..())
@@ -183,8 +183,8 @@
/obj/item/material/shard = 50
)
min_duration = 90
max_duration = 110
min_duration = 70
max_duration = 90
/singleton/surgery_step/internal/detach_organ/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
if(!..())
@@ -246,8 +246,8 @@
/obj/item/material/kitchen/utensil/fork = 20
)
min_duration = 60
max_duration = 80
min_duration = 40
max_duration = 60
/singleton/surgery_step/internal/remove_organ/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
if(!..())
@@ -305,8 +305,8 @@
/obj/item/organ = 100
)
min_duration = 60
max_duration = 80
min_duration = 40
max_duration = 60
/singleton/surgery_step/internal/replace_organ/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
if(!..())
@@ -410,8 +410,8 @@
/obj/item/stack/cable_coil = 75
)
min_duration = 100
max_duration = 120
min_duration = 80
max_duration = 100
/singleton/surgery_step/internal/attach_organ/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
if(!..())
@@ -464,8 +464,8 @@
/obj/item/pickaxe/ = 5
)
min_duration = 100
max_duration = 120
min_duration = 80
max_duration = 100
/singleton/surgery_step/internal/prepare/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
if(!..())
+12 -12
View File
@@ -14,8 +14,8 @@
can_infect = TRUE
blood_level = 1
min_duration = 70
max_duration = 90
min_duration = 40
max_duration = 60
/singleton/surgery_step/fix_vein/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
if(!..())
@@ -62,8 +62,8 @@
can_infect = TRUE
blood_level = 1
min_duration = 110
max_duration = 160
min_duration = 80
max_duration = 130
/singleton/surgery_step/internal/fix_dead_tissue/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
if(!..())
@@ -127,8 +127,8 @@
can_infect = FALSE
blood_level = 0
min_duration = 100
max_duration = 110
min_duration = 80
max_duration = 90
/singleton/surgery_step/treat_necrosis/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
if(!..())
@@ -193,8 +193,8 @@
can_infect = TRUE
blood_level = 1
min_duration = 70
max_duration = 90
min_duration = 50
max_duration = 70
/singleton/surgery_step/fix_tendon/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
if(!..())
@@ -234,8 +234,8 @@
can_infect = FALSE
blood_level = 0
min_duration = 120
max_duration = 180
min_duration = 100
max_duration = 160
/singleton/surgery_step/hardsuit/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
if(!..())
@@ -271,8 +271,8 @@
/obj/item/material/hatchet = 55
)
min_duration = 110
max_duration = 160
min_duration = 90
max_duration = 140
/singleton/surgery_step/amputate/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
if(!..())
+18 -18
View File
@@ -30,8 +30,8 @@
/obj/item/material/kitchen/utensil/knife = 50
)
min_duration = 90
max_duration = 110
min_duration = 70
max_duration = 90
requires_surgery_compatibility = FALSE
@@ -72,8 +72,8 @@
/obj/item/material/kitchen/utensil/knife = 50
)
min_duration = 90
max_duration = 110
min_duration = 70
max_duration = 90
requires_surgery_compatibility = FALSE
@@ -114,8 +114,8 @@
/obj/item/material/kitchen/utensil = 50
)
min_duration = 30
max_duration = 40
min_duration = 20
max_duration = 30
/singleton/surgery_step/robotics/open_hatch/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
if(!..())
@@ -151,8 +151,8 @@
/obj/item/material/kitchen/utensil = 50
)
min_duration = 70
max_duration = 100
min_duration = 50
max_duration = 80
/singleton/surgery_step/robotics/close_hatch/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
if(!..())
@@ -191,8 +191,8 @@
/obj/item/gun/energy/plasmacutter = 50
)
min_duration = 50
max_duration = 60
min_duration = 30
max_duration = 40
/singleton/surgery_step/robotics/repair_brute/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
if(!..())
@@ -236,8 +236,8 @@
/obj/item/stack/cable_coil/cyborg = 100
)
min_duration = 50
max_duration = 60
min_duration = 30
max_duration = 40
/singleton/surgery_step/robotics/repair_burn/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
if(!..())
@@ -279,8 +279,8 @@
/obj/item/device/multitool = 100
)
min_duration = 90
max_duration = 110
min_duration = 70
max_duration = 90
/singleton/surgery_step/robotics/detach_organ_robotic/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
if(!..())
@@ -329,8 +329,8 @@
SCREWDRIVER = 100
)
min_duration = 100
max_duration = 120
min_duration = 80
max_duration = 100
requires_surgery_compatibility = FALSE
@@ -380,8 +380,8 @@
/obj/item/device/mmi = 100
)
min_duration = 60
max_duration = 80
min_duration = 40
max_duration = 60
/singleton/surgery_step/robotics/install_mmi/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
if(!..())
+10 -3
View File
@@ -122,6 +122,13 @@
to_chat(user, SPAN_WARNING("You can't operate on this area while surgery is already in progress."))
return TRUE
//Check that one surgeon is not doing multiple surgeries at once
for(var/surg in M.op_stage.in_progress)
var/current_surgeon = M.op_stage.in_progress[surg]
if(user == current_surgeon)
to_chat(user, SPAN_WARNING("You can only focus on one surgery at a time!"))
return TRUE
// What surgeries does our tool/target enable?
var/list/possible_surgeries
var/list/all_surgeries = GET_SINGLETON_SUBTYPE_MAP(/singleton/surgery_step)
@@ -151,17 +158,17 @@
if(zone in M.op_stage.in_progress)
to_chat(user, SPAN_WARNING("You can't operate on this area while surgery is already in progress."))
else if(S.is_valid_target(M))
M.op_stage.in_progress += zone
M.op_stage.in_progress += list(zone = user)
S.begin_step(user, M, zone, tool)
var/duration = rand(S.min_duration, S.max_duration)
if(prob(S.tool_quality(tool)) && do_mob(user, M, duration))
if(prob(S.tool_quality(tool)) && do_mob(user, M, duration) && !autofail)
S.end_step(user, M, zone, tool)
else if ((tool in user.contents) && user.Adjacent(M))
S.fail_step(user, M, zone, tool)
else
to_chat(user, SPAN_WARNING("You must remain close to your patient to conduct surgery."))
if(!QDELETED(M))
M.op_stage.in_progress -= zone
M.op_stage.in_progress -= list(zone = user)
if(ishuman(M))
var/mob/living/carbon/human/H = M
H.update_surgery()