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~