From cc7fa8ed4b69fa2a968444fd5210d47799ced252 Mon Sep 17 00:00:00 2001 From: xxalpha Date: Sun, 29 Mar 2015 20:33:45 +0100 Subject: [PATCH 1/6] Added two more implants. "Close" surgery now heals damage. --- .../research/designs/medical_designs.dm | 51 ++++++--- code/modules/surgery/cybernetic_implants.dm | 50 ++++++--- .../surgery/organs/cybernetic_implants.dm | 98 +++++++++++++++++- code/modules/surgery/surgery_step.dm | 21 ++++ icons/obj/surgery.dmi | Bin 12582 -> 12726 bytes 5 files changed, 193 insertions(+), 27 deletions(-) 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 93ebade829d8b8b54225500b975b4fa4965b54ef..c325add6f21caa8c8dc643ebb64a9732ea35287c 100644 GIT binary patch literal 12726 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 literal 12582 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 From 74d34a8ef1b6bbb7d4f9dce0f9984fdcd790818c Mon Sep 17 00:00:00 2001 From: xxalpha Date: Mon, 30 Mar 2015 02:16:32 +0100 Subject: [PATCH 2/6] Added Reviver implant. Added origin tech to Reviver implant. Removed debug message. --- code/modules/surgery/cybernetic_implants.dm | 14 +++-- .../surgery/organs/cybernetic_implants.dm | 60 ++++++++++++++----- code/modules/surgery/surgery_step.dm | 1 + 3 files changed, 55 insertions(+), 20 deletions(-) diff --git a/code/modules/surgery/cybernetic_implants.dm b/code/modules/surgery/cybernetic_implants.dm index 3fd16cb8b62..66792e9c61b 100644 --- a/code/modules/surgery/cybernetic_implants.dm +++ b/code/modules/surgery/cybernetic_implants.dm @@ -35,7 +35,7 @@ /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 - for(var/obj/item/I in target.contents) + for(var/obj/item/I in target.internal_organs) if(istype(I,/obj/item/cybernetic_implant/brain)) full++ @@ -57,12 +57,16 @@ /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) + for(var/obj/item/I in target.internal_organs) if(istype(I,/obj/item/cybernetic_implant/chest)) full++ - if(full < MAX_CHEST_IMPLANT) full = 0 + + if(istype(implant,/obj/item/cybernetic_implant/chest/heart)) + if(locate(/obj/item/cybernetic_implant/chest/heart) in target.internal_organs) + full = 1 + insert(user,target,implant,target_zone,full) return 1 @@ -74,5 +78,5 @@ implant.owner = target implant.function() user.drop_item() - implant.loc = target - target.internal_organs |= implant \ No newline at end of file + target.internal_organs |= implant + implant.loc = target \ No newline at end of file diff --git a/code/modules/surgery/organs/cybernetic_implants.dm b/code/modules/surgery/organs/cybernetic_implants.dm index 0d48eb69cce..855d0372771 100644 --- a/code/modules/surgery/organs/cybernetic_implants.dm +++ b/code/modules/surgery/organs/cybernetic_implants.dm @@ -8,8 +8,7 @@ var/implant_color = "#FFFFFF" /obj/item/cybernetic_implant/New(var/mob/M = null) - if(M) - owner = M + owner = M return ..() /obj/item/cybernetic_implant/proc/function() @@ -107,6 +106,8 @@ update_eye_color("You see prey everywhere you look...") /obj/item/cybernetic_implant/eyes/emp_act(severity) + if(!owner) + return if(severity > 1) if(prob(5)) return @@ -133,6 +134,8 @@ ..() /obj/item/cybernetic_implant/brain/emp_act(severity) + if(!owner) + return var/stun_amount = 5 + (severity-1 ? 0 : 5) owner.Stun(stun_amount) owner << "Your body seizes up!" @@ -192,6 +195,8 @@ r_hand_obj = null /obj/item/cybernetic_implant/brain/anti_drop/emp_act(severity) + if(!owner) + return var/range = severity ? 10 : 5 var/atom/A var/obj/item/L_item = owner.l_hand @@ -237,6 +242,8 @@ owner.weakened = STUN_SET_AMOUNT /obj/item/cybernetic_implant/brain/anti_stun/emp_act(severity) + if(!owner) + return SSobj.processing.Remove(src) spawn(..() * 10) SSobj.processing |= src @@ -289,21 +296,25 @@ origin_tech = "materials=5;programming=3;biotech=5" /obj/item/cybernetic_implant/chest/nutriment/emp_act(severity) + if(!owner) + return owner.reagents.add_reagent("????",poison_amount / severity) //food poisoning owner << "You feel like your insides are burning." -/obj/item/cybernetic_implant/chest/reviver +/obj/item/cybernetic_implant/chest/heart/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!" + desc = "This implant will automatically deliver a therapeutic dose of electrical energy to your heart if it ever stops beating, and inject nanites into your bloodstream. A second chance!" icon_state = "chest_implant" var/defibrillating = 0 - var/recharge_time + var/recharge_time = 0 + origin_tech = "materials=7;programming=3;biotech=4" -/obj/item/cybernetic_implant/chest/reviver/function() - recharge_time = world.time + 2000 - SSobj.processing |= src +/obj/item/cybernetic_implant/chest/heart/reviver/function() + if(istype(owner,/mob/living/carbon/human)) + recharge_time = world.time + 2000 + SSobj.processing |= src -/obj/item/cybernetic_implant/chest/reviver/process() +/obj/item/cybernetic_implant/chest/heart/reviver/process() if(defibrillating) return if(!owner) @@ -319,14 +330,33 @@ 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 + playsound(owner, "bodyfall", 50, 1) + playsound(owner, 'sound/machines/defib_zap.ogg', 50, 1, -1) dead_mob_list -= owner living_mob_list |= list(owner) + owner.stat = UNCONSCIOUS + owner.reagents.add_reagent("nanites",10) + var/mob/living/carbon/human/H = owner + var/amount = BLOOD_VOLUME_OKAY - H.vessel.total_volume + H.vessel.add_reagent("blood", amount) + H.vessel.update_total() + owner.heart_attack = 0 owner.emote("gasp") add_logs(owner, owner, "revived", object="defibrillator implant") recharge_time = world.time + 20000 - defibrillating = 0 \ No newline at end of file + defibrillating = 0 + +/obj/item/cybernetic_implant/chest/heart/reviver/emp_act(severity) + if(!owner) + return + if(recharge_time < world.time) + recharge_time = world.time + (2000 / severity) + else + recharge_time += 2000 / severity + + if(prob(30/severity)) + playsound(owner, 'sound/machines/defib_saftyOff.ogg', 50, 1, -1) + spawn(30) + playsound(owner, 'sound/machines/defib_zap.ogg', 50, 1, -1) + owner.heart_attack = 1 + owner.visible_message("[owner] clutches at their chest as if their heart stopped!") \ No newline at end of file diff --git a/code/modules/surgery/surgery_step.dm b/code/modules/surgery/surgery_step.dm index 68d781e9065..2894b3e0663 100644 --- a/code/modules/surgery/surgery_step.dm +++ b/code/modules/surgery/surgery_step.dm @@ -107,6 +107,7 @@ var/obj/item/organ/limb/limb = target.getlimb(limb_type) if(limb) limb.heal_damage(35,0,0) + return ..() /datum/surgery_step/proc/tool_check(mob/user, obj/item/tool) return 1 From d1f6edec01668647ea02e217d3b0bce4f197da48 Mon Sep 17 00:00:00 2001 From: xxalpha Date: Mon, 30 Mar 2015 02:28:21 +0100 Subject: [PATCH 3/6] Tweaked Close surgery step healing amount. --- code/modules/surgery/surgery_step.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/surgery/surgery_step.dm b/code/modules/surgery/surgery_step.dm index 2894b3e0663..19d5eca182c 100644 --- a/code/modules/surgery/surgery_step.dm +++ b/code/modules/surgery/surgery_step.dm @@ -106,7 +106,7 @@ return var/obj/item/organ/limb/limb = target.getlimb(limb_type) if(limb) - limb.heal_damage(35,0,0) + limb.heal_damage(45,0,0) return ..() /datum/surgery_step/proc/tool_check(mob/user, obj/item/tool) From 598e72acfb576ea8d521a59aaaa89ad017bd3a00 Mon Sep 17 00:00:00 2001 From: xxalpha Date: Mon, 30 Mar 2015 02:38:00 +0100 Subject: [PATCH 4/6] Changelog. --- html/changelogs/xxalpha-cyberplus.yml | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 html/changelogs/xxalpha-cyberplus.yml diff --git a/html/changelogs/xxalpha-cyberplus.yml b/html/changelogs/xxalpha-cyberplus.yml new file mode 100644 index 00000000000..369a0fd874d --- /dev/null +++ b/html/changelogs/xxalpha-cyberplus.yml @@ -0,0 +1,9 @@ +author: xxalpha + +delete-after: True + +changes: + - rscadd: "Added Nutriment Pump, Nutriment Pump Plus and Reviver implants." + - tweak: "Added origin technologies to all implants". + - tweak: "The following implants are now much harder to obtain: X-ray, Thermals, Anti-Stun, Nutriment Pump Plus, Reviver." + - tweak: "Cauterizing a surgery wound will now heal some of the damage done by the bonesaw if it was used as part of the same surgery." \ No newline at end of file From c1bf12345e03b20c97506d58912fec83b19a4721 Mon Sep 17 00:00:00 2001 From: xxalpha Date: Mon, 30 Mar 2015 17:52:08 +0100 Subject: [PATCH 5/6] Added ability for Medical HUDs to detect cybernetic implants. --- code/modules/mob/living/carbon/human/examine.dm | 8 +++++++- code/modules/research/designs/medical_designs.dm | 2 +- .../surgery/organs/cybernetic_implants.dm | 16 +++++++++------- html/changelogs/xxalpha-cyberplus.yml | 3 ++- 4 files changed, 19 insertions(+), 10 deletions(-) diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index f20afceaaa3..b51e729b8d0 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -266,7 +266,7 @@ if(istype(user, /mob/living/carbon/human)) var/mob/living/carbon/human/H = user - var/obj/item/cybernetic_implant/eyes/hud/CIH = locate(/obj/item/cybernetic_implant/eyes/hud) in internal_organs + var/obj/item/cybernetic_implant/eyes/hud/CIH = locate(/obj/item/cybernetic_implant/eyes/hud) in H.internal_organs if(istype(H.glasses, /obj/item/clothing/glasses/hud) || CIH) var/perpname = get_face_name(get_id_name("")) if(perpname) @@ -276,6 +276,12 @@ msg += "\[Front photo\] " msg += "\[Side photo\]
" if(istype(H.glasses, /obj/item/clothing/glasses/hud/health) || istype(CIH,/obj/item/cybernetic_implant/eyes/hud/medical)) + var/implant_detect + for(var/obj/item/cybernetic_implant/CI in internal_organs) + implant_detect += "[name] is modified with a [CI.name].
" + if(implant_detect) + msg += "Detected cybernetic modifications:
" + msg += implant_detect if(R) var/health = R.fields["p_stat"] msg += "\[[health]\]" diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index dbe03173e4e..ff9be3891c2 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -182,5 +182,5 @@ datum/design/bluespacebodybag 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) + materials = list("$metal" = 500, "$gold" = 1000, "$uranium" = 1000, "$diamond" = 2000) category = list("Medical Designs") \ No newline at end of file diff --git a/code/modules/surgery/organs/cybernetic_implants.dm b/code/modules/surgery/organs/cybernetic_implants.dm index 855d0372771..202ee1dcfb3 100644 --- a/code/modules/surgery/organs/cybernetic_implants.dm +++ b/code/modules/surgery/organs/cybernetic_implants.dm @@ -39,7 +39,7 @@ owner << "[fluff_message]" /obj/item/cybernetic_implant/eyes/hud/medical - name = "medical hud implant" + name = "Medical HUD implant" desc = "These cybernetic eyes will display a medical HUD over everything you see. Wiggle eyes to control." eye_color = "0ff" implant_color = "#00FFFF" @@ -55,7 +55,7 @@ update_eye_color("You suddenly see health bars floating above people's heads...") /obj/item/cybernetic_implant/eyes/hud/security - name = "security hud implant" + name = "Security HUD implant" desc = "These cybernetic eyes will display a security HUD over everything you see. Wiggle eyes to control." eye_color = "d00" implant_color = "#CC0000" @@ -71,7 +71,7 @@ update_eye_color("Job indicator icons pop up in your vision. That is not a certified surgeon...") /obj/item/cybernetic_implant/eyes/xray - name = "xray implant" + name = "X-ray implant" desc = "These cybernetic eyes will give you X-ray vision. Blinking is futile." eye_color = "000" implant_color = "#000000" @@ -90,7 +90,7 @@ update_eye_color("Your vision is augmented!") /obj/item/cybernetic_implant/eyes/thermals - name = "thermals implant" + name = "Thermals implant" desc = "These cybernetic eyes will give you Thermal vision. Vertical slit pupil included." eye_color = "FC0" implant_color = "#FFCC00" @@ -142,7 +142,7 @@ return stun_amount /obj/item/cybernetic_implant/brain/anti_drop - name = "anti-drop implant" + 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." var/active = 0 var/l_hand_ignore = 0 @@ -354,9 +354,11 @@ else recharge_time += 2000 / severity - if(prob(30/severity)) + if(prob(60/severity)) playsound(owner, 'sound/machines/defib_saftyOff.ogg', 50, 1, -1) spawn(30) playsound(owner, 'sound/machines/defib_zap.ogg', 50, 1, -1) owner.heart_attack = 1 - owner.visible_message("[owner] clutches at their chest as if their heart stopped!") \ No newline at end of file + if(owner.stat == CONSCIOUS) + owner.Weaken(5) + owner.visible_message("[owner] clutches at their chest as if their heart stopped!") \ No newline at end of file diff --git a/html/changelogs/xxalpha-cyberplus.yml b/html/changelogs/xxalpha-cyberplus.yml index 369a0fd874d..e66634d5587 100644 --- a/html/changelogs/xxalpha-cyberplus.yml +++ b/html/changelogs/xxalpha-cyberplus.yml @@ -6,4 +6,5 @@ changes: - rscadd: "Added Nutriment Pump, Nutriment Pump Plus and Reviver implants." - tweak: "Added origin technologies to all implants". - tweak: "The following implants are now much harder to obtain: X-ray, Thermals, Anti-Stun, Nutriment Pump Plus, Reviver." - - tweak: "Cauterizing a surgery wound will now heal some of the damage done by the bonesaw if it was used as part of the same surgery." \ No newline at end of file + - tweak: "Cauterizing a surgery wound will now heal some of the damage done by the bonesaw if it was used as part of the same surgery." + - tweak: "Added ability for Medical HUDs to detect cybernetic implants in humans." \ No newline at end of file From 7ec043a542d0f63a150e9737fa14bf14aa541ecf Mon Sep 17 00:00:00 2001 From: xxalpha Date: Sat, 4 Apr 2015 00:56:06 +0100 Subject: [PATCH 6/6] Added medical hud implant to CMO locker. Added chest implant sprites. --- .../crates_lockers/closets/secure/medical.dm | 1 + .../surgery/organs/cybernetic_implants.dm | 9 +++++++++ icons/obj/surgery.dmi | Bin 12726 -> 12886 bytes 3 files changed, 10 insertions(+) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm index e2db0360125..ca7ccf94c1a 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm @@ -115,6 +115,7 @@ new /obj/item/weapon/storage/belt/medical(src) new /obj/item/device/flash/handheld(src) new /obj/item/weapon/reagent_containers/hypospray/CMO(src) + new /obj/item/cybernetic_implant/eyes/hud/medical(src) return diff --git a/code/modules/surgery/organs/cybernetic_implants.dm b/code/modules/surgery/organs/cybernetic_implants.dm index 202ee1dcfb3..acc621aa7a7 100644 --- a/code/modules/surgery/organs/cybernetic_implants.dm +++ b/code/modules/surgery/organs/cybernetic_implants.dm @@ -256,10 +256,17 @@ desc = "implants for the organs in your torso" icon_state = "chest_implant" +/obj/item/cybernetic_implant/chest/New() + var/icon/overlay = new /icon('icons/obj/surgery.dmi',"chest_implant_overlay") + overlay.ColorTone(implant_color) + overlays |= overlay + ..() + /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" + implant_color = "#F968B5" var/hunger_threshold = NUTRITION_LEVEL_STARVING var/synthesizing = 0 var/nutriment_amount = 30 @@ -290,6 +297,7 @@ 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" + implant_color = "#FF0044" hunger_threshold = NUTRITION_LEVEL_HUNGRY nutriment_amount = 50 poison_amount = 10 @@ -305,6 +313,7 @@ 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 nanites into your bloodstream. A second chance!" icon_state = "chest_implant" + implant_color = "#FF8000" var/defibrillating = 0 var/recharge_time = 0 origin_tech = "materials=7;programming=3;biotech=4" diff --git a/icons/obj/surgery.dmi b/icons/obj/surgery.dmi index c325add6f21caa8c8dc643ebb64a9732ea35287c..aa5259be1aa51edda86e03c9d9cde43be1c87011 100644 GIT binary patch literal 12886 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

17XC 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 R{rYbsa#G5YmExwK{ujq^B)I?p literal 12726 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