//////////////////////////////// //// Resleeving implant //// for both organic and synthetic crew //////////////////////////////// //The backup implant itself /obj/item/implant/backup name = "backup implant" desc = "A mindstate backup implant that occasionally stores a copy of one's mind on a central server for backup purposes." catalogue_data = list(/datum/category_item/catalogue/information/organization/vey_med, /datum/category_item/catalogue/technology/resleeving) icon = 'icons/vore/custom_items_vr.dmi' icon_state = "backup_implant" known_implant = TRUE // Resleeving database this machine interacts with. Blank for default database // Needs a matching /datum/transcore_db with key defined in code var/db_key var/datum/transcore_db/our_db // These persist all round and are never destroyed, just keep a hard ref /obj/item/implant/backup/get_data() var/dat = {" Implant Specifications:
Name: [using_map.company_name] Employee Backup Implant
Life: ~8 hours.
Important Notes: Due to the sensitive nature of the implant, it is programmed to dissolve into harmless bio-material after 24 hours, to prevent unforseen issues with poorly maintained implants

Implant Details:
Function: Contains a small swarm of nanobots that perform neuron scanning to create mind-backups.
Special Features: Will allow restoring of backups during the 8-hour period it is active.
Integrity: Generally very survivable. Susceptible to being destroyed by acid."} return dat /obj/item/implant/backup/New(newloc, db_key) . = ..() src.db_key = db_key /obj/item/implant/backup/Initialize() . = ..() our_db = SStranscore.db_by_key(db_key) /obj/item/implant/backup/Destroy() our_db.implants -= src return ..() /obj/item/implant/backup/post_implant(var/mob/living/carbon/human/H) if(istype(H)) BITSET(H.hud_updateflag, BACKUP_HUD) our_db.implants |= src return 1 //New, modern implanter instead of old style implanter. /obj/item/backup_implanter name = "backup implanter" desc = "After discovering that Nanotrasen was just re-using the same implanters over and over again on organics, leading to cross-contamination, Vey-Medical designed this self-cleaning model. Holds four backup implants at a time." catalogue_data = list(/datum/category_item/catalogue/information/organization/vey_med, /datum/category_item/catalogue/technology/resleeving) icon = 'icons/obj/device_alt.dmi' icon_state = "bimplant" item_state = "syringe_0" throw_speed = 1 throw_range = 5 w_class = ITEMSIZE_SMALL matter = list(MAT_STEEL = 2000, MAT_GLASS = 2000) var/list/obj/item/implant/backup/imps = list() var/max_implants = 4 //Iconstates need to exist due to the update proc! var/db_key // To give to the baby implants /obj/item/backup_implanter/New() ..() for(var/i = 1 to max_implants) var/obj/item/implant/backup/imp = new(src, db_key) imps |= imp imp.germ_level = 0 update() /obj/item/backup_implanter/proc/update() icon_state = "[initial(icon_state)][imps.len]" germ_level = 0 /obj/item/backup_implanter/attack_self(mob/user as mob) if(!istype(user)) return if(imps.len) to_chat(user, span_notice("You eject a backup implant.")) var/obj/item/implant/backup/imp = imps[imps.len] imp.forceMove(get_turf(user)) imps -= imp user.put_in_any_hand_if_possible(imp) update() else to_chat(user, span_warning("\The [src] is empty.")) return /obj/item/backup_implanter/attackby(obj/W, mob/user) if(istype(W,/obj/item/implant/backup)) if(imps.len < max_implants) user.unEquip(W) imps |= W W.germ_level = 0 W.forceMove(src) update() to_chat(user, span_notice("You load \the [W] into \the [src].")) else to_chat(user, span_warning("\The [src] is already full!")) /obj/item/backup_implanter/attack(mob/M as mob, mob/user as mob) if (!istype(M, /mob/living/carbon)) return if (user && imps.len) M.visible_message(span_notice("[user] is injecting a backup implant into [M].")) user.setClickCooldown(DEFAULT_QUICK_COOLDOWN) user.do_attack_animation(M) var/turf/T1 = get_turf(M) if (T1 && ((M == user) || do_after(user, 5 SECONDS, M))) if(user && M && (get_turf(M) == T1) && src && src.imps.len) M.visible_message(span_notice("[M] has been backup implanted by [user].")) var/obj/item/implant/backup/imp = imps[imps.len] if(imp.handle_implant(M,user.zone_sel.selecting)) imp.post_implant(M) imps -= imp add_attack_logs(user,M,"Implanted backup implant") update() //The glass case for the implant /obj/item/implantcase/backup name = "glass case - 'backup'" desc = "A case containing a backup implant." icon_state = "implantcase-b" /obj/item/implantcase/backup/New() src.imp = new /obj/item/implant/backup(src) ..() return //The box of backup implants /obj/item/storage/box/backup_kit name = "backup implant kit" desc = "Box of stuff used to implant backup implants." icon_state = "implant" item_state_slots = list(slot_r_hand_str = "syringe_kit", slot_l_hand_str = "syringe_kit") /obj/item/storage/box/backup_kit/New() ..() for(var/i = 1 to 7) new /obj/item/implantcase/backup(src) new /obj/item/implanter(src) /* /obj/item/implant/backup/full name = "khi backup implant" desc = "A normal KHI wireless cortical stack with neutrino and QE transmission for constant-stream consciousness upload." */