[MIRROR] Extensive surgery additions (#5590)

* Extensive surgery additions

* Update role_preferences.dm

* Update surgery_step.dm
This commit is contained in:
CitadelStationBot
2018-02-19 10:48:11 -06:00
committed by Poojawa
parent d8faf15832
commit 1e65c813f0
46 changed files with 1098 additions and 251 deletions
@@ -0,0 +1,30 @@
//Bioware
//Body modifications applied through surgery. They generally affect physiology.
/datum/bioware
var/name = "Generic Bioware"
var/mob/living/carbon/human/owner
var/desc = "If you see this something's wrong, warn a coder."
var/active = FALSE
var/mod_type = BIOWARE_GENERIC
/datum/bioware/New(mob/living/carbon/human/_owner)
owner = _owner
for(var/X in owner.bioware)
var/datum/bioware/B = X
if(B.mod_type == mod_type)
qdel(src)
return
on_gain()
/datum/bioware/Destroy()
owner = null
if(active)
on_lose()
return ..()
/datum/bioware/proc/on_gain()
active = TRUE
/datum/bioware/proc/on_lose()
return
@@ -0,0 +1,12 @@
/datum/surgery/advanced/bioware
name = "enhancement surgery"
var/bioware_target = BIOWARE_GENERIC
/datum/surgery/advanced/bioware/can_start(mob/user, mob/living/carbon/human/target)
if(!..())
return FALSE
for(var/X in target.bioware)
var/datum/bioware/B = X
if(B.mod_type == bioware_target)
return FALSE
return TRUE
@@ -0,0 +1,43 @@
/obj/item/disk/surgery/nerve_grounding
desc = "The disk provides instructions on how to reroute the nervous system to ground electric shocks."
surgeries = list(/datum/surgery/advanced/bioware/nerve_grounding)
/datum/surgery/advanced/bioware/nerve_grounding
name = "nerve grounding"
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/ground_nerves,
/datum/surgery_step/close)
possible_locs = list("chest")
bioware_target = BIOWARE_NERVES
/datum/surgery_step/ground_nerves
name = "ground nerves"
accept_hand = TRUE
time = 155
/datum/surgery_step/ground_nerves/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
user.visible_message("[user] starts splicing together [target]'s nerves.", "<span class='notice'>You start splicing together [target]'s nerves.</span>")
/datum/surgery_step/ground_nerves/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
user.visible_message("[user] successfully splices [target]'s nervous system!", "<span class='notice'>You successfully splice [target]'s nervous system!</span>")
new /datum/bioware/grounded_nerves(target)
return TRUE
/datum/bioware/grounded_nerves
name = "Grounded Nerves"
desc = "Nerves form a safe path for electricity to traverse, protecting the body from electric shocks."
mod_type = "nerves"
var/prev_coeff
/datum/bioware/grounded_nerves/on_gain()
..()
prev_coeff = owner.physiology.siemens_coeff
owner.physiology.siemens_coeff = 0
/datum/bioware/grounded_nerves/on_lose()
..()
owner.physiology.siemens_coeff = prev_coeff
@@ -0,0 +1,41 @@
/obj/item/disk/surgery/nerve_splicing
desc = "The disk provides instructions on how to splice the circulatory system to counter stuns and paralysis."
surgeries = list(/datum/surgery/advanced/bioware/nerve_splicing)
/datum/surgery/advanced/bioware/nerve_splicing
name = "nerve splicing"
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/splice_nerves,
/datum/surgery_step/close)
possible_locs = list("chest")
bioware_target = BIOWARE_NERVES
/datum/surgery_step/splice_nerves
name = "splice nerves"
accept_hand = TRUE
time = 155
/datum/surgery_step/splice_nerves/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
user.visible_message("[user] starts splicing together [target]'s nerves.", "<span class='notice'>You start splicing together [target]'s nerves.</span>")
/datum/surgery_step/splice_nerves/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
user.visible_message("[user] successfully splices [target]'s nervous system!", "<span class='notice'>You successfully splice [target]'s nervous system!</span>")
new /datum/bioware/spliced_nerves(target)
return TRUE
/datum/bioware/spliced_nerves
name = "Spliced Nerves"
desc = "Nerves are connected to each other multiple times, greatly reducing the impact of stunning effects."
mod_type = "nerves"
/datum/bioware/spliced_nerves/on_gain()
..()
owner.physiology.stun_mod *= 0.5
/datum/bioware/spliced_nerves/on_lose()
..()
owner.physiology.stun_mod *= 2
@@ -0,0 +1,41 @@
/obj/item/disk/surgery/vein_threading
desc = "The disk provides instructions on how to modify the circulatory system to greatly slow down bleeding."
surgeries = list(/datum/surgery/advanced/bioware/vein_threading)
/datum/surgery/advanced/bioware/vein_threading
name = "vein threading"
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/thread_veins,
/datum/surgery_step/close)
possible_locs = list("chest")
bioware_target = BIOWARE_CIRCULATION
/datum/surgery_step/thread_veins
name = "thread veins"
accept_hand = TRUE
time = 125
/datum/surgery_step/thread_veins/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
user.visible_message("[user] starts weaving [target]'s circulatory system.", "<span class='notice'>You start weaving [target]'s circulatory system.</span>")
/datum/surgery_step/thread_veins/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
user.visible_message("[user] weaves [target]'s circulatory system into a resistant mesh!", "<span class='notice'>You weave [target]'s circulatory system into a resistant mesh!</span>")
new /datum/bioware/threaded_veins(target)
return TRUE
/datum/bioware/threaded_veins
name = "Threaded Veins"
desc = "The circulatory system is woven into a mesh, severely reducing the amount of blood lost from wounds."
mod_type = "circulation"
/datum/bioware/threaded_veins/on_gain()
..()
owner.physiology.bleed_mod *= 0.25
/datum/bioware/threaded_veins/on_lose()
..()
owner.physiology.bleed_mod *= 4