/obj/machinery/camera name = "security camera" desc = "It's used to monitor rooms." icon = 'icons/obj/monitors.dmi' icon_state = "camera" use_power = 2 idle_power_usage = 5 active_power_usage = 10 layer = 5 var/list/network = list("SS13") var/c_tag = null var/c_tag_order = 999 var/status = 1.0 anchored = 1.0 var/panel_open = 0 // 0 = Closed / 1 = Open var/invuln = null var/bugged = 0 var/obj/item/weapon/camera_assembly/assembly = null // WIRES var/wires = 63 // 0b111111 var/list/IndexToFlag = list() var/list/IndexToWireColor = list() var/list/WireColorToIndex = list() var/list/WireColorToFlag = list() //OTHER var/view_range = 7 var/short_range = 2 var/light_disabled = 0 var/alarm_on = 0 var/busy = 0 /obj/machinery/camera/New() WireColorToFlag = randomCameraWires() assembly = new(src) assembly.state = 4 /* // Use this to look for cameras that have the same c_tag. for(var/obj/machinery/camera/C in cameranet.cameras) var/list/tempnetwork = C.network&src.network if(C != src && C.c_tag == src.c_tag && tempnetwork.len) world.log << "[src.c_tag] [src.x] [src.y] [src.z] conflicts with [C.c_tag] [C.x] [C.y] [C.z]" */ if(!src.network || src.network.len < 1) if(loc) error("[src.name] in [get_area(src)] (x:[src.x] y:[src.y] z:[src.z] has errored. [src.network?"Empty network list":"Null network list"]") else error("[src.name] in [get_area(src)]has errored. [src.network?"Empty network list":"Null network list"]") ASSERT(src.network) ASSERT(src.network.len > 0) ..() /obj/machinery/camera/emp_act(severity) if(!isEmpProof()) if(prob(100/severity)) icon_state = "[initial(icon_state)]emp" var/list/previous_network = network network = list() cameranet.removeCamera(src) stat |= EMPED SetLuminosity(0) triggerCameraAlarm() spawn(900) network = previous_network icon_state = initial(icon_state) stat &= ~EMPED cancelCameraAlarm() if(can_use()) cameranet.addCamera(src) for(var/mob/O in mob_list) if (istype(O.machine, /obj/machinery/computer/security)) var/obj/machinery/computer/security/S = O.machine if (S.current == src) O.unset_machine() O.reset_view(null) O << "The screen bursts into static." ..() /obj/machinery/camera/ex_act(severity) if(src.invuln) return else ..(severity) return /obj/machinery/camera/blob_act() return /obj/machinery/camera/proc/setViewRange(var/num = 7) src.view_range = num cameranet.updateVisibility(src, 0) /obj/machinery/camera/proc/shock(var/mob/living/user) if(!istype(user)) return user.electrocute_act(10, src) /obj/machinery/camera/attack_paw(mob/living/carbon/alien/humanoid/user as mob) if(!istype(user)) return status = 0 visible_message("\The [user] slashes at [src]!") playsound(src.loc, 'sound/weapons/slash.ogg', 100, 1) icon_state = "[initial(icon_state)]1" add_hiddenprint(user) deactivate(user,0) /obj/machinery/camera/attackby(W as obj, mob/living/user as mob) // DECONSTRUCTION if(isscrewdriver(W)) //user << "You start to [panel_open ? "close" : "open"] the camera's panel." //if(toggle_panel(user)) // No delay because no one likes screwdrivers trying to be hip and have a duration cooldown panel_open = !panel_open user.visible_message("[user] screws the camera's panel [panel_open ? "open" : "closed"]!", "You screw the camera's panel [panel_open ? "open" : "closed"].") playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) else if((iswirecutter(W) || ismultitool(W)) && panel_open) interact(user) else if(iswelder(W) && canDeconstruct()) if(weld(W, user)) if(assembly) assembly.loc = src.loc assembly.state = 1 del(src) // OTHER else if ((istype(W, /obj/item/weapon/paper) || istype(W, /obj/item/device/pda)) && isliving(user)) var/mob/living/U = user var/obj/item/weapon/paper/X = null var/obj/item/device/pda/P = null var/itemname = "" var/info = "" if(istype(W, /obj/item/weapon/paper)) X = W itemname = X.name info = X.info else P = W itemname = P.name info = P.notehtml U << "You hold \a [itemname] up to the camera ..." for(var/mob/living/silicon/ai/O in living_mob_list) if(!O.client) continue if(U.name == "Unknown") O << "[U] holds \a [itemname] up to one of your cameras ..." else O << "[U] holds \a [itemname] up to one of your cameras ..." O << browse(text("