diff --git a/code/datums/supplypacks/medical.dm b/code/datums/supplypacks/medical.dm index 69f198bbd4..28ed9f07bf 100644 --- a/code/datums/supplypacks/medical.dm +++ b/code/datums/supplypacks/medical.dm @@ -66,7 +66,8 @@ /obj/item/weapon/surgical/bonegel, /obj/item/weapon/surgical/retractor, /obj/item/weapon/surgical/bonesetter, - /obj/item/weapon/surgical/circular_saw + /obj/item/weapon/surgical/circular_saw, + /obj/item/weapon/surgical/bioregen ) cost = 25 containertype = /obj/structure/closet/crate/secure/veymed diff --git a/code/game/objects/items/weapons/storage/firstaid.dm b/code/game/objects/items/weapons/storage/firstaid.dm index bb6bb1032c..c03e3e79a6 100644 --- a/code/game/objects/items/weapons/storage/firstaid.dm +++ b/code/game/objects/items/weapons/storage/firstaid.dm @@ -137,7 +137,8 @@ /obj/item/stack/medical/advanced/bruise_pack, /obj/item/stack/nanopaste, /obj/item/device/healthanalyzer/advanced, - /obj/item/weapon/autopsy_scanner + /obj/item/weapon/autopsy_scanner, + /obj/item/weapon/surgical/bioregen ) starts_with = list( @@ -152,7 +153,8 @@ /obj/item/weapon/surgical/FixOVein, /obj/item/stack/medical/advanced/bruise_pack, /obj/item/device/healthanalyzer/advanced, - /obj/item/weapon/autopsy_scanner + /obj/item/weapon/autopsy_scanner, + /obj/item/weapon/surgical/bioregen ) /obj/item/weapon/storage/firstaid/clotting diff --git a/code/game/objects/items/weapons/surgery_tools.dm b/code/game/objects/items/weapons/surgery_tools.dm index 15bb7cd0e5..22cac7c7f1 100644 --- a/code/game/objects/items/weapons/surgery_tools.dm +++ b/code/game/objects/items/weapons/surgery_tools.dm @@ -6,6 +6,7 @@ * Surgical Drill * Scalpel * Circular Saw + * Bio-Regenerator */ /obj/item/weapon/surgical @@ -22,6 +23,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_vr.dmi' + icon_state="bioregen" + drop_sound = 'sound/items/drop/scrap.ogg' + /* * Retractor */ diff --git a/code/game/objects/items/weapons/surgery_tools_ch.dm b/code/game/objects/items/weapons/surgery_tools_ch.dm deleted file mode 100644 index 4d7fae7fa7..0000000000 --- a/code/game/objects/items/weapons/surgery_tools_ch.dm +++ /dev/null @@ -1,6 +0,0 @@ -/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_ch.dmi' - icon_state="bioregen" - drop_sound = 'sound/items/drop/scrap.ogg' \ No newline at end of file diff --git a/code/modules/surgery/additions_ch.dm b/code/modules/surgery/additions_ch.dm deleted file mode 100644 index b2c603a341..0000000000 --- a/code/modules/surgery/additions_ch.dm +++ /dev/null @@ -1,149 +0,0 @@ -/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/code/modules/surgery/other.dm b/code/modules/surgery/other.dm index fe7d004dc4..9cde26f240 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_vr.dmi b/icons/obj/surgery_vr.dmi index 7984e374c8..4fc6ae4c79 100644 Binary files a/icons/obj/surgery_vr.dmi and b/icons/obj/surgery_vr.dmi differ diff --git a/maps/tether/tether-03-surface3.dmm b/maps/tether/tether-03-surface3.dmm index 4be0fbcc5e..0ff7b1d11b 100644 --- a/maps/tether/tether-03-surface3.dmm +++ b/maps/tether/tether-03-surface3.dmm @@ -25023,6 +25023,43 @@ /obj/structure/window/reinforced{ dir = 1 }, +<<<<<<< HEAD +||||||| parent of 30b7ea7639... Merge pull request #10652 from Enzo-Leon/medical +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -28; + req_access = list(67) + }, +/obj/effect/floor_decal/borderfloorwhite, +/obj/effect/floor_decal/corner/paleblue/border, +/obj/effect/floor_decal/borderfloorwhite/corner2, +/obj/effect/floor_decal/corner/paleblue/bordercorner2, +======= +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/power/apc{ + name = "south bump"; + nightshift_setting = 0; + pixel_y = -28; + req_access = list(67) + }, +/obj/effect/floor_decal/borderfloorwhite, +/obj/effect/floor_decal/corner/paleblue/border, +/obj/effect/floor_decal/borderfloorwhite/corner2, +/obj/effect/floor_decal/corner/paleblue/bordercorner2, +>>>>>>> 30b7ea7639... Merge pull request #10652 from Enzo-Leon/medical /turf/simulated/floor/tiled/white, /area/tether/surfacebase/medical/uppersouthstairwell) "aPs" = ( diff --git a/vorestation.dme b/vorestation.dme index 3c809f3174..ee25f08f1a 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -1349,7 +1349,6 @@ #include "code\game\objects\items\weapons\shields_vr.dm" #include "code\game\objects\items\weapons\stunbaton.dm" #include "code\game\objects\items\weapons\surgery_tools.dm" -#include "code\game\objects\items\weapons\surgery_tools_ch.dm" #include "code\game\objects\items\weapons\swords_axes_etc.dm" #include "code\game\objects\items\weapons\syndie.dm" #include "code\game\objects\items\weapons\tape.dm" @@ -4039,7 +4038,6 @@ #include "code\modules\spells\targeted\projectile\magic_missile.dm" #include "code\modules\spells\targeted\projectile\projectile.dm" #include "code\modules\surgery\_defines.dm" -#include "code\modules\surgery\additions_ch.dm" #include "code\modules\surgery\bones.dm" #include "code\modules\surgery\encased.dm" #include "code\modules\surgery\external_repair.dm"