/obj/item/pinpointer name = "pinpointer" icon = 'icons/obj/item/pinpointer.dmi' icon_state = "pinoff" item_state = "electronic" contained_sprite = TRUE obj_flags = OBJ_FLAG_CONDUCTABLE slot_flags = SLOT_BELT w_class = WEIGHT_CLASS_SMALL throw_speed = 4 throw_range = 20 matter = list(DEFAULT_WALL_MATERIAL = 500) var/obj/item/disk/nuclear/the_disk = null var/active = 0 /obj/item/pinpointer/feedback_hints(mob/user, distance, is_adjacent) . += ..() for(var/obj/structure/machinery/nuclearbomb/bomb in SSmachinery.machinery) if(bomb.timing) . += "Extreme danger. Arming signal detected. Time remaining: [bomb.timeleft]" /obj/item/pinpointer/attack_self() if(!active) active = 1 START_PROCESSING(SSfast_process, src) to_chat(usr, SPAN_NOTICE("You activate the pinpointer.")) else active = 0 STOP_PROCESSING(SSfast_process, src) to_chat(usr, SPAN_NOTICE("You deactivate the pinpointer.")) /obj/item/pinpointer/process() if (active) workdisk() else STOP_PROCESSING(SSfast_process, src) /obj/item/pinpointer/proc/workdisk() ClearOverlays() if(!active) return if(!the_disk) the_disk = locate() if(!the_disk) AddOverlays("pinonnull") return set_dir(get_dir(src,the_disk)) switch(get_dist(src,the_disk)) if(0) AddOverlays("pinondirect") if(1 to 8) AddOverlays("pinonclose") if(9 to 16) AddOverlays("pinonmedium") if(16 to INFINITY) AddOverlays("pinonfar") return TRUE /obj/item/pinpointer/Destroy() active = 0 STOP_PROCESSING(SSfast_process, src) return ..() /obj/item/pinpointer/advpinpointer name = "advanced pinpointer" desc = "A larger version of the normal pinpointer, this unit features a helpful quantum entanglement detection system to locate various objects that do not broadcast a locator signal." var/mode = 0 // Mode 0 locates disk, mode 1 locates coordinates. var/turf/location = null var/obj/target = null /obj/item/pinpointer/advpinpointer/attack_self() if(!active) active = 1 if(mode == 0) workdisk() if(mode == 1) worklocation() if(mode == 2) workobj() START_PROCESSING(SSfast_process, src) to_chat(usr, SPAN_NOTICE("You activate the pinpointer")) else active = 0 icon_state = "pinoff" ClearOverlays() to_chat(usr, SPAN_NOTICE("You deactivate the pinpointer")) /obj/item/pinpointer/advpinpointer/process() switch(mode) if (0) workdisk() if (1) worklocation() if (2) workobj() /obj/item/pinpointer/advpinpointer/proc/worklocation() ClearOverlays() if(!active) STOP_PROCESSING(SSfast_process, src) return if(!location) AddOverlays("pinonnull") return set_dir(get_dir(src,location)) set_z_overlays(location) switch(get_dist(src,location)) if(0) AddOverlays("pinondirect") if(1 to 8) AddOverlays("pinonclose") if(9 to 16) AddOverlays("pinonmedium") if(16 to INFINITY) AddOverlays("pinonfar") /obj/item/pinpointer/advpinpointer/proc/set_z_overlays(var/atom/target) if(AreConnectedZLevels(src.loc.z, target.z)) if(src.loc.z > target.z) AddOverlays("pinzdown") else if(src.loc.z < target.z) AddOverlays("pinzup") else active = 0 if(ismob(loc)) var/mob/holder = loc to_chat(holder, "