From 3a39d9d99dbfb6f3dcc64140195b94e001c67a55 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Tue, 26 Jan 2016 22:46:03 -0500 Subject: [PATCH] end conflict fixes did i SERIOUSLY upload my comparison file last time? FUCK --- .../MetaStation/MetaStation.v41A.II.dmm | 4 +- _maps/map_files/cyberiad/cyberiad.dmm | 2 +- code/game/machinery/rechargestation.dm | 4 +- code/game/objects/items.dm | 2 +- code/modules/surgery/organs_internal.dm | 582 +++++++----------- code/modules/surgery/organs_internal2.dm | 305 --------- 6 files changed, 218 insertions(+), 681 deletions(-) delete mode 100644 code/modules/surgery/organs_internal2.dm diff --git a/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm b/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm index c5efb941401..5485e09eace 100644 --- a/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm +++ b/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm @@ -383,7 +383,7 @@ "ahs" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/weapon/pickaxe,/obj/item/weapon/storage/firstaid/toxin,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "aht" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/weapon/scalpel,/obj/item/stack/cable_coil,/obj/item/weapon/storage/firstaid/regular,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "ahu" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/weapon/circular_saw,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) -"ahv" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/optable,/obj/item/organ/brain,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) +"ahv" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/optable,/obj/item/organ/internal/brain,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "ahw" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "shutter0"; id_tag = "voxshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{dir = 4; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_mid"; tag = "icon-window5 (EAST)"},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) "ahx" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/auxsolarport) "ahy" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "redcorner"},/area/security/prison) @@ -7701,7 +7701,7 @@ "cSe" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 11},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/chapel/office) "cSf" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/chapel/office) "cSg" = (/obj/machinery/door/morgue{name = "Relic Closet"; req_access_txt = "22"},/turf/simulated/floor/plasteel{tag = "icon-cult"; icon_state = "cult"; dir = 2},/area/chapel/office) -"cSh" = (/obj/structure/table/woodentable,/obj/item/weapon/spellbook/oneuse/smoke{name = "mysterious old book of "},/obj/item/weapon/reagent_containers/food/drinks/bottle/holywater{name = "flask of holy water"; pixel_x = -2; pixel_y = 2},/obj/item/weapon/nullrod{pixel_x = 4},/obj/item/organ/heart,/obj/item/device/soulstone,/turf/simulated/floor/plasteel{tag = "icon-cult"; icon_state = "cult"; dir = 2},/area/chapel/office) +"cSh" = (/obj/structure/table/woodentable,/obj/item/weapon/spellbook/oneuse/smoke{name = "mysterious old book of "},/obj/item/weapon/reagent_containers/food/drinks/bottle/holywater{name = "flask of holy water"; pixel_x = -2; pixel_y = 2},/obj/item/weapon/nullrod{pixel_x = 4},/obj/item/organ/internal/heart,/obj/item/device/soulstone,/turf/simulated/floor/plasteel{tag = "icon-cult"; icon_state = "cult"; dir = 2},/area/chapel/office) "cSi" = (/obj/machinery/door/airlock/maintenance{name = "Chapel Maintenance Access "; req_access_txt = "0"; req_one_access_txt = "12;27"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) "cSj" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/camera{c_tag = "Departure Lounge - Port Fore"; dir = 4; network = list("SS13")},/obj/structure/flora/kirbyplants{icon_state = "plant-24"; layer = 4.1; tag = "icon-plant-24"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) "cSk" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel,/area/hallway/secondary/exit{name = "\improper Departure Lounge"}) diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index 65c81b88470..f9f9a55ce62 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -8472,7 +8472,7 @@ "dha" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/broken_device,/obj/item/robot_parts/chest,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "dhb" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/weapon/scalpel,/obj/item/stack/cable_coil,/obj/item/weapon/storage/firstaid/regular,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "dhc" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/weapon/pickaxe,/obj/item/weapon/storage/firstaid/toxin,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) -"dhd" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/optable,/obj/item/organ/brain,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) +"dhd" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/optable,/obj/item/organ/internal/brain,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "dhe" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/weapon/circular_saw,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) "dhf" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "shutter0"; id_tag = "voxshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/shuttle/window{dir = 4; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_mid"; tag = "icon-window5 (EAST)"},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox) "dhg" = (/obj/item/weapon/storage/toolbox/syndicate,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox) diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm index d6daf0f4516..bac66c13cad 100644 --- a/code/game/machinery/rechargestation.dm +++ b/code/game/machinery/rechargestation.dm @@ -115,7 +115,7 @@ R.cell.charge = min(R.cell.charge + recharge_speed, R.cell.maxcharge) else if(istype(occupant, /mob/living/carbon/human)) var/mob/living/carbon/human/H = occupant - if(!isnull(H.internal_organs_by_name["cell"]) && H.nutrition < 450) + if(H.get_int_organ(/obj/item/organ/internal/cell) && H.nutrition < 450) H.nutrition = min(H.nutrition+recharge_speed_nutrition, 450) if(repairs) H.heal_overall_damage(repairs, repairs, 0, 1) @@ -242,7 +242,7 @@ if(occupant) H << "The cell is already occupied!" return - if(isnull(H.internal_organs_by_name["cell"])) + if(!H.get_int_organ(/obj/item/organ/internal/cell)) return can_accept_user = 1 diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index bd0c2a4fc5a..15d322aeaba 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -419,7 +419,7 @@ add_logs(M, user, "attacked", "[src.name]", "(INTENT: [uppertext(user.a_intent)])") if(istype(H)) - var/obj/item/organ/eyes/eyes = H.internal_organs_by_name["eyes"] + var/obj/item/organ/internal/eyes/eyes = H.get_int_organ(/obj/item/organ/internal/eyes) if(!eyes) // should still get stabbed in the head var/obj/item/organ/external/head/head = H.organs_by_name["head"] head.take_damage(rand(10,14), 1) diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm index ca8cf5eefe2..8074bf047b9 100644 --- a/code/modules/surgery/organs_internal.dm +++ b/code/modules/surgery/organs_internal.dm @@ -1,10 +1,37 @@ +/datum/surgery/organ_manipulation + name = "organ manipulation" + 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, + /datum/surgery_step/open_encased/retract, /datum/surgery_step/internal/manipulate_organs, /datum/surgery_step/glue_bone, /datum/surgery_step/set_bone,/datum/surgery_step/finish_bone,/datum/surgery_step/generic/cauterize) + possible_locs = list("chest","head") + requires_organic_bodypart = 0 + disallowed_mob = (/mob/living/carbon/human/machine) + +/datum/surgery/organ_manipulation/soft + possible_locs = list("groin", "eyes", "mouth") + steps = list(/datum/surgery_step/generic/cut_open,/datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/internal/manipulate_organs,/datum/surgery_step/generic/cauterize) + +/datum/surgery/organ_manipulation/boneless + possible_locs = list("chest","head","groin", "eyes", "mouth") + steps = list(/datum/surgery_step/generic/cut_open,/datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/internal/manipulate_organs,/datum/surgery_step/generic/cauterize) + allowed_mob = list(/mob/living/carbon/human/diona,/mob/living/carbon/human/slime) + disallowed_mob = list(/mob/living/carbon/human) + +/datum/surgery/organ_manipulation/alien + name = "alien organ manipulation" + possible_locs = list("chest", "head", "groin", "eyes", "mouth") + allowed_mob = list(/mob/living/carbon/alien/humanoid) + disallowed_mob = list(/mob/living/carbon/human) + steps = list(/datum/surgery_step/generic/cut_open, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/open_encased/saw, /datum/surgery_step/internal/manipulate_organs,/datum/surgery_step/generic/cauterize) + + + // Internal surgeries. /datum/surgery_step/internal priority = 2 can_infect = 1 blood_level = 1 -/datum/surgery_step/internal/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) +/datum/surgery_step/internal/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) if (!hasorgans(target)) return 0 @@ -12,54 +39,17 @@ var/obj/item/organ/external/affected = target.get_organ(target_zone) return affected && affected.open_enough_for_surgery() -////////////////////////////////////////////////////////////////// -// Dethrall Shadowling // -////////////////////////////////////////////////////////////////// -/datum/surgery_step/internal/dethrall - allowed_tools = list( - /obj/item/weapon/hemostat = 100, \ - /obj/item/weapon/wirecutters = 75, \ - /obj/item/weapon/kitchen/utensil/fork = 20 - ) - - min_duration = 120 - max_duration = 120 - - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - if (!hasorgans(target)) - return - var/obj/item/organ/external/affected = target.get_organ(target_zone) - return ..() && affected && is_thrall(target) && affected.open_enough_for_surgery() && target_zone == target.named_organ_parent("brain") - - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/braincase = target.named_organ_parent("brain") - user.visible_message("[user] begins looking around in [target]'s [braincase].", "You begin looking for foreign influences on [target]'s brain...") - user << "You locate a small, pulsing black tumor on the side of [target]'s brain and begin to remove it." - target << "A small part of your [braincase] pulses with agony as the light impacts it." - user.visible_message("[user] begins removing something from [target]'s [braincase].", \ - "You begin carefully extracting the tumor...") - ..() - - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/braincase = target.named_organ_parent("brain") - user.visible_message("[user] carefully extracts the tumor from [target]'s brain!", \ - "You extract the black tumor from [target]'s [braincase]. It quickly shrivels and burns away.") - ticker.mode.remove_thrall(target.mind,0) - - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/braincase = target.named_organ_parent("brain") - if(prob(50)) - user.visible_message("[user] slips and rips the tumor out from [target]'s [braincase]!", \ - "You fumble and tear out [target]'s tumor!") - target.adjustBrainLoss(110) // This is so you can't just defib'n go - ticker.mode.remove_thrall(target.mind,1) - else - user.visible_message("[user]'s hand slips and fumbles! Luckily, they didn't damage anything!") ////////////////////////////////////////////////////////////////// // ALIEN EMBRYO SURGERY // ////////////////////////////////////////////////////////////////// -/datum/surgery_step/internal/remove_embryo +///datum/surgery/remove_xeno_baby +// 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,/datum/surgery_step/open_encased/retract, /datum/surgery_step/internal/remove_embryo) +// possible_locs = list("chest") +// disallowed_mob = (/mob/living/carbon/human/machine) +//this is all handled bia organ mainpulation as an On_find + +/datum/surgery_step/internal/remove_embryo//might can just do this in organ mainpulation..but this is TARGETED for.. allowed_tools = list( /obj/item/weapon/hemostat = 100, \ /obj/item/weapon/wirecutters = 75, \ @@ -67,83 +57,172 @@ ) blood_level = 2 - min_duration = 80 max_duration = 100 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/embryo = 0 - for(var/obj/item/alien_embryo/A in target) - embryo = 1 - break +/datum/surgery_step/internal/remove_embryo/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/embryo = 0 + var/obj/item/organ/internal/body_egg/alien_embryo/A = target.get_int_organ(/obj/item/organ/internal/body_egg/alien_embryo) + if(A) + embryo = 1 + //break - if (!hasorgans(target)) - return - var/obj/item/organ/external/affected = target.get_organ(target_zone) - return ..() && affected && embryo && affected.open_enough_for_surgery() && target_zone == "chest" + if (!hasorgans(target)) + return + var/obj/item/organ/external/affected = target.get_organ(target_zone) + return ..() && affected && embryo && affected.open_enough_for_surgery() && target_zone == "chest" - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) +/datum/surgery_step/internal/remove_embryo/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/msg = "[user] starts to pull something out from [target]'s ribcage with \the [tool]." var/self_msg = "You start to pull something out from [target]'s ribcage with \the [tool]." user.visible_message(msg, self_msg) 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) - user.visible_message("\red [user] rips the larva out of [target]'s ribcage!", - "You rip the larva out of [target]'s ribcage!") +/datum/surgery_step/internal/remove_embryo/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + user.visible_message("\red [user] rips the larva out of [target]'s ribcage!", + "You rip the larva out of [target]'s ribcage!") - for(var/obj/item/alien_embryo/A in target) - A.loc = A.loc.loc + var/obj/item/organ/internal/body_egg/alien_embryo/A = target.get_int_organ(/obj/item/organ/internal/body_egg/alien_embryo) + if(A) + user << "You found an unknown alien organism in [target]'s chest!" + if(prob(10)) + A.AttemptGrow() + + A.remove(target) + A.loc = get_turf(target) + + return 1 + +/datum/surgery_step/internal/remove_embryo/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + + if (!hasorgans(target)) + return + + var/obj/item/organ/internal/body_egg/alien_embryo/A = target.get_int_organ(/obj/item/organ/internal/body_egg/alien_embryo) + if(A) + if(prob(50)) + A.AttemptGrow(0) + user.visible_message("[user] accidentally pokes the xenomorph in [target]!", "You accidentally poke the xenomorph in [target]!") + else + target.adjustOxyLoss(30) + user.visible_message("[user] accidentally pokes [target] in the lungs!", "You accidentally poke [target] in the lungs!") + + return 0 -////////////////////////////////////////////////////////////////// -// CHEST INTERNAL ORGAN SURGERY // -////////////////////////////////////////////////////////////////// -/datum/surgery_step/internal/fix_organ - allowed_tools = list( - /obj/item/stack/medical/advanced/bruise_pack= 100, \ - /obj/item/stack/medical/bruise_pack = 20 - ) - - min_duration = 70 +/datum/surgery_step/internal/manipulate_organs + name = "manipulate organs" + allowed_tools = list(/obj/item/organ/internal = 100, /obj/item/weapon/reagent_containers/food/snacks/organ = 0) + var/implements_extract = list(/obj/item/weapon/hemostat = 100, /obj/item/weapon/kitchen/utensil/fork = 55) + var/implements_mend = list(/obj/item/stack/medical/advanced/bruise_pack = 100,/obj/item/stack/nanopaste = 100,/obj/item/stack/medical/bruise_pack = 20) + //Finish is just so you can close up after you do other things. + var/implements_finsh = list(/obj/item/weapon/scalpel/manager = 120,/obj/item/weapon/retractor = 100 ,/obj/item/weapon/crowbar = 75) + var/current_type + var/obj/item/organ/internal/I = null + var/obj/item/organ/external/affected = null max_duration = 90 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) +/datum/surgery_step/internal/manipulate_organs/New() + ..() + allowed_tools = allowed_tools + implements_extract + implements_mend + implements_finsh - if (!hasorgans(target)) - return + + + +/datum/surgery_step/internal/manipulate_organs/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + + I = null + affected = target.get_organ(target_zone) + if(is_int_organ(tool)) + current_type = "insert" + I = tool + if(target_zone != I.parent_organ || target.get_organ_slot(I.slot)) + user << "There is no room for [I] in [target]'s [parse_zone(target_zone)]!" + return -1 + + if(I.damage > (I.max_damage * 0.75)) + user << " \The [I] is in no state to be transplanted." + return -1 + + if(target.get_int_organ(I)) + user << "\red \The [target] already has [I]." + return -1 + + user.visible_message("[user] starts transplanting \the [tool] into [target]'s [affected.name].", \ + "You start transplanting \the [tool] into [target]'s [affected.name].") + target.custom_pain("Someone's rooting around in your [affected.name]!",1) + + else if(implement_type in implements_finsh) + //same as surgery step /datum/surgery_step/open_encased/close/ + current_type = "finish" var/obj/item/organ/external/affected = target.get_organ(target_zone) - if(!affected) - return - var/is_organ_damaged = 0 - for(var/obj/item/organ/I in affected.internal_organs) - if(I.damage > 0 && I.robotic < 2) - is_organ_damaged = 1 - break - return ..() && is_organ_damaged + if(affected.encased) + var/msg = "[user] starts bending [target]'s [affected.encased] back into place with \the [tool]." + var/self_msg = "You start bending [target]'s [affected.encased] back into place with \the [tool]." + user.visible_message(msg, self_msg) + else + var/msg = "[user] starts pulling [target]'s skin back into place with \the [tool]." + var/self_msg = "You start pulling [target]'s skin back into place with \the [tool]." + user.visible_message(msg, self_msg) + target.custom_pain("Something hurts horribly in your [affected.name]!",1) + else if(implement_type in implements_extract) + current_type = "extract" + var/list/organs = target.get_organs_zone(target_zone) + if(!organs.len) + user << "There are no removeable organs in [target]'s [parse_zone(target_zone)]!" + return -1 + else + for(var/obj/item/organ/internal/O in organs) + O.on_find(user) + organs -= O + organs[O.name] = O - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + I = input("Remove which organ?", "Surgery", null, null) as null|anything in organs + if(I && user && target && user.Adjacent(target) && user.get_active_hand() == tool) + I = organs[I] + if(!I) return -1 + user.visible_message("[user] starts to separate [target]'s [I] with \the [tool].", \ + "You start to separate [target]'s [I] with \the [tool] for removal." ) + target.custom_pain("The pain in your [affected.name] is living hell!",1) + else + return -1 + + else if(implement_type in implements_mend) + //todo Change message, make it heal the organs... + current_type = "mend" var/tool_name = "\the [tool]" if (istype(tool, /obj/item/stack/medical/advanced/bruise_pack)) tool_name = "regenerative membrane" else if (istype(tool, /obj/item/stack/medical/bruise_pack)) tool_name = "the bandaid" + else if (istype(tool, /obj/item/stack/nanopaste)) + tool_name = "\the [tool]" //what else do you call nanopaste medically? - if (!hasorgans(target)) + if(!hasorgans(target)) + user << "They do not have organs to mend!" return - var/obj/item/organ/external/affected = target.get_organ(target_zone) - - for(var/obj/item/organ/I in affected.internal_organs) + for(var/obj/item/organ/internal/I in affected.internal_organs) if(I && I.damage > 0) - if(I.robotic < 2) - spread_germs_to_organ(I, user) + if(I.robotic < 2 && !istype (tool, /obj/item/stack/nanopaste)) + if(!I.sterile) + spread_germs_to_organ(I, user) + user.visible_message("[user] starts treating damage to [target]'s [I.name] with [tool_name].", \ + "You start treating damage to [target]'s [I.name] with [tool_name]." ) + else if(I.robotic > 2 && istype(tool, /obj/item/stack/nanopaste)) user.visible_message("[user] starts treating damage to [target]'s [I.name] with [tool_name].", \ "You start treating damage to [target]'s [I.name] with [tool_name]." ) + user << "No organs appear to be damaged." + return -1 target.custom_pain("The pain in your [affected.name] is living hell!",1) - ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + else if(istype(tool, /obj/item/weapon/reagent_containers/food/snacks/organ)) + user << "[tool] was biten by someone! It's too damaged to use!" + return -1 + ..() + +/datum/surgery_step/internal/manipulate_organs/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + if(current_type == "mend") var/tool_name = "\the [tool]" if (istype(tool, /obj/item/stack/medical/advanced/bruise_pack)) tool_name = "regenerative membrane" @@ -152,298 +231,61 @@ if (!hasorgans(target)) return - var/obj/item/organ/external/affected = target.get_organ(target_zone) - - for(var/obj/item/organ/I in affected.internal_organs) + for(var/obj/item/organ/internal/I in affected.internal_organs) if(I) I.surgeryize() if(I && I.damage > 0) - if(I.robotic < 2) + if(I.robotic < 2 && !istype (tool, /obj/item/stack/nanopaste)) user.visible_message("\blue [user] treats damage to [target]'s [I.name] with [tool_name].", \ "\blue You treat damage to [target]'s [I.name] with [tool_name]." ) I.damage = 0 - - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - - if (!hasorgans(target)) - return - var/obj/item/organ/external/affected = target.get_organ(target_zone) - - user.visible_message("\red [user]'s hand slips, getting mess and tearing the inside of [target]'s [affected.name] with \the [tool]!", \ - "\red Your hand slips, getting mess and tearing the inside of [target]'s [affected.name] with \the [tool]!") - var/dam_amt = 2 - - if (istype(tool, /obj/item/stack/medical/advanced/bruise_pack)) - target.adjustToxLoss(5) - - else if (istype(tool, /obj/item/stack/medical/bruise_pack)) - dam_amt = 5 - target.adjustToxLoss(10) - affected.createwound(CUT, 5) - - for(var/obj/item/organ/I in affected.internal_organs) - if(I && I.damage > 0) - I.take_damage(dam_amt,0) - -/datum/surgery_step/internal/detatch_organ - - allowed_tools = list( - /obj/item/weapon/scalpel = 100, \ - /obj/item/weapon/kitchen/knife = 75, \ - /obj/item/weapon/shard = 50, \ - ) - - min_duration = 90 - max_duration = 110 - - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - - if (!..()) - return 0 - - var/obj/item/organ/external/affected = target.get_organ(target_zone) - - if(!(affected && !(affected.status & ORGAN_ROBOT))) - return 0 - - target.op_stage.current_organ = null - target.op_stage.organ_ref = null - - var/list/attached_organs = list() - for(var/organ in affected.internal_organs) - var/obj/item/organ/I = organ - if(I && !(I.status & ORGAN_CUT_AWAY) && I.parent_organ == target_zone) - attached_organs[I.organ_tag] = I - - var/organ_to_remove = input(user, "Which organ do you want to prepare for removal?") as null|anything in attached_organs - if(!organ_to_remove) - return 0 - - target.op_stage.current_organ = organ_to_remove - target.op_stage.organ_ref = attached_organs[organ_to_remove] - - return ..() && organ_to_remove - - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - - var/obj/item/organ/external/affected = target.get_organ(target_zone) - - user.visible_message("[user] starts to separate [target]'s [target.op_stage.current_organ] with \the [tool].", \ - "You start to separate [target]'s [target.op_stage.current_organ] with \the [tool]." ) - target.custom_pain("The pain in your [affected.name] is living hell!",1) - ..() - - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message("\blue [user] has separated [target]'s [target.op_stage.current_organ] with \the [tool]." , \ - "\blue You have separated [target]'s [target.op_stage.current_organ] with \the [tool].") - - var/obj/item/organ/I = target.op_stage.organ_ref - if(I && istype(I)) - spread_germs_to_organ(I, user) - I.status |= ORGAN_CUT_AWAY - - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\red [user]'s hand slips, slicing an artery inside [target]'s [affected.name] with \the [tool]!", \ - "\red Your hand slips, slicing an artery inside [target]'s [affected.name] with \the [tool]!") - affected.createwound(CUT, rand(30,50), 1) - -/datum/surgery_step/internal/remove_organ - - 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 - - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - - if (!..()) - return 0 - var/obj/item/organ/external/affected = target.get_organ(target_zone) - - if(!istype(affected)) - return 0 - - target.op_stage.current_organ = null - target.op_stage.organ_ref = null - - var/list/removable_organs = list() - for(var/organ in affected.internal_organs) - var/obj/item/organ/I = organ - if(istype(I) && (I.status & ORGAN_CUT_AWAY) && I.parent_organ == target_zone) - removable_organs[I.organ_tag] = I - - var/organ_to_remove = input(user, "Which organ do you want to remove?") as null|anything in removable_organs - if(!organ_to_remove) - return 0 - - target.op_stage.current_organ = organ_to_remove - target.op_stage.organ_ref = removable_organs[organ_to_remove] - return ..() - - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message("[user] starts removing [target]'s [target.op_stage.current_organ] with \the [tool].", \ - "You start removing [target]'s [target.op_stage.current_organ] with \the [tool].") - target.custom_pain("Someone's ripping out your [target.op_stage.current_organ]!",1) - ..() - - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message("\blue [user] has removed [target]'s [target.op_stage.current_organ] with \the [tool].", \ - "\blue You have removed [target]'s [target.op_stage.current_organ] with \the [tool].") - - // Extract the organ! - if(target.op_stage.current_organ) - var/obj/item/organ/O = target.op_stage.organ_ref - if(O && istype(O)) - spread_germs_to_organ(O, user) - O.removed(user) - - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\red [user]'s hand slips, damaging [target]'s [affected.name] with \the [tool]!", \ - "\red Your hand slips, damaging [target]'s [affected.name] with \the [tool]!") - affected.createwound(BRUISE, 20) - -/datum/surgery_step/internal/replace_organ - allowed_tools = list( - /obj/item/organ = 100 - ) - - min_duration = 60 - max_duration = 80 - - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - - var/obj/item/organ/O = tool - var/obj/item/organ/external/affected = target.get_organ(target_zone) - if(!affected) return - var/organ_compatible - var/organ_missing - - if(!istype(O)) - return 0 - - if((affected.status & ORGAN_ROBOT) && !(O.status & ORGAN_ROBOT)) - user << "You cannot install a naked organ into a robotic body." - return 2 - - if(!target.species) - user << "\red You have no idea what species this person is. Report this on the bug tracker." - return 2 - - var/o_is = (O.gender == PLURAL) ? "are" : "is" - var/o_a = (O.gender == PLURAL) ? "" : "a " - var/o_do = (O.gender == PLURAL) ? "don't" : "doesn't" - - if(O.organ_tag == "limb") - return 0 - else if(target.species.has_organ[O.organ_tag]) - - if(O.damage > (O.max_damage * 0.75)) - user << "\red \The [O.organ_tag] [o_is] in no state to be transplanted." - return 2 - - if(!target.internal_organs_by_name[O.organ_tag]) - organ_missing = 1 - else - user << "\red \The [target] already has [o_a][O.organ_tag]." - return 2 - - if(O && affected.limb_name == O.parent_organ) - organ_compatible = 1 - else - user << "\red \The [O.organ_tag] [o_do] normally go in \the [affected.name]." - return 2 - else - user << "\red You're pretty sure [target.species.name] don't normally have [o_a][O.organ_tag]." - return 2 - - return ..() && organ_missing && organ_compatible - - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] starts transplanting \the [tool] into [target]'s [affected.name].", \ - "You start transplanting \the [tool] into [target]'s [affected.name].") - target.custom_pain("Someone's rooting around in your [affected.name]!",1) - ..() - - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) + else if(I.robotic > 2 && istype (tool, /obj/item/stack/nanopaste)) + user.visible_message("\blue [user] treats damage to [target]'s [I.name] with [tool_name].", \ + "\blue You treat damage to [target]'s [I.name] with [tool_name]." ) + I.damage = 0 + //return 1 + else if(current_type == "insert") + I = tool + user.drop_item() + I.insert(target) + spread_germs_to_organ(I, user) user.visible_message("\blue [user] has transplanted \the [tool] into [target]'s [affected.name].", \ "\blue You have transplanted \the [tool] into [target]'s [affected.name].") - user.drop_item(tool) - var/obj/item/organ/O = tool - if(istype(O)) - O.replaced(target,affected) - spread_germs_to_organ(O, user) - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message("\red [user]'s hand slips, damaging \the [tool]!", \ - "\red Your hand slips, damaging \the [tool]!") - var/obj/item/organ/I = tool - if(istype(I)) - I.take_damage(rand(3,5),0) + I.status &= ~ORGAN_CUT_AWAY -/datum/surgery_step/internal/attach_organ - allowed_tools = list( - /obj/item/weapon/FixOVein = 100, \ - /obj/item/stack/cable_coil = 75 - ) + else if(current_type == "extract") + if(I && I.owner == target) + user.visible_message("\blue [user] has separated and extracts [target]'s [I] with \the [tool]." , \ + "\blue You have separated and extracted [target]'s [I] with \the [tool].") - min_duration = 100 - max_duration = 120 - - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - - if (!..()) - return 0 - - var/obj/item/organ/external/affected = target.get_organ(target_zone) - - if(!istype(affected)) - return 0 - - target.op_stage.current_organ = null - target.op_stage.organ_ref = null - - var/list/removable_organs = list() - for(var/organ in affected.internal_organs) - var/obj/item/organ/I = organ - if(I && istype(I) && (I.status & ORGAN_CUT_AWAY) && !(I.status & ORGAN_ROBOT) && I.parent_organ == target_zone) - removable_organs[I.organ_tag] = I - - var/organ_to_replace = input(user, "Which organ do you want to reattach?") as null|anything in removable_organs - if(!organ_to_replace) - return 0 - - target.op_stage.current_organ = organ_to_replace - target.op_stage.organ_ref = removable_organs[organ_to_replace] - return ..() - - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message("[user] begins reattaching [target]'s [target.op_stage.current_organ] with \the [tool].", \ - "You start reattaching [target]'s [target.op_stage.current_organ] with \the [tool].") - target.custom_pain("Someone's digging needles into your [target.op_stage.current_organ]!",1) - ..() - - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message("\blue [user] has reattached [target]'s [target.op_stage.current_organ] with \the [tool]." , \ - "\blue You have reattached [target]'s [target.op_stage.current_organ] with \the [tool].") - - var/obj/item/organ/I = target.op_stage.organ_ref - if(I && istype(I)) - I.status &= ~ORGAN_CUT_AWAY + add_logs(target,user, "surgically removed [I.name] from", addition="INTENT: [uppertext(user.a_intent)]") spread_germs_to_organ(I, user) + I.status |= ORGAN_CUT_AWAY + I.remove(target) + I.loc = get_turf(target) + else + user.visible_message("[user] can't seem to extract anything from [target]'s [parse_zone(target_zone)]!", + "You can't extract anything from [target]'s [parse_zone(target_zone)]!") + else if(current_type == "finish") - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\red [user]'s hand slips, damaging the flesh in [target]'s [affected.name] with \the [tool]!", \ - "\red Your hand slips, damaging the flesh in [target]'s [affected.name] with \the [tool]!") - affected.createwound(BRUISE, 20) + if(affected.encased) + var/msg = "\blue [user] bends [target]'s [affected.encased] back into place with \the [tool]." + var/self_msg = "\blue You bend [target]'s [affected.encased] back into place with \the [tool]." + user.visible_message(msg, self_msg) + affected.open = 2.5 + else + var/msg = "[user] pulls [target]'s flesh back into place with \the [tool]." + var/self_msg = "You pull [target]'s flesh back into place with \the [tool]." + user.visible_message(msg, self_msg) + + return 1 + + + return 0 + +//todo set up fail steps ////////////////////////////////////////////////////////////////// // HEART SURGERY // @@ -459,5 +301,5 @@ // min_duration = 30 // max_duration = 40 -// can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) +// can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) // return ..() && target.op_stage.ribcage == 2 \ No newline at end of file diff --git a/code/modules/surgery/organs_internal2.dm b/code/modules/surgery/organs_internal2.dm deleted file mode 100644 index 2af5a44e88c..00000000000 --- a/code/modules/surgery/organs_internal2.dm +++ /dev/null @@ -1,305 +0,0 @@ -/datum/surgery/organ_manipulation - name = "organ manipulation" - 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, - /datum/surgery_step/open_encased/retract, /datum/surgery_step/internal/manipulate_organs, /datum/surgery_step/glue_bone, /datum/surgery_step/set_bone,/datum/surgery_step/finish_bone,/datum/surgery_step/generic/cauterize) - possible_locs = list("chest","head") - requires_organic_bodypart = 0 - disallowed_mob = (/mob/living/carbon/human/machine) - -/datum/surgery/organ_manipulation/soft - possible_locs = list("groin", "eyes", "mouth") - steps = list(/datum/surgery_step/generic/cut_open,/datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/internal/manipulate_organs,/datum/surgery_step/generic/cauterize) - -/datum/surgery/organ_manipulation/boneless - possible_locs = list("chest","head","groin", "eyes", "mouth") - steps = list(/datum/surgery_step/generic/cut_open,/datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/internal/manipulate_organs,/datum/surgery_step/generic/cauterize) - allowed_mob = list(/mob/living/carbon/human/diona,/mob/living/carbon/human/slime) - disallowed_mob = list(/mob/living/carbon/human) - -/datum/surgery/organ_manipulation/alien - name = "alien organ manipulation" - possible_locs = list("chest", "head", "groin", "eyes", "mouth") - allowed_mob = list(/mob/living/carbon/alien/humanoid) - disallowed_mob = list(/mob/living/carbon/human) - steps = list(/datum/surgery_step/generic/cut_open, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/open_encased/saw, /datum/surgery_step/internal/manipulate_organs,/datum/surgery_step/generic/cauterize) - - - -// Internal surgeries. -/datum/surgery_step/internal - priority = 2 - can_infect = 1 - blood_level = 1 - -/datum/surgery_step/internal/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - - if (!hasorgans(target)) - return 0 - - var/obj/item/organ/external/affected = target.get_organ(target_zone) - return affected && affected.open_enough_for_surgery() - - -////////////////////////////////////////////////////////////////// -// ALIEN EMBRYO SURGERY // -////////////////////////////////////////////////////////////////// -///datum/surgery/remove_xeno_baby -// 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,/datum/surgery_step/open_encased/retract, /datum/surgery_step/internal/remove_embryo) -// possible_locs = list("chest") -// disallowed_mob = (/mob/living/carbon/human/machine) -//this is all handled bia organ mainpulation as an On_find - -/datum/surgery_step/internal/remove_embryo//might can just do this in organ mainpulation..but this is TARGETED for.. - allowed_tools = list( - /obj/item/weapon/hemostat = 100, \ - /obj/item/weapon/wirecutters = 75, \ - /obj/item/weapon/kitchen/utensil/fork = 20 - ) - blood_level = 2 - - max_duration = 100 - -/datum/surgery_step/internal/remove_embryo/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/embryo = 0 - var/obj/item/organ/internal/body_egg/alien_embryo/A = target.get_int_organ(/obj/item/organ/internal/body_egg/alien_embryo) - if(A) - embryo = 1 - //break - - if (!hasorgans(target)) - return - var/obj/item/organ/external/affected = target.get_organ(target_zone) - return ..() && affected && embryo && affected.open_enough_for_surgery() && target_zone == "chest" - -/datum/surgery_step/internal/remove_embryo/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/msg = "[user] starts to pull something out from [target]'s ribcage with \the [tool]." - var/self_msg = "You start to pull something out from [target]'s ribcage with \the [tool]." - user.visible_message(msg, self_msg) - target.custom_pain("Something hurts horribly in your chest!",1) - ..() - -/datum/surgery_step/internal/remove_embryo/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - user.visible_message("\red [user] rips the larva out of [target]'s ribcage!", - "You rip the larva out of [target]'s ribcage!") - - var/obj/item/organ/internal/body_egg/alien_embryo/A = target.get_int_organ(/obj/item/organ/internal/body_egg/alien_embryo) - if(A) - user << "You found an unknown alien organism in [target]'s chest!" - if(prob(10)) - A.AttemptGrow() - - A.remove(target) - A.loc = get_turf(target) - - return 1 - -/datum/surgery_step/internal/remove_embryo/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - - if (!hasorgans(target)) - return - - var/obj/item/organ/internal/body_egg/alien_embryo/A = target.get_int_organ(/obj/item/organ/internal/body_egg/alien_embryo) - if(A) - if(prob(50)) - A.AttemptGrow(0) - user.visible_message("[user] accidentally pokes the xenomorph in [target]!", "You accidentally poke the xenomorph in [target]!") - else - target.adjustOxyLoss(30) - user.visible_message("[user] accidentally pokes [target] in the lungs!", "You accidentally poke [target] in the lungs!") - - return 0 - - -/datum/surgery_step/internal/manipulate_organs - name = "manipulate organs" - allowed_tools = list(/obj/item/organ/internal = 100, /obj/item/weapon/reagent_containers/food/snacks/organ = 0) - var/implements_extract = list(/obj/item/weapon/hemostat = 100, /obj/item/weapon/kitchen/utensil/fork = 55) - var/implements_mend = list(/obj/item/stack/medical/advanced/bruise_pack = 100,/obj/item/stack/nanopaste = 100,/obj/item/stack/medical/bruise_pack = 20) - //Finish is just so you can close up after you do other things. - var/implements_finsh = list(/obj/item/weapon/scalpel/manager = 120,/obj/item/weapon/retractor = 100 ,/obj/item/weapon/crowbar = 75) - var/current_type - var/obj/item/organ/internal/I = null - var/obj/item/organ/external/affected = null - max_duration = 90 - -/datum/surgery_step/internal/manipulate_organs/New() - ..() - allowed_tools = allowed_tools + implements_extract + implements_mend + implements_finsh - - - - -/datum/surgery_step/internal/manipulate_organs/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - - I = null - affected = target.get_organ(target_zone) - if(is_int_organ(tool)) - current_type = "insert" - I = tool - if(target_zone != I.parent_organ || target.get_organ_slot(I.slot)) - user << "There is no room for [I] in [target]'s [parse_zone(target_zone)]!" - return -1 - - if(I.damage > (I.max_damage * 0.75)) - user << " \The [I] is in no state to be transplanted." - return -1 - - if(target.get_int_organ(I)) - user << "\red \The [target] already has [I]." - return -1 - - user.visible_message("[user] starts transplanting \the [tool] into [target]'s [affected.name].", \ - "You start transplanting \the [tool] into [target]'s [affected.name].") - target.custom_pain("Someone's rooting around in your [affected.name]!",1) - - else if(implement_type in implements_finsh) - //same as surgery step /datum/surgery_step/open_encased/close/ - current_type = "finish" - var/obj/item/organ/external/affected = target.get_organ(target_zone) - if(affected.encased) - var/msg = "[user] starts bending [target]'s [affected.encased] back into place with \the [tool]." - var/self_msg = "You start bending [target]'s [affected.encased] back into place with \the [tool]." - user.visible_message(msg, self_msg) - else - var/msg = "[user] starts pulling [target]'s skin back into place with \the [tool]." - var/self_msg = "You start pulling [target]'s skin back into place with \the [tool]." - user.visible_message(msg, self_msg) - target.custom_pain("Something hurts horribly in your [affected.name]!",1) - else if(implement_type in implements_extract) - current_type = "extract" - var/list/organs = target.get_organs_zone(target_zone) - if(!organs.len) - user << "There are no removeable organs in [target]'s [parse_zone(target_zone)]!" - return -1 - else - for(var/obj/item/organ/internal/O in organs) - O.on_find(user) - organs -= O - organs[O.name] = O - - I = input("Remove which organ?", "Surgery", null, null) as null|anything in organs - if(I && user && target && user.Adjacent(target) && user.get_active_hand() == tool) - I = organs[I] - if(!I) return -1 - user.visible_message("[user] starts to separate [target]'s [I] with \the [tool].", \ - "You start to separate [target]'s [I] with \the [tool] for removal." ) - target.custom_pain("The pain in your [affected.name] is living hell!",1) - else - return -1 - - else if(implement_type in implements_mend) - //todo Change message, make it heal the organs... - current_type = "mend" - var/tool_name = "\the [tool]" - if (istype(tool, /obj/item/stack/medical/advanced/bruise_pack)) - tool_name = "regenerative membrane" - else if (istype(tool, /obj/item/stack/medical/bruise_pack)) - tool_name = "the bandaid" - else if (istype(tool, /obj/item/stack/nanopaste)) - tool_name = "\the [tool]" //what else do you call nanopaste medically? - - if(!hasorgans(target)) - user << "They do not have organs to mend!" - return - for(var/obj/item/organ/internal/I in affected.internal_organs) - if(I && I.damage > 0) - if(I.robotic < 2 && !istype (tool, /obj/item/stack/nanopaste)) - if(!I.sterile) - spread_germs_to_organ(I, user) - user.visible_message("[user] starts treating damage to [target]'s [I.name] with [tool_name].", \ - "You start treating damage to [target]'s [I.name] with [tool_name]." ) - else if(I.robotic > 2 && istype(tool, /obj/item/stack/nanopaste)) - user.visible_message("[user] starts treating damage to [target]'s [I.name] with [tool_name].", \ - "You start treating damage to [target]'s [I.name] with [tool_name]." ) - - user << "No organs appear to be damaged." - return -1 - target.custom_pain("The pain in your [affected.name] is living hell!",1) - - else if(istype(tool, /obj/item/weapon/reagent_containers/food/snacks/organ)) - user << "[tool] was biten by someone! It's too damaged to use!" - return -1 - ..() - -/datum/surgery_step/internal/manipulate_organs/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - if(current_type == "mend") - var/tool_name = "\the [tool]" - if (istype(tool, /obj/item/stack/medical/advanced/bruise_pack)) - tool_name = "regenerative membrane" - if (istype(tool, /obj/item/stack/medical/bruise_pack)) - tool_name = "the bandaid" - - if (!hasorgans(target)) - return - for(var/obj/item/organ/internal/I in affected.internal_organs) - if(I) - I.surgeryize() - if(I && I.damage > 0) - if(I.robotic < 2 && !istype (tool, /obj/item/stack/nanopaste)) - user.visible_message("\blue [user] treats damage to [target]'s [I.name] with [tool_name].", \ - "\blue You treat damage to [target]'s [I.name] with [tool_name]." ) - I.damage = 0 - else if(I.robotic > 2 && istype (tool, /obj/item/stack/nanopaste)) - user.visible_message("\blue [user] treats damage to [target]'s [I.name] with [tool_name].", \ - "\blue You treat damage to [target]'s [I.name] with [tool_name]." ) - I.damage = 0 - //return 1 - else if(current_type == "insert") - I = tool - user.drop_item() - I.insert(target) - spread_germs_to_organ(I, user) - user.visible_message("\blue [user] has transplanted \the [tool] into [target]'s [affected.name].", \ - "\blue You have transplanted \the [tool] into [target]'s [affected.name].") - - I.status &= ~ORGAN_CUT_AWAY - - else if(current_type == "extract") - if(I && I.owner == target) - user.visible_message("\blue [user] has separated and extracts [target]'s [I] with \the [tool]." , \ - "\blue You have separated and extracted [target]'s [I] with \the [tool].") - - add_logs(target,user, "surgically removed [I.name] from", addition="INTENT: [uppertext(user.a_intent)]") - spread_germs_to_organ(I, user) - I.status |= ORGAN_CUT_AWAY - I.remove(target) - I.loc = get_turf(target) - else - user.visible_message("[user] can't seem to extract anything from [target]'s [parse_zone(target_zone)]!", - "You can't extract anything from [target]'s [parse_zone(target_zone)]!") - else if(current_type == "finish") - - var/obj/item/organ/external/affected = target.get_organ(target_zone) - if(affected.encased) - var/msg = "\blue [user] bends [target]'s [affected.encased] back into place with \the [tool]." - var/self_msg = "\blue You bend [target]'s [affected.encased] back into place with \the [tool]." - user.visible_message(msg, self_msg) - affected.open = 2.5 - else - var/msg = "[user] pulls [target]'s flesh back into place with \the [tool]." - var/self_msg = "You pull [target]'s flesh back into place with \the [tool]." - user.visible_message(msg, self_msg) - - return 1 - - - return 0 - -//todo set up fail steps - -////////////////////////////////////////////////////////////////// -// HEART SURGERY // -////////////////////////////////////////////////////////////////// -// To be finished after some tests. -// /datum/surgery_step/ribcage/heart/cut -// allowed_tools = list( -// /obj/item/weapon/scalpel = 100, \ -// /obj/item/weapon/kitchenknife = 75, \ -// /obj/item/weapon/shard = 50, \ -// ) - -// min_duration = 30 -// max_duration = 40 - -// can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) -// return ..() && target.op_stage.ribcage == 2 \ No newline at end of file