From 4a6d8cd1e19687a1d7c8d53ce92a0e698780aab7 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Mon, 5 Jun 2017 19:35:06 -0400 Subject: [PATCH] mostly working now --- code/__DEFINES/combat.dm | 5 +- code/_onclick/hud/alert.dm | 6 ++ code/modules/mob/living/carbon/carbon.dm | 2 +- .../surgery/{implant.dm => cavity_implant.dm} | 94 +----------------- code/modules/surgery/implant_removal.dm | 78 +++++++++++++++ code/modules/surgery/organs_internal.dm | 12 +++ .../modules/surgery/remove_embedded_object.dm | 29 +++++- icons/mob/screen_alert.dmi | Bin 36406 -> 37433 bytes paradise.dme | 3 +- 9 files changed, 127 insertions(+), 102 deletions(-) rename code/modules/surgery/{implant.dm => cavity_implant.dm} (70%) create mode 100644 code/modules/surgery/implant_removal.dm diff --git a/code/__DEFINES/combat.dm b/code/__DEFINES/combat.dm index 71c6bac6979..40f27d0d84f 100644 --- a/code/__DEFINES/combat.dm +++ b/code/__DEFINES/combat.dm @@ -80,7 +80,4 @@ #define WEAPON_LIGHT 0 #define WEAPON_MEDIUM 1 - #define WEAPON_HEAVY 2 - -// Embedded objects -#define EMBED_THROWSPEED_THRESHOLD 15 \ No newline at end of file + #define WEAPON_HEAVY 2 \ No newline at end of file diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm index 68a24f87a3e..9b80dc2c8e0 100644 --- a/code/_onclick/hud/alert.dm +++ b/code/_onclick/hud/alert.dm @@ -235,6 +235,12 @@ or something covering your eyes." desc = "All that alcohol you've been drinking is impairing your speech, motor skills, and mental cognition. Make sure to act like it." icon_state = "drunk" +/obj/screen/alert/embeddedobject + name = "Embedded Object" + desc = "Something got lodged into your flesh and is causing major bleeding. It might fall out with time, but surgery is the safest way. \ + If you're feeling frisky, click yourself in help intent to pull the object out." + icon_state = "embeddedobject" + /obj/screen/alert/embeddedobject/Click() if(isliving(usr)) var/mob/living/carbon/human/M = usr diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index eb17146192c..3b0cafbe7b1 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -246,7 +246,7 @@ src.show_message(text("\t []My [] is [].",status=="OK"?"":"",org.name,status),1) for(var/obj/item/I in org.embedded_objects) - to_chat(src, "\t There is \a [I] embedded in your [org.name]!") + to_chat(src, "\t There is \a [I] embedded in your [org.name]!") if(staminaloss) if(staminaloss > 30) diff --git a/code/modules/surgery/implant.dm b/code/modules/surgery/cavity_implant.dm similarity index 70% rename from code/modules/surgery/implant.dm rename to code/modules/surgery/cavity_implant.dm index 2a4f4ad20ea..bd82e7192ae 100644 --- a/code/modules/surgery/implant.dm +++ b/code/modules/surgery/cavity_implant.dm @@ -1,10 +1,3 @@ -//Procedures in this file: Putting items in body cavity. Implant removal. Items removal. - - -////////////////////////////////////////////////////////////////// -// ITEM PLACEMENT SURGERY // -////////////////////////////////////////////////////////////////// - /datum/surgery/cavity_implant name = "Cavity Implant/Removal" steps = list(/datum/surgery_step/generic/cut_open,/datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/open_encased/saw, @@ -210,89 +203,4 @@ return 1 else to_chat(user, "You don't find anything in [target]'s [target_zone].") - return 0 - - -////////////////////////////////////////////////////////////////// -// IMPLANT REMOVAL SURGERY // -////////////////////////////////////////////////////////////////// - -/datum/surgery/cavity_implant_rem - name = "Implant Removal" - steps = list(/datum/surgery_step/generic/cut_open, /datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin,/datum/surgery_step/cavity/implant_removal,/datum/surgery_step/cavity/close_space,/datum/surgery_step/generic/cauterize/) - possible_locs = list("chest") - -/datum/surgery/cavity_implant_rem/synth - name = "Implant Removal" - steps = list(/datum/surgery_step/robotics/external/unscrew_hatch,/datum/surgery_step/robotics/external/open_hatch,/datum/surgery_step/cavity/implant_removal,/datum/surgery_step/robotics/external/close_hatch) - possible_locs = list("chest") - -/datum/surgery/cavity_implant_rem/can_start(mob/user, mob/living/carbon/human/target) - if(!istype(target)) - return 0 - var/obj/item/organ/external/affected = target.get_organ(user.zone_sel.selecting) - if(!affected) - return 0 - if(affected.status & ORGAN_ROBOT) - return 0 - return 1 - -/datum/surgery/cavity_implant_rem/synth/can_start(mob/user, mob/living/carbon/human/target) - if(!istype(target)) - return 0 - var/obj/item/organ/external/affected = target.get_organ(user.zone_sel.selecting) - if(!affected) - return 0 - if(!(affected.status & ORGAN_ROBOT)) - return 0 - - return 1 - -/datum/surgery_step/cavity/implant_removal - name = "extract implant" - allowed_tools = list( - /obj/item/weapon/hemostat = 100, \ - /obj/item/weapon/wirecutters = 75, \ - /obj/item/weapon/kitchen/utensil/fork = 20 - ) - var/obj/item/weapon/implant/I = null - time = 64 - -/datum/surgery_step/cavity/implant_removal/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - I = locate(/obj/item/weapon/implant) in target - user.visible_message("[user] starts poking around inside [target]'s [affected.name] with \the [tool].", \ - "You start poking around inside [target]'s [affected.name] with \the [tool]." ) - target.custom_pain("The pain in your [affected.name] is living hell!",1) - ..() - -/datum/surgery_step/cavity/implant_removal/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - I = locate(/obj/item/weapon/implant) in target - if(I && (target_zone == "chest")) //implant removal only works on the chest. - user.visible_message("[user] takes something out of [target]'s [affected.name] with \the [tool].", \ - "You take [I] out of [target]'s [affected.name]s with \the [tool]." ) - - I.removed(target) - - var/obj/item/weapon/implantcase/case - - if(istype(user.get_item_by_slot(slot_l_hand), /obj/item/weapon/implantcase)) - case = user.get_item_by_slot(slot_l_hand) - else if(istype(user.get_item_by_slot(slot_r_hand), /obj/item/weapon/implantcase)) - case = user.get_item_by_slot(slot_r_hand) - else - case = locate(/obj/item/weapon/implantcase) in get_turf(target) - - if(case && !case.imp) - case.imp = I - I.loc = case - case.update_icon() - user.visible_message("[user] places [I] into [case]!", "You place [I] into [case].") - else - qdel(I) - return 1 - else - user.visible_message(" [user] could not find anything inside [target]'s [affected.name], and pulls \the [tool] out.", \ - "You could not find anything inside [target]'s [affected.name].") - return 1 \ No newline at end of file + return 0 \ No newline at end of file diff --git a/code/modules/surgery/implant_removal.dm b/code/modules/surgery/implant_removal.dm new file mode 100644 index 00000000000..21994202765 --- /dev/null +++ b/code/modules/surgery/implant_removal.dm @@ -0,0 +1,78 @@ +////////////////////////////////////////////////////////////////// +// IMPLANT REMOVAL SURGERY // +////////////////////////////////////////////////////////////////// + +/datum/surgery/implant_removal + name = "Implant Removal" + steps = list(/datum/surgery_step/generic/cut_open, /datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin,/datum/surgery_step/extract_implant,/datum/surgery_step/generic/cauterize) + possible_locs = list("chest") + +/datum/surgery/implant_removal/synth + name = "Implant Removal" + steps = list(/datum/surgery_step/robotics/external/unscrew_hatch,/datum/surgery_step/robotics/external/open_hatch,/datum/surgery_step/extract_implant,/datum/surgery_step/robotics/external/close_hatch) + possible_locs = list("chest") + +/datum/surgery/implant_removal/can_start(mob/user, mob/living/carbon/human/target) + if(!istype(target)) + return 0 + var/obj/item/organ/external/affected = target.get_organ(user.zone_sel.selecting) + if(!affected) + return 0 + if(affected.status & ORGAN_ROBOT) + return 0 + return 1 + +/datum/surgery/implant_removal/synth/can_start(mob/user, mob/living/carbon/human/target) + if(!istype(target)) + return 0 + var/obj/item/organ/external/affected = target.get_organ(user.zone_sel.selecting) + if(!affected) + return 0 + if(!(affected.status & ORGAN_ROBOT)) + return 0 + + return 1 + +/datum/surgery_step/extract_implant + name = "extract implant" + allowed_tools = list(/obj/item/weapon/hemostat = 100, /obj/item/weapon/crowbar = 65) + time = 64 + var/obj/item/weapon/implant/I = null + +/datum/surgery_step/extract_implant/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + I = locate(/obj/item/weapon/implant) in target + user.visible_message("[user] starts poking around inside [target]'s [affected.name] with \the [tool].", \ + "You start poking around inside [target]'s [affected.name] with \the [tool]." ) + target.custom_pain("The pain in your [affected.name] is living hell!",1) + ..() + +/datum/surgery_step/extract_implant/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + I = locate(/obj/item/weapon/implant) in target + if(I && (target_zone == "chest")) //implant removal only works on the chest. + user.visible_message("[user] takes something out of [target]'s [affected.name] with \the [tool].", \ + "You take [I] out of [target]'s [affected.name]s with \the [tool]." ) + + I.removed(target) + + var/obj/item/weapon/implantcase/case + + if(istype(user.get_item_by_slot(slot_l_hand), /obj/item/weapon/implantcase)) + case = user.get_item_by_slot(slot_l_hand) + else if(istype(user.get_item_by_slot(slot_r_hand), /obj/item/weapon/implantcase)) + case = user.get_item_by_slot(slot_r_hand) + else + case = locate(/obj/item/weapon/implantcase) in get_turf(target) + + if(case && !case.imp) + case.imp = I + I.loc = case + case.update_icon() + user.visible_message("[user] places [I] into [case]!", "You place [I] into [case].") + else + qdel(I) + else + user.visible_message(" [user] could not find anything inside [target]'s [affected.name], and pulls \the [tool] out.", \ + "You could not find anything inside [target]'s [affected.name].") + return 1 \ No newline at end of file diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm index 420d56de43d..6b71afdcadf 100644 --- a/code/modules/surgery/organs_internal.dm +++ b/code/modules/surgery/organs_internal.dm @@ -159,6 +159,11 @@ else if(implement_type in implements_extract) current_type = "extract" var/list/organs = target.get_organs_zone(target_zone) + var/mob/living/simple_animal/borer/B = target.has_brain_worms() + if(B) + user.visible_message("[user] begins to extract [B] from [target]'s [parse_zone(target_zone)].", + "You begin to extract [B] from [target]'s [parse_zone(target_zone)]...") + return TRUE if(!organs.len) to_chat(user, "There are no removeable organs in [target]'s [parse_zone(target_zone)]!") return -1 @@ -262,6 +267,13 @@ I.status &= ~ORGAN_CUT_AWAY else if(current_type == "extract") +/* var/mob/living/simple_animal/borer/B = target.has_brain_worms() + if(B && B.victim == target) + user.visible_message("[user] successfully extracts [B] from [target]'s [parse_zone(target_zone)]!", + "You successfully extract [B] from [target]'s [parse_zone(target_zone)].") + add_logs(user, target, "surgically removed [B] from", addition="INTENT: [uppertext(user.a_intent)]") + B.leave_victim() + return FALSE */ if(I && I.owner == target) user.visible_message(" [user] has separated and extracts [target]'s [I] with [tool].", " You have separated and extracted [target]'s [I] with [tool].") diff --git a/code/modules/surgery/remove_embedded_object.dm b/code/modules/surgery/remove_embedded_object.dm index 468fe9f7654..d7fe8b7fb53 100644 --- a/code/modules/surgery/remove_embedded_object.dm +++ b/code/modules/surgery/remove_embedded_object.dm @@ -1,11 +1,34 @@ /datum/surgery/embedded_removal - name = "removal of embedded objects" - steps = list(/datum/surgery_step/generic/cut_open, /datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/remove_object) + name = "Removal of Embedded Objects" + steps = list(/datum/surgery_step/generic/cut_open, /datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/remove_object,/datum/surgery_step/generic/cauterize) possible_locs = list("head", "chest", "l_arm", "l_hand", "r_arm", "r_hand","r_leg", "r_foot", "l_leg", "l_foot", "groin") +/datum/surgery/embedded_removal/synth + steps = list(/datum/surgery_step/robotics/external/unscrew_hatch,/datum/surgery_step/robotics/external/open_hatch,/datum/surgery_step/remove_object,/datum/surgery_step/robotics/external/close_hatch) + +/datum/surgery/embedded_removal/can_start(mob/user, mob/living/carbon/human/target) + if(!istype(target)) + return 0 + var/obj/item/organ/external/affected = target.get_organ(user.zone_sel.selecting) + if(!affected) + return 0 + if(affected.status & ORGAN_ROBOT) + return 0 + return 1 + +/datum/surgery/embedded_removal/synth/can_start(mob/user, mob/living/carbon/human/target) + if(!istype(target)) + return 0 + var/obj/item/organ/external/affected = target.get_organ(user.zone_sel.selecting) + if(!affected) + return 0 + if(!(affected.status & ORGAN_ROBOT)) + return 0 + + return 1 /datum/surgery_step/remove_object - name = "remove embedded objects" + name = "Remove Embedded Objects" time = 32 accept_hand = 1 var/obj/item/organ/external/L = null diff --git a/icons/mob/screen_alert.dmi b/icons/mob/screen_alert.dmi index 99359f5b079162980a798297bdeb6e237591ac97..297f9a9aae2898b2f93f978d73f1827fe18a7724 100644 GIT binary patch delta 17153 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 HEkpkw`d;u9 diff --git a/paradise.dme b/paradise.dme index 99e7a6f4913..74bcfa956a3 100644 --- a/paradise.dme +++ b/paradise.dme @@ -2126,12 +2126,13 @@ #include "code\modules\store\items.dm" #include "code\modules\store\store.dm" #include "code\modules\surgery\bones.dm" +#include "code\modules\surgery\cavity_implant.dm" #include "code\modules\surgery\dental_implant.dm" #include "code\modules\surgery\encased.dm" #include "code\modules\surgery\face.dm" #include "code\modules\surgery\generic.dm" #include "code\modules\surgery\helpers.dm" -#include "code\modules\surgery\implant.dm" +#include "code\modules\surgery\implant_removal.dm" #include "code\modules\surgery\limb_reattach.dm" #include "code\modules\surgery\organs_internal.dm" #include "code\modules\surgery\other.dm"