#define RAD_LEVEL_NORMAL 10 #define RAD_LEVEL_MODERATE 30 #define RAD_LEVEL_HIGH 75 #define RAD_LEVEL_VERY_HIGH 125 #define RAD_LEVEL_CRITICAL 200 /obj/item/device/geiger_counter //DISCLAIMER: I know nothing about how real-life Geiger counters work. This will not be realistic. ~Xhuis name = "geiger counter" desc = "A handheld device used for detecting and measuring radiation pulses." icon_state = "geiger_off" item_state = "multitool" w_class = WEIGHT_CLASS_SMALL slot_flags = SLOT_BELT materials = list(MAT_METAL = 150, MAT_GLASS = 150) var/scanning = 0 var/radiation_count = 0 var/emagged = 0 /obj/item/device/geiger_counter/New() ..() START_PROCESSING(SSobj, src) /obj/item/device/geiger_counter/Destroy() STOP_PROCESSING(SSobj, src) return ..() /obj/item/device/geiger_counter/process() if(emagged) if(radiation_count < 20) radiation_count++ return 0 if(radiation_count > 0) radiation_count-- update_icon() /obj/item/device/geiger_counter/examine(mob/user) ..() if(!scanning) return 1 to_chat(user, "Alt-click it to clear stored radiation levels.") if(emagged) to_chat(user, "The display seems to be incomprehensible.") return 1 switch(radiation_count) if(-INFINITY to RAD_LEVEL_NORMAL) to_chat(user, "Ambient radiation level count reports that all is well.") if(RAD_LEVEL_NORMAL + 1 to RAD_LEVEL_MODERATE) to_chat(user, "Ambient radiation levels slightly above average.") if(RAD_LEVEL_MODERATE + 1 to RAD_LEVEL_HIGH) to_chat(user, "Ambient radiation levels above average.") if(RAD_LEVEL_HIGH + 1 to RAD_LEVEL_VERY_HIGH) to_chat(user, "Ambient radiation levels highly above average.") if(RAD_LEVEL_VERY_HIGH + 1 to RAD_LEVEL_CRITICAL) to_chat(user, "Ambient radiation levels nearing critical level.") if(RAD_LEVEL_CRITICAL + 1 to INFINITY) to_chat(user, "Ambient radiation levels above critical level!") /obj/item/device/geiger_counter/update_icon() if(!scanning) icon_state = "geiger_off" return 1 if(emagged) icon_state = "geiger_on_emag" return 1 switch(radiation_count) if(-INFINITY to RAD_LEVEL_NORMAL) icon_state = "geiger_on_1" if(RAD_LEVEL_NORMAL + 1 to RAD_LEVEL_MODERATE) icon_state = "geiger_on_2" if(RAD_LEVEL_MODERATE + 1 to RAD_LEVEL_HIGH) icon_state = "geiger_on_3" if(RAD_LEVEL_HIGH + 1 to RAD_LEVEL_VERY_HIGH) icon_state = "geiger_on_4" if(RAD_LEVEL_VERY_HIGH + 1 to RAD_LEVEL_CRITICAL) icon_state = "geiger_on_4" if(RAD_LEVEL_CRITICAL + 1 to INFINITY) icon_state = "geiger_on_5" ..() /obj/item/device/geiger_counter/rad_act(amount) if(!amount && scanning) return 0 if(emagged) amount = Clamp(amount, 0, 25) //Emagged geiger counters can only accept 25 radiation at a time radiation_count += amount if(isliving(loc)) var/mob/living/M = loc if(!emagged) to_chat(M, "\icon[src] RADIATION PULSE DETECTED.") to_chat(M, "\icon[src] Severity: [amount]") else to_chat(M, "\icon[src] !@%$AT!(N P!LS! D/TEC?ED.") to_chat(M, "\icon[src] &!F2rity: <=[amount]#1") update_icon() /obj/item/device/geiger_counter/attack_self(mob/user) scanning = !scanning update_icon() to_chat(user, "\icon[src] You switch [scanning ? "on" : "off"] [src].") /obj/item/device/geiger_counter/attack(mob/living/M, mob/user) if(user.a_intent == INTENT_HELP) if(!emagged) user.visible_message("[user] scans [M] with [src].", "You scan [M]'s radiation levels with [src]...") if(!M.radiation) to_chat(user, "\icon[src] Radiation levels within normal boundaries.") return 1 else to_chat(user, "\icon[src] Subject is irradiated. Radiation levels: [M.radiation].") return 1 else user.visible_message("[user] scans [M] with [src].", "You project [src]'s stored radiation into [M]'s body!") M.rad_act(radiation_count) radiation_count = 0 return 1 ..() /obj/item/device/geiger_counter/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/weapon/screwdriver) && emagged) if(scanning) to_chat(user, "Turn off [src] before you perform this action!") return 0 user.visible_message("[user] unscrews [src]'s maintenance panel and begins fiddling with its innards...", "You begin resetting [src]...") playsound(user, I.usesound, 50, 1) if(!do_after(user, 40*I.toolspeed, target = user)) return 0 user.visible_message("[user] refastens [src]'s maintenance panel!", "You reset [src] to its factory settings!") playsound(user, 'sound/items/Screwdriver2.ogg', 50, 1) emagged = 0 radiation_count = 0 update_icon() return 1 else return ..() /obj/item/device/geiger_counter/AltClick(mob/living/user) if(!istype(user) || user.incapacitated()) return ..() if(!scanning) to_chat(usr, "[src] must be on to reset its radiation level!") return 0 radiation_count = 0 to_chat(usr, "You flush [src]'s radiation counts, resetting it to normal.") update_icon() /obj/item/device/geiger_counter/emag_act(mob/user) if(!emagged) if(scanning) to_chat(user, "Turn off [src] before you perform this action!") return 0 to_chat(user, "You override [src]'s radiation storing protocols. It will now generate small doses of radiation, and stored rads are now projected into creatures you scan.") emagged = 1 #undef RAD_LEVEL_NORMAL #undef RAD_LEVEL_MODERATE #undef RAD_LEVEL_HIGH #undef RAD_LEVEL_VERY_HIGH #undef RAD_LEVEL_CRITICAL