diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm
index 2c7ae702d64..dbe03173e4e 100644
--- a/code/modules/research/designs/medical_designs.dm
+++ b/code/modules/research/designs/medical_designs.dm
@@ -102,7 +102,7 @@ datum/design/bluespacebodybag
name = "Medical HUD implant"
desc = "These cybernetic eyes will display a medical HUD over everything you see. Wiggle eyes to control."
id = "ci-medhud"
- req_tech = list("materials" = 5, "programming" = 4, "biotech" = 4)
+ req_tech = list("materials" = 6, "programming" = 4, "biotech" = 4)
build_type = PROTOLATHE | MECHFAB
materials = list("$metal" = 200, "$glass" = 200, "$silver" = 200, "$gold" = 100)
build_path = /obj/item/cybernetic_implant/eyes/hud/medical
@@ -112,7 +112,7 @@ datum/design/bluespacebodybag
name = "Security HUD implant"
desc = "These cybernetic eyes will display a security HUD over everything you see. Wiggle eyes to control."
id = "ci-sechud"
- req_tech = list("materials" = 5, "programming" = 5, "biotech" = 5, "combat" = 2)
+ req_tech = list("materials" = 6, "programming" = 5, "biotech" = 4, "combat" = 2)
build_type = PROTOLATHE | MECHFAB
materials = list("$metal" = 200, "$glass" = 200, "$silver" = 300, "$gold" = 300)
build_path = /obj/item/cybernetic_implant/eyes/hud/security
@@ -122,38 +122,65 @@ datum/design/bluespacebodybag
name = "X-Ray implant"
desc = "These cybernetic eyes will give you X-ray vision. Blinking is futile."
id = "ci-xray"
- req_tech = list("materials" = 7, "programming" = 5, "biotech" = 5, "magnets" = 5, "plasmatech" = 3)
+ req_tech = list("materials" = 7, "programming" = 5, "biotech" = 6, "magnets" = 5, "plasmatech" = 3)
build_type = PROTOLATHE | MECHFAB
- materials = list("$metal" = 200, "$glass" = 200, "$silver" = 200, "$gold" = 200, "$plasma" = 200, "$diamond" = 500)
+ materials = list("$metal" = 200, "$glass" = 200, "$silver" = 200, "$gold" = 200, "$plasma" = 200, "$uranium" = 500, "$diamond" = 1000)
build_path = /obj/item/cybernetic_implant/eyes/xray
category = list("Medical Designs")
-/datum/design/cyberimb_thermals
+/datum/design/cyberimp_thermals
name = "Thermals implant"
desc = "These cybernetic eyes will give you Thermal vision. Vertical slit pupil included."
id = "ci-thermals"
- req_tech = list("materials" = 7, "programming" = 5, "biotech" = 5, "magnets" = 5, "plasmatech" = 3)
+ req_tech = list("materials" = 7, "programming" = 5, "biotech" = 5, "magnets" = 5, "plasmatech" = 3, "syndicate" = 4)
build_type = PROTOLATHE | MECHFAB
- materials = list("$metal" = 200, "$glass" = 200, "$silver" = 200, "$gold" = 200, "$plasma" = 200, "$diamond" = 500)
+ materials = list("$metal" = 200, "$glass" = 200, "$silver" = 200, "$gold" = 200, "$plasma" = 200, "$diamond" = 1000)
build_path = /obj/item/cybernetic_implant/eyes/thermals
category = list("Medical Designs")
-/datum/design/cyberimb_antidrop
+/datum/design/cyberimp_antidrop
name = "Anti-Drop implant"
desc = "This cybernetic brain implant will allow you to force your hand muscles to contract, preventing item dropping. Twitch ear to toggle."
id = "ci-antidrop"
- req_tech = list("materials" = 6, "programming" = 5, "biotech" = 5)
+ req_tech = list("materials" = 7, "programming" = 5, "biotech" = 5)
build_type = PROTOLATHE | MECHFAB
materials = list("$metal" = 200, "$glass" = 200, "$silver" = 400, "$gold" = 400)
build_path = /obj/item/cybernetic_implant/brain/anti_drop
category = list("Medical Designs")
-/datum/design/cyberimb_antistun
+/datum/design/cyberimp_antistun
name = "CNS Rebooter implant"
desc = "This implant will automatically give you back control over your central nervous system, reducing downtime when stunned."
id = "ci-antistun"
- req_tech = list("materials" = 6, "programming" = 5, "biotech" = 5)
+ req_tech = list("materials" = 7, "programming" = 5, "biotech" = 6)
build_type = PROTOLATHE | MECHFAB
- materials = list("$metal" = 200, "$glass" = 200, "$silver" = 400, "$gold" = 600)
+ materials = list("$metal" = 200, "$glass" = 200, "$silver" = 500, "$gold" = 1000)
build_path = /obj/item/cybernetic_implant/brain/anti_stun
+ category = list("Medical Designs")
+
+/datum/design/cyberimp_nutriment
+ name = "Nutriment pump implant"
+ desc = "This implant with synthesize and pump into your bloodstream a small amount of nutriment when you are starving."
+ id = "ci-nutriment"
+ req_tech = list("materials" = 6, "programming" = 4, "biotech" = 5)
+ build_type = PROTOLATHE | MECHFAB
+ materials = list("$metal" = 200, "$glass" = 200, "$gold" = 500, "$uranium" = 500)
+ category = list("Medical Designs")
+
+/datum/design/cyberimp_nutriment_plus
+ name = "Nutriment pump implant PLUS"
+ desc = "This implant with synthesize and pump into your bloodstream a small amount of nutriment when you are hungry."
+ id = "ci-nutrimentplus"
+ req_tech = list("materials" = 6, "programming" = 4, "biotech" = 6)
+ build_type = PROTOLATHE | MECHFAB
+ materials = list("$metal" = 200, "$glass" = 200, "$gold" = 500, "$uranium" = 750)
+ category = list("Medical Designs")
+
+/datum/design/cyberimp_reviver
+ name = "Reviver implant"
+ desc = "This implant will automatically deliver a therapeutic dose of electrical energy to your heart if it ever stops beating, and inject you with nanites. A second chance!"
+ id = "ci-reviver"
+ req_tech = list("materials" = 6, "programming" = 4, "biotech" = 6)
+ build_type = PROTOLATHE | MECHFAB
+ materials = list("$metal" = 200, "$glass" = 200, "$gold" = 1000, "$uranium" = 500, "$diamond" = 2000)
category = list("Medical Designs")
\ No newline at end of file
diff --git a/code/modules/surgery/cybernetic_implants.dm b/code/modules/surgery/cybernetic_implants.dm
index 6d289144127..3fd16cb8b62 100644
--- a/code/modules/surgery/cybernetic_implants.dm
+++ b/code/modules/surgery/cybernetic_implants.dm
@@ -1,35 +1,37 @@
#define MAX_BRAIN_IMPLANT 2
+#define MAX_CHEST_IMPLANT 3
+/datum/surgery_step/cybernetic_implant/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/cybernetic_implant/implant, datum/surgery/surgery)
+ user.visible_message("[user] begins to implant [target] with [implant].")
+
+//[[[[EYES]]]]
/datum/surgery/eye_cybernetic_implant/eyes
name = "eye cybernetic implant"
steps = list(/datum/surgery_step/incise, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/retract_skin, /datum/surgery_step/cybernetic_implant/eyes, /datum/surgery_step/fix_eyes, /datum/surgery_step/close)
location = "eyes"
-/datum/surgery/eye_cybernetic_implant/brain
- name = "brain cybernetic implant"
- steps = list(/datum/surgery_step/incise, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/retract_skin, /datum/surgery_step/saw, /datum/surgery_step/cybernetic_implant/brain, /datum/surgery_step/close)
- location = "head"
-
/datum/surgery_step/cybernetic_implant/eyes
implements = list(/obj/item/cybernetic_implant/eyes = 100)
time = 32
-/datum/surgery_step/cybernetic_implant/brain
- implements = list(/obj/item/cybernetic_implant/brain = 100)
- time = 32
-
-/datum/surgery_step/cybernetic_implant/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/cybernetic_implant/implant, datum/surgery/surgery)
- user.visible_message("[user] begins to implant [target] with [implant].")
-
/datum/surgery_step/cybernetic_implant/eyes/success(mob/user, mob/living/carbon/target, target_zone, obj/item/cybernetic_implant/eyes/implant, datum/surgery/surgery)
if(implant)
var/full = 0
if(locate(/obj/item/cybernetic_implant/eyes,target.internal_organs))
full = 1
-
insert(user,target,implant,target_zone,full)
return 1
+//[[[[BRAIN]]]]
+/datum/surgery/eye_cybernetic_implant/brain
+ name = "brain cybernetic implant"
+ steps = list(/datum/surgery_step/incise, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/retract_skin, /datum/surgery_step/saw, /datum/surgery_step/cybernetic_implant/brain, /datum/surgery_step/close)
+ location = "head"
+
+/datum/surgery_step/cybernetic_implant/brain
+ implements = list(/obj/item/cybernetic_implant/brain = 100)
+ time = 32
+
/datum/surgery_step/cybernetic_implant/brain/success(mob/user, mob/living/carbon/target, target_zone, obj/item/cybernetic_implant/brain/implant, datum/surgery/surgery)
if(implant)
var/full = 0
@@ -39,10 +41,30 @@
if(full < MAX_BRAIN_IMPLANT)
full = 0
-
insert(user,target,implant,target_zone,full)
return 1
+//[[[[CHEST]]]]
+/datum/surgery/eye_cybernetic_implant/chest
+ name = "torso cybernetic implant"
+ steps = list(/datum/surgery_step/incise, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/retract_skin, /datum/surgery_step/saw, /datum/surgery_step/cybernetic_implant/chest, /datum/surgery_step/close)
+ location = "chest"
+
+/datum/surgery_step/cybernetic_implant/chest
+ implements = list(/obj/item/cybernetic_implant/chest = 100)
+ time = 32
+
+/datum/surgery_step/cybernetic_implant/chest/success(mob/user, mob/living/carbon/target, target_zone, obj/item/cybernetic_implant/chest/implant, datum/surgery/surgery)
+ if(implant)
+ var/full = 0
+ for(var/obj/item/I in target.contents)
+ if(istype(I,/obj/item/cybernetic_implant/chest))
+ full++
+
+ if(full < MAX_CHEST_IMPLANT)
+ full = 0
+ insert(user,target,implant,target_zone,full)
+ return 1
/datum/surgery_step/cybernetic_implant/proc/insert(mob/user, mob/living/carbon/target, obj/item/cybernetic_implant/implant,target_zone,full)
if(full)
diff --git a/code/modules/surgery/organs/cybernetic_implants.dm b/code/modules/surgery/organs/cybernetic_implants.dm
index 5b5a928148b..0d48eb69cce 100644
--- a/code/modules/surgery/organs/cybernetic_implants.dm
+++ b/code/modules/surgery/organs/cybernetic_implants.dm
@@ -44,6 +44,7 @@
desc = "These cybernetic eyes will display a medical HUD over everything you see. Wiggle eyes to control."
eye_color = "0ff"
implant_color = "#00FFFF"
+ origin_tech = "materials=4;programming=3;biotech=4"
/obj/item/cybernetic_implant/eyes/hud/medical/function()
if(!owner)
@@ -59,6 +60,7 @@
desc = "These cybernetic eyes will display a security HUD over everything you see. Wiggle eyes to control."
eye_color = "d00"
implant_color = "#CC0000"
+ origin_tech = "materials=4;programming=4;biotech=3;combat=1"
/obj/item/cybernetic_implant/eyes/hud/security/function()
if(!owner)
@@ -74,6 +76,7 @@
desc = "These cybernetic eyes will give you X-ray vision. Blinking is futile."
eye_color = "000"
implant_color = "#000000"
+ origin_tech = "materials=6;programming=4;biotech=5;magnets=5;plasmatech=2"
/obj/item/cybernetic_implant/eyes/xray/function()
if(!owner)
@@ -93,6 +96,7 @@
eye_color = "FC0"
implant_color = "#FFCC00"
flash_protect = -1
+ origin_tech = "materials=6;programming=4;biotech=5;magnets=5;plasmatech=2;syndicate=4"
/obj/item/cybernetic_implant/eyes/thermals/function()
if(!owner)
@@ -143,6 +147,7 @@
var/obj/item/l_hand_obj = null
var/obj/item/r_hand_obj = null
implant_color = "#DE7E00"
+ origin_tech = "materials=5;programming=4;biotech=4"
/obj/item/cybernetic_implant/brain/anti_drop/function()
action_button_name = "Toggle Anti-Drop"
@@ -213,6 +218,7 @@
name = "CNS Rebooter implant"
desc = "This implant will automatically give you back control over your central nervous system, reducing downtime when stunned."
implant_color = "#FFFF00"
+ origin_tech = "materials=6;programming=4;biotech=5"
/obj/item/cybernetic_implant/brain/anti_stun/function()
SSobj.processing |= src
@@ -233,4 +239,94 @@
/obj/item/cybernetic_implant/brain/anti_stun/emp_act(severity)
SSobj.processing.Remove(src)
spawn(..() * 10)
- SSobj.processing |= src
\ No newline at end of file
+ SSobj.processing |= src
+
+
+//[[[[CHEST]]]]
+
+/obj/item/cybernetic_implant/chest
+ name = "cybernetic torso implant"
+ desc = "implants for the organs in your torso"
+ icon_state = "chest_implant"
+
+/obj/item/cybernetic_implant/chest/nutriment
+ name = "Nutriment pump implant"
+ desc = "This implant with synthesize and pump into your bloodstream a small amount of nutriment when you are starving."
+ icon_state = "chest_implant"
+ var/hunger_threshold = NUTRITION_LEVEL_STARVING
+ var/synthesizing = 0
+ var/nutriment_amount = 30
+ var/poison_amount = 5
+ origin_tech = "materials=5;programming=3;biotech=4"
+
+/obj/item/cybernetic_implant/chest/nutriment/function()
+ SSobj.processing |= src
+
+/obj/item/cybernetic_implant/chest/nutriment/process()
+ if(synthesizing)
+ return
+ if(!owner)
+ SSobj.processing.Remove(src)
+ qdel(src)
+ return
+ if(owner.stat == DEAD)
+ return
+
+ if(owner.nutrition <= hunger_threshold)
+ synthesizing = 1
+ spawn(50)
+ owner << "You feel less hungry..."
+ owner.nutrition += nutriment_amount
+ synthesizing = 0
+
+/obj/item/cybernetic_implant/chest/nutriment/plus
+ name = "Nutriment pump implant PLUS"
+ desc = "This implant with synthesize and pump into your bloodstream a small amount of nutriment when you are hungry."
+ icon_state = "chest_implant"
+ hunger_threshold = NUTRITION_LEVEL_HUNGRY
+ nutriment_amount = 50
+ poison_amount = 10
+ origin_tech = "materials=5;programming=3;biotech=5"
+
+/obj/item/cybernetic_implant/chest/nutriment/emp_act(severity)
+ owner.reagents.add_reagent("????",poison_amount / severity) //food poisoning
+ owner << "You feel like your insides are burning."
+
+/obj/item/cybernetic_implant/chest/reviver
+ name = "Reviver implant"
+ desc = "This implant will automatically deliver a therapeutic dose of electrical energy to your heart if it ever stops beating, and inject you with nanites. A second chance!"
+ icon_state = "chest_implant"
+ var/defibrillating = 0
+ var/recharge_time
+
+/obj/item/cybernetic_implant/chest/reviver/function()
+ recharge_time = world.time + 2000
+ SSobj.processing |= src
+
+/obj/item/cybernetic_implant/chest/reviver/process()
+ if(defibrillating)
+ return
+ if(!owner)
+ SSobj.processing.Remove(src)
+ qdel(src)
+ return
+ if(world.time < recharge_time)
+ return
+ if(owner.stat != DEAD)
+ return
+
+ defibrillating = 1
+ spawn(600)
+ if(owner.stat == DEAD)
+ owner.visible_message("[owner]'s body convulses by itself.")
+ playsound(get_turf(src), "bodyfall", 50, 1)
+ playsound(get_turf(src), 'sound/machines/defib_zap.ogg', 50, 1, -1)
+ owner.reagents.add_reagent("nanites",10)
+ owner.stat = UNCONSCIOUS
+ owner.heart_attack = 0
+ dead_mob_list -= owner
+ living_mob_list |= list(owner)
+ owner.emote("gasp")
+ add_logs(owner, owner, "revived", object="defibrillator implant")
+ recharge_time = world.time + 20000
+ defibrillating = 0
\ No newline at end of file
diff --git a/code/modules/surgery/surgery_step.dm b/code/modules/surgery/surgery_step.dm
index f4509701ac0..68d781e9065 100644
--- a/code/modules/surgery/surgery_step.dm
+++ b/code/modules/surgery/surgery_step.dm
@@ -86,6 +86,27 @@
user.visible_message("[user] screws up!")
return 0
+/datum/surgery_step/close/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
+ if(locate(/datum/surgery_step/saw) in surgery.steps)
+ var/limb_type
+ switch(target_zone)
+ if("head")
+ limb_type = /obj/item/organ/limb/head
+ if("chest")
+ limb_type = /obj/item/organ/limb/chest
+ if("l_arm")
+ limb_type = /obj/item/organ/limb/l_arm
+ if("r_arm")
+ limb_type = /obj/item/organ/limb/r_arm
+ if("l_leg")
+ limb_type = /obj/item/organ/limb/l_leg
+ if("r_leg")
+ limb_type = /obj/item/organ/limb/r_leg
+ else
+ return
+ var/obj/item/organ/limb/limb = target.getlimb(limb_type)
+ if(limb)
+ limb.heal_damage(35,0,0)
/datum/surgery_step/proc/tool_check(mob/user, obj/item/tool)
return 1
diff --git a/icons/obj/surgery.dmi b/icons/obj/surgery.dmi
index 93ebade829d..c325add6f21 100644
Binary files a/icons/obj/surgery.dmi and b/icons/obj/surgery.dmi differ