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 027e323c57..54a26427fc 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 e0eaab854f..75e3b6e099 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 b1a43d5a55..16a7fb08d9 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 8f100aee17..9f11b48c78 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 90ce1d8134..e215487d0b 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 d9cdb79d0b..5694a595b0 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 1a64f37cf2..238bbc0a41 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 d75bb538f3..fd49b26b0e 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 591d6ab0f4..0ebe07a019 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 94d07eb3e2..9b8f42e4d7 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 62b9afb52c..2d8db6670c 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~