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