From fdc841be8ed4f1f71dc1507465c83b98dacc800a Mon Sep 17 00:00:00 2001 From: datlo Date: Sat, 26 Jan 2019 00:50:18 +0000 Subject: [PATCH 1/5] whole bunch of surgery changes early cautery not compiling yet --- code/__HELPERS/unsorted.dm | 8 --- code/_onclick/item_attack.dm | 4 +- .../mob/living/silicon/robot/robot_modules.dm | 6 +- code/modules/surgery/helpers.dm | 66 +++++++++++++++---- 4 files changed, 58 insertions(+), 26 deletions(-) diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 6de17fc35b5..97978fe6832 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -1229,14 +1229,6 @@ var/global/list/common_tools = list( istype(W, /obj/item/bonesetter) ) -//check if mob is lying down on something we can operate him on. -/proc/can_operate(mob/living/carbon/M) - return (locate(/obj/machinery/optable, M.loc) && (M.lying || M.resting)) || \ - (locate(/obj/structure/bed/roller, M.loc) && \ - (M.buckled || M.lying || M.weakened || M.stunned || M.paralysis || M.sleeping || M.stat)) && prob(75) || \ - (locate(/obj/structure/table/, M.loc) && \ - (M.lying || M.weakened || M.stunned || M.paralysis || M.sleeping || M.stat) && prob(66)) - /proc/reverse_direction(var/dir) switch(dir) if(NORTH) diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index d69c7fbf28f..6c1ca24314d 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -50,12 +50,12 @@ else return 1 - if(isscrewdriver(src) && ismachine(M)) + if(isscrewdriver(src) && ismachine(M) && user.a_intent == INTENT_HELP) if(!attempt_initiate_surgery(src, M, user)) return 0 else return 1 - if(is_sharp(src)) + if(is_sharp(src) && user.a_intent == INTENT_HELP) if(!attempt_initiate_surgery(src, M, user)) return 0 else diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index ee0cf0db06f..0250cbca499 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -153,10 +153,9 @@ modules += new /obj/item/stack/medical/ointment/advanced(src) modules += new /obj/item/stack/medical/splint(src) modules += new /obj/item/stack/nanopaste(src) - modules += new /obj/item/scalpel(src) + modules += new /obj/item/scalpel/laser(src) modules += new /obj/item/hemostat(src) modules += new /obj/item/retractor(src) - modules += new /obj/item/cautery(src) modules += new /obj/item/bonegel(src) modules += new /obj/item/FixOVein(src) modules += new /obj/item/bonesetter(src) @@ -416,10 +415,9 @@ modules += new /obj/item/stack/medical/ointment/advanced(src) modules += new /obj/item/stack/medical/splint(src) modules += new /obj/item/stack/nanopaste(src) - modules += new /obj/item/scalpel(src) + modules += new /obj/item/scalpel/laser(src) modules += new /obj/item/hemostat(src) modules += new /obj/item/retractor(src) - modules += new /obj/item/cautery(src) modules += new /obj/item/bonegel(src) modules += new /obj/item/FixOVein(src) modules += new /obj/item/bonesetter(src) diff --git a/code/modules/surgery/helpers.dm b/code/modules/surgery/helpers.dm index dae7d2a7773..5a0f220d5e2 100644 --- a/code/modules/surgery/helpers.dm +++ b/code/modules/surgery/helpers.dm @@ -3,6 +3,13 @@ var/mob/living/carbon/human/H var/obj/item/organ/external/affecting var/selected_zone = user.zone_sel.selecting + var/list/cautery_tools = list( + /obj/item/scalpel/laser = 100, \ + /obj/item/cautery = 100, \ + /obj/item/clothing/mask/cigarette = 90, \ + /obj/item/lighter = 60, \ + /obj/item/weldingtool = 30 + ) if(istype(M, /mob/living/carbon/human)) H = M @@ -61,26 +68,49 @@ user.visible_message("[user] prepares to operate on [M]'s [parse_zone(selected_zone)].", \ "You prepare to operate on [M]'s [parse_zone(selected_zone)].") - else if(!current_surgery.step_in_progress) - if(current_surgery.status == 1 ) + else if(!current_surgery.step_in_progress && ishuman(M)) //early surgery cautery + var/datum/surgery_step/generic/cauterize/C = new + var/target_zone = check_zone(selected_zone) + if(current_surgery.status == 1) M.surgeries -= current_surgery to_chat(user, "You stop the surgery.") qdel(current_surgery) - else if(istype(user.get_inactive_hand(), /obj/item/cautery) && current_surgery.can_cancel) - M.surgeries -= current_surgery - user.visible_message("[user] mends the incision on [M]'s [parse_zone(selected_zone)] with the [I] .", \ - "You mend the incision on [M]'s [parse_zone(selected_zone)].") - if(affecting) - affecting.open = 0 - affecting.germ_level = 0 - qdel(current_surgery) - else if(current_surgery.can_cancel) - to_chat(user, "You need to hold a cautery in inactive hand to stop [M]'s surgery!") + else if(current_surgery.can_cancel) + var/cautery_chance = 0 + var/obj/item/cautery_tool = null + + if(isrobot(user)) + if(istype(I, /obj/item/scalpel/laser)) + cautery_chance = 100 + cautery_tool = I + + else + for(var/T in cautery_tools) + if(istype(user.get_inactive_hand(), T)) + cautery_chance = cautery_tools[T] + cautery_tool = user.get_inactive_hand() + + if(cautery_chance) + C.begin_step(user, H, selected_zone, target_zone, cautery_tool, current_surgery) + if(do_after(user, C.time * cautery_tool.toolspeed, target = M)) + if(!isrobot(user)) + cautery_chance *= get_location_modifier(target) + cautery_chance *= get_pain_modifier(target) + if(prob(cautery_chance)) + C.end_step(user, H, selected_zone, target_zone, cautery_tool, current_surgery) + M.surgeries -= current_surgery + qdel(current_surgery) + else + C.fail_step(user, H, selected_zone, target_zone, cautery_tool, current_surgery) + + else if(!isrobot(user)) + to_chat(user, "You need to hold a cautery or equivalent in your inactive hand to stop the surgery in progress.") return 1 return 0 + /proc/get_pain_modifier(mob/living/carbon/human/M) //returns modfier to make surgery harder if patient is conscious and feels pain if(M.stat) //stat=0 if CONSCIOUS, 1=UNCONSCIOUS and 2=DEAD. Operating on dead people is easy, too. Just sleeping won't work, though. return 1 @@ -111,6 +141,18 @@ else return 0.5 +//check if mob is lying down on something we can operate him on. +/proc/can_operate(mob/living/carbon/M) + if(locate(/obj/machinery/optable, M.loc) && (M.lying || M.resting)) + return TRUE + if(locate(/obj/structure/bed, M.loc) && (M.buckled || M.lying || M.weakened || M.stunned || M.paralysis || M.sleeping || M.stat)) + return TRUE + if(locate(/obj/structure/table, M.loc) && (M.lying || M.weakened || M.stunned || M.paralysis || M.sleeping || M.stat)) + return TRUE + if((istype(M.loc, /turf/simulated/floor) || istype(M.loc, /turf/unsimulated/floor)) && (M.lying || M.weakened || M.stunned || M.paralysis || M.sleeping || M.stat)) + return TRUE + return FALSE + // Called when a limb containing this object is placed back on a body /atom/movable/proc/attempt_become_organ(obj/item/organ/external/parent,mob/living/carbon/human/H) return 0 From 33112e32e39f10408b6b36d7e910f580fb86b403 Mon Sep 17 00:00:00 2001 From: datlo Date: Sat, 26 Jan 2019 01:50:43 +0000 Subject: [PATCH 2/5] fix compile error --- code/modules/surgery/helpers.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/surgery/helpers.dm b/code/modules/surgery/helpers.dm index 5a0f220d5e2..972fe3ab316 100644 --- a/code/modules/surgery/helpers.dm +++ b/code/modules/surgery/helpers.dm @@ -95,8 +95,8 @@ C.begin_step(user, H, selected_zone, target_zone, cautery_tool, current_surgery) if(do_after(user, C.time * cautery_tool.toolspeed, target = M)) if(!isrobot(user)) - cautery_chance *= get_location_modifier(target) - cautery_chance *= get_pain_modifier(target) + cautery_chance *= get_location_modifier(H) + cautery_chance *= get_pain_modifier(H) if(prob(cautery_chance)) C.end_step(user, H, selected_zone, target_zone, cautery_tool, current_surgery) M.surgeries -= current_surgery From 9f4e60288132405cfac87644081c4cab90e9d476 Mon Sep 17 00:00:00 2001 From: datlo Date: Sat, 26 Jan 2019 02:47:38 +0000 Subject: [PATCH 3/5] remove extra var, floor surgery, add med gripper --- .../living/silicon/robot/drone/drone_items.dm | 25 ++++++++++++++++--- .../mob/living/silicon/robot/robot_modules.dm | 2 ++ code/modules/surgery/helpers.dm | 9 +++---- 3 files changed, 27 insertions(+), 9 deletions(-) diff --git a/code/modules/mob/living/silicon/robot/drone/drone_items.dm b/code/modules/mob/living/silicon/robot/drone/drone_items.dm index 124a8d90fae..d200bdb075a 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_items.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_items.dm @@ -38,16 +38,35 @@ /obj/item/gripper/paperwork name = "paperwork gripper" desc = "A simple grasping tool for clerical work." - icon = 'icons/obj/device.dmi' - icon_state = "gripper" can_hold = list( /obj/item/clipboard, /obj/item/paper, -// /obj/item/paper_bundle, /obj/item/card/id ) +/obj/item/gripper/medical + name = "medical gripper" + desc = "A grasping tool used to help patients up once surgery is complete." + can_hold = list() + +/obj/item/gripper/medical/afterattack(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, proximity, params) + var/mob/living/carbon/human/H + if(!wrapped && proximity && target && ishuman(target)) + H = target + if(H.lying) + H.AdjustSleeping(-5) + if(H.sleeping == 0) + H.StopResting() + H.AdjustParalysis(-3) + H.AdjustStunned(-3) + H.AdjustWeakened(-3) + playsound(user.loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) + user.visible_message( \ + "[user] shakes [H] trying to wake [H.p_them()] up!",\ + "You shake [H] trying to wake [H.p_them()] up!",\ + ) + /obj/item/gripper/New() ..() can_hold = typecacheof(can_hold) diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index 0250cbca499..eca14c04135 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -161,6 +161,7 @@ modules += new /obj/item/bonesetter(src) modules += new /obj/item/circular_saw(src) modules += new /obj/item/surgicaldrill(src) + modules += new /obj/item/gripper/medical(src) emag = new /obj/item/reagent_containers/spray(src) @@ -422,6 +423,7 @@ modules += new /obj/item/FixOVein(src) modules += new /obj/item/bonesetter(src) modules += new /obj/item/surgicaldrill(src) + modules += new /obj/item/gripper/medical(src) modules += new /obj/item/melee/energy/sword/cyborg/saw(src) //Energy saw -- primary weapon modules += new /obj/item/card/emag(src) modules += new /obj/item/crowbar/cyborg(src) diff --git a/code/modules/surgery/helpers.dm b/code/modules/surgery/helpers.dm index 972fe3ab316..f3e039da6a8 100644 --- a/code/modules/surgery/helpers.dm +++ b/code/modules/surgery/helpers.dm @@ -70,7 +70,6 @@ else if(!current_surgery.step_in_progress && ishuman(M)) //early surgery cautery var/datum/surgery_step/generic/cauterize/C = new - var/target_zone = check_zone(selected_zone) if(current_surgery.status == 1) M.surgeries -= current_surgery to_chat(user, "You stop the surgery.") @@ -92,17 +91,17 @@ cautery_tool = user.get_inactive_hand() if(cautery_chance) - C.begin_step(user, H, selected_zone, target_zone, cautery_tool, current_surgery) + C.begin_step(user, H, selected_zone, cautery_tool, current_surgery) if(do_after(user, C.time * cautery_tool.toolspeed, target = M)) if(!isrobot(user)) cautery_chance *= get_location_modifier(H) cautery_chance *= get_pain_modifier(H) if(prob(cautery_chance)) - C.end_step(user, H, selected_zone, target_zone, cautery_tool, current_surgery) + C.end_step(user, H, selected_zone, cautery_tool, current_surgery) M.surgeries -= current_surgery qdel(current_surgery) else - C.fail_step(user, H, selected_zone, target_zone, cautery_tool, current_surgery) + C.fail_step(user, H, selected_zone, cautery_tool, current_surgery) else if(!isrobot(user)) to_chat(user, "You need to hold a cautery or equivalent in your inactive hand to stop the surgery in progress.") @@ -149,8 +148,6 @@ return TRUE if(locate(/obj/structure/table, M.loc) && (M.lying || M.weakened || M.stunned || M.paralysis || M.sleeping || M.stat)) return TRUE - if((istype(M.loc, /turf/simulated/floor) || istype(M.loc, /turf/unsimulated/floor)) && (M.lying || M.weakened || M.stunned || M.paralysis || M.sleeping || M.stat)) - return TRUE return FALSE // Called when a limb containing this object is placed back on a body From e976d6dae82ee07e03c2aee0876f820745df1092 Mon Sep 17 00:00:00 2001 From: datlo Date: Sun, 27 Jan 2019 12:06:03 +0000 Subject: [PATCH 4/5] Medborg get an improved laser scalpel --- code/modules/mob/living/silicon/robot/robot_modules.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index eca14c04135..b762ac257bd 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -153,7 +153,7 @@ modules += new /obj/item/stack/medical/ointment/advanced(src) modules += new /obj/item/stack/medical/splint(src) modules += new /obj/item/stack/nanopaste(src) - modules += new /obj/item/scalpel/laser(src) + modules += new /obj/item/scalpel/laser/laser2(src) modules += new /obj/item/hemostat(src) modules += new /obj/item/retractor(src) modules += new /obj/item/bonegel(src) @@ -416,7 +416,7 @@ modules += new /obj/item/stack/medical/ointment/advanced(src) modules += new /obj/item/stack/medical/splint(src) modules += new /obj/item/stack/nanopaste(src) - modules += new /obj/item/scalpel/laser(src) + modules += new /obj/item/scalpel/laser/laser3(src) modules += new /obj/item/hemostat(src) modules += new /obj/item/retractor(src) modules += new /obj/item/bonegel(src) From 6271fd855476f307e679d6c872c303533d20f2c7 Mon Sep 17 00:00:00 2001 From: datlo Date: Sun, 27 Jan 2019 13:17:24 +0000 Subject: [PATCH 5/5] nerfs laser scalpels for borgs they were too fast and more annoying than helpful, caused you to cauterize too early by accident often --- code/modules/mob/living/silicon/robot/robot_modules.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index b762ac257bd..f3074ea6423 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -153,7 +153,7 @@ modules += new /obj/item/stack/medical/ointment/advanced(src) modules += new /obj/item/stack/medical/splint(src) modules += new /obj/item/stack/nanopaste(src) - modules += new /obj/item/scalpel/laser/laser2(src) + modules += new /obj/item/scalpel/laser/laser1(src) modules += new /obj/item/hemostat(src) modules += new /obj/item/retractor(src) modules += new /obj/item/bonegel(src) @@ -416,7 +416,7 @@ modules += new /obj/item/stack/medical/ointment/advanced(src) modules += new /obj/item/stack/medical/splint(src) modules += new /obj/item/stack/nanopaste(src) - modules += new /obj/item/scalpel/laser/laser3(src) + modules += new /obj/item/scalpel/laser/laser1(src) modules += new /obj/item/hemostat(src) modules += new /obj/item/retractor(src) modules += new /obj/item/bonegel(src)