From c84ce517e30ecf3b6a64f83cda00ffe857bb8da5 Mon Sep 17 00:00:00 2001 From: Chinsky Date: Tue, 28 May 2013 18:16:11 +0400 Subject: [PATCH] Changed way substitute tools are handled. Now all tools have chance of success. Proper ones have 100. If tool has less than 100 chance of success, it can fail the step. --- code/modules/surgery/appendix.dm | 14 ++++++--- code/modules/surgery/bones.dm | 25 +++++++++------ code/modules/surgery/braincore.dm | 51 ++++++++++++++++++++++--------- code/modules/surgery/eye.dm | 28 ++++++++++++----- code/modules/surgery/face.dm | 28 ++++++++++++----- code/modules/surgery/generic.dm | 34 +++++++++++++++------ code/modules/surgery/implant.dm | 29 +++++++++++------- code/modules/surgery/other.dm | 6 ++-- code/modules/surgery/ribcage.dm | 39 +++++++++++++++++------ code/modules/surgery/robolimbs.dm | 23 +++++++++----- code/modules/surgery/surgery.dm | 28 +++++++---------- 11 files changed, 206 insertions(+), 99 deletions(-) diff --git a/code/modules/surgery/appendix.dm b/code/modules/surgery/appendix.dm index 027e323c576..54a26427fcf 100644 --- a/code/modules/surgery/appendix.dm +++ b/code/modules/surgery/appendix.dm @@ -18,8 +18,11 @@ return 1 /datum/surgery_step/appendectomy/cut_appendix - required_tool = /obj/item/weapon/scalpel - allowed_tools = list(/obj/item/weapon/shard, /obj/item/weapon/kitchenknife) + allowed_tools = list( + /obj/item/weapon/scalpel = 100, \ + /obj/item/weapon/kitchenknife = 75, \ + /obj/item/weapon/shard = 50, \ + ) min_duration = 70 max_duration = 90 @@ -45,8 +48,11 @@ groin.createwound(CUT, 50, 1) /datum/surgery_step/appendectomy/remove_appendix - required_tool = /obj/item/weapon/hemostat - allowed_tools = list(/obj/item/weapon/wirecutters) + allowed_tools = list( + /obj/item/weapon/hemostat = 100, \ + /obj/item/weapon/wirecutters = 75, \ + /obj/item/weapon/kitchen/utensil/fork = 20 + ) min_duration = 60 max_duration = 80 diff --git a/code/modules/surgery/bones.dm b/code/modules/surgery/bones.dm index e0eaab854ff..75e3b6e0997 100644 --- a/code/modules/surgery/bones.dm +++ b/code/modules/surgery/bones.dm @@ -4,9 +4,10 @@ ////////////////////////////////////////////////////////////////// /datum/surgery_step/glue_bone - priority = 2 - required_tool = /obj/item/weapon/bonegel - allowed_tools = list(/obj/item/weapon/screwdriver) + allowed_tools = list( + /obj/item/weapon/bonegel = 100, \ + /obj/item/weapon/screwdriver = 75 + ) can_infect = 1 blood_level = 1 @@ -37,8 +38,10 @@ "\red Your hand slips, smearing [tool] in the incision in [target]'s [affected.display_name]!") /datum/surgery_step/set_bone - required_tool = /obj/item/weapon/bonesetter - allowed_tools = list(/obj/item/weapon/wrench) + allowed_tools = list( + /obj/item/weapon/bonesetter = 100, \ + /obj/item/weapon/wrench = 75 \ + ) min_duration = 60 max_duration = 70 @@ -72,8 +75,10 @@ affected.createwound(BRUISE, 5) /datum/surgery_step/mend_skull - required_tool = /obj/item/weapon/bonesetter - allowed_tools = list(/obj/item/weapon/wrench) + allowed_tools = list( + /obj/item/weapon/bonesetter = 100, \ + /obj/item/weapon/wrench = 75 \ + ) min_duration = 60 max_duration = 70 @@ -102,8 +107,10 @@ h.disfigured = 1 /datum/surgery_step/finish_bone - required_tool = /obj/item/weapon/bonegel - allowed_tools = list(/obj/item/weapon/screwdriver) + allowed_tools = list( + /obj/item/weapon/bonegel = 100, \ + /obj/item/weapon/screwdriver = 75 + ) can_infect = 1 blood_level = 1 diff --git a/code/modules/surgery/braincore.dm b/code/modules/surgery/braincore.dm index b1a43d5a55f..16a7fb08d96 100644 --- a/code/modules/surgery/braincore.dm +++ b/code/modules/surgery/braincore.dm @@ -10,7 +10,10 @@ return target_zone == "head" && hasorgans(target) /datum/surgery_step/brain/saw_skull - required_tool = /obj/item/weapon/circular_saw + allowed_tools = list( + /obj/item/weapon/circular_saw = 100, \ + /obj/item/weapon/hatchet = 75 + ) min_duration = 50 max_duration = 70 @@ -31,11 +34,14 @@ 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 skull with \the [tool]!" , \ "\red Your hand slips, cracking [target]'s skull with \the [tool]!" ) - target.apply_damage(10, BRUTE, "head") + target.apply_damage(max(10, tool.force), BRUTE, "head") /datum/surgery_step/brain/cut_brain - required_tool = /obj/item/weapon/scalpel - allowed_tools = list(/obj/item/weapon/shard, /obj/item/weapon/kitchenknife) + allowed_tools = list( + /obj/item/weapon/scalpel = 100, \ + /obj/item/weapon/kitchenknife = 75, \ + /obj/item/weapon/shard = 50, \ + ) min_duration = 80 max_duration = 100 @@ -59,7 +65,10 @@ target.apply_damage(50, BRUTE, "head", 1) /datum/surgery_step/brain/saw_spine - required_tool = /obj/item/weapon/circular_saw + allowed_tools = list( + /obj/item/weapon/circular_saw = 100, \ + /obj/item/weapon/hatchet = 75 + ) min_duration = 50 max_duration = 70 @@ -103,8 +112,11 @@ ////////////////////////////////////////////////////////////////// /datum/surgery_step/brain/bone_chips - required_tool = /obj/item/weapon/hemostat - allowed_tools = list(/obj/item/weapon/wirecutters, /obj/item/weapon/kitchen/utensil/fork) + allowed_tools = list( + /obj/item/weapon/hemostat = 100, \ + /obj/item/weapon/wirecutters = 75, \ + /obj/item/weapon/kitchen/utensil/fork = 20 + ) min_duration = 80 max_duration = 100 @@ -129,8 +141,10 @@ target.apply_damage(30, BRUTE, "head", 1) /datum/surgery_step/brain/hematoma - required_tool = /obj/item/weapon/FixOVein - allowed_tools = list(/obj/item/weapon/cable_coil) + allowed_tools = list( + /obj/item/weapon/FixOVein , \ + /obj/item/weapon/cable_coil + ) min_duration = 90 max_duration = 110 @@ -165,8 +179,11 @@ return istype(target, /mob/living/carbon/slime/) && target.stat == 2 /datum/surgery_step/slime/cut_flesh - required_tool = /obj/item/weapon/scalpel - allowed_tools = list(/obj/item/weapon/shard, /obj/item/weapon/kitchenknife) + allowed_tools = list( + /obj/item/weapon/scalpel = 100, \ + /obj/item/weapon/kitchenknife = 75, \ + /obj/item/weapon/shard = 50, \ + ) min_duration = 30 max_duration = 50 @@ -188,8 +205,11 @@ "\red Your hand slips, tearing [target]'s flesh with \the [tool]!") /datum/surgery_step/slime/cut_innards - required_tool = /obj/item/weapon/scalpel - allowed_tools = list(/obj/item/weapon/shard, /obj/item/weapon/kitchenknife) + allowed_tools = list( + /obj/item/weapon/scalpel = 100, \ + /obj/item/weapon/kitchenknife = 75, \ + /obj/item/weapon/shard = 50, \ + ) min_duration = 30 max_duration = 50 @@ -211,7 +231,10 @@ "\red Your hand slips, tearing [target]'s innards with \the [tool]!") /datum/surgery_step/slime/saw_core - required_tool = /obj/item/weapon/circular_saw + allowed_tools = list( + /obj/item/weapon/circular_saw = 100, \ + /obj/item/weapon/hatchet = 75 + ) min_duration = 50 max_duration = 70 diff --git a/code/modules/surgery/eye.dm b/code/modules/surgery/eye.dm index 8f100aee173..9f11b48c78f 100644 --- a/code/modules/surgery/eye.dm +++ b/code/modules/surgery/eye.dm @@ -15,8 +15,11 @@ return target_zone == "eyes" /datum/surgery_step/eye/cut_open - required_tool = /obj/item/weapon/scalpel - allowed_tools = list(/obj/item/weapon/shard, /obj/item/weapon/kitchenknife) + allowed_tools = list( + /obj/item/weapon/scalpel = 100, \ + /obj/item/weapon/kitchenknife = 75, \ + /obj/item/weapon/shard = 50, \ + ) min_duration = 90 max_duration = 110 @@ -41,8 +44,10 @@ affected.createwound(CUT, 10) /datum/surgery_step/eye/lift_eyes - required_tool = /obj/item/weapon/retractor - allowed_tools = list(/obj/item/weapon/kitchen/utensil/fork) + allowed_tools = list( + /obj/item/weapon/retractor = 100, \ + /obj/item/weapon/kitchen/utensil/fork = 50 + ) min_duration = 30 max_duration = 40 @@ -67,8 +72,11 @@ target.apply_damage(10, BRUTE, affected) /datum/surgery_step/eye/mend_eyes - required_tool = /obj/item/weapon/hemostat - allowed_tools = list(/obj/item/weapon/cable_coil, /obj/item/device/assembly/mousetrap) + allowed_tools = list( + /obj/item/weapon/hemostat = 100, \ + /obj/item/weapon/cable_coil = 75, \ + /obj/item/device/assembly/mousetrap = 10 //I don't know. Don't ask me. But I'm leaving it because hilarity. + ) min_duration = 80 max_duration = 100 @@ -93,8 +101,12 @@ target.apply_damage(10, BRUTE, affected) /datum/surgery_step/eye/cauterize - required_tool = /obj/item/weapon/cautery - allowed_tools = list(/obj/item/weapon/weldingtool, /obj/item/clothing/mask/cigarette, /obj/item/weapon/lighter) + allowed_tools = list( + /obj/item/weapon/cautery = 100, \ + /obj/item/clothing/mask/cigarette = 75, \ + /obj/item/weapon/lighter = 50, \ + /obj/item/weapon/weldingtool = 25 + ) min_duration = 70 max_duration = 100 diff --git a/code/modules/surgery/face.dm b/code/modules/surgery/face.dm index 90ce1d81349..e215487d0b7 100644 --- a/code/modules/surgery/face.dm +++ b/code/modules/surgery/face.dm @@ -15,8 +15,11 @@ return target_zone == "mouth" /datum/surgery_step/generic/cut_face - required_tool = /obj/item/weapon/scalpel - allowed_tools = list(/obj/item/weapon/shard, /obj/item/weapon/kitchenknife) + allowed_tools = list( + /obj/item/weapon/scalpel = 100, \ + /obj/item/weapon/kitchenknife = 75, \ + /obj/item/weapon/shard = 50, \ + ) min_duration = 90 max_duration = 110 @@ -42,8 +45,11 @@ target.losebreath += 10 /datum/surgery_step/face/mend_vocal - required_tool = /obj/item/weapon/hemostat - allowed_tools = list(/obj/item/weapon/cable_coil, /obj/item/device/assembly/mousetrap) + allowed_tools = list( + /obj/item/weapon/hemostat = 100, \ + /obj/item/weapon/cable_coil = 75, \ + /obj/item/device/assembly/mousetrap = 10 //I don't know. Don't ask me. But I'm leaving it because hilarity. + ) min_duration = 70 max_duration = 90 @@ -67,8 +73,10 @@ target.losebreath += 10 /datum/surgery_step/face/fix_face - required_tool = /obj/item/weapon/retractor - allowed_tools = list(/obj/item/weapon/kitchen/utensil/fork) + allowed_tools = list( + /obj/item/weapon/retractor = 100, \ + /obj/item/weapon/crowbar = 55, \ + /obj/item/weapon/kitchen/utensil/fork = 75) min_duration = 80 max_duration = 100 @@ -93,8 +101,12 @@ target.apply_damage(10, BRUTE, affected) /datum/surgery_step/face/cauterize - required_tool = /obj/item/weapon/cautery - allowed_tools = list(/obj/item/weapon/weldingtool, /obj/item/clothing/mask/cigarette, /obj/item/weapon/lighter) + allowed_tools = list( + /obj/item/weapon/cautery = 100, \ + /obj/item/clothing/mask/cigarette = 75, \ + /obj/item/weapon/lighter = 50, \ + /obj/item/weapon/weldingtool = 25 + ) min_duration = 70 max_duration = 100 diff --git a/code/modules/surgery/generic.dm b/code/modules/surgery/generic.dm index d9cdb79d0bf..5694a595b0b 100644 --- a/code/modules/surgery/generic.dm +++ b/code/modules/surgery/generic.dm @@ -20,8 +20,11 @@ return 1 /datum/surgery_step/generic/cut_open - required_tool = /obj/item/weapon/scalpel - allowed_tools = list(/obj/item/weapon/shard, /obj/item/weapon/kitchenknife) + allowed_tools = list( + /obj/item/weapon/scalpel = 100, \ + /obj/item/weapon/kitchenknife = 75, \ + /obj/item/weapon/shard = 50, \ + ) min_duration = 90 max_duration = 110 @@ -53,8 +56,11 @@ affected.createwound(CUT, 10) /datum/surgery_step/generic/clamp_bleeders - required_tool = /obj/item/weapon/hemostat - allowed_tools = list(/obj/item/weapon/cable_coil, /obj/item/device/assembly/mousetrap) + allowed_tools = list( + /obj/item/weapon/hemostat = 100, \ + /obj/item/weapon/cable_coil = 75, \ + /obj/item/device/assembly/mousetrap = 20 + ) min_duration = 40 max_duration = 60 @@ -84,8 +90,11 @@ affected.createwound(CUT, 10) /datum/surgery_step/generic/retract_skin - required_tool = /obj/item/weapon/retractor - allowed_tools = list(/obj/item/weapon/crowbar,/obj/item/weapon/kitchen/utensil/fork) + allowed_tools = list( + /obj/item/weapon/retractor = 100, \ + /obj/item/weapon/crowbar = 75, \ + /obj/item/weapon/kitchen/utensil/fork = 50 + ) min_duration = 30 max_duration = 40 @@ -135,8 +144,12 @@ target.apply_damage(12, BRUTE, affected) /datum/surgery_step/generic/cauterize - required_tool = /obj/item/weapon/cautery - allowed_tools = list(/obj/item/weapon/weldingtool, /obj/item/clothing/mask/cigarette, /obj/item/weapon/lighter) + allowed_tools = list( + /obj/item/weapon/cautery = 100, \ + /obj/item/clothing/mask/cigarette = 75, \ + /obj/item/weapon/lighter = 50, \ + /obj/item/weapon/weldingtool = 25 + ) min_duration = 70 max_duration = 100 @@ -167,7 +180,10 @@ target.apply_damage(3, BURN, affected) /datum/surgery_step/generic/cut_limb - required_tool = /obj/item/weapon/circular_saw + allowed_tools = list( + /obj/item/weapon/circular_saw = 100, \ + /obj/item/weapon/hatchet = 75 + ) min_duration = 110 max_duration = 160 diff --git a/code/modules/surgery/implant.dm b/code/modules/surgery/implant.dm index 1a64f37cf2b..238bbc0a418 100644 --- a/code/modules/surgery/implant.dm +++ b/code/modules/surgery/implant.dm @@ -31,8 +31,11 @@ return "" /datum/surgery_step/cavity/make_space - required_tool = /obj/item/weapon/surgicaldrill - allowed_tools = list(/obj/item/weapon/pen,/obj/item/stack/rods) + allowed_tools = list( + /obj/item/weapon/surgicaldrill = 100, \ + /obj/item/weapon/pen = 75, \ + /obj/item/stack/rods = 50 + ) min_duration = 60 max_duration = 80 @@ -62,8 +65,12 @@ /datum/surgery_step/cavity/close_space priority = 2 - required_tool = /obj/item/weapon/cautery - allowed_tools = list(/obj/item/weapon/weldingtool, /obj/item/clothing/mask/cigarette, /obj/item/weapon/lighter) + allowed_tools = list( + /obj/item/weapon/cautery = 100, \ + /obj/item/clothing/mask/cigarette = 75, \ + /obj/item/weapon/lighter = 50, \ + /obj/item/weapon/weldingtool = 25 + ) min_duration = 60 max_duration = 80 @@ -93,7 +100,7 @@ /datum/surgery_step/cavity/place_item priority = 0 - required_tool = /obj/item + allowed_tools = list(/obj/item = 100) min_duration = 80 max_duration = 100 @@ -136,8 +143,11 @@ ////////////////////////////////////////////////////////////////// /datum/surgery_step/cavity/implant_removal - required_tool = /obj/item/weapon/hemostat - allowed_tools = list(/obj/item/weapon/wirecutters, /obj/item/weapon/kitchen/utensil/fork) + allowed_tools = list( + /obj/item/weapon/hemostat = 100, \ + /obj/item/weapon/wirecutters = 75, \ + /obj/item/weapon/kitchen/utensil/fork = 20 + ) min_duration = 80 max_duration = 100 @@ -159,8 +169,6 @@ find_prob +=60 else find_prob +=40 - if (isright(tool)) - find_prob +=20 if (prob(find_prob)) user.visible_message("\blue [user] takes something out of incision on [target]'s [affected.display_name] with \the [tool].", \ "\blue You take something out of incision on [target]'s [affected.display_name]s with \the [tool]." ) @@ -189,8 +197,7 @@ affected.createwound(CUT, 20) if (affected.implants.len) var/fail_prob = 10 - if (!isright(tool)) - fail_prob += 30 + fail_prob += 100 - tool_quality(tool) if (prob(fail_prob)) var/obj/item/weapon/implant/imp = affected.implants[1] user.visible_message("\red Something beeps inside [target]'s [affected.display_name]!") diff --git a/code/modules/surgery/other.dm b/code/modules/surgery/other.dm index d75bb538f3d..fd49b26b0e8 100644 --- a/code/modules/surgery/other.dm +++ b/code/modules/surgery/other.dm @@ -6,8 +6,10 @@ /datum/surgery_step/fix_vein priority = 2 - required_tool = /obj/item/weapon/FixOVein - allowed_tools = list(/obj/item/weapon/cable_coil) + allowed_tools = list( + /obj/item/weapon/circular_saw = 100, \ + /obj/item/weapon/hatchet = 75 + ) can_infect = 1 blood_level = 1 diff --git a/code/modules/surgery/ribcage.dm b/code/modules/surgery/ribcage.dm index 591d6ab0f47..0ebe07a0199 100644 --- a/code/modules/surgery/ribcage.dm +++ b/code/modules/surgery/ribcage.dm @@ -10,7 +10,10 @@ return target_zone == "chest" /datum/surgery_step/ribcage/saw_ribcage - required_tool = /obj/item/weapon/circular_saw + allowed_tools = list( + /obj/item/weapon/circular_saw = 100, \ + /obj/item/weapon/hatchet = 75 + ) min_duration = 50 max_duration = 70 @@ -41,8 +44,11 @@ /datum/surgery_step/ribcage/retract_ribcage - required_tool = /obj/item/weapon/retractor - allowed_tools = list(/obj/item/weapon/crowbar) + 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 @@ -77,8 +83,12 @@ affected.fracture() /datum/surgery_step/ribcage/close_ribcage - required_tool = /obj/item/weapon/retractor - allowed_tools = list(/obj/item/weapon/crowbar) + 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 @@ -112,7 +122,10 @@ target.rupture_lung() /datum/surgery_step/ribcage/mend_ribcage - required_tool = /obj/item/weapon/bonegel + allowed_tools = list( + /obj/item/weapon/bonegel = 100, \ + /obj/item/weapon/screwdriver = 75 + ) min_duration = 20 max_duration = 40 @@ -127,7 +140,6 @@ 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." @@ -139,7 +151,11 @@ // ALIEN EMBRYO SURGERY // ////////////////////////////////////////////////////////////////// /datum/surgery_step/ribcage/remove_embryo - required_tool = /obj/item/weapon/hemostat + 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 @@ -171,8 +187,11 @@ // CHEST INTERNAL ORGAN SURGERY // ////////////////////////////////////////////////////////////////// /datum/surgery_step/ribcage/fix_chest_internal - required_tool = /obj/item/weapon/scalpel - allowed_tools = list(/obj/item/weapon/shard, /obj/item/weapon/kitchenknife) + allowed_tools = list( + /obj/item/weapon/scalpel = 100, \ + /obj/item/weapon/kitchenknife = 75, \ + /obj/item/weapon/shard = 50, \ + ) min_duration = 70 max_duration = 90 diff --git a/code/modules/surgery/robolimbs.dm b/code/modules/surgery/robolimbs.dm index 94d07eb3e24..9b8f42e4d76 100644 --- a/code/modules/surgery/robolimbs.dm +++ b/code/modules/surgery/robolimbs.dm @@ -20,8 +20,11 @@ /datum/surgery_step/limb/cut - required_tool = /obj/item/weapon/scalpel - allowed_tools = list(/obj/item/weapon/shard, /obj/item/weapon/kitchenknife) + allowed_tools = list( + /obj/item/weapon/scalpel = 100, \ + /obj/item/weapon/kitchenknife = 75, \ + /obj/item/weapon/shard = 50, \ + ) min_duration = 80 max_duration = 100 @@ -48,8 +51,10 @@ /datum/surgery_step/limb/mend - required_tool = /obj/item/weapon/retractor - allowed_tools = list(/obj/item/weapon/kitchen/utensil/fork) + allowed_tools = list( + /obj/item/weapon/retractor = 100, \ + /obj/item/weapon/crowbar = 75, \ + /obj/item/weapon/kitchen/utensil/fork = 50) min_duration = 80 max_duration = 100 @@ -80,8 +85,12 @@ /datum/surgery_step/limb/prepare - required_tool = /obj/item/weapon/cautery - allowed_tools = list(/obj/item/weapon/weldingtool, /obj/item/clothing/mask/cigarette, /obj/item/weapon/lighter) + allowed_tools = list( + /obj/item/weapon/cautery = 100, \ + /obj/item/clothing/mask/cigarette = 75, \ + /obj/item/weapon/lighter = 50, \ + /obj/item/weapon/weldingtool = 25 + ) min_duration = 60 max_duration = 70 @@ -115,7 +124,7 @@ /datum/surgery_step/limb/attach - required_tool = /obj/item/robot_parts + allowed_tools = list(/obj/item/robot_parts = 100) can_infect = 0 min_duration = 80 diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm index 62b9afb52c0..2d8db6670cf 100644 --- a/code/modules/surgery/surgery.dm +++ b/code/modules/surgery/surgery.dm @@ -2,10 +2,8 @@ /datum/surgery_step var/priority = 0 //steps with higher priority would be attempted first - // type path referencing the required tool for this step - var/required_tool = null - // type path referencing tools that can be used as substitude for this step + // type path referencing tools that can be used for this step, and how well are they suited for it var/list/allowed_tools = null // duration of the step @@ -17,16 +15,11 @@ //How much blood this step can get on surgeon. 1 - hands, 2 - full body. var/blood_level = 0 - //is it is a required surgical tool for this step - proc/isright(obj/item/tool) - return (istype(tool,required_tool)) - - //is it is an accepted replacement tool for this step - proc/isacceptable(obj/item/tool) - if (allowed_tools) - for (var/T in allowed_tools) - if (istype(tool,T)) - return 1 + //returns how well tool is suited for this step + proc/tool_quality(obj/item/tool) + for (var/T in allowed_tools) + if (istype(tool,T)) + return allowed_tools[T] return 0 // checks whether this step can be applied with the given user and target @@ -69,10 +62,11 @@ proc/do_surgery(mob/living/M, mob/living/user, obj/item/tool) if (user.a_intent == "harm") //check for Hippocratic Oath return 0 for(var/datum/surgery_step/S in surgery_steps) - if( (S.isright(tool) || S.isacceptable(tool)) && \ - S.can_use(user, M, user.zone_sel.selecting, tool)) //check if tool is right or close enough and if this step is possible - S.begin_step(user, M, user.zone_sel.selecting, tool) //start on it - if(do_mob(user, M, rand(S.min_duration, S.max_duration))) //if user did nto move or changed hands + //check if tool is right or close enough and if this step is possible + if( S.tool_quality(tool) && S.can_use(user, M, user.zone_sel.selecting, tool)) + S.begin_step(user, M, user.zone_sel.selecting, tool) //start on it + //We had proper tools! (or RNG smiled.) and User did not move or change hands. + if( prob(S.tool_quality(tool)) && do_mob(user, M, rand(S.min_duration, S.max_duration))) S.end_step(user, M, user.zone_sel.selecting, tool) //finish successfully else //or S.fail_step(user, M, user.zone_sel.selecting, tool) //malpractice~