// //Robotic Component Analyzer, basically a health analyzer for robots // /obj/item/robotanalyzer name = "cyborg analyzer" icon = 'icons/obj/item/scanner.dmi' icon_state = "robotanalyzer" // Reuses the basic health analyzer inhands. item_state = "healthanalyzer" contained_sprite = TRUE desc = "A hand-held scanner able to diagnose robotic injuries." obj_flags = OBJ_FLAG_CONDUCTABLE slot_flags = SLOT_BELT throwforce = 3 w_class = WEIGHT_CLASS_SMALL throw_speed = 5 throw_range = 10 origin_tech = list(TECH_MAGNET = 2, TECH_BIO = 1, TECH_ENGINEERING = 2) matter = list(DEFAULT_WALL_MATERIAL = 500, MATERIAL_GLASS = 200) /obj/item/robotanalyzer/attack(mob/living/target_mob, mob/living/user, target_zone) robotic_analyze_mob(target_mob, user) add_fingerprint(user) /proc/robotic_analyze_mob(var/mob/living/M, var/mob/living/user, var/just_scan = FALSE) if(!just_scan) user.visible_message(SPAN_NOTICE("\The [user] has analyzed \the [M]'s components."), SPAN_NOTICE("You have analyzed \the [M]'s components.")) var/scan_type if(isrobot(M)) scan_type = "robot" else if(ishuman(M)) scan_type = "prosthetics" else to_chat(user, SPAN_WARNING("You can't analyze non-robotic things!")) return switch(scan_type) if("robot") robot_scan(user, M) if("prosthetics") prosthetics_scan(user, M) /proc/robot_scan(mob/user, mob/living/silicon/robot/M) var/BU = M.getFireLoss() > 50 ? "[get_robot_severity(M.getFireLoss())]" : get_robot_severity(M.getFireLoss()) var/BR = M.getBruteLoss() > 50 ? "[get_robot_severity(M.getBruteLoss())]" : get_robot_severity(M.getBruteLoss()) to_chat(user, SPAN_NOTICE("Analyzing Results for [M]:")) to_chat(user, SPAN_NOTICE("Overall Status: [M.stat > 1 ? "fully disabled" : "[M.health - M.getHalLoss()]% functional"]")) to_chat(user, "Key: Electronics/Physical Damage") to_chat(user, "Damage Specifics: [BU] - [BR]") if(M.tod && M.stat == DEAD) to_chat(user, SPAN_NOTICE("Time of Disable: [M.tod]")) var/mob/living/silicon/robot/H = M var/list/damaged = H.get_damaged_components(1, 1, 1) to_chat(user, SPAN_NOTICE("Localized Damage:")) if(length(damaged) > 0) for(var/datum/robot_component/org in damaged) user.show_message(SPAN_NOTICE("\t [capitalize(org.name)]: [(org.installed == -1) ? SPAN_WARNING("DESTROYED") :""]\ [(org.electronics_damage > 0) ? "[org.electronics_damage]" : 0] - [(org.brute_damage > 0) ? SPAN_WARNING("[org.brute_damage]") :0] - \ [(org.toggled) ? "Toggled ON" : SPAN_WARNING("Toggled OFF")] - \ [(org.powered) ? "Power ON" : SPAN_WARNING("Power OFF")]"),1) else to_chat(user, SPAN_NOTICE("Components are OK.")) if(H.emagged && prob(5)) to_chat(user, SPAN_WARNING("ERROR: INTERNAL SYSTEMS COMPROMISED")) to_chat(user, SPAN_NOTICE("Operating Temperature: [M.bodytemperature-T0C]°C ([M.bodytemperature*1.8-459.67]°F)")) /proc/prosthetics_scan(mob/user, mob/living/carbon/human/H) to_chat(user, SPAN_NOTICE("Analyzing Results for \the [H]:")) if(H.stat == DEAD) to_chat(user, SPAN_DANGER("No neural coherence detected.")) to_chat(user, "Key: Electronics/Wiring") var/obj/item/organ/internal/machine/power_core/IC = H.internal_organs_by_name[BP_CELL] if(IC) to_chat(user, SPAN_NOTICE("Cell charge: [IC.percent()] %")) else to_chat(user, SPAN_NOTICE("Cell charge: ERROR - Cell not present")) to_chat(user, SPAN_NOTICE("External prosthetics:")) var/organ_found if(length(H.internal_organs)) for(var/obj/item/organ/external/E in H.organs) if(!(E.status & (ORGAN_ROBOT || ORGAN_ASSISTED))) continue organ_found = TRUE to_chat(user, "[E.name]: [get_robot_severity(E.brute_dam)] [get_robot_severity(E.burn_dam)]") if(!organ_found) to_chat(user, SPAN_NOTICE("No prosthetics located.")) to_chat(user, "