diff --git a/code/datums/hud.dm b/code/datums/hud.dm index 39d63400ddb..14e79c51f35 100644 --- a/code/datums/hud.dm +++ b/code/datums/hud.dm @@ -20,6 +20,8 @@ var/datum/atom_hud/huds = list( \ var/list/hud_icons = list() //these will be the indexes for the atom's hud_list /datum/atom_hud/proc/remove_hud_from(var/mob/M) + if(locate(src,M.permanent_huds)) + return for(var/atom/A in hudatoms) remove_from_single_hud(M, A) hudusers -= M diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index 6a4aa3f319f..ab645c61223 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -161,4 +161,5 @@ var/atom/movable/remote_control //Calls relaymove() to whatever it is var/turf/listed_turf = null //the current turf being examined in the stat panel - var/last_movement = 0 // Last world.time the mob actually moved of its own accord. \ No newline at end of file + var/last_movement = 0 // Last world.time the mob actually moved of its own accord. + var/permanent_huds = new /list() \ No newline at end of file diff --git a/code/modules/surgery/eye_cybernetic_implant.dm b/code/modules/surgery/eye_cybernetic_implant.dm new file mode 100644 index 00000000000..31f5e74c552 --- /dev/null +++ b/code/modules/surgery/eye_cybernetic_implant.dm @@ -0,0 +1,31 @@ +/datum/surgery/eye_cybernetic_implant + 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, /datum/surgery_step/fix_eyes, /datum/surgery_step/close) + location = "eyes" + +/datum/surgery_step/cybernetic_implant + accept_any_item = 1 + time = 32 + +/datum/surgery_step/cybernetic_implant/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + if(istype(tool,/obj/item/organ/cybernetic_implant)) + user.visible_message("[user] begins to implant [target] with [tool].") + +/datum/surgery_step/cybernetic_implant/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + if(tool) + if(!istype(tool, /obj/item/organ/cybernetic_implant/eyes)) + user.visible_message("[user] can't seem to fit [tool] in [target]'s [target_zone].") + return 0 + else if(locate(/obj/item/organ/cybernetic_implant/eyes,target.internal_organs)) + user.visible_message("[user] can't seem to add any more implants into [target].") + return 0 + else + user.visible_message("[user] inserts [tool] into [target]'s [target_zone]!") + user.drop_item() + target.internal_organs += tool + tool.loc = target + + var/obj/item/organ/cybernetic_implant/implant = tool + implant.owner = target + implant.function() + return 1 \ No newline at end of file diff --git a/code/modules/surgery/organs/cybernetic_implants.dm b/code/modules/surgery/organs/cybernetic_implants.dm new file mode 100644 index 00000000000..eee16eaac1e --- /dev/null +++ b/code/modules/surgery/organs/cybernetic_implants.dm @@ -0,0 +1,51 @@ +/obj/item/organ/cybernetic_implant + name = "cybernetic implant" + desc = "a state-of-the-art implant that improves a baseline's functionality" + var/mob/owner = null + +/obj/item/organ/cybernetic_implant/proc/function() + return + +/obj/item/organ/cybernetic_implant/eyes + name = "cybernetic eyes" + desc = "artificial photoreceptors with specialized functionality" + icon_state = "hudeye" + var/eye_color = "fff" + +/obj/item/organ/cybernetic_implant/eyes/proc/update_eye_color() + if(istype(owner,/mob/living/carbon/human)) + var/mob/living/carbon/human/HMN = owner + HMN.eye_color = eye_color + HMN.regenerate_icons() + +/obj/item/organ/cybernetic_implant/eyes/medical_hud + name = "medical hud implant" + desc = "These cybernetic eyes will display a permanent medical HUD over everything you see. Wiggle eyes to control." + icon_state = "hudeye" + eye_color = "0ff" + +/obj/item/organ/cybernetic_implant/eyes/medical_hud/function() + if(!owner) + return + + var/datum/atom_hud/H = huds[DATA_HUD_MEDICAL_ADVANCED] + H.add_hud_to(owner) + owner.permanent_huds |= H + + update_eye_color() + +/obj/item/organ/cybernetic_implant/eyes/security_hud + name = "security hud implant" + desc = "These cybernetic eyes will display a permanent security HUD over everything you see. Wiggle eyes to control." + icon_state = "hudeye" + eye_color = "b00" + +/obj/item/organ/cybernetic_implant/eyes/security_hud/function() + if(!owner) + return + + var/datum/atom_hud/H = huds[DATA_HUD_SECURITY_ADVANCED] + H.add_hud_to(owner) + owner.permanent_huds |= H + + update_eye_color() \ No newline at end of file diff --git a/icons/obj/surgery.dmi b/icons/obj/surgery.dmi index 28390abff25..ac54bf1759a 100644 Binary files a/icons/obj/surgery.dmi and b/icons/obj/surgery.dmi differ diff --git a/tgstation.dme b/tgstation.dme index 89df2df7e99..d6acffeeab7 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1382,6 +1382,7 @@ #include "code\modules\surgery\brain_removal.dm" #include "code\modules\surgery\cavity_implant.dm" #include "code\modules\surgery\core_removal.dm" +#include "code\modules\surgery\eye_cybernetic_implant.dm" #include "code\modules\surgery\eye_surgery.dm" #include "code\modules\surgery\gender_reassignment.dm" #include "code\modules\surgery\generic_steps.dm" @@ -1396,6 +1397,7 @@ #include "code\modules\surgery\tools.dm" #include "code\modules\surgery\xenomorph_removal.dm" #include "code\modules\surgery\organs\augments.dm" +#include "code\modules\surgery\organs\cybernetic_implants.dm" #include "code\modules\surgery\organs\helpers.dm" #include "code\modules\surgery\organs\organ.dm" #include "code\modules\telesci\bscrystal.dm"