/datum/event/camera_damage/start() ..() var/obj/structure/machinery/camera/C = acquire_random_camera() if(!C) return var/severity_range = 0 switch(severity) if(EVENT_LEVEL_MUNDANE) severity_range = 0 if(EVENT_LEVEL_MODERATE) severity_range = 7 if(EVENT_LEVEL_MAJOR) severity_range = 15 for(var/obj/structure/machinery/camera/cam in range(severity_range,C)) if(is_valid_camera(cam)) if(prob(2*severity)) cam.destroy() else cam.wires.cut(WIRE_POWER, src) if(prob(5*severity)) cam.wires.cut(WIRE_ALARM, src) /datum/event/camera_damage/proc/acquire_random_camera(var/remaining_attempts = 5) if(!GLOB.cameranet.cameras.len) return if(!remaining_attempts) return var/obj/structure/machinery/camera/C = pick(GLOB.cameranet.cameras) if(is_valid_camera(C)) return C return acquire_random_camera(remaining_attempts-1) /datum/event/camera_damage/proc/is_valid_camera(var/obj/structure/machinery/camera/C) // Only return a functional camera, not installed in a silicon, and that exists somewhere players have access var/turf/T = get_turf(C) return T && C.can_use() && !istype(C.loc, /mob/living/silicon) && is_station_level(T.z)