diff --git a/code/game/objects/items/weapons/surgery_tools.dm b/code/game/objects/items/weapons/surgery_tools.dm index 15bb7cd0e51..5e1d6ceae33 100644 --- a/code/game/objects/items/weapons/surgery_tools.dm +++ b/code/game/objects/items/weapons/surgery_tools.dm @@ -22,6 +22,16 @@ return 0 ..() +/* + * Bio-Regenerator + */ +/obj/item/weapon/surgical/bioregen + name="bioregenerator" + desc="A special tool used in surgeries which can pull toxins from and restore oxygen to organic tissue as well as recreate missing biological structures to allow otherwise irreperable flesh to be mended." + icon='icons/obj/surgery.dmi' + icon_state="bioregen" + drop_sound = 'sound/items/drop/scrap.ogg' + /* * Retractor */ diff --git a/code/modules/surgery/external_repair.dm b/code/modules/surgery/external_repair.dm index 4f8707e82d9..5fbb94030b8 100644 --- a/code/modules/surgery/external_repair.dm +++ b/code/modules/surgery/external_repair.dm @@ -128,7 +128,7 @@ user.visible_message("[user] finishes taping up [target]'s [affected] with \the [tool].", \ "You finish taping up [target]'s [affected] with \the [tool].") affected.createwound(BRUISE, 10) - affected.heal_damage(0, 25, 0, 0) + affected.heal_damage(0, 50, 0, 0) //Up from 25 if(!(affected.burn_dam)) affected.burn_stage = 0 if(istype(tool, /obj/item/stack)) @@ -194,7 +194,7 @@ user.visible_message("[user] finishes taping up [target]'s [affected] with \the [tool].", \ "You finish taping up [target]'s [affected] with \the [tool].") affected.createwound(BRUISE, 10) - affected.heal_damage(25, 0, 0, 0) + affected.heal_damage(50, 0, 0, 0) //Up from 25 if(!(affected.brute_dam)) affected.brute_stage = 0 if(istype(tool, /obj/item/stack)) diff --git a/code/modules/surgery/other.dm b/code/modules/surgery/other.dm index fe7d004dc4d..9cde26f240f 100644 --- a/code/modules/surgery/other.dm +++ b/code/modules/surgery/other.dm @@ -232,3 +232,157 @@ /datum/surgery_step/hardsuit/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) user.visible_message("[user]'s [tool] can't quite seem to get through the metal...", \ "\The [tool] can't quite seem to get through the metal. It's weakening, though - try again.") + +/////////////////////////////////////////// +// De-Husking Surgery // +///////////////////////////////////////// + +/datum/surgery_status/ + var/dehusk = 0 + +/datum/surgery_step/dehusk/ + priority = 1 + can_infect = 0 + blood_level = 1 + +/datum/surgery_step/dehusk/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + if (!hasorgans(target)) + return 0 + var/obj/item/organ/external/affected = target.get_organ(target_zone) + if (!affected || (affected.robotic >= ORGAN_ROBOT)) + return 0 + if(coverage_check(user,target,affected,tool)) + return 0 + return target_zone == BP_TORSO && (HUSK in target.mutations) + +/datum/surgery_step/dehusk/structinitial + allowed_tools = list( + /obj/item/weapon/surgical/bioregen = 100 + ) + min_duration = 90 + max_duration = 120 + +/datum/surgery_step/dehusk/structinitial/can_use(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + return ..() && target.op_stage.dehusk == 0 + +/datum/surgery_step/dehusk/structinitial/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + user.visible_message("[user] begins to create a fleshy but rigid looking mesh over gaps in [target]'s flesh with \the [tool].", \ + "You begin to create a fleshy but rigid looking mesh over gaps in [target]'s flesh with \the [tool].") + ..() + +/datum/surgery_step/dehusk/structinitial/end_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + user.visible_message("[user] creates a fleshy but rigid looking mesh over gaps in [target]'s flesh with \the [tool].", \ + "You create a fleshy but rigid looking mesh over gaps in [target]'s flesh with \the [tool].") + target.op_stage.dehusk = 1 + ..() + +/datum/surgery_step/dehusk/structinitial/fail_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]'s hand slips, and the mesh falls, with \the [tool] scraping [target]'s body.", \ + "Your hand slips, and the mesh falls, with \the [tool] scraping [target]'s body.") + affected.createwound(CUT, 15) + affected.createwound(BRUISE, 10) + ..() + +/datum/surgery_step/dehusk/relocateflesh + allowed_tools = list( + /obj/item/weapon/surgical/hemostat = 100, \ + /obj/item/stack/cable_coil = 75, \ + /obj/item/device/assembly/mousetrap = 20 + ) + min_duration = 90 + max_duration = 120 + +/datum/surgery_step/dehusk/relocateflesh/can_use(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + return ..() && target.op_stage.dehusk == 1 + +/datum/surgery_step/dehusk/relocateflesh/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + user.visible_message("[user] begins to relocate some of [target]'s flesh with \the [tool], using it to fill in gaps.", \ + "You begin to relocate some of [target]'s flesh with \the [tool], using it to fill in gaps.") + ..() + +/datum/surgery_step/dehusk/relocateflesh/end_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + user.visible_message("[user] relocates some of [target]'s flesh with \the [tool], using it to fill in gaps.", \ + "You relocate some of [target]'s flesh with \the [tool], using it to fill in gaps.") + target.op_stage.dehusk = 2 + ..() + +/datum/surgery_step/dehusk/relocateflesh/fail_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] accidentally rips a massive chunk out of [target]'s flesh with \the [tool], causing massive damage.", \ + "You accidentally rip a massive chunk out of [target]'s flesh with \the [tool], causing massive damage.") + affected.createwound(CUT, 25) + affected.createwound(BRUISE, 10) + ..() + +/datum/surgery_step/dehusk/structfinish + allowed_tools = list( + /obj/item/weapon/surgical/bioregen = 100, \ + /obj/item/weapon/surgical/FixOVein = 30 + ) + min_duration = 90 + max_duration = 120 + +/datum/surgery_step/dehusk/structfinish/can_use(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + return ..() && target.op_stage.dehusk == 2 + +/datum/surgery_step/dehusk/structfinish/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + if(istype(tool,/obj/item/weapon/surgical/bioregen)) + user.visible_message("[user] begins to recreate blood vessels and fill in the gaps in [target]'s flesh with \the [tool].", \ + "You begin to recreate blood vessels and fill in the gaps in [target]'s flesh with \the [tool].") + else if(istype(tool,/obj/item/weapon/surgical/FixOVein)) + user.visible_message("[user] attempts to recreate blood vessels and fill in the gaps in [target]'s flesh with \the [tool].", \ + "You attempt to recreate blood vessels and fill in the gaps in [target]'s flesh with \the [tool].") + ..() + +/datum/surgery_step/dehusk/structfinish/end_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + user.visible_message("[user] finishes recreating the missing biological structures and filling in gaps in [target]'s flesh with \the [tool].", \ + "You finish recreating the missing biological structures and filling in gaps in [target]'s flesh with \the [tool].") + target.op_stage.dehusk = 0 + target.mutations.Remove(HUSK) + target.status_flags &= ~DISFIGURED + target.update_icons_body() + ..() + +/datum/surgery_step/dehusk/structfinish/fail_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + if(istype(tool,/obj/item/weapon/surgical/bioregen)) + user.visible_message("[user]'s hand slips, causing \the [tool] to scrape [target]'s body.", \ + "Your hand slips, causing \the [tool] to scrape [target]'s body.") + else if(istype(tool,/obj/item/weapon/surgical/FixOVein)) + user.visible_message("[user] fails to finish the structure over the gaps in [target]'s flesh, doing more damage than good.", \ + "You fail to finish the structure over the gaps in [target]'s flesh, doing more damage than good.") + affected.createwound(CUT, 15) + affected.createwound(BRUISE, 10) + ..() + +/datum/surgery_step/internal/detoxify + blood_level = 1 + allowed_tools = list(/obj/item/weapon/surgical/bioregen=100) + min_duration = 90 + max_duration = 120 + +/datum/surgery_step/internal/detoxify/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + return ..() && target_zone == BP_TORSO && (target.toxloss > 25 || target.oxyloss > 25) + +/datum/surgery_step/internal/detoxify/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + user.visible_message("[user] begins to pull toxins from, and restore oxygen to [target]'s musculature and organs with \the [tool].", \ + "You begin to pull toxins from, and restore oxygen to [target]'s musculature and organs with \the [tool].") + ..() + +/datum/surgery_step/internal/detoxify/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + user.visible_message("[user] finishes pulling toxins from, and restoring oxygen to [target]'s musculature and organs with \the [tool].", \ + "You finish pulling toxins from, and restoring oxygen to [target]'s musculature and organs with \the [tool].") + if(target.toxloss>25) + target.adjustToxLoss(-20) + if(target.oxyloss>25) + target.adjustOxyLoss(-20) + ..() + +/datum/surgery_step/internal/detoxify/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("[user]'s hand slips, failing to finish the surgery, and damaging [target] with \the [tool].", \ + "Your hand slips, failing to finish the surgery, and damaging [target] with \the [tool].") + affected.createwound(CUT, 15) + affected.createwound(BRUISE, 10) + ..() \ No newline at end of file diff --git a/icons/obj/surgery.dmi b/icons/obj/surgery.dmi index 0f22fa82cd3..d6de460866b 100644 Binary files a/icons/obj/surgery.dmi and b/icons/obj/surgery.dmi differ diff --git a/maps/tether/tether-03-surface3.dmm b/maps/tether/tether-03-surface3.dmm index cfcc9c1584a..41acbb058d5 100644 --- a/maps/tether/tether-03-surface3.dmm +++ b/maps/tether/tether-03-surface3.dmm @@ -24636,6 +24636,7 @@ }, /obj/machinery/power/apc{ name = "south bump"; + nightshift_setting = 0; pixel_y = -28; req_access = list(67) }, @@ -26813,6 +26814,11 @@ d2 = 2; icon_state = "0-2" }, +/obj/item/weapon/surgical/bioregen, +/obj/item/weapon/paper{ + info = "To the medical staff of the facility - This device will help in what is known as De-Husking on a patient. All you need to do is use this new device here to start the process, then use a hemostat to pull stuff in place. Finally, use the device once more to finish mending the veins and final wounds and you should be good for a defib on the patient. This machine ALSO works on removing poisons and toxins from someone that normally would be a final nail in their coffin! It works similar to your current external surgery methods, but with this device instead. Handy!"; + name = "Bio-Regenrator Notice" + }, /turf/simulated/floor/tiled/white, /area/tether/surfacebase/medical/surgery2) "aTM" = ( @@ -36614,6 +36620,11 @@ /obj/item/device/defib_kit/loaded, /obj/item/stack/nanopaste, /obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/item/weapon/surgical/bioregen, +/obj/item/weapon/paper{ + info = "To the medical staff of the facility - This device will help in what is known as De-Husking on a patient. All you need to do is use this new device here to start the process, then use a hemostat to pull stuff in place. Finally, use the device once more to finish mending the veins and final wounds and you should be good for a defib on the patient. This machine ALSO works on removing poisons and toxins from someone that normally would be a final nail in their coffin! It works similar to your current external surgery methods, but with this device instead. Handy!"; + name = "Bio-Regenrator Notice" + }, /turf/simulated/floor/tiled/white, /area/tether/surfacebase/medical/surgery1) "blK" = ( @@ -36792,6 +36803,7 @@ cell_type = /obj/item/weapon/cell/super; dir = 8; name = "west bump"; + nightshift_setting = 0; pixel_x = -30 }, /obj/structure/cable/green{