Merge pull request #9312 from Linzolle/ligament
ports ligament surgeries as well as dissection
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/datum/surgery/organ_extraction
|
||||
name = "experimental dissection"
|
||||
name = "experimental organ replacement"
|
||||
steps = list(/datum/surgery_step/incise, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/retract_skin, /datum/surgery_step/incise, /datum/surgery_step/extract_organ, /datum/surgery_step/gland_insert)
|
||||
possible_locs = list(BODY_ZONE_CHEST)
|
||||
ignore_clothes = 1
|
||||
|
||||
@@ -16,5 +16,5 @@
|
||||
blacklisted = 1
|
||||
use_skintones = 0
|
||||
species_traits = list(NOBLOOD,EYECOLOR,NOGENITALS)
|
||||
inherent_traits = list(TRAIT_RADIMMUNE,TRAIT_VIRUSIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER,TRAIT_NOHUNGER)
|
||||
inherent_traits = list(TRAIT_RADIMMUNE,TRAIT_VIRUSIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER,TRAIT_NOLIMBDISABLE,TRAIT_NOHUNGER)
|
||||
sexes = 0
|
||||
@@ -4,7 +4,7 @@
|
||||
say_mod = "beep boops" //inherited from a user's real species
|
||||
sexes = 0
|
||||
species_traits = list(NOTRANSSTING,NOGENITALS,NOAROUSAL) //all of these + whatever we inherit from the real species
|
||||
inherent_traits = list(TRAIT_VIRUSIMMUNE,TRAIT_NODISMEMBER,TRAIT_NOHUNGER,TRAIT_NOBREATH)
|
||||
inherent_traits = list(TRAIT_VIRUSIMMUNE,TRAIT_NODISMEMBER,TRAIT_NOLIMBDISABLE,TRAIT_NOHUNGER,TRAIT_NOBREATH)
|
||||
inherent_biotypes = list(MOB_ROBOTIC, MOB_HUMANOID)
|
||||
dangerous_existence = 1
|
||||
blacklisted = 1
|
||||
@@ -12,7 +12,7 @@
|
||||
damage_overlay_type = "synth"
|
||||
limbs_id = "synth"
|
||||
var/list/initial_species_traits = list(NOTRANSSTING) //for getting these values back for assume_disguise()
|
||||
var/list/initial_inherent_traits = list(TRAIT_VIRUSIMMUNE,TRAIT_NODISMEMBER,TRAIT_NOHUNGER,TRAIT_NOBREATH)
|
||||
var/list/initial_inherent_traits = list(TRAIT_VIRUSIMMUNE,TRAIT_NODISMEMBER,TRAIT_NOLIMBDISABLE,TRAIT_NOHUNGER,TRAIT_NOBREATH)
|
||||
var/disguise_fail_health = 75 //When their health gets to this level their synthflesh partially falls off
|
||||
var/datum/species/fake_species = null //a species to do most of our work for us, unless we're damaged
|
||||
|
||||
|
||||
@@ -713,6 +713,13 @@
|
||||
research_icon = 'icons/obj/surgery.dmi'
|
||||
research_icon_state = "surgery_any"
|
||||
var/surgery
|
||||
|
||||
/datum/design/surgery/experimental_dissection
|
||||
name = "Experimental Dissection"
|
||||
desc = "A surgical procedure which deeply analyzes the biology of a corpse, and automatically adds new findings to the research database."
|
||||
id = "surgery_exp_dissection"
|
||||
surgery = /datum/surgery/advanced/bioware/experimental_dissection
|
||||
research_icon_state = "surgery_chest"
|
||||
|
||||
/datum/design/surgery/lobotomy
|
||||
name = "Lobotomy"
|
||||
@@ -784,6 +791,22 @@
|
||||
surgery = /datum/surgery/advanced/bioware/vein_threading
|
||||
research_icon_state = "surgery_chest"
|
||||
|
||||
/datum/design/surgery/ligament_hook
|
||||
name = "Ligament Hook"
|
||||
desc = "A surgical procedure which reshapes the connections between torso and limbs, making it so limbs can be attached manually if severed. \
|
||||
However this weakens the connection, making them easier to detach as well."
|
||||
id = "surgery_ligament_hook"
|
||||
surgery = /datum/surgery/advanced/bioware/ligament_hook
|
||||
research_icon_state = "surgery_chest"
|
||||
|
||||
/datum/design/surgery/ligament_reinforcement
|
||||
name = "Ligament Reinforcement"
|
||||
desc = "A surgical procedure which adds a protective tissue and bone cage around the connections between the torso and limbs, preventing dismemberment. \
|
||||
However, the nerve connections as a result are more easily interrupted, making it easier to disable limbs with damage."
|
||||
id = "surgery_ligament_reinforcement"
|
||||
surgery = /datum/surgery/advanced/bioware/ligament_reinforcement
|
||||
research_icon_state = "surgery_chest"
|
||||
|
||||
/datum/design/surgery/necrotic_revival
|
||||
name = "Necrotic Revival"
|
||||
desc = "An experimental surgical procedure that stimulates the growth of a Romerol tumor inside the patient's brain. Requires zombie powder or rezadone."
|
||||
|
||||
@@ -115,7 +115,7 @@
|
||||
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_toxinhealing", "organbox")
|
||||
design_ids = list("surgery_lobotomy", "surgery_reconstruction", "surgery_toxinhealing", "organbox", "surgery_exp_dissection")
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
|
||||
export_price = 5000
|
||||
|
||||
@@ -124,7 +124,7 @@
|
||||
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_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")
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000)
|
||||
export_price = 5000
|
||||
|
||||
@@ -1088,4 +1088,4 @@
|
||||
for(var/i in processing)
|
||||
var/datum/techweb_node/TN = i
|
||||
TW.add_point_list(TN.research_costs)
|
||||
return TW.printout_points()
|
||||
return TW.printout_points()
|
||||
@@ -0,0 +1,72 @@
|
||||
/datum/surgery/advanced/bioware/experimental_dissection
|
||||
name = "Experimental Dissection"
|
||||
desc = "A surgical procedure which deeply analyzes the biology of a corpse, and automatically adds new findings to the research database."
|
||||
steps = list(/datum/surgery_step/incise,
|
||||
/datum/surgery_step/retract_skin,
|
||||
/datum/surgery_step/clamp_bleeders,
|
||||
/datum/surgery_step/incise,
|
||||
/datum/surgery_step/dissection,
|
||||
/datum/surgery_step/close)
|
||||
possible_locs = list(BODY_ZONE_CHEST)
|
||||
bioware_target = BIOWARE_DISSECTION
|
||||
|
||||
/datum/surgery/advanced/bioware/experimental_dissection/can_start(mob/user, mob/living/carbon/target)
|
||||
. = ..()
|
||||
if(iscyborg(user))
|
||||
return FALSE //robots cannot be creative
|
||||
//(also this surgery shouldn't be consistently successful, and cyborgs have a 100% success rate on surgery)
|
||||
if(target.stat != DEAD)
|
||||
return FALSE
|
||||
|
||||
/datum/surgery_step/dissection
|
||||
name = "dissection"
|
||||
implements = list(/obj/item/scalpel = 60, /obj/item/kitchen/knife = 30, /obj/item/shard = 15)
|
||||
time = 125
|
||||
|
||||
/datum/surgery_step/dissection/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
display_results(user, target, "<span class='notice'>You start dissecting [target].</span>",
|
||||
"[user] starts dissecting [target].",
|
||||
"[user] starts dissecting [target].")
|
||||
|
||||
/datum/surgery_step/dissection/proc/check_value(mob/living/carbon/target)
|
||||
if(isalienroyal(target))
|
||||
return 10000
|
||||
else if(isalienadult(target))
|
||||
return 5000
|
||||
else if(ismonkey(target))
|
||||
return 1000
|
||||
else if(ishuman(target))
|
||||
var/mob/living/carbon/human/H = target
|
||||
if(H.dna && H.dna.species)
|
||||
if(isabductor(H))
|
||||
return 8000
|
||||
if(isgolem(H) || iszombie(H))
|
||||
return 4000
|
||||
if(isjellyperson(H) || ispodperson(H))
|
||||
return 3000
|
||||
return 2000
|
||||
|
||||
/datum/surgery_step/dissection/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
display_results(user, target, "<span class='notice'>You dissect [target], and add your discoveries to the research database!</span>",
|
||||
"[user] dissects [target], adding [user.p_their()] discoveries to the research database!",
|
||||
"[user] dissects [target]!")
|
||||
SSresearch.science_tech.add_point_list(list(TECHWEB_POINT_TYPE_GENERIC = check_value(target)))
|
||||
var/obj/item/bodypart/L = target.get_bodypart(BODY_ZONE_CHEST)
|
||||
target.apply_damage(80, BRUTE, L)
|
||||
new /datum/bioware/dissected(target)
|
||||
return TRUE
|
||||
|
||||
/datum/surgery_step/dissection/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
display_results(user, target, "<span class='notice'>You dissect [target], but do not find anything particularly interesting.</span>",
|
||||
"[user] dissects [target], however it seems [user.p_they()] didn't find anything useful.",
|
||||
"[user] dissects [target], but looks a little dissapointed.")
|
||||
SSresearch.science_tech.add_point_list(list(TECHWEB_POINT_TYPE_GENERIC = (check_value(target) * 0.2)))
|
||||
var/obj/item/bodypart/L = target.get_bodypart(BODY_ZONE_CHEST)
|
||||
target.apply_damage(80, BRUTE, L)
|
||||
new /datum/bioware/dissected(target)
|
||||
return TRUE
|
||||
|
||||
/datum/bioware/dissected
|
||||
name = "Dissected"
|
||||
desc = "This body has been dissected and analyzed. It is no longer worth experimenting on."
|
||||
mod_type = BIOWARE_DISSECTION
|
||||
45
code/modules/surgery/advanced/bioware/ligament_hook.dm
Normal file
45
code/modules/surgery/advanced/bioware/ligament_hook.dm
Normal file
@@ -0,0 +1,45 @@
|
||||
/datum/surgery/advanced/bioware/ligament_hook
|
||||
name = "Ligament Hook"
|
||||
desc = "A surgical procedure which reshapes the connections between torso and limbs, making it so limbs can be attached manually if severed. \
|
||||
However this weakens the connection, making them easier to detach as well."
|
||||
steps = list(/datum/surgery_step/incise,
|
||||
/datum/surgery_step/retract_skin,
|
||||
/datum/surgery_step/clamp_bleeders,
|
||||
/datum/surgery_step/incise,
|
||||
/datum/surgery_step/incise,
|
||||
/datum/surgery_step/reshape_ligaments,
|
||||
/datum/surgery_step/close)
|
||||
possible_locs = list(BODY_ZONE_CHEST)
|
||||
bioware_target = BIOWARE_LIGAMENTS
|
||||
|
||||
/datum/surgery_step/reshape_ligaments
|
||||
name = "reshape ligaments"
|
||||
accept_hand = TRUE
|
||||
time = 125
|
||||
|
||||
/datum/surgery_step/reshape_ligaments/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
display_results(user, target, "<span class='notice'>You start reshaping [target]'s ligaments into a hook-like shape.</span>",
|
||||
"[user] starts reshaping [target]'s ligaments into a hook-like shape.",
|
||||
"[user] starts manipulating [target]'s ligaments.")
|
||||
|
||||
/datum/surgery_step/reshape_ligaments/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
display_results(user, target, "<span class='notice'>You finish reshaping [target]'s ligaments into a connective hook!</span>",
|
||||
"[user] finishes reshaping [target]'s ligaments into a connective hook!",
|
||||
"[user] finishes manipulating [target]'s ligaments!")
|
||||
new /datum/bioware/hooked_ligaments(target)
|
||||
return TRUE
|
||||
|
||||
/datum/bioware/hooked_ligaments
|
||||
name = "Hooked Ligaments"
|
||||
desc = "The ligaments and nerve endings that connect the torso to the limbs are formed into a hook-like shape, so limbs can be attached without requiring surgery, but are easier to sever."
|
||||
mod_type = BIOWARE_LIGAMENTS
|
||||
|
||||
/datum/bioware/hooked_ligaments/on_gain()
|
||||
..()
|
||||
ADD_TRAIT(owner, TRAIT_LIMBATTACHMENT, "ligament_hook")
|
||||
ADD_TRAIT(owner, TRAIT_EASYDISMEMBER, "ligament_hook")
|
||||
|
||||
/datum/bioware/hooked_ligaments/on_lose()
|
||||
..()
|
||||
REMOVE_TRAIT(owner, TRAIT_LIMBATTACHMENT, "ligament_hook")
|
||||
REMOVE_TRAIT(owner, TRAIT_EASYDISMEMBER, "ligament_hook")
|
||||
@@ -0,0 +1,45 @@
|
||||
/datum/surgery/advanced/bioware/ligament_reinforcement
|
||||
name = "Ligament Reinforcement"
|
||||
desc = "A surgical procedure which adds a protective tissue and bone cage around the connections between the torso and limbs, preventing dismemberment. \
|
||||
However, the nerve connections as a result are more easily interrupted, making it easier to disable limbs with damage."
|
||||
steps = list(/datum/surgery_step/incise,
|
||||
/datum/surgery_step/retract_skin,
|
||||
/datum/surgery_step/clamp_bleeders,
|
||||
/datum/surgery_step/incise,
|
||||
/datum/surgery_step/incise,
|
||||
/datum/surgery_step/reinforce_ligaments,
|
||||
/datum/surgery_step/close)
|
||||
possible_locs = list(BODY_ZONE_CHEST)
|
||||
bioware_target = BIOWARE_LIGAMENTS
|
||||
|
||||
/datum/surgery_step/reinforce_ligaments
|
||||
name = "reinforce ligaments"
|
||||
accept_hand = TRUE
|
||||
time = 125
|
||||
|
||||
/datum/surgery_step/reinforce_ligaments/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
display_results(user, target, "<span class='notice'>You start reinforcing [target]'s ligaments.</span>",
|
||||
"[user] starts reinforcing [target]'s ligaments.",
|
||||
"[user] starts manipulating [target]'s ligaments.")
|
||||
|
||||
/datum/surgery_step/reinforce_ligaments/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
display_results(user, target, "<span class='notice'>You finish reinforcing [target]'s ligaments!</span>",
|
||||
"[user] finishes reinforcing [target]'s ligaments!",
|
||||
"[user] finishes manipulating [target]'s ligaments!")
|
||||
new /datum/bioware/reinforced_ligaments(target)
|
||||
return TRUE
|
||||
|
||||
/datum/bioware/reinforced_ligaments
|
||||
name = "Reinforced Ligaments"
|
||||
desc = "The ligaments and nerve endings that connect the torso to the limbs are protected by a mix of bone and tissues, and are much harder to separate from the body, but are also easier to disable."
|
||||
mod_type = BIOWARE_LIGAMENTS
|
||||
|
||||
/datum/bioware/reinforced_ligaments/on_gain()
|
||||
..()
|
||||
ADD_TRAIT(owner, TRAIT_NODISMEMBER, "reinforced_ligaments")
|
||||
ADD_TRAIT(owner, TRAIT_EASYLIMBDISABLE, "reinforced_ligaments")
|
||||
|
||||
/datum/bioware/reinforced_ligaments/on_lose()
|
||||
..()
|
||||
REMOVE_TRAIT(owner, TRAIT_NODISMEMBER, "reinforced_ligaments")
|
||||
REMOVE_TRAIT(owner, TRAIT_EASYLIMBDISABLE, "reinforced_ligaments")
|
||||
@@ -231,7 +231,7 @@
|
||||
return BODYPART_DISABLED_PARALYSIS
|
||||
if(can_dismember() && !HAS_TRAIT(owner, TRAIT_NODISMEMBER))
|
||||
. = disabled //inertia, to avoid limbs healing 0.1 damage and being re-enabled
|
||||
if((get_damage(TRUE) >= max_damage))
|
||||
if((get_damage(TRUE) >= max_damage) || (HAS_TRAIT(owner, TRAIT_EASYLIMBDISABLE) && (get_damage(TRUE) >= (max_damage * 0.6)))) //Easy limb disable disables the limb at 40% health instead of 0%
|
||||
return BODYPART_DISABLED_DAMAGE
|
||||
if(disabled && (get_damage(TRUE) <= (max_damage * 0.5)))
|
||||
return BODYPART_NOT_DISABLED
|
||||
|
||||
Reference in New Issue
Block a user