From 4b7253befc56a4f094f5b8cfe5351347a4f5f686 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Mon, 21 Dec 2015 23:19:27 -0500 Subject: [PATCH] commit so i can swap branches... please note, anything further on changling may invovle updates to game mode, so another pr. and yes with the brains its jut blocked from prepare_eat() proc --- code/_onclick/hud/action.dm | 3 - .../changeling/powers/augmented_eyesight.dm | 77 ++++- code/game/objects/items/devices/scanners.dm | 8 + .../mob/living/carbon/brain/brain_item.dm | 4 +- code/modules/mob/living/carbon/carbon.dm | 14 +- code/modules/mob/living/carbon/human/human.dm | 2 +- .../living/carbon/human/species/species.dm | 5 +- code/modules/mob/living/life.dm | 44 ++- code/modules/surgery/organs/augments_eyes.dm | 125 +++++++++ .../surgery/organs/augments_internal.dm | 264 ++++++++++++++++++ code/modules/surgery/organs/organ_icon.dm | 2 +- code/modules/surgery/organs/organ_internal.dm | 4 + code/modules/surgery/organs/subtypes/xenos.dm | 20 +- paradise.dme | 2 + 14 files changed, 521 insertions(+), 53 deletions(-) create mode 100644 code/modules/surgery/organs/augments_eyes.dm create mode 100644 code/modules/surgery/organs/augments_internal.dm diff --git a/code/_onclick/hud/action.dm b/code/_onclick/hud/action.dm index 4461e1c8539..f4f96b555e7 100644 --- a/code/_onclick/hud/action.dm +++ b/code/_onclick/hud/action.dm @@ -215,9 +215,6 @@ /datum/action/item_action check_flags = AB_CHECK_RESTRAINED|AB_CHECK_STUNNED|AB_CHECK_LYING|AB_CHECK_ALIVE|AB_CHECK_INSIDE -/datum/action/item_action/CheckRemoval(mob/living/user) - return !(target in user) - /datum/action/item_action/hands_free check_flags = AB_CHECK_ALIVE|AB_CHECK_INSIDE diff --git a/code/game/gamemodes/changeling/powers/augmented_eyesight.dm b/code/game/gamemodes/changeling/powers/augmented_eyesight.dm index d303d022753..cd2419fa1ae 100644 --- a/code/game/gamemodes/changeling/powers/augmented_eyesight.dm +++ b/code/game/gamemodes/changeling/powers/augmented_eyesight.dm @@ -4,18 +4,79 @@ /obj/effect/proc_holder/changeling/augmented_eyesight name = "Augmented Eyesight" desc = "Creates heat receptors in our eyes and dramatically increases light sensing ability." - helptext = "Grants us night vision and thermal vision. It may be toggled on or off." + helptext = "Grants us thermal vision or flash protection. We will become a lot more vulnerable to flash-based devices while thermal vision is active." chemical_cost = 0 dna_cost = 2 //Would be 1 without thermal vision + var/active = 0 //Whether or not vision is enhanced + +/obj/effect/proc_holder/changeling/augmented_eyesight/sting_action(mob/living/carbon/human/user) + if(!istype(user)) + return + if(user.get_int_organ(/obj/item/organ/internal/cyberimp/eyes/thermals/ling)) + user << "Our eyes are protected from flashes." + var/obj/item/organ/internal/cyberimp/eyes/O = new /obj/item/organ/internal/cyberimp/eyes/shield/ling() + O.Insert(user) -/obj/effect/proc_holder/changeling/augmented_eyesight/sting_action(var/mob/user) - if(!user.vision_type) - user << "We feel a minute twitch in our eyes, and darkness creeps away." - user.vision_type = new /datum/vision_override/nightvision/thermals/ling_augmented_eyesight else - user << "Our vision dulls. Shadows gather." - user.vision_type = null + var/obj/item/organ/internal/cyberimp/eyes/O = new /obj/item/organ/internal/cyberimp/eyes/thermals/ling() + O.Insert(user) + return 1 + /obj/effect/proc_holder/changeling/augmented_eyesight/on_refund(mob/user) - user.vision_type = null \ No newline at end of file + var/obj/item/organ/internal/cyberimp/eyes/O = user.get_organ_slot("eye_ling") + if(O) + O.Remove(user) + qdel(O) + + + + + +/obj/item/organ/internal/cyberimp/eyes/shield/ling + name = "protective membranes" + desc = "These variable transparency organic membranes will protect you from welders and flashes and heal your eye damage." + icon_state = "ling_eyeshield" + eye_color = null + implant_overlay = null + origin_tech = "biotech=4" + slot = "eye_ling" + status = ORGAN_ORGANIC + +/obj/item/organ/internal/cyberimp/eyes/shield/ling/on_life() + ..() + if(owner.eye_blind || owner.eye_stat || owner.eye_blurry || (owner.disabilities & BLIND) || (owner.disabilities & NEARSIGHT)) + owner.reagents.add_reagent("oculine", 1) + +/obj/item/organ/internal/cyberimp/eyes/shield/ling/prepare_eat() + var/obj/S = ..() + S.reagents.add.reagent("oculine", 15) + return S + + +/obj/item/organ/internal/cyberimp/eyes/thermals/ling + name = "heat receptors" + desc = "These heat receptors dramatically increases eyes light sensing ability." + icon_state = "ling_thermal" + eye_color = null + implant_overlay = null + origin_tech = "biotech=5;magnets=5" + slot = "eye_ling" + status = ORGAN_ORGANIC + aug_message = "You feel a minute twitch in our eyes, and darkness creeps away." + +/obj/item/organ/internal/cyberimp/eyes/thermals/ling/emp_act(severity) + return + +/obj/item/organ/internal/cyberimp/eyes/thermals/ling/Insert(mob/living/carbon/M, special = 0) + ..() + if(ishuman(owner)) + var/mob/living/carbon/human/H = owner + H.weakeyes = 1 + +/obj/item/organ/internal/cyberimp/eyes/thermals/ling/Remove(mob/living/carbon/M, special = 0) + if(ishuman(owner)) + var/mob/living/carbon/human/H = owner + H.weakeyes = 0 + ..() \ No newline at end of file diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 41297357974..5afaabd00d4 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -245,6 +245,14 @@ REAGENT SCANNER if(H.heart_attack) user.show_message("Subject suffering from heart attack: Apply defibrillator immediately.") user.show_message("\blue Subject's pulse: [H.get_pulse(GETPULSE_TOOL)] bpm.") + var/implant_detect + for(var/obj/item/organ/internal/cyberimp/CI in H.internal_organs) + if(CI.status == ORGAN_ROBOT && !(species && species.name == "Machine")) + implant_detect += "[H.name] is modified with a [CI.name].
" + if(implant_detect) + user.show_message("Detected cybernetic modifications:") + user.show_message("[implant_detect]") + src.add_fingerprint(user) return diff --git a/code/modules/mob/living/carbon/brain/brain_item.dm b/code/modules/mob/living/carbon/brain/brain_item.dm index 733f97df63a..bb7d27b0aaf 100644 --- a/code/modules/mob/living/carbon/brain/brain_item.dm +++ b/code/modules/mob/living/carbon/brain/brain_item.dm @@ -13,11 +13,9 @@ var/mob/living/carbon/brain/brainmob = null organ_tag = "brain" parent_organ = "head" + slot = "brain" vital = 1 -/obj/item/organ/internal/brain/attack_self(mob/user as mob) - return //let's not have players taken out of the round as easily as a click, once you have their brain. - /obj/item/organ/internal/brain/surgeryize() if(!owner) return diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 7ad0adf9eb7..5fbdd068d60 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -738,4 +738,16 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump, handcuffed, legcuffed, back, - wear_mask) \ No newline at end of file + wear_mask) + +/mob/living/carbon/emp_act(severity) + for(var/obj/item/organ/internal/O in internal_organs) + O.emp_act(severity) + ..() + + + /mob/living/carbon/check_eye_prot() + var/number = ..() + for(var/obj/item/organ/internal/cyberimp/eyes/EFP in internal_organs) + number += EFP.flash_protect + return number diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 9a763813f06..a25a7273243 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1100,7 +1100,7 @@ ///eyecheck() ///Returns a number between -1 to 2 /mob/living/carbon/human/eyecheck() - var/number = 0 + var/number = ..() if(istype(src.head, /obj/item/clothing/head)) //are they wearing something on their head var/obj/item/clothing/head/HFP = src.head //if yes gets the flash protection value from that item number += HFP.flash_protect diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index ad225fec69d..3052db0793d 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -159,7 +159,10 @@ for(var/organ in has_organ) var/organ_type = has_organ[organ] H.internal_organs_by_name[organ] = new organ_type(H,1) - internal_organs += new organ + internal_organs += new has_organ[organ] + + for(var/obj/item/organ/internal/I in internal_organs) + I.Insert(src) for(var/name in H.organs_by_name) H.organs |= H.organs_by_name[name] diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index 062a8e3b69e..03682334dae 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -225,31 +225,25 @@ if(A.CheckRemoval(src)) A.Remove(src) for(var/obj/item/I in src) - if(istype(I,/obj/item/clothing/under)) - var/obj/item/clothing/under/U = I - for(var/obj/item/IU in U) - if(istype(IU, /obj/item/clothing/accessory)) - var/obj/item/clothing/accessory/A = IU - if(A.action_button_name) - if(!A.action) - if(A.action_button_is_hands_free) - A.action = new/datum/action/item_action/hands_free - else - A.action = new/datum/action/item_action - A.action.name = A.action_button_name - A.action.target = A - A.action.check_flags &= ~AB_CHECK_INSIDE - A.action.Grant(src) - if(I.action_button_name) - if(!I.action) - if(I.action_button_is_hands_free) - I.action = new/datum/action/item_action/hands_free - else - I.action = new/datum/action/item_action - I.action.name = I.action_button_name - I.action.target = I - I.action.Grant(src) - return + give_action_button(I, 1) + return + +/mob/living/proc/give_action_button(var/obj/item/I, recursive = 0) + if(I.action_button_name) + if(!I.action) + if(istype(I, /obj/item/organ/internal)) + I.action = new/datum/action/organ_action + else if(I.action_button_is_hands_free) + I.action = new/datum/action/item_action/hands_free + else + I.action = new/datum/action/item_action + I.action.name = I.action_button_name + I.action.target = I + I.action.Grant(src) + + if(recursive) + for(var/obj/item/T in I) + give_action_button(I, recursive - 1) /mob/living/update_action_buttons() if(!hud_used) return diff --git a/code/modules/surgery/organs/augments_eyes.dm b/code/modules/surgery/organs/augments_eyes.dm new file mode 100644 index 00000000000..2af447757f2 --- /dev/null +++ b/code/modules/surgery/organs/augments_eyes.dm @@ -0,0 +1,125 @@ +/obj/item/organ/internal/cyberimp/eyes + name = "cybernetic eyes" + desc = "artificial photoreceptors with specialized functionality" + icon_state = "eye_implant" + implant_overlay = "eye_implant_overlay" + slot = "eye_sight" + parent_organ = "eyes" + w_class = 1 + + var/sight_flags = 0 + var/eye_color = "fff" + var/old_eye_color = "fff" + var/flash_protect = 0 + var/aug_message = "Your vision is augmented!" + + + +/obj/item/organ/internal/cyberimp/eyes/Insert(var/mob/living/carbon/M, var/special = 0) + ..() + if(istype(owner, /mob/living/carbon/human) && eye_color) + var/mob/living/carbon/human/HMN = owner + old_eye_color = HMN.eye_color + HMN.eye_color = eye_color + HMN.regenerate_icons() + if(aug_message && !special) + owner << "[aug_message]" + M.sight |= sight_flags + +/obj/item/organ/internal/cyberimp/eyes/Remove(var/mob/living/carbon/M, var/special = 0) + ..() + M.sight ^= sight_flags + if(istype(owner,/mob/living/carbon/human) && eye_color) + var/mob/living/carbon/human/HMN = owner + HMN.eye_color = old_eye_color + HMN.regenerate_icons() + +/obj/item/organ/internal/cyberimp/eyes/on_life() + ..() + owner.sight |= sight_flags + +/obj/item/organ/internal/cyberimp/eyes/emp_act(severity) + if(!owner) + return + if(severity > 1) + if(prob(10 * severity)) + return + var/save_sight = owner.sight + owner.sight &= 0 + owner.disabilities |= BLIND + owner << "Static obfuscates your vision!" + spawn(60 / severity) + if(owner) + owner.sight |= save_sight + owner.disabilities ^= BLIND + + + +/obj/item/organ/internal/cyberimp/eyes/xray + name = "X-ray implant" + desc = "These cybernetic eye implants will give you X-ray vision. Blinking is futile." + eye_color = "000" + implant_color = "#000000" + origin_tech = "materials=6;programming=4;biotech=6;magnets=5" + sight_flags = SEE_MOBS | SEE_OBJS | SEE_TURFS + +/obj/item/organ/internal/cyberimp/eyes/thermals + name = "Thermals implant" + desc = "These cybernetic eye implants will give you Thermal vision. Vertical slit pupil included." + eye_color = "FC0" + implant_color = "#FFCC00" + sight_flags = SEE_MOBS + flash_protect = -1 + origin_tech = "materials=6;programming=4;biotech=5;magnets=5;syndicate=4" + aug_message = "You see prey everywhere you look..." + +// HUD implants +/obj/item/organ/internal/cyberimp/eyes/hud + name = "HUD implant" + desc = "These cybernetic eyes will display a HUD over everything you see. Maybe." + slot = "eye_hud" + var/HUD_type = 0 + +/obj/item/organ/internal/cyberimp/eyes/hud/Insert(var/mob/living/carbon/M, var/special = 0) + ..() + if(HUD_type) + var/datum/atom_hud/H = huds[HUD_type] + H.add_hud_to(M) + M.permanent_huds |= H + +/obj/item/organ/internal/cyberimp/eyes/hud/Remove(var/mob/living/carbon/M, var/special = 0) + ..() + if(HUD_type) + var/datum/atom_hud/H = huds[HUD_type] + M.permanent_huds ^= H + H.remove_hud_from(M) + +/obj/item/organ/internal/cyberimp/eyes/hud/medical + name = "Medical HUD implant" + desc = "These cybernetic eye implants will display a medical HUD over everything you see." + eye_color = "0ff" + implant_color = "#00FFFF" + origin_tech = "materials=4;programming=3;biotech=4" + aug_message = "You suddenly see health bars floating above people's heads..." + HUD_type = DATA_HUD_MEDICAL_ADVANCED + +/obj/item/organ/internal/cyberimp/eyes/hud/security + name = "Security HUD implant" + desc = "These cybernetic eye implants will display a security HUD over everything you see." + eye_color = "d00" + implant_color = "#CC0000" + origin_tech = "materials=4;programming=4;biotech=3;combat=1" + aug_message = "Job indicator icons pop up in your vision. That is not a certified surgeon..." + HUD_type = DATA_HUD_SECURITY_ADVANCED + +// Welding shield implant +/obj/item/organ/internal/cyberimp/eyes/shield + name = "welding shield implant" + desc = "These reactive micro-shields will protect you from welders and flashes without obscuring your vision." + slot = "eye_shield" + origin_tech = "materials=4;biotech=3" + implant_color = "#101010" + flash_protect = 2 + // Welding with thermals will still hurt your eyes a bit. +/obj/item/organ/internal/cyberimp/eyes/shield/emp_act(severity) + return \ No newline at end of file diff --git a/code/modules/surgery/organs/augments_internal.dm b/code/modules/surgery/organs/augments_internal.dm new file mode 100644 index 00000000000..bff7e2ed3ff --- /dev/null +++ b/code/modules/surgery/organs/augments_internal.dm @@ -0,0 +1,264 @@ +//note i am putting External in robolimbs. + +#define STUN_SET_AMOUNT 2 + +/obj/item/organ/internal/cyberimp + name = "cybernetic implant" + desc = "a state-of-the-art implant that improves a baseline's functionality" + status = ORGAN_ROBOT + var/implant_color = "#FFFFFF" + var/implant_overlay + +/obj/item/organ/internal/cyberimp/New(var/mob/M = null) + if(iscarbon(M)) + src.Insert(M) + if(implant_overlay) + var/image/overlay = new /image(icon, implant_overlay) + overlay.color = implant_color + overlays |= overlay + return ..() + + + +//[[[[BRAIN]]]] + +/obj/item/organ/internal/cyberimp/brain + name = "cybernetic brain implant" + desc = "injectors of extra sub-routines for the brain" + icon_state = "brain_implant" + implant_overlay = "brain_implant_overlay" + parent_organ = "head" + +/obj/item/organ/internal/cyberimp/brain/emp_act(severity) + if(!owner) + return + var/stun_amount = 5 + (severity-1 ? 0 : 5) + owner.Stun(stun_amount) + owner << "Your body seizes up!" + return stun_amount + + +/obj/item/organ/internal/cyberimp/brain/anti_drop + 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 + var/r_hand_ignore = 0 + var/obj/item/l_hand_obj = null + var/obj/item/r_hand_obj = null + implant_color = "#DE7E00" + slot = "brain_antidrop" + origin_tech = "materials=5;programming=4;biotech=4" + organ_action_name = "Toggle Anti-Drop" + +/obj/item/organ/internal/cyberimp/brain/anti_drop/ui_action_click() + active = !active + if(active) + l_hand_obj = owner.l_hand + r_hand_obj = owner.r_hand + if(l_hand_obj) + if(owner.l_hand.flags & NODROP) + l_hand_ignore = 1 + else + owner.l_hand.flags |= NODROP + l_hand_ignore = 0 + + if(r_hand_obj) + if(owner.r_hand.flags & NODROP) + r_hand_ignore = 1 + else + owner.r_hand.flags |= NODROP + r_hand_ignore = 0 + + if(!l_hand_obj && !r_hand_obj) + owner << "You are not holding any items, your hands relax..." + active = 0 + else + var/msg = 0 + msg += !l_hand_ignore && l_hand_obj ? 1 : 0 + msg += !r_hand_ignore && r_hand_obj ? 2 : 0 + switch(msg) + if(1) + owner << "Your left hand's grip tightens." + if(2) + owner << "Your right hand's grip tightens." + if(3) + owner << "Both of your hand's grips tighten." + else + release_items() + owner << "Your hands relax..." + l_hand_obj = null + r_hand_obj = null + +/obj/item/organ/internal/cyberimp/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 + var/obj/item/R_item = owner.r_hand + + release_items() + ..() + if(L_item) + A = pick(oview(range)) + L_item.throw_at(A, range, 2) + owner << "Your left arm spasms and throws the [L_item.name]!" + if(R_item) + A = pick(oview(range)) + R_item.throw_at(A, range, 2) + owner << "Your right arm spasms and throws the [R_item.name]!" + +/obj/item/organ/internal/cyberimp/brain/anti_drop/proc/release_items() + if(!l_hand_ignore && l_hand_obj in owner.contents) + l_hand_obj.flags ^= NODROP + if(!r_hand_ignore && r_hand_obj in owner.contents) + r_hand_obj.flags ^= NODROP + +/obj/item/organ/internal/cyberimp/brain/anti_drop/Remove(var/mob/living/carbon/M, special = 0) + ..() + if(active) + ui_action_click() + + +/obj/item/organ/internal/cyberimp/brain/anti_stun + 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" + slot = "brain_antistun" + origin_tech = "materials=6;programming=4;biotech=5" + +/obj/item/organ/internal/cyberimp/brain/anti_stun/on_life() + ..() + if(crit_fail) + return + if(owner.stunned > STUN_SET_AMOUNT) + owner.stunned = STUN_SET_AMOUNT + if(owner.weakened > STUN_SET_AMOUNT) + owner.weakened = STUN_SET_AMOUNT + +/obj/item/organ/internal/cyberimp/brain/anti_stun/emp_act(severity) + if(crit_fail) + return + crit_fail = 1 + spawn(90 / severity) + crit_fail = 0 + +//[[[[CHEST]]]] +/obj/item/organ/internal/cyberimp/chest + name = "cybernetic torso implant" + desc = "implants for the organs in your torso" + icon_state = "chest_implant" + implant_overlay = "chest_implant_overlay" + parent_organ = "chest" + +/obj/item/organ/internal/cyberimp/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 = "#00AA00" + var/hunger_threshold = NUTRITION_LEVEL_STARVING + var/synthesizing = 0 + var/poison_amount = 5 + slot = "stomach" + origin_tech = "materials=5;programming=3;biotech=4" + +/obj/item/organ/internal/cyberimp/chest/nutriment/on_life() + if(synthesizing) + return + if(owner.stat == DEAD) + return + if(owner.nutrition <= hunger_threshold) + synthesizing = 1 + owner << "You feel less hungry..." + owner.nutrition += 50 + spawn(50) + synthesizing = 0 + +/obj/item/organ/internal/cyberimp/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/organ/internal/cyberimp/chest/nutriment/plus + name = "Nutriment pump implant PLUS" + desc = "This implant will synthesize and pump into your bloodstream a small amount of nutriment when you are hungry." + icon_state = "chest_implant" + implant_color = "#006607" + hunger_threshold = NUTRITION_LEVEL_HUNGRY + poison_amount = 10 + origin_tech = "materials=5;programming=3;biotech=5" + +/obj/item/organ/internal/cyberimp/chest/reviver + name = "Reviver implant" + desc = "This implant will attempt to revive you if you lose consciousness. For the faint of heart!" + icon_state = "chest_implant" + implant_color = "#AD0000" + origin_tech = "materials=6;programming=3;biotech=6;syndicate=4" + slot = "heartdrive" + var/revive_cost = 0 + var/reviving = 0 + var/cooldown = 0 + +/obj/item/organ/internal/cyberimp/chest/reviver/on_life() + if(reviving) + if(owner.stat == UNCONSCIOUS) + spawn(30) + if(prob(90) && owner.getOxyLoss()) + owner.adjustOxyLoss(-3) + revive_cost += 5 + if(prob(75) && owner.getBruteLoss()) + owner.adjustBruteLoss(-1) + revive_cost += 20 + if(prob(75) && owner.getFireLoss()) + owner.adjustFireLoss(-1) + revive_cost += 20 + if(prob(40) && owner.getToxLoss()) + owner.adjustToxLoss(-1) + revive_cost += 50 + else + cooldown = revive_cost + world.time + reviving = 0 + return + if(cooldown > world.time) + return + if(owner.stat != UNCONSCIOUS) + return + if(owner.suiciding) + return + revive_cost = 0 + reviving = 1 + +/obj/item/organ/internal/cyberimp/chest/reviver/emp_act(severity) + if(!owner) + return + if(reviving) + revive_cost += 200 + else + cooldown += 200 + if(istype(owner, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = owner + if(H.stat != DEAD && prob(50 / severity)) + H.heart_attack = 1 + spawn(600 / severity) + H.heart_attack = 0 + if(H.stat == CONSCIOUS) + H << "You feel your heart beating again!" + +//BOX O' IMPLANTS +/obj/item/weapon/storage/box/cyber_implants + name = "boxed cybernetic implants" + desc = "A sleek, sturdy box." + icon_state = "cyber_implants" + var/list/boxed = list(/obj/item/organ/internal/cyberimp/eyes/xray,/obj/item/organ/internal/cyberimp/eyes/thermals, + /obj/item/organ/internal/cyberimp/brain/anti_stun, /obj/item/organ/internal/cyberimp/chest/reviver) + var/amount = 5 + +/obj/item/weapon/storage/box/cyber_implants/New() + ..() + var/i + var/implant + for(i = 0, i < amount, i++) + implant = pick(boxed) + new implant(src) \ No newline at end of file diff --git a/code/modules/surgery/organs/organ_icon.dm b/code/modules/surgery/organs/organ_icon.dm index 94b0aa5b95c..dd10ec7920b 100644 --- a/code/modules/surgery/organs/organ_icon.dm +++ b/code/modules/surgery/organs/organ_icon.dm @@ -33,7 +33,7 @@ var/global/list/limb_icon_cache = list() /obj/item/organ/external/head/sync_colour_to_human(var/mob/living/carbon/human/human) ..() - var/obj/item/organ/internal/eyes/eyes = owner.internal_organs_by_name["eyes"] + var/obj/item/organ/internal/eyes/eyes = owner.get_int_organ("eyes")//owner.internal_organs_by_name["eyes"] if(eyes) eyes.update_colour() /obj/item/organ/external/head/removed() diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm index 5a26ed82447..b6575e970cd 100644 --- a/code/modules/surgery/organs/organ_internal.dm +++ b/code/modules/surgery/organs/organ_internal.dm @@ -78,6 +78,10 @@ icon_state = "appendix" icon = 'icons/obj/surgery.dmi' +/obj/item/weapon/reagent_containers/food/snacks/organ/New() + + ..() + reagents.add_reagent("nutriment",5) diff --git a/code/modules/surgery/organs/subtypes/xenos.dm b/code/modules/surgery/organs/subtypes/xenos.dm index 30f5f9af02f..8863e79455f 100644 --- a/code/modules/surgery/organs/subtypes/xenos.dm +++ b/code/modules/surgery/organs/subtypes/xenos.dm @@ -30,7 +30,7 @@ //XENOMORPH ORGANS /obj/item/organ/internal/xenos/plasmavessel - name = "plasma vessel" + name = "xeno plasma vessel" icon_state = "plasma" origin_tech = "biotech=5;plasmatech=2" w_class = 3 @@ -50,7 +50,7 @@ return S /obj/item/organ/internal/xenos/plasmavessel/queen - name = "bloated plasma vessel" + name = "bloated xeno plasma vessel" icon_state = "plasma_large" origin_tech = "biotech=6;plasma=3" stored_plasma = 200 @@ -58,7 +58,7 @@ plasma_rate = 25 /obj/item/organ/internal/xenos/plasmavessel/drone - name = "large plasma vessel" + name = "large xeno plasma vessel" icon_state = "plasma_large" stored_plasma = 200 max_plasma = 500 @@ -68,14 +68,14 @@ max_plasma = 250 /obj/item/organ/internal/xenos/plasmavessel/hunter - name = "small plasma vessel" + name = "small xeno plasma vessel" icon_state = "plasma_tiny" stored_plasma = 100 max_plasma = 150 alien_powers = list(/mob/living/carbon/alien/humanoid/verb/plant) /obj/item/organ/internal/xenos/plasmavessel/larva - name = "tiny plasma vessel" + name = "tiny xeno plasma vessel" icon_state = "plasma_tiny" max_plasma = 100 @@ -109,7 +109,7 @@ /obj/item/organ/internal/xenos/acidgland - name = "acid gland" + name = "xeno acid gland" parent_organ = "head" slot = "acidgland" origin_tech = "biotech=5;materials=2;combat=2" @@ -117,7 +117,7 @@ /obj/item/organ/internal/xenos/hivenode - name = "hive node" + name = "xeno hive node" parent_organ = "head" slot = "hivenode" origin_tech = "biotech=5;magnets=4;bluespace=3" @@ -133,7 +133,7 @@ ..() /obj/item/organ/internal/xenos/neurotoxin - name = "neurotoxin gland" + name = "xeno neurotoxin gland" icon_state = "neurotox" parent_organ = "head" slot = "neurotoxingland" @@ -141,7 +141,7 @@ alien_powers = list(/mob/living/carbon/alien/humanoid/proc/neurotoxin) /obj/item/organ/internal/xenos/resinspinner - name = "resin spinner" + name = "xeno resin organ"//...there tiger.... parent_organ = "head" icon_state = "stomach-x" slot = "resinspinner" @@ -149,7 +149,7 @@ alien_powers = list(/mob/living/carbon/alien/humanoid/proc/resin) /obj/item/organ/internal/xenos/eggsac - name = "egg sac" + name = "xeno egg sac" icon_state = "eggsac" parent_organ = "groin" slot = "eggsac" diff --git a/paradise.dme b/paradise.dme index 948894c7d8f..07c7f4e7ed2 100644 --- a/paradise.dme +++ b/paradise.dme @@ -1837,6 +1837,8 @@ #include "code\modules\surgery\slime.dm" #include "code\modules\surgery\surgery.dm" #include "code\modules\surgery\tools.dm" +#include "code\modules\surgery\organs\augments_eyes.dm" +#include "code\modules\surgery\organs\augments_internal.dm" #include "code\modules\surgery\organs\blood.dm" #include "code\modules\surgery\organs\body_egg.dm" #include "code\modules\surgery\organs\helpers.dm"