From 97feccb06d6ce7d5b92877981775799e24b8a0fe Mon Sep 17 00:00:00 2001 From: moo <11748095+ExcessiveUseOfCobblestone@users.noreply.github.com> Date: Thu, 6 Jun 2019 06:01:16 -0400 Subject: [PATCH] Reconstruction of Reconstruction Surgery (#44088) * beep * fixes my mental lapse of trying to logic * im not sure what sybtypes is * Automation/Lowered Adv Surgery Node * Update medical_designs.dm * old var not needed * Update code/modules/research/designs/medical_designs.dm --- .../research/designs/medical_designs.dm | 48 +++++- code/modules/research/techweb/all_nodes.dm | 20 ++- .../surgery/advanced/reconstruction.dm | 32 ---- code/modules/surgery/healing.dm | 149 ++++++++++++++++++ code/modules/surgery/surgery.dm | 75 +++++---- tgstation.dme | 2 +- 6 files changed, 253 insertions(+), 73 deletions(-) delete mode 100644 code/modules/surgery/advanced/reconstruction.dm create mode 100644 code/modules/surgery/healing.dm diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index fa2d4c7f0c3..e7afbfbe315 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -302,7 +302,7 @@ build_path = /obj/item/organ/cyberimp/eyes/hud/security category = list("Misc", "Medical Designs") departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - + /datum/design/cyberimp_diagnostic_hud name = "Diagnostic HUD Implant" desc = "These cybernetic eyes will display a diagnostic HUD over everything you see. Wiggle eyes to control." @@ -563,13 +563,49 @@ surgery = /datum/surgery/advanced/viral_bonding research_icon_state = "surgery_chest" -/datum/design/surgery/reconstruction - name = "Reconstruction" - desc = "A surgical procedure that gradually repairs damage done to a body without the assistance of chemicals. Unlike classic medicine, it is effective on corpses." - id = "surgery_reconstruction" - surgery = /datum/surgery/advanced/reconstruction +/datum/design/surgery/healing + name = "Tend Wounds" + desc = "An upgraded version of the original surgery." + id = "surgery_healing_base" //holder because travis cries otherwise. Not used in techweb unlocks. research_icon_state = "surgery_chest" +/datum/design/surgery/healing/brute_upgrade + name = "Tend Wounds (Brute) Upgrade" + surgery = /datum/surgery/healing/brute/upgraded + id = "surgery_heal_brute_upgrade" + +/datum/design/surgery/healing/brute_upgrade_2 + name = "Tend Wounds (Brute) Upgrade" + surgery = /datum/surgery/healing/brute/upgraded/femto + id = "surgery_heal_brute_upgrade_femto" + +/datum/design/surgery/healing/burn_upgrade + name = "Tend Wounds (Burn) Upgrade" + surgery = /datum/surgery/healing/burn/upgraded + id = "surgery_heal_burn_upgrade" + +/datum/design/surgery/healing/burn_upgrade_2 + name = "Tend Wounds (Burn) Upgrade" + surgery = /datum/surgery/healing/brute/upgraded/femto + id = "surgery_heal_burn_upgrade_femto" + +/datum/design/surgery/healing/combo + name = "Tend Wounds (Physical)" + desc = "A surgical procedure that repairs both bruises and burns. Repair efficiency is not as high as the individual surgeries but it is faster." + surgery = /datum/surgery/healing/combo + id = "surgery_heal_combo" + +/datum/design/surgery/healing/combo_upgrade + name = "Tend Wounds (Physical) Upgrade" + surgery = /datum/surgery/healing/combo/upgraded + id = "surgery_heal_combo_upgrade" + +/datum/design/surgery/healing/combo_upgrade_2 + name = "Tend Wounds (Physical) Upgrade" + desc = "A surgical procedure that repairs both bruises and burns faster than their individual counterparts. It is more effective than both the individual surgeries." + surgery = /datum/surgery/healing/combo/upgraded/femto + id = "surgery_heal_combo_upgrade_femto" + /datum/design/surgery/revival name = "Revival" desc = "An experimental surgical procedure which involves reconstruction and reactivation of the patient's brain even long after death. The body must still be able to sustain life." diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index 3dd98081433..5418196fdc2 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -79,21 +79,31 @@ export_price = 5000 /////////////////////////Advanced Surgery///////////////////////// +/datum/techweb_node/imp_wt_surgery + id = "imp_wt_surgery" + display_name = "Improved Wound-Tending Surgery" + description = "Who would have known being more gentle with a hemostat decreases patient pain?" + prereq_ids = list("adv_biotech") + design_ids = list("surgery_heal_brute_upgrade","surgery_heal_burn_upgrade") + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1000) + export_price = 1000 + + /datum/techweb_node/adv_surgery id = "adv_surgery" display_name = "Advanced Surgery" description = "When simple medicine doesn't cut it." - prereq_ids = list("adv_biotech") - design_ids = list("surgery_lobotomy", "surgery_reconstruction", "surgery_exp_dissection") + prereq_ids = list("imp_wt_surgery") + design_ids = list("surgery_lobotomy", "surgery_heal_brute_upgrade_femto","surgery_heal_burn_upgrade_femto","surgery_heal_combo","surgery_exp_dissection") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 5000 + export_price = 4000 /datum/techweb_node/exp_surgery id = "exp_surgery" display_name = "Experimental Surgery" description = "When evolution isn't fast enough." prereq_ids = list("adv_surgery") - design_ids = list("surgery_revival","surgery_pacify","surgery_vein_thread","surgery_nerve_splice","surgery_nerve_ground","surgery_ligament_hook","surgery_ligament_reinforcement","surgery_viral_bond") + design_ids = list("surgery_revival","surgery_pacify","surgery_vein_thread","surgery_nerve_splice","surgery_nerve_ground","surgery_ligament_hook","surgery_ligament_reinforcement","surgery_viral_bond", "surgery_heal_combo_upgrade") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000) export_price = 5000 @@ -102,7 +112,7 @@ display_name = "Alien Surgery" description = "Abductors did nothing wrong." prereq_ids = list("exp_surgery", "alientech") - design_ids = list("surgery_brainwashing","surgery_zombie") + design_ids = list("surgery_brainwashing","surgery_zombie","surgery_heal_combo_upgrade_femto") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 10000) export_price = 5000 diff --git a/code/modules/surgery/advanced/reconstruction.dm b/code/modules/surgery/advanced/reconstruction.dm deleted file mode 100644 index d924416dfcf..00000000000 --- a/code/modules/surgery/advanced/reconstruction.dm +++ /dev/null @@ -1,32 +0,0 @@ -/datum/surgery/advanced/reconstruction - name = "Reconstruction" - desc = "A surgical procedure that gradually repairs damage done to a body without the assistance of chemicals. Unlike classic medicine, it is effective on corpses." - steps = list(/datum/surgery_step/incise, - /datum/surgery_step/retract_skin, - /datum/surgery_step/incise, - /datum/surgery_step/clamp_bleeders, - /datum/surgery_step/reconstruct, - /datum/surgery_step/close) - - target_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/monkey) - possible_locs = list(BODY_ZONE_CHEST) - requires_bodypart_type = 0 - -/datum/surgery_step/reconstruct - name = "repair body" - implements = list(/obj/item/hemostat = 100, TOOL_SCREWDRIVER = 35, /obj/item/pen = 15) - repeatable = TRUE - time = 25 - -/datum/surgery_step/reconstruct/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) - user.visible_message("[user] starts knitting some of [target]'s flesh back together.", "You start knitting some of [target]'s flesh back together.") - -/datum/surgery_step/reconstruct/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) - user.visible_message("[user] fixes some of [target]'s wounds.", "You succeed in fixing some of [target]'s wounds.") - target.heal_bodypart_damage(30,30) - return TRUE - -/datum/surgery_step/reconstruct/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) - user.visible_message("[user] screws up!", "You screwed up!") - target.take_bodypart_damage(5,0) - return FALSE \ No newline at end of file diff --git a/code/modules/surgery/healing.dm b/code/modules/surgery/healing.dm new file mode 100644 index 00000000000..d949d559d37 --- /dev/null +++ b/code/modules/surgery/healing.dm @@ -0,0 +1,149 @@ +/datum/surgery/healing + steps = list(/datum/surgery_step/incise, + /datum/surgery_step/retract_skin, + /datum/surgery_step/incise, + /datum/surgery_step/clamp_bleeders, + /datum/surgery_step/heal, + /datum/surgery_step/close) + + target_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/monkey) + possible_locs = list(BODY_ZONE_CHEST) + requires_bodypart_type = 0 + var/healing_step_type + replaced_by = /datum/surgery + +/datum/surgery/healing/New(surgery_target, surgery_location, surgery_bodypart) + ..() + if(healing_step_type) + steps = list(/datum/surgery_step/incise, + /datum/surgery_step/retract_skin, + /datum/surgery_step/incise, + /datum/surgery_step/clamp_bleeders, + healing_step_type, //hehe cheeky + /datum/surgery_step/close) + +/datum/surgery_step/heal + name = "repair body" + implements = list(/obj/item/hemostat = 100, TOOL_SCREWDRIVER = 35, /obj/item/pen = 15) + repeatable = TRUE + time = 25 + var/brutehealing = 0 + var/burnhealing = 0 + +/datum/surgery_step/heal/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + var/woundtype + if(brutehealing && burnhealing) + woundtype = "wounds" + else if(brutehealing) + woundtype = "bruises" + else //why are you trying to 0,0...? + woundtype = "burns" + user.visible_message("[user] attempts to patch some of [target]'s [woundtype].", "You attempt to patch some of [target]'s [woundtype].") + +/datum/surgery_step/heal/initiate(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, try_to_fail = FALSE) + if(..()) + while((brutehealing && target.getBruteLoss()) || (burnhealing && target.getFireLoss())) + if(!..()) + break + +/datum/surgery_step/heal/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + user.visible_message("[user] fixes some of [target]'s wounds.", "You succeed in fixing some of [target]'s wounds.") + target.heal_bodypart_damage(brutehealing,burnhealing) + return TRUE + +/datum/surgery_step/heal/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + user.visible_message("[user] screws up!", "You screwed up!") + target.take_bodypart_damage(5,0) + return FALSE + +/***************************BRUTE***************************/ +/datum/surgery/healing/brute + name = "Tend Wounds (Bruises)" + +/datum/surgery/healing/brute/basic + replaced_by = /datum/surgery/healing/brute/upgraded + healing_step_type = /datum/surgery_step/heal/brute/basic + +/datum/surgery/healing/brute/upgraded + replaced_by = /datum/surgery/healing/brute/upgraded/femto + requires_tech = TRUE + healing_step_type = /datum/surgery_step/heal/brute/upgraded + +/datum/surgery/healing/brute/upgraded/femto + replaced_by = /datum/surgery/healing/combo/upgraded/femto + requires_tech = TRUE + healing_step_type = /datum/surgery_step/heal/brute/upgraded/femto + +/********************BRUTE STEPS********************/ +/datum/surgery_step/heal/brute/basic + name = "tend bruises" + brutehealing = 5 + +/datum/surgery_step/heal/brute/upgraded + brutehealing = 10 + +/datum/surgery_step/heal/brute/upgraded/femto + brutehealing = 15 + +/***************************BURN***************************/ +/datum/surgery/healing/burn + name = "Tend Wounds (Burn)" + +/datum/surgery/healing/burn/basic + replaced_by = /datum/surgery/healing/burn/upgraded + healing_step_type = /datum/surgery_step/heal/brute/basic + +/datum/surgery/healing/burn/upgraded + replaced_by = /datum/surgery/healing/burn/upgraded/femto + requires_tech = TRUE + healing_step_type = /datum/surgery_step/heal/burn/upgraded + +/datum/surgery/healing/burn/upgraded/femto + replaced_by = /datum/surgery/healing/combo/upgraded/femto + requires_tech = TRUE + healing_step_type = /datum/surgery_step/heal/burn/upgraded/femto + +/********************BURN STEPS********************/ +/datum/surgery_step/heal/burn/basic + name = "tend burn wounds" + burnhealing = 5 + +/datum/surgery_step/heal/burn/upgraded + burnhealing = 10 + +/datum/surgery_step/heal/burn/upgraded/femto + burnhealing = 15 + +/***************************COMBO***************************/ +/datum/surgery/healing/combo + + +/datum/surgery/healing/combo + name = "Tend Wounds (Mixture)" + replaced_by = /datum/surgery/healing/combo/upgraded + requires_tech = TRUE + healing_step_type = /datum/surgery_step/heal/combo + +/datum/surgery/healing/combo/upgraded + replaced_by = /datum/surgery/healing/combo/upgraded/femto + healing_step_type = /datum/surgery_step/heal/combo/upgraded + + +/datum/surgery/healing/combo/upgraded/femto //no real reason to type it like this except consistency, don't worry you're not missing anything + replaced_by = null + healing_step_type = /datum/surgery_step/heal/combo/upgraded/femto + +/********************COMBO STEPS********************/ +/datum/surgery_step/heal/combo + name = "tend physical wounds" + brutehealing = 3 + burnhealing = 2 + time = 10 + +/datum/surgery_step/heal/combo/upgraded + brutehealing = 5 + burnhealing = 5 + +/datum/surgery_step/heal/combo/upgraded/femto + brutehealing = 8 + burnhealing = 7 diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm index 53afe1e9489..d0e90c484af 100644 --- a/code/modules/surgery/surgery.dm +++ b/code/modules/surgery/surgery.dm @@ -17,6 +17,8 @@ var/requires_real_bodypart = FALSE //Some surgeries don't work on limbs that don't really exist var/lying_required = TRUE //Does the vicitm needs to be lying down. var/self_operable = FALSE //Can the surgery be performed on yourself. + var/requires_tech = FALSE //handles techweb-oriented surgeries, previously restricted to the /advanced subtype (You still need to add designs) + var/replaced_by //type; doesn't show up if this type exists. Set to /datum/surgery if you want to hide a "base" surgery (useful for typing parents IE healing.dm just make sure to null it out again) /datum/surgery/New(surgery_target, surgery_location, surgery_bodypart) ..() @@ -36,10 +38,43 @@ return ..() -/datum/surgery/proc/can_start(mob/user, mob/living/carbon/target) - // if 0 surgery wont show up in list - // put special restrictions here - return TRUE +/datum/surgery/proc/can_start(mob/user, mob/living/carbon/target) //FALSE to not show in list + . = TRUE + if(replaced_by == /datum/surgery) + return FALSE + + if(HAS_TRAIT(user, TRAIT_SURGEON)) + if(replaced_by) + return FALSE + else + return TRUE + + if(!requires_tech && !replaced_by) + return TRUE + // True surgeons (like abductor scientists) need no instructions + + if(requires_tech) + . = FALSE + + if(iscyborg(user)) + var/mob/living/silicon/robot/R = user + var/obj/item/surgical_processor/SP = locate() in R.module.modules + if(!SP || (replaced_by in SP.advanced_surgeries)) + return FALSE + if(type in SP.advanced_surgeries) + return TRUE + + + var/turf/T = get_turf(target) + var/obj/structure/table/optable/table = locate(/obj/structure/table/optable, T) + if(table) + if(!table.computer) + return FALSE + if(table.computer.stat & (NOPOWER|BROKEN) || (replaced_by in table.computer.advanced_surgeries)) + return FALSE + if(type in table.computer.advanced_surgeries) + return TRUE + /datum/surgery/proc/next_step(mob/user, intent) if(step_in_progress) @@ -87,30 +122,7 @@ /datum/surgery/advanced name = "advanced surgery" - -/datum/surgery/advanced/can_start(mob/user, mob/living/carbon/target) - if(!..()) - return FALSE - // True surgeons (like abductor scientists) need no instructions - if(HAS_TRAIT(user, TRAIT_SURGEON)) - return TRUE - - if(iscyborg(user)) - var/mob/living/silicon/robot/R = user - var/obj/item/surgical_processor/SP = locate() in R.module.modules - if(!SP) - return FALSE - if(type in SP.advanced_surgeries) - return TRUE - - var/turf/T = get_turf(target) - var/obj/structure/table/optable/table = locate(/obj/structure/table/optable, T) - if(!table || !table.computer) - return FALSE - if(table.computer.stat & (NOPOWER|BROKEN)) - return FALSE - if(type in table.computer.advanced_surgeries) - return TRUE + requires_tech = TRUE /obj/item/disk/surgery name = "Surgery Procedure Disk" @@ -127,7 +139,12 @@ /obj/item/disk/surgery/debug/Initialize() . = ..() - surgeries = subtypesof(/datum/surgery/advanced) + surgeries = list() + var/list/req_tech_surgeries = subtypesof(/datum/surgery) + for(var/i in req_tech_surgeries) + var/datum/surgery/beep = i + if(beep.requires_tech) + surgeries += beep //INFO //Check /mob/living/carbon/attackby for how surgery progresses, and also /mob/living/carbon/attack_hand. diff --git a/tgstation.dme b/tgstation.dme index 39f3eb21eda..fbd223d5c99 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -2712,6 +2712,7 @@ #include "code\modules\surgery\core_removal.dm" #include "code\modules\surgery\dental_implant.dm" #include "code\modules\surgery\eye_surgery.dm" +#include "code\modules\surgery\healing.dm" #include "code\modules\surgery\helpers.dm" #include "code\modules\surgery\implant_removal.dm" #include "code\modules\surgery\limb_augmentation.dm" @@ -2729,7 +2730,6 @@ #include "code\modules\surgery\advanced\lobotomy.dm" #include "code\modules\surgery\advanced\necrotic_revival.dm" #include "code\modules\surgery\advanced\pacification.dm" -#include "code\modules\surgery\advanced\reconstruction.dm" #include "code\modules\surgery\advanced\revival.dm" #include "code\modules\surgery\advanced\viral_bonding.dm" #include "code\modules\surgery\advanced\bioware\bioware.dm"