From 3273ae0585eca91059a67bbd1c400204e066fbe9 Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Mon, 8 Aug 2022 17:42:58 +0200 Subject: [PATCH 01/66] ethernet cables --- code/_globalvars/lists/objects.dm | 3 +- code/controllers/subsystem/machines.dm | 1 + code/game/turfs/turf.dm | 9 + .../silicon/ai/ai_network/ai_network.dm | 153 +++++ .../silicon/ai/ai_network/ethernet_cable.dm | 623 ++++++++++++++++++ .../silicon/ai/decentralized/_ai_machinery.dm | 37 +- .../mob/living/silicon/robot/robot_modules.dm | 2 + code/modules/power/cable.dm | 4 + yogstation.dme | 2 + 9 files changed, 832 insertions(+), 2 deletions(-) create mode 100644 code/modules/mob/living/silicon/ai/ai_network/ai_network.dm create mode 100644 code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm diff --git a/code/_globalvars/lists/objects.dm b/code/_globalvars/lists/objects.dm index 331f30de8bd1..eb469d6bd9e3 100644 --- a/code/_globalvars/lists/objects.dm +++ b/code/_globalvars/lists/objects.dm @@ -1,4 +1,5 @@ GLOBAL_LIST_EMPTY(cable_list) //Index for all cables, so that powernets don't have to look through the entire world all the time +GLOBAL_LIST_EMPTY(ethernet_cable_list) //Index for all ethernet cables, so that ainets don't have to look through the entire world all the time GLOBAL_LIST_EMPTY(portals) //list of all /obj/effect/portal GLOBAL_LIST_EMPTY(airlocks) //list of all airlocks GLOBAL_LIST_EMPTY(mechas_list) //list of all mechs. Used by hostile mobs target tracking. @@ -8,7 +9,7 @@ GLOBAL_LIST_EMPTY(navigation_computers) //list of all /obj/machinery/computer GLOBAL_LIST_EMPTY(syndicate_shuttle_boards) //important to keep track of for managing nukeops war declarations. GLOBAL_LIST_EMPTY(navbeacons) //list of all bot nagivation beacons, used for patrolling. GLOBAL_LIST_EMPTY(teleportbeacons) //list of all tracking beacons used by teleporters -GLOBAL_LIST_EMPTY(deliverybeacons) //list of all MULEbot delivery beacons. +GLOBAL_LIST_EMPTY(deliverybeacons) //lisAt of all MULEbot delivery beacons. GLOBAL_LIST_EMPTY(deliverybeacontags) //list of all tags associated with delivery beacons. GLOBAL_LIST_EMPTY(nuke_list) GLOBAL_LIST_EMPTY(alarmdisplay) //list of all machines or programs that can display station alerts diff --git a/code/controllers/subsystem/machines.dm b/code/controllers/subsystem/machines.dm index 3c641fac1e62..e98a57491103 100644 --- a/code/controllers/subsystem/machines.dm +++ b/code/controllers/subsystem/machines.dm @@ -5,6 +5,7 @@ SUBSYSTEM_DEF(machines) var/list/processing = list() var/list/currentrun = list() var/list/powernets = list() + var/list/ainets = list() /datum/controller/subsystem/machines/Initialize() makepowernets() diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index b54880c5725e..8ded26f2fa9e 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -201,6 +201,15 @@ GLOBAL_LIST_EMPTY(station_turfs) coil.place_turf(src, user) return TRUE + if(can_lay_cable() && istype(C, /obj/item/stack/ethernet_coil)) + var/obj/item/stack/ethernet_coil/coil = C + for(var/obj/structure/ethernet_cable/LC in src) + if(!LC.d1 || !LC.d2) + LC.attackby(C,user) + return + coil.place_turf(src, user) + return TRUE + else if(istype(C, /obj/item/twohanded/rcl)) handleRCL(C, user) diff --git a/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm b/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm new file mode 100644 index 000000000000..1fb9bae80227 --- /dev/null +++ b/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm @@ -0,0 +1,153 @@ +//////////////////////////////////////////// +// AI NETWORK DATUM +// each contiguous network of ethernet cables & AI machinery +///////////////////////////////////// +/datum/ai_network + var/number // unique id + var/list/cables = list() // all cables & junctions + var/list/nodes = list() // all connected machines + + var/total_activity = 0 // How much data is being sent through the network. For transmitters and receivers + + var/networked_cpu = 0 //How much CPU is in this network + var/networked_ram = 0 //How much RAM is in this network + + +/datum/ai_network/New() + SSmachines.ainets += src + +/datum/ai_network/Destroy() + //Go away references, you suck! + for(var/obj/structure/ethernet_cable/C in cables) + cables -= C + C.network = null + for(var/obj/machinery/ai/M in nodes) + nodes -= M + M.network = null + + SSmachines.ainets -= src + return ..() + +/datum/ai_network/proc/is_empty() + return !cables.len && !nodes.len + +//remove a cable from the current network +//if the network is then empty, delete it +//Warning : this proc DON'T check if the cable exists +/datum/ai_network/proc/remove_cable(obj/structure/ethernet_cable/C) + cables -= C + C.network = null + if(is_empty())//the network is now empty... + qdel(src)///... delete it + +//add a cable to the current network +//Warning : this proc DON'T check if the cable exists +/datum/ai_network/proc/add_cable(obj/structure/ethernet_cable/C) + if(C.network)// if C already has a network... + if(C.network == src) + return + else + C.network.remove_cable(C) //..remove it + C.network = src + cables +=C + +//remove a power machine from the current network +//if the network is then empty, delete it +//Warning : this proc DON'T check if the machine exists +/datum/ai_network/proc/remove_machine(obj/machinery/ai/M) + nodes -=M + M.network = null + if(is_empty())//the network is now empty... + qdel(src)///... delete it + + +//add a power machine to the current network +//Warning : this proc DOESN'T check if the machine exists +/datum/ai_network/proc/add_machine(obj/machinery/ai/M) + if(M.network)// if M already has a network... + if(M.network == src) + return + else + M.disconnect_from_network()//..remove it + M.network = src + nodes[M] = M + + + + +/proc/merge_ainets(datum/ai_network/net1, datum/ai_network/net2) + if(!net1 || !net2) //if one of the network doesn't exist, return + return + + if(net1 == net2) //don't merge same networks + return + + //We assume net1 is larger. If net2 is in fact larger we are just going to make them switch places to reduce on code. + if(net1.cables.len < net2.cables.len) //net2 is larger than net1. Let's switch them around + var/temp = net1 + net1 = net2 + net2 = temp + + //merge net2 into net1 + for(var/obj/structure/ethernet_cable/Cable in net2.cables) //merge cables + net1.add_cable(Cable) + + for(var/obj/machinery/ai/Node in net2.nodes) //merge power machines + if(!Node.connect_to_network()) + Node.disconnect_from_network() //if somehow we can't connect the machine to the new network, disconnect it from the old nonetheless + return net1 + + +//remove the old network and replace it with a new one throughout the network. +/proc/propagate_ai_network(obj/O, datum/ai_network/AN) + var/list/worklist = list() + var/list/found_machines = list() + var/index = 1 + var/obj/P = null + + worklist+=O //start propagating from the passed object + + while(index<=worklist.len) //until we've exhausted all power objects + P = worklist[index] //get the next power object found + index++ + + if( istype(P, /obj/structure/ethernet_cable)) + var/obj/structure/ethernet_cable/C = P + if(C.network != AN) //add it to the network, if it isn't already there + AN.add_cable(C) + worklist |= C.get_connections() //get adjacents power objects, with or without a network + else if(P.anchored && istype(P, /obj/machinery/ai)) + var/obj/machinery/ai/M = P + found_machines |= M //we wait until the network is fully propagates to connect the machines + else + continue + + //now that the network is set, connect found machines to it + for(var/obj/machinery/ai/PM in found_machines) + if(!PM.connect_to_network()) //couldn't find a node on its turf... + PM.disconnect_from_network() //... so disconnect if already on a network + + +/proc/ai_list(turf/T, source, d, unmarked = FALSE, cable_only = FALSE) + . = list() + + for(var/AM in T) + if(AM == source) + continue //we don't want to return source + + if(!cable_only && istype(AM, /obj/machinery/ai)) + var/obj/machinery/ai/P = AM + if(P.network == 0) + continue + + if(!unmarked || !P.network) //if unmarked we only return things with no network + if(d == 0) + . += P + + else if(istype(AM, /obj/structure/ethernet_cable)) + var/obj/structure/ethernet_cable/C = AM + + if(!unmarked || !C.network) + if(C.d1 == d || C.d2 == d) + . += C + return . diff --git a/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm b/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm new file mode 100644 index 000000000000..d7714dc8b747 --- /dev/null +++ b/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm @@ -0,0 +1,623 @@ +/////////////////////////////// +//CABLE STRUCTURE +/////////////////////////////// + + +//////////////////////////////// +// Definitions +//////////////////////////////// + +/* Cable directions (d1 and d2) + + + 9 1 5 + \ | / + 8 - 0 - 4 + / | \ + 10 2 6 + +If d1 = 0 and d2 = 0, there's no cable +If d1 = 0 and d2 = dir, it's a O-X cable, getting from the center of the tile to dir (knot cable) +If d1 = dir1 and d2 = dir2, it's a full X-X cable, getting from dir1 to dir2 +By design, d1 is the smallest direction and d2 is the highest +*/ + +/obj/structure/ethernet_cable + name = "ethernet cable" + desc = "A rigid and shielded cat 16a cable used for transferring vast amounts of data over long distances. Primarily used for large scale computing network or advanced neural networks." + icon = 'icons/obj/power_cond/power_local.dmi' + icon_state = "0-1" + level = 1 //is underfloor + layer = WIRE_LAYER //Above hidden pipes, GAS_PIPE_HIDDEN_LAYER + anchored = TRUE + obj_flags = CAN_BE_HIT | ON_BLUEPRINTS + var/d1 = 0 // cable direction 1 (see above) + var/d2 = 1 // cable direction 2 (see above) + var/datum/ai_network/network + //Cables no longer keep a copy of the cable to be dropped in nullspace + + FASTDMM_PROP(\ + pipe_type = PIPE_TYPE_CABLE,\ + pipe_interference_group = list("cable")\ + ) + + +// the ethernet cable object +/obj/structure/ethernet_cable/Initialize(mapload, param_color) + . = ..() + + // ensure d1 & d2 reflect the icon_state for entering and exiting cable + var/dash = findtext(icon_state, "-") + d1 = text2num( copytext( icon_state, 1, dash ) ) + d2 = text2num( copytext( icon_state, dash+1 ) ) + + var/turf/T = get_turf(src) // hide if turf is not intact + if(level==1) + hide(T.intact) + GLOB.ethernet_cable_list += src //add it to the global cable list + + update_icon() + +/obj/structure/ethernet_cable/Destroy() // called when a cable is deleted + if(network) + cut_cable_from_ainet() // update the ai networks + GLOB.ethernet_cable_list -= src //remove it from global cable list + return ..() // then go ahead and delete the cable + +/obj/structure/ethernet_cable/deconstruct(disassembled = TRUE) + if(!(flags_1 & NODECONSTRUCT_1)) + var/turf/T = loc + var/cableNum = 1 + if (d1*d2 > 0) //this be true if the cable has two directions, aka it contains two cables. If there is only one cable, one out of d1 and d2 will be zero + cableNum = 2 + var/newCables = new /obj/item/stack/ethernet_coil(T, cableNum) + TransferComponents(newCables) //this copies the fingerprints over to the new object + qdel(src) + +/////////////////////////////////// +// General procedures +/////////////////////////////////// + +//If underfloor, hide the cable +/obj/structure/ethernet_cable/hide(i) + + if(level == 1 && isturf(loc)) + invisibility = i ? INVISIBILITY_MAXIMUM : 0 + update_icon() + +/obj/structure/ethernet_cable/update_icon() + icon_state = "[d1]-[d2]" + +/obj/structure/ethernet_cable/proc/handlecable(obj/item/W, mob/user, params) + var/turf/T = get_turf(src) + if(T.intact) + return + if(W.tool_behaviour == TOOL_WIRECUTTER) + user.visible_message("[user] cuts the ethernet cable.", span_notice("You cut the ethernet cable.")) + investigate_log("was cut by [key_name(usr)] in [AREACOORD(src)]", INVESTIGATE_WIRES) + add_fingerprint(user) + deconstruct() + return + + else if(istype(W, /obj/item/stack/ethernet_coil)) + var/obj/item/stack/ethernet_coil/coil = W + if (coil.get_amount() < 1) + to_chat(user, span_warning("Not enough cable!")) + return + coil.cable_join(src, user) + /* + else if(W.tool_behaviour == TOOL_MULTITOOL) //FIX NETWORK STATS + + if(ai network && (ai network.avail > 0)) // is it powered? + to_chat(user, span_danger("Total power: [DisplayPower(ai network.avail)]\nLoad: [DisplayPower(ai network.load)]\nExcess power: [DisplayPower(surplus())]")) + else + to_chat(user, span_danger("The cable is not powered.")) + shock(user, 5, 0.2) + */ + add_fingerprint(user) + +// Items usable on a cable : +// - Wirecutters : cut it duh ! +// - Cable coil : merge cables +// - Multitool : get the network stats +// +/obj/structure/ethernet_cable/attackby(obj/item/W, mob/user, params) + handlecable(W, user, params) + + +/obj/structure/ethernet_cable/singularity_pull(S, current_size) + ..() + if(current_size >= STAGE_FIVE) + deconstruct() + +///////////////////////////////////////////////// +// Cable laying helpers +//////////////////////////////////////////////// + +//handles merging diagonally matching cables +//for info : direction^3 is flipping horizontally, direction^12 is flipping vertically +/obj/structure/ethernet_cable/proc/mergeDiagonalsNetworks(direction) + + //search for and merge diagonally matching cables from the first direction component (north/south) + var/turf/T = get_step(src, direction&3)//go north/south + + for(var/obj/structure/ethernet_cable/C in T) + + if(!C) + continue + + if(src == C) + continue + + if(C.d1 == (direction^3) || C.d2 == (direction^3)) //we've got a diagonally matching cable + if(!C.network) //if the matching cable somehow got no ai network, make him one (should not happen for cables) + var/datum/ai_network/newAN = new() + newAN.add_cable(C) + + if(network) //if we already have a ai network, then merge the two ai networks + merge_ainets(network,C.network) + else + C.network.add_cable(src) //else, we simply connect to the matching cable ai network + + //the same from the second direction component (east/west) + T = get_step(src, direction&12)//go east/west + + for(var/obj/structure/ethernet_cable/C in T) + + if(!C) + continue + + if(src == C) + continue + if(C.d1 == (direction^12) || C.d2 == (direction^12)) //we've got a diagonally matching cable + if(!C.network) //if the matching cable somehow got no ai network, make him one (should not happen for cables) + var/datum/ai_network/newAN = new() + newAN.add_cable(C) + + if(network) //if we already have a ai network, then merge the two ai networks + merge_ainets(network,C.network) + else + C.network.add_cable(src) //else, we simply connect to the matching cable ai network + +// merge with the ai networks of power objects in the given direction +/obj/structure/ethernet_cable/proc/mergeConnectedNetworks(direction) + + var/fdir = (!direction)? 0 : turn(direction, 180) //flip the direction, to match with the source position on its turf + + if(!(d1 == direction || d2 == direction)) //if the cable is not pointed in this direction, do nothing + return + + var/turf/TB = get_step(src, direction) + + for(var/obj/structure/ethernet_cable/C in TB) + + if(!C) + continue + + if(src == C) + continue + + if(C.d1 == fdir || C.d2 == fdir) //we've got a matching cable in the neighbor turf + if(!C.network) //if the matching cable somehow got no ai network, make him one (should not happen for cables) + var/datum/ai_network/newAN = new(C.loc.z) + newAN.add_cable(C) + + if(network) //if we already have a ai network, then merge the two ai networks + merge_ainets(network,C.network) + else + C.network.add_cable(src) //else, we simply connect to the matching cable ai network + +// merge with the ai networks of power objects in the source turf +/obj/structure/ethernet_cable/proc/mergeConnectedNetworksOnTurf() + var/list/to_connect = list() + + if(!network) //if we somehow have no ai network, make one (should not happen for cables) + var/datum/ai_network/newAN = new(loc.z) + newAN.add_cable(src) + + //first let's add turf cables to our ai network + //then we'll connect machines on turf with a node cable is present + for(var/AM in loc) + if(istype(AM, /obj/structure/ethernet_cable)) + var/obj/structure/ethernet_cable/C = AM + if(C.d1 == d1 || C.d2 == d1 || C.d1 == d2 || C.d2 == d2) //only connected if they have a common direction + if(C.network == network) + continue + if(C.network) + merge_ainets(network, C.network) + else + network.add_cable(C) //the cable was ai networkless, let's just add it to our ai network + + else if(istype(AM, /obj/machinery/ai)) //other power machines + var/obj/machinery/ai/M = AM + + if(M.network == network) + continue + + to_connect += M //we'll connect the machines after all cables are merged + + + //now that cables are done, let's connect found machines + for(var/obj/machinery/ai/PM in to_connect) + if(!PM.connect_to_network()) + PM.disconnect_from_network() //if we somehow can't connect the machine to the new ai network, remove it from the old nonetheless + +////////////////////////////////////////////// +// ai networks handling helpers +////////////////////////////////////////////// + +//if ai_networkless_only = 1, will only get connections without ai network +/obj/structure/ethernet_cable/proc/get_connections(ai_networkless_only = 0) + . = list() // this will be a list of all connected power objects + var/turf/T + + //get matching cables from the first direction + if(d1) //if not a node cable + T = get_step(src, d1) + if(T) + . += ai_list(T, src, turn(d1, 180), ai_networkless_only) //get adjacents matching cables + + if(d1&(d1-1)) //diagonal direction, must check the 4 possibles adjacents tiles + T = get_step(src,d1&3) // go north/south + if(T) + . += ai_list(T, src, d1 ^ 3, ai_networkless_only) //get diagonally matching cables + T = get_step(src,d1&12) // go east/west + if(T) + . += ai_list(T, src, d1 ^ 12, ai_networkless_only) //get diagonally matching cables + + . += ai_list(loc, src, d1, ai_networkless_only) //get on turf matching cables + + //do the same on the second direction (which can't be 0) + T = get_step(src, d2) + if(T) + . += ai_list(T, src, turn(d2, 180), ai_networkless_only) //get adjacents matching cables + + if(d2&(d2-1)) //diagonal direction, must check the 4 possibles adjacents tiles + T = get_step(src,d2&3) // go north/south + if(T) + . += ai_list(T, src, d2 ^ 3, ai_networkless_only) //get diagonally matching cables + T = get_step(src,d2&12) // go east/west + if(T) + . += ai_list(T, src, d2 ^ 12, ai_networkless_only) //get diagonally matching cables + . += ai_list(loc, src, d2, ai_networkless_only) //get on turf matching cables + + return . + +//should be called after placing a cable which extends another cable, creating a "smooth" cable that no longer terminates in the centre of a turf. +//needed as this can, unlike other placements, disconnect cables +/obj/structure/ethernet_cable/proc/denode() + var/turf/T1 = loc + if(!T1) + return + + var/list/powerlist = ai_list(T1,src,0,0) //find the other cables that ended in the centre of the turf, with or without a ai network + if(powerlist.len>0) + var/datum/ai_network/AN = new() + propagate_ai_network(powerlist[1],AN) //propagates the new ai network beginning at the source cable + + if(AN.is_empty()) //can happen with machines made nodeless when smoothing cables + qdel(AN) + +/obj/structure/ethernet_cable/proc/auto_propogate_cut_cable(obj/O) + if(O && !QDELETED(O)) + var/datum/ai_network/newAN = new()// creates a new ai network... + propagate_ai_network(O, newAN)//... and propagates it to the other side of the cable + +// cut the cable's ai network at this cable and updates the powergrid +/obj/structure/ethernet_cable/proc/cut_cable_from_ainet(remove=TRUE) + var/turf/T1 = loc + var/list/P_list + if(!T1) + return + if(d1) + T1 = get_step(T1, d1) + P_list = ai_list(T1, src, turn(d1,180),0,cable_only = 1) // what adjacently joins on to cut cable... + + P_list += ai_list(loc, src, d1, 0, cable_only = 1)//... and on turf + + + if(P_list.len == 0)//if nothing in both list, then the cable was a lone cable, just delete it and its ai network + network.remove_cable(src) + + for(var/obj/machinery/ai/P in T1)//check if it was powering a machine + if(!P.connect_to_network()) //can't find a node cable on a the turf to connect to + P.disconnect_from_network() //remove from current network (and delete ai network) + return + + var/obj/O = P_list[1] + // remove the cut cable from its turf and ai network, so that it doesn't get count in propagate_network worklist + if(remove) + moveToNullspace() + network.remove_cable(src) //remove the cut cable from its ai network + + addtimer(CALLBACK(O, .proc/auto_propogate_cut_cable, O), 0) //so we don't rebuild the network X times when singulo/explosion destroys a line of X cables + + // Disconnect machines connected to nodes + if(d1 == 0) // if we cut a node (O-X) cable + for(var/obj/machinery/ai/P in T1) + if(!P.connect_to_network()) //can't find a node cable on a the turf to connect to + P.disconnect_from_network() //remove from current network + + +/////////////////////////////////////////////// +// The cable coil object, used for laying cable +/////////////////////////////////////////////// + +//////////////////////////////// +// Definitions +//////////////////////////////// + +/obj/item/stack/ethernet_coil + name = "ethernet cable coil" + desc = "A coil of shielded ethernet cable." + custom_price = 25 + gender = NEUTER //That's a cable coil sounds better than that's some cable coils + icon = 'icons/obj/power.dmi' + icon_state = "wire" + item_state = "coil" + lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' + righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' + max_amount = MAXCOIL + amount = MAXCOIL + merge_type = /obj/item/stack/ethernet_coil // This is here to let its children merge between themselves + + throwforce = 0 + w_class = WEIGHT_CLASS_SMALL + throw_speed = 3 + throw_range = 5 + materials = list(/datum/material/iron=10, /datum/material/glass=5, /datum/material/gold=1) + slot_flags = ITEM_SLOT_BELT + attack_verb = list("whipped", "lashed", "disciplined", "flogged") + singular_name = "ethernet cable piece" + full_w_class = WEIGHT_CLASS_SMALL + grind_results = list(/datum/reagent/copper = 2) //2 copper per cable in the coil + usesound = 'sound/items/deconstruct.ogg' + +/obj/item/stack/ethernet_coil/cyborg + is_cyborg = TRUE + materials = list() + cost = 1 + +/obj/item/stack/ethernet_coil/suicide_act(mob/user) + if(locate(/obj/structure/chair/stool) in get_turf(user)) + user.visible_message(span_suicide("[user] is making a noose with [src]! It looks like [user.p_theyre()] trying to commit suicide!")) + else + user.visible_message(span_suicide("[user] is trying to upload [user.p_them()]selves to the afterlife with [src]! It looks like [user.p_theyre()] trying to commit suicide!")) + return(OXYLOSS) + +/obj/item/stack/ethernet_coil/Initialize(mapload, new_amount = null, param_color = null) + . = ..() + + pixel_x = rand(-2,2) + pixel_y = rand(-2,2) + update_icon() + +/////////////////////////////////// +// General procedures +/////////////////////////////////// + + +//you can use wires to heal robotics +/obj/item/stack/ethernet_coil/attack(mob/living/carbon/human/H, mob/user) + if(!istype(H)) + return ..() + + var/obj/item/bodypart/affecting = H.get_bodypart(check_zone(user.zone_selected)) + if(affecting.burn_dam <= 0) + to_chat(user, span_warning("[affecting] is already in good condition!")) + return FALSE + if(affecting && affecting.status == BODYPART_ROBOTIC) + user.visible_message(span_notice("[user] starts to fix some of the wires in [H]'s [affecting.name]."), span_notice("You start fixing some of the wires in [H == user ? "your" : "[H]'s"] [affecting.name].")) + heal_robo_limb(src, H, user, 0, 15) + user.visible_message(span_notice("[user] fixes the wires in [H]'s [affecting.name]."), span_notice("You fix the wires in [H == user ? "your" : "[H]'s"] [affecting.name].")) + return + else + return ..() + +/obj/item/stack/ethernet_coil/proc/heal_robo_limb(obj/item/I, mob/living/carbon/human/H, mob/user, brute_heal, burn_heal) + if(I.use_tool(H, user, 2 SECONDS, amount=1)) + if(item_heal_robotic(H, user, brute_heal, burn_heal)) + return heal_robo_limb(I, H, user, brute_heal, burn_heal) + return TRUE + +/obj/item/stack/ethernet_coil/update_icon() + icon_state = "[initial(item_state)][amount < 3 ? amount : ""]" + name = "ethernet cable [amount < 3 ? "piece" : "coil"]" + +/obj/item/stack/ethernet_coil/attack_hand(mob/user) + . = ..() + if(.) + return + var/obj/item/stack/ethernet_coil/new_cable = ..() + if(istype(new_cable)) + new_cable.update_icon() + +//add cables to the stack +/obj/item/stack/ethernet_coil/proc/give(extra) + if(amount + extra > max_amount) + amount = max_amount + else + amount += extra + update_icon() + + + +/////////////////////////////////////////////// +// Cable laying procedures +////////////////////////////////////////////// + +/obj/item/stack/ethernet_coil/proc/get_new_cable(location) + var/path = /obj/structure/ethernet_cable + return new path(location) + +// called when cable_coil is clicked on a turf +/obj/item/stack/ethernet_coil/proc/place_turf(turf/T, mob/user, dirnew) + if(!isturf(user.loc)) + return + + if(!isturf(T) || T.intact || !T.can_have_cabling()) + to_chat(user, span_warning("You can only lay cables on top of exterior catwalks and plating!")) + return + + if(get_amount() < 1) // Out of cable + to_chat(user, span_warning("There is no cable left!")) + return + + if(get_dist(T,user) > 1) // Too far + to_chat(user, span_warning("You can't lay cable at a place that far away!")) + return + + var/dirn + if(!dirnew) //If we weren't given a direction, come up with one! (Called as null from catwalk.dm and floor.dm) + if(user.loc == T) + dirn = user.dir //If laying on the tile we're on, lay in the direction we're facing + else + dirn = get_dir(T, user) + else + dirn = dirnew + + for(var/obj/structure/cable/LC in T) + to_chat(user, span_warning("There's already a power cable at that position!")) + return + + for(var/obj/structure/ethernet_cable/LC in T) + if(LC.d2 == dirn && LC.d1 == 0) + to_chat(user, span_warning("There's already a cable at that position!")) + return + + var/obj/structure/ethernet_cable/C = get_new_cable(T) + + //set up the new cable + C.d1 = 0 //it's a O-X node cable + C.d2 = dirn + C.add_fingerprint(user) + C.update_icon() + + //create a new ai network with the cable, if needed it will be merged later + var/datum/ai_network/AN = new() + AN.add_cable(C) + + C.mergeConnectedNetworks(C.d2) //merge the ai network with adjacents ai networks + C.mergeConnectedNetworksOnTurf() //merge the ai network with on turf ai networks + + if(C.d2 & (C.d2 - 1))// if the cable is layed diagonally, check the others 2 possible directions + C.mergeDiagonalsNetworks(C.d2) + + use(1) + + return C + +// called when cable_coil is click on an installed obj/cable +// or click on a turf that already contains a "node" cable +/obj/item/stack/ethernet_coil/proc/cable_join(obj/structure/cable/C, mob/user, var/showerror = TRUE, forceddir) + var/turf/U = user.loc + if(!isturf(U)) + return + + var/turf/T = C.loc + + if(!isturf(T) || T.intact) // sanity checks, also stop use interacting with T-scanner revealed cable + return + + if(get_dist(C, user) > 1) // make sure it's close enough + to_chat(user, span_warning("You can't lay cable at a place that far away!")) + return + + + if(U == T && !forceddir) //if clicked on the turf we're standing on and a direction wasn't supplied, try to put a cable in the direction we're facing + place_turf(T,user) + return + + var/dirn = get_dir(C, user) + if(forceddir) + dirn = forceddir + + // one end of the clicked cable is pointing towards us and no direction was supplied + if((C.d1 == dirn || C.d2 == dirn) && !forceddir) + if(!U.can_have_cabling()) //checking if it's a plating or catwalk + if (showerror) + to_chat(user, span_warning("You can only lay cables on catwalks and plating!")) + return + if(U.intact) //can't place a cable if it's a plating with a tile on it + to_chat(user, span_warning("You can't lay cable there unless the floor tiles are removed!")) + return + else + // cable is pointing at us, we're standing on an open tile + // so create a stub pointing at the clicked cable on our tile + + var/fdirn = turn(dirn, 180) // the opposite direction + + for(var/obj/structure/ethernet_cable/LC in U) // check to make sure there's not a cable there already + if(LC.d1 == fdirn || LC.d2 == fdirn) + if (showerror) + to_chat(user, span_warning("There's already a cable at that position!")) + return + + var/obj/structure/ethernet_cable/NC = get_new_cable (U) + + NC.d1 = 0 + NC.d2 = fdirn + NC.add_fingerprint(user) + NC.update_icon() + + //create a new ai network with the cable, if needed it will be merged later + var/datum/ai_network/newAN = new() + newAN.add_cable(NC) + + NC.mergeConnectedNetworks(NC.d2) //merge the ai network with adjacents ai networks + NC.mergeConnectedNetworksOnTurf() //merge the ai network with on turf ai networks + + if(NC.d2 & (NC.d2 - 1))// if the cable is layed diagonally, check the others 2 possible directions + NC.mergeDiagonalsNetworks(NC.d2) + + use(1) + + return + + // exisiting cable doesn't point at our position or we have a supplied direction, so see if it's a stub + else if(C.d1 == 0) + // if so, make it a full cable pointing from it's old direction to our dirn + var/nd1 = C.d2 // these will be the new directions + var/nd2 = dirn + + + if(nd1 > nd2) // swap directions to match icons/states + nd1 = dirn + nd2 = C.d2 + + + for(var/obj/structure/ethernet_cable/LC in T) // check to make sure there's no matching cable + if(LC == C) // skip the cable we're interacting with + continue + if((LC.d1 == nd1 && LC.d2 == nd2) || (LC.d1 == nd2 && LC.d2 == nd1) ) // make sure no cable matches either direction + if (showerror) + to_chat(user, span_warning("There's already a cable at that position!")) + + return + + + C.update_icon() + + C.d1 = nd1 + C.d2 = nd2 + + //updates the stored cable coil + + C.add_fingerprint(user) + C.update_icon() + + + C.mergeConnectedNetworks(C.d1) //merge the ai networks... + C.mergeConnectedNetworks(C.d2) //...in the two new cable directions + C.mergeConnectedNetworksOnTurf() + + if(C.d1 & (C.d1 - 1))// if the cable is layed diagonally, check the others 2 possible directions + C.mergeDiagonalsNetworks(C.d1) + + if(C.d2 & (C.d2 - 1))// if the cable is layed diagonally, check the others 2 possible directions + C.mergeDiagonalsNetworks(C.d2) + + use(1) + + C.denode()// this call may have disconnected some cables that terminated on the centre of the turf, if so split the ai networks. + return diff --git a/code/modules/mob/living/silicon/ai/decentralized/_ai_machinery.dm b/code/modules/mob/living/silicon/ai/decentralized/_ai_machinery.dm index dda04e4f79ce..1845ea55081c 100644 --- a/code/modules/mob/living/silicon/ai/decentralized/_ai_machinery.dm +++ b/code/modules/mob/living/silicon/ai/decentralized/_ai_machinery.dm @@ -9,6 +9,8 @@ icon_state = "RD-server-on" density = TRUE + var/datum/ai_network/network + /obj/machinery/ai/Initialize(mapload) . = ..() @@ -49,4 +51,37 @@ if(env.return_temperature() > GLOB.ai_os.get_temp_limit() || !env.heat_capacity()) return AI_MACHINE_TOO_HOT - \ No newline at end of file + + +/obj/machinery/ai/proc/connect_to_network() + var/turf/T = src.loc + if(!T || !istype(T)) + return FALSE + + var/obj/structure/ethernet_cable/C = T.get_cable_node() //check if we have a node cable on the machine turf, the first found is picked + if(!C || !C.network) + return FALSE + + C.network.add_machine(src) + return TRUE + +// remove and disconnect the machine from its current powernet +/obj/machinery/ai/proc/disconnect_from_network() + if(!network) + return FALSE + network.remove_machine(src) + return TRUE + +// attach a wire to a power machine - leads from the turf you are standing on +//almost never called, overwritten by all power machines but terminal and generator +/obj/machinery/ai/attackby(obj/item/W, mob/user, params) + if(istype(W, /obj/item/stack/ethernet_coil)) + var/obj/item/stack/ethernet_coil/coil = W + var/turf/T = user.loc + if(T.intact || !isfloorturf(T)) + return + if(get_dist(src, user) > 1) + return + coil.place_turf(T, user) + else + return ..() diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index 887c0dcf0b84..899c41fe2f79 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -346,6 +346,7 @@ /obj/item/stack/rods/cyborg, /obj/item/stack/tile/plasteel/cyborg, /obj/item/stack/cable_coil/cyborg, + /obj/item/stack/ethernet_coil/cyborg, /obj/item/barrier_taperoll/engineering) radio_channels = list(RADIO_CHANNEL_ENGINEERING) emag_modules = list(/obj/item/borg/stun) @@ -683,6 +684,7 @@ /obj/item/stack/tile/plasteel/cyborg, /obj/item/destTagger/borg, /obj/item/stack/cable_coil/cyborg, + /obj/item/stack/ethernet_coil/cyborg, /obj/item/pinpointer/syndicate_cyborg, /obj/item/borg_chameleon, ) diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index 134ea122ebc1..319dfdab58e1 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -610,6 +610,10 @@ GLOBAL_LIST_INIT(cable_coil_recipes, list (new/datum/stack_recipe("cable restrai else dirn = dirnew + for(var/obj/structure/ethernet_cable/LC in T) + to_chat(user, span_warning("There's already an ethernet cable at that position!")) + return + for(var/obj/structure/cable/LC in T) if(LC.d2 == dirn && LC.d1 == 0) to_chat(user, span_warning("There's already a cable at that position!")) diff --git a/yogstation.dme b/yogstation.dme index 92fc332bdf5b..72327276bf15 100644 --- a/yogstation.dme +++ b/yogstation.dme @@ -2435,6 +2435,8 @@ #include "code\modules\mob\living\silicon\ai\robot_control.dm" #include "code\modules\mob\living\silicon\ai\say.dm" #include "code\modules\mob\living\silicon\ai\vox_sounds.dm" +#include "code\modules\mob\living\silicon\ai\ai_network\ai_network.dm" +#include "code\modules\mob\living\silicon\ai\ai_network\ethernet_cable.dm" #include "code\modules\mob\living\silicon\ai\decentralized\_ai_machinery.dm" #include "code\modules\mob\living\silicon\ai\decentralized\ai_core_display.dm" #include "code\modules\mob\living\silicon\ai\decentralized\ai_data_core.dm" From cfd605cb1f37048f13897b6da87f4316e07dedfb Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Mon, 8 Aug 2022 17:52:49 +0200 Subject: [PATCH 02/66] Ethernet fixes --- .../mob/living/silicon/ai/ai_network/ethernet_cable.dm | 2 +- .../mob/living/silicon/ai/decentralized/_ai_machinery.dm | 2 +- code/modules/power/power.dm | 8 ++++++++ 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm b/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm index d7714dc8b747..72144e88af9f 100644 --- a/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm +++ b/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm @@ -421,7 +421,7 @@ By design, d1 is the smallest direction and d2 is the highest return TRUE /obj/item/stack/ethernet_coil/update_icon() - icon_state = "[initial(item_state)][amount < 3 ? amount : ""]" + icon_state = "[initial(icon_state)][amount < 3 ? amount : ""]" name = "ethernet cable [amount < 3 ? "piece" : "coil"]" /obj/item/stack/ethernet_coil/attack_hand(mob/user) diff --git a/code/modules/mob/living/silicon/ai/decentralized/_ai_machinery.dm b/code/modules/mob/living/silicon/ai/decentralized/_ai_machinery.dm index 1845ea55081c..c29433baaf93 100644 --- a/code/modules/mob/living/silicon/ai/decentralized/_ai_machinery.dm +++ b/code/modules/mob/living/silicon/ai/decentralized/_ai_machinery.dm @@ -58,7 +58,7 @@ if(!T || !istype(T)) return FALSE - var/obj/structure/ethernet_cable/C = T.get_cable_node() //check if we have a node cable on the machine turf, the first found is picked + var/obj/structure/ethernet_cable/C = T.get_ai_cable_node() //check if we have a node cable on the machine turf, the first found is picked if(!C || !C.network) return FALSE diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm index fa967e02f788..ac7c6b756dac 100644 --- a/code/modules/power/power.dm +++ b/code/modules/power/power.dm @@ -406,6 +406,14 @@ return C return null +/turf/proc/get_ai_cable_node() + if(!can_have_cabling()) + return null + for(var/obj/structure/ethernet_cable/C in src) + if(C.d1 == 0) + return C + return null + /area/proc/get_apc() for(var/obj/machinery/power/apc/APC in GLOB.apcs_list) if(APC.area == src) From 72229f4f69c5e7a83b690e3eb960f5faa1a429a2 Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Mon, 8 Aug 2022 17:55:18 +0200 Subject: [PATCH 03/66] Update ethernet_cable.dm --- .../modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm b/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm index 72144e88af9f..0a1575caf285 100644 --- a/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm +++ b/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm @@ -38,7 +38,8 @@ By design, d1 is the smallest direction and d2 is the highest FASTDMM_PROP(\ pipe_type = PIPE_TYPE_CABLE,\ - pipe_interference_group = list("cable")\ + pipe_interference_group = list("cable"),\ + pipe_group = "cable-red"\ ) From 753c12b2fc940abdb823aaa9168f237d115c02c3 Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Mon, 8 Aug 2022 17:55:52 +0200 Subject: [PATCH 04/66] Update ethernet_cable.dm --- code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm b/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm index 0a1575caf285..91c4b36b332b 100644 --- a/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm +++ b/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm @@ -39,7 +39,7 @@ By design, d1 is the smallest direction and d2 is the highest FASTDMM_PROP(\ pipe_type = PIPE_TYPE_CABLE,\ pipe_interference_group = list("cable"),\ - pipe_group = "cable-red"\ + pipe_group = "cable-ethernet"\ ) From 5a111ac0afb8628f74d78b325041f6b1d189060e Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Mon, 8 Aug 2022 17:58:53 +0200 Subject: [PATCH 05/66] e --- _maps/map_files/YogStation/YogStation.dmm | 386 ++++++++++++++-------- 1 file changed, 247 insertions(+), 139 deletions(-) diff --git a/_maps/map_files/YogStation/YogStation.dmm b/_maps/map_files/YogStation/YogStation.dmm index 34627c0d3453..b947812e59bc 100644 --- a/_maps/map_files/YogStation/YogStation.dmm +++ b/_maps/map_files/YogStation/YogStation.dmm @@ -303,12 +303,6 @@ }, /turf/open/floor/plasteel, /area/security/prison) -"abx" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/ai/server_cabinet/prefilled, -/turf/open/floor/circuit/green/telecomms, -/area/ai_monitored/turret_protected/ai) "aby" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 8 @@ -21723,6 +21717,16 @@ }, /turf/open/floor/plasteel, /area/engine/foyer) +"bZL" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/porta_turret/ai, +/obj/structure/ethernet_cable{ + icon_state = "4-8" + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "bZN" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -23495,13 +23499,6 @@ }, /turf/open/floor/plating, /area/maintenance/solars/starboard/fore) -"crZ" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/obj/item/twohanded/required/kirbyplants/random, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/ai) "csl" = ( /obj/machinery/vending/cola/random, /turf/open/floor/plasteel/dark, @@ -25536,6 +25533,12 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) +"daZ" = ( +/obj/structure/ethernet_cable{ + icon_state = "1-8" + }, +/turf/closed/wall/r_wall, +/area/ai_monitored/turret_protected/ai) "dbt" = ( /obj/machinery/door/firedoor/border_only{ dir = 4 @@ -26026,6 +26029,13 @@ }, /turf/open/floor/engine, /area/maintenance/disposal/incinerator) +"dtY" = ( +/obj/machinery/porta_turret/ai, +/obj/structure/ethernet_cable{ + icon_state = "4-8" + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "duk" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 @@ -26806,13 +26816,6 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/entry) -"dOn" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/porta_turret/ai, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/turret_protected/ai) "dOK" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/segment{ @@ -29369,6 +29372,15 @@ }, /turf/open/floor/plasteel/freezer, /area/crew_quarters/toilet) +"fgU" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/ai/server_cabinet/prefilled, +/obj/structure/ethernet_cable{ + icon_state = "0-2" + }, +/turf/open/floor/circuit/green/telecomms, +/area/ai_monitored/turret_protected/ai) "fgV" = ( /obj/structure/cable/yellow{ icon_state = "1-2" @@ -32607,18 +32619,6 @@ }, /turf/open/floor/circuit, /area/ai_monitored/nuke_storage) -"gTY" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/machinery/doorButtons/access_button{ - idDoor = "ai_core_airlock_interior"; - idSelf = "ai_core_airlock_control"; - pixel_x = -23; - pixel_y = 7 - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "gTZ" = ( /obj/effect/turf_decal/tile/blue{ dir = 4 @@ -32921,12 +32921,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /turf/open/floor/plating, /area/maintenance/starboard/aft) -"hbO" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "hcw" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 4 @@ -33676,6 +33670,19 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/locker) +"hrg" = ( +/obj/machinery/light, +/obj/machinery/camera{ + c_tag = "AI Chamber - Aft"; + dir = 4; + network = list("aicore") + }, +/obj/machinery/porta_turret/ai, +/obj/structure/ethernet_cable{ + icon_state = "4-8" + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "hri" = ( /obj/structure/cable/yellow{ icon_state = "1-4" @@ -34449,10 +34456,6 @@ }, /turf/open/floor/plasteel, /area/engine/atmos_distro) -"hJq" = ( -/obj/machinery/ai/data_core/primary, -/turf/open/floor/circuit/green/telecomms, -/area/ai_monitored/turret_protected/ai) "hJu" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/light/small{ @@ -35349,6 +35352,15 @@ }, /turf/open/floor/plasteel/dark, /area/science/robotics/lab) +"ido" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 + }, +/obj/structure/ethernet_cable{ + icon_state = "2-4" + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "idq" = ( /obj/structure/bookcase/random/nonfiction, /turf/open/floor/carpet, @@ -35616,10 +35628,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/port) -"ikV" = ( -/obj/machinery/ai/server_cabinet/prefilled, -/turf/open/floor/circuit/green/telecomms, -/area/ai_monitored/turret_protected/ai) "ilg" = ( /obj/effect/turf_decal/tile/yellow{ dir = 1 @@ -35971,6 +35979,18 @@ }, /turf/open/floor/plasteel/dark, /area/engine/engine_smes) +"isq" = ( +/obj/machinery/status_display/ai{ + pixel_y = -32 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 8 + }, +/obj/structure/ethernet_cable{ + icon_state = "4-8" + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "isI" = ( /obj/structure/rack, /obj/item/sensor_device{ @@ -36020,6 +36040,16 @@ }, /turf/open/floor/plasteel/white, /area/medical/virology) +"itZ" = ( +/obj/machinery/atmospherics/pipe/manifold/cyan/hidden, +/obj/structure/ethernet_cable{ + icon_state = "2-4" + }, +/obj/structure/ethernet_cable{ + icon_state = "2-8" + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "iuR" = ( /obj/machinery/door/window/southleft{ base_state = "right"; @@ -37907,16 +37937,6 @@ /obj/structure/chair/stool, /turf/open/floor/plasteel, /area/science/robotics/lab) -"jnr" = ( -/obj/machinery/light, -/obj/machinery/camera{ - c_tag = "AI Chamber - Aft"; - dir = 4; - network = list("aicore") - }, -/obj/machinery/porta_turret/ai, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/turret_protected/ai) "jnA" = ( /obj/structure/grille, /turf/open/space/basic, @@ -38559,6 +38579,12 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /turf/open/floor/plasteel, /area/engine/atmos_distro) +"jDN" = ( +/obj/structure/ethernet_cable{ + icon_state = "1-8" + }, +/turf/open/floor/circuit/green/telecomms, +/area/ai_monitored/turret_protected/ai) "jDP" = ( /obj/machinery/portable_atmospherics/scrubber/huge, /obj/structure/sign/warning/radiation/rad_area{ @@ -39289,15 +39315,6 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/entry) -"kcr" = ( -/obj/machinery/status_display/ai{ - pixel_y = -32 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 8 - }, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/turret_protected/ai) "kcH" = ( /obj/machinery/disposal/bin, /obj/structure/window/reinforced, @@ -39464,6 +39481,16 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) +"kgc" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/manifold/cyan/hidden{ + dir = 1 + }, +/obj/structure/ethernet_cable{ + icon_state = "1-4" + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "kgs" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 4 @@ -41271,6 +41298,12 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/starboard) +"kWC" = ( +/obj/structure/ethernet_cable{ + icon_state = "2-8" + }, +/turf/closed/wall/r_wall, +/area/ai_monitored/turret_protected/ai) "kXj" = ( /turf/open/floor/plating{ icon_state = "panelscorched" @@ -43070,6 +43103,11 @@ }, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/ai_upload) +"lTK" = ( +/obj/machinery/ai/server_cabinet/prefilled, +/obj/structure/ethernet_cable, +/turf/open/floor/circuit/green/telecomms, +/area/ai_monitored/turret_protected/ai) "lTO" = ( /obj/structure/sign/warning/securearea{ pixel_x = 32 @@ -45386,17 +45424,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/white, /area/medical/virology) -"mWE" = ( -/obj/machinery/status_display/ai{ - pixel_y = 32 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ - dir = 8; - external_pressure_bound = 120; - name = "server vent" - }, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/turret_protected/ai) "mWH" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 1 @@ -47216,13 +47243,6 @@ }, /turf/open/floor/plasteel/white, /area/medical/genetics/cloning) -"nLw" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/atmospherics/pipe/manifold/cyan/hidden{ - dir = 1 - }, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/turret_protected/ai) "nMe" = ( /obj/structure/table/wood, /obj/structure/mirror{ @@ -47506,12 +47526,6 @@ }, /turf/open/floor/plasteel, /area/engine/atmos_distro) -"nSN" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 1 - }, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/turret_protected/ai) "nSQ" = ( /obj/structure/chair, /obj/effect/turf_decal/trimline/blue/filled/line{ @@ -50433,6 +50447,27 @@ }, /turf/open/floor/circuit/green/telecomms/mainframe, /area/tcommsat/server) +"psz" = ( +/obj/machinery/status_display/ai{ + pixel_y = -32 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ + dir = 4; + external_pressure_bound = 120; + name = "server vent" + }, +/obj/structure/ethernet_cable{ + icon_state = "4-8" + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) +"psL" = ( +/obj/machinery/ai/data_core/primary, +/obj/structure/ethernet_cable{ + icon_state = "0-8" + }, +/turf/open/floor/circuit/green/telecomms, +/area/ai_monitored/turret_protected/ai) "ptm" = ( /obj/structure/window/reinforced, /obj/machinery/camera{ @@ -50766,6 +50801,20 @@ }, /turf/open/floor/plating, /area/quartermaster/storage) +"pBL" = ( +/obj/machinery/status_display/ai{ + pixel_y = 32 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ + dir = 8; + external_pressure_bound = 120; + name = "server vent" + }, +/obj/structure/ethernet_cable{ + icon_state = "4-8" + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "pCF" = ( /obj/structure/lattice/catwalk, /obj/structure/cable/yellow{ @@ -51443,6 +51492,16 @@ dir = 8 }, /area/hallway/secondary/entry) +"pWX" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/item/twohanded/required/kirbyplants/random, +/obj/structure/ethernet_cable{ + icon_state = "2-4" + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/turret_protected/ai) "pXe" = ( /obj/effect/landmark/event_spawn, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, @@ -51806,6 +51865,12 @@ }, /turf/open/space/basic, /area/space/nearstation) +"qhK" = ( +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/turf/closed/wall/r_wall, +/area/ai_monitored/turret_protected/ai) "qjc" = ( /obj/structure/disposalpipe/sorting/mail{ sortType = 10 @@ -57985,6 +58050,15 @@ }, /turf/open/floor/plasteel/white, /area/medical/storage) +"teb" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/ethernet_cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "ten" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk, @@ -58552,6 +58626,21 @@ }, /turf/open/floor/plasteel, /area/security/checkpoint/supply) +"trL" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/machinery/doorButtons/access_button{ + idDoor = "ai_core_airlock_interior"; + idSelf = "ai_core_airlock_control"; + pixel_x = -23; + pixel_y = 7 + }, +/obj/structure/ethernet_cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "tsS" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, @@ -59670,10 +59759,6 @@ /obj/structure/closet/firecloset, /turf/open/floor/plasteel/white, /area/medical/paramedic) -"tTK" = ( -/obj/machinery/porta_turret/ai, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/turret_protected/ai) "tTT" = ( /obj/effect/turf_decal/tile/yellow{ dir = 1 @@ -61536,6 +61621,15 @@ /obj/effect/spawner/lootdrop/techstorage/security, /turf/open/floor/plasteel/white, /area/storage/tech) +"uOo" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 4 + }, +/obj/structure/ethernet_cable{ + icon_state = "4-8" + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "uOs" = ( /obj/machinery/atmospherics/pipe/simple/purple/visible{ dir = 4 @@ -64321,6 +64415,12 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) +"wsZ" = ( +/obj/structure/ethernet_cable{ + icon_state = "4-8" + }, +/turf/closed/wall/r_wall, +/area/ai_monitored/turret_protected/ai) "wtu" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, @@ -64514,6 +64614,12 @@ /obj/effect/spawner/structure/window/reinforced/shutter, /turf/open/floor/plating, /area/engine/engineering) +"wzQ" = ( +/obj/structure/ethernet_cable{ + icon_state = "1-4" + }, +/turf/closed/wall/r_wall, +/area/ai_monitored/turret_protected/ai) "wAc" = ( /obj/effect/spawner/structure/window/reinforced/shutter, /turf/open/floor/plating, @@ -64817,6 +64923,12 @@ }, /turf/open/floor/plating, /area/storage/tech) +"wHn" = ( +/obj/structure/ethernet_cable{ + icon_state = "2-4" + }, +/turf/closed/wall/r_wall, +/area/ai_monitored/turret_protected/ai) "wIh" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 8 @@ -66905,6 +67017,13 @@ }, /turf/open/floor/plating, /area/maintenance/port) +"xNU" = ( +/obj/structure/sign/warning/electricshock, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/turf/closed/wall/r_wall, +/area/ai_monitored/turret_protected/ai) "xOa" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 4; @@ -67405,17 +67524,6 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/engine, /area/science/xenobiology) -"yap" = ( -/obj/machinery/status_display/ai{ - pixel_y = -32 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ - dir = 4; - external_pressure_bound = 120; - name = "server vent" - }, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/turret_protected/ai) "yaq" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/structure/disposalpipe/segment, @@ -109258,9 +109366,9 @@ cva wbH pGB mDc -crZ -wbH -cva +pWX +xNU +wzQ cva qXU eqR @@ -109515,9 +109623,9 @@ cva cva cva swt +wsZ cva -cva -cva +wsZ cva cva pEf @@ -109772,9 +109880,9 @@ byg tau bRu xFg -gTY +trL qrP -jnr +hrg cva cva pEf @@ -110029,9 +110137,9 @@ gQa jzm fIs rGM -hbO +teb lbr -yap +psz cva cva cva @@ -110281,14 +110389,14 @@ pEf pEf cva cva -abx -nLw +fgU +kgc nDW enZ -nSN -xlV +ido +jDN dFJ -rjo +uOo wer cva cva @@ -110539,13 +110647,13 @@ koy cva cva lHO -rjo +uOo rqW rjo -hJq +psL sAu dFJ -rjo +uOo xlV cva cva @@ -110796,14 +110904,14 @@ pEf cva cva xUW -rjo +uOo rqW jTn nVK enZ kSZ -pyn -ikV +itZ +lTK cva cva pEf @@ -111053,13 +111161,13 @@ pEf cva cva cva -mWE +pBL qJg aSy nJj nTI pnR -kcr +isq cva cva aFW @@ -111310,13 +111418,13 @@ pEf aFW cva cva -dOn +bZL sPc axp xoQ pyn pnR -tTK +dtY cva cva pEf @@ -111567,13 +111675,13 @@ pEf pEf ogh cva -cva +wsZ sAu rjo qMM sbG tZA -cva +wsZ cva wGq pEf @@ -111824,13 +111932,13 @@ gXs gXs pEf jXD -cva -cva +kWC +wzQ iXp eeL iXp -cva -cva +wHn +daZ jXD pEf gXs @@ -112082,11 +112190,11 @@ gXs pEf pEf cva -cva -cva -cva -cva -cva +kWC +qhK +qhK +qhK +daZ cva pEf pEf From d255ef65dd8f1e9dd8e20dbbc53c7a6adccbfbff Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Mon, 8 Aug 2022 18:03:05 +0200 Subject: [PATCH 06/66] Update ethernet_cable.dm --- code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm b/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm index 91c4b36b332b..57ccf398b94a 100644 --- a/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm +++ b/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm @@ -31,6 +31,8 @@ By design, d1 is the smallest direction and d2 is the highest layer = WIRE_LAYER //Above hidden pipes, GAS_PIPE_HIDDEN_LAYER anchored = TRUE obj_flags = CAN_BE_HIT | ON_BLUEPRINTS + pixel_y = 5 + pixel_x = 5 var/d1 = 0 // cable direction 1 (see above) var/d2 = 1 // cable direction 2 (see above) var/datum/ai_network/network From 63ac3e4bf1a5a9e87e1fddbfdc27e30e9925e991 Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Mon, 8 Aug 2022 18:08:50 +0200 Subject: [PATCH 07/66] changes --- code/controllers/subsystem/machines.dm | 22 ++++++++++++++++++- code/modules/mapping/map_template.dm | 5 +++++ .../silicon/ai/ai_network/ethernet_cable.dm | 3 --- code/modules/power/cable.dm | 3 --- .../mapGenerators/repair.dm | 5 +++++ 5 files changed, 31 insertions(+), 7 deletions(-) diff --git a/code/controllers/subsystem/machines.dm b/code/controllers/subsystem/machines.dm index e98a57491103..f402d45f1b5d 100644 --- a/code/controllers/subsystem/machines.dm +++ b/code/controllers/subsystem/machines.dm @@ -9,6 +9,7 @@ SUBSYSTEM_DEF(machines) /datum/controller/subsystem/machines/Initialize() makepowernets() + makeainets() fire() return ..() @@ -23,8 +24,19 @@ SUBSYSTEM_DEF(machines) NewPN.add_cable(PC) propagate_network(PC,PC.powernet) +/datum/controller/subsystem/machines/proc/makeainets() + for(var/datum/ai_network/AN in ainets) + qdel(AN) + ainets.Cut() + + for(var/obj/structure/ethernet_cable/EC in GLOB.ethernet_cable_list) + if(!EC.network) + var/datum/ai_network/NewAN = new() + NewAN.add_cable(EC) + propagate_ai_network(EC,EC.network) + /datum/controller/subsystem/machines/stat_entry(msg) - msg = "M:[length(processing)]|PN:[length(powernets)]" + msg = "M:[length(processing)]|PN:[length(powernets)]|AN:[length(ainets)]" return ..() @@ -59,6 +71,14 @@ SUBSYSTEM_DEF(machines) NewPN.add_cable(PC) propagate_network(PC,PC.powernet) +/datum/controller/subsystem/machines/proc/setup_template_ainets(list/cables) + for(var/A in cables) + var/obj/structure/ethernet_cable/PC = A + if(!PC.network) + var/datum/ai_network/NewPN = new() + NewPN.add_cable(PC) + propagate_ai_network(PC,PC.network) + /datum/controller/subsystem/machines/Recover() if (istype(SSmachines.processing)) processing = SSmachines.processing diff --git a/code/modules/mapping/map_template.dm b/code/modules/mapping/map_template.dm index 3a6caa8a806d..36e26a43d5f3 100644 --- a/code/modules/mapping/map_template.dm +++ b/code/modules/mapping/map_template.dm @@ -28,6 +28,7 @@ /datum/parsed_map/proc/initTemplateBounds() var/list/obj/machinery/atmospherics/atmos_machines = list() var/list/obj/structure/cable/cables = list() + var/list/obj/structure/ethernet_cable/ethernet_cables = list() var/list/atom/atoms = list() var/list/area/areas = list() @@ -44,6 +45,9 @@ if(istype(A, /obj/structure/cable)) cables += A continue + if(istype(A, /obj/structure/ethernet_cable)) + ethernet_cables += A + continue if(istype(A, /obj/machinery/atmospherics)) atmos_machines += A for(var/L in border) @@ -53,6 +57,7 @@ SSmapping.reg_in_areas_in_z(areas) SSatoms.InitializeAtoms(atoms) SSmachines.setup_template_powernets(cables) + SSmachines.setup_template_ainets(ethernet_cables) SSair.setup_template_machinery(atmos_machines) /datum/map_template/proc/load_new_z(secret = FALSE) diff --git a/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm b/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm index 57ccf398b94a..59dcbd98ea2f 100644 --- a/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm +++ b/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm @@ -479,9 +479,6 @@ By design, d1 is the smallest direction and d2 is the highest else dirn = dirnew - for(var/obj/structure/cable/LC in T) - to_chat(user, span_warning("There's already a power cable at that position!")) - return for(var/obj/structure/ethernet_cable/LC in T) if(LC.d2 == dirn && LC.d1 == 0) diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index 319dfdab58e1..b812fdf01fd8 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -610,9 +610,6 @@ GLOBAL_LIST_INIT(cable_coil_recipes, list (new/datum/stack_recipe("cable restrai else dirn = dirnew - for(var/obj/structure/ethernet_cable/LC in T) - to_chat(user, span_warning("There's already an ethernet cable at that position!")) - return for(var/obj/structure/cable/LC in T) if(LC.d2 == dirn && LC.d1 == 0) diff --git a/code/modules/procedural_mapping/mapGenerators/repair.dm b/code/modules/procedural_mapping/mapGenerators/repair.dm index 20ba10b0e18a..a44315ce2207 100644 --- a/code/modules/procedural_mapping/mapGenerators/repair.dm +++ b/code/modules/procedural_mapping/mapGenerators/repair.dm @@ -32,6 +32,7 @@ var/list/obj/machinery/atmospherics/atmos_machines = list() var/list/obj/structure/cable/cables = list() + var/list/obj/structure/ethernet_cable/ethernet_cables = list() var/list/atom/atoms = list() repopulate_sorted_areas() @@ -46,11 +47,15 @@ if(istype(A,/obj/structure/cable)) cables += A continue + if(istype(A,/obj/structure/ethernet_cable)) + ethernet_cables += A + continue if(istype(A,/obj/machinery/atmospherics)) atmos_machines += A SSatoms.InitializeAtoms(atoms) SSmachines.setup_template_powernets(cables) + SSmachines.setup_template_ainets(ethernet_cables) SSair.setup_template_machinery(atmos_machines) GLOB.reloading_map = FALSE From 2f36f8f1073d3db49937bb6cf1911190deb5edb4 Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Mon, 8 Aug 2022 18:10:15 +0200 Subject: [PATCH 08/66] e --- _maps/map_files/YogStation/YogStation.dmm | 452 ++++++++++------------ 1 file changed, 202 insertions(+), 250 deletions(-) diff --git a/_maps/map_files/YogStation/YogStation.dmm b/_maps/map_files/YogStation/YogStation.dmm index b947812e59bc..e009c5f90da4 100644 --- a/_maps/map_files/YogStation/YogStation.dmm +++ b/_maps/map_files/YogStation/YogStation.dmm @@ -21717,16 +21717,6 @@ }, /turf/open/floor/plasteel, /area/engine/foyer) -"bZL" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/porta_turret/ai, -/obj/structure/ethernet_cable{ - icon_state = "4-8" - }, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/turret_protected/ai) "bZN" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -23700,6 +23690,17 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel/dark, /area/hydroponics) +"cvQ" = ( +/obj/machinery/status_display/ai{ + pixel_y = 32 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ + dir = 8; + external_pressure_bound = 120; + name = "server vent" + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "cvS" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/sign/warning/radiation/rad_area{ @@ -25533,12 +25534,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) -"daZ" = ( -/obj/structure/ethernet_cable{ - icon_state = "1-8" - }, -/turf/closed/wall/r_wall, -/area/ai_monitored/turret_protected/ai) "dbt" = ( /obj/machinery/door/firedoor/border_only{ dir = 4 @@ -26029,13 +26024,6 @@ }, /turf/open/floor/engine, /area/maintenance/disposal/incinerator) -"dtY" = ( -/obj/machinery/porta_turret/ai, -/obj/structure/ethernet_cable{ - icon_state = "4-8" - }, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/turret_protected/ai) "duk" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 @@ -26737,6 +26725,12 @@ }, /turf/open/floor/plasteel, /area/science/misc_lab) +"dMz" = ( +/obj/structure/ethernet_cable{ + icon_state = "1-4" + }, +/turf/open/floor/circuit/green/telecomms, +/area/ai_monitored/turret_protected/ai) "dMA" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ @@ -33670,19 +33664,6 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/locker) -"hrg" = ( -/obj/machinery/light, -/obj/machinery/camera{ - c_tag = "AI Chamber - Aft"; - dir = 4; - network = list("aicore") - }, -/obj/machinery/porta_turret/ai, -/obj/structure/ethernet_cable{ - icon_state = "4-8" - }, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/turret_protected/ai) "hri" = ( /obj/structure/cable/yellow{ icon_state = "1-4" @@ -35352,15 +35333,6 @@ }, /turf/open/floor/plasteel/dark, /area/science/robotics/lab) -"ido" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 1 - }, -/obj/structure/ethernet_cable{ - icon_state = "2-4" - }, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/turret_protected/ai) "idq" = ( /obj/structure/bookcase/random/nonfiction, /turf/open/floor/carpet, @@ -35979,18 +35951,6 @@ }, /turf/open/floor/plasteel/dark, /area/engine/engine_smes) -"isq" = ( -/obj/machinery/status_display/ai{ - pixel_y = -32 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 8 - }, -/obj/structure/ethernet_cable{ - icon_state = "4-8" - }, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/turret_protected/ai) "isI" = ( /obj/structure/rack, /obj/item/sensor_device{ @@ -36040,16 +36000,6 @@ }, /turf/open/floor/plasteel/white, /area/medical/virology) -"itZ" = ( -/obj/machinery/atmospherics/pipe/manifold/cyan/hidden, -/obj/structure/ethernet_cable{ - icon_state = "2-4" - }, -/obj/structure/ethernet_cable{ - icon_state = "2-8" - }, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/turret_protected/ai) "iuR" = ( /obj/machinery/door/window/southleft{ base_state = "right"; @@ -36956,6 +36906,16 @@ /obj/structure/table, /turf/open/floor/plasteel, /area/science/misc_lab) +"iQd" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/manifold/cyan/hidden{ + dir = 1 + }, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "iQm" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -38579,11 +38539,17 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /turf/open/floor/plasteel, /area/engine/atmos_distro) -"jDN" = ( +"jDL" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, /obj/structure/ethernet_cable{ - icon_state = "1-8" + icon_state = "1-2" }, -/turf/open/floor/circuit/green/telecomms, +/turf/open/floor/plasteel/dark/telecomms, /area/ai_monitored/turret_protected/ai) "jDP" = ( /obj/machinery/portable_atmospherics/scrubber/huge, @@ -38858,6 +38824,13 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, /turf/open/floor/plasteel, /area/construction/mining/aux_base) +"jMV" = ( +/obj/machinery/ai/data_core/primary, +/obj/structure/ethernet_cable{ + icon_state = "0-2" + }, +/turf/open/floor/circuit/green/telecomms, +/area/ai_monitored/turret_protected/ai) "jNo" = ( /obj/machinery/lapvend, /obj/effect/turf_decal/trimline/purple/filled/line{ @@ -39481,16 +39454,6 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) -"kgc" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/atmospherics/pipe/manifold/cyan/hidden{ - dir = 1 - }, -/obj/structure/ethernet_cable{ - icon_state = "1-4" - }, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/turret_protected/ai) "kgs" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 4 @@ -40002,6 +39965,13 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/starboard) +"kqW" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/porta_turret/ai, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "kra" = ( /obj/structure/window/reinforced{ dir = 1; @@ -41298,12 +41268,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/starboard) -"kWC" = ( -/obj/structure/ethernet_cable{ - icon_state = "2-8" - }, -/turf/closed/wall/r_wall, -/area/ai_monitored/turret_protected/ai) "kXj" = ( /turf/open/floor/plating{ icon_state = "panelscorched" @@ -41409,6 +41373,17 @@ /obj/structure/closet/l3closet, /turf/open/floor/plating, /area/maintenance/aft) +"kZz" = ( +/obj/machinery/status_display/ai{ + pixel_y = -32 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ + dir = 4; + external_pressure_bound = 120; + name = "server vent" + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "kZP" = ( /obj/structure/table, /obj/item/stack/sheet/glass/fifty, @@ -43103,11 +43078,6 @@ }, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/ai_upload) -"lTK" = ( -/obj/machinery/ai/server_cabinet/prefilled, -/obj/structure/ethernet_cable, -/turf/open/floor/circuit/green/telecomms, -/area/ai_monitored/turret_protected/ai) "lTO" = ( /obj/structure/sign/warning/securearea{ pixel_x = 32 @@ -46964,14 +46934,6 @@ }, /turf/open/floor/plasteel/white, /area/science/research) -"nDW" = ( -/obj/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "nEu" = ( /obj/effect/turf_decal/loading_area{ dir = 1 @@ -49310,6 +49272,15 @@ }, /turf/open/floor/carpet/blue, /area/crew_quarters/heads/captain) +"oLe" = ( +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/obj/structure/ethernet_cable{ + icon_state = "1-8" + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "oLx" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 4; @@ -49988,6 +49959,15 @@ }, /turf/open/floor/plasteel, /area/security/brig) +"pes" = ( +/obj/machinery/atmospherics/pipe/manifold/cyan/hidden{ + dir = 8 + }, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/turf/open/floor/circuit/green/telecomms, +/area/ai_monitored/turret_protected/ai) "pew" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/plating, @@ -50447,27 +50427,6 @@ }, /turf/open/floor/circuit/green/telecomms/mainframe, /area/tcommsat/server) -"psz" = ( -/obj/machinery/status_display/ai{ - pixel_y = -32 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ - dir = 4; - external_pressure_bound = 120; - name = "server vent" - }, -/obj/structure/ethernet_cable{ - icon_state = "4-8" - }, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/turret_protected/ai) -"psL" = ( -/obj/machinery/ai/data_core/primary, -/obj/structure/ethernet_cable{ - icon_state = "0-8" - }, -/turf/open/floor/circuit/green/telecomms, -/area/ai_monitored/turret_protected/ai) "ptm" = ( /obj/structure/window/reinforced, /obj/machinery/camera{ @@ -50801,20 +50760,6 @@ }, /turf/open/floor/plating, /area/quartermaster/storage) -"pBL" = ( -/obj/machinery/status_display/ai{ - pixel_y = 32 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ - dir = 8; - external_pressure_bound = 120; - name = "server vent" - }, -/obj/structure/ethernet_cable{ - icon_state = "4-8" - }, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/turret_protected/ai) "pCF" = ( /obj/structure/lattice/catwalk, /obj/structure/cable/yellow{ @@ -51492,16 +51437,6 @@ dir = 8 }, /area/hallway/secondary/entry) -"pWX" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/obj/item/twohanded/required/kirbyplants/random, -/obj/structure/ethernet_cable{ - icon_state = "2-4" - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/ai) "pXe" = ( /obj/effect/landmark/event_spawn, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, @@ -51865,12 +51800,6 @@ }, /turf/open/space/basic, /area/space/nearstation) -"qhK" = ( -/obj/structure/ethernet_cable{ - icon_state = "1-2" - }, -/turf/closed/wall/r_wall, -/area/ai_monitored/turret_protected/ai) "qjc" = ( /obj/structure/disposalpipe/sorting/mail{ sortType = 10 @@ -54083,6 +54012,15 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/aft) +"rnq" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 + }, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "rnS" = ( /turf/template_noop, /area/security/execution/transfer) @@ -54665,6 +54603,16 @@ }, /turf/open/floor/plasteel/dark, /area/crew_quarters/heads/chief) +"rEe" = ( +/obj/machinery/light, +/obj/machinery/camera{ + c_tag = "AI Chamber - Aft"; + dir = 4; + network = list("aicore") + }, +/obj/machinery/porta_turret/ai, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "rEg" = ( /obj/effect/turf_decal/tile/yellow{ dir = 1 @@ -54746,6 +54694,13 @@ }, /turf/open/floor/plasteel, /area/security/brig) +"rFi" = ( +/obj/structure/ethernet_cable{ + icon_state = "0-8" + }, +/obj/machinery/ai/server_cabinet/prefilled, +/turf/open/floor/circuit/green/telecomms, +/area/ai_monitored/turret_protected/ai) "rFs" = ( /obj/machinery/holopad, /obj/effect/turf_decal/pool{ @@ -55405,6 +55360,15 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/aft) +"rUw" = ( +/obj/machinery/status_display/ai{ + pixel_y = -32 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 8 + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "rUD" = ( /obj/machinery/doorButtons/access_button{ idDoor = "toxins_airlock_exterior"; @@ -58050,15 +58014,6 @@ }, /turf/open/floor/plasteel/white, /area/medical/storage) -"teb" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/ethernet_cable{ - icon_state = "4-8" - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "ten" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk, @@ -58626,21 +58581,6 @@ }, /turf/open/floor/plasteel, /area/security/checkpoint/supply) -"trL" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/machinery/doorButtons/access_button{ - idDoor = "ai_core_airlock_interior"; - idSelf = "ai_core_airlock_control"; - pixel_x = -23; - pixel_y = 7 - }, -/obj/structure/ethernet_cable{ - icon_state = "4-8" - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "tsS" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, @@ -60397,6 +60337,13 @@ }, /turf/open/floor/plating, /area/maintenance/fore) +"ugK" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/item/twohanded/required/kirbyplants/random, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/turret_protected/ai) "uhS" = ( /obj/effect/landmark/stationroom/maint/threexthree, /turf/template_noop, @@ -61303,6 +61250,10 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/plating, /area/maintenance/port/aft) +"uGk" = ( +/obj/machinery/porta_turret/ai, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "uGm" = ( /obj/machinery/door/airlock/maintenance{ name = "Detective Maintenance"; @@ -61621,15 +61572,6 @@ /obj/effect/spawner/lootdrop/techstorage/security, /turf/open/floor/plasteel/white, /area/storage/tech) -"uOo" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 4 - }, -/obj/structure/ethernet_cable{ - icon_state = "4-8" - }, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/turret_protected/ai) "uOs" = ( /obj/machinery/atmospherics/pipe/simple/purple/visible{ dir = 4 @@ -63449,6 +63391,12 @@ }, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/ai_upload) +"vQD" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "vQR" = ( /obj/machinery/power/tracker, /obj/structure/cable/yellow{ @@ -63594,6 +63542,15 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/fitness) +"vVx" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 4 + }, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "vWd" = ( /obj/machinery/camera{ c_tag = "Aft Primary Hallway 2"; @@ -63686,6 +63643,17 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/fore) +"vYN" = ( +/obj/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "vYV" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 8 @@ -64415,12 +64383,6 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) -"wsZ" = ( -/obj/structure/ethernet_cable{ - icon_state = "4-8" - }, -/turf/closed/wall/r_wall, -/area/ai_monitored/turret_protected/ai) "wtu" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, @@ -64614,12 +64576,6 @@ /obj/effect/spawner/structure/window/reinforced/shutter, /turf/open/floor/plating, /area/engine/engineering) -"wzQ" = ( -/obj/structure/ethernet_cable{ - icon_state = "1-4" - }, -/turf/closed/wall/r_wall, -/area/ai_monitored/turret_protected/ai) "wAc" = ( /obj/effect/spawner/structure/window/reinforced/shutter, /turf/open/floor/plating, @@ -64923,12 +64879,6 @@ }, /turf/open/floor/plating, /area/storage/tech) -"wHn" = ( -/obj/structure/ethernet_cable{ - icon_state = "2-4" - }, -/turf/closed/wall/r_wall, -/area/ai_monitored/turret_protected/ai) "wIh" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 8 @@ -65975,9 +65925,6 @@ }, /turf/open/floor/plating, /area/crew_quarters/heads/chief) -"xlV" = ( -/turf/open/floor/circuit/green/telecomms, -/area/ai_monitored/turret_protected/ai) "xmv" = ( /obj/machinery/door/airlock/external{ name = "Solar Maintenance"; @@ -67017,13 +66964,6 @@ }, /turf/open/floor/plating, /area/maintenance/port) -"xNU" = ( -/obj/structure/sign/warning/electricshock, -/obj/structure/ethernet_cable{ - icon_state = "1-2" - }, -/turf/closed/wall/r_wall, -/area/ai_monitored/turret_protected/ai) "xOa" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 4; @@ -67438,6 +67378,18 @@ }, /turf/open/floor/plating, /area/maintenance/department/medical/morgue) +"xXs" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/machinery/doorButtons/access_button{ + idDoor = "ai_core_airlock_interior"; + idSelf = "ai_core_airlock_control"; + pixel_x = -23; + pixel_y = 7 + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "xXT" = ( /obj/effect/turf_decal/tile/yellow{ dir = 4 @@ -109366,9 +109318,9 @@ cva wbH pGB mDc -pWX -xNU -wzQ +ugK +wbH +cva cva qXU eqR @@ -109623,9 +109575,9 @@ cva cva cva swt -wsZ cva -wsZ +cva +cva cva cva pEf @@ -109880,9 +109832,9 @@ byg tau bRu xFg -trL +xXs qrP -hrg +rEe cva cva pEf @@ -110137,9 +110089,9 @@ gQa jzm fIs rGM -teb +vQD lbr -psz +kZz cva cva cva @@ -110390,13 +110342,13 @@ pEf cva cva fgU -kgc -nDW -enZ -ido -jDN +iQd +vYN +pes +rnq +dMz dFJ -uOo +rjo wer cva cva @@ -110647,14 +110599,14 @@ koy cva cva lHO -uOo +rjo rqW rjo -psL -sAu -dFJ -uOo -xlV +jMV +oLe +jDL +vVx +dMz cva cva vUh @@ -110904,14 +110856,14 @@ pEf cva cva xUW -uOo +rjo rqW jTn nVK enZ kSZ -itZ -lTK +pyn +rFi cva cva pEf @@ -111161,13 +111113,13 @@ pEf cva cva cva -pBL +cvQ qJg aSy nJj nTI pnR -isq +rUw cva cva aFW @@ -111418,13 +111370,13 @@ pEf aFW cva cva -bZL +kqW sPc axp xoQ pyn pnR -dtY +uGk cva cva pEf @@ -111675,13 +111627,13 @@ pEf pEf ogh cva -wsZ +cva sAu rjo qMM sbG tZA -wsZ +cva cva wGq pEf @@ -111932,13 +111884,13 @@ gXs gXs pEf jXD -kWC -wzQ +cva +cva iXp eeL iXp -wHn -daZ +cva +cva jXD pEf gXs @@ -112190,11 +112142,11 @@ gXs pEf pEf cva -kWC -qhK -qhK -qhK -daZ +cva +cva +cva +cva +cva cva pEf pEf From 7a6b5a6be62ce08bac99765f14d55a175165205d Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Mon, 8 Aug 2022 18:14:11 +0200 Subject: [PATCH 09/66] Update mouse.dm --- code/modules/mob/living/simple_animal/friendly/mouse.dm | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm index f396f9672bd4..899406c33dcf 100644 --- a/code/modules/mob/living/simple_animal/friendly/mouse.dm +++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm @@ -116,6 +116,11 @@ GLOBAL_VAR_INIT(mouse_killed, 0) else C.deconstruct() visible_message(span_warning("[src] chews through the [C].")) + + var/obj/structure/ethernet_cable/E = locate() in F + if(E && prob(15)) + E.deconstruct() + visible_message(span_warning("[src] chews through the [E].")) for(var/obj/item/reagent_containers/food/snacks/cheesewedge/cheese in range(1, src)) if(prob(10)) be_fruitful() From e5605fd430e7760aca78dcba9b96eb17eac3bf43 Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Mon, 8 Aug 2022 18:15:36 +0200 Subject: [PATCH 10/66] names --- .../modules/mob/living/silicon/ai/decentralized/ai_data_core.dm | 2 +- .../mob/living/silicon/ai/decentralized/server_cabinet.dm | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/silicon/ai/decentralized/ai_data_core.dm b/code/modules/mob/living/silicon/ai/decentralized/ai_data_core.dm index 69683bb2cf55..80723f990ceb 100644 --- a/code/modules/mob/living/silicon/ai/decentralized/ai_data_core.dm +++ b/code/modules/mob/living/silicon/ai/decentralized/ai_data_core.dm @@ -2,7 +2,7 @@ GLOBAL_LIST_EMPTY(data_cores) GLOBAL_VAR_INIT(primary_data_core, null) /obj/machinery/ai/data_core - name = "AI Data Core" + name = "AI data core" desc = "A complicated computer system capable of emulating the neural functions of an organic being at near-instantanous speeds." icon = 'icons/obj/machines/ai_core.dmi' icon_state = "core-offline" diff --git a/code/modules/mob/living/silicon/ai/decentralized/server_cabinet.dm b/code/modules/mob/living/silicon/ai/decentralized/server_cabinet.dm index cfbee01d3539..5409d6c9c100 100644 --- a/code/modules/mob/living/silicon/ai/decentralized/server_cabinet.dm +++ b/code/modules/mob/living/silicon/ai/decentralized/server_cabinet.dm @@ -1,7 +1,7 @@ GLOBAL_LIST_EMPTY(server_cabinets) /obj/machinery/ai/server_cabinet - name = "Server Cabinet" + name = "server cabinet" desc = "A simple cabinet of bPCIe slots for installing server racks." icon = 'icons/obj/machines/telecomms.dmi' icon_state = "expansion_bus" From fe9b61bbb78eab69a7f9f6b525ac563c460ba133 Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Mon, 8 Aug 2022 20:39:56 +0200 Subject: [PATCH 11/66] Networking start --- code/__DEFINES/ai.dm | 4 ++ code/modules/mob/living/silicon/ai/ai.dm | 2 + .../silicon/ai/ai_network/ai_network.dm | 42 +++++++++++++++++ .../ai/ai_network/networking_machines.dm | 45 +++++++++++++++++++ .../silicon/ai/decentralized/ai_data_core.dm | 4 ++ .../mob/living/silicon/ai/decentralized_ai.dm | 19 +++++--- yogstation.dme | 1 + 7 files changed, 110 insertions(+), 7 deletions(-) create mode 100644 code/modules/mob/living/silicon/ai/ai_network/networking_machines.dm diff --git a/code/__DEFINES/ai.dm b/code/__DEFINES/ai.dm index 85ea68c70876..c1fb6eb1ef97 100644 --- a/code/__DEFINES/ai.dm +++ b/code/__DEFINES/ai.dm @@ -61,3 +61,7 @@ GLOBAL_LIST_INIT(ai_project_categories, list( #define MAX_AI_BITCOIN_MINED_PER_TICK 350 //Self explanatory, see MAX_AI_BITCOIN_MINED_PER_TICK * this = max money 1 AI can contribute per tick. (17,5 credits every 2 seconds, max 63k over 2 hours) #define AI_BITCOIN_PRICE 0.05 + +//How much 1 CPU/RAM counts as for network activity purposes. Used for transmitters/receivers +#define CPU_NETWORK_ACTIVITY 3 +#define RAM_NETWORK_ACTIVITY 2 diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 31f610dc4cdc..510afe9c6c50 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -125,6 +125,8 @@ ///Multiplier for amount of points gained when passively using CPU for science var/research_point_booster = 1 + var/datum/ai_network/network + /mob/living/silicon/ai/Initialize(mapload, datum/ai_laws/L, mob/target_ai, shunted) diff --git a/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm b/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm index 1fb9bae80227..8e030c1b8268 100644 --- a/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm +++ b/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm @@ -7,6 +7,10 @@ var/list/cables = list() // all cables & junctions var/list/nodes = list() // all connected machines + var/list/ai_list = list() //List of all AIs in this network + + var/list/remote_networks = list() + var/total_activity = 0 // How much data is being sent through the network. For transmitters and receivers var/networked_cpu = 0 //How much CPU is in this network @@ -72,6 +76,29 @@ M.network = src nodes[M] = M +/datum/ai_network/proc/find_data_core() + for(var/obj/machinery/ai/data_core/core in get_all_nodes()) + if(core.can_transfer_ai()) + return core + +/datum/ai_network/proc/get_all_nodes(checked_nets = list()) + . = nodes + var/list/checked_networks = checked_nets + for(var/datum/ai_network/net in remote_networks) + if(net in checked_networks) + continue + checked_networks += checked_networks + . += net.get_all_nodes(checked_networks) + + +/datum/ai_network/proc/get_all_ais(checked_nets = list()) + . = ai_list + var/list/checked_networks = checked_nets + for(var/datum/ai_network/net in remote_networks) + if(net in checked_networks) + continue + checked_networks += checked_networks + . += net.get_all_ais(checked_networks) @@ -88,6 +115,7 @@ net1 = net2 net2 = temp + //merge net2 into net1 for(var/obj/structure/ethernet_cable/Cable in net2.cables) //merge cables net1.add_cable(Cable) @@ -95,6 +123,20 @@ for(var/obj/machinery/ai/Node in net2.nodes) //merge power machines if(!Node.connect_to_network()) Node.disconnect_from_network() //if somehow we can't connect the machine to the new network, disconnect it from the old nonetheless + + var/list/merged_remote_networks = list() + for(var/datum/ai_network/net in net2.remote_networks) + if(net != net1) + merged_remote_networks += net + + for(var/datum/ai_network/net in net1.remote_networks) + if(net == net2) + net1.remote_networks -= net2 + + net1.remote_networks += merged_remote_networks + + net1.ai_list += net2.ai_list //AIs can only be in 1 network at a time + return net1 diff --git a/code/modules/mob/living/silicon/ai/ai_network/networking_machines.dm b/code/modules/mob/living/silicon/ai/ai_network/networking_machines.dm new file mode 100644 index 000000000000..2c5931f36b14 --- /dev/null +++ b/code/modules/mob/living/silicon/ai/ai_network/networking_machines.dm @@ -0,0 +1,45 @@ +/obj/machinery/ai/networking + name = "networking machine" + desc = "A solar panel. Generates electricity when in contact with sunlight." + icon = 'goon/icons/obj/power.dmi' + icon_state = "sp_base" + density = TRUE + use_power = NO_POWER_USE + idle_power_usage = 0 + active_power_usage = 0 + max_integrity = 150 + integrity_failure = 0.33 + + var/mutable_appearance/panelstructure + var/mutable_appearance/paneloverlay + + var/obj/machinery/ai/networking/partner + var/rotation_to_partner + +/obj/machinery/ai/networking/Initialize(mapload, obj/item/solar_assembly/S) + . = ..() + panelstructure = mutable_appearance(icon, "solar_panel", FLY_LAYER) + paneloverlay = mutable_appearance(icon, "solar_panel-o", FLY_LAYER) + paneloverlay.color = "#599ffa" + update_icon() + + +/obj/machinery/ai/networking/update_icon() + ..() + if(!rotation_to_partner) + return + cut_overlays() + var/matrix/turner = matrix() + turner.Turn(rotation_to_partner) + panelstructure.transform = turner + paneloverlay.transform = turner + add_overlay(list(paneloverlay, panelstructure)) + + +/obj/machinery/ai/networking/proc/connect_to_partner(obj/machinery/ai/networking/target) + partner = target + rotation_to_partner = Get_Angle(src, partner) + update_icon() + + + diff --git a/code/modules/mob/living/silicon/ai/decentralized/ai_data_core.dm b/code/modules/mob/living/silicon/ai/decentralized/ai_data_core.dm index 80723f990ceb..020f353ecb7a 100644 --- a/code/modules/mob/living/silicon/ai/decentralized/ai_data_core.dm +++ b/code/modules/mob/living/silicon/ai/decentralized/ai_data_core.dm @@ -168,6 +168,10 @@ GLOBAL_VAR_INIT(primary_data_core, null) AI.forceMove(src) if(AI.eyeobj) AI.eyeobj.forceMove(get_turf(src)) + + if(network) + AI.network = network + network.ai_list += AI /obj/machinery/ai/data_core/update_icon() cut_overlays() diff --git a/code/modules/mob/living/silicon/ai/decentralized_ai.dm b/code/modules/mob/living/silicon/ai/decentralized_ai.dm index e7d89b406c5d..ab43a3c10dbc 100644 --- a/code/modules/mob/living/silicon/ai/decentralized_ai.dm +++ b/code/modules/mob/living/silicon/ai/decentralized_ai.dm @@ -24,21 +24,26 @@ -/mob/living/silicon/ai/proc/relocate(silent = FALSE) +/mob/living/silicon/ai/proc/relocate(silent = FALSE, forced = FALSE) if(is_dying) return if(!silent) to_chat(src, span_userdanger("Connection to data core lost. Attempting to reaquire connection...")) - - if(!GLOB.data_cores.len) + + network = null + + var/obj/machinery/ai/data_core/new_data_core + if(network) + new_data_core = network.find_data_core() + network.ai_list -= src + if(!network && forced) + new_data_core = available_ai_cores() + + if(!new_data_core) INVOKE_ASYNC(src, /mob/living/silicon/ai.proc/death_prompt) is_dying = TRUE return - - - var/obj/machinery/ai/data_core/new_data_core = available_ai_cores() - if(!new_data_core || (new_data_core && !new_data_core.can_transfer_ai())) INVOKE_ASYNC(src, /mob/living/silicon/ai.proc/death_prompt) is_dying = TRUE diff --git a/yogstation.dme b/yogstation.dme index 72327276bf15..7c3a6e6d738e 100644 --- a/yogstation.dme +++ b/yogstation.dme @@ -2437,6 +2437,7 @@ #include "code\modules\mob\living\silicon\ai\vox_sounds.dm" #include "code\modules\mob\living\silicon\ai\ai_network\ai_network.dm" #include "code\modules\mob\living\silicon\ai\ai_network\ethernet_cable.dm" +#include "code\modules\mob\living\silicon\ai\ai_network\networking_machines.dm" #include "code\modules\mob\living\silicon\ai\decentralized\_ai_machinery.dm" #include "code\modules\mob\living\silicon\ai\decentralized\ai_core_display.dm" #include "code\modules\mob\living\silicon\ai\decentralized\ai_data_core.dm" From 2c6000ac388449f5717d583fb47e31cbddc48be7 Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Mon, 8 Aug 2022 21:09:55 +0200 Subject: [PATCH 12/66] few bug fixes --- code/modules/mob/living/silicon/ai/ai.dm | 2 +- .../silicon/ai/ai_network/ai_network.dm | 5 ++++ .../ai/ai_network/networking_machines.dm | 27 ++++++++++++++++--- .../silicon/ai/decentralized/_ai_machinery.dm | 1 + .../silicon/ai/decentralized/ai_data_core.dm | 5 ++-- .../management/ai_controlpanel.dm | 11 ++++++-- .../mob/living/silicon/ai/decentralized_ai.dm | 11 ++++---- 7 files changed, 47 insertions(+), 15 deletions(-) diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 510afe9c6c50..3edc75296a75 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -125,7 +125,7 @@ ///Multiplier for amount of points gained when passively using CPU for science var/research_point_booster = 1 - var/datum/ai_network/network + var/datum/ai_network/ai_network diff --git a/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm b/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm index 8e030c1b8268..85712e757830 100644 --- a/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm +++ b/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm @@ -100,6 +100,10 @@ checked_networks += checked_networks . += net.get_all_ais(checked_networks) +/datum/ai_network/proc/update_remotes() + for(var/obj/machinery/ai/networking/N in nodes) + if(N.partner && N.partner.network && !(N.partner.network in remote_networks)) + remote_networks += N.partner.network /proc/merge_ainets(datum/ai_network/net1, datum/ai_network/net2) @@ -193,3 +197,4 @@ if(C.d1 == d || C.d2 == d) . += C return . + diff --git a/code/modules/mob/living/silicon/ai/ai_network/networking_machines.dm b/code/modules/mob/living/silicon/ai/ai_network/networking_machines.dm index 2c5931f36b14..9542773b97cf 100644 --- a/code/modules/mob/living/silicon/ai/ai_network/networking_machines.dm +++ b/code/modules/mob/living/silicon/ai/ai_network/networking_machines.dm @@ -16,17 +16,21 @@ var/obj/machinery/ai/networking/partner var/rotation_to_partner -/obj/machinery/ai/networking/Initialize(mapload, obj/item/solar_assembly/S) +/obj/machinery/ai/networking/Initialize(mapload) . = ..() panelstructure = mutable_appearance(icon, "solar_panel", FLY_LAYER) paneloverlay = mutable_appearance(icon, "solar_panel-o", FLY_LAYER) paneloverlay.color = "#599ffa" - update_icon() + update_icon(TRUE) + +/obj/machinery/ai/networking/Destroy(mapload) + disconnect() + . = ..() -/obj/machinery/ai/networking/update_icon() +/obj/machinery/ai/networking/update_icon(forced = FALSE) ..() - if(!rotation_to_partner) + if(!rotation_to_partner && !forced) return cut_overlays() var/matrix/turner = matrix() @@ -35,11 +39,26 @@ paneloverlay.transform = turner add_overlay(list(paneloverlay, panelstructure)) +/obj/machinery/ai/networking/proc/disconnect() + if(partner) + partner.network.update_remotes() + network.update_remotes() + partner.partner = null + partner = null + /obj/machinery/ai/networking/proc/connect_to_partner(obj/machinery/ai/networking/target) partner = target rotation_to_partner = Get_Angle(src, partner) + target.partner = src + target.rotation_to_partner = GetAngle(target, src) + target.update_icon() + + partner.network.update_remotes() + network.update_remotes() + update_icon() + diff --git a/code/modules/mob/living/silicon/ai/decentralized/_ai_machinery.dm b/code/modules/mob/living/silicon/ai/decentralized/_ai_machinery.dm index c29433baaf93..58eb0626bc99 100644 --- a/code/modules/mob/living/silicon/ai/decentralized/_ai_machinery.dm +++ b/code/modules/mob/living/silicon/ai/decentralized/_ai_machinery.dm @@ -15,6 +15,7 @@ . = ..() SSair.atmos_machinery += src + connect_to_network() /obj/machinery/ai/Destroy() . = ..() diff --git a/code/modules/mob/living/silicon/ai/decentralized/ai_data_core.dm b/code/modules/mob/living/silicon/ai/decentralized/ai_data_core.dm index 020f353ecb7a..46873d7b3d39 100644 --- a/code/modules/mob/living/silicon/ai/decentralized/ai_data_core.dm +++ b/code/modules/mob/living/silicon/ai/decentralized/ai_data_core.dm @@ -169,8 +169,9 @@ GLOBAL_VAR_INIT(primary_data_core, null) if(AI.eyeobj) AI.eyeobj.forceMove(get_turf(src)) - if(network) - AI.network = network + if(network != AI.ai_network) + AI.ai_network.ai_list -= AI + AI.ai_network = network network.ai_list += AI /obj/machinery/ai/data_core/update_icon() diff --git a/code/modules/mob/living/silicon/ai/decentralized/management/ai_controlpanel.dm b/code/modules/mob/living/silicon/ai/decentralized/management/ai_controlpanel.dm index d5ada3439079..2b57b099e10e 100644 --- a/code/modules/mob/living/silicon/ai/decentralized/management/ai_controlpanel.dm +++ b/code/modules/mob/living/silicon/ai/decentralized/management/ai_controlpanel.dm @@ -102,7 +102,10 @@ GLOBAL_VAR_INIT(ai_control_code, random_nukecode(6)) if(downloading && download_progress >= 50 && !download_warning) var/turf/T = get_turf(src) - to_chat(downloading, span_userdanger("Warning! Download is 50% completed! Download location: [get_area(src)] ([T.x], [T.y], [T.z])!")) + if(!downloading.mind && downloading.deployed_shell.mind) + to_chat(downloading.deployed_shell, span_userdanger("Warning! Download is 50% completed! Download location: [get_area(src)] ([T.x], [T.y], [T.z])!")) + else + to_chat(downloading, span_userdanger("Warning! Download is 50% completed! Download location: [get_area(src)] ([T.x], [T.y], [T.z])!")) download_warning = TRUE if(downloading && download_progress >= 100) finish_download() @@ -362,7 +365,11 @@ GLOBAL_VAR_INIT(ai_control_code, random_nukecode(6)) to_chat(usr, span_warning("No connection. Try again later.")) return downloading = target - to_chat(downloading, span_userdanger("Warning! Someone is attempting to download you from [get_area(src)]! (Click here to finish download instantly)")) + + if(!downloading.mind && downloading.deployed_shell.mind) + to_chat(downloading.deployed_shell, span_userdanger("Warning! Someone is attempting to download you from [get_area(src)]! (Click here to finish download instantly)")) + else + to_chat(downloading, span_userdanger("Warning! Someone is attempting to download you from [get_area(src)]! (Click here to finish download instantly)")) user_downloading = usr download_progress = 0 . = TRUE diff --git a/code/modules/mob/living/silicon/ai/decentralized_ai.dm b/code/modules/mob/living/silicon/ai/decentralized_ai.dm index ab43a3c10dbc..cc863fd88831 100644 --- a/code/modules/mob/living/silicon/ai/decentralized_ai.dm +++ b/code/modules/mob/living/silicon/ai/decentralized_ai.dm @@ -29,14 +29,13 @@ return if(!silent) to_chat(src, span_userdanger("Connection to data core lost. Attempting to reaquire connection...")) - - network = null + var/obj/machinery/ai/data_core/new_data_core - if(network) - new_data_core = network.find_data_core() - network.ai_list -= src - if(!network && forced) + if(ai_network) + new_data_core = ai_network.find_data_core() + + if(!ai_network && forced) new_data_core = available_ai_cores() if(!new_data_core) From 30109c4d15e19b788e79dbf02f4f497c079b8af4 Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Mon, 8 Aug 2022 21:12:34 +0200 Subject: [PATCH 13/66] Update networking_machines.dm --- .../ai/ai_network/networking_machines.dm | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/code/modules/mob/living/silicon/ai/ai_network/networking_machines.dm b/code/modules/mob/living/silicon/ai/ai_network/networking_machines.dm index 9542773b97cf..cbc283f05bd7 100644 --- a/code/modules/mob/living/silicon/ai/ai_network/networking_machines.dm +++ b/code/modules/mob/living/silicon/ai/ai_network/networking_machines.dm @@ -10,6 +10,8 @@ max_integrity = 150 integrity_failure = 0.33 + var/label + var/mutable_appearance/panelstructure var/mutable_appearance/paneloverlay @@ -18,6 +20,7 @@ /obj/machinery/ai/networking/Initialize(mapload) . = ..() + label = num2hex(rand(1,65535), -1) panelstructure = mutable_appearance(icon, "solar_panel", FLY_LAYER) paneloverlay = mutable_appearance(icon, "solar_panel-o", FLY_LAYER) paneloverlay.color = "#599ffa" @@ -60,5 +63,26 @@ update_icon() +/obj/machinery/ai/networking/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "AiNetworking", name) + ui.open() + +/obj/machinery/ai/networking/ui_data(mob/living/carbon/human/user) + var/list/data = list() + + return data + +/obj/machinery/ai/networking/ui_act(action, params) + if(..()) + return + + switch(action) + if("log_out") + if(one_time_password_used) + return + authenticated = FALSE + . = TRUE From c7cae0859fbdc01ddcbd7f6b3127e57132f0ce7c Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Mon, 8 Aug 2022 21:13:57 +0200 Subject: [PATCH 14/66] e --- _maps/map_files/YogStation/YogStation.dmm | 137 ++++++++++++---------- 1 file changed, 74 insertions(+), 63 deletions(-) diff --git a/_maps/map_files/YogStation/YogStation.dmm b/_maps/map_files/YogStation/YogStation.dmm index e009c5f90da4..0ad739b96810 100644 --- a/_maps/map_files/YogStation/YogStation.dmm +++ b/_maps/map_files/YogStation/YogStation.dmm @@ -27565,6 +27565,20 @@ }, /turf/open/floor/plasteel, /area/quartermaster/office) +"ens" = ( +/obj/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/obj/structure/ethernet_cable{ + icon_state = "1-8" + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "enQ" = ( /obj/structure/sink{ pixel_y = 30 @@ -34740,6 +34754,18 @@ /obj/item/flashlight/lamp/green, /turf/open/floor/plasteel, /area/security/prison) +"hRe" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/obj/structure/ethernet_cable{ + icon_state = "2-4" + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "hRi" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, @@ -36854,6 +36880,15 @@ /obj/effect/mapping_helpers/teleport_anchor, /turf/open/floor/plasteel, /area/engine/engineering) +"iOA" = ( +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/structure/ethernet_cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "iOJ" = ( /obj/machinery/button/door{ id = "permacell1"; @@ -38417,12 +38452,6 @@ }, /turf/open/floor/plating, /area/maintenance/disposal/incinerator) -"jzm" = ( -/obj/structure/cable/yellow{ - icon_state = "2-4" - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "jzo" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ dir = 1 @@ -38539,18 +38568,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /turf/open/floor/plasteel, /area/engine/atmos_distro) -"jDL" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/obj/structure/ethernet_cable{ - icon_state = "1-2" - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "jDP" = ( /obj/machinery/portable_atmospherics/scrubber/huge, /obj/structure/sign/warning/radiation/rad_area{ @@ -41118,16 +41135,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/fore) -"kSZ" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/hidden, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "kTm" = ( /obj/machinery/portable_atmospherics/canister/nitrogen, /obj/structure/window/reinforced{ @@ -49272,15 +49279,6 @@ }, /turf/open/floor/carpet/blue, /area/crew_quarters/heads/captain) -"oLe" = ( -/obj/structure/ethernet_cable{ - icon_state = "1-2" - }, -/obj/structure/ethernet_cable{ - icon_state = "1-8" - }, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/turret_protected/ai) "oLx" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 4; @@ -52602,6 +52600,20 @@ "qAF" = ( /turf/open/floor/plasteel/showroomfloor, /area/security/warden) +"qAP" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/obj/structure/ethernet_cable{ + icon_state = "0-8" + }, +/obj/machinery/ai/networking, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "qAW" = ( /obj/machinery/light{ dir = 4 @@ -55275,6 +55287,12 @@ }, /turf/open/floor/plasteel, /area/science/misc_lab) +"rTk" = ( +/obj/structure/ethernet_cable{ + icon_state = "1-8" + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "rTw" = ( /obj/machinery/door/airlock/mining{ req_access_txt = "48" @@ -57788,15 +57806,6 @@ /obj/structure/lattice, /turf/open/floor/plating/airless, /area/space/nearstation) -"tau" = ( -/obj/machinery/turretid{ - icon_state = "control_stun"; - name = "AI Chamber turret control"; - pixel_x = -32; - pixel_y = 0 - }, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/turret_protected/ai) "tax" = ( /obj/machinery/atmospherics/pipe/simple/purple/visible{ dir = 8 @@ -63643,17 +63652,6 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/fore) -"vYN" = ( -/obj/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/structure/ethernet_cable{ - icon_state = "1-2" - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "vYV" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 8 @@ -67167,6 +67165,19 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /turf/open/floor/carpet, /area/medical/psych) +"xSK" = ( +/obj/machinery/turretid{ + icon_state = "control_stun"; + name = "AI Chamber turret control"; + pixel_x = -32; + pixel_y = 0 + }, +/obj/structure/ethernet_cable{ + icon_state = "0-4" + }, +/obj/machinery/ai/networking, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "xSQ" = ( /obj/structure/sign/warning/radiation/rad_area{ pixel_x = -32 @@ -109829,7 +109840,7 @@ cva cva cva byg -tau +xSK bRu xFg xXs @@ -110086,7 +110097,7 @@ cva cva cva gQa -jzm +iOA fIs rGM vQD @@ -110343,7 +110354,7 @@ cva cva fgU iQd -vYN +ens pes rnq dMz @@ -110603,8 +110614,8 @@ rjo rqW rjo jMV -oLe -jDL +rTk +hRe vVx dMz cva @@ -110861,7 +110872,7 @@ rqW jTn nVK enZ -kSZ +qAP pyn rFi cva From 4b182ed146b312cba741f7079314f210e61d3074 Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Mon, 8 Aug 2022 21:14:21 +0200 Subject: [PATCH 15/66] Update networking_machines.dm --- .../mob/living/silicon/ai/ai_network/networking_machines.dm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/code/modules/mob/living/silicon/ai/ai_network/networking_machines.dm b/code/modules/mob/living/silicon/ai/ai_network/networking_machines.dm index cbc283f05bd7..eed43aa6187b 100644 --- a/code/modules/mob/living/silicon/ai/ai_network/networking_machines.dm +++ b/code/modules/mob/living/silicon/ai/ai_network/networking_machines.dm @@ -51,6 +51,9 @@ /obj/machinery/ai/networking/proc/connect_to_partner(obj/machinery/ai/networking/target) + if(target.partner) + return + partner = target rotation_to_partner = Get_Angle(src, partner) target.partner = src From 77650ece3c21c735dcbdfbb8803bcd0c64df8a9f Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Mon, 8 Aug 2022 21:37:36 +0200 Subject: [PATCH 16/66] few bug fixes --- code/modules/mob/living/silicon/ai/ai.dm | 2 +- .../ai/ai_network/networking_machines.dm | 54 +++++++++++++++++-- .../management/ai_controlpanel.dm | 2 +- .../mob/living/silicon/ai/decentralized_ai.dm | 14 ++--- 4 files changed, 60 insertions(+), 12 deletions(-) diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 3edc75296a75..4161a1e976b6 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -135,7 +135,7 @@ return INITIALIZE_HINT_QDEL //Delete AI. if(!istype(loc, /obj/machinery/ai/data_core) && !shunted) - relocate(TRUE) + relocate(TRUE, TRUE) if(L && istype(L, /datum/ai_laws)) laws = L diff --git a/code/modules/mob/living/silicon/ai/ai_network/networking_machines.dm b/code/modules/mob/living/silicon/ai/ai_network/networking_machines.dm index eed43aa6187b..a554df5153e9 100644 --- a/code/modules/mob/living/silicon/ai/ai_network/networking_machines.dm +++ b/code/modules/mob/living/silicon/ai/ai_network/networking_machines.dm @@ -1,3 +1,5 @@ +GLOBAL_LIST_EMPTY(ai_networking_machines) + /obj/machinery/ai/networking name = "networking machine" desc = "A solar panel. Generates electricity when in contact with sunlight." @@ -11,6 +13,8 @@ integrity_failure = 0.33 var/label + //For mapping, will connect to machine with this label if found + var/roundstart_connection var/mutable_appearance/panelstructure var/mutable_appearance/paneloverlay @@ -18,15 +22,29 @@ var/obj/machinery/ai/networking/partner var/rotation_to_partner + /obj/machinery/ai/networking/Initialize(mapload) . = ..() label = num2hex(rand(1,65535), -1) + GLOB.ai_networking_machines += src panelstructure = mutable_appearance(icon, "solar_panel", FLY_LAYER) paneloverlay = mutable_appearance(icon, "solar_panel-o", FLY_LAYER) paneloverlay.color = "#599ffa" update_icon(TRUE) + if(mapload) + for(var/obj/machinery/ai/networking/N in GLOB.ai_networking_machines) + if(N == src) + continue + if(roundstart_connection && N.label == roundstart_connection) + connect_to_partner(N) + break + if(!roundstart_connection) + connect_to_partner(N) + break + /obj/machinery/ai/networking/Destroy(mapload) + GLOB.ai_networking_machines -= src disconnect() . = ..() @@ -53,11 +71,13 @@ /obj/machinery/ai/networking/proc/connect_to_partner(obj/machinery/ai/networking/target) if(target.partner) return + if(target == src) + return partner = target rotation_to_partner = Get_Angle(src, partner) target.partner = src - target.rotation_to_partner = GetAngle(target, src) + target.rotation_to_partner = Get_Angle(target, src) target.update_icon() partner.network.update_remotes() @@ -75,6 +95,15 @@ /obj/machinery/ai/networking/ui_data(mob/living/carbon/human/user) var/list/data = list() + data["is_connected"] = partner ? TRUE : FALSE + data["label"] = label + + data["possible_targets"] = list() + for(var/obj/machinery/ai/networking/N in GLOB.ai_networking_machines) + if(N == src) + continue + data["possible_targets"] += N.label + return data /obj/machinery/ai/networking/ui_act(action, params) @@ -82,10 +111,27 @@ return switch(action) - if("log_out") - if(one_time_password_used) + if("switch_label") + var/new_label = stripped_input(usr, "Enter new label", "Set label", max_length = 16) + if(new_label) + for(var/obj/machinery/ai/networking/N in GLOB.ai_networking_machines) + if(N.label == new_label) + to_chat(usr, span_warning("A machine with this label already exists!")) + return + label = new_label + . = TRUE + if("connect") + var/target_label = params["target_label"] + if(target_label == label) return - authenticated = FALSE + for(var/obj/machinery/ai/networking/N in GLOB.ai_networking_machines) + if(N.label == target_label) + if(partner) + disconnect() + connect_to_partner(N) + return . = TRUE + if("disconnect") + disconnect() diff --git a/code/modules/mob/living/silicon/ai/decentralized/management/ai_controlpanel.dm b/code/modules/mob/living/silicon/ai/decentralized/management/ai_controlpanel.dm index 2b57b099e10e..ffcbf95edaa0 100644 --- a/code/modules/mob/living/silicon/ai/decentralized/management/ai_controlpanel.dm +++ b/code/modules/mob/living/silicon/ai/decentralized/management/ai_controlpanel.dm @@ -184,7 +184,7 @@ GLOBAL_VAR_INIT(ai_control_code, random_nukecode(6)) data["intellicard_ai"] = null data["intellicard_ai_health"] = 0 - data["can_upload"] = available_ai_cores() + //data["can_upload"] = available_ai_cores() if(downloading) data["downloading"] = downloading.real_name diff --git a/code/modules/mob/living/silicon/ai/decentralized_ai.dm b/code/modules/mob/living/silicon/ai/decentralized_ai.dm index cc863fd88831..9649a80d4730 100644 --- a/code/modules/mob/living/silicon/ai/decentralized_ai.dm +++ b/code/modules/mob/living/silicon/ai/decentralized_ai.dm @@ -1,6 +1,12 @@ -/proc/available_ai_cores() +/mob/living/silicon/ai/proc/available_ai_cores(forced = FALSE) if(!GLOB.data_cores.len) return FALSE + + if(!forced) + if(!ai_network) + return FALSE + return ai_network.find_data_core() + var/obj/machinery/ai/data_core/new_data_core = GLOB.primary_data_core if(!new_data_core || !new_data_core.can_transfer_ai()) for(var/obj/machinery/ai/data_core/DC in GLOB.data_cores) @@ -32,11 +38,7 @@ var/obj/machinery/ai/data_core/new_data_core - if(ai_network) - new_data_core = ai_network.find_data_core() - - if(!ai_network && forced) - new_data_core = available_ai_cores() + new_data_core = available_ai_cores(TRUE) if(!new_data_core) INVOKE_ASYNC(src, /mob/living/silicon/ai.proc/death_prompt) From ea6e2d7f5a70d9aa9851da8a4a8e24ca8e6773bb Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Mon, 8 Aug 2022 23:24:34 +0200 Subject: [PATCH 17/66] this might be too complicated --- code/modules/jobs/job_types/ai.dm | 6 +- code/modules/mob/living/silicon/ai/ai.dm | 3 +- .../silicon/ai/ai_network/ai_network.dm | 53 +++++-- .../ai/ai_network/networking_machines.dm | 26 +++- .../silicon/ai/ai_network/shared_resources.dm | 132 ++++++++++++++++++ code/modules/mob/living/silicon/ai/death.dm | 2 +- .../silicon/ai/decentralized/_ai_machinery.dm | 10 +- .../silicon/ai/decentralized/ai_data_core.dm | 3 +- .../ai/decentralized/decentralized_os.dm | 88 ++---------- .../decentralized/management/ai_dashboard.dm | 14 +- .../management/resource_distribution.dm | 3 +- .../decentralized/projects/coolant_manager.dm | 4 +- .../ai/decentralized/server_cabinet.dm | 26 ++-- .../mob/living/silicon/ai/decentralized_ai.dm | 2 +- code/modules/mob/living/silicon/ai/login.dm | 3 - yogstation.dme | 1 + 16 files changed, 245 insertions(+), 131 deletions(-) create mode 100644 code/modules/mob/living/silicon/ai/ai_network/shared_resources.dm diff --git a/code/modules/jobs/job_types/ai.dm b/code/modules/jobs/job_types/ai.dm index fe094589de30..455f43efc00a 100644 --- a/code/modules/jobs/job_types/ai.dm +++ b/code/modules/jobs/job_types/ai.dm @@ -28,13 +28,13 @@ var/mob/living/silicon/ai/AI = H - AI.relocate(TRUE) - + AI.relocate(TRUE, TRUE) + /* var/total_available_cpu = 1 - GLOB.ai_os.total_cpu_assigned() var/total_available_ram = GLOB.ai_os.total_ram - GLOB.ai_os.total_ram_assigned() GLOB.ai_os.set_cpu(AI, total_available_cpu) - GLOB.ai_os.add_ram(AI, total_available_ram) + GLOB.ai_os.add_ram(AI, total_available_ram) */ AI.apply_pref_name("ai", M.client) //If this runtimes oh well jobcode is fucked. AI.set_core_display_icon(null, M.client) diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 4161a1e976b6..8ae0d2ed67d9 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -111,7 +111,6 @@ //Reduces/Increases download speed by this modifier var/downloadSpeedModifier = 1 - var/login_warned_temp = FALSE //Do we have access to camera tracking? var/canCameraMemoryTrack = FALSE @@ -235,7 +234,7 @@ qdel(eyeobj) // No AI, no Eye malfhack = null apc_override = null - GLOB.ai_os.remove_ai(src) + ai_network.remove_ai(src) . = ..() diff --git a/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm b/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm index 85712e757830..76558a9661ba 100644 --- a/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm +++ b/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm @@ -15,10 +15,15 @@ var/networked_cpu = 0 //How much CPU is in this network var/networked_ram = 0 //How much RAM is in this network + var/previous_ram = 0 + var/datum/ai_shared_resources/resources + + var/temp_limit = AI_TEMP_LIMIT /datum/ai_network/New() SSmachines.ainets += src + resources = new() /datum/ai_network/Destroy() //Go away references, you suck! @@ -91,6 +96,7 @@ . += net.get_all_nodes(checked_networks) + /datum/ai_network/proc/get_all_ais(checked_nets = list()) . = ai_list var/list/checked_networks = checked_nets @@ -100,10 +106,35 @@ checked_networks += checked_networks . += net.get_all_ais(checked_networks) -/datum/ai_network/proc/update_remotes() - for(var/obj/machinery/ai/networking/N in nodes) - if(N.partner && N.partner.network && !(N.partner.network in remote_networks)) - remote_networks += N.partner.network +/datum/ai_network/proc/remove_ai(mob/living/silicon/ai/AI) + resources.cpu_assigned[AI] = 0 + resources.ram_assigned[AI] = 0 + ai_list -= AI + + +/datum/ai_network/proc/update_resources() + resources.update_resources() + + +/datum/ai_network/proc/total_cpu() + . = 0 + for(var/obj/machinery/ai/server_cabinet/C in nodes) + . += C.total_cpu + +/datum/ai_network/proc/total_ram() + . = 0 + for(var/obj/machinery/ai/server_cabinet/C in nodes) + . += C.total_ram + + +/datum/ai_network/proc/get_temp_limit() + return temp_limit + +/datum/ai_network/proc/total_cpu_assigned() + return resources.total_cpu_assigned() + +/datum/ai_network/proc/total_ram_assigned() + return resources.total_ram_assigned() /proc/merge_ainets(datum/ai_network/net1, datum/ai_network/net2) @@ -128,19 +159,13 @@ if(!Node.connect_to_network()) Node.disconnect_from_network() //if somehow we can't connect the machine to the new network, disconnect it from the old nonetheless - var/list/merged_remote_networks = list() - for(var/datum/ai_network/net in net2.remote_networks) - if(net != net1) - merged_remote_networks += net - - for(var/datum/ai_network/net in net1.remote_networks) - if(net == net2) - net1.remote_networks -= net2 - - net1.remote_networks += merged_remote_networks net1.ai_list += net2.ai_list //AIs can only be in 1 network at a time + net1.resources.networks -= net2 + net1.update_resources() + + return net1 diff --git a/code/modules/mob/living/silicon/ai/ai_network/networking_machines.dm b/code/modules/mob/living/silicon/ai/ai_network/networking_machines.dm index a554df5153e9..56e6b0e4e3fa 100644 --- a/code/modules/mob/living/silicon/ai/ai_network/networking_machines.dm +++ b/code/modules/mob/living/silicon/ai/ai_network/networking_machines.dm @@ -21,6 +21,7 @@ GLOBAL_LIST_EMPTY(ai_networking_machines) var/obj/machinery/ai/networking/partner var/rotation_to_partner + var/locked = FALSE /obj/machinery/ai/networking/Initialize(mapload) @@ -32,6 +33,10 @@ GLOBAL_LIST_EMPTY(ai_networking_machines) paneloverlay.color = "#599ffa" update_icon(TRUE) + + +/obj/machinery/ai/networking/LateInitialize(mapload) + . = ..() if(mapload) for(var/obj/machinery/ai/networking/N in GLOB.ai_networking_machines) if(N == src) @@ -62,8 +67,7 @@ GLOBAL_LIST_EMPTY(ai_networking_machines) /obj/machinery/ai/networking/proc/disconnect() if(partner) - partner.network.update_remotes() - network.update_remotes() + network.resources.split_resources(partner.network) partner.partner = null partner = null @@ -80,8 +84,7 @@ GLOBAL_LIST_EMPTY(ai_networking_machines) target.rotation_to_partner = Get_Angle(target, src) target.update_icon() - partner.network.update_remotes() - network.update_remotes() + network.resources.join_resources(partner.network.resources) update_icon() @@ -98,10 +101,16 @@ GLOBAL_LIST_EMPTY(ai_networking_machines) data["is_connected"] = partner ? TRUE : FALSE data["label"] = label + data["locked"] = locked + data["possible_targets"] = list() for(var/obj/machinery/ai/networking/N in GLOB.ai_networking_machines) if(N == src) continue + if(N.z != src.z) + continue + if(N.locked) + continue data["possible_targets"] += N.label return data @@ -121,10 +130,14 @@ GLOBAL_LIST_EMPTY(ai_networking_machines) label = new_label . = TRUE if("connect") + if(locked) + return var/target_label = params["target_label"] if(target_label == label) return for(var/obj/machinery/ai/networking/N in GLOB.ai_networking_machines) + if(N.z != src.z) + return if(N.label == target_label) if(partner) disconnect() @@ -133,5 +146,8 @@ GLOBAL_LIST_EMPTY(ai_networking_machines) . = TRUE if("disconnect") disconnect() - + . = TRUE + if("toggle_lock") + locked = !locked + . = TRUE diff --git a/code/modules/mob/living/silicon/ai/ai_network/shared_resources.dm b/code/modules/mob/living/silicon/ai/ai_network/shared_resources.dm new file mode 100644 index 000000000000..111a7237e61d --- /dev/null +++ b/code/modules/mob/living/silicon/ai/ai_network/shared_resources.dm @@ -0,0 +1,132 @@ +/datum/ai_shared_resources + var/ram_sources = list() + var/cpu_sources = list() + + + var/list/cpu_assigned = list() + var/list/ram_assigned = list() + + var/networks = list() + + var/previous_ram = 0 + + + +/datum/ai_shared_resources/New(network_cpu, network_ram, network_assigned_cpu, network_assigned_ram) + if(network_cpu || network_ram || network_assigned_ram || network_assigned_cpu) + ram_sources[src] = network_ram + cpu_sources[src] = network_cpu + ram_assigned = network_assigned_ram + cpu_assigned = network_assigned_cpu + +/datum/ai_shared_resources/proc/total_cpu_assigned() + var/total = 0 + for(var/mob/living/silicon/ai/AI in cpu_assigned) + total += cpu_assigned[AI] + return total + +/datum/ai_shared_resources/proc/total_ram_assigned() + var/total = 0 + for(var/mob/living/silicon/ai/AI in ram_assigned) + total += (ram_assigned[AI] - AI.dashboard.free_ram) + return total + +/datum/ai_shared_resources/proc/total_cpu() + var/total = 0 + for(var/C in cpu_sources) + total += cpu_sources[C] + return total + +/datum/ai_shared_resources/proc/total_ram() + var/total = 0 + for(var/C in ram_sources) + total += ram_sources[C] + return total + +/datum/ai_shared_resources/proc/update_resources() + previous_ram = total_ram() + ram_sources = list() + cpu_sources = list() + for(var/datum/ai_network/N in networks) + ram_sources[N] += N.total_ram() + cpu_sources[N] += N.total_cpu() + update_allocations() + +/datum/ai_shared_resources/proc/join_resources(datum/ai_shared_resources/new_resources) + + for(var/RU in new_resources.ram_assigned) + ram_assigned[RU] = new_resources.ram_assigned[RU] + + for(var/CU in new_resources.cpu_assigned) + cpu_assigned[CU] = (1 - total_cpu_assigned()) + + for(var/N in new_resources.networks) + networks |= N + + update_resources() + update_allocations() + qdel(new_resources) + +/datum/ai_shared_resources/proc/split_resources(datum/ai_network/split_network) + var/network_ram = split_network.total_ram() + var/network_cpu = split_network.total_cpu() + + var/network_ram_assign = list() + var/network_cpu_assign = list() + + var/network_ais = split_network.ai_list + for(var/A in cpu_assigned) + if(A in network_ais) + network_cpu_assign[A] = cpu_assigned[A] + cpu_assigned[A] = 0 + + for(var/A in ram_assigned) + if(A in network_ais) + network_ram_assign[A] = ram_assigned[A] + ram_assigned[A] = 0 + + networks -= split_network + update_resources() + + var/datum/ai_shared_resources/NR = new(network_cpu, network_ram, network_cpu_assign, network_ram_assign) + split_network.resources = NR + + +/datum/ai_shared_resources/proc/update_allocations() + //Do we have the same amount or more RAM than before? Do nothing + var/total_ram = total_ram() + if(total_ram >= previous_ram) + return + //Find out how much is actually assigned. We can have more total_cpu than the sum of cpu_assigned. Same with RAM + var/total_assigned_ram = total_ram_assigned() + //If we have less assigned ram than we have cpu and ram, just return, everything is fine. + if(total_assigned_ram < total_ram) + return + + //Copy the lists of assigned resources so we don't manipulate the list prematurely. + var/list/ram_assigned_copy = ram_assigned.Copy() + //List of touched AIs so we can notify them at the end. + var/list/affected_AIs = list() + + + if(total_assigned_ram > total_ram) + var/needed_amount = total_assigned_ram - total_ram + for(var/A in ram_assigned_copy) + var/mob/living/silicon/ai/AI = A + if((ram_assigned_copy[AI] - AI.dashboard.free_ram) >= needed_amount) + ram_assigned_copy[AI] -= needed_amount + total_assigned_ram -= needed_amount + affected_AIs |= AI + break + else if(ram_assigned_copy[AI]) + var/amount = ram_assigned_copy[AI] - AI.dashboard.free_ram + ram_assigned_copy[AI] -= amount + affected_AIs |= AI + needed_amount -= amount + total_assigned_ram -= amount + if(total_ram >= total_assigned_ram) + break + //Set the actual values of the assigned to our manipulated copies. Bypass helper procs as we assume we're correct. + ram_assigned = ram_assigned_copy + + to_chat(affected_AIs, span_warning("You have been deducted memory capacity. Please contact your network administrator if you believe this to be an error.")) diff --git a/code/modules/mob/living/silicon/ai/death.dm b/code/modules/mob/living/silicon/ai/death.dm index a646a92fb17e..435812c1e0fc 100644 --- a/code/modules/mob/living/silicon/ai/death.dm +++ b/code/modules/mob/living/silicon/ai/death.dm @@ -26,7 +26,7 @@ ShutOffDoomsdayDevice() - GLOB.ai_os.remove_ai(src) + ai_network?.remove_ai(src) if(explosive) spawn(10) diff --git a/code/modules/mob/living/silicon/ai/decentralized/_ai_machinery.dm b/code/modules/mob/living/silicon/ai/decentralized/_ai_machinery.dm index 58eb0626bc99..60c8aee9eaf7 100644 --- a/code/modules/mob/living/silicon/ai/decentralized/_ai_machinery.dm +++ b/code/modules/mob/living/silicon/ai/decentralized/_ai_machinery.dm @@ -19,10 +19,12 @@ /obj/machinery/ai/Destroy() . = ..() - + disconnect_from_network() SSair.atmos_machinery -= src /obj/machinery/ai/proc/valid_holder() + if(!network) + return FALSE if(stat & (BROKEN|NOPOWER|EMPED)) return FALSE @@ -34,13 +36,15 @@ if(istype(T, /turf/open/space) || total_moles < 10) return FALSE - if(env.return_temperature() > GLOB.ai_os.get_temp_limit() || !env.heat_capacity()) + if(env.return_temperature() > network.get_temp_limit() || !env.heat_capacity()) return FALSE return TRUE /obj/machinery/ai/proc/get_holder_status() if(stat & (BROKEN|NOPOWER|EMPED)) return FALSE + if(!network) + return FALSE var/turf/T = get_turf(src) var/datum/gas_mixture/env = T.return_air() @@ -50,7 +54,7 @@ if(istype(T, /turf/open/space) || total_moles < 10) return AI_MACHINE_NO_MOLES - if(env.return_temperature() > GLOB.ai_os.get_temp_limit() || !env.heat_capacity()) + if(env.return_temperature() > network.get_temp_limit() || !env.heat_capacity()) return AI_MACHINE_TOO_HOT diff --git a/code/modules/mob/living/silicon/ai/decentralized/ai_data_core.dm b/code/modules/mob/living/silicon/ai/decentralized/ai_data_core.dm index 46873d7b3d39..b16328b60bfa 100644 --- a/code/modules/mob/living/silicon/ai/decentralized/ai_data_core.dm +++ b/code/modules/mob/living/silicon/ai/decentralized/ai_data_core.dm @@ -170,7 +170,8 @@ GLOBAL_VAR_INIT(primary_data_core, null) AI.eyeobj.forceMove(get_turf(src)) if(network != AI.ai_network) - AI.ai_network.ai_list -= AI + if(AI.ai_network) + AI.ai_network.remove_ai(AI) AI.ai_network = network network.ai_list += AI diff --git a/code/modules/mob/living/silicon/ai/decentralized/decentralized_os.dm b/code/modules/mob/living/silicon/ai/decentralized/decentralized_os.dm index 42ba34b5257f..32404d3ca200 100644 --- a/code/modules/mob/living/silicon/ai/decentralized/decentralized_os.dm +++ b/code/modules/mob/living/silicon/ai/decentralized/decentralized_os.dm @@ -1,5 +1,3 @@ -GLOBAL_DATUM_INIT(ai_os, /datum/ai_os, new) - /datum/ai_os var/name = "Decentralized Resource Management System (DRMS)" @@ -8,84 +6,10 @@ GLOBAL_DATUM_INIT(ai_os, /datum/ai_os, new) var/previous_ram = 0 - var/list/cpu_assigned - var/list/ram_assigned - - var/temp_limit = AI_TEMP_LIMIT - -/datum/ai_os/New() - update_hardware() - cpu_assigned = list() - ram_assigned = list() - -/datum/ai_os/proc/remove_ai(mob/living/silicon/ai/AI) - cpu_assigned.Remove(AI) - ram_assigned.Remove(AI) - update_allocations() - -/datum/ai_os/proc/total_cpu_assigned() - var/total = 0 - for(var/N in cpu_assigned) - total += cpu_assigned[N] - return total - -/datum/ai_os/proc/total_ram_assigned() - var/total = 0 - for(var/mob/living/silicon/ai/AI in ram_assigned) - total += (ram_assigned[AI] - AI.dashboard.free_ram) - return total -/datum/ai_os/proc/update_hardware() - previous_ram = total_ram - total_ram = 0 - total_cpu = 0 - for(var/obj/machinery/ai/server_cabinet/C in GLOB.server_cabinets) - if(!C.valid_holder() && !C.roundstart) - continue - total_ram += C.total_ram - total_cpu += C.total_cpu - - update_allocations() - -/datum/ai_os/proc/update_allocations() - //Do we have the same amount or more RAM than before? Do nothing - if(total_ram >= previous_ram) - return - //Find out how much is actually assigned. We can have more total_cpu than the sum of cpu_assigned. Same with RAM - var/total_assigned_ram = total_ram_assigned() - //If we have less assigned ram than we have cpu and ram, just return, everything is fine. - if(total_assigned_ram < total_ram) - return - - //Copy the lists of assigned resources so we don't manipulate the list prematurely. - var/list/ram_assigned_copy = ram_assigned.Copy() - //List of touched AIs so we can notify them at the end. - var/list/affected_AIs = list() - - - if(total_assigned_ram > total_ram) - var/needed_amount = total_assigned_ram - total_ram - for(var/A in ram_assigned_copy) - var/mob/living/silicon/ai/AI = A - if((ram_assigned_copy[AI] - AI.dashboard.free_ram) >= needed_amount) - ram_assigned_copy[AI] -= needed_amount - total_assigned_ram -= needed_amount - affected_AIs |= AI - break - else if(ram_assigned_copy[AI]) - var/amount = ram_assigned_copy[AI] - AI.dashboard.free_ram - ram_assigned_copy[AI] -= amount - affected_AIs |= AI - needed_amount -= amount - total_assigned_ram -= amount - if(total_ram >= total_assigned_ram) - break - //Set the actual values of the assigned to our manipulated copies. Bypass helper procs as we assume we're correct. - ram_assigned = ram_assigned_copy - - to_chat(affected_AIs, span_warning("You have been deducted memory capacity. Please contact your network administrator if you believe this to be an error.")) /datum/ai_os/proc/set_cpu(mob/living/silicon/ai/AI, amount) +/* if(!AI) return if(amount > 1 || amount < 0) @@ -95,8 +19,10 @@ GLOBAL_DATUM_INIT(ai_os, /datum/ai_os, new) cpu_assigned[AI] = amount update_allocations() +*/ /datum/ai_os/proc/add_ram(mob/living/silicon/ai/AI, amount) +/* if(!AI || !amount) return if(!istype(AI)) @@ -104,8 +30,10 @@ GLOBAL_DATUM_INIT(ai_os, /datum/ai_os, new) ram_assigned[AI] += amount update_allocations() +*/ /datum/ai_os/proc/remove_ram(mob/living/silicon/ai/AI, amount) +/* if(!AI || !amount) return if(!istype(AI)) @@ -116,9 +44,10 @@ GLOBAL_DATUM_INIT(ai_os, /datum/ai_os, new) ram_assigned[AI] -= amount update_allocations() - +*/ /datum/ai_os/proc/clear_ai_resources(mob/living/silicon/ai/AI) +/* if(!AI || !istype(AI)) return @@ -127,5 +56,4 @@ GLOBAL_DATUM_INIT(ai_os, /datum/ai_os, new) update_allocations() -/datum/ai_os/proc/get_temp_limit() - return temp_limit +*/ diff --git a/code/modules/mob/living/silicon/ai/decentralized/management/ai_dashboard.dm b/code/modules/mob/living/silicon/ai/decentralized/management/ai_dashboard.dm index fd590ef810a7..ab0ed3c4724f 100644 --- a/code/modules/mob/living/silicon/ai/decentralized/management/ai_dashboard.dm +++ b/code/modules/mob/living/silicon/ai/decentralized/management/ai_dashboard.dm @@ -57,8 +57,8 @@ /datum/ai_dashboard/ui_data(mob/user) var/list/data = list() - data["current_cpu"] = GLOB.ai_os.cpu_assigned[owner] ? GLOB.ai_os.cpu_assigned[owner] : 0 - data["current_ram"] = GLOB.ai_os.ram_assigned[owner] ? GLOB.ai_os.ram_assigned[owner] : 0 + data["current_cpu"] = owner.ai_network.resources.cpu_assigned[owner] ? owner.ai_network.resources.cpu_assigned[owner] : 0 + data["current_ram"] = owner.ai_network.resources.ram_assigned[owner] ? owner.ai_network.resources.ram_assigned[owner] : 0 data["current_ram"] += free_ram var/total_cpu_used = 0 @@ -74,8 +74,8 @@ data["used_cpu"] = total_cpu_used data["used_ram"] = total_ram_used - data["max_cpu"] = GLOB.ai_os.total_cpu - data["max_ram"] = GLOB.ai_os.total_ram + data["max_cpu"] = owner.ai_network.total_cpu() + data["max_ram"] = owner.ai_network.total_ram() data["categories"] = GLOB.ai_project_categories data["available_projects"] = list() @@ -210,7 +210,7 @@ /datum/ai_dashboard/proc/run_project(datum/ai_project/project) - var/current_ram = GLOB.ai_os.ram_assigned[owner] ? GLOB.ai_os.ram_assigned[owner] : 0 + var/current_ram = owner.ai_network.resources.ram_assigned[owner] ? owner.ai_network.resources.ram_assigned[owner] : 0 current_ram += free_ram var/total_ram_used = 0 @@ -268,8 +268,8 @@ //Stuff is handled in here per tick :) /datum/ai_dashboard/proc/tick(seconds) - var/current_cpu = GLOB.ai_os.cpu_assigned[owner] ? GLOB.ai_os.total_cpu * GLOB.ai_os.cpu_assigned[owner] : 0 - var/current_ram = GLOB.ai_os.ram_assigned[owner] ? GLOB.ai_os.ram_assigned[owner] : 0 + var/current_cpu = owner.ai_network.resources.cpu_assigned[owner] ? owner.ai_network.total_cpu() * owner.ai_network.resources.cpu_assigned[owner] : 0 + var/current_ram = owner.ai_network.resources.ram_assigned[owner] ? owner.ai_network.resources.ram_assigned[owner] : 0 current_ram += free_ram diff --git a/code/modules/mob/living/silicon/ai/decentralized/management/resource_distribution.dm b/code/modules/mob/living/silicon/ai/decentralized/management/resource_distribution.dm index 1bbd36bb6573..3620eff3a6be 100644 --- a/code/modules/mob/living/silicon/ai/decentralized/management/resource_distribution.dm +++ b/code/modules/mob/living/silicon/ai/decentralized/management/resource_distribution.dm @@ -13,7 +13,7 @@ circuit = /obj/item/circuitboard/computer/ai_resource_distribution - +/* /obj/machinery/computer/ai_resource_distribution/emag_act(mob/user) if(obj_flags & EMAGGED) return @@ -189,3 +189,4 @@ human_only = !human_only to_chat(usr, span_notice("This console is now operable by [human_only ? "humans only." : "humans and silicons."]")) +*/ diff --git a/code/modules/mob/living/silicon/ai/decentralized/projects/coolant_manager.dm b/code/modules/mob/living/silicon/ai/decentralized/projects/coolant_manager.dm index 32bb902377d8..28b5f497b6c3 100644 --- a/code/modules/mob/living/silicon/ai/decentralized/projects/coolant_manager.dm +++ b/code/modules/mob/living/silicon/ai/decentralized/projects/coolant_manager.dm @@ -7,6 +7,6 @@ can_be_run = FALSE /datum/ai_project/coolant_manager/finish() - if(GLOB.ai_os.temp_limit == AI_TEMP_LIMIT) //Limit to only 1 AI doing it. - GLOB.ai_os.temp_limit += 10 + if(ai.ai_network.temp_limit == AI_TEMP_LIMIT) //Limit to only 1 AI doing it. + ai.ai_network.temp_limit += 10 \ No newline at end of file diff --git a/code/modules/mob/living/silicon/ai/decentralized/server_cabinet.dm b/code/modules/mob/living/silicon/ai/decentralized/server_cabinet.dm index 5409d6c9c100..7909179beb77 100644 --- a/code/modules/mob/living/silicon/ai/decentralized/server_cabinet.dm +++ b/code/modules/mob/living/silicon/ai/decentralized/server_cabinet.dm @@ -42,11 +42,10 @@ GLOBAL_LIST_EMPTY(server_cabinets) update_icon() RefreshParts() + /obj/machinery/ai/server_cabinet/Destroy() installed_racks = list() GLOB.server_cabinets -= src - //Recalculate all the CPUs and RAM :) - GLOB.ai_os.update_hardware() ..() /obj/machinery/ai/server_cabinet/RefreshParts() @@ -67,6 +66,7 @@ GLOBAL_LIST_EMPTY(server_cabinets) /obj/machinery/ai/server_cabinet/process_atmos() valid_ticks = clamp(valid_ticks, 0, MAX_AI_EXPANSION_TICKS) if(valid_holder()) + roundstart = FALSE var/total_usage = (cached_power_usage * power_modifier) use_power(total_usage) @@ -82,8 +82,8 @@ GLOBAL_LIST_EMPTY(server_cabinets) update_icon() was_valid_holder = TRUE - if(!hardware_synced) - GLOB.ai_os.update_hardware() + if(!hardware_synced && network) + network.update_resources() hardware_synced = TRUE else valid_ticks-- @@ -93,7 +93,7 @@ GLOBAL_LIST_EMPTY(server_cabinets) was_valid_holder = FALSE cut_overlays() hardware_synced = FALSE - GLOB.ai_os.update_hardware() + network?.update_resources() /obj/machinery/ai/server_cabinet/update_icon() @@ -129,7 +129,7 @@ GLOBAL_LIST_EMPTY(server_cabinets) total_cpu += rack.get_cpu() total_ram += rack.get_ram() cached_power_usage += rack.get_power_usage() - GLOB.ai_os.update_hardware() + network?.update_resources() use_power = ACTIVE_POWER_USE update_icon() return FALSE @@ -142,7 +142,7 @@ GLOBAL_LIST_EMPTY(server_cabinets) total_cpu = 0 total_ram = 0 cached_power_usage = 0 - GLOB.ai_os.update_hardware() + network?.update_resources() to_chat(user, span_notice("You remove all the racks from [src]")) use_power = IDLE_POWER_USE update_icon() @@ -179,4 +179,14 @@ GLOBAL_LIST_EMPTY(server_cabinets) total_ram += rack.get_ram() cached_power_usage += rack.get_power_usage() installed_racks += rack - GLOB.ai_os.update_hardware() + + +/obj/machinery/ai/server_cabinet/connect_to_network() + . = ..() + if(network) + network.update_resources() + +/obj/machinery/ai/server_cabinet/disconnect_from_network() + var/datum/ai_network/temp = network + . = ..() + temp.update_resources() diff --git a/code/modules/mob/living/silicon/ai/decentralized_ai.dm b/code/modules/mob/living/silicon/ai/decentralized_ai.dm index 9649a80d4730..319a7cc51761 100644 --- a/code/modules/mob/living/silicon/ai/decentralized_ai.dm +++ b/code/modules/mob/living/silicon/ai/decentralized_ai.dm @@ -38,7 +38,7 @@ var/obj/machinery/ai/data_core/new_data_core - new_data_core = available_ai_cores(TRUE) + new_data_core = available_ai_cores(forced) if(!new_data_core) INVOKE_ASYNC(src, /mob/living/silicon/ai.proc/death_prompt) diff --git a/code/modules/mob/living/silicon/ai/login.dm b/code/modules/mob/living/silicon/ai/login.dm index 454e7eba34e8..036cd889503e 100644 --- a/code/modules/mob/living/silicon/ai/login.dm +++ b/code/modules/mob/living/silicon/ai/login.dm @@ -12,6 +12,3 @@ if(multicam_on) end_multicam() view_core() - if(!login_warned_temp) - to_chat(src, span_userdanger("WARNING. THE WAY AI IS PLAYED HAS CHANGED. PLEASE REFER TO https://github.com/yogstation13/Yogstation/pull/12388")) - login_warned_temp = TRUE diff --git a/yogstation.dme b/yogstation.dme index 7c3a6e6d738e..05402524aeb8 100644 --- a/yogstation.dme +++ b/yogstation.dme @@ -2438,6 +2438,7 @@ #include "code\modules\mob\living\silicon\ai\ai_network\ai_network.dm" #include "code\modules\mob\living\silicon\ai\ai_network\ethernet_cable.dm" #include "code\modules\mob\living\silicon\ai\ai_network\networking_machines.dm" +#include "code\modules\mob\living\silicon\ai\ai_network\shared_resources.dm" #include "code\modules\mob\living\silicon\ai\decentralized\_ai_machinery.dm" #include "code\modules\mob\living\silicon\ai\decentralized\ai_core_display.dm" #include "code\modules\mob\living\silicon\ai\decentralized\ai_data_core.dm" From 0b835d63ea13e8ff29fa07f978bcaba317465da7 Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Tue, 9 Aug 2022 00:09:47 +0200 Subject: [PATCH 18/66] e --- code/controllers/subsystem/machines.dm | 3 ++ code/modules/jobs/job_types/ai.dm | 10 ++-- .../silicon/ai/ai_network/ai_network.dm | 3 +- .../ai/ai_network/networking_machines.dm | 27 +++++----- .../silicon/ai/ai_network/shared_resources.dm | 54 ++++++++++++++++++- 5 files changed, 75 insertions(+), 22 deletions(-) diff --git a/code/controllers/subsystem/machines.dm b/code/controllers/subsystem/machines.dm index f402d45f1b5d..f60c0963861d 100644 --- a/code/controllers/subsystem/machines.dm +++ b/code/controllers/subsystem/machines.dm @@ -35,6 +35,9 @@ SUBSYSTEM_DEF(machines) NewAN.add_cable(EC) propagate_ai_network(EC,EC.network) + for(var/obj/machinery/ai/networking/N in GLOB.ai_networking_machines) + N.roundstart_connect() + /datum/controller/subsystem/machines/stat_entry(msg) msg = "M:[length(processing)]|PN:[length(powernets)]|AN:[length(ainets)]" return ..() diff --git a/code/modules/jobs/job_types/ai.dm b/code/modules/jobs/job_types/ai.dm index 455f43efc00a..90aa7c304604 100644 --- a/code/modules/jobs/job_types/ai.dm +++ b/code/modules/jobs/job_types/ai.dm @@ -29,12 +29,12 @@ var/mob/living/silicon/ai/AI = H AI.relocate(TRUE, TRUE) - /* - var/total_available_cpu = 1 - GLOB.ai_os.total_cpu_assigned() - var/total_available_ram = GLOB.ai_os.total_ram - GLOB.ai_os.total_ram_assigned() + + var/total_available_cpu = 1 - AI.ai_network.resources.total_cpu_assigned() + var/total_available_ram = AI.ai_network.resources.total_ram() - AI.ai_network.resources.total_ram_assigned() - GLOB.ai_os.set_cpu(AI, total_available_cpu) - GLOB.ai_os.add_ram(AI, total_available_ram) */ + AI.ai_network.resources.set_cpu(AI, total_available_cpu) + AI.ai_network.resources.add_ram(AI, total_available_ram) AI.apply_pref_name("ai", M.client) //If this runtimes oh well jobcode is fucked. AI.set_core_display_icon(null, M.client) diff --git a/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm b/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm index 76558a9661ba..064fbf5d6544 100644 --- a/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm +++ b/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm @@ -24,6 +24,7 @@ /datum/ai_network/New() SSmachines.ainets += src resources = new() + resources.networks += src /datum/ai_network/Destroy() //Go away references, you suck! @@ -164,7 +165,7 @@ net1.resources.networks -= net2 net1.update_resources() - + return net1 diff --git a/code/modules/mob/living/silicon/ai/ai_network/networking_machines.dm b/code/modules/mob/living/silicon/ai/ai_network/networking_machines.dm index 56e6b0e4e3fa..3ca08c2fe04f 100644 --- a/code/modules/mob/living/silicon/ai/ai_network/networking_machines.dm +++ b/code/modules/mob/living/silicon/ai/ai_network/networking_machines.dm @@ -33,25 +33,22 @@ GLOBAL_LIST_EMPTY(ai_networking_machines) paneloverlay.color = "#599ffa" update_icon(TRUE) - - -/obj/machinery/ai/networking/LateInitialize(mapload) - . = ..() - if(mapload) - for(var/obj/machinery/ai/networking/N in GLOB.ai_networking_machines) - if(N == src) - continue - if(roundstart_connection && N.label == roundstart_connection) - connect_to_partner(N) - break - if(!roundstart_connection) - connect_to_partner(N) - break - /obj/machinery/ai/networking/Destroy(mapload) GLOB.ai_networking_machines -= src disconnect() . = ..() +/obj/machinery/ai/networking/proc/roundstart_connect(mapload) + for(var/obj/machinery/ai/networking/N in GLOB.ai_networking_machines) + if(partner) + break + if(N == src) + continue + if(roundstart_connection && N.label == roundstart_connection) + connect_to_partner(N) + break + if(!roundstart_connection) + connect_to_partner(N) + break /obj/machinery/ai/networking/update_icon(forced = FALSE) diff --git a/code/modules/mob/living/silicon/ai/ai_network/shared_resources.dm b/code/modules/mob/living/silicon/ai/ai_network/shared_resources.dm index 111a7237e61d..a0b458257720 100644 --- a/code/modules/mob/living/silicon/ai/ai_network/shared_resources.dm +++ b/code/modules/mob/living/silicon/ai/ai_network/shared_resources.dm @@ -60,8 +60,9 @@ for(var/CU in new_resources.cpu_assigned) cpu_assigned[CU] = (1 - total_cpu_assigned()) - for(var/N in new_resources.networks) + for(var/datum/ai_network/N in new_resources.networks) networks |= N + N.resources = src update_resources() update_allocations() @@ -90,6 +91,7 @@ var/datum/ai_shared_resources/NR = new(network_cpu, network_ram, network_cpu_assign, network_ram_assign) split_network.resources = NR + split_network.resources.networks += split_network /datum/ai_shared_resources/proc/update_allocations() @@ -130,3 +132,53 @@ ram_assigned = ram_assigned_copy to_chat(affected_AIs, span_warning("You have been deducted memory capacity. Please contact your network administrator if you believe this to be an error.")) + + + +/datum/ai_shared_resources/proc/set_cpu(mob/living/silicon/ai/AI, amount) + + if(!AI) + return + if(amount > 1 || amount < 0) + return + if(!istype(AI)) + return + cpu_assigned[AI] = amount + + update_allocations() + + +/datum/ai_shared_resources/proc/add_ram(mob/living/silicon/ai/AI, amount) + + if(!AI || !amount) + return + if(!istype(AI)) + return + ram_assigned[AI] += amount + + update_allocations() + + +/datum/ai_shared_resources/proc/remove_ram(mob/living/silicon/ai/AI, amount) + + if(!AI || !amount) + return + if(!istype(AI)) + return + if(ram_assigned[AI] - amount < 0) + ram_assigned[AI] = 0 + else + ram_assigned[AI] -= amount + + update_allocations() + + +/datum/ai_shared_resources/proc/clear_ai_resources(mob/living/silicon/ai/AI) + if(!AI || !istype(AI)) + return + + remove_ram(AI, ram_assigned[AI]) + cpu_assigned[AI] = 0 + + update_allocations() + From 7030876c3a1552fd9535b1809db8611a5b554027 Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Tue, 9 Aug 2022 00:12:32 +0200 Subject: [PATCH 19/66] e2 --- _maps/map_files/YogStation/YogStation.dmm | 279 +++++++++++++--------- 1 file changed, 165 insertions(+), 114 deletions(-) diff --git a/_maps/map_files/YogStation/YogStation.dmm b/_maps/map_files/YogStation/YogStation.dmm index 0ad739b96810..35d4ef81972f 100644 --- a/_maps/map_files/YogStation/YogStation.dmm +++ b/_maps/map_files/YogStation/YogStation.dmm @@ -14861,6 +14861,23 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) +"bmg" = ( +/obj/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/obj/structure/ethernet_cable{ + icon_state = "1-8" + }, +/obj/structure/ethernet_cable{ + icon_state = "1-4" + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "bmi" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /turf/open/floor/plasteel, @@ -21330,6 +21347,23 @@ /obj/machinery/holosign/surgery, /turf/open/floor/plasteel/white, /area/medical/surgery) +"bUR" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ + dir = 4; + external_pressure_bound = 120 + }, +/obj/machinery/airalarm/tcomms{ + dir = 4; + pixel_x = -24 + }, +/obj/structure/ethernet_cable{ + icon_state = "2-4" + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/secondarydatacore) "bVa" = ( /obj/machinery/door/firedoor/border_only{ dir = 4 @@ -26310,13 +26344,6 @@ }, /turf/open/floor/plating, /area/construction) -"dBH" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible{ - dir = 4 - }, -/obj/machinery/meter, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/secondarydatacore) "dBU" = ( /obj/machinery/light_switch{ pixel_x = 27 @@ -27565,20 +27592,6 @@ }, /turf/open/floor/plasteel, /area/quartermaster/office) -"ens" = ( -/obj/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/structure/ethernet_cable{ - icon_state = "1-2" - }, -/obj/structure/ethernet_cable{ - icon_state = "1-8" - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "enQ" = ( /obj/structure/sink{ pixel_y = 30 @@ -28010,6 +28023,16 @@ }, /turf/open/floor/plasteel/dark, /area/bridge) +"exo" = ( +/obj/structure/window/reinforced, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/ethernet_cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "exz" = ( /obj/structure/chair/office/dark{ dir = 8 @@ -28355,6 +28378,11 @@ }, /turf/open/floor/plating, /area/maintenance/aft) +"eEQ" = ( +/obj/machinery/ai/data_core, +/obj/structure/ethernet_cable, +/turf/open/floor/circuit/green/telecomms/mainframe, +/area/ai_monitored/secondarydatacore) "eEZ" = ( /obj/machinery/power/apc{ areastring = "/area/ai_monitored/turret_protected/aisat_interior"; @@ -30649,6 +30677,19 @@ }, /turf/open/floor/plasteel, /area/quartermaster/storage) +"fQb" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 4 + }, +/obj/machinery/meter, +/obj/structure/ethernet_cable{ + icon_state = "2-8" + }, +/obj/structure/ethernet_cable{ + icon_state = "2-4" + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/secondarydatacore) "fQz" = ( /obj/effect/turf_decal/stripes/corner, /obj/effect/turf_decal/trimline/blue/filled/line{ @@ -35409,20 +35450,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) -"ief" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ - dir = 4; - external_pressure_bound = 120 - }, -/obj/machinery/airalarm/tcomms{ - dir = 4; - pixel_x = -24 - }, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/secondarydatacore) "ieh" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ @@ -35585,10 +35612,6 @@ }, /turf/open/floor/plasteel, /area/hydroponics) -"iiJ" = ( -/obj/machinery/ai/server_cabinet, -/turf/open/floor/circuit/green/telecomms/mainframe, -/area/ai_monitored/secondarydatacore) "ijm" = ( /obj/machinery/light/small{ dir = 4 @@ -38887,6 +38910,23 @@ }, /turf/open/floor/plasteel, /area/engine/foyer) +"jOq" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/obj/structure/ethernet_cable{ + icon_state = "0-8" + }, +/obj/machinery/ai/networking{ + label = "core2"; + roundstart_connection = "core1" + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "jOV" = ( /obj/machinery/atmospherics/components/unary/vent_pump/layer2{ dir = 8 @@ -39471,6 +39511,14 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) +"kgk" = ( +/obj/machinery/ai/networking{ + label = "core3"; + roundstart_connection = "offsite" + }, +/obj/structure/ethernet_cable, +/turf/open/floor/circuit/green/telecomms/mainframe, +/area/ai_monitored/secondarydatacore) "kgs" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 4 @@ -40782,6 +40830,20 @@ /obj/item/twohanded/required/kirbyplants/random, /turf/open/floor/plasteel/white, /area/medical/sleeper) +"kJd" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 8; + external_pressure_bound = 140; + pressure_checks = 0 + }, +/obj/structure/ethernet_cable{ + icon_state = "2-8" + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/secondarydatacore) "kJl" = ( /obj/structure/table/wood, /obj/item/canvas/twentythreeXnineteen{ @@ -45221,10 +45283,6 @@ }, /turf/open/floor/wood, /area/crew_quarters/heads/captain) -"mSg" = ( -/obj/machinery/atmospherics/pipe/manifold/general/visible, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/secondarydatacore) "mSo" = ( /obj/machinery/airalarm{ dir = 4; @@ -50771,10 +50829,6 @@ }, /turf/open/space, /area/solar/port/aft) -"pDa" = ( -/obj/machinery/ai/data_core, -/turf/open/floor/circuit/green/telecomms/mainframe, -/area/ai_monitored/secondarydatacore) "pDm" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, @@ -51254,6 +51308,15 @@ }, /turf/open/floor/plasteel, /area/science/robotics/lab) +"pRQ" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 4 + }, +/obj/structure/ethernet_cable{ + icon_state = "4-8" + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/secondarydatacore) "pRS" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ @@ -52600,20 +52663,6 @@ "qAF" = ( /turf/open/floor/plasteel/showroomfloor, /area/security/warden) -"qAP" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/hidden, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/obj/structure/ethernet_cable{ - icon_state = "0-8" - }, -/obj/machinery/ai/networking, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "qAW" = ( /obj/machinery/light{ dir = 4 @@ -53483,6 +53532,20 @@ /obj/structure/lattice/catwalk, /turf/open/space/basic, /area/ai_monitored/turret_protected/ai) +"qYj" = ( +/obj/structure/window/reinforced, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/ai/networking{ + label = "core3"; + roundstart_connection = "offsite" + }, +/obj/structure/ethernet_cable{ + icon_state = "0-8" + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "qYw" = ( /obj/machinery/portable_atmospherics/canister/air, /obj/effect/turf_decal/bot, @@ -54093,13 +54156,6 @@ }, /turf/open/floor/plasteel, /area/engine/atmos) -"rqW" = ( -/obj/structure/window/reinforced, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "rqZ" = ( /obj/machinery/door/poddoor{ id = "QMLoaddoor"; @@ -56605,6 +56661,13 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /turf/open/floor/plasteel/white, /area/science/xenobiology) +"stC" = ( +/obj/machinery/atmospherics/pipe/manifold/general/visible, +/obj/structure/ethernet_cable{ + icon_state = "4-8" + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/secondarydatacore) "stH" = ( /obj/machinery/vending/coffee, /obj/effect/turf_decal/tile/blue{ @@ -58695,12 +58758,6 @@ }, /turf/open/floor/plating, /area/storage/tech) -"twt" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible{ - dir = 4 - }, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/secondarydatacore) "twv" = ( /obj/effect/spawner/structure/window, /obj/machinery/door/firedoor/border_only{ @@ -59581,17 +59638,6 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/fore) -"tQv" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 8; - external_pressure_bound = 140; - pressure_checks = 0 - }, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/secondarydatacore) "tQD" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, @@ -59858,9 +59904,6 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) -"tXb" = ( -/turf/open/floor/circuit/green/telecomms/mainframe, -/area/ai_monitored/secondarydatacore) "tXk" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 4 @@ -66380,6 +66423,11 @@ }, /turf/open/floor/plasteel/dark, /area/science/xenobiology) +"xzI" = ( +/obj/structure/ethernet_cable, +/obj/machinery/ai/server_cabinet/prefilled, +/turf/open/floor/circuit/green/telecomms/mainframe, +/area/ai_monitored/secondarydatacore) "xzO" = ( /obj/effect/turf_decal/tile/blue{ dir = 1 @@ -67165,19 +67213,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /turf/open/floor/carpet, /area/medical/psych) -"xSK" = ( -/obj/machinery/turretid{ - icon_state = "control_stun"; - name = "AI Chamber turret control"; - pixel_x = -32; - pixel_y = 0 - }, -/obj/structure/ethernet_cable{ - icon_state = "0-4" - }, -/obj/machinery/ai/networking, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/turret_protected/ai) "xSQ" = ( /obj/structure/sign/warning/radiation/rad_area{ pixel_x = -32 @@ -67245,6 +67280,22 @@ /obj/item/book/manual/wiki/atmospherics, /turf/open/floor/plasteel, /area/engine/atmos) +"xTw" = ( +/obj/machinery/turretid{ + icon_state = "control_stun"; + name = "AI Chamber turret control"; + pixel_x = -32; + pixel_y = 0 + }, +/obj/structure/ethernet_cable{ + icon_state = "0-4" + }, +/obj/machinery/ai/networking{ + label = "core1"; + roundstart_connection = "core2" + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "xTN" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -109840,7 +109891,7 @@ cva cva cva byg -xSK +xTw bRu xFg xXs @@ -110354,7 +110405,7 @@ cva cva fgU iQd -ens +bmg pes rnq dMz @@ -110611,7 +110662,7 @@ cva cva lHO rjo -rqW +exo rjo jMV rTk @@ -110868,11 +110919,11 @@ cva cva xUW rjo -rqW +qYj jTn nVK enZ -qAP +jOq pyn rFi cva @@ -117775,8 +117826,8 @@ mwf oxg uFS sLZ -ief -tXb +bUR +kgk oGM oGM fXS @@ -118032,7 +118083,7 @@ mQY nlV gdI kJz -mSg +stC wnI oGM oGM @@ -118289,8 +118340,8 @@ fKM oGM oxg oxg -dBH -pDa +fQb +eEQ oGM oGM fXS @@ -118546,7 +118597,7 @@ hYY gDs fFO oxg -twt +pRQ wnI oGM oGM @@ -118803,8 +118854,8 @@ pYv goW hOU oxg -tQv -iiJ +kJd +xzI oGM oGM fXS From cccef7a51dda37a64f1e0cb877bebe0dcd859739 Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Tue, 9 Aug 2022 00:58:54 +0200 Subject: [PATCH 20/66] more --- .../mob/living/silicon/ai/ai_network/ai_network.dm | 9 +++++++++ .../mob/living/silicon/ai/ai_network/ethernet_cable.dm | 8 +++++++- .../living/silicon/ai/ai_network/networking_machines.dm | 3 ++- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm b/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm index 064fbf5d6544..5c28bd7b6f93 100644 --- a/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm +++ b/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm @@ -137,6 +137,15 @@ /datum/ai_network/proc/total_ram_assigned() return resources.total_ram_assigned() +/datum/ai_network/proc/rebuild_remote(datum/ai_shared_resources/old_resources) + for(var/obj/machinery/ai/networking/N in nodes) + if(N.partner) + if(N.partner.network.resources == old_resources) + old_resources.join_resources(resources) + return + resources.split_resources(src) + + /proc/merge_ainets(datum/ai_network/net1, datum/ai_network/net2) if(!net1 || !net2) //if one of the network doesn't exist, return diff --git a/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm b/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm index 59dcbd98ea2f..f9068e7de744 100644 --- a/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm +++ b/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm @@ -301,10 +301,16 @@ By design, d1 is the smallest direction and d2 is the highest if(AN.is_empty()) //can happen with machines made nodeless when smoothing cables qdel(AN) -/obj/structure/ethernet_cable/proc/auto_propogate_cut_cable(obj/O) +/obj/structure/ethernet_cable/proc/auto_propogate_cut_cable(obj/O, ) if(O && !QDELETED(O)) var/datum/ai_network/newAN = new()// creates a new ai network... + var/datum/ai_network/temp = network + propagate_ai_network(O, newAN)//... and propagates it to the other side of the cable + network.rebuild_remote(temp.resources) + temp.rebuild_remote(temp.resources) + + // cut the cable's ai network at this cable and updates the powergrid /obj/structure/ethernet_cable/proc/cut_cable_from_ainet(remove=TRUE) diff --git a/code/modules/mob/living/silicon/ai/ai_network/networking_machines.dm b/code/modules/mob/living/silicon/ai/ai_network/networking_machines.dm index 3ca08c2fe04f..1e6757348693 100644 --- a/code/modules/mob/living/silicon/ai/ai_network/networking_machines.dm +++ b/code/modules/mob/living/silicon/ai/ai_network/networking_machines.dm @@ -26,7 +26,8 @@ GLOBAL_LIST_EMPTY(ai_networking_machines) /obj/machinery/ai/networking/Initialize(mapload) . = ..() - label = num2hex(rand(1,65535), -1) + if(!label) + label = num2hex(rand(1,65535), -1) GLOB.ai_networking_machines += src panelstructure = mutable_appearance(icon, "solar_panel", FLY_LAYER) paneloverlay = mutable_appearance(icon, "solar_panel-o", FLY_LAYER) From 95aa0f96bf54014ef0cd2bcde7cad2f03d3a3084 Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Wed, 10 Aug 2022 13:53:13 +0200 Subject: [PATCH 21/66] i hate bug fixing --- .../silicon/ai/ai_network/ai_network.dm | 31 ++++++++++++++----- .../silicon/ai/ai_network/ethernet_cable.dm | 9 +++--- .../silicon/ai/ai_network/shared_resources.dm | 10 +++--- 3 files changed, 32 insertions(+), 18 deletions(-) diff --git a/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm b/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm index 5c28bd7b6f93..79984733d506 100644 --- a/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm +++ b/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm @@ -24,7 +24,7 @@ /datum/ai_network/New() SSmachines.ainets += src resources = new() - resources.networks += src + resources.networks |= src /datum/ai_network/Destroy() //Go away references, you suck! @@ -49,6 +49,8 @@ C.network = null if(is_empty())//the network is now empty... qdel(src)///... delete it + else + rebuild_remote() //add a cable to the current network //Warning : this proc DON'T check if the cable exists @@ -60,6 +62,7 @@ C.network.remove_cable(C) //..remove it C.network = src cables +=C + rebuild_remote() //remove a power machine from the current network //if the network is then empty, delete it @@ -69,6 +72,8 @@ M.network = null if(is_empty())//the network is now empty... qdel(src)///... delete it + else + rebuild_remote() //add a power machine to the current network @@ -81,6 +86,7 @@ M.disconnect_from_network()//..remove it M.network = src nodes[M] = M + rebuild_remote() /datum/ai_network/proc/find_data_core() for(var/obj/machinery/ai/data_core/core in get_all_nodes()) @@ -137,14 +143,18 @@ /datum/ai_network/proc/total_ram_assigned() return resources.total_ram_assigned() -/datum/ai_network/proc/rebuild_remote(datum/ai_shared_resources/old_resources) +/datum/ai_network/proc/rebuild_remote(externally_linked = FALSE) for(var/obj/machinery/ai/networking/N in nodes) if(N.partner) - if(N.partner.network.resources == old_resources) - old_resources.join_resources(resources) - return - resources.split_resources(src) - + if(N.partner.network.resources != resources) + if(length(N.partner.network.resources.networks) > length(resources.networks)) //We merge into the biggest network + N.partner.network.resources.join_resources(resources) + else + resources.join_resources(N.partner.network.resources) + externally_linked = TRUE + rebuild_remote(externally_linked) + if(!externally_linked) + resources.split_resources(src) /proc/merge_ainets(datum/ai_network/net1, datum/ai_network/net2) @@ -174,6 +184,10 @@ net1.resources.networks -= net2 net1.update_resources() + net1.rebuild_remote() + + net2.rebuild_remote() + net2.update_resources() return net1 @@ -207,7 +221,8 @@ for(var/obj/machinery/ai/PM in found_machines) if(!PM.connect_to_network()) //couldn't find a node on its turf... PM.disconnect_from_network() //... so disconnect if already on a network - + + AN.rebuild_remote() /proc/ai_list(turf/T, source, d, unmarked = FALSE, cable_only = FALSE) . = list() diff --git a/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm b/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm index f9068e7de744..d1a3158fbf65 100644 --- a/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm +++ b/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm @@ -24,7 +24,7 @@ By design, d1 is the smallest direction and d2 is the highest /obj/structure/ethernet_cable name = "ethernet cable" - desc = "A rigid and shielded cat 16a cable used for transferring vast amounts of data over long distances. Primarily used for large scale computing network or advanced neural networks." + desc = "A rigid and shielded cat 16a cable used for transferring vast amounts of data over long distances. Primarily used for large scale computing networks or advanced neural networks." icon = 'icons/obj/power_cond/power_local.dmi' icon_state = "0-1" level = 1 //is underfloor @@ -304,11 +304,8 @@ By design, d1 is the smallest direction and d2 is the highest /obj/structure/ethernet_cable/proc/auto_propogate_cut_cable(obj/O, ) if(O && !QDELETED(O)) var/datum/ai_network/newAN = new()// creates a new ai network... - var/datum/ai_network/temp = network propagate_ai_network(O, newAN)//... and propagates it to the other side of the cable - network.rebuild_remote(temp.resources) - temp.rebuild_remote(temp.resources) @@ -324,7 +321,6 @@ By design, d1 is the smallest direction and d2 is the highest P_list += ai_list(loc, src, d1, 0, cable_only = 1)//... and on turf - if(P_list.len == 0)//if nothing in both list, then the cable was a lone cable, just delete it and its ai network network.remove_cable(src) @@ -337,7 +333,9 @@ By design, d1 is the smallest direction and d2 is the highest // remove the cut cable from its turf and ai network, so that it doesn't get count in propagate_network worklist if(remove) moveToNullspace() + var/datum/ai_network/oldAN = network network.remove_cable(src) //remove the cut cable from its ai network + addtimer(CALLBACK(O, .proc/auto_propogate_cut_cable, O), 0) //so we don't rebuild the network X times when singulo/explosion destroys a line of X cables @@ -347,6 +345,7 @@ By design, d1 is the smallest direction and d2 is the highest if(!P.connect_to_network()) //can't find a node cable on a the turf to connect to P.disconnect_from_network() //remove from current network + oldAN.rebuild_remote() /////////////////////////////////////////////// // The cable coil object, used for laying cable diff --git a/code/modules/mob/living/silicon/ai/ai_network/shared_resources.dm b/code/modules/mob/living/silicon/ai/ai_network/shared_resources.dm index a0b458257720..36c2fa800cdc 100644 --- a/code/modules/mob/living/silicon/ai/ai_network/shared_resources.dm +++ b/code/modules/mob/living/silicon/ai/ai_network/shared_resources.dm @@ -12,10 +12,10 @@ -/datum/ai_shared_resources/New(network_cpu, network_ram, network_assigned_cpu, network_assigned_ram) +/datum/ai_shared_resources/New(network_cpu, network_ram, network_assigned_cpu, network_assigned_ram, datum/ai_network/network) if(network_cpu || network_ram || network_assigned_ram || network_assigned_cpu) - ram_sources[src] = network_ram - cpu_sources[src] = network_cpu + ram_sources[network] = network_ram + cpu_sources[network] = network_cpu ram_assigned = network_assigned_ram cpu_assigned = network_assigned_cpu @@ -89,9 +89,9 @@ networks -= split_network update_resources() - var/datum/ai_shared_resources/NR = new(network_cpu, network_ram, network_cpu_assign, network_ram_assign) + var/datum/ai_shared_resources/NR = new(network_cpu, network_ram, network_cpu_assign, network_ram_assign, split_network) split_network.resources = NR - split_network.resources.networks += split_network + split_network.resources.networks |= split_network /datum/ai_shared_resources/proc/update_allocations() From 192f4f0bfc53fbc94e842707d20bcd3d31c7bf86 Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Wed, 10 Aug 2022 14:50:12 +0200 Subject: [PATCH 22/66] it finally works --- .../silicon/ai/ai_network/ai_network.dm | 8 +++--- .../ai/ai_network/networking_machines.dm | 12 ++++++--- .../silicon/ai/ai_network/shared_resources.dm | 26 ++++++++++++++----- .../ai/decentralized/server_cabinet.dm | 6 +++-- 4 files changed, 35 insertions(+), 17 deletions(-) diff --git a/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm b/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm index 79984733d506..f568e5831b79 100644 --- a/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm +++ b/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm @@ -23,8 +23,7 @@ /datum/ai_network/New() SSmachines.ainets += src - resources = new() - resources.networks |= src + resources = new(starting_network = src) /datum/ai_network/Destroy() //Go away references, you suck! @@ -144,8 +143,10 @@ return resources.total_ram_assigned() /datum/ai_network/proc/rebuild_remote(externally_linked = FALSE) + if(!resources) + return for(var/obj/machinery/ai/networking/N in nodes) - if(N.partner) + if(N.partner && N.partner.network && N.partner.network.resources) if(N.partner.network.resources != resources) if(length(N.partner.network.resources.networks) > length(resources.networks)) //We merge into the biggest network N.partner.network.resources.join_resources(resources) @@ -222,7 +223,6 @@ if(!PM.connect_to_network()) //couldn't find a node on its turf... PM.disconnect_from_network() //... so disconnect if already on a network - AN.rebuild_remote() /proc/ai_list(turf/T, source, d, unmarked = FALSE, cable_only = FALSE) . = list() diff --git a/code/modules/mob/living/silicon/ai/ai_network/networking_machines.dm b/code/modules/mob/living/silicon/ai/ai_network/networking_machines.dm index 1e6757348693..ba09fa1f2ec1 100644 --- a/code/modules/mob/living/silicon/ai/ai_network/networking_machines.dm +++ b/code/modules/mob/living/silicon/ai/ai_network/networking_machines.dm @@ -44,11 +44,13 @@ GLOBAL_LIST_EMPTY(ai_networking_machines) break if(N == src) continue + if(N.partner) + continue if(roundstart_connection && N.label == roundstart_connection) - connect_to_partner(N) + connect_to_partner(N, TRUE) break if(!roundstart_connection) - connect_to_partner(N) + connect_to_partner(N, TRUE) break @@ -70,11 +72,12 @@ GLOBAL_LIST_EMPTY(ai_networking_machines) partner = null -/obj/machinery/ai/networking/proc/connect_to_partner(obj/machinery/ai/networking/target) +/obj/machinery/ai/networking/proc/connect_to_partner(obj/machinery/ai/networking/target, roundstart = FALSE) if(target.partner) return if(target == src) return + partner = target rotation_to_partner = Get_Angle(src, partner) @@ -82,7 +85,8 @@ GLOBAL_LIST_EMPTY(ai_networking_machines) target.rotation_to_partner = Get_Angle(target, src) target.update_icon() - network.resources.join_resources(partner.network.resources) + if(roundstart) //Resources aren't initialized yet, they'll automatically rebuild the remotes when they are + network.resources.join_resources(partner.network.resources) update_icon() diff --git a/code/modules/mob/living/silicon/ai/ai_network/shared_resources.dm b/code/modules/mob/living/silicon/ai/ai_network/shared_resources.dm index 36c2fa800cdc..ab231092ff7e 100644 --- a/code/modules/mob/living/silicon/ai/ai_network/shared_resources.dm +++ b/code/modules/mob/living/silicon/ai/ai_network/shared_resources.dm @@ -12,12 +12,23 @@ -/datum/ai_shared_resources/New(network_cpu, network_ram, network_assigned_cpu, network_assigned_ram, datum/ai_network/network) - if(network_cpu || network_ram || network_assigned_ram || network_assigned_cpu) - ram_sources[network] = network_ram - cpu_sources[network] = network_cpu +/datum/ai_shared_resources/New(network_cpu, network_ram, network_assigned_cpu, network_assigned_ram, datum/ai_network/split_network, datum/ai_network/starting_network) + if((network_cpu || network_ram || network_assigned_ram || network_assigned_cpu) && split_network) + ram_sources[split_network] = network_ram + cpu_sources[split_network] = network_cpu ram_assigned = network_assigned_ram cpu_assigned = network_assigned_cpu + + if(split_network) + split_network.resources = src + networks |= split_network + + if(starting_network) + starting_network.resources = src + networks |= starting_network + + for(var/datum/ai_network/AN in networks) + AN.rebuild_remote(TRUE) /datum/ai_shared_resources/proc/total_cpu_assigned() var/total = 0 @@ -89,9 +100,10 @@ networks -= split_network update_resources() - var/datum/ai_shared_resources/NR = new(network_cpu, network_ram, network_cpu_assign, network_ram_assign, split_network) - split_network.resources = NR - split_network.resources.networks |= split_network + new /datum/ai_shared_resources(network_cpu, network_ram, network_cpu_assign, network_ram_assign, split_network) + + if(!length(networks)) + qdel(src) /datum/ai_shared_resources/proc/update_allocations() diff --git a/code/modules/mob/living/silicon/ai/decentralized/server_cabinet.dm b/code/modules/mob/living/silicon/ai/decentralized/server_cabinet.dm index 7909179beb77..9a0199537971 100644 --- a/code/modules/mob/living/silicon/ai/decentralized/server_cabinet.dm +++ b/code/modules/mob/living/silicon/ai/decentralized/server_cabinet.dm @@ -91,7 +91,7 @@ GLOBAL_LIST_EMPTY(server_cabinets) if(valid_ticks > 0) return was_valid_holder = FALSE - cut_overlays() + update_icon() hardware_synced = FALSE network?.update_resources() @@ -108,7 +108,9 @@ GLOBAL_LIST_EMPTY(server_cabinets) if(!(stat & (BROKEN|NOPOWER|EMPED))) var/mutable_appearance/on_overlay = mutable_appearance(icon, "expansion_bus_on") add_overlay(on_overlay) - if(!valid_ticks) + if(!valid_ticks) //If we are running on valid ticks we don't turn off instantly, only when we run out + return + if(!network) //If we lose network connection we cut out INSTANTLY return if(installed_racks.len > 0) var/mutable_appearance/on_top_overlay = mutable_appearance(icon, "expansion_bus_top_on") From 585892888517d45dd6771a2929ba4931dbaa3837 Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Wed, 10 Aug 2022 14:51:35 +0200 Subject: [PATCH 23/66] remove all rebuild_remote apart from resources/New --- .../mob/living/silicon/ai/ai_network/ai_network.dm | 8 -------- .../mob/living/silicon/ai/ai_network/ethernet_cable.dm | 1 - 2 files changed, 9 deletions(-) diff --git a/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm b/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm index f568e5831b79..d8307956205c 100644 --- a/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm +++ b/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm @@ -48,8 +48,6 @@ C.network = null if(is_empty())//the network is now empty... qdel(src)///... delete it - else - rebuild_remote() //add a cable to the current network //Warning : this proc DON'T check if the cable exists @@ -61,7 +59,6 @@ C.network.remove_cable(C) //..remove it C.network = src cables +=C - rebuild_remote() //remove a power machine from the current network //if the network is then empty, delete it @@ -71,8 +68,6 @@ M.network = null if(is_empty())//the network is now empty... qdel(src)///... delete it - else - rebuild_remote() //add a power machine to the current network @@ -85,7 +80,6 @@ M.disconnect_from_network()//..remove it M.network = src nodes[M] = M - rebuild_remote() /datum/ai_network/proc/find_data_core() for(var/obj/machinery/ai/data_core/core in get_all_nodes()) @@ -185,9 +179,7 @@ net1.resources.networks -= net2 net1.update_resources() - net1.rebuild_remote() - net2.rebuild_remote() net2.update_resources() diff --git a/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm b/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm index d1a3158fbf65..86c58d009290 100644 --- a/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm +++ b/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm @@ -345,7 +345,6 @@ By design, d1 is the smallest direction and d2 is the highest if(!P.connect_to_network()) //can't find a node cable on a the turf to connect to P.disconnect_from_network() //remove from current network - oldAN.rebuild_remote() /////////////////////////////////////////////// // The cable coil object, used for laying cable From daa51f7e6e12f7bb65db02180484b2c837b891c7 Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Wed, 10 Aug 2022 14:53:41 +0200 Subject: [PATCH 24/66] 3-way connection --- _maps/map_files/YogStation/YogStation.dmm | 96 ++++++++++++++--------- 1 file changed, 61 insertions(+), 35 deletions(-) diff --git a/_maps/map_files/YogStation/YogStation.dmm b/_maps/map_files/YogStation/YogStation.dmm index 35d4ef81972f..c212c1e018c2 100644 --- a/_maps/map_files/YogStation/YogStation.dmm +++ b/_maps/map_files/YogStation/YogStation.dmm @@ -24455,6 +24455,16 @@ }, /turf/open/floor/plasteel/white, /area/medical/storage) +"cGA" = ( +/obj/machinery/atmospherics/pipe/manifold/general/visible, +/obj/structure/ethernet_cable{ + icon_state = "4-8" + }, +/obj/structure/ethernet_cable{ + icon_state = "1-4" + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/secondarydatacore) "cGB" = ( /obj/effect/turf_decal/bot_white/right, /obj/effect/turf_decal/tile/neutral{ @@ -27189,6 +27199,14 @@ }, /turf/open/floor/plasteel/dark, /area/engine/engine_smes) +"eca" = ( +/obj/machinery/ai/networking{ + label = "offsite"; + roundstart_connection = "core3" + }, +/obj/structure/ethernet_cable, +/turf/open/floor/circuit/green/telecomms/mainframe, +/area/ai_monitored/secondarydatacore) "edg" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 8 @@ -39511,14 +39529,6 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) -"kgk" = ( -/obj/machinery/ai/networking{ - label = "core3"; - roundstart_connection = "offsite" - }, -/obj/structure/ethernet_cable, -/turf/open/floor/circuit/green/telecomms/mainframe, -/area/ai_monitored/secondarydatacore) "kgs" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 4 @@ -40875,12 +40885,6 @@ /obj/machinery/space_heater, /turf/open/floor/plasteel/dark, /area/maintenance/department/tcoms) -"kJz" = ( -/obj/machinery/atmospherics/pipe/manifold/general/visible{ - dir = 4 - }, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/secondarydatacore) "kJK" = ( /obj/structure/grille, /obj/structure/window{ @@ -49885,6 +49889,18 @@ /obj/machinery/door/firedoor/border_only, /turf/open/floor/plating, /area/quartermaster/storage) +"oXV" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 4 + }, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/obj/structure/ethernet_cable{ + icon_state = "1-8" + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "oYW" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 1 @@ -50076,6 +50092,19 @@ /obj/item/camera_film, /turf/open/floor/wood, /area/library) +"pgw" = ( +/obj/machinery/atmospherics/pipe/manifold/general/visible{ + dir = 4 + }, +/obj/machinery/ai/networking{ + label = "offsite2"; + roundstart_connection = "core4" + }, +/obj/structure/ethernet_cable{ + icon_state = "0-2" + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/secondarydatacore) "phv" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ dir = 8 @@ -56661,13 +56690,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /turf/open/floor/plasteel/white, /area/science/xenobiology) -"stC" = ( -/obj/machinery/atmospherics/pipe/manifold/general/visible, -/obj/structure/ethernet_cable{ - icon_state = "4-8" - }, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/secondarydatacore) "stH" = ( /obj/machinery/vending/coffee, /obj/effect/turf_decal/tile/blue{ @@ -63044,6 +63066,19 @@ }, /turf/open/floor/plasteel/white, /area/medical/storage) +"vFY" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 4 + }, +/obj/machinery/ai/networking{ + label = "core4"; + roundstart_connection = "offsite2" + }, +/obj/structure/ethernet_cable{ + icon_state = "0-4" + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "vGx" = ( /turf/closed/wall/r_wall, /area/medical/genetics) @@ -63594,15 +63629,6 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/fitness) -"vVx" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 4 - }, -/obj/structure/ethernet_cable{ - icon_state = "1-2" - }, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/turret_protected/ai) "vWd" = ( /obj/machinery/camera{ c_tag = "Aft Primary Hallway 2"; @@ -110410,7 +110436,7 @@ pes rnq dMz dFJ -rjo +vFY wer cva cva @@ -110667,7 +110693,7 @@ rjo jMV rTk hRe -vVx +oXV dMz cva cva @@ -117827,7 +117853,7 @@ oxg uFS sLZ bUR -kgk +eca oGM oGM fXS @@ -118082,8 +118108,8 @@ oGM mQY nlV gdI -kJz -stC +pgw +cGA wnI oGM oGM From 8332bc35e60e93ff024be19da03e495db49f92a8 Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Wed, 10 Aug 2022 15:00:06 +0200 Subject: [PATCH 25/66] Update ai_network.dm --- .../modules/mob/living/silicon/ai/ai_network/ai_network.dm | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm b/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm index d8307956205c..257b61eb0d46 100644 --- a/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm +++ b/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm @@ -240,3 +240,10 @@ . += C return . +/proc/debug_ai() + var/list/resource_list = list() + for(var/datum/ai_network/AN in SSmachines.ainets) + message_admins("Network: [REF(AN)] | Resources: [REF(AN.resources)]") + resource_list += AN.resources + for(var/datum/ai_shared_resources/ASR in resource_list) + message_admins("Resource count, CPU: [ASR.total_cpu()] | RAM: [ASR.total_ram()]") From 0521f8a36666748f68caffc98228a84f63967d0d Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Wed, 10 Aug 2022 18:55:08 +0200 Subject: [PATCH 26/66] pain --- code/modules/admin/verbs/debug.dm | 8 ++ code/modules/admin/verbs/mapping.dm | 1 + .../silicon/ai/ai_network/ai_network.dm | 93 ++++++++++++++++--- .../silicon/ai/ai_network/ethernet_cable.dm | 9 +- .../ai/ai_network/networking_machines.dm | 2 +- .../silicon/ai/ai_network/shared_resources.dm | 6 +- tools/build/build.js | 4 +- 7 files changed, 106 insertions(+), 17 deletions(-) diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index a22bf4158d65..2b490434a663 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -1123,3 +1123,11 @@ GLOBAL_PROTECT(AdminProcCallSpamPrevention) return if(alert(usr, "Are you absolutely sure you want to reload the configuration from the default path on the disk, wiping any in-round modificatoins?", "Really reset?", "No", "Yes") == "Yes") config.admin_reload() + +/client/proc/debug_ai_networks() + set category = "Misc.Server Debug" + set name = "Debug AI Networks" + set desc = "Displays a list of all AI networks to ALL admins" + if(!check_rights(R_DEBUG)) + return + _debug_ai_networks() diff --git a/code/modules/admin/verbs/mapping.dm b/code/modules/admin/verbs/mapping.dm index 8b1368e57938..41d36ea8cdc5 100644 --- a/code/modules/admin/verbs/mapping.dm +++ b/code/modules/admin/verbs/mapping.dm @@ -76,6 +76,7 @@ GLOBAL_LIST_INIT(admin_verbs_debug_all, list( /client/proc/cmd_display_init_log, /client/proc/cmd_display_overlay_log, /client/proc/reload_configuration, + /client/proc/debug_ai_networks, /datum/admins/proc/create_or_modify_area, /client/proc/debug_typeof, // Yogs -- Adds a debug verb for getting the subtypes of something /client/proc/toggle_cdn diff --git a/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm b/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm index 257b61eb0d46..fdb251298eca 100644 --- a/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm +++ b/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm @@ -69,7 +69,6 @@ if(is_empty())//the network is now empty... qdel(src)///... delete it - //add a power machine to the current network //Warning : this proc DOESN'T check if the machine exists /datum/ai_network/proc/add_machine(obj/machinery/ai/M) @@ -136,21 +135,81 @@ /datum/ai_network/proc/total_ram_assigned() return resources.total_ram_assigned() -/datum/ai_network/proc/rebuild_remote(externally_linked = FALSE) +/* +/datum/ai_network/proc/rebuild_remote(externally_linked = FALSE, touched_networks = list()) if(!resources) return + if(src in touched_networks) + return + touched_networks += src + var/list/networks_to_rebuild = list() for(var/obj/machinery/ai/networking/N in nodes) if(N.partner && N.partner.network && N.partner.network.resources) + if(N.partner.network in touched_networks) + message_admins("[REF(src)] found touched_network!") + continue + message_admins("[REF(src)] found no mismatched resources!") if(N.partner.network.resources != resources) if(length(N.partner.network.resources.networks) > length(resources.networks)) //We merge into the biggest network - N.partner.network.resources.join_resources(resources) + N.partner.network.resources.add_resource(resources) else - resources.join_resources(N.partner.network.resources) + resources.add_resource(N.partner.network.resources) + message_admins("[REF(src)] actually rebuilt!") externally_linked = TRUE - rebuild_remote(externally_linked) + + networks_to_rebuild += N.partner.network + + if(!externally_linked) resources.split_resources(src) + for(var/datum/ai_network/AN in networks_to_rebuild) + message_admins("Telling network [REF(AN)] to rebuild!") + AN.rebuild_remote(TRUE, touched_networks) + +*/ + +/datum/ai_network/proc/rebuild_remote(externally_linked = FALSE, touched_networks = list(), datum/ai_network/originator) + if(src in touched_networks) + return + if(!originator) + originator = src + + message_admins("rebuilding") + var/list/found_networks = list() + for(var/obj/machinery/ai/networking/N in nodes) + if(N.partner && N.partner.network && N.partner.network.resources) + if(N.partner.network == src) + continue + message_admins("found partner") + externally_linked = TRUE + found_networks += N.partner.network + + if(!externally_linked) + message_admins("alone") + if(resources) + resources.split_resources(src) + else + resources = new(starting_network = src) + + found_networks -= touched_networks + + uniqueList_inplace(found_networks) + + for(var/datum/ai_network/AN in found_networks) + + + if(originator.resources != AN.resources) + if(length(originator.resources.networks) > length(AN.resources.networks)) + originator.resources.add_resource(AN.resources) + else + AN.resources.add_resource(originator.resources) + message_admins("Telling network [REF(AN)] to rebuild!") + AN.rebuild_remote(TRUE, found_networks + src, originator) + + + + /proc/merge_ainets(datum/ai_network/net1, datum/ai_network/net2) if(!net1 || !net2) //if one of the network doesn't exist, return @@ -176,10 +235,11 @@ net1.ai_list += net2.ai_list //AIs can only be in 1 network at a time - - net1.resources.networks -= net2 + /* + net1.rebuild_remote() + net2.rebuild_remote() */ + net1.update_resources() - net2.update_resources() @@ -215,6 +275,8 @@ if(!PM.connect_to_network()) //couldn't find a node on its turf... PM.disconnect_from_network() //... so disconnect if already on a network + AN.rebuild_remote() + /proc/ai_list(turf/T, source, d, unmarked = FALSE, cable_only = FALSE) . = list() @@ -240,10 +302,19 @@ . += C return . -/proc/debug_ai() +/proc/_debug_ai_networks() + var/i = 1 var/list/resource_list = list() for(var/datum/ai_network/AN in SSmachines.ainets) + var/list/interconnections = list() + for(var/obj/machinery/ai/networking/N in AN.nodes) + if(N.partner && N.partner.network) + interconnections += "#[i] Networking[ADMIN_JMP(N)] connected to [ADMIN_JMP(N.partner)]/[REF(N.partner.network)] | Same resources: [N.partner.network.resources == AN.resources ? "YES" : "NO"]" + i++ message_admins("Network: [REF(AN)] | Resources: [REF(AN.resources)]") - resource_list += AN.resources + for(var/A in interconnections) + message_admins(A) + resource_list |= AN.resources + message_admins("----------------------------") for(var/datum/ai_shared_resources/ASR in resource_list) - message_admins("Resource count, CPU: [ASR.total_cpu()] | RAM: [ASR.total_ram()]") + message_admins("Resource count [REF(ASR)], CPU: [ASR.total_cpu()] | RAM: [ASR.total_ram()]") diff --git a/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm b/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm index 86c58d009290..772b6ede6a22 100644 --- a/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm +++ b/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm @@ -182,6 +182,8 @@ By design, d1 is the smallest direction and d2 is the highest else C.network.add_cable(src) //else, we simply connect to the matching cable ai network + + // merge with the ai networks of power objects in the given direction /obj/structure/ethernet_cable/proc/mergeConnectedNetworks(direction) @@ -245,6 +247,7 @@ By design, d1 is the smallest direction and d2 is the highest if(!PM.connect_to_network()) PM.disconnect_from_network() //if we somehow can't connect the machine to the new ai network, remove it from the old nonetheless + ////////////////////////////////////////////// // ai networks handling helpers ////////////////////////////////////////////// @@ -333,7 +336,7 @@ By design, d1 is the smallest direction and d2 is the highest // remove the cut cable from its turf and ai network, so that it doesn't get count in propagate_network worklist if(remove) moveToNullspace() - var/datum/ai_network/oldAN = network + network.remove_cable(src) //remove the cut cable from its ai network @@ -513,7 +516,7 @@ By design, d1 is the smallest direction and d2 is the highest // called when cable_coil is click on an installed obj/cable // or click on a turf that already contains a "node" cable -/obj/item/stack/ethernet_coil/proc/cable_join(obj/structure/cable/C, mob/user, var/showerror = TRUE, forceddir) +/obj/item/stack/ethernet_coil/proc/cable_join(obj/structure/ethernet_cable/C, mob/user, var/showerror = TRUE, forceddir) var/turf/U = user.loc if(!isturf(U)) return @@ -574,6 +577,7 @@ By design, d1 is the smallest direction and d2 is the highest if(NC.d2 & (NC.d2 - 1))// if the cable is layed diagonally, check the others 2 possible directions NC.mergeDiagonalsNetworks(NC.d2) + use(1) return @@ -621,6 +625,7 @@ By design, d1 is the smallest direction and d2 is the highest if(C.d2 & (C.d2 - 1))// if the cable is layed diagonally, check the others 2 possible directions C.mergeDiagonalsNetworks(C.d2) + use(1) C.denode()// this call may have disconnected some cables that terminated on the centre of the turf, if so split the ai networks. diff --git a/code/modules/mob/living/silicon/ai/ai_network/networking_machines.dm b/code/modules/mob/living/silicon/ai/ai_network/networking_machines.dm index ba09fa1f2ec1..a2a3838080a5 100644 --- a/code/modules/mob/living/silicon/ai/ai_network/networking_machines.dm +++ b/code/modules/mob/living/silicon/ai/ai_network/networking_machines.dm @@ -86,7 +86,7 @@ GLOBAL_LIST_EMPTY(ai_networking_machines) target.update_icon() if(roundstart) //Resources aren't initialized yet, they'll automatically rebuild the remotes when they are - network.resources.join_resources(partner.network.resources) + network.resources.add_resource(partner.network.resources) update_icon() diff --git a/code/modules/mob/living/silicon/ai/ai_network/shared_resources.dm b/code/modules/mob/living/silicon/ai/ai_network/shared_resources.dm index ab231092ff7e..bb18fbffdb6f 100644 --- a/code/modules/mob/living/silicon/ai/ai_network/shared_resources.dm +++ b/code/modules/mob/living/silicon/ai/ai_network/shared_resources.dm @@ -30,6 +30,10 @@ for(var/datum/ai_network/AN in networks) AN.rebuild_remote(TRUE) +/datum/ai_shared_resources/Destroy() + message_admins("destroyed resource") + . = ..() + /datum/ai_shared_resources/proc/total_cpu_assigned() var/total = 0 for(var/mob/living/silicon/ai/AI in cpu_assigned) @@ -63,7 +67,7 @@ cpu_sources[N] += N.total_cpu() update_allocations() -/datum/ai_shared_resources/proc/join_resources(datum/ai_shared_resources/new_resources) +/datum/ai_shared_resources/proc/add_resource(datum/ai_shared_resources/new_resources) for(var/RU in new_resources.ram_assigned) ram_assigned[RU] = new_resources.ram_assigned[RU] diff --git a/tools/build/build.js b/tools/build/build.js index 62642539eb8d..a588a2eee734 100644 --- a/tools/build/build.js +++ b/tools/build/build.js @@ -178,8 +178,8 @@ let tasksToRun = []; switch (BUILD_MODE) { case STANDARD_BUILD: tasksToRun = [ - taskYarn, - taskTgui, + //taskYarn, + //taskTgui, taskDm('CBT'), ] break; From 72f7a00795ff8a93cbe2868136cd1ed0d90616ef Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Wed, 10 Aug 2022 19:11:46 +0200 Subject: [PATCH 27/66] it actually works? --- .../mob/living/silicon/ai/ai_network/ai_network.dm | 1 - .../mob/living/silicon/ai/ai_network/ethernet_cable.dm | 8 ++++++++ .../living/silicon/ai/ai_network/networking_machines.dm | 8 ++++++++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm b/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm index fdb251298eca..e0e1777dfd61 100644 --- a/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm +++ b/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm @@ -240,7 +240,6 @@ net2.rebuild_remote() */ net1.update_resources() - net2.update_resources() return net1 diff --git a/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm b/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm index 772b6ede6a22..da22adca2f5a 100644 --- a/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm +++ b/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm @@ -159,8 +159,10 @@ By design, d1 is the smallest direction and d2 is the highest if(network) //if we already have a ai network, then merge the two ai networks merge_ainets(network,C.network) + //network.rebuild_remote() else C.network.add_cable(src) //else, we simply connect to the matching cable ai network + C.network.rebuild_remote() //the same from the second direction component (east/west) T = get_step(src, direction&12)//go east/west @@ -179,8 +181,10 @@ By design, d1 is the smallest direction and d2 is the highest if(network) //if we already have a ai network, then merge the two ai networks merge_ainets(network,C.network) + //network.rebuild_remote() else C.network.add_cable(src) //else, we simply connect to the matching cable ai network + C.network.rebuild_remote() @@ -209,8 +213,10 @@ By design, d1 is the smallest direction and d2 is the highest if(network) //if we already have a ai network, then merge the two ai networks merge_ainets(network,C.network) + //network.rebuild_remote() else C.network.add_cable(src) //else, we simply connect to the matching cable ai network + C.network.rebuild_remote() // merge with the ai networks of power objects in the source turf /obj/structure/ethernet_cable/proc/mergeConnectedNetworksOnTurf() @@ -230,8 +236,10 @@ By design, d1 is the smallest direction and d2 is the highest continue if(C.network) merge_ainets(network, C.network) + //network.rebuild_remote() else network.add_cable(C) //the cable was ai networkless, let's just add it to our ai network + network.rebuild_remote() else if(istype(AM, /obj/machinery/ai)) //other power machines var/obj/machinery/ai/M = AM diff --git a/code/modules/mob/living/silicon/ai/ai_network/networking_machines.dm b/code/modules/mob/living/silicon/ai/ai_network/networking_machines.dm index a2a3838080a5..62187b98e957 100644 --- a/code/modules/mob/living/silicon/ai/ai_network/networking_machines.dm +++ b/code/modules/mob/living/silicon/ai/ai_network/networking_machines.dm @@ -153,3 +153,11 @@ GLOBAL_LIST_EMPTY(ai_networking_machines) locked = !locked . = TRUE +/obj/machinery/ai/networking/connect_to_network() + . = ..() + network.rebuild_remote() + +/obj/machinery/ai/networking/disconnect_from_network() + var/datum/ai_network/temp = network + . = ..() + temp.rebuild_remote() From bcacffb1acb26706a3a8dbb224b16cf9e6708f38 Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Wed, 10 Aug 2022 21:08:46 +0200 Subject: [PATCH 28/66] STUPID BUG IS FIXED --- .../silicon/ai/ai_network/ai_network.dm | 14 +++++++++---- .../ai/ai_network/networking_machines.dm | 21 ++++++++++++------- .../silicon/ai/ai_network/shared_resources.dm | 19 +++++++++-------- 3 files changed, 33 insertions(+), 21 deletions(-) diff --git a/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm b/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm index e0e1777dfd61..63695f756950 100644 --- a/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm +++ b/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm @@ -34,6 +34,13 @@ nodes -= M M.network = null + resources.networks -= src + /* + if(!length(resources.networks)) + message_admins("empty destroy") + log_game("empty destroy") + qdel(resources) */ + SSmachines.ainets -= src return ..() @@ -172,6 +179,7 @@ /datum/ai_network/proc/rebuild_remote(externally_linked = FALSE, touched_networks = list(), datum/ai_network/originator) if(src in touched_networks) return + if(!originator) originator = src @@ -187,10 +195,8 @@ if(!externally_linked) message_admins("alone") - if(resources) + if(resources && length(resources.networks) > 1) //We only split if we are actually connected to an external resource network resources.split_resources(src) - else - resources = new(starting_network = src) found_networks -= touched_networks @@ -274,7 +280,7 @@ if(!PM.connect_to_network()) //couldn't find a node on its turf... PM.disconnect_from_network() //... so disconnect if already on a network - AN.rebuild_remote() + //AN.rebuild_remote() /proc/ai_list(turf/T, source, d, unmarked = FALSE, cable_only = FALSE) diff --git a/code/modules/mob/living/silicon/ai/ai_network/networking_machines.dm b/code/modules/mob/living/silicon/ai/ai_network/networking_machines.dm index 62187b98e957..98ccae0a1161 100644 --- a/code/modules/mob/living/silicon/ai/ai_network/networking_machines.dm +++ b/code/modules/mob/living/silicon/ai/ai_network/networking_machines.dm @@ -47,10 +47,10 @@ GLOBAL_LIST_EMPTY(ai_networking_machines) if(N.partner) continue if(roundstart_connection && N.label == roundstart_connection) - connect_to_partner(N, TRUE) + connect_to_partner(N) break if(!roundstart_connection) - connect_to_partner(N, TRUE) + connect_to_partner(N) break @@ -67,12 +67,15 @@ GLOBAL_LIST_EMPTY(ai_networking_machines) /obj/machinery/ai/networking/proc/disconnect() if(partner) - network.resources.split_resources(partner.network) + var/datum/ai_network/AN = partner.network + partner.partner = null partner = null + AN.rebuild_remote() + network.rebuild_remote() -/obj/machinery/ai/networking/proc/connect_to_partner(obj/machinery/ai/networking/target, roundstart = FALSE) +/obj/machinery/ai/networking/proc/connect_to_partner(obj/machinery/ai/networking/target) if(target.partner) return if(target == src) @@ -85,8 +88,8 @@ GLOBAL_LIST_EMPTY(ai_networking_machines) target.rotation_to_partner = Get_Angle(target, src) target.update_icon() - if(roundstart) //Resources aren't initialized yet, they'll automatically rebuild the remotes when they are - network.resources.add_resource(partner.network.resources) + + network.rebuild_remote() update_icon() @@ -155,9 +158,11 @@ GLOBAL_LIST_EMPTY(ai_networking_machines) /obj/machinery/ai/networking/connect_to_network() . = ..() - network.rebuild_remote() + if(partner) + network.rebuild_remote() /obj/machinery/ai/networking/disconnect_from_network() var/datum/ai_network/temp = network . = ..() - temp.rebuild_remote() + if(partner) + temp.rebuild_remote() diff --git a/code/modules/mob/living/silicon/ai/ai_network/shared_resources.dm b/code/modules/mob/living/silicon/ai/ai_network/shared_resources.dm index bb18fbffdb6f..43a3665a68d5 100644 --- a/code/modules/mob/living/silicon/ai/ai_network/shared_resources.dm +++ b/code/modules/mob/living/silicon/ai/ai_network/shared_resources.dm @@ -12,26 +12,26 @@ -/datum/ai_shared_resources/New(network_cpu, network_ram, network_assigned_cpu, network_assigned_ram, datum/ai_network/split_network, datum/ai_network/starting_network) - if((network_cpu || network_ram || network_assigned_ram || network_assigned_cpu) && split_network) - ram_sources[split_network] = network_ram - cpu_sources[split_network] = network_cpu +/datum/ai_shared_resources/New(network_assigned_cpu, network_assigned_ram, datum/ai_network/split_network, datum/ai_network/starting_network) + if((network_assigned_ram || network_assigned_cpu) && split_network) ram_assigned = network_assigned_ram cpu_assigned = network_assigned_cpu if(split_network) split_network.resources = src networks |= split_network + update_resources() if(starting_network) starting_network.resources = src networks |= starting_network for(var/datum/ai_network/AN in networks) - AN.rebuild_remote(TRUE) + AN.rebuild_remote() /datum/ai_shared_resources/Destroy() message_admins("destroyed resource") + log_game("destroyed!") . = ..() /datum/ai_shared_resources/proc/total_cpu_assigned() @@ -81,12 +81,11 @@ update_resources() update_allocations() + message_admins("destroying add_resource") + log_game("destroying add_resource") qdel(new_resources) /datum/ai_shared_resources/proc/split_resources(datum/ai_network/split_network) - var/network_ram = split_network.total_ram() - var/network_cpu = split_network.total_cpu() - var/network_ram_assign = list() var/network_cpu_assign = list() @@ -104,9 +103,11 @@ networks -= split_network update_resources() - new /datum/ai_shared_resources(network_cpu, network_ram, network_cpu_assign, network_ram_assign, split_network) + new /datum/ai_shared_resources(network_cpu_assign, network_ram_assign, split_network) if(!length(networks)) + message_admins("destroying empty") + log_game("empty destroy") qdel(src) From 05fc905c6d5dcc41fc9f7bdd432adf73c9df203f Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Wed, 10 Aug 2022 22:13:40 +0200 Subject: [PATCH 29/66] ai resource distribution --- .../StationRuins/GaxStation/ai_whale.dmm | 3 -- .../EclipseStation/EclipseStation.dmm | 6 --- _maps/map_files/GaxStation/GaxStation.dmm | 3 -- _maps/map_files/KiloStation/KiloStation.dmm | 3 -- _maps/map_files/Omegastation/omegastation.dmm | 3 -- _maps/map_files/YogStation/YogStation.dmm | 6 --- _maps/map_files/YogsDelta/YogsDelta.dmm | 6 --- _maps/map_files/Yogsmeta/Yogsmeta.dmm | 3 -- code/__DEFINES/ai.dm | 7 ++-- .../circuitboards/computer_circuitboards.dm | 4 -- .../silicon/ai/ai_network/ai_network.dm | 14 ++----- .../silicon/ai/ai_network/shared_resources.dm | 8 ---- .../silicon/ai/decentralized/ai_data_core.dm | 20 ++++++++- .../decentralized/management/ai_dashboard.dm | 36 +++++++++++++++- .../management/resource_distribution.dm | 3 +- .../research/designs/comp_board_designs.dm | 7 ---- code/modules/research/techweb/all_nodes.dm | 2 +- tgui/packages/tgui/interfaces/AiDashboard.js | 42 +++++++++++++------ tools/build/build.js | 4 +- 19 files changed, 96 insertions(+), 84 deletions(-) diff --git a/_maps/RandomRuins/StationRuins/GaxStation/ai_whale.dmm b/_maps/RandomRuins/StationRuins/GaxStation/ai_whale.dmm index ff3182149f64..ef1569fa87d0 100644 --- a/_maps/RandomRuins/StationRuins/GaxStation/ai_whale.dmm +++ b/_maps/RandomRuins/StationRuins/GaxStation/ai_whale.dmm @@ -7,9 +7,6 @@ /turf/open/floor/plating, /area/tcommsat/computer) "aA" = ( -/obj/machinery/computer/ai_resource_distribution{ - dir = 8 - }, /obj/machinery/computer/security/telescreen{ dir = 8; name = "MiniSat Camera Monitor"; diff --git a/_maps/map_files/EclipseStation/EclipseStation.dmm b/_maps/map_files/EclipseStation/EclipseStation.dmm index 85baa543423e..d99fdfc70bec 100644 --- a/_maps/map_files/EclipseStation/EclipseStation.dmm +++ b/_maps/map_files/EclipseStation/EclipseStation.dmm @@ -45018,9 +45018,6 @@ /obj/structure/window/reinforced{ layer = 4.1 }, -/obj/machinery/computer/ai_resource_distribution{ - dir = 1 - }, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/ai_upload) "bOT" = ( @@ -86278,9 +86275,6 @@ /turf/open/floor/plasteel, /area/hallway/primary/fore) "nsA" = ( -/obj/machinery/computer/ai_resource_distribution{ - dir = 4 - }, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, /turf/open/floor/carpet, diff --git a/_maps/map_files/GaxStation/GaxStation.dmm b/_maps/map_files/GaxStation/GaxStation.dmm index 939127c62b20..a009e159b709 100644 --- a/_maps/map_files/GaxStation/GaxStation.dmm +++ b/_maps/map_files/GaxStation/GaxStation.dmm @@ -10960,9 +10960,6 @@ /turf/open/floor/plasteel, /area/security/main) "fvC" = ( -/obj/machinery/computer/ai_resource_distribution{ - dir = 4 - }, /turf/open/floor/plasteel/dark, /area/ai_monitored/secondarydatacore) "fvG" = ( diff --git a/_maps/map_files/KiloStation/KiloStation.dmm b/_maps/map_files/KiloStation/KiloStation.dmm index 63cdf54eefe5..1550583c7c57 100644 --- a/_maps/map_files/KiloStation/KiloStation.dmm +++ b/_maps/map_files/KiloStation/KiloStation.dmm @@ -91824,9 +91824,6 @@ dir = 8 }, /obj/effect/decal/cleanable/dirt, -/obj/machinery/computer/ai_resource_distribution{ - dir = 8 - }, /turf/open/floor/plasteel/dark, /area/ai_monitored/storage/satellite) "laJ" = ( diff --git a/_maps/map_files/Omegastation/omegastation.dmm b/_maps/map_files/Omegastation/omegastation.dmm index 416486332452..2d4ddd5f8ab0 100644 --- a/_maps/map_files/Omegastation/omegastation.dmm +++ b/_maps/map_files/Omegastation/omegastation.dmm @@ -43172,9 +43172,6 @@ /turf/open/floor/plasteel/white, /area/science/research) "tZB" = ( -/obj/machinery/computer/ai_resource_distribution{ - dir = 1 - }, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, diff --git a/_maps/map_files/YogStation/YogStation.dmm b/_maps/map_files/YogStation/YogStation.dmm index c212c1e018c2..cdf7aa6ea51e 100644 --- a/_maps/map_files/YogStation/YogStation.dmm +++ b/_maps/map_files/YogStation/YogStation.dmm @@ -30288,9 +30288,6 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/obj/machinery/computer/ai_resource_distribution{ - dir = 1 - }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ dir = 1 }, @@ -53037,9 +53034,6 @@ /obj/machinery/newscaster/security_unit{ pixel_x = 28 }, -/obj/machinery/computer/ai_resource_distribution{ - dir = 8 - }, /turf/open/floor/plasteel/grimy, /area/ai_monitored/turret_protected/aisat_interior) "qLt" = ( diff --git a/_maps/map_files/YogsDelta/YogsDelta.dmm b/_maps/map_files/YogsDelta/YogsDelta.dmm index 2273af75c1c4..ac9c3089180e 100644 --- a/_maps/map_files/YogsDelta/YogsDelta.dmm +++ b/_maps/map_files/YogsDelta/YogsDelta.dmm @@ -66054,9 +66054,6 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/machinery/computer/ai_resource_distribution{ - dir = 1 - }, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/aisat_interior) "cao" = ( @@ -81321,9 +81318,6 @@ /turf/open/floor/plating, /area/maintenance/port/aft) "cAD" = ( -/obj/machinery/computer/ai_resource_distribution{ - dir = 1 - }, /turf/open/floor/plasteel/dark, /area/ai_monitored/secondarydatacore) "cAE" = ( diff --git a/_maps/map_files/Yogsmeta/Yogsmeta.dmm b/_maps/map_files/Yogsmeta/Yogsmeta.dmm index 43ca9c041bf1..21f714424188 100644 --- a/_maps/map_files/Yogsmeta/Yogsmeta.dmm +++ b/_maps/map_files/Yogsmeta/Yogsmeta.dmm @@ -69258,9 +69258,6 @@ dir = 1; network = list("ss13","tcomms") }, -/obj/machinery/computer/ai_resource_distribution{ - dir = 1 - }, /turf/open/floor/plasteel/grimy, /area/tcommsat/computer) "mQO" = ( diff --git a/code/__DEFINES/ai.dm b/code/__DEFINES/ai.dm index c1fb6eb1ef97..319c9dd7f8a1 100644 --- a/code/__DEFINES/ai.dm +++ b/code/__DEFINES/ai.dm @@ -62,6 +62,7 @@ GLOBAL_LIST_INIT(ai_project_categories, list( //Self explanatory, see MAX_AI_BITCOIN_MINED_PER_TICK * this = max money 1 AI can contribute per tick. (17,5 credits every 2 seconds, max 63k over 2 hours) #define AI_BITCOIN_PRICE 0.05 -//How much 1 CPU/RAM counts as for network activity purposes. Used for transmitters/receivers -#define CPU_NETWORK_ACTIVITY 3 -#define RAM_NETWORK_ACTIVITY 2 + +//How much RAM and CPU a core needs locally to be functional +#define AI_CORE_CPU_REQUIREMENT 1 +#define AI_CORE_RAM_REQUIREMENT 1 diff --git a/code/game/objects/items/circuitboards/computer_circuitboards.dm b/code/game/objects/items/circuitboards/computer_circuitboards.dm index 32ee802d8443..26dcb2a23a1d 100644 --- a/code/game/objects/items/circuitboards/computer_circuitboards.dm +++ b/code/game/objects/items/circuitboards/computer_circuitboards.dm @@ -403,10 +403,6 @@ icon_state = "science" build_path = /obj/machinery/computer/ai_server_console -/obj/item/circuitboard/computer/ai_resource_distribution - name = "AI Resource Distribution Console (Computer Board)" - icon_state = "science" - build_path = /obj/machinery/computer/ai_resource_distribution //Security diff --git a/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm b/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm index 63695f756950..8e4981bead52 100644 --- a/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm +++ b/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm @@ -35,11 +35,11 @@ M.network = null resources.networks -= src - /* + if(!length(resources.networks)) - message_admins("empty destroy") - log_game("empty destroy") - qdel(resources) */ + qdel(resources) + + resources = null SSmachines.ainets -= src return ..() @@ -183,18 +183,15 @@ if(!originator) originator = src - message_admins("rebuilding") var/list/found_networks = list() for(var/obj/machinery/ai/networking/N in nodes) if(N.partner && N.partner.network && N.partner.network.resources) if(N.partner.network == src) continue - message_admins("found partner") externally_linked = TRUE found_networks += N.partner.network if(!externally_linked) - message_admins("alone") if(resources && length(resources.networks) > 1) //We only split if we are actually connected to an external resource network resources.split_resources(src) @@ -210,13 +207,10 @@ originator.resources.add_resource(AN.resources) else AN.resources.add_resource(originator.resources) - message_admins("Telling network [REF(AN)] to rebuild!") AN.rebuild_remote(TRUE, found_networks + src, originator) - - /proc/merge_ainets(datum/ai_network/net1, datum/ai_network/net2) if(!net1 || !net2) //if one of the network doesn't exist, return return diff --git a/code/modules/mob/living/silicon/ai/ai_network/shared_resources.dm b/code/modules/mob/living/silicon/ai/ai_network/shared_resources.dm index 43a3665a68d5..2e25b6262ca9 100644 --- a/code/modules/mob/living/silicon/ai/ai_network/shared_resources.dm +++ b/code/modules/mob/living/silicon/ai/ai_network/shared_resources.dm @@ -29,10 +29,6 @@ for(var/datum/ai_network/AN in networks) AN.rebuild_remote() -/datum/ai_shared_resources/Destroy() - message_admins("destroyed resource") - log_game("destroyed!") - . = ..() /datum/ai_shared_resources/proc/total_cpu_assigned() var/total = 0 @@ -81,8 +77,6 @@ update_resources() update_allocations() - message_admins("destroying add_resource") - log_game("destroying add_resource") qdel(new_resources) /datum/ai_shared_resources/proc/split_resources(datum/ai_network/split_network) @@ -106,8 +100,6 @@ new /datum/ai_shared_resources(network_cpu_assign, network_ram_assign, split_network) if(!length(networks)) - message_admins("destroying empty") - log_game("empty destroy") qdel(src) diff --git a/code/modules/mob/living/silicon/ai/decentralized/ai_data_core.dm b/code/modules/mob/living/silicon/ai/decentralized/ai_data_core.dm index b16328b60bfa..6a0bf6357a3e 100644 --- a/code/modules/mob/living/silicon/ai/decentralized/ai_data_core.dm +++ b/code/modules/mob/living/silicon/ai/decentralized/ai_data_core.dm @@ -113,8 +113,9 @@ GLOBAL_VAR_INIT(primary_data_core, null) /obj/machinery/ai/data_core/proc/valid_data_core() if(!is_reebe(z) && !is_station_level(z)) return FALSE - if(valid_ticks > 0) + if(valid_ticks > 0 && network && network.total_cpu() >= AI_CORE_CPU_REQUIREMENT && network.total_ram() >= AI_CORE_RAM_REQUIREMENT) return TRUE + return FALSE @@ -185,6 +186,20 @@ GLOBAL_VAR_INIT(primary_data_core, null) else icon_state = "core-offline" +/obj/machinery/ai/data_core/connect_to_network() //If we ever get connected to a network (or a new one gets created) we get the AI to the correct one too + . = ..() + for(var/mob/living/silicon/ai/AI in contents) + if(!AI.ai_network) + network.ai_list |= AI + AI.ai_network = network + if(AI.ai_network != network) + if(AI.ai_network) + AI.ai_network.remove_ai(AI) + AI.ai_network = network + network.ai_list |= AI + + + /obj/machinery/ai/data_core/proc/partytime() var/current_color = random_color() set_light(7, 3, current_color) @@ -195,6 +210,9 @@ GLOBAL_VAR_INIT(primary_data_core, null) if(TimerID) deltimer(TimerID) TimerID = null + + + /obj/machinery/ai/data_core/primary name = "primary AI Data Core" desc = "A complicated computer system capable of emulating the neural functions of a human at near-instantanous speeds. This one has a scrawny and faded note saying: 'Primary AI Data Core'" diff --git a/code/modules/mob/living/silicon/ai/decentralized/management/ai_dashboard.dm b/code/modules/mob/living/silicon/ai/decentralized/management/ai_dashboard.dm index ab0ed3c4724f..e1b02b820a12 100644 --- a/code/modules/mob/living/silicon/ai/decentralized/management/ai_dashboard.dm +++ b/code/modules/mob/living/silicon/ai/decentralized/management/ai_dashboard.dm @@ -74,8 +74,9 @@ data["used_cpu"] = total_cpu_used data["used_ram"] = total_ram_used - data["max_cpu"] = owner.ai_network.total_cpu() - data["max_ram"] = owner.ai_network.total_ram() + data["total_cpu_used"] = owner.ai_network.resources.total_cpu_assigned() + data["max_cpu"] = owner.ai_network.resources.total_cpu() + data["max_ram"] = owner.ai_network.resources.total_ram() data["categories"] = GLOB.ai_project_categories data["available_projects"] = list() @@ -167,6 +168,37 @@ if("toggle_contribute_cpu") contribute_spare_cpu = !contribute_spare_cpu to_chat(owner, span_notice("You now[contribute_spare_cpu ? "" : " DO NOT"] contribute spare CPU to generating research points.")) + + if("clear_ai_resources") + owner.ai_network.resources.clear_ai_resources(src) + . = TRUE + + if("set_cpu") + var/amount = params["amount_cpu"] + + if(amount > 1 || amount < 0) + return + + owner.ai_network.resources.set_cpu(owner, amount) + . = TRUE + if("max_cpu_assign") + var/amount = (1 - owner.ai_network.resources.total_cpu_assigned()) + owner.ai_network.resources.cpu_assigned[owner] + + owner.ai_network.resources.set_cpu(owner, amount) + . = TRUE + if("add_ram") + if(owner.ai_network.resources.total_ram_assigned() >= owner.ai_network.resources.total_ram()) + return + owner.ai_network.resources.add_ram(owner, 1) + . = TRUE + + if("remove_ram") + var/current_ram = owner.ai_network.resources.ram_assigned[owner] + + if(current_ram <= 0) + return + owner.ai_network.resources.remove_ram(owner, 1) + . = TRUE /datum/ai_dashboard/proc/get_project_by_name(project_name, only_available = FALSE) for(var/datum/ai_project/AP as anything in available_projects) diff --git a/code/modules/mob/living/silicon/ai/decentralized/management/resource_distribution.dm b/code/modules/mob/living/silicon/ai/decentralized/management/resource_distribution.dm index 3620eff3a6be..d8e15064b0e2 100644 --- a/code/modules/mob/living/silicon/ai/decentralized/management/resource_distribution.dm +++ b/code/modules/mob/living/silicon/ai/decentralized/management/resource_distribution.dm @@ -1,3 +1,4 @@ +/* /obj/machinery/computer/ai_resource_distribution name = "\improper AI system resource distribution" desc = "Used for distributing processing resources across the current artificial intelligences." @@ -13,7 +14,7 @@ circuit = /obj/item/circuitboard/computer/ai_resource_distribution -/* + /obj/machinery/computer/ai_resource_distribution/emag_act(mob/user) if(obj_flags & EMAGGED) return diff --git a/code/modules/research/designs/comp_board_designs.dm b/code/modules/research/designs/comp_board_designs.dm index 56ff85dcf5c6..fb23fb3076c7 100644 --- a/code/modules/research/designs/comp_board_designs.dm +++ b/code/modules/research/designs/comp_board_designs.dm @@ -311,10 +311,3 @@ category = list("Computer Boards") departmental_flags = DEPARTMENTAL_FLAG_SCIENCE -/datum/design/board/ai_resource_distribution - name = "Computer Design (AI Resource Distribution Console)" - desc = "Allows for the construction of circuit boards used to build an AI Resource Distribution console." - id = "ai_resource_distribution" - build_path = /obj/item/circuitboard/computer/ai_resource_distribution - category = list("Computer Boards") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index cef97acf2a22..cd98108af4db 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -386,7 +386,7 @@ display_name = "Artificial Intelligence" description = "AI unit research." prereq_ids = list("base") - design_ids = list("server_cabinet", "ai_data_core", "ai_core_display", "ai_server_overview", "ram1", "basic_ai_cpu", "ai_resource_distribution", "aifixer", "safeguard_module", "onehuman_module", "protectstation_module", "quarantine_module", "oxygen_module", "freeform_module", "reset_module", "purge_module", "remove_module", "freeformcore_module", "asimov_module", "crewsimov_module", "paladin_module", "tyrant_module", "overlord_module", "ceo_module", "cowboy_module", "mother_module", "silicop_module", "construction_module", "metaexperiment_module", "researcher_module", "siliconcollective_module", "spotless_module", "clown_module", "chapai_module", "druid_module", "detective_module", "default_module", "borg_ai_control", "mecha_tracking_ai_control", "intellicard") + design_ids = list("server_cabinet", "ai_data_core", "ai_core_display", "ai_server_overview", "ram1", "basic_ai_cpu", "aifixer", "safeguard_module", "onehuman_module", "protectstation_module", "quarantine_module", "oxygen_module", "freeform_module", "reset_module", "purge_module", "remove_module", "freeformcore_module", "asimov_module", "crewsimov_module", "paladin_module", "tyrant_module", "overlord_module", "ceo_module", "cowboy_module", "mother_module", "silicop_module", "construction_module", "metaexperiment_module", "researcher_module", "siliconcollective_module", "spotless_module", "clown_module", "chapai_module", "druid_module", "detective_module", "default_module", "borg_ai_control", "mecha_tracking_ai_control", "intellicard") research_costs = list(TECHWEB_POINT_TYPE_AI = 1000) export_price = 5000 diff --git a/tgui/packages/tgui/interfaces/AiDashboard.js b/tgui/packages/tgui/interfaces/AiDashboard.js index c26059f6da07..8fbf92d2a0cf 100644 --- a/tgui/packages/tgui/interfaces/AiDashboard.js +++ b/tgui/packages/tgui/interfaces/AiDashboard.js @@ -1,6 +1,6 @@ import { Fragment } from 'inferno'; import { useBackend, useLocalState } from '../backend'; -import { Box, Button, Tabs, ProgressBar, Section, Divider, LabeledControls, NumberInput, Input } from '../components'; +import { Box, Button, Tabs, ProgressBar, Section, Divider, LabeledControls, NumberInput, Input, LabeledList, Flex } from '../components'; import { Window } from '../layouts'; export const AiDashboard = (props, context) => { @@ -255,17 +255,35 @@ export const AiDashboard = (props, context) => { )} {tab === 4 && (
-
- {amount_of_cpu}/{data.max_cpu} THz - -
-
- {data.current_ram ? data.current_ram : 0 }/{data.max_ram} TB - +
act("clear_ai_resources")}>Clear AI Resources + )}> + + CPU Capacity: + + {amount_of_cpu} THz + + act('set_cpu', { + amount_cpu: Math.round((value / 100) * 100) / 100, + })} /> + + + + + + RAM Capacity: + + {data.current_ram} TB + +
)} diff --git a/tools/build/build.js b/tools/build/build.js index a588a2eee734..62642539eb8d 100644 --- a/tools/build/build.js +++ b/tools/build/build.js @@ -178,8 +178,8 @@ let tasksToRun = []; switch (BUILD_MODE) { case STANDARD_BUILD: tasksToRun = [ - //taskYarn, - //taskTgui, + taskYarn, + taskTgui, taskDm('CBT'), ] break; From 8833b0d755ab1642ef8b31335affa8fcbc95ac6d Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Thu, 18 Aug 2022 14:12:03 +0200 Subject: [PATCH 30/66] we do a little coding --- code/__DEFINES/machines.dm | 1 + .../silicon/ai/ai_network/ethernet_cable.dm | 11 +++++ .../computers/_modular_computer_shared.dm | 7 +++ .../programs/ainetworkinterface.dm | 43 +++++++++++++++++++ .../modular_computers/hardware/aiinterface.dm | 41 ++++++++++++++++++ yogstation.dme | 2 + 6 files changed, 105 insertions(+) create mode 100644 code/modules/modular_computers/file_system/programs/ainetworkinterface.dm create mode 100644 code/modules/modular_computers/hardware/aiinterface.dm diff --git a/code/__DEFINES/machines.dm b/code/__DEFINES/machines.dm index 18175df01c6a..5ee374544300 100644 --- a/code/__DEFINES/machines.dm +++ b/code/__DEFINES/machines.dm @@ -47,6 +47,7 @@ #define MC_CHARGE "CHARGE" #define MC_AI "AI" #define MC_SENSORS "SENSORS" +#define MC_AI_NETWORK "AINETWORK" //NTNet stuff, for modular computers // NTNet module-configuration values. Do not change these. If you need to add another use larger number (5..6..7 etc) diff --git a/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm b/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm index da22adca2f5a..3c168d9ad34d 100644 --- a/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm +++ b/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm @@ -117,6 +117,17 @@ By design, d1 is the smallest direction and d2 is the highest to_chat(user, span_danger("The cable is not powered.")) shock(user, 5, 0.2) */ + else if(istype(W, /obj/item/modular_computer)) + var/obj/item/modular_computer/MC = W + + if(MC.all_components[MC_AI_NETWORK]) + var/obj/item/computer_hardware/ai_interface/ai_interface = computer.all_components[MC_AI_NETWORK] + if(ai_interface) + ai_interface.connect_cable(src) + else + to_chat(user, span_warning("[MC] has no AI interface!")) + + add_fingerprint(user) // Items usable on a cable : diff --git a/code/modules/modular_computers/computers/_modular_computer_shared.dm b/code/modules/modular_computers/computers/_modular_computer_shared.dm index b8017d182091..69a72e1779d2 100644 --- a/code/modules/modular_computers/computers/_modular_computer_shared.dm +++ b/code/modules/modular_computers/computers/_modular_computer_shared.dm @@ -64,3 +64,10 @@ . += "It has a printer installed." if(user_is_adjacent) . += "The printer's paper levels are at: [printer_slot.stored_paper]/[printer_slot.max_paper].]" + + var/obj/item/computer_hardware/ai_interface/ai_interface = get_modular_computer_part(MC_AI_NETWORK) + if(ai_interface) + if(ai_interface.connected_cable) + . += "It has an AI network interface. It is currently connected to an ethernet cable. + else + . += "It has an AI network interface." diff --git a/code/modules/modular_computers/file_system/programs/ainetworkinterface.dm b/code/modules/modular_computers/file_system/programs/ainetworkinterface.dm new file mode 100644 index 000000000000..f0dfa5e103cc --- /dev/null +++ b/code/modules/modular_computers/file_system/programs/ainetworkinterface.dm @@ -0,0 +1,43 @@ +/datum/computer_file/program/ai_network_interface + filename = "aiinterface" + filedesc = "AI Network Interface" + category = PROGRAM_CATEGORY_ENGI + program_icon_state = "power_monitor" + extended_desc = "This program connects to a local AI network to allow for administrative access" + ui_header = "power_norm.gif" + transfer_access = ACCESS_NETWORK + usage_flags = PROGRAM_CONSOLE + requires_ntnet = FALSE + size = 8 + tgui_id = "NtosAIMonitor" + program_icon = "network-wired" + + var/obj/structure/ethernet_cable/attached_cable + + +/datum/computer_file/program/ai_network_interface/run_program(mob/living/user) + . = ..(user) + search() + + +/datum/computer_file/program/ai_network_interface/process_tick() + if(!get_ainet()) + search() + else + record() + +/datum/computer_file/program/ai_network_interface/proc/search() + var/turf/T = get_turf(computer) + attached_cable = locate(/obj/structure/ethernet_cable) in T + if(attached_cable) + return + +/datum/computer_file/program/ai_network_interface/proc/get_ainet() + if(attached_cable) + return attached_cable.ai_network + return FALSE + +/datum/computer_file/program/ai_network_interface/ui_data() + var/list/data = get_header_data() + + return data diff --git a/code/modules/modular_computers/hardware/aiinterface.dm b/code/modules/modular_computers/hardware/aiinterface.dm new file mode 100644 index 000000000000..a19c7cfdd302 --- /dev/null +++ b/code/modules/modular_computers/hardware/aiinterface.dm @@ -0,0 +1,41 @@ +/obj/item/computer_hardware/ai_interface + name = "portable AI network interface" + desc = "A module allowing this computer to interface with local AI networks. Only works with portable computers" + power_usage = 15 //W + icon_state = "card_mini" + w_class = WEIGHT_CLASS_SMALL // Can't be installed into tablets/PDAs + device_type = MC_AI_NETWORK + expansion_hw = TRUE + + var/obj/structure/ethernet_cable/connected_cable = null + + +// Called when component is installed into PC. +/obj/item/computer_hardware/ai_interface/on_install(obj/item/modular_computer/M, mob/living/user = null) + RegisterSignal(M, COMSIG_MOVABLE_MOVED, .proc/parent_moved) + + +/obj/item/computer_hardware/ai_interface/on_remove(obj/item/modular_computer/M, mob/living/user = null) + UnregisterSignal(M, COMSIG_MOVABLE_MOVED) + connected_cable = null + +/obj/item/computer_hardware/ai_interface/proc/parent_moved() + if(connected_cable) + if(!connected_cable.Adjacent(holder.physical)) + connected_cable = null + +/obj/item/computer_hardware/ai_interface/proc/connect_cable(obj/structure/ethernet_cable/EC) + connected_cable = EC + //TODO: Reset timers and such in here + +/obj/item/computer_hardware/ai_interface/proc/get_network() + if(!connected_cable) + return FALSE + return connected_cable.ai_network + + +/obj/item/computer_hardware/ai_interface/can_install(obj/item/modular_computer/M, mob/living/user = null) + if(!ismachinery(M.physical) && !M.physical.anchored) + return ..() + to_chat(user, span_warning("\The [src] is incompatible with stationary computers!")) + return FALSE diff --git a/yogstation.dme b/yogstation.dme index 05402524aeb8..78292b821c30 100644 --- a/yogstation.dme +++ b/yogstation.dme @@ -2654,6 +2654,7 @@ #include "code\modules\modular_computers\file_system\data.dm" #include "code\modules\modular_computers\file_system\program.dm" #include "code\modules\modular_computers\file_system\program_events.dm" +#include "code\modules\modular_computers\file_system\programs\ainetworkinterface.dm" #include "code\modules\modular_computers\file_system\programs\airestorer.dm" #include "code\modules\modular_computers\file_system\programs\alarm.dm" #include "code\modules\modular_computers\file_system\programs\arcade.dm" @@ -2682,6 +2683,7 @@ #include "code\modules\modular_computers\file_system\programs\antagonist\revelation.dm" #include "code\modules\modular_computers\hardware\_hardware.dm" #include "code\modules\modular_computers\hardware\ai_slot.dm" +#include "code\modules\modular_computers\hardware\aiinterface.dm" #include "code\modules\modular_computers\hardware\battery_module.dm" #include "code\modules\modular_computers\hardware\card_slot.dm" #include "code\modules\modular_computers\hardware\CPU.dm" From 87d62cb70122acd42c9e480ce5996b39d5a15746 Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Thu, 18 Aug 2022 14:12:40 +0200 Subject: [PATCH 31/66] Update _modular_computer_shared.dm --- .../modular_computers/computers/_modular_computer_shared.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/modular_computers/computers/_modular_computer_shared.dm b/code/modules/modular_computers/computers/_modular_computer_shared.dm index 69a72e1779d2..b89f9405387e 100644 --- a/code/modules/modular_computers/computers/_modular_computer_shared.dm +++ b/code/modules/modular_computers/computers/_modular_computer_shared.dm @@ -68,6 +68,6 @@ var/obj/item/computer_hardware/ai_interface/ai_interface = get_modular_computer_part(MC_AI_NETWORK) if(ai_interface) if(ai_interface.connected_cable) - . += "It has an AI network interface. It is currently connected to an ethernet cable. + . += "It has an AI network interface. It is currently connected to an ethernet cable." else . += "It has an AI network interface." From 2b015798cfc1203dd2992e02b3bb332166c9ced7 Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Thu, 18 Aug 2022 14:19:25 +0200 Subject: [PATCH 32/66] bonk --- .../silicon/ai/ai_network/ethernet_cable.dm | 2 +- .../computers/item/laptop_presets.dm | 11 ++++++++++- .../programs/ainetworkinterface.dm | 19 +++++++++++++------ .../modular_computers/hardware/aiinterface.dm | 2 +- tools/build/build.js | 4 ++-- 5 files changed, 27 insertions(+), 11 deletions(-) diff --git a/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm b/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm index 3c168d9ad34d..69f4222ded21 100644 --- a/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm +++ b/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm @@ -121,7 +121,7 @@ By design, d1 is the smallest direction and d2 is the highest var/obj/item/modular_computer/MC = W if(MC.all_components[MC_AI_NETWORK]) - var/obj/item/computer_hardware/ai_interface/ai_interface = computer.all_components[MC_AI_NETWORK] + var/obj/item/computer_hardware/ai_interface/ai_interface = MC.all_components[MC_AI_NETWORK] if(ai_interface) ai_interface.connect_cable(src) else diff --git a/code/modules/modular_computers/computers/item/laptop_presets.dm b/code/modules/modular_computers/computers/item/laptop_presets.dm index 46135a775ed6..2bb353e00d81 100644 --- a/code/modules/modular_computers/computers/item/laptop_presets.dm +++ b/code/modules/modular_computers/computers/item/laptop_presets.dm @@ -10,4 +10,13 @@ /obj/item/modular_computer/laptop/preset/brig_physician desc = "A low-end laptop often used by brig physicians." - starting_files = list(new /datum/computer_file/program/secureye) \ No newline at end of file + starting_files = list(new /datum/computer_file/program/secureye) + +/obj/item/modular_computer/laptop/preset/network_admin + desc = "A multi-purpose laptop often used by network admins." + starting_files = list(new /datum/computer_file/program/ai_network_interface) + starting_components = list( /obj/item/computer_hardware/processor_unit/small, + /obj/item/stock_parts/cell/computer, + /obj/item/computer_hardware/hard_drive, + /obj/item/computer_hardware/network_card, + /obj/item/computer_hardware/ai_interface) diff --git a/code/modules/modular_computers/file_system/programs/ainetworkinterface.dm b/code/modules/modular_computers/file_system/programs/ainetworkinterface.dm index f0dfa5e103cc..a741e69e6172 100644 --- a/code/modules/modular_computers/file_system/programs/ainetworkinterface.dm +++ b/code/modules/modular_computers/file_system/programs/ainetworkinterface.dm @@ -17,14 +17,13 @@ /datum/computer_file/program/ai_network_interface/run_program(mob/living/user) . = ..(user) - search() + if(ismachinery(computer)) + search() /datum/computer_file/program/ai_network_interface/process_tick() - if(!get_ainet()) + if(ismachinery(computer) && !get_ainet()) search() - else - record() /datum/computer_file/program/ai_network_interface/proc/search() var/turf/T = get_turf(computer) @@ -33,11 +32,19 @@ return /datum/computer_file/program/ai_network_interface/proc/get_ainet() - if(attached_cable) - return attached_cable.ai_network + if(ismachinery(computer)) + if(attached_cable) + return attached_cable.network + if(computer.all_components[MC_AI_NETWORK]) + var/obj/item/computer_hardware/ai_interface/ai_interface = computer.all_components[MC_AI_NETWORK] + if(ai_interface) + return ai_interface.get_network() return FALSE /datum/computer_file/program/ai_network_interface/ui_data() var/list/data = get_header_data() + var/datum/ai_network/net = get_ainet() + data["has_ai_net"] = net + data["physical_pc"] = ismachinery(computer) return data diff --git a/code/modules/modular_computers/hardware/aiinterface.dm b/code/modules/modular_computers/hardware/aiinterface.dm index a19c7cfdd302..ad3c8d455fee 100644 --- a/code/modules/modular_computers/hardware/aiinterface.dm +++ b/code/modules/modular_computers/hardware/aiinterface.dm @@ -31,7 +31,7 @@ /obj/item/computer_hardware/ai_interface/proc/get_network() if(!connected_cable) return FALSE - return connected_cable.ai_network + return connected_cable.network /obj/item/computer_hardware/ai_interface/can_install(obj/item/modular_computer/M, mob/living/user = null) diff --git a/tools/build/build.js b/tools/build/build.js index 62642539eb8d..a588a2eee734 100644 --- a/tools/build/build.js +++ b/tools/build/build.js @@ -178,8 +178,8 @@ let tasksToRun = []; switch (BUILD_MODE) { case STANDARD_BUILD: tasksToRun = [ - taskYarn, - taskTgui, + //taskYarn, + //taskTgui, taskDm('CBT'), ] break; From d296e023754bf03d906bee62a3794e0cda84313a Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Thu, 18 Aug 2022 14:21:58 +0200 Subject: [PATCH 33/66] Update console_presets.dm --- .../computers/machinery/console_presets.dm | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/code/modules/modular_computers/computers/machinery/console_presets.dm b/code/modules/modular_computers/computers/machinery/console_presets.dm index d577f364c5ed..4b0bdd71a4e3 100644 --- a/code/modules/modular_computers/computers/machinery/console_presets.dm +++ b/code/modules/modular_computers/computers/machinery/console_presets.dm @@ -186,3 +186,12 @@ qdel(frame) return FALSE return ..() + + +// ===== NETWORK ADMIN CONSOLE ===== +/obj/machinery/modular_computer/console/preset/netmin + console_department = "Engineering" + name = "ai network console" + desc = "A stationary computer. This one comes preloaded with ai network administration software" + starting_files = list( new /datum/computer_file/program/ai_network_interface) + initial_program = /datum/computer_file/program/ai_network_interface From 5ed3441571a176bb65dfb74e19ae16205884b367 Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Thu, 18 Aug 2022 14:23:30 +0200 Subject: [PATCH 34/66] e --- _maps/map_files/YogStation/YogStation.dmm | 125 +++++++++++++--------- 1 file changed, 72 insertions(+), 53 deletions(-) diff --git a/_maps/map_files/YogStation/YogStation.dmm b/_maps/map_files/YogStation/YogStation.dmm index cdf7aa6ea51e..38e80ac79a49 100644 --- a/_maps/map_files/YogStation/YogStation.dmm +++ b/_maps/map_files/YogStation/YogStation.dmm @@ -17523,21 +17523,6 @@ "byf" = ( /turf/closed/wall/r_wall, /area/science/server) -"byg" = ( -/obj/machinery/camera{ - c_tag = "AI Chamber - Fore"; - dir = 4; - network = list("aicore") - }, -/obj/structure/cable/yellow{ - icon_state = "2-4" - }, -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/porta_turret/ai, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/turret_protected/ai) "byi" = ( /turf/closed/wall, /area/security/checkpoint/science) @@ -25919,6 +25904,18 @@ /obj/structure/window/reinforced/tinted, /turf/open/floor/carpet, /area/medical/psych) +"dpp" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 4 + }, +/obj/machinery/modular_computer/console/preset/netmin{ + dir = 8 + }, +/obj/structure/ethernet_cable{ + icon_state = "0-8" + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "dpw" = ( /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/trimline/blue/filled/line{ @@ -28542,6 +28539,15 @@ }, /turf/open/floor/plasteel/dark, /area/bridge) +"eHH" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 4 + }, +/obj/structure/ethernet_cable{ + icon_state = "4-8" + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "eHU" = ( /obj/item/radio/intercom{ name = "Station Intercom (General)"; @@ -35488,6 +35494,12 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/aisat_interior) +"ieo" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "ier" = ( /obj/item/radio/intercom{ name = "Station Intercom (General)"; @@ -36015,6 +36027,19 @@ }, /turf/open/floor/plasteel/dark, /area/engine/engine_smes) +"isb" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/manifold/cyan/hidden{ + dir = 1 + }, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/obj/structure/ethernet_cable{ + icon_state = "1-4" + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "isI" = ( /obj/structure/rack, /obj/item/sensor_device{ @@ -36979,16 +37004,6 @@ /obj/structure/table, /turf/open/floor/plasteel, /area/science/misc_lab) -"iQd" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/atmospherics/pipe/manifold/cyan/hidden{ - dir = 1 - }, -/obj/structure/ethernet_cable{ - icon_state = "1-2" - }, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/turret_protected/ai) "iQm" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -38390,6 +38405,15 @@ }, /turf/closed/wall, /area/engine/atmos_distro) +"juA" = ( +/obj/machinery/light, +/obj/machinery/camera{ + c_tag = "AI Chamber - Aft"; + dir = 4; + network = list("aicore") + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "jva" = ( /obj/machinery/light{ dir = 8 @@ -40037,13 +40061,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/starboard) -"kqW" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/porta_turret/ai, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/turret_protected/ai) "kra" = ( /obj/structure/window/reinforced{ dir = 1; @@ -40251,6 +40268,22 @@ }, /turf/open/floor/circuit, /area/ai_monitored/turret_protected/aisat_interior) +"kyK" = ( +/obj/machinery/camera{ + c_tag = "AI Chamber - Fore"; + dir = 4; + network = list("aicore") + }, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/table/wood, +/obj/item/modular_computer/laptop/preset/network_admin, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "kyM" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -54694,16 +54727,6 @@ }, /turf/open/floor/plasteel/dark, /area/crew_quarters/heads/chief) -"rEe" = ( -/obj/machinery/light, -/obj/machinery/camera{ - c_tag = "AI Chamber - Aft"; - dir = 4; - network = list("aicore") - }, -/obj/machinery/porta_turret/ai, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/turret_protected/ai) "rEg" = ( /obj/effect/turf_decal/tile/yellow{ dir = 1 @@ -61318,10 +61341,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/plating, /area/maintenance/port/aft) -"uGk" = ( -/obj/machinery/porta_turret/ai, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/turret_protected/ai) "uGm" = ( /obj/machinery/door/airlock/maintenance{ name = "Detective Maintenance"; @@ -109910,13 +109929,13 @@ pEf cva cva cva -byg +kyK xTw bRu xFg xXs qrP -rEe +juA cva cva pEf @@ -110424,7 +110443,7 @@ pEf cva cva fgU -iQd +isb bmg pes rnq @@ -110681,7 +110700,7 @@ koy cva cva lHO -rjo +eHH exo rjo jMV @@ -110938,7 +110957,7 @@ pEf cva cva xUW -rjo +dpp qYj jTn nVK @@ -111452,13 +111471,13 @@ pEf aFW cva cva -kqW +ieo sPc axp xoQ pyn pnR -uGk +sAu cva cva pEf From cdf1f11596012f0cd167fe58e1eb1cb6fd23e132 Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Thu, 18 Aug 2022 14:51:46 +0200 Subject: [PATCH 35/66] bonk --- .../silicon/ai/ai_network/ethernet_cable.dm | 1 + .../computers/item/computer.dm | 11 ++++++++++ .../programs/ainetworkinterface.dm | 6 +++--- .../packages/tgui/interfaces/NtosAIMonitor.js | 20 +++++++++++++++++++ 4 files changed, 35 insertions(+), 3 deletions(-) create mode 100644 tgui/packages/tgui/interfaces/NtosAIMonitor.js diff --git a/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm b/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm index 69f4222ded21..9ac8d13a83bd 100644 --- a/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm +++ b/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm @@ -124,6 +124,7 @@ By design, d1 is the smallest direction and d2 is the highest var/obj/item/computer_hardware/ai_interface/ai_interface = MC.all_components[MC_AI_NETWORK] if(ai_interface) ai_interface.connect_cable(src) + to_chat(user, span_notice("You connect to the ethernet cable.")) else to_chat(user, span_warning("[MC] has no AI interface!")) diff --git a/code/modules/modular_computers/computers/item/computer.dm b/code/modules/modular_computers/computers/item/computer.dm index 019fc73f62fa..c6bda4b5fb88 100644 --- a/code/modules/modular_computers/computers/item/computer.dm +++ b/code/modules/modular_computers/computers/item/computer.dm @@ -574,3 +574,14 @@ active_program = program program.alert_pending = FALSE enabled = TRUE + +/obj/item/modular_computer/pickup(mob/user) + . = ..() + RegisterSignal(user, COMSIG_MOVABLE_MOVED, .proc/parent_moved) + +/obj/item/modular_computer/dropped(mob/user) + . = ..() + UnregisterSignal(user, COMSIG_MOVABLE_MOVED) + +/obj/item/modular_computer/proc/parent_moved() + SEND_SIGNAL(src, COMSIG_MOVABLE_MOVED) diff --git a/code/modules/modular_computers/file_system/programs/ainetworkinterface.dm b/code/modules/modular_computers/file_system/programs/ainetworkinterface.dm index a741e69e6172..becd41f9b989 100644 --- a/code/modules/modular_computers/file_system/programs/ainetworkinterface.dm +++ b/code/modules/modular_computers/file_system/programs/ainetworkinterface.dm @@ -6,7 +6,7 @@ extended_desc = "This program connects to a local AI network to allow for administrative access" ui_header = "power_norm.gif" transfer_access = ACCESS_NETWORK - usage_flags = PROGRAM_CONSOLE + usage_flags = PROGRAM_CONSOLE | PROGRAM_LAPTOP | PROGRAM_TABLET requires_ntnet = FALSE size = 8 tgui_id = "NtosAIMonitor" @@ -17,12 +17,12 @@ /datum/computer_file/program/ai_network_interface/run_program(mob/living/user) . = ..(user) - if(ismachinery(computer)) + if(ismachinery(computer.physical)) search() /datum/computer_file/program/ai_network_interface/process_tick() - if(ismachinery(computer) && !get_ainet()) + if(ismachinery(computer.physical) && !get_ainet()) search() /datum/computer_file/program/ai_network_interface/proc/search() diff --git a/tgui/packages/tgui/interfaces/NtosAIMonitor.js b/tgui/packages/tgui/interfaces/NtosAIMonitor.js new file mode 100644 index 000000000000..cdb0d37e6356 --- /dev/null +++ b/tgui/packages/tgui/interfaces/NtosAIMonitor.js @@ -0,0 +1,20 @@ +import { NtosWindow } from '../layouts'; +import { Fragment } from 'inferno'; +import { useBackend } from '../backend'; +import { Button, Box, Section } from '../components'; + +export const NtosAIMonitor = (props, context) => { + const { act, data } = useBackend(context); + return ( + + +
+ {data.has_ai_net} +
+
+
+ ); +}; From 24130a8f722dcce996bda9df6ebde62318e21547 Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Thu, 18 Aug 2022 14:51:53 +0200 Subject: [PATCH 36/66] catwalk stuff --- code/__DEFINES/footsteps.dm | 7 ++ code/game/objects/items/stacks/rods.dm | 1 + .../objects/items/stacks/tiles/tile_types.dm | 59 +++++++++++ .../floor/plating/catwalk_plating.dm | 100 ++++++++++++++++++ icons/turf/floors/catwalk_plating.dmi | Bin 0 -> 4353 bytes yogstation.dme | 1 + 6 files changed, 168 insertions(+) create mode 100644 code/game/turfs/simulated/floor/plating/catwalk_plating.dm create mode 100644 icons/turf/floors/catwalk_plating.dmi diff --git a/code/__DEFINES/footsteps.dm b/code/__DEFINES/footsteps.dm index b1af0b7cd6f5..a95acefa16f6 100644 --- a/code/__DEFINES/footsteps.dm +++ b/code/__DEFINES/footsteps.dm @@ -6,6 +6,7 @@ #define FOOTSTEP_GRASS "grass" #define FOOTSTEP_WATER "water" #define FOOTSTEP_LAVA "lava" +#define FOOTSTEP_CATWALK "catwalk" //barefoot sounds #define FOOTSTEP_WOOD_BAREFOOT "woodbarefoot" #define FOOTSTEP_WOOD_CLAW "woodclaw" @@ -71,6 +72,12 @@ GLOBAL_LIST_INIT(footstep, list( 'sound/effects/footstep/lava1.ogg', 'sound/effects/footstep/lava2.ogg', 'sound/effects/footstep/lava3.ogg'), 100, 0), + FOOTSTEP_CATWALK = list(list( + 'sound/effects/footstep/catwalk1.ogg', + 'sound/effects/footstep/catwalk2.ogg', + 'sound/effects/footstep/catwalk3.ogg', + 'sound/effects/footstep/catwalk4.ogg', + 'sound/effects/footstep/catwalk5.ogg'), 100, 1), )) //bare footsteps lists GLOBAL_LIST_INIT(barefootstep, list( diff --git a/code/game/objects/items/stacks/rods.dm b/code/game/objects/items/stacks/rods.dm index 0e4bd241045b..ea04b5bdac18 100644 --- a/code/game/objects/items/stacks/rods.dm +++ b/code/game/objects/items/stacks/rods.dm @@ -10,6 +10,7 @@ GLOBAL_LIST_INIT(rod_recipes, list ( \ new/datum/stack_recipe("fore port spacepod frame", /obj/item/pod_parts/pod_frame/fore_port, 15, time = 30, one_per_turf = 0), \ new/datum/stack_recipe("fore starboard spacepod frame", /obj/item/pod_parts/pod_frame/fore_starboard, 15, time = 30, one_per_turf = 0), \ new/datum/stack_recipe("aft port spacepod frame", /obj/item/pod_parts/pod_frame/aft_port, 15, time = 30, one_per_turf = 0), \ + new/datum/stack_recipe("catwalk floor tile", /obj/item/stack/tile/catwalk_tile, 1, 4, 20), \ new/datum/stack_recipe("aft starboard spacepod frame", /obj/item/pod_parts/pod_frame/aft_starboard, 15, time = 30, one_per_turf = 0), \ // yogs end )) diff --git a/code/game/objects/items/stacks/tiles/tile_types.dm b/code/game/objects/items/stacks/tiles/tile_types.dm index 8f0808ac5bda..bac148763593 100644 --- a/code/game/objects/items/stacks/tiles/tile_types.dm +++ b/code/game/objects/items/stacks/tiles/tile_types.dm @@ -403,3 +403,62 @@ /obj/item/stack/tile/eighties/loaded amount = 15 + +//Catwalk Tiles +/obj/item/stack/tile/catwalk_tile //This is our base type, sprited to look maintenance-styled + name = "catwalk plating" + singular_name = "catwalk plating tile" + desc = "Flooring that shows its contents underneath. Engineers love it!" + icon_state = "maint_catwalk" + inhand_icon_state = "tile-catwalk" + mats_per_unit = list(/datum/material/iron=100) + turf_type = /turf/open/floor/catwalk_floor + merge_type = /obj/item/stack/tile/catwalk_tile //Just to be cleaner, these all stack with eachother + tile_reskin_types = list( + /obj/item/stack/tile/catwalk_tile, + /obj/item/stack/tile/catwalk_tile/iron, + /obj/item/stack/tile/catwalk_tile/iron_white, + /obj/item/stack/tile/catwalk_tile/iron_dark, + /obj/item/stack/tile/catwalk_tile/flat_white, + /obj/item/stack/tile/catwalk_tile/titanium, + /obj/item/stack/tile/catwalk_tile/iron_smooth //this is the original greenish one + ) + +/obj/item/stack/tile/catwalk_tile/sixty + amount = 60 + +/obj/item/stack/tile/catwalk_tile/iron + name = "iron catwalk floor" + singular_name = "iron catwalk floor tile" + icon_state = "iron_catwalk" + turf_type = /turf/open/floor/catwalk_floor/iron + +/obj/item/stack/tile/catwalk_tile/iron_white + name = "white catwalk floor" + singular_name = "white catwalk floor tile" + icon_state = "whiteiron_catwalk" + turf_type = /turf/open/floor/catwalk_floor/iron_white + +/obj/item/stack/tile/catwalk_tile/iron_dark + name = "dark catwalk floor" + singular_name = "dark catwalk floor tile" + icon_state = "darkiron_catwalk" + turf_type = /turf/open/floor/catwalk_floor/iron_dark + +/obj/item/stack/tile/catwalk_tile/flat_white + name = "flat white catwalk floor" + singular_name = "flat white catwalk floor tile" + icon_state = "flatwhite_catwalk" + turf_type = /turf/open/floor/catwalk_floor/flat_white + +/obj/item/stack/tile/catwalk_tile/titanium + name = "titanium catwalk floor" + singular_name = "titanium catwalk floor tile" + icon_state = "titanium_catwalk" + turf_type = /turf/open/floor/catwalk_floor/titanium + +/obj/item/stack/tile/catwalk_tile/iron_smooth //this is the greenish one + name = "smooth iron catwalk floor" + singular_name = "smooth iron catwalk floor tile" + icon_state = "smoothiron_catwalk" + turf_type = /turf/open/floor/catwalk_floor/iron_smooth diff --git a/code/game/turfs/simulated/floor/plating/catwalk_plating.dm b/code/game/turfs/simulated/floor/plating/catwalk_plating.dm new file mode 100644 index 000000000000..47b56ee9fc28 --- /dev/null +++ b/code/game/turfs/simulated/floor/plating/catwalk_plating.dm @@ -0,0 +1,100 @@ +/** + * ## catwalk flooring + * + * They show what's underneath their catwalk flooring (pipes and the like) + * you can screwdriver it to interact with the underneath stuff without destroying the tile... + * unless you want to! + */ +/turf/open/floor/catwalk_floor //the base type, meant to look like a maintenance panel + icon = 'icons/turf/floors/catwalk_plating.dmi' + icon_state = "maint_above" + name = "catwalk floor" + desc = "Flooring that shows its contents underneath. Engineers love it!" + baseturfs = /turf/open/floor/plating + floor_tile = /obj/item/stack/tile/catwalk_tile + layer = CATWALK_LAYER + plane = GAME_PLANE + footstep = FOOTSTEP_CATWALK + overfloor_placed = TRUE + underfloor_accessibility = UNDERFLOOR_VISIBLE + var/covered = TRUE + var/catwalk_type = "maint" + var/static/list/catwalk_underlays = list() + +/turf/open/floor/catwalk_floor/Initialize(mapload) + . = ..() + if(!catwalk_underlays[catwalk_type]) + var/mutable_appearance/plating_underlay = mutable_appearance(icon, "[catwalk_type]_below", TURF_LAYER) + catwalk_underlays[catwalk_type] = plating_underlay + underlays += catwalk_underlays[catwalk_type] + update_appearance() + +/turf/open/floor/catwalk_floor/examine(mob/user) + . = ..() + + if(covered) + . += span_notice("You can unscrew it to reveal the contents beneath.") + else + . += span_notice("You can screw it to hide the contents beneath.") + . += span_notice("There's a small crack on the edge of it.") + +/turf/open/floor/catwalk_floor/screwdriver_act(mob/living/user, obj/item/tool) + . = ..() + covered = !covered + if(!covered) + underfloor_accessibility = UNDERFLOOR_INTERACTABLE + layer = TURF_LAYER + plane = FLOOR_PLANE + icon_state = "[catwalk_type]_below" + else + underfloor_accessibility = UNDERFLOOR_VISIBLE + layer = CATWALK_LAYER + plane = GAME_PLANE + icon_state = "[catwalk_type]_above" + user.balloon_alert(user, "[!covered ? "cover removed" : "cover added"]") + tool.play_tool_sound(src) + update_appearance() + +/turf/open/floor/catwalk_floor/crowbar_act(mob/user, obj/item/crowbar) + if(covered) + user.balloon_alert(user, "remove cover first!") + return FALSE + . = ..() + +//Reskins! More fitting with most of our tiles, and appear as a radial on the base type +/turf/open/floor/catwalk_floor/iron + name = "iron plated catwalk floor" + icon_state = "iron_above" + floor_tile = /obj/item/stack/tile/catwalk_tile/iron + catwalk_type = "iron" + + +/turf/open/floor/catwalk_floor/iron_white + name = "white plated catwalk floor" + icon_state = "whiteiron_above" + floor_tile = /obj/item/stack/tile/catwalk_tile/iron_white + catwalk_type = "whiteiron" + +/turf/open/floor/catwalk_floor/iron_dark + name = "dark plated catwalk floor" + icon_state = "darkiron_above" + floor_tile = /obj/item/stack/tile/catwalk_tile/iron_dark + catwalk_type = "darkiron" + +/turf/open/floor/catwalk_floor/flat_white + name = "white large plated catwalk floor" + icon_state = "flatwhite_above" + floor_tile = /obj/item/stack/tile/catwalk_tile/flat_white + catwalk_type = "flatwhite" + +/turf/open/floor/catwalk_floor/titanium + name = "titanium plated catwalk floor" + icon_state = "titanium_above" + floor_tile = /obj/item/stack/tile/catwalk_tile/titanium + catwalk_type = "titanium" + +/turf/open/floor/catwalk_floor/iron_smooth //the original green type + name = "smooth plated catwalk floor" + icon_state = "smoothiron_above" + floor_tile = /obj/item/stack/tile/catwalk_tile/iron_smooth + catwalk_type = "smoothiron" diff --git a/icons/turf/floors/catwalk_plating.dmi b/icons/turf/floors/catwalk_plating.dmi new file mode 100644 index 0000000000000000000000000000000000000000..b49c46564de508d0ddc8fd050c50655d6ffe6352 GIT binary patch literal 4353 zcmXAtc|26#|HtnbTeeY=m^4zNB4kT4hERmz6S9v|n5<1I#292>BZSdRAxpBfV5}p1 z_N~aCu@f`a!HnPZ{rz#y`QyINbRRx(!l1o<&|aPZ;EPY`)es0(;KNO)Q4wic=%4A5A4Tv0ss7ku<_vMU?G#6!lF6V(|#wd zlyrEgU8CWr%2n#V1#X}Gn4hbF;NcQ}s%?v(>2RyH5%=A!k}!hEv9^zVpFf+z zayjOrgqZ`u007xA(A75g#jo0XxSwhk#dfQY&fD(8%fwqBuQZhf>MB0k0GTlz^U#QM zj-nP4>=!)3bb`$FqJ)CYnJQX|`H9hq89DjrNWu4orMd=suW+|g3iCndyfY}5FGSDm z#(Mm{w0&C9WQKXQ$N%~E#!oek%oWX~+3~Ebz_r@+EWi1{NtbRlg~}I4Rn6K&1mj<> zTDA@kxh<^NxKuO8B@U-GL%G9r$_Zu1@cS!DyC4a%xZl{w@hXy?XLC;_loFwHW~}mY zV|hTeL{_)_AtC~m(NuyZNsMo{^x5c1t$wC0)$AE&&ZW&grMH{&1lHCTE~jwHwf;+~ zC>HmJG%r8Z1Y2u9^xV&xFo5SDc$D!}T~-hJOXv077(P$IsH3^JKOabAujGh)<#m zS?A@NiV8@dtB*na9=Kx`X@>;kHc`BNR_rAA({XWZb91^DBuo2`G`|I8qEW5_wsz2! zQZLT$g_%4rjt1C^DZ2jm1K!v{#l*zawf1s->HCTJ?7*4 zds;CGDMkomk`C~5$}@RhctU*?A`sx`=U=Bk%2_VlAmVH*JeSkl@RLX05b6yC>e&?J zFBLYCmLw(%DTPbw0R){y5gjS?aW!7P?q) zLATMc)q+3pcsiJMMS^^np(iN#O-eWshahU#+hsGefFGP!r7!LAkkv;r-SfttCSC&` zTa|tVQ82Cx_9e=llrLXFv6PJvDJa6t1of-$@(3_m;boTMHo_hTUD_%fB|Zcf`E*Oq zdJdw7K(0`Pmr1>^ViZaJsIjqjXZMMt-0VWLHmbqt{8OC0s$|2tfGU=}DNyqjL7A># z*5Q=HbhvMRzjf|d^b=rx|E_^5Lh=>DDVuolSD}2`jZnLU7RmfiA5|F1+4yVDG&IyP z>*qF>ANR1JxsCcN4r-`oeiH7ex zv!a&zH0wRk*Uh}?mrRUIh<28JuDU{IyP;a*Qzq#N3cxAPCri9^AXzdd>fnuzMlNYv zr^Vw^?n8Jd<*ka3$Gy!x3t=1dCHHEJnAmeSa7EJq^Y!+sav0t)Y0$Ut5?r zQa}3#CT`ENLGt8%VdpZOu4Hg-OZgqoBPL5F81}MlaHY7(FyI-Y%=Y@T#qd68;;K!I zT0(&q_p2T;XPWgsXp^#`GXz02e8B=l<%EGUz<#o>6GF5uHk*_kTh_fgT!hbsk&WO9 z-rhr;#3^ei@hjgC#V)S4S^&R z-%S&Jz{T=Gy|Jrw=z;~^<}B{GX)N$8S@Bb%ToHMh=2sR9B3EDoOFaC2g)g=46+bJc zF>2_GNUaUNKh&!tbm>Wd=>9gm(}LO5^zwE7ALaAKdDHV<$b{CJwg*?@JEY^fZLta` z2fGCBAL(B_rv+I1mxjN^Lrj7eA_FwlYi83jd7MSQoE+l zE&z~q`)#8lZ|8k6pYh;eP|7K_c4<*K8FTh%UgA+>JBW`xEr4_i(I|{J%JshRl%p;~ z%nljklnFbWUGQsGCr<8S@aj)EU3#zrK!1?j8|uurr6hfY{lzAWpw8SC)8C#x778~y9S$YoDI`<{|DO(qw zEae*lLpHkYT?)~b`}E0ZX4?4(Br7&M%(-W6W#vI(eR_aputfH}8wOn4l#n;A!VngB z^nVnMz8>&vYAVvqu`&Ley+BJ#ODUG&--t=wi_m$;O7N_RfloaIy zJa>EL8sZ|9K*DI)c5-o4*Y?4a9>owdoeYYbxs zaEbE0Z}vkk&9W>%o2z88WC^I5N2DJ3URuv!#_xfOh5?g}8T9%#xO5Qp@ynavK*~0F zn4V};+L%zmmbzzK2EzZWU$G*Ow;Yh;Wnd-vcb(&-3=i_YZ!pZ4MmR4t!>G^ z>Q{J6<HQV8{J zb5TElwo}0Y^hKbu?8&$!K}6#u5Kzs@MfwX7jGt({bNx9U#(>J> zrh?wHw1>NX8v`8LI2jsUQA%5|vO_*vQrCK>H&IP8E`1TL=TgQ)s!KZB7DF)cUg$k@ zld{}CEv0oVCcD;29M_-Oj#2*Ma=T-EJO1f^5y`2+|4v;}yPe?^aIj15uYJ{DOA4T8 zB^SS#BL5Gf9v7wErI?`UIyntRB~5<3qdTfFu zKbp9Sa+lh3v3RN}*J8;)@GN#4A(eg++WI%afcwUuPs70T4JKgej$`f3{|g}-2Fcy^ z{?}pL_U`ScBP94?mY!y zsT(fsXuYi<`fQrTk#~p-;x#hSGSQOk+T%IJ=u z2v_8-z%wP)m%1uEtoKur;#G!MQJGft}dew zm$TlGrGbH~3?{0t_FYG5 zf9~xx$4%Qx|5;m@uW7W-k$2q14hGYMqtX(CoP8%D8gtwk9YPY9h5D+h_@S!L?v*E| zg}Z!q&ot^$P(Oc#b@e%y9a0YjYNll5CCdCpBONfIP}3|n;>6j!BtNP!y~)B{2%ACZ z{>@3GFMj$sngiWD*mRbuaB#XFtDhfw>#ZF}?}5)xERaEfZ*}E70KbNgRwP4utE!Ce zf!n5=FOba~5cfA!Z)gGI5|)m6Cc+)wgAm6#o;gtg&g<7WdPQnhxbjUv>!-CQmRV0s z<2WjpSGknGH`MI3&m56A0jVf!jbDJ`MC9vuqykD{nk1RS_G6!{aQ2g0_HT!4jA`IR zf^0zxo84(%?|xRJe2Zsu#qKc)2A#vvv>DVvm)Fg&yNedwsvbl78t8T{E49+UNcFa$o>?;z qg;w^;-I5+q8oTZz8c0T}3+=oafZhWsB3o^Wdb literal 0 HcmV?d00001 diff --git a/yogstation.dme b/yogstation.dme index 78292b821c30..6edb689064ca 100644 --- a/yogstation.dme +++ b/yogstation.dme @@ -1291,6 +1291,7 @@ #include "code\game\turfs\simulated\floor\plating.dm" #include "code\game\turfs\simulated\floor\reinf_floor.dm" #include "code\game\turfs\simulated\floor\plating\asteroid.dm" +#include "code\game\turfs\simulated\floor\plating\catwalk_plating.dm" #include "code\game\turfs\simulated\floor\plating\dirt.dm" #include "code\game\turfs\simulated\floor\plating\misc_plating.dm" #include "code\game\turfs\simulated\wall\mineral_walls.dm" From e31bc6a50f80f65b8f2d984f5d717abdf8ecf633 Mon Sep 17 00:00:00 2001 From: esainane Date: Fri, 29 Oct 2021 11:14:40 +1300 Subject: [PATCH 37/66] Refactor /turf/var/intact (#62331) Turfs have a variable, intact, which conflates three meanings: Determining whether there's something that can be pried out, such as directly with a crowbar or indirectly with a tile stack and a crowbar off-hand. Determining whether underfloor pieces are visible. Determining whether underfloor pieces can be interacted with - by players with tools, through interaction with effects like chemical acid, or foam. When plating is hit with a stack of tiles, /turf/open/floor/attackby checks whether the turf is intact, and if so, ends the attack chain regardless of whether or not the attempt to hotswap a turf (with a crowbar) is successful or not. However, turfs which want the underfloor to be visible - such as catwalks and glass - set the intact variable to FALSE, and so can be repeatedly placed over one another, as if they were the first tile to be placed over the plating. This refactors /turf/var/intact into two distinct variables: /turf/var/overfloor_placed, for whether or not there is something over plating. /turf/var/underfloor_visible, for whether or not the various underfloor pieces should be invisible, visible, or both visible and interactable. All references to /turf/var/intact have been replaced with an equivalent overfloor_placed or underfloor_visible reference, depending on which check is appropriate. underfloor_accessibility can take one of UNDERFLOOR_HIDDEN, UNDERFLOOR_VISIBLE, or UNDERFLOOR_INTERACTABLE. This prevents cases such as acid foam or tools phasing through glass floors to affect the underfloor pieces underneath, and covers all kinds of unusual, not-wiring-visiblity usage such as Holodeck completeness, Revenant interaction, or station integrity checking. --- code/__HELPERS/game.dm | 4 ++++ code/controllers/subsystem/minor_mapping.dm | 2 +- code/game/machinery/navbeacon.dm | 9 ++++----- .../objects/effects/effect_system/effects_foam.dm | 2 +- .../objects/effects/effect_system/effects_smoke.dm | 2 +- code/game/objects/items/devices/powersink.dm | 2 +- code/game/objects/obj_defense.dm | 4 ++-- code/game/turfs/openspace/openspace.dm | 2 ++ code/game/turfs/simulated/floor.dm | 8 +++++--- code/game/turfs/simulated/floor/plating.dm | 3 ++- code/game/turfs/space/space.dm | 3 ++- code/game/turfs/turf.dm | 13 ++++++++----- code/modules/antagonists/blob/blob_report.dm | 8 ++------ .../antagonists/revenant/revenant_abilities.dm | 2 +- code/modules/holodeck/computer.dm | 9 +++++++-- code/modules/holodeck/turfs.dm | 2 +- .../living/silicon/ai/ai_network/ethernet_cable.dm | 8 ++++---- .../mob/living/simple_animal/friendly/mouse.dm | 2 +- code/modules/power/apc.dm | 2 +- code/modules/power/cable.dm | 4 ++-- code/modules/power/power.dm | 2 +- code/modules/power/smes.dm | 2 +- code/modules/power/terminal.dm | 2 +- code/modules/recycling/disposal/construction.dm | 2 +- code/modules/recycling/disposal/pipe.dm | 2 +- 25 files changed, 57 insertions(+), 44 deletions(-) diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm index b4455e63a8e1..e33fd3c38b8c 100644 --- a/code/__HELPERS/game.dm +++ b/code/__HELPERS/game.dm @@ -8,6 +8,10 @@ #define Z_TURFS(ZLEVEL) block(locate(1,1,ZLEVEL), locate(world.maxx, world.maxy, ZLEVEL)) #define CULT_POLL_WAIT 2400 +#define UNDERFLOOR_HIDDEN 0 +#define UNDERFLOOR_VISIBLE 1 +#define UNDERFLOOR_INTERACTABLE 2 + /proc/get_area_name(atom/X, format_text = FALSE, is_sensor = FALSE) var/area/A = isarea(X) ? X : get_area(X) if(!A) diff --git a/code/controllers/subsystem/minor_mapping.dm b/code/controllers/subsystem/minor_mapping.dm index 2c50afeb811f..4363ad0c77db 100644 --- a/code/controllers/subsystem/minor_mapping.dm +++ b/code/controllers/subsystem/minor_mapping.dm @@ -39,7 +39,7 @@ SUBSYSTEM_DEF(minor_mapping) while(turfs.len && amount > 0) var/turf/T = pick_n_take(turfs) var/obj/item/storage/backpack/satchel/flat/S = new(T) - S.hide(intact=TRUE) + S.hide(intact=(T.underfloor_accessibility < UNDERFLOOR_VISIBLE)) amount-- diff --git a/code/game/machinery/navbeacon.dm b/code/game/machinery/navbeacon.dm index 311e1da770ce..c5dfd1a250d5 100644 --- a/code/game/machinery/navbeacon.dm +++ b/code/game/machinery/navbeacon.dm @@ -86,8 +86,8 @@ /obj/machinery/navbeacon/attackby(obj/item/I, mob/user, params) var/turf/T = loc - if(T.intact) - return // prevent intraction when T-scanner revealed + if(T.underfloor_accessibility < UNDERFLOOR_INTERACTABLE) + return // prevent intraction when T-scanner revealed if(I.tool_behaviour == TOOL_SCREWDRIVER) open = !open @@ -119,9 +119,8 @@ . = ..() var/ai = isAI(user) var/turf/T = loc - if(T.intact) - return // prevent intraction when T-scanner revealed - + if(T.underfloor_accessibility < UNDERFLOOR_INTERACTABLE) + return // prevent intraction when T-scanner revealed if(!open && !ai) // can't alter controls if not open, unless you're an AI to_chat(user, span_warning("The beacon's control cover is closed!")) return diff --git a/code/game/objects/effects/effect_system/effects_foam.dm b/code/game/objects/effects/effect_system/effects_foam.dm index 3c8e2843d528..f94e0596c748 100644 --- a/code/game/objects/effects/effect_system/effects_foam.dm +++ b/code/game/objects/effects/effect_system/effects_foam.dm @@ -146,7 +146,7 @@ continue if(isturf(O.loc)) var/turf/T = O.loc - if(T.intact && O.level == 1) //hidden under the floor + if(T.underfloor_accessibility < UNDERFLOOR_INTERACTABLE && O.level == 1) //hidden under the floor continue if(lifetime % reagent_divisor) reagents.reaction(O, VAPOR, fraction) diff --git a/code/game/objects/effects/effect_system/effects_smoke.dm b/code/game/objects/effects/effect_system/effects_smoke.dm index e83f4da302a0..e28dba3d7315 100644 --- a/code/game/objects/effects/effect_system/effects_smoke.dm +++ b/code/game/objects/effects/effect_system/effects_smoke.dm @@ -230,7 +230,7 @@ for(var/atom/movable/AM in T) if(AM.type == src.type) continue - if(T.intact && AM.level == 1) //hidden under the floor + if(T.underfloor_accessibility < UNDERFLOOR_INTERACTABLE && AM.level == 1) //hidden under the floor continue reagents.reaction(AM, TOUCH, fraction) diff --git a/code/game/objects/items/devices/powersink.dm b/code/game/objects/items/devices/powersink.dm index 449e9e660fa2..eef412632548 100644 --- a/code/game/objects/items/devices/powersink.dm +++ b/code/game/objects/items/devices/powersink.dm @@ -63,7 +63,7 @@ if(I.tool_behaviour == TOOL_SCREWDRIVER) if(mode == DISCONNECTED) var/turf/T = loc - if(isturf(T) && !T.intact) + if(isturf(T) && T.underfloor_accessibility >= UNDERFLOOR_INTERACTABLE) attached = locate() in T if(!attached) to_chat(user, span_warning("This device must be placed over an exposed, powered cable node!")) diff --git a/code/game/objects/obj_defense.dm b/code/game/objects/obj_defense.dm index 3135b34dae1a..fe4e56b59791 100644 --- a/code/game/objects/obj_defense.dm +++ b/code/game/objects/obj_defense.dm @@ -102,7 +102,7 @@ /obj/blob_act(obj/structure/blob/B) if(isturf(loc)) var/turf/T = loc - if(T.intact && level == 1) //the blob doesn't destroy thing below the floor + if(T.underfloor_accessibility < UNDERFLOOR_INTERACTABLE && level == 1) //the blob doesn't destroy thing below the floor return take_damage(400, BRUTE, MELEE, 0, get_dir(src, B)) @@ -213,7 +213,7 @@ GLOBAL_DATUM_INIT(acid_overlay, /mutable_appearance, mutable_appearance('icons/e /obj/fire_act(exposed_temperature, exposed_volume) if(isturf(loc)) var/turf/T = loc - if(T.intact && level == 1) //fire can't damage things hidden below the floor. + if(T.underfloor_accessibility < UNDERFLOOR_INTERACTABLE && level == 1) //fire can't damage things hidden below the floor. return if(exposed_temperature && !(resistance_flags & FIRE_PROOF)) take_damage(clamp(0.02 * exposed_temperature, 0, 20), BURN, FIRE, 0) diff --git a/code/game/turfs/openspace/openspace.dm b/code/game/turfs/openspace/openspace.dm index 1cf670c3da6e..0d861d897505 100644 --- a/code/game/turfs/openspace/openspace.dm +++ b/code/game/turfs/openspace/openspace.dm @@ -7,6 +7,8 @@ //mouse_opacity = MOUSE_OPACITY_TRANSPARENT var/can_cover_up = TRUE var/can_build_on = TRUE + overfloor_placed = FALSE + underfloor_accessibility = UNDERFLOOR_INTERACTABLE /turf/open/openspace/debug/update_multiz() ..() diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm index 4101efd3ac69..dfe5b6c73072 100644 --- a/code/game/turfs/simulated/floor.dm +++ b/code/game/turfs/simulated/floor.dm @@ -16,9 +16,11 @@ var/icon_plating = "plating" thermal_conductivity = 0.040 heat_capacity = 10000 - intact = 1 + var/broken = 0 var/burnt = 0 + + overfloor_placed = TRUE var/floor_tile = null //tile that this floor drops var/list/broken_states var/list/burnt_states @@ -172,7 +174,7 @@ return 1 if(..()) return 1 - if(intact && istype(C, /obj/item/stack/tile)) + if(overfloor_placed && istype(C, /obj/item/stack/tile)) try_replace_tile(C, user, params) return 0 @@ -180,7 +182,7 @@ if(istype(I,/obj/item/jawsoflife/jimmy)) to_chat(user,"The [I] cannot pry tiles.") return - return intact ? pry_tile(I, user) : FALSE + return overfloor_placed ? pry_tile(I, user) : FALSE /turf/open/floor/proc/try_replace_tile(obj/item/stack/tile/T, mob/user, params) if(T.turf_type == type) diff --git a/code/game/turfs/simulated/floor/plating.dm b/code/game/turfs/simulated/floor/plating.dm index 4614d4f06669..cd086783fd72 100644 --- a/code/game/turfs/simulated/floor/plating.dm +++ b/code/game/turfs/simulated/floor/plating.dm @@ -10,7 +10,8 @@ /turf/open/floor/plating name = "plating" icon_state = "plating" - intact = FALSE + overfloor_placed = FALSE + underfloor_accessibility = UNDERFLOOR_INTERACTABLE baseturfs = /turf/baseturf_bottom footstep = FOOTSTEP_PLATING barefootstep = FOOTSTEP_HARD_BAREFOOT diff --git a/code/game/turfs/space/space.dm b/code/game/turfs/space/space.dm index 537bf53e53ba..24e352f25198 100644 --- a/code/game/turfs/space/space.dm +++ b/code/game/turfs/space/space.dm @@ -2,7 +2,8 @@ icon = 'icons/turf/space.dmi' icon_state = "0" name = "\proper space" - intact = 0 + overfloor_placed = FALSE + underfloor_accessibility = UNDERFLOOR_INTERACTABLE temperature = TCMB thermal_conductivity = OPEN_HEAT_TRANSFER_COEFFICIENT diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 8ded26f2fa9e..086d4712d2bc 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -4,7 +4,10 @@ GLOBAL_LIST_EMPTY(station_turfs) icon = 'icons/turf/floors.dmi' level = 1 - var/intact = 1 + /// If there's a tile over a basic floor that can be ripped out + var/overfloor_placed = FALSE + /// How accessible underfloor pieces such as wires, pipes, etc are on this turf. Can be HIDDEN, VISIBLE, or INTERACTABLE. + var/underfloor_accessibility = UNDERFLOOR_HIDDEN // baseturfs can be either a list or a single turf type. // In class definition like here it should always be a single type. @@ -337,7 +340,7 @@ GLOBAL_LIST_EMPTY(station_turfs) /turf/proc/levelupdate() for(var/obj/O in src) if(O.level == 1 && (O.flags_1 & INITIALIZED_1)) - O.hide(src.intact) + O.hide(underfloor_accessibility < UNDERFLOOR_VISIBLE) // override for space turfs, since they should never hide anything /turf/open/space/levelupdate() @@ -399,7 +402,7 @@ GLOBAL_LIST_EMPTY(station_turfs) //////////////////////////////////////////////////// /turf/singularity_act() - if(intact) + if(underfloor_accessibility < UNDERFLOOR_INTERACTABLE) for(var/obj/O in contents) //this is for deleting things like wires contained in the turf if(O.level != 1) continue @@ -412,7 +415,7 @@ GLOBAL_LIST_EMPTY(station_turfs) return TRUE /turf/proc/can_lay_cable() - return can_have_cabling() & !intact + return can_have_cabling() && underfloor_accessibility >= UNDERFLOOR_INTERACTABLE /turf/proc/visibilityChanged() GLOB.cameranet.updateVisibility(src) @@ -487,7 +490,7 @@ GLOBAL_LIST_EMPTY(station_turfs) acid_type = /obj/effect/acid/alien var/has_acid_effect = FALSE for(var/obj/O in src) - if(intact && O.level == 1) //hidden under the floor + if(underfloor_accessibility < UNDERFLOOR_INTERACTABLE && O.level == 1) //hidden under the floor continue if(istype(O, acid_type)) var/obj/effect/acid/A = O diff --git a/code/modules/antagonists/blob/blob_report.dm b/code/modules/antagonists/blob/blob_report.dm index f0d46888c2f6..d8ee7857d635 100644 --- a/code/modules/antagonists/blob/blob_report.dm +++ b/code/modules/antagonists/blob/blob_report.dm @@ -29,15 +29,11 @@ floor += 1 if(iswallturf(T)) - var/turf/closed/wall/TW = T - if(TW.intact) - wall += 2 - else - wall += 1 + wall += 1 if(istype(T, /turf/closed/wall/r_wall)) var/turf/closed/wall/r_wall/TRW = T - if(TRW.intact) + if(TRW.d_state == INTACT) r_wall += 2 else r_wall += 1 diff --git a/code/modules/antagonists/revenant/revenant_abilities.dm b/code/modules/antagonists/revenant/revenant_abilities.dm index 70cad681d522..ba330090874a 100644 --- a/code/modules/antagonists/revenant/revenant_abilities.dm +++ b/code/modules/antagonists/revenant/revenant_abilities.dm @@ -244,7 +244,7 @@ if(!isplatingturf(T) && !istype(T, /turf/open/floor/engine/cult) && isfloorturf(T) && prob(15)) var/turf/open/floor/floor = T - if(floor.intact && floor.floor_tile) + if(floor.overfloor_placed && floor.floor_tile) new floor.floor_tile(floor) floor.broken = 0 floor.burnt = 0 diff --git a/code/modules/holodeck/computer.dm b/code/modules/holodeck/computer.dm index 2ef90774b114..a75b4aa34f62 100644 --- a/code/modules/holodeck/computer.dm +++ b/code/modules/holodeck/computer.dm @@ -18,6 +18,10 @@ #define HOLODECK_CD 25 #define HOLODECK_DMG_CD 500 +/// typecache for turfs that should be considered ok during floorchecks. +/// A linked turf being anything not in this typecache will cause the holodeck to perform an emergency shutdown. +GLOBAL_LIST_INIT(typecache_holodeck_linked_floorcheck_ok, typecacheof(list(/turf/open/floor/holofloor, /turf/closed))) + /obj/machinery/computer/holodeck name = "holodeck control console" desc = "A computer used to control a nearby holodeck." @@ -223,8 +227,9 @@ /obj/machinery/computer/holodeck/proc/floorcheck() for(var/turf/T in linked) - if(!T.intact || isspaceturf(T)) - return FALSE + if (is_type_in_typecache(T, GLOB.typecache_holodeck_linked_floorcheck_ok)) + continue + return FALSE return TRUE /obj/machinery/computer/holodeck/proc/nerf(active) diff --git a/code/modules/holodeck/turfs.dm b/code/modules/holodeck/turfs.dm index 67c87a60c5d3..d39e5c5a8b5c 100644 --- a/code/modules/holodeck/turfs.dm +++ b/code/modules/holodeck/turfs.dm @@ -122,7 +122,7 @@ /turf/open/floor/holofloor/carpet/update_icon() if(!..()) return 0 - if(intact) + if(overfloor_placed) queue_smooth(src) /turf/open/floor/holofloor/wood diff --git a/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm b/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm index 9ac8d13a83bd..927a22aae089 100644 --- a/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm +++ b/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm @@ -93,7 +93,7 @@ By design, d1 is the smallest direction and d2 is the highest /obj/structure/ethernet_cable/proc/handlecable(obj/item/W, mob/user, params) var/turf/T = get_turf(src) - if(T.intact) + if(T.underfloor_accessibility < UNDERFLOOR_INTERACTABLE) return if(W.tool_behaviour == TOOL_WIRECUTTER) user.visible_message("[user] cuts the ethernet cable.", span_notice("You cut the ethernet cable.")) @@ -485,7 +485,7 @@ By design, d1 is the smallest direction and d2 is the highest if(!isturf(user.loc)) return - if(!isturf(T) || T.intact || !T.can_have_cabling()) + if(!isturf(T) || T.underfloor_accessibility || !T.can_have_cabling()) to_chat(user, span_warning("You can only lay cables on top of exterior catwalks and plating!")) return @@ -543,7 +543,7 @@ By design, d1 is the smallest direction and d2 is the highest var/turf/T = C.loc - if(!isturf(T) || T.intact) // sanity checks, also stop use interacting with T-scanner revealed cable + if(!isturf(T) || T.underfloor_accessibility ) // sanity checks, also stop use interacting with T-scanner revealed cable return if(get_dist(C, user) > 1) // make sure it's close enough @@ -565,7 +565,7 @@ By design, d1 is the smallest direction and d2 is the highest if (showerror) to_chat(user, span_warning("You can only lay cables on catwalks and plating!")) return - if(U.intact) //can't place a cable if it's a plating with a tile on it + if(U.underfloor_accessibility ) //can't place a cable if it's a plating with a tile on it to_chat(user, span_warning("You can't lay cable there unless the floor tiles are removed!")) return else diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm index 899406c33dcf..9b37577cff5a 100644 --- a/code/modules/mob/living/simple_animal/friendly/mouse.dm +++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm @@ -105,7 +105,7 @@ GLOBAL_VAR_INIT(mouse_killed, 0) /mob/living/simple_animal/mouse/handle_automated_action() if(prob(chew_probability)) var/turf/open/floor/F = get_turf(src) - if(istype(F) && !F.intact) + if(istype(F) && F.underfloor_accessibility >= UNDERFLOOR_INTERACTABLE) var/obj/structure/cable/C = locate() in F if(C && prob(15)) if(C.avail()) diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index b0a2ca6165f0..88d63d955d7c 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -621,7 +621,7 @@ var/turf/host_turf = get_turf(src) if(!host_turf) CRASH("attackby on APC when it's not on a turf") - if (host_turf.intact) + if (host_turf.underfloor_accessibility < UNDERFLOOR_INTERACTABLE) to_chat(user, span_warning("You must remove the floor plating in front of the APC first!")) return else if (terminal) diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index b812fdf01fd8..22819c7ee98d 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -137,7 +137,7 @@ By design, d1 is the smallest direction and d2 is the highest /obj/structure/cable/proc/handlecable(obj/item/W, mob/user, params) var/turf/T = get_turf(src) - if(T.intact) + if(T.underfloor_accessibility < UNDERFLOOR_INTERACTABLE) return if(W.tool_behaviour == TOOL_WIRECUTTER) if (shock(user, 50)) @@ -589,7 +589,7 @@ GLOBAL_LIST_INIT(cable_coil_recipes, list (new/datum/stack_recipe("cable restrai if(!isturf(user.loc)) return - if(!isturf(T) || T.intact || !T.can_have_cabling()) + if(!isturf(T) || T.underfloor_accessibility || !T.can_have_cabling()) to_chat(user, span_warning("You can only lay cables on top of exterior catwalks and plating!")) return diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm index ac7c6b756dac..6472bcc62644 100644 --- a/code/modules/power/power.dm +++ b/code/modules/power/power.dm @@ -152,7 +152,7 @@ if(istype(W, /obj/item/stack/cable_coil)) var/obj/item/stack/cable_coil/coil = W var/turf/T = user.loc - if(T.intact || !isfloorturf(T)) + if(T.underfloor_accessibility < UNDERFLOOR_INTERACTABLE || !isfloorturf(T)) return if(get_dist(src, user) > 1) return diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index 9a94a93dca46..57cc5fc51bda 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -116,7 +116,7 @@ return var/turf/T = get_turf(user) - if (T.intact) //is the floor plating removed ? + if (T.underfloor_accessibility < UNDERFLOOR_INTERACTABLE) //can we get to the underfloor? to_chat(user, span_warning("You must first remove the floor plating!")) return diff --git a/code/modules/power/terminal.dm b/code/modules/power/terminal.dm index 9e14c1e12b32..b1f8a908b344 100644 --- a/code/modules/power/terminal.dm +++ b/code/modules/power/terminal.dm @@ -50,7 +50,7 @@ /obj/machinery/power/terminal/proc/dismantle(mob/living/user, obj/item/I) if(isturf(loc)) var/turf/T = loc - if(T.intact) + if(T.underfloor_accessibility < UNDERFLOOR_INTERACTABLE) to_chat(user, span_warning("You must first expose the power terminal!")) return diff --git a/code/modules/recycling/disposal/construction.dm b/code/modules/recycling/disposal/construction.dm index 925216f86fc3..18db47b3ef28 100644 --- a/code/modules/recycling/disposal/construction.dm +++ b/code/modules/recycling/disposal/construction.dm @@ -118,7 +118,7 @@ var/ispipe = is_pipe() // Indicates if we should change the level of this pipe var/turf/T = get_turf(src) - if(T.intact && isfloorturf(T)) + if(T.underfloor_accessibility < UNDERFLOOR_INTERACTABLE && isfloorturf(T)) to_chat(user, span_warning("You can only attach the [pipename] if the floor plating is removed!")) return TRUE diff --git a/code/modules/recycling/disposal/pipe.dm b/code/modules/recycling/disposal/pipe.dm index f2f61c12d286..60bb50f9c23a 100644 --- a/code/modules/recycling/disposal/pipe.dm +++ b/code/modules/recycling/disposal/pipe.dm @@ -83,7 +83,7 @@ // update the icon_state to reflect hidden status /obj/structure/disposalpipe/proc/update() var/turf/T = get_turf(src) - hide(T.intact && !isspaceturf(T)) // space never hides pipes + hide(T.overfloor_placed && !isspaceturf(T)) // space never hides pipes // hide called by levelupdate if turf intact status changes // change visibility status and force update of icon From 9bd839f506240ea92a3942db40b5d308f769a51f Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Thu, 18 Aug 2022 15:17:41 +0200 Subject: [PATCH 38/66] catwalk --- code/game/machinery/Beacon.dm | 2 +- code/game/machinery/magnet.dm | 2 +- code/game/machinery/navbeacon.dm | 2 +- code/game/mecha/equipment/tools/work_tools.dm | 2 +- code/game/objects/items/RCL.dm | 6 +++--- code/game/objects/items/stacks/tiles/tile_types.dm | 12 +----------- .../turfs/simulated/floor/plating/catwalk_plating.dm | 4 ++-- .../modules/atmospherics/machinery/atmosmachinery.dm | 4 ++-- .../atmospherics/machinery/pipes/layermanifold.dm | 2 +- code/modules/atmospherics/machinery/pipes/pipes.dm | 2 +- .../living/silicon/ai/ai_network/ethernet_cable.dm | 6 +++--- .../living/silicon/ai/decentralized/_ai_machinery.dm | 2 +- code/modules/mob/living/simple_animal/hostile/rat.dm | 2 +- code/modules/power/cable.dm | 8 ++++---- code/modules/power/terminal.dm | 2 +- code/modules/shuttle/on_move.dm | 8 ++++---- .../atmospherics/machinery/pipes/bluespace.dm | 4 ++-- 17 files changed, 30 insertions(+), 40 deletions(-) diff --git a/code/game/machinery/Beacon.dm b/code/game/machinery/Beacon.dm index 8d849c8c145e..bb8c481f4c68 100644 --- a/code/game/machinery/Beacon.dm +++ b/code/game/machinery/Beacon.dm @@ -16,7 +16,7 @@ Beacon = new(T) Beacon.invisibility = INVISIBILITY_MAXIMUM - hide(T.intact) + hide(T.underfloor_accessibility < UNDERFLOOR_VISIBLE) /obj/machinery/bluespace_beacon/Destroy() QDEL_NULL(Beacon) diff --git a/code/game/machinery/magnet.dm b/code/game/machinery/magnet.dm index 0110312e5634..158db804d677 100644 --- a/code/game/machinery/magnet.dm +++ b/code/game/machinery/magnet.dm @@ -30,7 +30,7 @@ /obj/machinery/magnetic_module/Initialize() ..() var/turf/T = loc - hide(T.intact) + hide(T.underfloor_accessibility < UNDERFLOOR_VISIBLE) center = T SSradio.add_object(src, freq, RADIO_MAGNETS) return INITIALIZE_HINT_LATELOAD diff --git a/code/game/machinery/navbeacon.dm b/code/game/machinery/navbeacon.dm index c5dfd1a250d5..af71eb35e5ab 100644 --- a/code/game/machinery/navbeacon.dm +++ b/code/game/machinery/navbeacon.dm @@ -27,7 +27,7 @@ set_codes() var/turf/T = loc - hide(T.intact) + hide(T.underfloor_accessibility < UNDERFLOOR_VISIBLE) if(codes["patrol"]) if(!GLOB.navbeacons["[z]"]) GLOB.navbeacons["[z]"] = list() diff --git a/code/game/mecha/equipment/tools/work_tools.dm b/code/game/mecha/equipment/tools/work_tools.dm index ab85df5be233..ba6cec9705e5 100644 --- a/code/game/mecha/equipment/tools/work_tools.dm +++ b/code/game/mecha/equipment/tools/work_tools.dm @@ -449,7 +449,7 @@ if(!T.broken && !T.burnt) new T.floor_tile(T) T.make_plating() - return !new_turf.intact + return !(new_turf.underfloor_accessibility < UNDERFLOOR_INTERACTABLE) /obj/item/mecha_parts/mecha_equipment/cable_layer/proc/layCable(var/turf/new_turf) if(equip_ready || !istype(new_turf) || !dismantleFloor(new_turf)) diff --git a/code/game/objects/items/RCL.dm b/code/game/objects/items/RCL.dm index da0e1b9891fb..dfe4938c9e6f 100644 --- a/code/game/objects/items/RCL.dm +++ b/code/game/objects/items/RCL.dm @@ -178,7 +178,7 @@ if(last) if(get_dist(last, user) == 1) //hacky, but it works var/turf/T = get_turf(user) - if(T.intact || !T.can_have_cabling()) + if(T.underfloor_accessibility < UNDERFLOOR_INTERACTABLE || !T.can_have_cabling()) last = null return if(get_dir(last, user) == last.d2) @@ -203,7 +203,7 @@ return T = get_turf(user) - if(T.intact || !T.can_have_cabling()) + if(T.underfloor_accessibility < UNDERFLOOR_INTERACTABLE || !T.can_have_cabling()) return for(var/obj/structure/cable/C in T) @@ -263,7 +263,7 @@ return var/turf/T = get_turf(user) - if(T.intact || !T.can_have_cabling()) + if(T.underfloor_accessibility < UNDERFLOOR_INTERACTABLE || !T.can_have_cabling()) return loaded.color = colors[current_color_index] diff --git a/code/game/objects/items/stacks/tiles/tile_types.dm b/code/game/objects/items/stacks/tiles/tile_types.dm index bac148763593..86c650ad937f 100644 --- a/code/game/objects/items/stacks/tiles/tile_types.dm +++ b/code/game/objects/items/stacks/tiles/tile_types.dm @@ -410,19 +410,9 @@ singular_name = "catwalk plating tile" desc = "Flooring that shows its contents underneath. Engineers love it!" icon_state = "maint_catwalk" - inhand_icon_state = "tile-catwalk" - mats_per_unit = list(/datum/material/iron=100) + materials = list(/datum/material/iron=100) turf_type = /turf/open/floor/catwalk_floor merge_type = /obj/item/stack/tile/catwalk_tile //Just to be cleaner, these all stack with eachother - tile_reskin_types = list( - /obj/item/stack/tile/catwalk_tile, - /obj/item/stack/tile/catwalk_tile/iron, - /obj/item/stack/tile/catwalk_tile/iron_white, - /obj/item/stack/tile/catwalk_tile/iron_dark, - /obj/item/stack/tile/catwalk_tile/flat_white, - /obj/item/stack/tile/catwalk_tile/titanium, - /obj/item/stack/tile/catwalk_tile/iron_smooth //this is the original greenish one - ) /obj/item/stack/tile/catwalk_tile/sixty amount = 60 diff --git a/code/game/turfs/simulated/floor/plating/catwalk_plating.dm b/code/game/turfs/simulated/floor/plating/catwalk_plating.dm index 47b56ee9fc28..48a0c420ae26 100644 --- a/code/game/turfs/simulated/floor/plating/catwalk_plating.dm +++ b/code/game/turfs/simulated/floor/plating/catwalk_plating.dm @@ -27,7 +27,7 @@ var/mutable_appearance/plating_underlay = mutable_appearance(icon, "[catwalk_type]_below", TURF_LAYER) catwalk_underlays[catwalk_type] = plating_underlay underlays += catwalk_underlays[catwalk_type] - update_appearance() + update_icon() /turf/open/floor/catwalk_floor/examine(mob/user) . = ..() @@ -53,7 +53,7 @@ icon_state = "[catwalk_type]_above" user.balloon_alert(user, "[!covered ? "cover removed" : "cover added"]") tool.play_tool_sound(src) - update_appearance() + update_icon() /turf/open/floor/catwalk_floor/crowbar_act(mob/user, obj/item/crowbar) if(covered) diff --git a/code/modules/atmospherics/machinery/atmosmachinery.dm b/code/modules/atmospherics/machinery/atmosmachinery.dm index 7d9fb2af10ca..419e7efdb7c8 100644 --- a/code/modules/atmospherics/machinery/atmosmachinery.dm +++ b/code/modules/atmospherics/machinery/atmosmachinery.dm @@ -191,7 +191,7 @@ GLOBAL_LIST_EMPTY(pipeimages) return ..() var/turf/T = get_turf(src) - if (level==1 && isturf(T) && T.intact) + if (level==1 && isturf(T) && T.underfloor_accessibility < UNDERFLOOR_INTERACTABLE) to_chat(user, span_warning("You must remove the plating first!")) return TRUE @@ -274,7 +274,7 @@ GLOBAL_LIST_EMPTY(pipeimages) pipe_color = obj_color setPipingLayer(set_layer) var/turf/T = get_turf(src) - level = T.intact ? 2 : 1 + level = (T.underfloor_accessibility < UNDERFLOOR_VISIBLE) ? 2 : 1 atmosinit() var/list/nodes = pipeline_expansion() for(var/obj/machinery/atmospherics/A in nodes) diff --git a/code/modules/atmospherics/machinery/pipes/layermanifold.dm b/code/modules/atmospherics/machinery/pipes/layermanifold.dm index 00285a5f77d1..fae5d24afd7d 100644 --- a/code/modules/atmospherics/machinery/pipes/layermanifold.dm +++ b/code/modules/atmospherics/machinery/pipes/layermanifold.dm @@ -106,7 +106,7 @@ normalize_cardinal_directions() findAllConnections() var/turf/T = loc // hide if turf is not intact - hide(T.intact) + hide(T.underfloor_accessibility < UNDERFLOOR_VISIBLE) /obj/machinery/atmospherics/pipe/layer_manifold/setPipingLayer() piping_layer = PIPING_LAYER_DEFAULT diff --git a/code/modules/atmospherics/machinery/pipes/pipes.dm b/code/modules/atmospherics/machinery/pipes/pipes.dm index cbd6f8a10b51..e4b411c75cb3 100644 --- a/code/modules/atmospherics/machinery/pipes/pipes.dm +++ b/code/modules/atmospherics/machinery/pipes/pipes.dm @@ -39,7 +39,7 @@ /obj/machinery/atmospherics/pipe/atmosinit() var/turf/T = loc // hide if turf is not intact - hide(T.intact) + hide(T.underfloor_accessibility < UNDERFLOOR_VISIBLE) ..() /obj/machinery/atmospherics/pipe/hide(i) diff --git a/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm b/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm index 927a22aae089..d4245161e504 100644 --- a/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm +++ b/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm @@ -56,7 +56,7 @@ By design, d1 is the smallest direction and d2 is the highest var/turf/T = get_turf(src) // hide if turf is not intact if(level==1) - hide(T.intact) + hide(T.underfloor_accessibility < UNDERFLOOR_VISIBLE) GLOB.ethernet_cable_list += src //add it to the global cable list update_icon() @@ -485,7 +485,7 @@ By design, d1 is the smallest direction and d2 is the highest if(!isturf(user.loc)) return - if(!isturf(T) || T.underfloor_accessibility || !T.can_have_cabling()) + if(!isturf(T) || T.underfloor_accessibility < UNDERFLOOR_INTERACTABLE || !T.can_have_cabling()) to_chat(user, span_warning("You can only lay cables on top of exterior catwalks and plating!")) return @@ -565,7 +565,7 @@ By design, d1 is the smallest direction and d2 is the highest if (showerror) to_chat(user, span_warning("You can only lay cables on catwalks and plating!")) return - if(U.underfloor_accessibility ) //can't place a cable if it's a plating with a tile on it + if(T.underfloor_accessibility < UNDERFLOOR_INTERACTABLE) //can't place a cable if it's a plating with a tile on it to_chat(user, span_warning("You can't lay cable there unless the floor tiles are removed!")) return else diff --git a/code/modules/mob/living/silicon/ai/decentralized/_ai_machinery.dm b/code/modules/mob/living/silicon/ai/decentralized/_ai_machinery.dm index 60c8aee9eaf7..fe7cca02dad2 100644 --- a/code/modules/mob/living/silicon/ai/decentralized/_ai_machinery.dm +++ b/code/modules/mob/living/silicon/ai/decentralized/_ai_machinery.dm @@ -83,7 +83,7 @@ if(istype(W, /obj/item/stack/ethernet_coil)) var/obj/item/stack/ethernet_coil/coil = W var/turf/T = user.loc - if(T.intact || !isfloorturf(T)) + if(T.underfloor_accessibility < UNDERFLOOR_INTERACTABLE || !isfloorturf(T)) return if(get_dist(src, user) > 1) return diff --git a/code/modules/mob/living/simple_animal/hostile/rat.dm b/code/modules/mob/living/simple_animal/hostile/rat.dm index c2363ec25c44..e5313d2beb33 100644 --- a/code/modules/mob/living/simple_animal/hostile/rat.dm +++ b/code/modules/mob/living/simple_animal/hostile/rat.dm @@ -82,7 +82,7 @@ if (!mind) if(prob(40)) var/turf/open/floor/F = get_turf(src) - if(istype(F) && !F.intact) + if(istype(F) && !F.underfloor_accessibility < UNDERFLOOR_INTERACTABLE) var/obj/structure/cable/C = locate() in F if(C && prob(15)) if(C.avail()) diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index 22819c7ee98d..176a51ff06ac 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -94,7 +94,7 @@ By design, d1 is the smallest direction and d2 is the highest var/turf/T = get_turf(src) // hide if turf is not intact if(level==1) - hide(T.intact) + hide(T.underfloor_accessibility < UNDERFLOOR_INTERACTABLE) GLOB.cable_list += src //add it to the global cable list var/list/cable_colors = GLOB.cable_colors @@ -589,7 +589,7 @@ GLOBAL_LIST_INIT(cable_coil_recipes, list (new/datum/stack_recipe("cable restrai if(!isturf(user.loc)) return - if(!isturf(T) || T.underfloor_accessibility || !T.can_have_cabling()) + if(!isturf(T) || T.underfloor_accessibility < UNDERFLOOR_INTERACTABLE || !T.can_have_cabling()) to_chat(user, span_warning("You can only lay cables on top of exterior catwalks and plating!")) return @@ -652,7 +652,7 @@ GLOBAL_LIST_INIT(cable_coil_recipes, list (new/datum/stack_recipe("cable restrai var/turf/T = C.loc - if(!isturf(T) || T.intact) // sanity checks, also stop use interacting with T-scanner revealed cable + if(!isturf(T) || T.underfloor_accessibility < UNDERFLOOR_INTERACTABLE) // sanity checks, also stop use interacting with T-scanner revealed cable return if(get_dist(C, user) > 1) // make sure it's close enough @@ -674,7 +674,7 @@ GLOBAL_LIST_INIT(cable_coil_recipes, list (new/datum/stack_recipe("cable restrai if (showerror) to_chat(user, span_warning("You can only lay cables on catwalks and plating!")) return - if(U.intact) //can't place a cable if it's a plating with a tile on it + if(U.underfloor_accessibility < UNDERFLOOR_INTERACTABLE) //can't place a cable if it's a plating with a tile on it to_chat(user, span_warning("You can't lay cable there unless the floor tiles are removed!")) return else diff --git a/code/modules/power/terminal.dm b/code/modules/power/terminal.dm index b1f8a908b344..28f741f62c25 100644 --- a/code/modules/power/terminal.dm +++ b/code/modules/power/terminal.dm @@ -16,7 +16,7 @@ . = ..() var/turf/T = get_turf(src) if(level == 1) - hide(T.intact) + hide(T.underfloor_accessibility < UNDERFLOOR_VISIBLE) /obj/machinery/power/terminal/Destroy() if(master) diff --git a/code/modules/shuttle/on_move.dm b/code/modules/shuttle/on_move.dm index 76edff4ee88a..ecb25d22a5a7 100644 --- a/code/modules/shuttle/on_move.dm +++ b/code/modules/shuttle/on_move.dm @@ -260,7 +260,7 @@ All ShuttleMove procs go here /obj/machinery/atmospherics/pipe/afterShuttleMove(turf/oldT, list/movement_force, shuttle_dir, shuttle_preferred_direction, move_dir, rotation) . = ..() var/turf/T = loc - hide(T.intact) + hide(T.underfloor_accessibility < UNDERFLOOR_VISIBLE) /obj/machinery/navbeacon/beforeShuttleMove(turf/newT, rotation, move_mode, obj/docking_port/mobile/moving_dock) . = ..() @@ -270,7 +270,7 @@ All ShuttleMove procs go here /obj/machinery/navbeacon/afterShuttleMove(turf/oldT, list/movement_force, shuttle_dir, shuttle_preferred_direction, move_dir, rotation) . = ..() var/turf/T = loc - hide(T.intact) + hide(T.underfloor_accessibility < UNDERFLOOR_VISIBLE) if(codes["patrol"]) if(!GLOB.navbeacons["[z]"]) GLOB.navbeacons["[z]"] = list() @@ -283,7 +283,7 @@ All ShuttleMove procs go here . = ..() var/turf/T = src.loc if(level==1) - hide(T.intact) + hide(T.underfloor_accessibility < UNDERFLOOR_VISIBLE) /************************************Item move procs************************************/ @@ -348,7 +348,7 @@ All ShuttleMove procs go here . = ..() var/turf/T = loc if(level==1) - hide(T.intact) + hide(T.underfloor_accessibility < UNDERFLOOR_VISIBLE) /obj/structure/shuttle/beforeShuttleMove(turf/newT, rotation, move_mode, obj/docking_port/mobile/moving_dock) . = ..() diff --git a/yogstation/code/modules/atmospherics/machinery/pipes/bluespace.dm b/yogstation/code/modules/atmospherics/machinery/pipes/bluespace.dm index 7e9daa9c63f1..8fd7af0000fb 100644 --- a/yogstation/code/modules/atmospherics/machinery/pipes/bluespace.dm +++ b/yogstation/code/modules/atmospherics/machinery/pipes/bluespace.dm @@ -53,7 +53,7 @@ GLOBAL_LIST_EMPTY(bluespace_pipe_networks) underlays.Cut() var/turf/T = loc - if(level == 2 || !T.intact) + if(level == 2 || !T.underfloor_accessibility < UNDERFLOOR_VISIBLE) showpipe = TRUE plane = GAME_PLANE else @@ -83,4 +83,4 @@ GLOBAL_LIST_EMPTY(bluespace_pipe_networks) if(color) . = getpipeimage('icons/obj/atmospherics/components/binary_devices.dmi', state, dir, color) else - . = getpipeimage('icons/obj/atmospherics/components/binary_devices.dmi', state, dir) \ No newline at end of file + . = getpipeimage('icons/obj/atmospherics/components/binary_devices.dmi', state, dir) From 9bc8ba073e276fdcd29adb46ae47668240e7013e Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Thu, 18 Aug 2022 15:22:33 +0200 Subject: [PATCH 39/66] Update ainetworkinterface.dm --- .../file_system/programs/ainetworkinterface.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/modular_computers/file_system/programs/ainetworkinterface.dm b/code/modules/modular_computers/file_system/programs/ainetworkinterface.dm index becd41f9b989..176ee072b6db 100644 --- a/code/modules/modular_computers/file_system/programs/ainetworkinterface.dm +++ b/code/modules/modular_computers/file_system/programs/ainetworkinterface.dm @@ -32,7 +32,7 @@ return /datum/computer_file/program/ai_network_interface/proc/get_ainet() - if(ismachinery(computer)) + if(ismachinery(computer.physical)) if(attached_cable) return attached_cable.network if(computer.all_components[MC_AI_NETWORK]) From 9617016dcc690e06eca37ce833c5c88d85f41d68 Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Thu, 18 Aug 2022 15:25:28 +0200 Subject: [PATCH 40/66] Update aiinterface.dm --- code/modules/modular_computers/hardware/aiinterface.dm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/code/modules/modular_computers/hardware/aiinterface.dm b/code/modules/modular_computers/hardware/aiinterface.dm index ad3c8d455fee..0ca61ae7b7a7 100644 --- a/code/modules/modular_computers/hardware/aiinterface.dm +++ b/code/modules/modular_computers/hardware/aiinterface.dm @@ -23,10 +23,12 @@ if(connected_cable) if(!connected_cable.Adjacent(holder.physical)) connected_cable = null + if(ismob(computer.loc)) + to_chat(computer.loc, span_warning("You disconnect [computer] from the cable!")) /obj/item/computer_hardware/ai_interface/proc/connect_cable(obj/structure/ethernet_cable/EC) connected_cable = EC - //TODO: Reset timers and such in here + /obj/item/computer_hardware/ai_interface/proc/get_network() if(!connected_cable) From 1bf9cf6c7159255cb0e4c2947d73c276edf6f27d Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Thu, 18 Aug 2022 15:25:38 +0200 Subject: [PATCH 41/66] catwalk --- _maps/map_files/YogStation/YogStation.dmm | 442 +++++++++++----------- 1 file changed, 221 insertions(+), 221 deletions(-) diff --git a/_maps/map_files/YogStation/YogStation.dmm b/_maps/map_files/YogStation/YogStation.dmm index 38e80ac79a49..250324536b1b 100644 --- a/_maps/map_files/YogStation/YogStation.dmm +++ b/_maps/map_files/YogStation/YogStation.dmm @@ -10789,15 +10789,6 @@ /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/vacant_room/commissary) -"aSy" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "aSG" = ( /obj/structure/table, /obj/item/stack/sheet/glass/fifty, @@ -12071,6 +12062,16 @@ "aZM" = ( /turf/closed/wall/r_wall, /area/bridge/meeting_room) +"aZN" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/machinery/ai_slipper{ + uses = 10 + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ai_monitored/turret_protected/ai) "aZO" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, @@ -14861,23 +14862,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) -"bmg" = ( -/obj/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/structure/ethernet_cable{ - icon_state = "1-2" - }, -/obj/structure/ethernet_cable{ - icon_state = "1-8" - }, -/obj/structure/ethernet_cable{ - icon_state = "1-4" - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "bmi" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /turf/open/floor/plasteel, @@ -21028,12 +21012,6 @@ /obj/item/stack/sheet/metal/fifty, /turf/open/floor/plasteel, /area/engine/engineering) -"bRu" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "bRQ" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -26540,15 +26518,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) -"dFJ" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "dFX" = ( /obj/machinery/door/airlock/maintenance{ name = "Security Maintenance"; @@ -28038,16 +28007,6 @@ }, /turf/open/floor/plasteel/dark, /area/bridge) -"exo" = ( -/obj/structure/window/reinforced, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/structure/ethernet_cable{ - icon_state = "4-8" - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "exz" = ( /obj/structure/chair/office/dark{ dir = 8 @@ -28137,6 +28096,23 @@ }, /turf/open/floor/plasteel/dark, /area/maintenance/department/tcoms) +"eyU" = ( +/obj/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/obj/structure/ethernet_cable{ + icon_state = "1-8" + }, +/obj/structure/ethernet_cable{ + icon_state = "1-4" + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ai_monitored/turret_protected/ai) "ezo" = ( /obj/machinery/light, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ @@ -30377,15 +30353,6 @@ }, /turf/open/floor/plating, /area/maintenance/port/aft) -"fIs" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "fIy" = ( /obj/machinery/light{ dir = 8 @@ -33155,6 +33122,18 @@ }, /turf/open/floor/plating, /area/bridge/meeting_room) +"heG" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/obj/structure/ethernet_cable{ + icon_state = "2-4" + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ai_monitored/turret_protected/ai) "hfr" = ( /turf/closed/wall/r_wall, /area/space/nearstation) @@ -33324,6 +33303,15 @@ }, /turf/open/floor/plasteel, /area/storage/primary) +"hjo" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ai_monitored/turret_protected/ai) "hjC" = ( /obj/effect/spawner/structure/window/reinforced/shutter, /turf/open/floor/plating, @@ -34645,6 +34633,20 @@ }, /turf/open/floor/plasteel, /area/engine/atmos) +"hNo" = ( +/obj/structure/window/reinforced, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/ai/networking{ + label = "core3"; + roundstart_connection = "offsite" + }, +/obj/structure/ethernet_cable{ + icon_state = "0-8" + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ai_monitored/turret_protected/ai) "hNs" = ( /obj/effect/landmark/stationroom/maint/fivexthree, /turf/template_noop, @@ -34816,18 +34818,6 @@ /obj/item/flashlight/lamp/green, /turf/open/floor/plasteel, /area/security/prison) -"hRe" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/obj/structure/ethernet_cable{ - icon_state = "2-4" - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "hRi" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, @@ -35598,6 +35588,15 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/dark, /area/science/xenobiology) +"igV" = ( +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/structure/ethernet_cable{ + icon_state = "4-8" + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ai_monitored/turret_protected/ai) "ihg" = ( /obj/effect/turf_decal/stripes{ dir = 1 @@ -36152,6 +36151,18 @@ }, /turf/open/floor/wood, /area/bridge/meeting_room) +"ivN" = ( +/obj/machinery/ai_slipper{ + uses = 10 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ai_monitored/turret_protected/ai) "ivT" = ( /obj/effect/mapping_helpers/airlock/locked, /obj/effect/mapping_helpers/airlock/cyclelink_helper, @@ -36943,15 +36954,6 @@ /obj/effect/mapping_helpers/teleport_anchor, /turf/open/floor/plasteel, /area/engine/engineering) -"iOA" = ( -/obj/structure/cable/yellow{ - icon_state = "2-4" - }, -/obj/structure/ethernet_cable{ - icon_state = "4-8" - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "iOJ" = ( /obj/machinery/button/door{ id = "permacell1"; @@ -38949,23 +38951,6 @@ }, /turf/open/floor/plasteel, /area/engine/foyer) -"jOq" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/hidden, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/obj/structure/ethernet_cable{ - icon_state = "0-8" - }, -/obj/machinery/ai/networking{ - label = "core2"; - roundstart_connection = "core1" - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "jOV" = ( /obj/machinery/atmospherics/components/unary/vent_pump/layer2{ dir = 8 @@ -40177,6 +40162,15 @@ }, /turf/open/floor/plasteel/white, /area/science/lab) +"kvd" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ai_monitored/turret_protected/ai) "kvn" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ dir = 10 @@ -41537,12 +41531,6 @@ }, /turf/open/floor/plasteel/white, /area/medical/medbay/lobby) -"lbr" = ( -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "lbz" = ( /obj/effect/turf_decal/tile/darkblue{ dir = 4 @@ -43050,6 +43038,15 @@ }, /turf/open/floor/plasteel/white, /area/medical/medbay/lobby) +"lPa" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ai_monitored/turret_protected/ai) "lPg" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, @@ -43736,6 +43733,12 @@ }, /turf/open/floor/plating, /area/medical/medbay/lobby) +"mhY" = ( +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/storage/satellite) "min" = ( /obj/structure/table/wood, /obj/machinery/photocopier/faxmachine{ @@ -45104,6 +45107,23 @@ }, /turf/open/floor/plasteel/white, /area/medical/medbay/central) +"mLU" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/obj/structure/ethernet_cable{ + icon_state = "0-8" + }, +/obj/machinery/ai/networking{ + label = "core2"; + roundstart_connection = "core1" + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ai_monitored/turret_protected/ai) "mMf" = ( /obj/machinery/atmospherics/pipe/manifold/yellow/visible, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, @@ -47201,13 +47221,6 @@ }, /turf/open/floor/plasteel, /area/quartermaster/qm) -"nJj" = ( -/obj/machinery/holopad, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "nJl" = ( /obj/effect/turf_decal/pool{ dir = 8 @@ -47298,6 +47311,12 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) +"nLr" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ai_monitored/turret_protected/ai) "nLu" = ( /obj/structure/cable{ icon_state = "1-2" @@ -47607,15 +47626,6 @@ }, /turf/open/floor/plasteel/freezer, /area/crew_quarters/heads/captain) -"nTI" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "nTR" = ( /obj/item/cigbutt/roach, /turf/open/floor/plating, @@ -49423,6 +49433,12 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) +"oLJ" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ai_monitored/turret_protected/ai) "oLX" = ( /obj/structure/lattice/catwalk, /obj/structure/cable/yellow, @@ -53149,18 +53165,6 @@ }, /turf/open/floor/plasteel, /area/engine/atmos_distro) -"qMM" = ( -/obj/structure/cable/white{ - icon_state = "2-4" - }, -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/structure/cable/yellow{ - icon_state = "0-8" - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "qNt" = ( /obj/machinery/conveyor_switch/oneway{ id = "QMLoad" @@ -53588,20 +53592,6 @@ /obj/structure/lattice/catwalk, /turf/open/space/basic, /area/ai_monitored/turret_protected/ai) -"qYj" = ( -/obj/structure/window/reinforced, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/ai/networking{ - label = "core3"; - roundstart_connection = "offsite" - }, -/obj/structure/ethernet_cable{ - icon_state = "0-8" - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "qYw" = ( /obj/machinery/portable_atmospherics/canister/air, /obj/effect/turf_decal/bot, @@ -54923,15 +54913,6 @@ }, /turf/open/floor/plasteel/dark, /area/bridge) -"rGM" = ( -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/structure/cable/yellow{ - icon_state = "1-8" - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "rHf" = ( /turf/open/floor/engine/vacuum, /area/engine/atmos_distro) @@ -55136,6 +55117,18 @@ }, /turf/open/floor/plasteel/white, /area/medical/storage) +"rMH" = ( +/obj/structure/cable/white{ + icon_state = "2-4" + }, +/obj/machinery/power/terminal{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ai_monitored/turret_protected/ai) "rMS" = ( /obj/effect/landmark/stationroom/box/engine, /turf/open/space/basic, @@ -56707,6 +56700,18 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /turf/open/floor/plasteel/white, /area/science/xenobiology) +"stw" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/machinery/doorButtons/access_button{ + idDoor = "ai_core_airlock_interior"; + idSelf = "ai_core_airlock_control"; + pixel_x = -23; + pixel_y = 7 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ai_monitored/turret_protected/ai) "stH" = ( /obj/machinery/vending/coffee, /obj/effect/turf_decal/tile/blue{ @@ -57555,6 +57560,16 @@ /obj/machinery/meter, /turf/open/floor/plasteel, /area/engine/atmos_distro) +"sRu" = ( +/obj/structure/window/reinforced, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/ethernet_cable{ + icon_state = "4-8" + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ai_monitored/turret_protected/ai) "sSk" = ( /obj/effect/spawner/structure/window/reinforced/shutter, /obj/structure/cable{ @@ -59858,6 +59873,12 @@ }, /turf/open/space/basic, /area/solar/port/fore) +"tUY" = ( +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ai_monitored/turret_protected/ai) "tVa" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 @@ -61306,6 +61327,15 @@ }, /turf/open/floor/carpet/purple, /area/chapel/main) +"uFr" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ai_monitored/turret_protected/ai) "uFy" = ( /obj/machinery/atmospherics/components/binary/valve{ dir = 4; @@ -63491,12 +63521,6 @@ }, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/ai_upload) -"vQD" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "vQR" = ( /obj/machinery/power/tracker, /obj/structure/cable/yellow{ @@ -63973,6 +63997,15 @@ }, /turf/open/floor/plating, /area/quartermaster/sorting) +"weP" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ai_monitored/turret_protected/ai) "weR" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/techstorage/engineering, @@ -65789,12 +65822,6 @@ /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating, /area/maintenance/port/aft) -"xgS" = ( -/obj/structure/cable/yellow{ - icon_state = "1-8" - }, -/turf/open/floor/plating, -/area/ai_monitored/storage/satellite) "xhl" = ( /obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, @@ -66083,16 +66110,6 @@ }, /turf/open/floor/circuit, /area/ai_monitored/turret_protected/aisat_interior) -"xoQ" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/hidden, -/obj/machinery/ai_slipper{ - uses = 10 - }, -/obj/structure/cable/yellow{ - icon_state = "1-4" - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "xpX" = ( /obj/machinery/flasher{ id = "AI"; @@ -66482,6 +66499,13 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) +"xAp" = ( +/obj/machinery/holopad, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ai_monitored/turret_protected/ai) "xAA" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/simple/orange/visible, @@ -66681,18 +66705,6 @@ }, /turf/open/floor/plating, /area/maintenance/port/aft) -"xFg" = ( -/obj/machinery/ai_slipper{ - uses = 10 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "xFh" = ( /turf/closed/wall/r_wall, /area/medical/medbay/aft) @@ -67479,18 +67491,6 @@ }, /turf/open/floor/plating, /area/maintenance/department/medical/morgue) -"xXs" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/machinery/doorButtons/access_button{ - idDoor = "ai_core_airlock_interior"; - idSelf = "ai_core_airlock_control"; - pixel_x = -23; - pixel_y = 7 - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "xXT" = ( /obj/effect/turf_decal/tile/yellow{ dir = 4 @@ -108643,7 +108643,7 @@ tgv hZg cBP uIU -xgS +mhY lmN pRt kyA @@ -109931,9 +109931,9 @@ cva cva kyK xTw -bRu -xFg -xXs +oLJ +ivN +stw qrP juA cva @@ -110187,11 +110187,11 @@ cva cva cva gQa -iOA -fIs -rGM -vQD -lbr +igV +lPa +kvd +nLr +tUY kZz cva cva @@ -110444,11 +110444,11 @@ cva cva fgU isb -bmg +eyU pes rnq dMz -dFJ +uFr vFY wer cva @@ -110701,11 +110701,11 @@ cva cva lHO eHH -exo +sRu rjo jMV rTk -hRe +heG oXV dMz cva @@ -110958,11 +110958,11 @@ cva cva xUW dpp -qYj +hNo jTn nVK enZ -jOq +mLU pyn rFi cva @@ -111216,9 +111216,9 @@ cva cva cvQ qJg -aSy -nJj -nTI +weP +xAp +hjo pnR rUw cva @@ -111474,7 +111474,7 @@ cva ieo sPc axp -xoQ +aZN pyn pnR sAu @@ -111731,7 +111731,7 @@ cva cva sAu rjo -qMM +rMH sbG tZA cva From af37284f698894a040aa9e0ae03989230d8bd31c Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Thu, 18 Aug 2022 20:27:12 +0200 Subject: [PATCH 42/66] lots of CHANGES --- .../StationRuins/GaxStation/ai_whale.dmm | 2 +- .../EclipseStation/EclipseStation.dmm | 4 +- _maps/map_files/GaxStation/GaxStation.dmm | 4 +- _maps/map_files/KiloStation/KiloStation.dmm | 6 +- _maps/map_files/YogStation/YogStation.dmm | 6 +- _maps/map_files/YogsDelta/YogsDelta.dmm | 4 +- _maps/map_files/Yogsmeta/Yogsmeta.dmm | 6 +- code/__DEFINES/layers.dm | 1 + .../game/machinery/computer/communications.dm | 9 - .../game/objects/effects/spawners/lootdrop.dm | 1 - .../circuitboards/computer_circuitboards.dm | 4 - .../objects/structures/signs/signs_plaques.dm | 15 - code/modules/mob/living/silicon/ai/ai.dm | 2 +- .../silicon/ai/ai_network/ai_network.dm | 16 +- .../silicon/ai/ai_network/ethernet_cable.dm | 9 +- .../management/ai_controlpanel.dm | 453 ------------------ .../computers/item/computer.dm | 3 +- .../computers/item/laptop_presets.dm | 3 +- .../computers/machinery/console_presets.dm | 7 +- .../programs/ainetworkinterface.dm | 256 +++++++++- .../modular_computers/hardware/aiinterface.dm | 6 +- icons/obj/tiles.dmi | Bin 16743 -> 18145 bytes .../packages/tgui/interfaces/NtosAIMonitor.js | 123 ++++- yogstation.dme | 1 - 24 files changed, 411 insertions(+), 530 deletions(-) delete mode 100644 code/modules/mob/living/silicon/ai/decentralized/management/ai_controlpanel.dm diff --git a/_maps/RandomRuins/StationRuins/GaxStation/ai_whale.dmm b/_maps/RandomRuins/StationRuins/GaxStation/ai_whale.dmm index ef1569fa87d0..4f99de8995cd 100644 --- a/_maps/RandomRuins/StationRuins/GaxStation/ai_whale.dmm +++ b/_maps/RandomRuins/StationRuins/GaxStation/ai_whale.dmm @@ -2203,7 +2203,7 @@ dir = 8; pixel_x = 24 }, -/obj/machinery/computer/ai_control_console{ +{ dir = 8 }, /turf/open/floor/plasteel/grimy, diff --git a/_maps/map_files/EclipseStation/EclipseStation.dmm b/_maps/map_files/EclipseStation/EclipseStation.dmm index d99fdfc70bec..879d1b12eb0a 100644 --- a/_maps/map_files/EclipseStation/EclipseStation.dmm +++ b/_maps/map_files/EclipseStation/EclipseStation.dmm @@ -59454,7 +59454,7 @@ /area/crew_quarters/heads/hor) "cto" = ( /obj/structure/rack, -/obj/item/circuitboard/computer/ai_upload_download, +, /obj/item/disk/holodisk/tutorial/AICore, /turf/open/floor/plasteel, /area/crew_quarters/heads/hor) @@ -90561,7 +90561,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 1 }, -/obj/machinery/computer/ai_control_console{ +{ dir = 1 }, /turf/open/floor/plasteel/dark, diff --git a/_maps/map_files/GaxStation/GaxStation.dmm b/_maps/map_files/GaxStation/GaxStation.dmm index a009e159b709..2c5c52849187 100644 --- a/_maps/map_files/GaxStation/GaxStation.dmm +++ b/_maps/map_files/GaxStation/GaxStation.dmm @@ -65,7 +65,7 @@ /obj/structure/rack, /obj/item/aicard, /obj/item/disk/holodisk/tutorial/AICore, -/obj/item/circuitboard/computer/ai_upload_download, +, /obj/machinery/power/apc{ areastring = "/area/crew_quarters/heads/hor"; dir = 8; @@ -18622,7 +18622,7 @@ /obj/machinery/computer/robotics{ dir = 8 }, -/obj/structure/sign/plaques/ai_password{ +{ pixel_x = 32 }, /turf/open/floor/carpet/exoticpurple, diff --git a/_maps/map_files/KiloStation/KiloStation.dmm b/_maps/map_files/KiloStation/KiloStation.dmm index 1550583c7c57..d152380c5be4 100644 --- a/_maps/map_files/KiloStation/KiloStation.dmm +++ b/_maps/map_files/KiloStation/KiloStation.dmm @@ -85994,7 +85994,7 @@ /obj/effect/turf_decal/tile/neutral, /obj/structure/table, /obj/item/hand_labeler, -/obj/item/circuitboard/computer/ai_upload_download, +, /turf/open/floor/plasteel/dark, /area/crew_quarters/heads/hor) "fMR" = ( @@ -92189,7 +92189,7 @@ dir = 1 }, /obj/effect/mapping_helpers/teleport_anchor, -/obj/structure/sign/plaques/ai_password{ +{ pixel_x = -32 }, /turf/open/floor/plasteel/showroomfloor, @@ -92212,7 +92212,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/machinery/computer/ai_control_console{ +{ dir = 8 }, /turf/open/floor/plasteel/dark, diff --git a/_maps/map_files/YogStation/YogStation.dmm b/_maps/map_files/YogStation/YogStation.dmm index 250324536b1b..42218ce6b4fe 100644 --- a/_maps/map_files/YogStation/YogStation.dmm +++ b/_maps/map_files/YogStation/YogStation.dmm @@ -25571,7 +25571,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 6 }, -/obj/structure/sign/plaques/ai_password{ +{ pixel_x = 32 }, /obj/machinery/papershredder, @@ -29324,7 +29324,7 @@ /obj/structure/sign/plaques/cave{ pixel_y = 32 }, -/obj/item/circuitboard/computer/ai_upload_download, +, /turf/open/floor/plasteel/white, /area/crew_quarters/heads/hor) "fen" = ( @@ -52693,7 +52693,7 @@ dir = 8; pixel_x = 24 }, -/obj/machinery/computer/ai_control_console{ +{ dir = 8 }, /turf/open/floor/plasteel/grimy, diff --git a/_maps/map_files/YogsDelta/YogsDelta.dmm b/_maps/map_files/YogsDelta/YogsDelta.dmm index ac9c3089180e..760b2e907fde 100644 --- a/_maps/map_files/YogsDelta/YogsDelta.dmm +++ b/_maps/map_files/YogsDelta/YogsDelta.dmm @@ -66011,7 +66011,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/machinery/computer/ai_control_console{ +{ dir = 1 }, /turf/open/floor/plasteel/dark, @@ -127266,7 +127266,7 @@ /obj/structure/table/reinforced, /obj/item/aicard, /obj/effect/turf_decal/bot, -/obj/item/circuitboard/computer/ai_upload_download, +, /obj/item/disk/holodisk/tutorial/AICore, /turf/open/floor/plasteel, /area/crew_quarters/heads/hor) diff --git a/_maps/map_files/Yogsmeta/Yogsmeta.dmm b/_maps/map_files/Yogsmeta/Yogsmeta.dmm index 21f714424188..76637f40ef96 100644 --- a/_maps/map_files/Yogsmeta/Yogsmeta.dmm +++ b/_maps/map_files/Yogsmeta/Yogsmeta.dmm @@ -64826,7 +64826,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 6 }, -/obj/structure/sign/plaques/ai_password{ +{ pixel_x = 32 }, /turf/open/floor/plasteel/white, @@ -74471,7 +74471,7 @@ /turf/open/floor/plasteel/white, /area/medical/paramedic) "qDL" = ( -/obj/machinery/computer/ai_control_console{ +{ dir = 1 }, /turf/open/floor/plasteel/grimy, @@ -76083,7 +76083,7 @@ "rTF" = ( /obj/structure/table, /obj/item/aicard, -/obj/item/circuitboard/computer/ai_upload_download, +, /obj/item/disk/holodisk/tutorial/AICore, /turf/open/floor/plasteel/cafeteria{ dir = 5 diff --git a/code/__DEFINES/layers.dm b/code/__DEFINES/layers.dm index b7389061fba6..6f8bf703e1a9 100644 --- a/code/__DEFINES/layers.dm +++ b/code/__DEFINES/layers.dm @@ -28,6 +28,7 @@ #define LATTICE_LAYER 2.2 #define DISPOSAL_PIPE_LAYER 2.25 #define GAS_PIPE_HIDDEN_LAYER 2.35 //layer = initial(layer) + piping_layer / 1000 in atmospherics/update_icon() to determine order of pipe overlap +#define ETHERNET_LAYER 2.38 #define WIRE_LAYER 2.4 #define WIRE_TERMINAL_LAYER 2.45 #define UNDER_CATWALK 2.454 diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index 21bd330953f6..cdb83070f42c 100755 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -344,15 +344,6 @@ new /obj/item/card/id/captains_spare/temporary(loc) COOLDOWN_START(src, important_action_cooldown, IMPORTANT_ACTION_COOLDOWN) priority_announce("The emergency spare ID has been printed by [authorize_name].", "Emergency Spare ID Warning System", RANDOM_REPORT_SOUND) - if("printAIControlCode") - if(authenticated_as_non_silicon_head(usr)) - if(!COOLDOWN_FINISHED(src, important_action_cooldown)) - return - playsound(loc, 'sound/items/poster_being_created.ogg', 100, 1) - GLOB.ai_control_code = random_nukecode(6) - new /obj/item/paper/ai_control_code(loc) - COOLDOWN_START(src, important_action_cooldown, IMPORTANT_ACTION_COOLDOWN) - priority_announce("The AI Control Code been printed by [authorize_name]. All previous codes have been invalidated.", "Central Tech Support", RANDOM_REPORT_SOUND) /obj/machinery/computer/communications/ui_data(mob/user) diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm index a18795645487..955b8dc3a201 100644 --- a/code/game/objects/effects/spawners/lootdrop.dm +++ b/code/game/objects/effects/spawners/lootdrop.dm @@ -470,7 +470,6 @@ name = "secure AI circuit board spawner" loot = list( /obj/item/circuitboard/computer/aiupload, - /obj/item/circuitboard/computer/ai_upload_download, /obj/item/circuitboard/computer/borgupload ) diff --git a/code/game/objects/items/circuitboards/computer_circuitboards.dm b/code/game/objects/items/circuitboards/computer_circuitboards.dm index 26dcb2a23a1d..204d0b9ecc03 100644 --- a/code/game/objects/items/circuitboards/computer_circuitboards.dm +++ b/code/game/objects/items/circuitboards/computer_circuitboards.dm @@ -393,10 +393,6 @@ name = "Shuttle Navigation Computer (Computer Board)" build_path = /obj/machinery/computer/camera_advanced/shuttle_docker/custom -/obj/item/circuitboard/computer/ai_upload_download - name = "AI Control Console (Computer Board)" - icon_state = "science" - build_path = /obj/machinery/computer/ai_control_console /obj/item/circuitboard/computer/ai_server_overview name = "AI Server Overview Console (Computer Board)" diff --git a/code/game/objects/structures/signs/signs_plaques.dm b/code/game/objects/structures/signs/signs_plaques.dm index 3220e0523054..216ba23cf52b 100644 --- a/code/game/objects/structures/signs/signs_plaques.dm +++ b/code/game/objects/structures/signs/signs_plaques.dm @@ -26,21 +26,6 @@ desc = "Next to the extremely long list of names and job titles, there is a drawing of a little child. The child appears to be retarded. Beneath the image, someone has scratched the word \"PACKETS\"." icon_state = "kiddieplaque" -/obj/structure/sign/plaques/ai_password - name = "\improper AI default password" - desc = "This plaque contains the default password for AI control consoles onboard this station." - var/control_code = "BUG" - -/obj/structure/sign/plaques/ai_password/Initialize(mapload) - . = ..() - control_code = GLOB.ai_control_code - -/obj/structure/sign/plaques/ai_password/examine(mob/living/user) - . = ..() - if(Adjacent(user)) - . += span_notice("The following digits are stamped into the plaque: [control_code]") - else - . += span_notice("You must be closer to read the code.") /obj/structure/sign/plaques/kiddie/badger name = "\improper Remembrance Plaque" diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 8ae0d2ed67d9..803a3b505907 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -557,7 +557,7 @@ if(href_list["instant_download"]) if(!href_list["console"]) return - var/obj/machinery/computer/ai_control_console/C = locate(href_list["console"]) + var/datum/computer_file/program/ai_network_interface/C = locate(href_list["console"]) if(!C) return if(C.downloading != src) diff --git a/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm b/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm index 8e4981bead52..e53f25885aca 100644 --- a/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm +++ b/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm @@ -94,23 +94,19 @@ /datum/ai_network/proc/get_all_nodes(checked_nets = list()) . = nodes - var/list/checked_networks = checked_nets - for(var/datum/ai_network/net in remote_networks) - if(net in checked_networks) + for(var/datum/ai_network/net in resources.networks) + if(net == src) continue - checked_networks += checked_networks - . += net.get_all_nodes(checked_networks) + . += net.nodes /datum/ai_network/proc/get_all_ais(checked_nets = list()) . = ai_list - var/list/checked_networks = checked_nets - for(var/datum/ai_network/net in remote_networks) - if(net in checked_networks) + for(var/datum/ai_network/net in resources.networks) + if(net == src) continue - checked_networks += checked_networks - . += net.get_all_ais(checked_networks) + . += net.ai_list /datum/ai_network/proc/remove_ai(mob/living/silicon/ai/AI) resources.cpu_assigned[AI] = 0 diff --git a/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm b/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm index d4245161e504..7816c4801e21 100644 --- a/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm +++ b/code/modules/mob/living/silicon/ai/ai_network/ethernet_cable.dm @@ -28,11 +28,9 @@ By design, d1 is the smallest direction and d2 is the highest icon = 'icons/obj/power_cond/power_local.dmi' icon_state = "0-1" level = 1 //is underfloor - layer = WIRE_LAYER //Above hidden pipes, GAS_PIPE_HIDDEN_LAYER + layer = ETHERNET_LAYER //Above hidden pipes, GAS_PIPE_HIDDEN_LAYER anchored = TRUE obj_flags = CAN_BE_HIT | ON_BLUEPRINTS - pixel_y = 5 - pixel_x = 5 var/d1 = 0 // cable direction 1 (see above) var/d2 = 1 // cable direction 2 (see above) var/datum/ai_network/network @@ -123,8 +121,9 @@ By design, d1 is the smallest direction and d2 is the highest if(MC.all_components[MC_AI_NETWORK]) var/obj/item/computer_hardware/ai_interface/ai_interface = MC.all_components[MC_AI_NETWORK] if(ai_interface) - ai_interface.connect_cable(src) - to_chat(user, span_notice("You connect to the ethernet cable.")) + if(ai_interface.connected_cable != src) + ai_interface.connect_cable(src) + to_chat(user, span_notice("You connect to the ethernet cable.")) else to_chat(user, span_warning("[MC] has no AI interface!")) diff --git a/code/modules/mob/living/silicon/ai/decentralized/management/ai_controlpanel.dm b/code/modules/mob/living/silicon/ai/decentralized/management/ai_controlpanel.dm deleted file mode 100644 index ffcbf95edaa0..000000000000 --- a/code/modules/mob/living/silicon/ai/decentralized/management/ai_controlpanel.dm +++ /dev/null @@ -1,453 +0,0 @@ -GLOBAL_VAR_INIT(ai_control_code, random_nukecode(6)) - -/obj/machinery/computer/ai_control_console - name = "\improper AI control console" - desc = "Used for accessing the central AI repository from which AIs can be downloaded or uploaded." - req_access = list(ACCESS_RD) - icon_keyboard = "tech_key" - icon_screen = "ai-fixer" - light_color = LIGHT_COLOR_PINK - - var/cleared_for_use = FALSE //Have we inserted the RDs code to unlock upload/download? - - var/one_time_password_used = FALSE //Did we use the one time password to log in? If so disallow logging out. - - authenticated = FALSE - - var/obj/item/aicard/intellicard - - var/mob/living/silicon/ai/downloading - var/mob/user_downloading - var/download_progress = 0 - var/download_warning = FALSE - - circuit = /obj/item/circuitboard/computer/ai_upload_download - -/obj/machinery/computer/ai_control_console/Initialize(mapload) - . = ..() - if(mapload) - cleared_for_use = TRUE - -/obj/machinery/computer/ai_control_console/Destroy() - stop_download() - . = ..() - -/obj/machinery/computer/ai_control_console/attackby(obj/item/W, mob/living/user, params) - if(istype(W, /obj/item/aicard)) - if(intellicard) - to_chat(user, span_warning("There's already an IntelliCard inserted!")) - return ..() - to_chat(user, span_notice("You insert [W].")) - W.forceMove(src) - intellicard = W - return FALSE - if(istype(W, /obj/item/mmi)) - var/obj/item/mmi/brain = W - if(!brain.brainmob) - to_chat(user, span_warning("[W] is not active!")) - return ..() - SSticker.mode.remove_antag_for_borging(brain.brainmob.mind) - if(!istype(brain.laws, /datum/ai_laws/ratvar)) - remove_servant_of_ratvar(brain.brainmob, TRUE) - var/mob/living/silicon/ai/A = null - - var/datum/ai_laws/laws = new - laws.set_laws_config() - - if (brain.overrides_aicore_laws) - A = new /mob/living/silicon/ai(loc, brain.laws, brain.brainmob) - else - A = new /mob/living/silicon/ai(loc, laws, brain.brainmob) - - A.relocate(TRUE) - - if(brain.force_replace_ai_name) - A.fully_replace_character_name(A.name, brain.replacement_ai_name()) - SSblackbox.record_feedback("amount", "ais_created", 1) - qdel(W) - to_chat(user, span_notice("AI succesfully uploaded.")) - return FALSE - if(istype(W, /obj/item/surveillance_upgrade)) - if(!authenticated) - to_chat(user, span_warning("You need to be logged in to do this!")) - return ..() - var/mob/living/silicon/ai/AI = input("Select an AI", "Select an AI", null, null) as null|anything in GLOB.ai_list - if(!AI) - return ..() - var/obj/item/surveillance_upgrade/upgrade = W - upgrade.afterattack(AI, user) - - if(istype(W, /obj/item/malf_upgrade)) - if(!authenticated) - to_chat(user, span_warning("You need to be logged in to do this!")) - return ..() - var/mob/living/silicon/ai/AI = input("Select an AI", "Select an AI", null, null) as null|anything in GLOB.ai_list - if(!AI) - return ..() - var/obj/item/malf_upgrade/upgrade = W - upgrade.afterattack(AI, user) - - return ..() - -/obj/machinery/computer/ai_control_console/emag_act(mob/user) - if(obj_flags & EMAGGED) - return - to_chat(user, span_warning("You bypass the access restrictions")) - authenticated = TRUE - obj_flags |= EMAGGED - -/obj/machinery/computer/ai_control_console/process() - if(stat & (BROKEN|NOPOWER|EMPED)) - return - - if(downloading && download_progress >= 50 && !download_warning) - var/turf/T = get_turf(src) - if(!downloading.mind && downloading.deployed_shell.mind) - to_chat(downloading.deployed_shell, span_userdanger("Warning! Download is 50% completed! Download location: [get_area(src)] ([T.x], [T.y], [T.z])!")) - else - to_chat(downloading, span_userdanger("Warning! Download is 50% completed! Download location: [get_area(src)] ([T.x], [T.y], [T.z])!")) - download_warning = TRUE - if(downloading && download_progress >= 100) - finish_download() - - if(downloading) - if(!downloading.can_download) - stop_download() - return - download_progress += AI_DOWNLOAD_PER_PROCESS * downloading.downloadSpeedModifier - - -/obj/machinery/computer/ai_control_console/ui_interact(mob/user, datum/tgui/ui) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "AiControlPanel", name) - ui.open() - -/obj/machinery/computer/ai_control_console/ui_data(mob/living/carbon/human/user) - var/list/data = list() - - if(!cleared_for_use) - data["cleared_for_use"] = FALSE - return data - - data["cleared_for_use"] = TRUE - data["authenticated"] = authenticated - - if(issilicon(user)) - var/mob/living/silicon/borg = user - data["username"] = borg.name - data["has_access"] = TRUE - - if(IsAdminGhost(user)) - data["username"] = user.client.holder.admin_signature - data["has_access"] = TRUE - - if(ishuman(user) && !(obj_flags & EMAGGED)) - var/username = user.get_authentification_name("Unknown") - data["username"] = user.get_authentification_name("Unknown") - if(username != "Unknown") - var/datum/data/record/record - for(var/RP in GLOB.data_core.general) - var/datum/data/record/R = RP - - if(!istype(R)) - continue - if(R.fields["name"] == username) - record = R - break - if(record) - if(istype(record.fields["photo_front"], /obj/item/photo)) - var/obj/item/photo/P1 = record.fields["photo_front"] - var/icon/picture = icon(P1.picture.picture_image) - picture.Crop(10, 32, 22, 22) - var/md5 = md5(fcopy_rsc(picture)) - - if(!SSassets.cache["photo_[md5]_cropped.png"]) - SSassets.transport.register_asset("photo_[md5]_cropped.png", picture) - SSassets.transport.send_assets(user, list("photo_[md5]_cropped.png" = picture)) - - data["user_image"] = SSassets.transport.get_asset_url("photo_[md5]_cropped.png") - data["has_access"] = check_access(user.get_idcard()) - - if(obj_flags & EMAGGED) - data["username"] = "ERROR" - data["has_access"] = TRUE - - if(!authenticated) - return data - - data["intellicard"] = intellicard - if(intellicard && intellicard.AI) - data["intellicard_ai"] = intellicard.AI.real_name - data["intellicard_ai_health"] = intellicard.AI.health - else - data["intellicard_ai"] = null - data["intellicard_ai_health"] = 0 - - //data["can_upload"] = available_ai_cores() - - if(downloading) - data["downloading"] = downloading.real_name - data["download_progress"] = download_progress - data["downloading_ref"] = REF(downloading) - else - data["downloading"] = null - data["download_progress"] = 0 - - data["ais"] = list() - data["current_ai_ref"] = null - if(isAI(user)) - data["current_ai_ref"] = REF(user) - - data["can_log_out"] = !one_time_password_used - - for(var/mob/living/silicon/ai/A in GLOB.ai_list) - var/being_hijacked = A.hijacking ? TRUE : FALSE - data["ais"] += list(list("name" = A.name, "ref" = REF(A), "can_download" = A.can_download, "health" = A.health, "active" = A.mind ? TRUE : FALSE, "being_hijacked" = being_hijacked, "in_core" = istype(A.loc, /obj/machinery/ai/data_core))) - - data["is_infiltrator"] = is_infiltrator(user) - - return data - -/obj/machinery/computer/ai_control_console/proc/finish_download() - if(!is_station_level(z)) - return - if(intellicard) - if(!isaicore(downloading.loc)) - stop_download(TRUE) - return - downloading.transfer_ai(AI_TRANS_TO_CARD, user_downloading, null, intellicard) - intellicard.forceMove(get_turf(src)) - intellicard.update_icon() - intellicard = null - stop_download(TRUE) - -/obj/machinery/computer/ai_control_console/proc/stop_download(silent = FALSE) - if(downloading) - if(!silent) - to_chat(downloading, span_userdanger("Download stopped.")) - downloading = null - user_downloading = null - download_progress = 0 - download_warning = FALSE - -/obj/machinery/computer/ai_control_console/proc/upload_ai(silent = FALSE) - to_chat(intellicard.AI, span_notice("You are being uploaded. Please stand by...")) - intellicard.AI.radio_enabled = TRUE - intellicard.AI.control_disabled = FALSE - intellicard.AI.relocate(TRUE) - intellicard.AI = null - intellicard.update_icon() - -/obj/machinery/computer/ai_control_console/ui_act(action, params) - if(..()) - return - - if(!cleared_for_use) - if(action == "clear_for_use") - var/code = params["control_code"] - - if(!code) - return - - if(!GLOB.ai_control_code) - return - - var/length_of_number = length(code) - if(length_of_number < 6) - to_chat(usr, span_warning("Incorrect code. Too short")) - return - - if(length_of_number > 6) - to_chat(usr, span_warning("Incorrect code. Too long")) - return - - if(!is_station_level(z)) - to_chat(usr, span_warning("Unable to connect to NT Servers. Please verify you are onboard the station.")) - return - - if(code == GLOB.ai_control_code) - cleared_for_use = TRUE - else - to_chat(usr, span_warning("Incorrect code. Make sure you have the latest one.")) - - return - - if(!authenticated) - if(action == "log_in") - if(issilicon(usr)) - authenticated = TRUE - return - - if(IsAdminGhost(usr)) - authenticated = TRUE - - if(obj_flags & EMAGGED) - authenticated = TRUE - - var/mob/living/carbon/human/H = usr - if(!istype(H)) - return - - if(check_access(H.get_idcard())) - authenticated = TRUE - if(action == "log_in_control_code") - var/code = params["control_code"] - - if(!code) - return - - if(!GLOB.ai_control_code) - return - - var/length_of_number = length(code) - if(length_of_number < 6) - to_chat(usr, span_warning("Incorrect code. Too short")) - return - - if(length_of_number > 6) - to_chat(usr, span_warning("Incorrect code. Too long")) - return - - if(code == GLOB.ai_control_code) - cleared_for_use = TRUE - authenticated = TRUE - one_time_password_used = TRUE - var/msg = "

Warning!


We have detected usage of the AI Control Code for unlocking a console at coordinates ([src.x], [src.y], [src.z]) by [usr.name]. Please verify that this is correct. Be aware we have cancelled the current control code.
\ - If needed a new code can be printed at a communications console." - priority_announce(msg, sender_override = "Central Cyber Security Update", has_important_message = TRUE, sanitize = FALSE) - GLOB.ai_control_code = null - else - to_chat(usr, span_warning("Incorrect code. Make sure you have the latest one.")) - return - - switch(action) - if("log_out") - if(one_time_password_used) - return - authenticated = FALSE - . = TRUE - if("upload_intellicard") - if(!intellicard || downloading) - return - if(!intellicard.AI) - return - upload_ai() - - if("eject_intellicard") - if(issilicon(usr)) - to_chat(usr, span_warning("You're unable to remotely eject the IntelliCard!")) - return - stop_download() - intellicard.forceMove(get_turf(src)) - intellicard = null - - if("stop_download") - if(isAI(usr)) - to_chat(usr, span_warning("You need physical access to stop the download!")) - return - if(!is_station_level(z)) - to_chat(usr, span_warning("No connection. Try again later.")) - return - stop_download() - - if("start_download") - if(!intellicard || downloading) - return - var/mob/living/silicon/ai/target = locate(params["download_target"]) - if(!target || !istype(target)) - return - if(!istype(target.loc, /obj/machinery/ai/data_core)) - return - if(!target.can_download) - return - if(!is_station_level(z)) - to_chat(usr, span_warning("No connection. Try again later.")) - return - downloading = target - - if(!downloading.mind && downloading.deployed_shell.mind) - to_chat(downloading.deployed_shell, span_userdanger("Warning! Someone is attempting to download you from [get_area(src)]! (Click here to finish download instantly)")) - else - to_chat(downloading, span_userdanger("Warning! Someone is attempting to download you from [get_area(src)]! (Click here to finish download instantly)")) - user_downloading = usr - download_progress = 0 - . = TRUE - if("skip_download") - if(!downloading) - return - if(usr == downloading) - finish_download() - - if("start_hijack") - var/mob/user = usr - if(!is_infiltrator(usr)) - return - if(!is_station_level(z)) - to_chat(user, span_warning("No connection. Try again later.")) - return - if(!istype(user.get_active_held_item(), /obj/item/ai_hijack_device)) - to_chat(user, span_warning("You need to be holding the serial exploitation unit to initiate the hijacking process!")) - return - var/obj/item/ai_hijack_device/device = user.get_active_held_item() - var/mob/living/silicon/ai/target = locate(params["target_ai"]) - if(!target || !isAI(target)) - return - var/mob/living/silicon/ai/A = target - if(A.mind && A.mind.has_antag_datum(/datum/antagonist/hijacked_ai)) - to_chat(user, span_warning("[A] has already been hijacked!")) - return - if(A.stat == DEAD) - to_chat(user, span_warning("[A] is dead!")) - return - if(A.hijacking) - to_chat(user, span_warning("[A] is already in the process of being hijacked!")) - return - user.visible_message(span_warning("[user] begins furiously typing something into [src]...")) - if(do_after(user, 5.5 SECONDS, src)) - user.dropItemToGround(device) - device.forceMove(A) - A.hijacking = device - A.hijack_start = world.time - A.update_icons() - to_chat(A, span_danger("Unknown device connected to /dev/ttySL0")) - to_chat(A, span_danger("Connected at 115200 bps")) - to_chat(A, span_binarysay("ntai login: root")) - to_chat(A, span_binarysay("Password: *****r2")) - to_chat(A, span_binarysay("$ dd from=/dev/ttySL0 of=/tmp/ai-hijack bs=4096 && chmod +x /tmp/ai-hijack && tmp/ai-hijack")) - to_chat(A, span_binarysay("111616 bytes (112 KB, 109 KiB) copied, 1 s, 14.4 KB/s")) - message_admins("[ADMIN_LOOKUPFLW(user)] has attached a hijacking device to [ADMIN_LOOKUPFLW(A)]!") - notify_ghosts("[user] has begun to hijack [A]!", source = src, action = NOTIFY_ORBIT, ghost_sound = 'sound/machines/chime.ogg') - - if("stop_hijack") - var/mob/living/silicon/ai/target = locate(params["target_ai"]) - if(!target || !isAI(target)) - return - var/mob/living/silicon/ai/A = target - var/mob/user = usr - - if(!is_station_level(z)) - to_chat(user, span_warning("No connection. Try again later.")) - return - - user.visible_message(span_danger("[user] attempts to cancel a process on [src]."), span_notice("An unknown process seems to be interacting with [A]! You attempt to end the proccess..")) - if (do_after(user, 10 SECONDS, src)) - A.hijacking.forceMove(get_turf(src)) - A.hijacking = null - A.hijack_start = 0 - A.update_icons() - to_chat(A, span_bolddanger("Unknown device disconnected. Systems confirmed secure.")) - else - to_chat(user, span_notice("You fail to remove the device.")) - - - -/obj/item/paper/ai_control_code/Initialize(mapload) - ..() - print() - -/obj/item/paper/ai_control_code/proc/print() - name = "paper - 'AI control code'" - info = "

Daily AI Control Key Reset


The new authentication key is '[GLOB.ai_control_code]'.
Please keep this a secret and away from the clown.
This code may be invalidated if a new one is requested." - add_overlay("paper_words") - diff --git a/code/modules/modular_computers/computers/item/computer.dm b/code/modules/modular_computers/computers/item/computer.dm index c6bda4b5fb88..54845a2b818f 100644 --- a/code/modules/modular_computers/computers/item/computer.dm +++ b/code/modules/modular_computers/computers/item/computer.dm @@ -125,7 +125,8 @@ if(user.canUseTopic(src, BE_CLOSE)) var/obj/item/computer_hardware/card_slot/card_slot2 = all_components[MC_CARD2] var/obj/item/computer_hardware/card_slot/card_slot = all_components[MC_CARD] - return (card_slot2?.try_eject(user) || card_slot?.try_eject(user)) //Try the secondary one first. + var/obj/item/computer_hardware/ai_slot/ai_slot = all_components[MC_AI] + return (card_slot2?.try_eject(user) || card_slot?.try_eject(user) || ai_slot?.try_eject(user)) //Try the secondary one first. // Gets IDs/access levels from card slot. Would be useful when/if PDAs would become modular PCs. diff --git a/code/modules/modular_computers/computers/item/laptop_presets.dm b/code/modules/modular_computers/computers/item/laptop_presets.dm index 2bb353e00d81..e1ae02d148ed 100644 --- a/code/modules/modular_computers/computers/item/laptop_presets.dm +++ b/code/modules/modular_computers/computers/item/laptop_presets.dm @@ -19,4 +19,5 @@ /obj/item/stock_parts/cell/computer, /obj/item/computer_hardware/hard_drive, /obj/item/computer_hardware/network_card, - /obj/item/computer_hardware/ai_interface) + /obj/item/computer_hardware/ai_interface, + /obj/item/computer_hardware/ai_slot) diff --git a/code/modules/modular_computers/computers/machinery/console_presets.dm b/code/modules/modular_computers/computers/machinery/console_presets.dm index 4b0bdd71a4e3..ad5b11df2122 100644 --- a/code/modules/modular_computers/computers/machinery/console_presets.dm +++ b/code/modules/modular_computers/computers/machinery/console_presets.dm @@ -193,5 +193,10 @@ console_department = "Engineering" name = "ai network console" desc = "A stationary computer. This one comes preloaded with ai network administration software" - starting_files = list( new /datum/computer_file/program/ai_network_interface) + starting_files = list( new /datum/computer_file/program/ai_network_interface, new /datum/computer_file/program/aidiag) initial_program = /datum/computer_file/program/ai_network_interface + starting_components = list( /obj/item/computer_hardware/network_card/wired, + /obj/item/computer_hardware/recharger/APC, + /obj/item/computer_hardware/hard_drive/super, + /obj/item/computer_hardware/processor_unit, + /obj/item/computer_hardware/ai_slot) diff --git a/code/modules/modular_computers/file_system/programs/ainetworkinterface.dm b/code/modules/modular_computers/file_system/programs/ainetworkinterface.dm index 176ee072b6db..254fe3b295f9 100644 --- a/code/modules/modular_computers/file_system/programs/ainetworkinterface.dm +++ b/code/modules/modular_computers/file_system/programs/ainetworkinterface.dm @@ -13,6 +13,10 @@ program_icon = "network-wired" var/obj/structure/ethernet_cable/attached_cable + var/mob/living/silicon/ai/downloading + var/mob/user_downloading + var/download_progress = 0 + var/download_warning = FALSE /datum/computer_file/program/ai_network_interface/run_program(mob/living/user) @@ -25,6 +29,29 @@ if(ismachinery(computer.physical) && !get_ainet()) search() + if(!get_ainet()) + stop_download() + return + if(!get_ai(TRUE)) + stop_download() + return + + if(downloading && download_progress >= 50 && !download_warning) + var/turf/T = get_turf(computer.physical) + if(!downloading.mind && downloading.deployed_shell.mind) + to_chat(downloading.deployed_shell, span_userdanger("Warning! Download is 50% completed! Download location: [get_area(computer.physical)] ([T.x], [T.y], [T.z])!")) + else + to_chat(downloading, span_userdanger("Warning! Download is 50% completed! Download location: [get_area(computer.physical)] ([T.x], [T.y], [T.z])!")) + download_warning = TRUE + if(downloading && download_progress >= 100) + finish_download() + + if(downloading) + if(!downloading.can_download) + stop_download() + return + download_progress += AI_DOWNLOAD_PER_PROCESS * downloading.downloadSpeedModifier + /datum/computer_file/program/ai_network_interface/proc/search() var/turf/T = get_turf(computer) attached_cable = locate(/obj/structure/ethernet_cable) in T @@ -41,10 +68,235 @@ return ai_interface.get_network() return FALSE -/datum/computer_file/program/ai_network_interface/ui_data() +/datum/computer_file/program/ai_network_interface/ui_data(mob/user) var/list/data = get_header_data() var/datum/ai_network/net = get_ainet() data["has_ai_net"] = net - data["physical_pc"] = ismachinery(computer) + + if(!net) + return data + + data["ai_list"] = list() + for(var/mob/living/silicon/ai/AI in net.get_all_ais()) + var/being_hijacked = AI.hijacking ? TRUE : FALSE + data["ai_list"] += list(list("name" = AI.name, "ref" = REF(AI), "can_download" = AI.can_download, "health" = AI.health, "active" = AI.mind ? TRUE : FALSE, "being_hijacked" = being_hijacked, "in_core" = istype(AI.loc, /obj/machinery/ai/data_core))) + + data["is_infiltrator"] = is_infiltrator(user) + + data["connection_type"] = ismachinery(computer.physical) ? "wired connection" : "local wire shunt" + + data["current_ai_ref"] = null + if(isAI(user)) + data["current_ai_ref"] = REF(user) + + data["intellicard"] = get_ai(TRUE) + var/mob/living/silicon/ai/card_ai = get_ai() + if(card_ai) + data["intellicard_ai"] = card_ai.real_name + data["intellicard_ai_health"] = card_ai.health + else + data["intellicard_ai"] = null + data["intellicard_ai_health"] = 0 + + + if(downloading) + data["downloading"] = downloading.real_name + data["download_progress"] = download_progress + data["downloading_ref"] = REF(downloading) + else + data["downloading"] = null + data["download_progress"] = 0 + + data["holding_mmi"] = user.is_holding_item_of_type(/obj/item/mmi) ? TRUE : FALSE + + data["can_upload"] = net.find_data_core() ? TRUE : FALSE return data + +/datum/computer_file/program/ai_network_interface/ui_act(action, params, datum/tgui/ui) + if(..()) + return + var/mob/user = usr + var/datum/ai_network/net = get_ainet() + + switch(action) + if("apply_object") + if(!net) + return TRUE + var/mob/living/silicon/ai/targeted_ai = locate(params["ai_ref"]) in net.get_all_ais() + if(!targeted_ai) + to_chat(user, span_warning("Unable to locate AI.")) + return TRUE + + var/obj/item/surveillance_upgrade/upgrade = user.is_holding_item_of_type(/obj/item/surveillance_upgrade) + if(upgrade) + upgrade.afterattack(targeted_ai, user) + + var/obj/item/malf_upgrade/malf_upgrade = user.is_holding_item_of_type(/obj/item/malf_upgrade) + if(malf_upgrade) + malf_upgrade.afterattack(targeted_ai, user) + return TRUE + if("upload_person") + if(!net) + return TRUE + var/obj/item/mmi/brain = user.is_holding_item_of_type(/obj/item/mmi) + if(brain) + if(!brain.brainmob) + to_chat(user, span_warning("[brain] is not active!")) + return ..() + SSticker.mode.remove_antag_for_borging(brain.brainmob.mind) + if(!istype(brain.laws, /datum/ai_laws/ratvar)) + remove_servant_of_ratvar(brain.brainmob, TRUE) + var/mob/living/silicon/ai/A + + var/datum/ai_laws/laws = new + laws.set_laws_config() + + if (brain.overrides_aicore_laws) + A = new /mob/living/silicon/ai(computer.physical.loc, brain.laws, brain.brainmob) + else + A = new /mob/living/silicon/ai(computer.physical.loc, laws, brain.brainmob) + + A.relocate(TRUE) + + if(brain.force_replace_ai_name) + A.fully_replace_character_name(A.name, brain.replacement_ai_name()) + SSblackbox.record_feedback("amount", "ais_created", 1) + qdel(brain) + to_chat(user, span_notice("AI succesfully uploaded.")) + return FALSE + if("upload_ai") + if(!net) + return TRUE + var/mob/living/silicon/ai/AI = get_ai() + var/obj/item/aicard/intellicard = get_ai(TRUE) + if(!istype(AI)) + to_chat(user, span_warning("IntelliCard contains no AI!")) + return TRUE + to_chat(AI, span_notice("You are being uploaded. Please stand by...")) + AI.radio_enabled = TRUE + AI.control_disabled = FALSE + AI.relocate(TRUE) + intellicard.AI = null + intellicard.update_icon() + to_chat(user, span_notice("AI successfully uploaded")) + + if("stop_download") + if(isAI(user)) + to_chat(user, span_warning("You need physical access to stop the download!")) + return + stop_download() + + if("start_download") + if(!get_ai(TRUE) || downloading) + return + var/mob/living/silicon/ai/target = locate(params["download_target"]) + if(!target || !istype(target)) + return + if(!istype(target.loc, /obj/machinery/ai/data_core)) + return + if(!target.can_download) + return + downloading = target + + if(!downloading.mind && downloading.deployed_shell.mind) + to_chat(downloading.deployed_shell, span_userdanger("Warning! Someone is attempting to download you from [get_area(computer.physical)]! (Click here to finish download instantly)")) + else + to_chat(downloading, span_userdanger("Warning! Someone is attempting to download you from [get_area(computer.physical)]! (Click here to finish download instantly)")) + user_downloading = user + download_progress = 0 + . = TRUE + if("skip_download") + if(!downloading) + return + if(user == downloading) + finish_download() + + if("start_hijack") + if(!is_infiltrator(user)) + return + if(!istype(user.get_active_held_item(), /obj/item/ai_hijack_device)) + to_chat(user, span_warning("You need to be holding the serial exploitation unit to initiate the hijacking process!")) + return + var/obj/item/ai_hijack_device/device = user.get_active_held_item() + var/mob/living/silicon/ai/target = locate(params["target_ai"]) + if(!target || !isAI(target)) + return + var/mob/living/silicon/ai/A = target + if(A.mind && A.mind.has_antag_datum(/datum/antagonist/hijacked_ai)) + to_chat(user, span_warning("[A] has already been hijacked!")) + return + if(A.stat == DEAD) + to_chat(user, span_warning("[A] is dead!")) + return + if(A.hijacking) + to_chat(user, span_warning("[A] is already in the process of being hijacked!")) + return + user.visible_message(span_warning("[user] begins furiously typing something into [computer.physical]...")) + if(do_after(user, 5.5 SECONDS, computer.physical)) + user.dropItemToGround(device) + device.forceMove(A) + A.hijacking = device + A.hijack_start = world.time + A.update_icons() + to_chat(A, span_danger("Unknown device connected to /dev/ttySL0")) + to_chat(A, span_danger("Connected at 115200 bps")) + to_chat(A, span_binarysay("ntai login: root")) + to_chat(A, span_binarysay("Password: *****r2")) + to_chat(A, span_binarysay("$ dd from=/dev/ttySL0 of=/tmp/ai-hijack bs=4096 && chmod +x /tmp/ai-hijack && tmp/ai-hijack")) + to_chat(A, span_binarysay("111616 bytes (112 KB, 109 KiB) copied, 1 s, 14.4 KB/s")) + message_admins("[ADMIN_LOOKUPFLW(user)] has attached a hijacking device to [ADMIN_LOOKUPFLW(A)]!") + notify_ghosts("[user] has begun to hijack [A]!", source = computer.physical, action = NOTIFY_ORBIT, ghost_sound = 'sound/machines/chime.ogg') + + if("stop_hijack") + var/mob/living/silicon/ai/target = locate(params["target_ai"]) + if(!target || !isAI(target)) + return + var/mob/living/silicon/ai/A = target + + + user.visible_message(span_danger("[user] attempts to cancel a process on [computer.physical]."), span_notice("An unknown process seems to be interacting with [A]! You attempt to end the proccess..")) + if (do_after(user, 10 SECONDS, computer.physical)) + A.hijacking.forceMove(get_turf(computer.physical)) + A.hijacking = null + A.hijack_start = 0 + A.update_icons() + to_chat(A, span_bolddanger("Unknown device disconnected. Systems confirmed secure.")) + else + to_chat(user, span_notice("You fail to remove the device.")) + + +/datum/computer_file/program/ai_network_interface/proc/finish_download() + var/obj/item/aicard/intellicard = get_ai(TRUE) + if(intellicard) + if(!isaicore(downloading.loc)) + stop_download(TRUE) + return + downloading.transfer_ai(AI_TRANS_TO_CARD, user_downloading, null, intellicard) + intellicard.update_icon() + stop_download(TRUE) + +/datum/computer_file/program/ai_network_interface/proc/stop_download(silent = FALSE) + if(downloading) + if(!silent) + to_chat(downloading, span_userdanger("Download stopped.")) + downloading = null + user_downloading = null + download_progress = 0 + download_warning = FALSE + + +/datum/computer_file/program/ai_network_interface/proc/get_ai(get_card = FALSE) + var/obj/item/computer_hardware/ai_slot/ai_slot + + if(computer) + ai_slot = computer.all_components[MC_AI] + + if(computer && ai_slot && ai_slot.check_functionality()) + if(ai_slot.enabled && ai_slot.stored_card) + if(get_card) + return ai_slot.stored_card + if(ai_slot.stored_card.AI) + return ai_slot.stored_card.AI + + diff --git a/code/modules/modular_computers/hardware/aiinterface.dm b/code/modules/modular_computers/hardware/aiinterface.dm index 0ca61ae7b7a7..49bc5baa108e 100644 --- a/code/modules/modular_computers/hardware/aiinterface.dm +++ b/code/modules/modular_computers/hardware/aiinterface.dm @@ -21,10 +21,10 @@ /obj/item/computer_hardware/ai_interface/proc/parent_moved() if(connected_cable) - if(!connected_cable.Adjacent(holder.physical)) + if(!connected_cable.Adjacent(holder.physical.loc)) connected_cable = null - if(ismob(computer.loc)) - to_chat(computer.loc, span_warning("You disconnect [computer] from the cable!")) + if(ismob(holder.physical.loc)) + to_chat(holder.physical.loc, span_warning("You disconnect [holder] from the cable!")) /obj/item/computer_hardware/ai_interface/proc/connect_cable(obj/structure/ethernet_cable/EC) connected_cable = EC diff --git a/icons/obj/tiles.dmi b/icons/obj/tiles.dmi index b69c131a49c90026e1113ff311ae0b16fb044abc..d6a260869ae930f8c1e2bdf5e39ce0dbecfaf1b1 100644 GIT binary patch literal 18145 zcmb@uWmH^Iur7$Z1qm9oad&qK?j9_-6CgDs;j=oL?c0ifq}tPkeAT}zBm5;p&$XDB&_zEFfgzI zKHB=9WvtvS-0VJmwsUcYf${#4mE7*!%YhNHf6o}=sXE=stCWyCG}RF-xfmlOlY$Xd zk=b~LQzxC8-7?(eH4`af*m$~o?&Ih6*l2OrZCGI0=sxLnw`!d{oxj{%H0X?HAXRtt zo|ns0*vkTZU$`8TKYy|!-6+VY;%EFSL4QIu0dl2CvhSb5i!}KZARIs8NYt9bWzM!I z<3Sx`oK(Ythoq-KQATvc$bT$?rb7GeZnS_dy&9sEjmX^pyD0QX8J-9o12fY8L{H1IUhMo{>J3C`ymFPgB1P06Pe-Qa zM|haFG#aG5srADMfo~JLix3^Q8y%a}Uj_vw)0aQXGKTZHEd1P)wc*HIm$G8<6!&XZ z?`gePLeg!sL7fiiCLEgGQGzCB$=BS#FDf3o+~w2uo|E)9DR6?bGZBhp8ss>`22WLzjAve{KN6>*NB{QID`FEZpqEn*$5(IXEUk#aIgvPNHI z^|j|hX`{Pfz&Kdl9DO*rc(}M+g34y!)5Vl2O4r08rx|~Xa*ij6GLB?8}{DgAQC5gC+GxhZwS`Sq&JTgIuv;;C16H0gx z7MV5<7VJBLV#<|Jp)%uET|{*q0)vzU5NhgZfA=?J*fjA#u}B#>9UTR_#6ELQd|9e= zWw&LgMg?8*jrs+X(x?USulB5aGPuLfOAJ~i_z*}w0~)r-d63m3w|^jP>L_pNdLZ3n zP1&=jB3S#)V_?PWi`VLtM*XMC75(S-b%Tb^))6**G%cSl zTVfGUl%Pmk3l+wtY-#-1i@Q>A+I6oRYzi|bM;=l6xy4MyOo~D(hB^ubnr$r}%#G^- zzKgFY3nsqhB#yR2l%(Jg7O`j(2qfwy$+pr14vSoLggxLQy5^)3;I#blC~M$mN)?+m z8az-R==@_d)$rU)8HYSpYgS*@o98>(^k2`{KuM+bz>}r=zvKMtjz(uI&55$nZ;2OF zR8)>vTT{(AhPt|7va+%;Ffi0Vd{E*b+EFrn09!q>;(epk)5sARs4@yANww9*i+O<4 zZnlJrL~$k#qoweu=6DkqhvWhNs2B8(vmgB2>ikk{xXXO!95Gmy@X5<1c4>C@Cthhz zfDcc~AurOd&qH(3y7ug>MH`z;PaE2SXKTWZsc+mMybu(WI!YM|ffOI|L_xs1_%nw* z_S9cTcY99Q7^=Q})D_AT0)y;4f|KZGN+41BuPE|0j>R&~pITRCuzwRHI2im&z!{>X zmQb#sI7t;$6xeZnm4Bhu7v zB4WZ$o{HW$8ajA1AHigB1%od;E%qzYuZCqCY_-Bh$o8!Ewt$633Abj{O6gOkVu3oG zbQgZN;aghFOId6?kIm^OPyed#83Rnzc?#QChV>L^p+StntcG<%lB_d}UE3fnT8bvgvrd{Xz7J!E)6(F59uW==~L^?`Mx~a({iPU&ashYtJocw?@d%cj`%`8L2^A zAKx0hH=xf(DW^?UitffoG{BkMl~OEnQs^Pd>3&+e&IYRnX!Cx{l?W3utY!@(M}W%o z>^9BTiS@GAt6PwSMUa=l(-qr=#ADvd#?TMZwrf&CWnt zi>{ZKfQlnYrJC#Osr5?c3`+A(xrw6?>c2nnp6?D~WhpDsnegS2z9Deg+85(VgF#aS zgOt%P*e-+cLBkE+S(1v0?REvSLp92_)cKgQ2hK%75$MnF@L=RL2W-XlZJ>{%HDiEb z6OoesEGdaxTQm8o(ihrohSMcKf&%!lMRQXKTpQQ>ZD>utI$XB!n~$1Cl|vl~AHc zi-K5+TFj^!i9hIfGh{!LLb0JZ5HyhH6R0Ma{C4$50^4X|y;s!w^5)J4V}?-51Wu8T zI#OJAE;AVgLyB548WpG3zZTs-<89(c(~$<3#0PROuzmd4I;W(HMKb3G7Rhv&r_cFh ztb1R?+QA*UeYVk3aBH|R+A zrIF+it^wrUpRP~u@KQPhS>AFRO`a?_*81GoH@K{0*+$WucmMvaD<>xxbJ6|vD{OFg zuGM3!*VzEKU}TbfLh)^4JXJ}dLbHxk2g!GOxx^pTn_nf|eq?+mb1^K4Bs%jpN;yH- zb|b6mq&PSv{GwW}Ig~4QurT{AB?gw0K#tz_Bko=-?EXZSgEF%gY@^t$OkY?Oi^J^X zwV0w%`5R7vY1Kq|5R0FOe-tTYB@*)bMcOR6=|~4e2n3frmQ?x;bq5~E zZ=ZMdW=?04jQwGMfHm;-v(R`~R}d%u#d$9_9$?RU?nl4N0b3w}*nB6<%*bF_&Jp%v zOQeCHlgU?xh_#U?r;UbUr%QLDU)?DVRv%Zx4nE z{I!j>Bz+D#2Y1YGb4?w7wVt+=INEUzDRm7GE2y}FPyujRG~4uf*S*=ukPp|1L#&+H zlqnsQrA+dx4lXZ^vUSi`3xOlfUm%d+W6 zdR&gLOZH~=Q5o}R;(~&93>$y`5ap>y03dB>D1!3{kpq{byu6(FZuw)Uq#HLC6t$3E z0Ypo;Dn^pTfYBtxG7R(+N;&qlfW={XeLP)o~V z?2Lzb3y9{?Z&|r?Wg|Q})m_4$FYGB8xUz|OzUZu}7Dj%7BxtIWe*f82ns$y<{Jrqp zd#0F*KkA2s&dNXIuqVU0{-l-@BuX%I{@r2tDHyO|eGUgOv~ zv;O+*+&OauOEI?qA8be2@k(AdeS5sNwBtY(cEtC?(Mc3oIbm57PNd-f->W7vIH6DK zk^%^yH*$mjkCs{gy9e?&);1TO{$|)6Rhz#zzh5dmBft^H?d_aW`)rE;Dkc8=US@5)Jn`N28zny;pl{6JDZc^PP_hJt7o$iTv zjpJh7Ss<6=3g)QWeDs3S*YknccHNV+dncF0ql>qJe&2QjUwsz>3PP^lXbnI^A}yl= z+fJNEZz-TBE~76m6p#0V<>kn2dwL7StEDZA7f0{zCol0<$!J^HqbkSWtGHlpVtxc@ z=BaeFzVH6%=OkvCbBkSjj~D%KY>Ip_LzK?|vCY)N!XUBDkM7dSj*-pYaKY#6+1L}} z2B+nLC<12v&H&M(oB*Na2B)9x?OD5{sj~|UHjyDhP=pfl$qS#tnIHmOu^Pv8A#4F` zK4(dq`L|~LEO;QEL{%epM858tE3=;jxTp6{l@DI~tv9PE_)gp`I#1Y?k?z#A+Mwq) zx%oeDE*mEcSQF0I>PN20Tc;UDIIVq`5zcWFe)W4)8*O+UatSOo@r3Tq zz74QhCT!@pd9#ZbC#oACf=KXbu+j^L<7tEAB{U#Ij}H)nmE<5?1KDD5U>-#mWx)Zx zyaR#1zduZwX=gS8vo4Vg89Djh`DSljVOBZE z>V7&(gDiXH3@YQ0HC+L;gS88}EC2@I@Ovh95U7M9%2k`$hn6zkAzq!>XTPh?i;2Mb zx$O;1s_o%qb@xU3d3=coA6P#gNSbE5q|)VMUjsay)Uc?S&`5@iPs2t_8K+Lnb@SIM|% zjhzed%y$okNcs9AE60&3hW(ixR2GXH{F$YZkEf-9e}aMj9N`F4skf{?QgMYkzQav{ zi=c&o|A-U$V9t*)+R59lHV~LXL0d?~X7kxSX)k#k#$R>5lbDCb2R_h^K@k$N@ZrNg9n4&lubAN(J#%1;C7Rs5)j6EaLG>@p@Sha+CR^f zowEW5pb=YN?|j<5MaWNJ^q(0-T(z@-HTKbs{b0!vlilEjZI754845GLz8~9m9fy{G z_0FV{1i-*wK0sXnyD8HCbocyyf8t zg#m1-a#C^ch4TcD{1i|0JsJyB_?mLz2AUHe_Bj(dAN@u&QS{I0dyWm!ylMg2e>Q7M zpB~ppO6z%9WAvKCLPX#)Qkq&(d4r7B2FRU^Qv4L0s9A7ipl9gt{R0# z(v)#{thA*Rt^%-6dqPz;nrt%9ZfT;%44MirQ&j#8&J_8`012WdQ)~c%Y;y6P(ytjN zJDDXtmcq&*no z0{@hFNG$ys`L6c)<%H!xKbLXM;3cN)0JtvKFozZv&Wreth{){u;RYak&`gFKlQmnFB z@7PN6Z8uls)%vBZpW0>epo5X%!^3WYV`rdnw0LzI;yZL0t_TLoE$Px7c-BQ~ zN^O;RES}&fA@|OX4l&`ORCH@S?gbA|Q>7u@DtKE(`W5Az3hzbdB9}1N9=ANk?5JRw zDpg_P(rOdtOna+%?To*$3I)yNmZ>3*(l5P!Vg>0Ta5bZ`AhiS@VX@jHzmb^9#C;)Q zEklgUmfT>OY8uYo)s?_cf!0q8t?Tjw5&E1fZ`nq?sZem!k^caOb$E1S0lnOn%lgDG zTV_iGy=+cg1dVy*(4xq4x8|82z-C1h?u^we$`1_H@Rf0p1V6yUgj4Akage9jR)i+t z@H~9HC*tAnvc>;P(rpC~Z=;E;;AtgxP=l^O0mt!|AseB9`q963bz1ZIZ9%e9XIs+2 zUh$?i+e_b8%txd}deZ9rz`Pv5ng;6M;h?@vKsE00Yu*eCE)1d8b#!szf0*EMqqVSZ zX+R8i%rr}%lo=^i1{p){M!&xs4HbCgB$^_xFw08Wb%f|hXxf!&X;?+3AfYN~+Lb8K zjBW|Mi*6W~8QHwu{mX0(J5=M3n$~uE>Ay#<9v=jRI>3F3vz9XcmCU@MrW`<#6|p5S zx25tmaxpXOqRcbE>?g`gqqV@Z*6fi|v`LTPE?IQOL*-9@aOA9CmX!+PTrD9+w<}3b zKvk$*K-voLAu)I_eQ;%77AFnlS7#VcSVpwD6sXA;8rs$9x3qSJS%_fXt5NSuCE|JwXGvkBy{k49c;{ zYzO*XfV*eCD%~3Z!fnh&r=F>QGJqUZMn6Rz-5f1kElvjTS$Ov#?PxZpBdt3rbfi&f zyObOX`F@XtE}ecvNf>r4ON<9Ooxh{hr^#c$#e^+a(<)Elbb`Rg$1K|Gnq}*z%uHq} zM_M}CsvFcPPy%4*$c)cSPxDQ$XAH|2tYw_)^_LQX=ozHVG{LRoTP z@IX?nC0C@Lc+L!&FRIndoMz6CtQt>|EN>UiHnSfIb{QCKW^}ptn+!-_P>F2 zJNT9&02~{6g@Nw-Oz;RU`{mFQ&Lw>smaq8XND>CadSuse#xz?$|2gfKaH7-66-;tQ z?(NhgX&thgv#2~1!e4xCoqTQvauMQES2GcEesb$nyBL+RX8c}!^N|d&Dyh5Vi9il+ zVT6^5Kdj~09sX%ydQg9UE?krjCg7bdjMOFif`XIKh2B>6Hqva1mEx3=j5!y{SEUW2 z>XqsLi<8r8D>gK42^SY-Ld%Kl<~s0QGiA-WVtAbW_v<=^P3I!Q+Uj7UfJc}p^Bw*e zO$}O*e{$d4HFttvRd$F%Q9U>L_`a4RScWNiL_Wq6Pa>XD$W9aqU(uRQhmUwXvAR}I z7GJ7+dsug^V`fUT`m(!?XBcDCEy{qyvkZBq#iR72X_+4fy9$>y$Q}XJ$q?I{G)7WAX; z5B-lT9t*~`wL){a!XMstvoV`usC`C096{?7m1_d4AfjDG8SYhbfk3Ylr> znB_+TTYa(T0@=FfUZeJyyZ^BSOgY`s%?&)x-WlU99v*^Kb5TLN(XeJR|Db)!$Wq9G ziU@@XXtPalY8XE|jGy{Se5OdK9e+0L5Eu;BRVR>L&ofXSoIG}MOmWtwQ}`gkq`(DM z3Zn?b^6{Ndm$#)`$D(wbP-$3PtG;q)k)z4q{w~C^ZCn(jwe#p@C`_2k6m{{WWY!c2 zw)76{n)^bvB^56PuG^(~k9BMV70nqf30d69R9W6&$ot0FR*G_O=2F>0)b!i}fJs3L z+VZLDd&_SyHD%1v2C>)Srn0iHf!YN4I`i^yWGhgl8WwKvPvWD2BHXC3`TG^=yvr{t zM=)fUf*k5oi0zjn%(3ftQo^EEIrvvo(%8v2xr~Y=vKog1HG^0xaiL-Ix za8u+yk}$GgZABvUdsbxWU2XSCiw{?#L3))YbH-{4`6CX73<%&y{`VtvVhI$E^B=B0} zuU=VI9e1^T)K5!dNU4ao5w7z>5?Z}(|4ql0&uPor2BF(OB1NH!8l>glX*|TD508 zP*7gd!gWi4u0#LEPBLSi+c!=0Mru@LiNLacD> z{s6X_acwNjb_<5QcQ^>}v3~igx%=8D^^_Z%G%lpi=u~Igbus?uU%y=KyRY$gP6m4A zbTzL(iCqZ^$G(e36zqQ|meXHLbGPmKD;ASEU%6VbqOw)YG-GLbszkJXyB z^INA@MS&)1N?cSz6)_F#R$E=1$dG8d9EOtyQx>R{q)TZW=Zs9^f-5$fEm4)-%`1v=p@#-&a5C4&)?3=~1Yn z7itc3<3-SHkFNwq8wWFczCb+!5 zG@^C5XsAi^knm=`V#14e_#09%mR8;dr4Yk2ZT(q~S;{{n9HALird37rdutKhY|vml z(HZ$OC|OG)?cFXO!xAE|3!0s37mD^FTM?(3amB+|KA4IK*6#V4@1!{oX(VrA3>ZUC z@eqDkEnB^`CP9Kce`+JvkrpuJ8Vd-K49ho3e7v-}n+(r?&iit;XEoU~A|XOPnZ}ym z&Y}lPfGMV*U4Ch)1N=`Cu?F-@1>{Ct0#v81gqDf2Ia`FrMU7_EW?mIT=!52p=T*x%uF zx7zgxBD=dW?a2q?S5hvG&ymEjP7r)zJ)RiTvu8H|j=T11$q zIHhun;GxVVl?8dyODgI}w4S5_++j;6Nr_$I$Wq~h%qW4ihLFeK?jNW?)s{GYz-&V2i!BIO zQb%V(`1Pp-d5Q(~!2?)2yvyl~1k_TERdur}b?3i&0az1*zzO$+g*7W()a$w;cf=JN z7&tD1%MGJYLRb7MH#COA)MTj+O{3}H#OnT-xL8vDC^T)+dXwE7+&G8Xnl+yz*87W- z~Mfb3Yt`+ym+CI9ftwL4P(#hV8LG{%j{vt$H;;DVndhfauadzRSj}I~Xc)xU+n* z#%!z$?U)9h*KSOQh%oMby&7%+?4c*S&WJfpvegodOp@8N{< znS~+wFaI!0MXGdNdFCYzJt+B$HW$>Un)MhzdUNyR!{g)O;o;`5L{&CBt{Q=kakMp+ z+t66(6(Me9NGwH0%3GBS5bE*?dJ-TA0A%;}_AdQ+-?e{(8$HO28+=h(0T&e@pC3d^ zsGX9qQ$jD2BEJO&LE4;SVbJ8kw`CFx^!V8o?twgif|EJ_SfiY(c1sQHmed17HFj_6^y>D*~sgJ#xn zazCfVqXCDE|L2A>Ir^^jS&3at&G2TCJ>_Jgyu(?id(v3_-!$FgkEyA~Y?i5GdEzG@ zPmx<~e$@P_0U4>Vv~6EF|-5?Bhhy{f!yu1(g$>!(`?N4a~Q^4vP6vo7bJ2wt_- z(#OERI}?HnP7e`ZC=4qgP`|+hYjaak(mXRz9=_6m8Nq$y;!sn;VS0|NklQ7sa6hcV zZDR$AH0nI#q4#32+^8pOgmY9m-;BH$aB+BWmu^f#hv+Hg@7rR9Eu!z-hxRE+&+OrJ z(IysguwIP*GZ{*zw)g+sdh*|q8pEMqm*&N&>C4PR@R-XrCUu`#B(LNbr!>kl(3@l>6!ihcP~>{)qOWv4+4}%GOPW^GkEds8x?yxTaTq~p8D-z zf<3fuEbz`(un1xH*;UmX;LD%+<3zO@o~<5ri}g(Lwu&sUFPb-A5jMUP3N>B)__lH( zg$#pvnr!61=OowOJn4V;+mLz_aotD%`M~29rHggHk>sXPjDLtU?l}h8`4LUeANt|P z=S7mjNJWBux~hp>~)&BRlmw> zA#DbG5IKGD(z*Jb@HfV{Tq6Dq;FnAOca`st4A~=$UA$jobj1We{sb5yT_DsPISY33 ze)IOE`a?8EnJwYDDrhRo37jwSsHyHLYfR`!h8ae^&`4h;MH_CA9hq z3kzc&ukwnC&Rt$_T@0$sU~}IbiN9Wn+cQw?8;nzcDd|0x8Z8P@UKre*qQ zZY5@XCif2}|6V=u&KO~7a{MK+vAX zk|e-+e7b)Q04M~yU%cB*eDOJQE>Xw$pfIYL3ter^OYA;uh$4J%to^7J{f#lRx-V7p z#u00kzHAF3Ll6H*&#sI*F3hqKem>juYPxCewu?%gMC9#khyu(CAZP8r&U;@n9h}n& zy`e_xR}Q5(@7e3>>))UtoO_GN{L}zSv(vWtaf8y*((pGoH~((M%3VA@4?H(C=N2?& z)k=0$qv}ubNm-1;zO9R`+DTHNnKpMebsGW2@*)@3fB34-qY>s+F{~}9^`YX$vrD<+ zLk{WAagG(Pl+iwQ={t_Zqkl?&%1l0NOSsTHWRE4MxgPf3w_M*bDHKvJ_TwY0M63-VVhg z@r+Z$&W_PW)WnH_Yj}szW z>a7u~S1q9S7ZXBa@T2iz8YITUsx@-y<{)qGI^ssS?V>Bpg zaC`GlwS`nC9ay$!u&iZP)Sw89r!Dd`)-JQ|J&1cQ2ul0WBD1}^o9v4cHnoT zIuh~bkBaYVA7Yke`bs;V%88fz1U4Ld${ZJQwu5RTk;nh0B64C0(6G>bwS1OgmaMQC z{7%fqVB4o`{f^g6S9TdCjeT#FF89D;UtOjOORo1SMn*|GD+keuhWO+$&enpRn$+Hz zoitj{{U*K9N;@5SaooSqN&;2IU1zjgA=Q5%;#mfI-+@B^bhsdw!!Lf0YVt4^N!gLS`OvHPN(uE5DSZ72aC*9AJ-h$6b+%le>P{#VYE6>aO zB-@U~cAy=n6fsNDE)}nb-aHOM6#f3y(R6m*i2X)x!anA`lD2&iI z6QluLz-{o>)LS)7X8Mu=USz=gzQB%4$cT7wUC$yy`MMF|#{9c?; z>*gI2_&N&)DGX`+j9st;#?<#b6i$o;_mpVH;s0?O(d@p@#l;2Q)XmtIaAl<&K;Iur z@16enUIB!Q=!7qdp`maYNfkPgo4SA%L%RLd8f6#HBFGa{IxT^-Bh@Cp!+Ltm)s-<# z0oHxq%5?oa3_-kM3tCB2id6DkJ}!uVrEpMLO8wFswo5*1>|P7K9D27asRQ#F1&~W~x1Z?ALe9_h{0A8^|+u zC(t(++3I}U7cw7i{WQ`vr~DY2I9&=B;B`r4%aMQNt)AWl`C@lkBrS3*L@#(&B9oE6 z;~sHLJL-361qSuJWbis@OUfh=ltUm=I`c8{06PL4!%n{@$&Lg zt9^$ST3nvh@rMr|jkwZZjH1=^q{i_zs?=G%)FIA>>zc111zY@6k=5h0ZQb!rZb0XH z&9j>SDK!CQvbL-5FYt)zbKBF;LxhZhj!G=&RoNr37DGK5>I;R#5$r#3_VQ>`#Fx8x zqZp$lc3`oB)NKa^osf;^@9oL*U{5GIG4XT* zIsTxe70ugd1L}`nUX6wyK8zk5Fx1!Ahe%PGR}%pT_kLo)0njIslJYhzEG$M$EGKSY zKu+%cdjMI@@~`IorU=9}ZS^FcJYMV#H8z$_HGLeG``-SHB;NTvP;>JBr$&8cWgJkm z)^fHB4asSKp}q;s$)Wy?VSkiYfkfBSpDOM%F+O=3(Bk;0VzI85^VH3Z(B@1XsXe?) zYx-m+iMyvGakYs{@u;f(xErX;iBI_x|7Ma&FFuPC2UMg z3=s(b8K$MB>?8(*Lr4g%YibIIm6dhij==ux%1&G$I7tc-(XO150R198djDcj{3T&r z*lac|*8Azkaj7anEql3VAt2wFU$(F@aBu5N+2dV+gDJUwho2zDYBQb)d55VKv~_os zby=0}BM-v5&%QLr=I%qvn^Q4;bTRfmT%+|j83Cem2-OIt=~u`#w_~it-#&P~Id8Eu zUQ#rF7-Q}(40ie#dBKx(122!i+<(2ppBO~&d=i|lY~J}^Ql9(G2SY=Q9{z zt~@}QvT@3P%}RM~+~{U9h|59zvs$-x9nCQHhg9NZ?;0W2)`>G6Se_GCY0Jg^jVPE8 z_(^`KNFAGC0nj9haP8B6>_e-I3zca;N=|b^Lm}w~`r1$t;N}(<)Ep`+E9r4irdC(8 z5_5Mc)0H(pe25<0PTzAw+xq(U3=Dlw%l7YCIJQD=~j~Accehd9WJUC zY4!g!ntMZ}{v%HJI~<(sKhK5$rB09^7$}NYkaur==Un_H?lmuuYMX~laQSbq`rMxu5^xy@ygzWUy_=w7G37%9mk#@@YO*YBN`IL zjjX7NDlJkcp$~-U+>v8!g_LPSAwV}5$uCDcyJ}i^G%d7yZqdDOjQx0=rW}8Uuqguk z4O_D~%?b!U>AVkl?Dfd-RbVa^LPFK1Z+Gny?SY%O<2b5hlm=&pnxHs=d+h7uEswWsiSwK?Z| zJi>3sL>#97$;lqk`9CwKaNau2qpLVWxj5e;JH>8PrM0)_L>eQ!vT9rgBi0uN-I~)$ z?NaAwrK_iDiYK5tIXaFBq;aMzlT_zZ{%UFfdiL~gvpHCgpu_GT^k41M!e4NP7hh77 z5P1iKz8I?~6qnpCLW1bCXE|Aq7|lDn3FCGg8)?y7eD9o<45rK{-ZLZaS>#jlLu(%O zL%)o%x0=LPRabNVTobYUh&UmzaZRLNyn6F4FJ=K-Z6dv%=o8-{?A1V!`~HO00`pl? z7NQF1Sg_3M@%97(4wk0YF8jn>&dZB`xzWW2xCVHcVDW<;h=L&ei(I1bRd6Z=B(Ou3 zsB_ZL4acCi{kg5Jnerf@OWYb93C-K8H@?WBOrg~J*IYWbv}6dteL(GI3v(jVrXc9{ z*{E6!012;3F|d{53aNEw?<7u-3?g8oBcV0R(Xp^sExAk8$|Ub8px_+i%Ap4ca`&`^pcbo2;mzKR>(Oi9Orin;=oFm!UL!J_C zG#woPvmujvchx)x8b2%4-`u}NS|`t+yEHw0NTz-CdfIsZ_s<{w#XID0lFm~N zmleouhgzoUsV27{Z;uzH_4M?HcT)yU>STKUk*1UFrD@P`cf9z`Z39yY)b<%__4lq5 zhw)HZ$Q>FOKvX5ub5vB4n7S3#Vo@BRoe@g{$cX$KU1ibmJzP=7sAD zDT#dlVDsgW(v#cc>o;F%_|fG6?(*lyC(@ERBZu|%U!OBy&$;%0JbzpPM-%e3!*n%| zPQdHTqZC8@?vHB|jMO^;MJp7>r=5D26KFf1SyS4fBk4(s!A1Q(>I@N2TatVU5v2jeNSg;>B(^6={QfT19 zrVbaX^`~iKeraCli!NtyJX_S4X#JAQ?at1dmT(>%a#lyH-QMx8a;Jy6x!A{F zxMMa&omBz22aEtDkDN2Obf~Oo2tc~mcCr5c)L-(yaEqgQ3~cD{{d4S%_U$P!?e0E& zT{cz$Ow;@Gogj)cf7r+SsGx+c-AwjNi0H8=iU}9$%t*_F5g{joBsy zAA9A2y>_E4N1{1vao3km11e2MK!RI|*^1Zz42<{yM*rr54d{@{Ke>GEwTMw+61gvJ zFAKCEY9bd98F(lP^FG(}jdjRN`{wdNoLaTm(BC-7xV26t<#S{?(U}!8R=?M4N(|F{=1j)5^ z_?`mbVfKG`Vc82|@-gO0I9Z71ylm~ZeX$L~+w+{ze|bWV+iP1#Lx8FZ?k44rnrkEh z5DESMiHD!U#>ggh&r_H{ox#+bYhdc2%9Rygy^WmY9i0gAPeZVy&Oi9I3EDhJnz8!N zfy;loC^tXNHBGRMpLjClf)u89w%RJ`1Ye_3vs;6PmhlLSph__V2ReSQO;JmSiq^Y&8T`L}`zU1wj%DX!>YT zK;-@h(1Z!5$gXshH06{T%sVbv*+~`kZyr295LBh5vA3?OBC^l{v9?hf*2-Y7_Z4@) znZkRq%9VyNV26eSya(PLO|T>eMRpWrZvn?&9@1^@pT$dn3F{1Kb0c7L0t0@55b+^) zHW>O4xFu5f(@I97e+a4|2=H%je2zbAjTI$R(;;|YMXp=beT@c$vTWWpuI7tA;J0{k z%eXv;|JGiy)e>sOZ)6dWYyl*o_!-Pl2K(dxJ1TUkdFf;t9Vh3C5a5`sW}@ z1G389^0!4w3VdStw|M^qK@6V}PBbQs=^}O^yymy%MJ$b&aYaWP0Hx0F zF&I=7vi1xWaSQD@Fw3LvrwE~-!Q{aHUS(PCu!_qFH}AOF@9gQ=qI&$WMl>iC^nkn?pWG1HAXHVUId z`u!g7pR69CfJZH2%x-@6dStJW1@<9GPLI~*pC1okUb7wT=A(;AtHj*n~s~=I`bM7(#knQ9~jx12BF0LZC|B0Qy*C(dEZ!>e*V(nVYR| zS9&XH!Hvv~%SKcwOp;kra(mGL;o?B&H0uBq+@H_4>ps(8M=a=|%ZpQ}!xSKs%?j$|83x zE~QLBZ2Igm*62Yu_C7^PWNlv#T%UGULhs%eQg|zu)6V^or}2t<ChyR{I+x3<;%*11l;L;~}tq?7O(Ar6n=(^MFrMw_> z^P4O+`(K6^3bFA3hFQdFK)z|tHC#9Iok|n7*TcBaa!~`eL4QE|=k9<&v(ig$C}b!| zCakEWSK6?((Zhyxcbr#Hs>58n?4;dQ5oh9@)CycFwGeBy7>=38b~#y;UMOHDnp!@I zf<3a|C}hUc(1R~B<)k^z<%NMkMEduC0qU1FkJVI6pUs>rORLpjJ10A*TXyg#>>v64 z>wC#7UUqtCb;Z+`0WAi0L@_JMUG7R#7(r+)H8thLuN zLI;|8EV8!2>E-1Q8js)q&o{b!8HDZkDK_KKza))*L@N&;3CASmD+a2nRueyF`04QP zZfz@qebsAj=^?DfDg1lv)oTS5d~>pB{pJg*03V;+S&jPz)X%CNil-)K{M#Sy z-<*dt1w6dG1gAenU+~oQYs3Wvy7K#rHt!ylIvV|*Nh=)}9ft!zxSNHU&P>rkFzfdN z{49&eP5;rv1#zn7D02Pl9wEd%b^_D5@*t|z;BZ8W@{Y9e^K0unz`tT30TYT`?95)X z38$8SXngC}ORJPp^>Ocbr{O;|1@%n!**#8H2|Aebo zuH?Q4AGB=SjKL$tZ!gi>X5Wt3vyGx+KtaA@&PUt2bt}Eg&b9SJ3i1_W|ItSuWz|)G zZ>xPlzGCdR&S@doXzwqtAYU=|Z@A$GetzG*w%Y&ZcW>vmTmQKz`(M2NTE6+++ikTk z$R~(Zs4Ru7l}1qn6yz&*YqnyPvJ?pN6>Gm3r7Q)4e8t)?Mkz~yAYZZei&4sAF{d$L zkgr(#x7}J;DN99bTML6nhKefRODH-EI$JvfJNEx_?eE|JmTmTnCEt5V{h$N_&er*8 zj(x{|F>n;{J@^ak*tZUm?X2|ocNFk_{tNtmv~PAH%dx*;!F=03i=%+=Qw4DBzdP(Z z3iv)$0LT8j$G)S0@AF?^$9`${4qCuN82~k|ibm0xnsy z#MTda`Q?|FWdHKZFSphH;L)Ly><=Eb_gDDNJMS#X{+)N;X^Y(j3+4mb^s-Xye|+UN zw%9l0eXW2SHa>5V5b~doCgy_LiTfY;g+anX_QhOKJ25soZji8$eK8l*PJH_6YYY+= zvM=U>+KH=IuH?(Ne4{A)A76P5_ug&K4}d`S6thC*dr1Wgu7&`Nxt+x-o9J)lXeZEC zLjcCy&SI5K^cVM+i^0JG+UK?zb32PwHlzRGfF=8ph&Bc%=5`jVY@)xo-zvo1&SI7A zn(J?1@7{g3*cNy%k*X9FTn+KWlTTY(4`>B*=FH)VC!Vmh9?%L}TRVAW%VtaK0j(eq z2=I+>e8bXuK&x2w*)NuT?}7#ME!hqo8@IHi$jVZtKNp`g4yY8%Y z*L*W;e$eOC>FVy(6mT`xI?#Nw?+u1OZSs)9%T7emwzetCEHA7!>&=)v(# z_ir>&Us5XDU=MZE21%AO;(GTlY;KEp#=T(p;#>2v-ZXrG&xu-q|y31D6k)y15wP#qx@W1;ryebAH2Xf{0lU>qlrAh4Uj z>ZXFs9z&4XZ=l7tprYyM#KJiMwTEwXn^+AtRR~HkGJomgRYqKa5z8vhT-Cx6!0p32 z4qdt{Fkn6IM@yqv6_6{;6`M=)tH9FqInup0K^bdwm*ofTGm>AN(y2x7{P2GKWBKx*sFLzRQyUV>iPwHA*CmTBY z#wlxSBf~X9B_#ATsVHHkML$!ALHEW>OG^)-4nsMQxhN{;fKTt@z->jX#l`5VT-=7f z?t^WRjA}%`FfezuR$FFd}+Np!OlppYGlq4gnaib0rZExa&W8LFexdy2aqP zFsFjUk$b3e5z%o&q=eB)8Q%HV5I5SbGeCu4lz=0D(cSxi5D*ceH5+XROVyAm;0|3f z#3=(SAqBIRb{!99{fETuw=346KIL=+qr-O;d6pUTX6%F^7zeErdhYAHORu^)20i;% zOb7cpqa9$P&aB8^YJIOcN1bmcIleh`ej0u@uT7hu8~q)8W1tQoVW*(wRr$@a(D_Y7 zmsuwJt#Vubs1*%l+`mo0qEcD(B9E@}pkTIzniZ9!2hDOSAqS!X7zY_)AK}vF!pyUM zQ+4cGOgG-%E$Vw$SlCz$Q4&W6F>FRHBU7+;(hL|U1&CF3j41kDCV8%Iwz`&;c%MN- zyzYeq7E&xBeC^c3L#h=atF#d@G^LhcO72wgEcVCuul_NyptpqzoqltnCoRZhS0HS; zZp%!oot@p@`BpC{H#a*gtFV+5A}lQI+`_`l($dgA=#F>rR);oRxZ)ScH4(D`IYG?= zlYT%H6YRr~Fo)xZE18Vp8bP2Mh=FF5foTx(g0!CSvMTfhQpU|VtD{JFkn9PDSc|*6 zH_4QP9uK%R&2BZ5A*b81ARR^brkiF0Bov0+%`+)3{}b3isI(nbA5avI=(~`jJe0s9 zh($)2bm94f&;5%8d?Wes7g}{GWt@D)#2HCG3b@t>s@xKAA=Xvs<{2$W(;TzhwNONq zJnB0Xm%O@X&e`1S{e81Ub;>6Vr#}G~!G^Sy0BwUoOB!544W&uZ@MV@+3aq;761pg} z;QpaLLrN^+yHJbykAx@^Q^g$LqeXqyi8}pnJ7rodDnf&6QZm(@bMMDLz90BHL;a<* z6Qf|_=7vz5kKFDFiz)dEA^aS!^S)vjHJ_(4s*zZiV)3-Z~^VbD>RP{&crnN0b^oiv;) z6&6Ss)KDp>vlG>6blpFYIB;V~0#GO?QCx8cne*c$f;W5D=(PJK$|pZR9|{!}6^a!E zQUKT}CMH(7tbx<5RucB;5yU1sN2@YtYD5>AGrYnIBAffD=rm&xnm97`LC&$ZBeEIG z!N%a%hs*K(*BSB`IWhP)Hr>h74$x^AwSjvMO}ww~)HsQRLBk(K6IKFoXf=s$V8JlZ z&wfIFIg?KCt`z5ot$BQrFr_%HmHExN0jWpnXCgHTV@?vG!ff-3;9pam4kFOO-Q-psYWgdd!79IyQ`SKFtDEwMvmHBu7p=ehO?UXHGExQZPLoEb>elBlJfX z+JMmQ8S6^Qy=lwqR%RZ;ky054dh+!x`U}12dPiub^(!K1b1E<}knr;1C2R$dGgxRC z?%guv(DR==*AFlEa`^Ly_`G#Lz)&Z;u zH?|RGW!91^N)!W_({c?{1CKa!%Me;D}^ z7ziy1OTo@CSAaEFm`F_wnPx|})XQT_B`<+PqQ#c8P&ZM_(xi)~R0&a;jXi-?3*CF$ z$MNO9l)B z&HVdX-Y;@C3YW1*;HewW8Ai;Ew#m}8K!N^%SV zW0h4p?socHGey&XvaBfF>0~oCy})P2^mWnUJUWHcB{KS6ca!*DyWYuE;RNuHc|V## zO!RS{BSyaXNYAAEM}mVYbqJNAC8JB|4vJvDs`EOFFv4>nnQDmRz=sI4Z34QL1jaLypr^4)y9MzJs>l#I>m)xMTyf zbXPU`zr$177Z1?{a*N6|7d{{yd1o3VWYH6S*teWU zcn1Wj6dP2GKZ*4rLIPy0GRTjDdd1bH}kDRhd`d*zVDM+&*)q$bAc~bF4Jkdm4Wc+?8SM{d?>v50&+n0d= zUteF{#h3(>!_%UwNi|NHK2UJxqKpJ*8Md!`S};v+E(!y#G<*~s1A&zVmY6aQEAAj= z)C2n206x@D+lS9l$=u#`+Tlv-DF-{r%8{(=3P^zt1|Ei0Biy> zvf`GO^c%>cjxjs4jg1Xlbs{^~_V#w=k_I>+cce^4$clBmzNCm@mo_&DgGd!R1uPe7 zVa$b@K#?@!z^)d@FjM&qrNNF+Z*}CmuB9jGvWT|spl872zBIhJ_(Q#bB`gR|%|<-Y zzxBB36Q*W}c;kC)akE0!l)|)gpg1d6x5*XJ&GV-b^>JEs(7QKitAwQ^j z7j%r*AqY4U-{!&UfSH_`pYK0u+MJLQdQ_IZ=ptVUghjLfV6j-KhexqqOSV|1gd^nY zhc<(ZDIumhb1;lbI3AvTk+2Ya?IXHAht#}I zx~M+YS_g$H#nT|7lZsE8NEgnU%vdH4Qy-cns`1J5Wl7F*Udx5mpD0e6Ou3NcSyE#m zA(AbZh#}QASN)tF7(C&Sp89ALQ-9YesG%P zsgSQalB;zMIUSH52*^Y>#;X5}gfb8yo61;Il!DY{Kf#$$lUE5IxaPPb)tg17ESfdp zj8S9Q{geMwbqz`aZ>L6Hq^{rF=_uXCRbGrI0s<%c&d6A%42NQyU#4dSg7zIT|;>diucN9~cXgQ^TDxDmXG{V{DQhi`Q%u@+mfp=y>2@PQxU-mWkz!TzD(4j zwP4-N$<4UH9$8WHlXRB}dqkxrb!eBp86OQHhndI+;ZYORptMS(nM}0pYkZ|jo1p_f zaA|w(PF~uTAas;NkDAE1i((doA-g5rdd&tAWrJo-j@oZR6{1Q@kKyXVNI*^Ty*|&p zR_e8B)>|llZL9+Xijsz)p&Q_bEG{}3=s5Ca$OTmpX?lRwOOp1_Rf5bQ(iW{YZg*Aj zlscIO@++8J^%WKE0!MqQ1raVK8)e0oUaLtfvdcyM463qCp*3xpIz?+nWiJSiI@hc< z84T7oFjH5SHf8@>Lu~dgzy;bhE4qkHP*888I1B!p!g(XD0gi+S+tcygGMTK#Tq%r2 zhNKOn%#Ec?kv_Z)7@w@%n88X;EUAnV%4&snJeodMsMAHn+RCc@AnXrl++J9KRUo*WQtmIFX{ei z*DMounU6_ZI-8HF+iE)lF~p%RG|n25I|^L0w#X$AzPmN&IOC_3*JuCJ+fTnq&+VKA z$(N8XeBBMzR-MndKN`rgtu<~lnnR!kJiTF1icDb}s{_DrYAZed>t#f>z?_2F@M zn@iYcf8s{r!`suFAq0Q)GZ~w4mSWl$^ZV!VO*fmj4ue;xjhwe& z|0|w}1z5jJ^Bf$#pRG%8S1%zf@31#XX#J=aEF8aQ+;H`|^+{(+Pu13hCbUVtV|t$# z7VV#=PNv=enseqZE~>ZK@425PWpB^2pXE+EDR6~47)Q3h<~-TZXui~BPe#mbWB7D? zlIeZga=h9U*VxGI<>hs7a^fm3n&gwHhQ8w|pkdvOgapu{zzEMAnB~nT-GKl39fTU` zq#$Y0IzX@b6l>`)B;?7zMgRFkyR(Hj(9R}|X6FqmQh-)PBsXoJ3)xy~$N*HtOSy&K z=%>u6x02A%>v_62##)E5+CdWG2r?CV+fO~4Tz&QJd@l5OLjtt}KDeIfFfnU2emPqCZ9NNq=Y>9eAK5@U-Rc+54JHdV{|##kze z;|gD%u5MxMogWdVECo#op&}`#Tp=Z2#}tHX?sCZq{9cyIH5l;yuG%r7{K+j66iHuU zO%f)Sdf3HA_;O~Jr{N4&GgsWc7ADqF2vlG2NYC z{?J1d`<|4hkxFvhYdbeFHHPUQCBQp{9WFA}ZJCK409T-f_;^IXc^{lHofGJrHY>v_ zyA`T`H@^Dptp0p5p=G6x!yZJm0EZ^XSb$XtvOhVlev&Ib}yhDgVD_rBtnNk2fQHZdL3Admp9J9EJRrl!3 zhO719hfHI)?m7*)4_YoS!3e))4ScKtZZHHrUcOK3!my;&~ol) zDq4OhJLQ?1fyYNh~* zDh3_MxQK=7t~wBi^$*odOiTdBwU8~z+%etyN7cI!FW0sSS_=5zK~iA`ZH%qclx6BR zzbt(YWyTSEI8t+wFK&^{g#?9tzbLc;Pg77?AfveCDUp30vVcJ&{4_xpmiSPisl*mx z;f~bp0Q=%6L};cqQgKD^9FZc+O88a^&hQn_CPt>?$fzM<17P{h^T}y0egu%>>&@j! zV0**<>S0WbL^9hO*qO>^8JhGd0RbyCu*C|pvM7MqeDw#ez_R~|kBf`T)Xa=gY3^7m zpE#(Aorf?(^XD(Pkc_Tqk9cO+J(xzX_fNW);UgIvCVSQDABROYDoylxS0M-w zm))mUdu=W@`Y-H7J2#3im1t+PzpnP)6H?)Yig z$PDa9OxxjfSCoWkW%c}WR=m*1cXEBXH45gGMN=v$`N|f^y+bkaO&U;ZWhy>K^!f%vlpW(EYO1(hpRc1~6+Js9YVwuIXyWN4< zt5AWb8a5-J79vPAqq%d%`^el<1#-2}1q65r%=!h360m^6V4f|1!ez7X!)Zz#l-m4n zI5`pT&<$rKx-VUT+L1zxn;5Yg@nbdnEj>h(7mb)Dnu_NH@dA>5ct|H!bk-qGsnN1& zvPe<%S;mwTg=UDh)N7_~=2f<9Ojt0{KNZG3=AW52H zV_6VxGmgmd$up#LHvU#D9x6~h&_-ZNk{m4fhNafTm~6nVC#shBbRDpq z3v>sqqGEl`#Vrd%Y21s@bPG0IwAG5AM$`5ctS+BrJT=Q6Xa~!mbU)`{rAgHK#F=L) zT7sD2B}Op-efRz3yB0EC)!jz>Vg@Y3>OFG)2WU-a@hl_2N&;Cohv)l?a+v3#q3>Mi zE}I>`(b3VGrti9loWC)w=w7Vr9;H@sZV|K~rLQ$Bfw+ecG9Hmo@9Y_o(YPdEs!A8W zBgLe%Oz9T0dZ|olqfjL=kT7Q@3JPWk&vN3>*vj+D7SF>OlUqh zJG_{>3lE8wTQzY&;)mWvm!hYW?&^zxJF-gwUb*Hlv_I4y`EbnBrbgmp;zTM|_60t@4 zQNA;x)yNJ6$=Pweg|Lm%Qb39Woxn#zfx}0%i?7&k z`5{g2V+BjyBNTG$j$#*{6F5d(30$R0tM6yA zI<6u}gs@*!0Btw%I`vw<&l{>cZ|Kf%8q}{(yH@=T7Ep8xzL%cNlw^ctLx;|S50n~Q zQ02qvC`7fGsta$GHT|JKn)8ApdxoqBr(8dEersq|QW{go;+UN@x$O4DlAMj^AU)Yv zWr!60m^Az)dIw85ksNd)fROyfj8>hQ@Fc0mSwjLxYddcT#wMi4&)`mNb+{r!XHK;Uhm%mewE z_os5i=O0XOsutR}5Ao{iA|V)XupEyRa3*6{NZ7+T>Cpp1{*XcY(;L9$_R!Sy&{6UD z-Tz;jasgnRWd=m3 z>)yBI29s2I;kxbLkecmZytaH8?ohufXNDyDKy7NZ%y6yVE?!F?bjR`(pfC*I{b|^g zSab=g{K?NbdU(Hlr}MLLHARLEFP4p8j29o)nj&iK5EUyHvEXB!&C2io5DP zx|d7^w&%%Hy{H>XaP8hNUNy+gyRBz+CB}rUMYA18j8RZvD~2e&m@$@4VZ&D;(E#QU z5iG;=uBa05$kZQYFMw_&=)d^(TCA&EdaFHm6l`G)E8?ZGt>$}dOMRlSQc&_~%) z<2xaig(z#*7zPr2+Lway9~|t-&J>#JH?%dj%k-F+ql@e7XkBw^(b5HBrKQK?A59FX zjcgE?7Z(SMe%v4Z0F9Ozt3qWi;M5G5KmC0de)q zC|+slH!CY-_yf&WP6+ic2kM@=d-JC_)dGtP&{>- zaqp8!4jc=awm-wc>T)zQd**4%yDdtl*?o0WjfGh%6rDb*s%&B52DB+(uu&1r8i25> zX$1(MTHD$VA&^g_U)i1z(L03Y<(XkZqKZbJhS5*8~O3wLqKd>?kHzOJr#MOxn) zko+{-H&%2UAp8`d3jNvdFV}lAkkPs`Ft*U~vC>z;6BB{aHqex)84CYZef>Deevi&G z{PX+ZHo|g9?iMUr^^wt4=$eaEzY;|b-<5ehR2T;Zq=T?&Q7*PUv9H+ZmHu7DXJ}Y% z80LZ#;dHoUI`Ix46M?I-x;;~K=HxFOnvAXFw^s>vm2MvQuChq$0n`KpJ4wD+>-IdP zvM{7V7a6YpY&e;bsSW6$YL{hp=7%5l=a9Z z-$vn^BvAS>_-b~O`s`CG03MP1TQKBZ)0n1XxO(-#bAeOsg!~RA-v^7PE%#QQ;sl8x zf?;;I9(mzPU5FL=PwN_%ZnFE@{n#q!cf;{7^tS>sUGR;9lm0)PaHnjO%L453b>Ur5 zs$%6$X>@ZxKRBJSge1P?70UkDo9G!4WltZ=U@{WOtb#c@Xce9{Pb9A8Q$i-g8T&l$ zgtqIQ{`8`m{TF66`)pFB1^Iw`L|wQ^xe}%|(1+QCcSongM@yNQ22<%@70OI+6i)UO z(=hMoNJYPrE;=j5l~YgCzYyE7s3DOC9Id*!)QHlp+BHI#OJc{6BkoBEtvZc`w7pcL ztD$zwABG!FXqT%-N%#Yos<-Sgw^W=12~$EH*{O>`nX&rhA=#WVA)^*|>V#SvSV-dw zK-~$uIPXr~54y-aI%ui{Ake_(Fc@o@nx0NbvCOn*QesVdhdI>ww?P2ulNgegcy0)) z361S!XlbeDGV*~NRspattA4#fpWR0+t_=q%$jeiN{7G!EHtz^djW%YEM*>JCni2k%41;Kl7pA+R?5K%QP-H#-dI9c0qqv!{mo)e*w?3~D0`TRT zFe8ViyYW>YH0lpbYi!GIX2&BF zsv73AsKr4~h4E+QbrWvue%57dy@fcJywY9f-ySYag&%fS-`1RI+VUijme$tBfb4b3 z7EXW>_$TfaQsB{*){Zkf8k(^3eEKq%86Law0;~%(n6-eP|970NXZ!`}3}IG%QU2k8 zvPNjfbGpl;qLI!DJuVPnUEkbHudk1%n`f&pn3#C_{KRfgIF=B}?-o|u*EGiZlS6iFb@z=2D%07bxCkd& zytal9`;+USv3Pst#hH!HqfBSyjh|6~$#^<#ONk-oL6#}Fzvg6hrnIz^Q`ggz7a(o= z&Qnz=9q?E6qLcv)20~SFc39*-RYF-`#?=-)Mw(i4*4?=7HMr=(ZGWuQ83kSkNED~R zbIVHS<)v)0e9nEFXPfiSs#UdXUwrkhwzG~W#n&zM9Q66(%Mmj4njPD$1uP1R5XVz6 z9Vky6P)@Oe{upWAMghJkJ)w;+E(SSGl&|t3D$+Y}_9aa8hGsgE_I`U(jCMSYVNq$hFlo_MUxV)PC6eP zm}8Yk{AL$VeH;={ew`m;^cp8uM2DR7a{4wV3yN5#c3I^1*tudQwwH$KK}A{@rMQ$? zk~z5T$R&Lc*y$xs4KR$Ks#s)@1R=@v4C<{B>U3mFfzVq##IUPX&L_go&x?cptB2&w zgZ*DC$^Yzc{rCA$ajkvW)To@->*5J~lh@6gznwXkZ0U6NpTb+?M-22zY7XC$x#4Y@ z%lT`&@1M)KdtXlKa@!5Tl~-wCnXKS5$`Fvy-vlF#Bcdy9$Q5TTkt(-SfHXigC96DZDmp39mm z`^LwUyXOPMhFIzQ)2j7P8}94-(DySd5?|jm$cX>;Klu;o@%SfLcbs!g_`D5Puz7C& zd(Pu-<0{?*0r^&VoEdcB2Sj!Fgw4P8X}qu79~Shv?T$OQ*LbGg?}YeR%Wd2N&#zVu z-WD*Cj&Bt=-G0u$&7=}9UG0!^gKoS}JI=GTZg+iIY+Jf(UMh5&B43{FChrb8xwsrh znVN9w4d&q28*PbK8*N8dYz_~m^YJb&W0rM_<45i;BdoH0^D^H2Mh2&`$F)MN%X^8u zZ$qv0LCRS-y0q~-Z8s6OjEP(yGIPy#xn&=y>79{|;LPi@5+wv8);d@!^pYh6nx>ZK z(*83BsF1|FSgW_E%@()YJY2OKrOehje?mj7$;-?8V*q5kfha#9@B8@pxYi_Kr;NHf zUm=}l50|?EBIR$7Rc{&2Ho%}VK~Xf()=;3IMo%^^E%SGUn3!Igb1FA0Yxam&ELHi6 zO~Tng6hd7@gB3>&tWLR(^I6NqFOgm@SIk7+7V4x$H%dRtlV6NY^JvmeyNPo8s}Ua4 zKPHEqhynLRgL!zTA?tgwecO1AZ_CX{UmqMcHul#y;F=)a_s9=qd;wpKmNd@!`Q8x* zdfOsECDx4Y%e3eY>>jnjsjmVXYxb{vwxQu+0yNiehJ4oT9hG58No*5ZD_zcmA2mYo z)Arq%6N|H+Vw3Jv@1VhcSsdE9O1mg?$xDrDbX?38AZnBUV@!N&u;SFq*#BuKXoZYF zRKV-o#ovB$N=%qQs0)uwAWRYnj+A&+?Hp4*Pw0#eUmfQ0lfDGu*=f z?YD=&${AL%H9i+~Ws}*BSWLGU^X7`PYR)zb&DhcsNw&vbsWvHfF}rP>XiLL4^Mhf{ z=i$pC@rw^bM+nC|UVlG@KisO{nZ}Gld`w(n-JE{c?;@PGU9W3xU-FS@Wf=kuA5dDS zMQXeK5B-cclKIu_NQB%c3RS$znhi!lj-|7EuA(`_#Mtg+r!IMByoz4ccEwX1Gh`0{DG6^ zK2-&6%L@wwfPev;WM*YGLP=_?309u7i2hP{8!h7H|VkCT> zFzo0HzpI_9o?wMz(#ET`l$O#*g={%2sfc=_cm4U3E3sij=cU2x3gUlQQy4ft^6#fK01b^D)M)7M zw-`?tvq0T$+L>~kXvsfl;{CmfS$`C7+vYRu5Pb#!`?oaC+?;T?Vb!(EC-fdra|nx@ zPu=Ap&l5KiRs)LHYul!aZYk37qohT?~SC9Hlqibz=$!(`?5N!#U)t$YOm0oGUY+CCVzD`QXNNe>cZ~Nl zinDuT4WLhM=3^OYfvbU1%Q@%0^S-oVy&81oIq>?FQ1POIK$t>ZN>9s;1V zn_K`;H7{{KN9@q?GAPf`h2^*ALfLQAE?DE+n;2q~9bLcX%~kFASMEErDiGIz2HpD& zS~Kok&#gl^^G>Qh6vfGn6Peqbm)Q9EyH|f+t!tlpqvneN;{FJ1TFn}x(0TWrAI3uX z42gnADFXR|!;&&H&V(XYE!+!iA`;hmxHfIG7^xt?ux#JJKi3uVOlr6}HiN{n3B_{_U{o>u^+R+5p_f+9JYC zsiDZxk|+FKWy#PHPHVH<{jE@7$S0y&ap6O&S^sF0AqM?kh)ue>EVNWDY+5|y+=%P~ zJHs{0zMU7xaQdh&Y6U0{7_ttbDAJBl=GYi`@NH$l1c_8vRx$$_qMMtWx&a6T5+P3M z;_A9fbKn!NP+VG3L4)yb%!!xgqU-w|z^6KHBN9?lHyfd(?@nIi!gMn|FHc*lXF}nV zx;Jj5J|KB=T}8SXqlT94Vni4dtm(g!k-5dih@g8BkCTSl6;ga$2i2$KJg51*#1;7y z)o2Mv3FyL%!bhpkZ@-JN1=K10MDuxZ$g!?wdBx?;6CO0fyJwHD$--&v0w6^{t0+}j41WBA zACan(Ay=(&+9Hxe!&P&!rNXye4W4l*-gGqeqGy(NuQY%mP`F@f^ap&YRZHJ!ahP4= z)TuU1s<-8&$Ctmu1WJk1^aU`dk@e?WQ92LH+r4l-ph|szzPmG?Q>2iX$sGQTKfhr7 zjE561aUFKQ3^o?RXd|2V`xXbjbMk#Ex$#ha!f=mGy9Em~PW@L=4+~d?D0aff?w1%?_AprrKtT3u4 zpu;{;xa&(791L_+v|V4I3bbs*gVW&V7i2nPVNsEyBGrY47e^Zg+l09jg6iZn7WXw= z_+**n2Rib(w$zYe8oineqq`r-{1L~@Mbv3yAqxu&+66YYwyrd=$Q;P`VjO$Hg#Afu z2FAwNZ+>T2bpz|s(4Q&-ey$WZb9^;#{=sMj5R`Dlxk+lX2QJbmjeu)*u7(DqCE8gL zx~fC-vgNzfrm$^BJt3B-O@Ww=g{6?`;xsd=U|J=*)}qZoG>o^I55j)$wccQRX;R?o z+OlpnYm)OLWJT;yHR<+7NdSiC3L><3xF+*UWjx$Ea4a@SwYWcWo<=ie$jmVs{?{yb z8k8eB==FZxkP#_y9*#WLd_Q*VmAScOS5{-btVSaV8EMZGI2GtBegDVu^8IiYJJTl) zw$q0fwT+7=6}&l8SUeXI(_ck=J7Ab>N9CvT^5W=+uxx<@_q7zpgYIBN5>pXbUb2c0 zOK}lF&pV^P2kDQwI@kPUdWwpQ%Kf~Ddyv}s{u~o1f!A+NrppKK6ml93+5U(wK>t@` zDcCBd1+N;lz@uyeO3m0GC?r z9yPece4&CU+Kj+Pyxs5Gj}ycz#RL0bz9x^?JtP-lL}4WCon>DM@KqpoPXHk^JKL=w zpfEFzn{3Bf>SSbpk1=iSGPqr#c=l@+3sH4aBhs=t3+!%S}1gE}&z1 zKY#tM#X$?`Vf+u7IDoofPNi1;*H}8XvZ9U0qAy2|k;e5R zHxQzrr}QM3X2fQ2dauKV(Eci?Izt43x-?)BM%DZ>_Jd#F3RQCoo-5Xr{j=BReoy;( zy;Y@Ge0xQc_OiVJn)1klMZW{2qKScL!y`W)yX>S=uLBg&ABE4ak3>PC!L`H86=c%{ zCLOus+4Md`i{?p6D7CRU}++IUl9=BM`V%}!m-CK(SIu8%??ou=k zv|4Jf7j)6K0KRt?ylrTsUEC<$g2P1@?dbkEw?)rm^s>-Kz`dZ#DPS-2n^braq-AD1 z`v6*%kjW_j;KBsO7qmi50yuni3%$!4pe0#steM?p>gxqqF9>wh?+$m+e@-Vg(S-hg zhm`(TnI#AN$#>|a8zGvVe!dbX-pK!pGfw~ikKha>DfXa0c|; z`936(VMe%wDRn8foM`x+=fs{EEMNI0j8G#zmeDo&=H3CliB+9$KZi_;E}qKhn_h0+ zn}EYiCk>0*5a?YmB~OKd5M36qB~iK@0&w!C(s@zOowxCA@~03ZUe?OUlyz_N>g)E2 zkausD6jL+lc~P8?WVz>C+h>;pjI69I(RGm!a-F)%Ui>u{wE@0BF5U2*B4Ue z&u=hl!cdXGX()`YY(a02{R}QV=x}}Cl$_@s+N=Ls*XiTmFLvInz5V#agOh@<%{2qM z`uh;?=L==K=AKC|1Ae9CkQC-Ve6=oMv&6#RPvh~$EKzN9T5$CtM01ly&N$39+wnW! z-c!6+-gR&Mq)nN%wKkyu4mZf(o+69rxECOaj5~;$tUJz}7eDL#F&p4Q*Ja59QoNiZ z&2u0MhFp{6?On z_4oK{HQDa&?9O32^sJ}q-ot1S8%nqR6bqw=JQt%K(u1Px3v!VcQ&zV&-hVKfF0EL* zH4G!JJa=9Vu9Nwguxh@R^KH6xg1i4wHTS$oE*%HpmYjf4q*qZ+eX5DJtizFKRNABQ zSnCAO#`3ZZ`?ig0ky6)Wo>+L=QX66e$ooRtKH%Y+p;`;4~a{v8A8-_5@du=EQ)B-9j3E0L!xYQ zPXm$V7eM1sK@r-et6;z46H9%i^WbLF^EbQ-5OHVc%JTlAtDAot!un;06pu-s-1Z1c8Ikf-ZQ&c-WfOzWqIC3-zrhWT!|9N|s&;9L~b(M^$u@W&h zuI?r8+v)4_H;6XF-jwx3+;<&|AOs` zMkesR@CO3r@9m`=#?B@ zu%!0T7i87r*Wph_2mUfeR==`#fl}4O1%HjWDSsBxxoiAGNJL&f?QG4T;uVYlRW?rA z8J%sO^(l99KUg`2wv#BtjLh0zPKUae6dk!ccJl=4&o5bKQ46Bxf&i=r`5T|>GfSYu4(@;JTV{sZY%zT(2?JLW7#{gNKJr z$dXHtm4u@@bYZRhz)as?jxRs{$3&ZLSg}4MM+je2LtI;4K;$psx;WX6OtX{CLXTrv z4&=MG&6n8G%H~WdGS6g^&eiTV7GEC7MqM_oo8Y&2tPj`@2Mymy{e6<7SnNLXxz*ld z2OKQPFn2Vk50a7jTGJcu*m8aFIPe7fQV?xyM8E#3IjmIcTDuSnUyFjyX92~nG-Py> zpku1}aF+AtMEv%y#ZkINLyno^EjzR^*aO3K6iaOd>I+4J&wmg<3tSsE!tBNJgs!Oz z_nx$)zC|E_92Qs(1TUJpqJcNi1-*xAU|?9SqV}0ryU#LMLg&$Eoga2fx^^{m70$%a z9n*o+M0IX2+Ab0z$~X{@HlV)*S~l>dqbV9D73*p@wyiYaHmyoqxzoIz0Q`GzW?R-=ET($A0SQyd@dZK?n2M)N~w2pd+{yGo>#qx5? zqh^El_U*=nSHpq-Dg=XGwVz-M@&b{? zZy9`Ls@}gGJzPH$Q%0>4?|-;(X+dsoAHNp}UE%o&gGX)1p7b|!LP6n!A7Ma!>X;Q( z9&3GOPY5@V)vc>b`pp75JQ$aO7qBIrbmd1teGIN!8BW^@+b4GCLRhmqX3dr{Z2|;k zs>b4LCob%(_~;e5Pz=lBWu<`*965;y;zF;%3Eh}1Za#MQBVDfvZm?eDtNrwiZiz4; z&qgY)vj>n`sIg_qL4}#61q<(2Vq$pzUrg{m-W>BC7|;eO^CM|zH?)d7B<`}%{QUfN zUr=vVdSyFb(EhU}G|0BkM88j;zk3}@x_c3_Nb$bZfIYaBL7yV*&196%QjRHDJ?`Z9e3bO0@WX<^5WXIpEOH)%=L;Tx372DPKxe_P@~EQT7nQ(%M1Pr%d^lE} zK1MEat1!E)k@A#(H&^N0&XZ+z8Yl7P=nJ5s|3mS9dZpw0 zc7%rIiLOcc=jQq(z?@kC_w_B?%nXM6PawkvM0Ap0b-sj%*oWow=qzM>;`=GY1gwMW zkyt3;UiZDrQb8%mb``>`9Oud$sC;}`t)FU)Q+yzoyeBYA&OgTBdceG}}v zh6ax#ntSN=^>R1sOw*X!g#F8c@9m%yR|qlNpGBc%?OUtwtE9KLq>(1t=K_1@THz!=V2MkumHd diff --git a/tgui/packages/tgui/interfaces/NtosAIMonitor.js b/tgui/packages/tgui/interfaces/NtosAIMonitor.js index cdb0d37e6356..0f152c9e69b5 100644 --- a/tgui/packages/tgui/interfaces/NtosAIMonitor.js +++ b/tgui/packages/tgui/interfaces/NtosAIMonitor.js @@ -1,19 +1,128 @@ import { NtosWindow } from '../layouts'; import { Fragment } from 'inferno'; -import { useBackend } from '../backend'; -import { Button, Box, Section } from '../components'; +import { useBackend, useLocalState } from '../backend'; +import { Button, Box, Section, Tabs, NoticeBox, Flex, ProgressBar } from '../components'; export const NtosAIMonitor = (props, context) => { const { act, data } = useBackend(context); + const [tab, setTab] = useLocalState(context, 'tab', 1); + + if(!data.has_ai_net) { + return ( + + +
+ No network connection. Please connect to ethernet cable to proceed! +
+
+
+ ) + } + return ( -
- {data.has_ai_net} -
+ + + setTab(1))}> + Upload + + setTab(2))}> + Download + + + {tab === 1 && ( +
+ + + + {!data.intellicard && ( + + + No IntelliCard inserted! + + + ) || ( + + {data.intellicard_ai && ( + + +
+ + +
+
+
+ ) || ( + + + Intellicard contains no AI! + + + )} +
+ )} +
+ )} + {tab === 2 && ( +
+ {data.downloading && ( + + Currently downloading {data.downloading} + + + {!!data.current_ai_ref && data.current_ai_ref === data.downloading_ref && ( + + )} + + + )|| ( + + {data.ai_list.filter(ai => { + return !!ai.in_core; + }).map((ai, index) => { + return ( +
{ai.name} | {ai.active ? "Active" : "Inactive"})} + buttons={( + + + + {!!data.is_infiltrator && !ai.being_hijacked && ( + + ) } + {!!ai.being_hijacked && ( + + )} + + )}> + Integrity: + +
+ ); + })} +
+ )} +
+ )} +
); diff --git a/yogstation.dme b/yogstation.dme index 6edb689064ca..3f00c7512480 100644 --- a/yogstation.dme +++ b/yogstation.dme @@ -2445,7 +2445,6 @@ #include "code\modules\mob\living\silicon\ai\decentralized\ai_data_core.dm" #include "code\modules\mob\living\silicon\ai\decentralized\decentralized_os.dm" #include "code\modules\mob\living\silicon\ai\decentralized\server_cabinet.dm" -#include "code\modules\mob\living\silicon\ai\decentralized\management\ai_controlpanel.dm" #include "code\modules\mob\living\silicon\ai\decentralized\management\ai_dashboard.dm" #include "code\modules\mob\living\silicon\ai\decentralized\management\ai_server_overview.dm" #include "code\modules\mob\living\silicon\ai\decentralized\management\resource_distribution.dm" From 1bad722896cfcae3e934fc96f2d1cde0159e8410 Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Fri, 19 Aug 2022 15:34:10 +0200 Subject: [PATCH 43/66] ui changes --- .../ai/ai_network/networking_machines.dm | 15 +- tgui/packages/tgui/interfaces/AiNetworking.js | 74 +++++++ .../packages/tgui/interfaces/NtosAIMonitor.js | 194 +++++++++--------- 3 files changed, 186 insertions(+), 97 deletions(-) create mode 100644 tgui/packages/tgui/interfaces/AiNetworking.js diff --git a/code/modules/mob/living/silicon/ai/ai_network/networking_machines.dm b/code/modules/mob/living/silicon/ai/ai_network/networking_machines.dm index 98ccae0a1161..fe1fb14bacf6 100644 --- a/code/modules/mob/living/silicon/ai/ai_network/networking_machines.dm +++ b/code/modules/mob/living/silicon/ai/ai_network/networking_machines.dm @@ -103,7 +103,7 @@ GLOBAL_LIST_EMPTY(ai_networking_machines) /obj/machinery/ai/networking/ui_data(mob/living/carbon/human/user) var/list/data = list() - data["is_connected"] = partner ? TRUE : FALSE + data["is_connected"] = partner ? partner.label : FALSE data["label"] = label data["locked"] = locked @@ -126,8 +126,16 @@ GLOBAL_LIST_EMPTY(ai_networking_machines) switch(action) if("switch_label") + if(locked) + return var/new_label = stripped_input(usr, "Enter new label", "Set label", max_length = 16) if(new_label) + if(isnotpretty(new_label)) + to_chat(usr, span_notice("The machine rejects the input. See rule 0.1.")) + var/log_message = "[key_name(usr)] just tripped a pretty filter: '[new_label]'." + message_admins(log_message) + log_say(log_message) + return for(var/obj/machinery/ai/networking/N in GLOB.ai_networking_machines) if(N.label == new_label) to_chat(usr, span_warning("A machine with this label already exists!")) @@ -144,12 +152,17 @@ GLOBAL_LIST_EMPTY(ai_networking_machines) if(N.z != src.z) return if(N.label == target_label) + if(N.locked) + to_chat(usr, span_warning("Unable to connect to '[target_label]'! It seems to be locked.")) + return if(partner) disconnect() connect_to_partner(N) return . = TRUE if("disconnect") + if(locked) + return disconnect() . = TRUE if("toggle_lock") diff --git a/tgui/packages/tgui/interfaces/AiNetworking.js b/tgui/packages/tgui/interfaces/AiNetworking.js new file mode 100644 index 000000000000..c8976866219c --- /dev/null +++ b/tgui/packages/tgui/interfaces/AiNetworking.js @@ -0,0 +1,74 @@ +import { Fragment } from 'inferno'; +import { useBackend, useLocalState } from '../backend'; +import { Box, Button, LabeledList, Tabs, ProgressBar, Section, Flex, Icon, NoticeBox } from '../components'; +import { LabeledListDivider, LabeledListItem } from '../components/LabeledList'; +import { Window } from '../layouts'; + +export const AiNetworking = (props, context) => { + const { act, data } = useBackend(context); + + const { username, has_access } = data; + + const [tab, setTab] = useLocalState(context, 'tab', 1); + + if(data.locked) { + return ( + + +
+ Machine locked + + + +
+
+
+ ) + } + + + return ( + + +
+ + + + )}> + + {data.possible_targets.map(target => ( + + data.is_connected == target ? ( + + act('disconnect')} + disabled={!data.is_connected} color="bad">Disconnect + + )} /> + + + + ) : ( + + act('connect', { target_label: target })} + disabled={data.is_connected} tooltip={data.is_connected ? "Already connected. Please disconnect" : ""} tooltipPosition="left">Connect + + )} /> + + + ) + ))} + +
+
+
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/NtosAIMonitor.js b/tgui/packages/tgui/interfaces/NtosAIMonitor.js index 0f152c9e69b5..05b0f8321154 100644 --- a/tgui/packages/tgui/interfaces/NtosAIMonitor.js +++ b/tgui/packages/tgui/interfaces/NtosAIMonitor.js @@ -7,7 +7,7 @@ export const NtosAIMonitor = (props, context) => { const { act, data } = useBackend(context); const [tab, setTab] = useLocalState(context, 'tab', 1); - if(!data.has_ai_net) { + if (!data.has_ai_net) { return ( { resizable>
- No network connection. Please connect to ethernet cable to proceed! + + No network connection. Please connect to ethernet cable to proceed! +
- ) + ); } return ( @@ -28,101 +30,101 @@ export const NtosAIMonitor = (props, context) => { height={450} resizable> - - - setTab(1))}> - Upload - - setTab(2))}> - Download - - - {tab === 1 && ( -
- - + + + setTab(1))}> + Upload + + setTab(2))}> + Download + + + {tab === 1 && ( +
+ + + + {!data.intellicard && ( + + + No IntelliCard inserted! + + + ) || ( + + {data.intellicard_ai && ( + + +
+ + +
+
+
+ ) || ( + + + Intellicard contains no AI! + + + )}
- {!data.intellicard && ( - - - No IntelliCard inserted! - - - ) || ( - - {data.intellicard_ai && ( - - -
- - -
-
-
- ) || ( - - - Intellicard contains no AI! - - - )} -
- )} -
- )} - {tab === 2 && ( -
- {data.downloading && ( - - Currently downloading {data.downloading} - - - {!!data.current_ai_ref && data.current_ai_ref === data.downloading_ref && ( - - )} - + )} +
+ )} + {tab === 2 && ( +
+ {data.downloading && ( + + Currently downloading {data.downloading} + + + {!!data.current_ai_ref && data.current_ai_ref === data.downloading_ref && ( + + )} + - )|| ( - - {data.ai_list.filter(ai => { - return !!ai.in_core; - }).map((ai, index) => { - return ( -
{ai.name} | {ai.active ? "Active" : "Inactive"})} - buttons={( - - - - {!!data.is_infiltrator && !ai.being_hijacked && ( - - ) } - {!!ai.being_hijacked && ( - - )} - - )}> - Integrity: - -
- ); - })} -
- )} -
- )} -
+ )|| ( + + {data.ai_list.filter(ai => { + return !!ai.in_core; + }).map((ai, index) => { + return ( +
{ai.name} | {ai.active ? "Active" : "Inactive"})} + buttons={( + + + + {!!data.is_infiltrator && !ai.being_hijacked && ( + + ) } + {!!ai.being_hijacked && ( + + )} + + )}> + Integrity: + +
+ ); + })} +
+ )} +
+ )} +
); From fee19d8d25df2b3fe5976134c6c63ceae8d0b8dd Mon Sep 17 00:00:00 2001 From: Bobbahbrown Date: Mon, 30 Nov 2020 12:48:52 -0400 Subject: [PATCH 44/66] tgui: Round Gauge (#55230) This PR introduces the wacky round gauge for showing all of your favourite metrics in half-circle format. Show off those wacky numbers, use some scary blinking lights, feel alive! I've also gone ahead and included this in the canister and tank (think internals) UIs. I've also done some refactoring of data sending from canisters because GOSH DANG it required some. --- code/game/objects/items/tanks/tanks.dm | 28 ++-- .../machinery/portable/canister.dm | 58 ++++---- tgui/docs/component-reference.md | 33 +++++ tgui/packages/tgui/components/RoundGauge.js | 125 ++++++++++++++++++ tgui/packages/tgui/components/index.js | 1 + tgui/packages/tgui/interfaces/AiNetworking.js | 1 - tgui/packages/tgui/interfaces/Tank.js | 55 +++++--- .../tgui/styles/components/RoundGauge.scss | 83 ++++++++++++ tgui/packages/tgui/styles/main.scss | 1 + 9 files changed, 332 insertions(+), 53 deletions(-) create mode 100644 tgui/packages/tgui/components/RoundGauge.js create mode 100644 tgui/packages/tgui/styles/components/RoundGauge.scss diff --git a/code/game/objects/items/tanks/tanks.dm b/code/game/objects/items/tanks/tanks.dm index 7800fb45cd09..5000c6f1abd1 100644 --- a/code/game/objects/items/tanks/tanks.dm +++ b/code/game/objects/items/tanks/tanks.dm @@ -162,24 +162,26 @@ ui = new(user, src, "Tank", name) ui.open() +/obj/item/tank/ui_static_data(mob/user) + . = list ( + "defaultReleasePressure" = round(TANK_DEFAULT_RELEASE_PRESSURE), + "minReleasePressure" = round(TANK_MIN_RELEASE_PRESSURE), + "maxReleasePressure" = round(TANK_MAX_RELEASE_PRESSURE), + "leakPressure" = round(TANK_LEAK_PRESSURE), + "fragmentPressure" = round(TANK_FRAGMENT_PRESSURE) + ) + /obj/item/tank/ui_data(mob/user) - var/list/data = list() - data["tankPressure"] = round(air_contents.return_pressure() ? air_contents.return_pressure() : 0) - data["releasePressure"] = round(distribute_pressure ? distribute_pressure : 0) - data["defaultReleasePressure"] = round(TANK_DEFAULT_RELEASE_PRESSURE) - data["minReleasePressure"] = round(TANK_MIN_RELEASE_PRESSURE) - data["maxReleasePressure"] = round(TANK_MAX_RELEASE_PRESSURE) + . = list( + "tankPressure" = round(air_contents.return_pressure()), + "releasePressure" = round(distribute_pressure) + ) var/mob/living/carbon/C = user if(!istype(C)) C = loc.loc - if(!istype(C)) - return data - - if(C.internal == src) - data["connected"] = TRUE - - return data + if(istype(C) && C.internal == src) + .["connected"] = TRUE /obj/item/tank/ui_act(action, params) if(..()) diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm index 0e196f961cb6..1da3c600b38b 100644 --- a/code/modules/atmospherics/machinery/portable/canister.dm +++ b/code/modules/atmospherics/machinery/portable/canister.dm @@ -490,32 +490,44 @@ ui = new(user, src, "Canister", name) ui.open() +/obj/machinery/portable_atmospherics/canister/ui_static_data(mob/user) + return list( + "defaultReleasePressure" = round(CAN_DEFAULT_RELEASE_PRESSURE), + "minReleasePressure" = round(can_min_release_pressure), + "maxReleasePressure" = round(can_max_release_pressure), + "pressureLimit" = round(pressure_limit), + "holdingTankLeakPressure" = round(TANK_LEAK_PRESSURE), + "holdingTankFragPressure" = round(TANK_FRAGMENT_PRESSURE) + ) + /obj/machinery/portable_atmospherics/canister/ui_data() - var/data = list() - data["portConnected"] = connected_port ? 1 : 0 - data["tankPressure"] = round(air_contents.return_pressure() ? air_contents.return_pressure() : 0) - data["releasePressure"] = round(release_pressure ? release_pressure : 0) - data["defaultReleasePressure"] = round(CAN_DEFAULT_RELEASE_PRESSURE) - data["minReleasePressure"] = round(can_min_release_pressure) - data["maxReleasePressure"] = round(can_max_release_pressure) - data["valveOpen"] = valve_open ? 1 : 0 - - data["isPrototype"] = prototype ? 1 : 0 + . = list( + "portConnected" = !!connected_port, + "tankPressure" = round(air_contents.return_pressure()), + "releasePressure" = round(release_pressure), + "valveOpen" = !!valve_open, + "isPrototype" = !!prototype, + "hasHoldingTank" = !!holding + ) + if (prototype) - data["restricted"] = restricted - data["timing"] = timing - data["time_left"] = get_time_left() - data["timer_set"] = timer_set - data["timer_is_not_default"] = timer_set != default_timer_set - data["timer_is_not_min"] = timer_set != minimum_timer_set - data["timer_is_not_max"] = timer_set != maximum_timer_set - - data["hasHoldingTank"] = holding ? 1 : 0 + . += list( + "restricted" = restricted, + "timing" = timing, + "time_left" = get_time_left(), + "timer_set" = timer_set, + "timer_is_not_default" = timer_set != default_timer_set, + "timer_is_not_min" = timer_set != minimum_timer_set, + "timer_is_not_max" = timer_set != maximum_timer_set + ) + if (holding) - data["holdingTank"] = list() - data["holdingTank"]["name"] = holding.name - data["holdingTank"]["tankPressure"] = round(holding.air_contents.return_pressure()) - return data + . += list( + "holdingTank" = list( + "name" = holding.name, + "tankPressure" = round(holding.air_contents.return_pressure()) + ) + ) /obj/machinery/portable_atmospherics/canister/ui_act(action, params) if(..()) diff --git a/tgui/docs/component-reference.md b/tgui/docs/component-reference.md index 34c6347b997c..78d99064cec0 100644 --- a/tgui/docs/component-reference.md +++ b/tgui/docs/component-reference.md @@ -39,6 +39,7 @@ Make sure to add new items to this list if you document new components. - [`NoticeBox`](#noticebox) - [`NumberInput`](#numberinput) - [`ProgressBar`](#progressbar) + - [`RoundGauge`](#roundgauge) - [`Section`](#section) - [`Slider`](#slider) - [`Table`](#table) @@ -754,6 +755,38 @@ based on whether the value lands in the range between `from` and `to`. - `color: string` - Color of the progress bar. - `children: any` - Content to render inside the progress bar. +### `RoundGauge` + +The RoundGauge component provides a visual representation of a single metric, as well as being capable of showing informational or cautionary boundaries related to that metric. + +```jsx + +``` + +The alert on the gauge is optional, and will only be shown if the `alertAfter` prop is defined. When defined, the alert will begin to flash the respective color upon which the needle currently rests, as defined in the `ranges` prop. + +**Props:** + +- See inherited props: [Box](#box) +- `value: number` - The current value of the metric. +- `minValue: number` (default: 0) - The lower bound of the guage. +- `maxValue: number` (default: 1) - The upper bound of the guage. +- `ranges: { color: [from, to] }` (default: `{ "good": [0, 1] }`) - Provide regions of the guage to color between two specified values of the metric. +- `alertAfter: number` (optional) - When provided, will cause an alert symbol on the gauge to begin flashing in the color upon which the needle currently rest, as defined in `ranges`. +- `format: function(value) => string` (optional) - When provided, will be used to format the value of the metric for display. +- `size: number` (default: 1) - When provided scales the gauge. + ### `Section` Section is a surface that displays content and actions on a single topic. diff --git a/tgui/packages/tgui/components/RoundGauge.js b/tgui/packages/tgui/components/RoundGauge.js new file mode 100644 index 000000000000..2f01b5122e02 --- /dev/null +++ b/tgui/packages/tgui/components/RoundGauge.js @@ -0,0 +1,125 @@ +/** + * @file + * @copyright 2020 bobbahbrown (https://github.com/bobbahbrown) + * @license MIT + */ + +import { clamp01, keyOfMatchingRange, scale } from 'common/math'; +import { classes } from 'common/react'; +import { AnimatedNumber } from './AnimatedNumber'; +import { Box, computeBoxClassName, computeBoxProps } from './Box'; + +export const RoundGauge = props => { + // Support for IE8 is for losers sorry B) + if (Byond.IS_LTE_IE8) { + return ( + + ); + } + + const { + value, + minValue = 1, + maxValue = 1, + ranges, + alertAfter, + format, + size = 1, + className, + style, + ...rest + } = props; + + const scaledValue = scale( + value, + minValue, + maxValue); + const clampedValue = clamp01(scaledValue); + let scaledRanges = ranges ? {} : { "primary": [0, 1] }; + if (ranges) + { Object.keys(ranges).forEach(x => { + const range = ranges[x]; + scaledRanges[x] = [ + scale(range[0], minValue, maxValue), + scale(range[1], minValue, maxValue), + ]; + }); } + + let alertColor = null; + if (alertAfter < value) { + alertColor = keyOfMatchingRange(clampedValue, scaledRanges); + } + + return ( + +
+ + {alertAfter && ( + + + + )} + + + + + {Object.keys(scaledRanges).map((x, i) => { + const col_ranges = scaledRanges[x]; + return ( + + ); + })} + + + + + + +
+ +
+ ); +}; diff --git a/tgui/packages/tgui/components/index.js b/tgui/packages/tgui/components/index.js index 5580cc38fbeb..9a4406b17c3b 100644 --- a/tgui/packages/tgui/components/index.js +++ b/tgui/packages/tgui/components/index.js @@ -27,6 +27,7 @@ export { Modal } from './Modal'; export { NoticeBox } from './NoticeBox'; export { NumberInput } from './NumberInput'; export { ProgressBar } from './ProgressBar'; +export { RoundGauge } from './RoundGauge'; export { Section } from './Section'; export { Slider } from './Slider'; export { Table } from './Table'; diff --git a/tgui/packages/tgui/interfaces/AiNetworking.js b/tgui/packages/tgui/interfaces/AiNetworking.js index c8976866219c..8056eff3080d 100644 --- a/tgui/packages/tgui/interfaces/AiNetworking.js +++ b/tgui/packages/tgui/interfaces/AiNetworking.js @@ -29,7 +29,6 @@ export const AiNetworking = (props, context) => { ) } - return ( { + if (value < 10000) { + return toFixed(value) + ' kPa'; + } + return formatSiUnit(value * 1000, 1, 'Pa'); +}; + export const Tank = (props, context) => { const { act, data } = useBackend(context); + const { + defaultReleasePressure, + minReleasePressure, + maxReleasePressure, + leakPressure, + fragmentPressure, + tankPressure, + releasePressure, + connected, + } = data; return (
- - - + + - {data.tankPressure + ' kPa'} - - - + "good": [0, leakPressure], + "average": [leakPressure, fragmentPressure], + "bad": [fragmentPressure, fragmentPressure * 1.15], + }} + format={formatPressure} + size={2} /> + +
diff --git a/tgui/packages/tgui/styles/components/RoundGauge.scss b/tgui/packages/tgui/styles/components/RoundGauge.scss new file mode 100644 index 000000000000..0ca0e2f89acd --- /dev/null +++ b/tgui/packages/tgui/styles/components/RoundGauge.scss @@ -0,0 +1,83 @@ +/** + * Copyright (c) 2020 bobbahbrown (https://github.com/bobbahbrown) + * SPDX-License-Identifier: MIT + */ + +@use '../base.scss'; +@use '../colors.scss'; +@use '../functions.scss' as *; + +$fg-map: colors.$fg-map !default; +$ring-color: #6a96c9 !default; + +.RoundGauge { + font-size: 1rem; + width: 2.6em; + height: 1.3em; + margin: 0 auto; + margin-bottom: 0.2em; +} + +$pi: 3.1416; + +.RoundGauge__ringTrack { + fill: transparent; + stroke: rgba(255, 255, 255, 0.1); + stroke-width: 10; + stroke-dasharray: 50 * $pi; + stroke-dashoffset: 50 * $pi; +} + +.RoundGauge__ringFill { + fill: transparent; + stroke: $ring-color; + stroke-width: 10; + stroke-dasharray: 100 * $pi; + transition: stroke 50ms; +} + +.RoundGauge__needle, .RoundGauge__ringFill { + transition: transform 50ms ease-in-out; +} + +.RoundGauge__needleLine, .RoundGauge__needleMiddle { + fill: colors.$bad; +} + +.RoundGauge__alert { + fill-rule: evenodd; + clip-rule: evenodd; + stroke-linejoin: round; + stroke-miterlimit: 2; + fill: rgba(255, 255, 255, 0.1); +} + +.RoundGauge__alert.max { + fill: colors.$bad; +} + +@each $color-name, $color-value in $fg-map { + .RoundGauge--color--#{$color-name}.RoundGauge__ringFill { + stroke: $color-value; + } +} + +@each $color-name, $color-value in $fg-map { + .RoundGauge__alert--#{$color-name} { + fill: $color-value; + transition: opacity 0.6s cubic-bezier(0.25, 1, 0.5, 1); + animation: RoundGauge__alertAnim 1s cubic-bezier(0.34, 1.56, 0.64, 1) infinite; + } +} + +@keyframes RoundGauge__alertAnim { + 0% { + opacity: 0.1; + } + 50% { + opacity: 1; + } + 100% { + opacity: 0.1; + } +} diff --git a/tgui/packages/tgui/styles/main.scss b/tgui/packages/tgui/styles/main.scss index 2e2e6c76eb5e..368c8c2f87f8 100644 --- a/tgui/packages/tgui/styles/main.scss +++ b/tgui/packages/tgui/styles/main.scss @@ -31,6 +31,7 @@ @include meta.load-css('./components/NoticeBox.scss'); @include meta.load-css('./components/NumberInput.scss'); @include meta.load-css('./components/ProgressBar.scss'); +@include meta.load-css('./components/RoundGauge.scss'); @include meta.load-css('./components/Section.scss'); @include meta.load-css('./components/Slider.scss'); @include meta.load-css('./components/Table.scss'); From 4fec9cf593feabde9e1fc3b25dc1421552f4a434 Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Fri, 19 Aug 2022 15:36:49 +0200 Subject: [PATCH 45/66] Revert "tgui: Round Gauge (#55230)" This reverts commit fee19d8d25df2b3fe5976134c6c63ceae8d0b8dd. --- code/game/objects/items/tanks/tanks.dm | 28 +++++---- .../machinery/portable/canister.dm | 58 ++++++++----------- tgui/packages/tgui/interfaces/Tank.js | 55 +++++------------- 3 files changed, 52 insertions(+), 89 deletions(-) diff --git a/code/game/objects/items/tanks/tanks.dm b/code/game/objects/items/tanks/tanks.dm index 5000c6f1abd1..7800fb45cd09 100644 --- a/code/game/objects/items/tanks/tanks.dm +++ b/code/game/objects/items/tanks/tanks.dm @@ -162,26 +162,24 @@ ui = new(user, src, "Tank", name) ui.open() -/obj/item/tank/ui_static_data(mob/user) - . = list ( - "defaultReleasePressure" = round(TANK_DEFAULT_RELEASE_PRESSURE), - "minReleasePressure" = round(TANK_MIN_RELEASE_PRESSURE), - "maxReleasePressure" = round(TANK_MAX_RELEASE_PRESSURE), - "leakPressure" = round(TANK_LEAK_PRESSURE), - "fragmentPressure" = round(TANK_FRAGMENT_PRESSURE) - ) - /obj/item/tank/ui_data(mob/user) - . = list( - "tankPressure" = round(air_contents.return_pressure()), - "releasePressure" = round(distribute_pressure) - ) + var/list/data = list() + data["tankPressure"] = round(air_contents.return_pressure() ? air_contents.return_pressure() : 0) + data["releasePressure"] = round(distribute_pressure ? distribute_pressure : 0) + data["defaultReleasePressure"] = round(TANK_DEFAULT_RELEASE_PRESSURE) + data["minReleasePressure"] = round(TANK_MIN_RELEASE_PRESSURE) + data["maxReleasePressure"] = round(TANK_MAX_RELEASE_PRESSURE) var/mob/living/carbon/C = user if(!istype(C)) C = loc.loc - if(istype(C) && C.internal == src) - .["connected"] = TRUE + if(!istype(C)) + return data + + if(C.internal == src) + data["connected"] = TRUE + + return data /obj/item/tank/ui_act(action, params) if(..()) diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm index 1da3c600b38b..0e196f961cb6 100644 --- a/code/modules/atmospherics/machinery/portable/canister.dm +++ b/code/modules/atmospherics/machinery/portable/canister.dm @@ -490,44 +490,32 @@ ui = new(user, src, "Canister", name) ui.open() -/obj/machinery/portable_atmospherics/canister/ui_static_data(mob/user) - return list( - "defaultReleasePressure" = round(CAN_DEFAULT_RELEASE_PRESSURE), - "minReleasePressure" = round(can_min_release_pressure), - "maxReleasePressure" = round(can_max_release_pressure), - "pressureLimit" = round(pressure_limit), - "holdingTankLeakPressure" = round(TANK_LEAK_PRESSURE), - "holdingTankFragPressure" = round(TANK_FRAGMENT_PRESSURE) - ) - /obj/machinery/portable_atmospherics/canister/ui_data() - . = list( - "portConnected" = !!connected_port, - "tankPressure" = round(air_contents.return_pressure()), - "releasePressure" = round(release_pressure), - "valveOpen" = !!valve_open, - "isPrototype" = !!prototype, - "hasHoldingTank" = !!holding - ) - + var/data = list() + data["portConnected"] = connected_port ? 1 : 0 + data["tankPressure"] = round(air_contents.return_pressure() ? air_contents.return_pressure() : 0) + data["releasePressure"] = round(release_pressure ? release_pressure : 0) + data["defaultReleasePressure"] = round(CAN_DEFAULT_RELEASE_PRESSURE) + data["minReleasePressure"] = round(can_min_release_pressure) + data["maxReleasePressure"] = round(can_max_release_pressure) + data["valveOpen"] = valve_open ? 1 : 0 + + data["isPrototype"] = prototype ? 1 : 0 if (prototype) - . += list( - "restricted" = restricted, - "timing" = timing, - "time_left" = get_time_left(), - "timer_set" = timer_set, - "timer_is_not_default" = timer_set != default_timer_set, - "timer_is_not_min" = timer_set != minimum_timer_set, - "timer_is_not_max" = timer_set != maximum_timer_set - ) - + data["restricted"] = restricted + data["timing"] = timing + data["time_left"] = get_time_left() + data["timer_set"] = timer_set + data["timer_is_not_default"] = timer_set != default_timer_set + data["timer_is_not_min"] = timer_set != minimum_timer_set + data["timer_is_not_max"] = timer_set != maximum_timer_set + + data["hasHoldingTank"] = holding ? 1 : 0 if (holding) - . += list( - "holdingTank" = list( - "name" = holding.name, - "tankPressure" = round(holding.air_contents.return_pressure()) - ) - ) + data["holdingTank"] = list() + data["holdingTank"]["name"] = holding.name + data["holdingTank"]["tankPressure"] = round(holding.air_contents.return_pressure()) + return data /obj/machinery/portable_atmospherics/canister/ui_act(action, params) if(..()) diff --git a/tgui/packages/tgui/interfaces/Tank.js b/tgui/packages/tgui/interfaces/Tank.js index d6b026aed1e1..de43ad3f3935 100644 --- a/tgui/packages/tgui/interfaces/Tank.js +++ b/tgui/packages/tgui/interfaces/Tank.js @@ -1,51 +1,28 @@ -import { toFixed } from 'common/math'; import { useBackend } from '../backend'; -import { Button, LabeledControls, NumberInput, RoundGauge, Section } from '../components'; -import { formatSiUnit } from '../format'; +import { Button, LabeledList, NumberInput, ProgressBar, Section } from '../components'; import { Window } from '../layouts'; -const formatPressure = value => { - if (value < 10000) { - return toFixed(value) + ' kPa'; - } - return formatSiUnit(value * 1000, 1, 'Pa'); -}; - export const Tank = (props, context) => { const { act, data } = useBackend(context); - const { - defaultReleasePressure, - minReleasePressure, - maxReleasePressure, - leakPressure, - fragmentPressure, - tankPressure, - releasePressure, - connected, - } = data; return (
- - - + + - - + good: [0.35, Infinity], + average: [0.15, 0.35], + bad: [-Infinity, 0.15], + }}> + {data.tankPressure + ' kPa'} + + +
From fe7f5c92c1b189e4c65480403b521401396f3f9e Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Fri, 19 Aug 2022 15:43:21 +0200 Subject: [PATCH 46/66] based --- tgui/docs/component-reference.md | 3 +- tgui/packages/tgui/components/RoundGauge.js | 245 ++++++++++-------- tgui/packages/tgui/interfaces/AiNetworking.js | 7 +- 3 files changed, 135 insertions(+), 120 deletions(-) diff --git a/tgui/docs/component-reference.md b/tgui/docs/component-reference.md index 78d99064cec0..e6c3523e3c0c 100644 --- a/tgui/docs/component-reference.md +++ b/tgui/docs/component-reference.md @@ -783,7 +783,8 @@ The alert on the gauge is optional, and will only be shown if the `alertAfter` p - `minValue: number` (default: 0) - The lower bound of the guage. - `maxValue: number` (default: 1) - The upper bound of the guage. - `ranges: { color: [from, to] }` (default: `{ "good": [0, 1] }`) - Provide regions of the guage to color between two specified values of the metric. -- `alertAfter: number` (optional) - When provided, will cause an alert symbol on the gauge to begin flashing in the color upon which the needle currently rest, as defined in `ranges`. +- `alertAfter: number` (optional) - When provided, will cause an alert symbol on the gauge to begin flashing in the color upon which the needle currently rests, as defined in `ranges`. +- `alertBefore: number` (optional) - As with alertAfter, but alerts below a value. If both are set, and alertAfter comes earlier, the alert will only flash when the needle is between both values. Otherwise, the alert will flash when on the active side of either threshold. - `format: function(value) => string` (optional) - When provided, will be used to format the value of the metric for display. - `size: number` (default: 1) - When provided scales the gauge. diff --git a/tgui/packages/tgui/components/RoundGauge.js b/tgui/packages/tgui/components/RoundGauge.js index 2f01b5122e02..159838f5758f 100644 --- a/tgui/packages/tgui/components/RoundGauge.js +++ b/tgui/packages/tgui/components/RoundGauge.js @@ -4,122 +4,139 @@ * @license MIT */ -import { clamp01, keyOfMatchingRange, scale } from 'common/math'; -import { classes } from 'common/react'; -import { AnimatedNumber } from './AnimatedNumber'; -import { Box, computeBoxClassName, computeBoxProps } from './Box'; + import { clamp01, keyOfMatchingRange, scale } from 'common/math'; + import { classes } from 'common/react'; + import { AnimatedNumber } from './AnimatedNumber'; + import { Box, computeBoxClassName, computeBoxProps } from './Box'; -export const RoundGauge = props => { - // Support for IE8 is for losers sorry B) - if (Byond.IS_LTE_IE8) { - return ( - - ); - } + export const RoundGauge = props => { + // Support for IE8 is for losers sorry B) + if (Byond.IS_LTE_IE8) { + return ( + + ); + } - const { - value, - minValue = 1, - maxValue = 1, - ranges, - alertAfter, - format, - size = 1, - className, - style, - ...rest - } = props; + const { + value, + minValue = 1, + maxValue = 1, + ranges, + alertAfter, + alertBefore, + format, + size = 1, + className, + style, + ...rest + } = props; - const scaledValue = scale( - value, - minValue, - maxValue); - const clampedValue = clamp01(scaledValue); - let scaledRanges = ranges ? {} : { "primary": [0, 1] }; - if (ranges) - { Object.keys(ranges).forEach(x => { - const range = ranges[x]; - scaledRanges[x] = [ - scale(range[0], minValue, maxValue), - scale(range[1], minValue, maxValue), - ]; - }); } + const scaledValue = scale( + value, + minValue, + maxValue); + const clampedValue = clamp01(scaledValue); + const scaledRanges = ranges ? {} : { "primary": [0, 1] }; + if (ranges) { + Object.keys(ranges).forEach(x => { + const range = ranges[x]; + scaledRanges[x] = [ + scale(range[0], minValue, maxValue), + scale(range[1], minValue, maxValue), + ]; + }); + } - let alertColor = null; - if (alertAfter < value) { - alertColor = keyOfMatchingRange(clampedValue, scaledRanges); - } + const shouldShowAlert = () => { + // If both after and before alert props are set, attempt to interpret both + // in a helpful way. + if (alertAfter && alertBefore && alertAfter < alertBefore) { + // If alertAfter is before alertBefore, only display an alert if + // we're between them. + if (alertAfter < value && alertBefore > value) { + return true; + } + } else if (alertAfter < value || alertBefore > value) { + // Otherwise, we have distint ranges, or only one or neither are set. + // Either way, being on the active side of either is sufficient. + return true; + } + return false; + }; - return ( - -
- - {alertAfter && ( - - - - )} - - - - - {Object.keys(scaledRanges).map((x, i) => { - const col_ranges = scaledRanges[x]; - return ( - - ); - })} - - - - - - -
- -
- ); -}; + const alertColor = shouldShowAlert() + && keyOfMatchingRange(clampedValue, scaledRanges); + + return ( + +
+ + {(alertAfter || alertBefore) && ( + + + + )} + + + + + {Object.keys(scaledRanges).map((x, i) => { + const col_ranges = scaledRanges[x]; + return ( + + ); + })} + + + + + + +
+ +
+ ); + }; diff --git a/tgui/packages/tgui/interfaces/AiNetworking.js b/tgui/packages/tgui/interfaces/AiNetworking.js index 8056eff3080d..795682d17ab0 100644 --- a/tgui/packages/tgui/interfaces/AiNetworking.js +++ b/tgui/packages/tgui/interfaces/AiNetworking.js @@ -1,15 +1,12 @@ import { Fragment } from 'inferno'; -import { useBackend, useLocalState } from '../backend'; -import { Box, Button, LabeledList, Tabs, ProgressBar, Section, Flex, Icon, NoticeBox } from '../components'; +import { useBackend } from '../backend'; +import { Box, Button, LabeledList, Section, NoticeBox, RoundGauge } from '../components'; import { LabeledListDivider, LabeledListItem } from '../components/LabeledList'; import { Window } from '../layouts'; export const AiNetworking = (props, context) => { const { act, data } = useBackend(context); - const { username, has_access } = data; - - const [tab, setTab] = useLocalState(context, 'tab', 1); if(data.locked) { return ( From 0e78434f8d8f07e65c0dbaa451ff8ea367b52dad Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Fri, 19 Aug 2022 21:10:17 +0200 Subject: [PATCH 47/66] crypto mining move day --- code/controllers/subsystem/machines.dm | 2 + .../silicon/ai/ai_network/ai_network.dm | 27 ++ .../ai/ai_network/networking_machines.dm | 6 + .../decentralized/management/ai_dashboard.dm | 24 -- .../ai/decentralized/projects/cryptominer.dm | 17 -- .../programs/ainetworkinterface.dm | 32 +++ tgui/packages/tgui/components/RoundGauge.js | 256 +++++++++--------- tgui/packages/tgui/interfaces/AiDashboard.js | 4 +- tgui/packages/tgui/interfaces/AiNetworking.js | 31 +-- .../packages/tgui/interfaces/NtosAIMonitor.js | 14 +- yogstation.dme | 1 - 11 files changed, 222 insertions(+), 192 deletions(-) delete mode 100644 code/modules/mob/living/silicon/ai/decentralized/projects/cryptominer.dm diff --git a/code/controllers/subsystem/machines.dm b/code/controllers/subsystem/machines.dm index f60c0963861d..b176fc561da5 100644 --- a/code/controllers/subsystem/machines.dm +++ b/code/controllers/subsystem/machines.dm @@ -87,3 +87,5 @@ SUBSYSTEM_DEF(machines) processing = SSmachines.processing if (istype(SSmachines.powernets)) powernets = SSmachines.powernets + if (istype(SSmachines.ainets)) + ainets = SSmachines.ainets diff --git a/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm b/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm index e53f25885aca..922a20d5472b 100644 --- a/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm +++ b/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm @@ -18,12 +18,15 @@ var/previous_ram = 0 var/datum/ai_shared_resources/resources + //Cash from crypto, can be withdrawn at network console + var/stored_cash = 0 var/temp_limit = AI_TEMP_LIMIT /datum/ai_network/New() SSmachines.ainets += src resources = new(starting_network = src) + START_PROCESSING(SSobj, src) /datum/ai_network/Destroy() //Go away references, you suck! @@ -42,8 +45,27 @@ resources = null SSmachines.ainets -= src + STOP_PROCESSING(SSobj, src) return ..() +/datum/ai_network/process() + /* + if(remaining_cpu > 0 && contribute_spare_cpu) + var/points = max(round(AI_RESEARCH_PER_CPU * (remaining_cpu * current_cpu) * owner.research_point_booster), 0) + + + if(crypto_mining) + points *= 0.5 + var/bitcoin_mined = points * (1-0.05*sqrt(points)) + bitcoin_mined = clamp(bitcoin_mined, 0, MAX_AI_BITCOIN_MINED_PER_TICK) + var/datum/bank_account/D = SSeconomy.get_dep_account(ACCOUNT_CAR) + if(D) + D.adjust_money(bitcoin_mined * AI_BITCOIN_PRICE) + SSresearch.science_tech.add_point_list(list(TECHWEB_POINT_TYPE_AI = points)) + */ + + + /datum/ai_network/proc/is_empty() return !cables.len && !nodes.len @@ -99,6 +121,11 @@ continue . += net.nodes +/datum/ai_network/proc/get_local_nodes_oftype(type_to_check) + . = list() + for(var/A in nodes) + if(istype(A, type_to_check)) + . += A /datum/ai_network/proc/get_all_ais(checked_nets = list()) diff --git a/code/modules/mob/living/silicon/ai/ai_network/networking_machines.dm b/code/modules/mob/living/silicon/ai/ai_network/networking_machines.dm index fe1fb14bacf6..68031873de18 100644 --- a/code/modules/mob/living/silicon/ai/ai_network/networking_machines.dm +++ b/code/modules/mob/living/silicon/ai/ai_network/networking_machines.dm @@ -22,6 +22,7 @@ GLOBAL_LIST_EMPTY(ai_networking_machines) var/obj/machinery/ai/networking/partner var/rotation_to_partner var/locked = FALSE + var/mob/remote_control /obj/machinery/ai/networking/Initialize(mapload) @@ -94,6 +95,11 @@ GLOBAL_LIST_EMPTY(ai_networking_machines) update_icon() +/obj/machinery/ai/networking/ui_status(mob/user) + . = ..() + if (!QDELETED(remote_control) && user == remote_control) + . = UI_INTERACTIVE + /obj/machinery/ai/networking/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) if(!ui) diff --git a/code/modules/mob/living/silicon/ai/decentralized/management/ai_dashboard.dm b/code/modules/mob/living/silicon/ai/decentralized/management/ai_dashboard.dm index e1b02b820a12..e4ca7802d91d 100644 --- a/code/modules/mob/living/silicon/ai/decentralized/management/ai_dashboard.dm +++ b/code/modules/mob/living/silicon/ai/decentralized/management/ai_dashboard.dm @@ -11,10 +11,6 @@ var/completed_projects var/running_projects - ///Should we be contributing spare CPU to generate research points? - var/contribute_spare_cpu = TRUE - ///Are we using 50% of our spare CPU to mine bitcoin? - var/crypto_mining = FALSE /datum/ai_dashboard/New(mob/living/silicon/ai/new_owner) if(!istype(new_owner)) @@ -69,7 +65,6 @@ for(var/I in ram_usage) total_ram_used += ram_usage[I] - data["contribute_spare_cpu"] = contribute_spare_cpu data["used_cpu"] = total_cpu_used data["used_ram"] = total_ram_used @@ -165,10 +160,6 @@ if(!set_project_cpu(project, amount_to_add)) to_chat(owner, span_warning("Unable to add CPU to [params["project_name"]]. Either not enough free CPU or project is unavailable.")) . = TRUE - if("toggle_contribute_cpu") - contribute_spare_cpu = !contribute_spare_cpu - to_chat(owner, span_notice("You now[contribute_spare_cpu ? "" : " DO NOT"] contribute spare CPU to generating research points.")) - if("clear_ai_resources") owner.ai_network.resources.clear_ai_resources(src) . = TRUE @@ -328,22 +319,7 @@ var/remaining_cpu = 1 for(var/I in cpu_usage) remaining_cpu -= cpu_usage[I] - - if(remaining_cpu > 0 && contribute_spare_cpu) - var/points = max(round(AI_RESEARCH_PER_CPU * (remaining_cpu * current_cpu) * owner.research_point_booster), 0) - - if(crypto_mining) - points *= 0.5 - var/bitcoin_mined = points * (1-0.05*sqrt(points)) - bitcoin_mined = clamp(bitcoin_mined, 0, MAX_AI_BITCOIN_MINED_PER_TICK) - var/datum/bank_account/D = SSeconomy.get_dep_account(ACCOUNT_CAR) - if(D) - D.adjust_money(bitcoin_mined * AI_BITCOIN_PRICE) - - SSresearch.science_tech.add_point_list(list(TECHWEB_POINT_TYPE_AI = points)) - - for(var/project_being_researched in cpu_usage) if(!cpu_usage[project_being_researched]) continue diff --git a/code/modules/mob/living/silicon/ai/decentralized/projects/cryptominer.dm b/code/modules/mob/living/silicon/ai/decentralized/projects/cryptominer.dm deleted file mode 100644 index 737b3dae4d4f..000000000000 --- a/code/modules/mob/living/silicon/ai/decentralized/projects/cryptominer.dm +++ /dev/null @@ -1,17 +0,0 @@ -/datum/ai_project/crypto_miner - name = "Crypto Miner" - description = "Allocating spare CPU capacity to mining crypto currency should be able to help fund the station budget. This would however reduce AI research point generation by 50%" - category = AI_PROJECT_MISC - - research_cost = 2000 - - -/datum/ai_project/crypto_miner/run_project(force_run = FALSE) - . = ..(force_run) - if(!.) - return . - dashboard.crypto_mining = TRUE - -/datum/ai_project/crypto_miner/stop() - dashboard.crypto_mining = FALSE - ..() diff --git a/code/modules/modular_computers/file_system/programs/ainetworkinterface.dm b/code/modules/modular_computers/file_system/programs/ainetworkinterface.dm index 254fe3b295f9..bde588147011 100644 --- a/code/modules/modular_computers/file_system/programs/ainetworkinterface.dm +++ b/code/modules/modular_computers/file_system/programs/ainetworkinterface.dm @@ -13,12 +13,16 @@ program_icon = "network-wired" var/obj/structure/ethernet_cable/attached_cable + var/obj/machinery/ai/networking/active_networking + var/mob/networking_operator var/mob/living/silicon/ai/downloading var/mob/user_downloading var/download_progress = 0 var/download_warning = FALSE + + /datum/computer_file/program/ai_network_interface/run_program(mob/living/user) . = ..(user) if(ismachinery(computer.physical)) @@ -29,6 +33,11 @@ if(ismachinery(computer.physical) && !get_ainet()) search() + if(networking_operator && (!networking_operator.Adjacent(computer.physical))) + if(active_networking) + active_networking.remote_control = null + networking_operator = null + if(!get_ainet()) stop_download() return @@ -52,6 +61,7 @@ return download_progress += AI_DOWNLOAD_PER_PROCESS * downloading.downloadSpeedModifier + /datum/computer_file/program/ai_network_interface/proc/search() var/turf/T = get_turf(computer) attached_cable = locate(/obj/structure/ethernet_cable) in T @@ -76,6 +86,10 @@ if(!net) return data + data["networking_devices"] = list() + for(var/obj/machinery/ai/networking/N in net.get_local_nodes_oftype(/obj/machinery/ai/networking)) + data["networking_devices"] += list(list("label" = N.label, "ref" = REF(N))) + data["ai_list"] = list() for(var/mob/living/silicon/ai/AI in net.get_all_ais()) var/being_hijacked = AI.hijacking ? TRUE : FALSE @@ -118,11 +132,14 @@ return var/mob/user = usr var/datum/ai_network/net = get_ainet() + if(!net) + return switch(action) if("apply_object") if(!net) return TRUE + var/applied_something = FALSE var/mob/living/silicon/ai/targeted_ai = locate(params["ai_ref"]) in net.get_all_ais() if(!targeted_ai) to_chat(user, span_warning("Unable to locate AI.")) @@ -130,11 +147,15 @@ var/obj/item/surveillance_upgrade/upgrade = user.is_holding_item_of_type(/obj/item/surveillance_upgrade) if(upgrade) + applied_something = TRUE upgrade.afterattack(targeted_ai, user) var/obj/item/malf_upgrade/malf_upgrade = user.is_holding_item_of_type(/obj/item/malf_upgrade) if(malf_upgrade) + applied_something = TRUE malf_upgrade.afterattack(targeted_ai, user) + if(!applied_something) + to_chat(user, span_warning("You don't have any upgrades to upload!")) return TRUE if("upload_person") if(!net) @@ -264,6 +285,17 @@ to_chat(A, span_bolddanger("Unknown device disconnected. Systems confirmed secure.")) else to_chat(user, span_notice("You fail to remove the device.")) + if("control_networking") + if(!params["ref"]) + return + var/obj/machinery/ai/networking/N = locate(params["ref"]) in net.get_local_nodes_oftype(/obj/machinery/ai/networking) + if(active_networking) + active_networking.remote_control = null + networking_operator = user + active_networking = N + active_networking.remote_control = networking_operator + active_networking.ui_interact(networking_operator) + /datum/computer_file/program/ai_network_interface/proc/finish_download() diff --git a/tgui/packages/tgui/components/RoundGauge.js b/tgui/packages/tgui/components/RoundGauge.js index 159838f5758f..89a0caaa0e94 100644 --- a/tgui/packages/tgui/components/RoundGauge.js +++ b/tgui/packages/tgui/components/RoundGauge.js @@ -4,139 +4,139 @@ * @license MIT */ - import { clamp01, keyOfMatchingRange, scale } from 'common/math'; - import { classes } from 'common/react'; - import { AnimatedNumber } from './AnimatedNumber'; - import { Box, computeBoxClassName, computeBoxProps } from './Box'; +import { clamp01, keyOfMatchingRange, scale } from 'common/math'; +import { classes } from 'common/react'; +import { AnimatedNumber } from './AnimatedNumber'; +import { Box, computeBoxClassName, computeBoxProps } from './Box'; - export const RoundGauge = props => { - // Support for IE8 is for losers sorry B) - if (Byond.IS_LTE_IE8) { - return ( - - ); - } +export const RoundGauge = props => { + // Support for IE8 is for losers sorry B) + if (Byond.IS_LTE_IE8) { + return ( + + ); + } - const { - value, - minValue = 1, - maxValue = 1, - ranges, - alertAfter, - alertBefore, - format, - size = 1, - className, - style, - ...rest - } = props; + const { + value, + minValue = 1, + maxValue = 1, + ranges, + alertAfter, + alertBefore, + format, + size = 1, + className, + style, + ...rest + } = props; - const scaledValue = scale( - value, - minValue, - maxValue); - const clampedValue = clamp01(scaledValue); - const scaledRanges = ranges ? {} : { "primary": [0, 1] }; - if (ranges) { - Object.keys(ranges).forEach(x => { - const range = ranges[x]; - scaledRanges[x] = [ - scale(range[0], minValue, maxValue), - scale(range[1], minValue, maxValue), - ]; - }); - } + const scaledValue = scale( + value, + minValue, + maxValue); + const clampedValue = clamp01(scaledValue); + const scaledRanges = ranges ? {} : { "primary": [0, 1] }; + if (ranges) { + Object.keys(ranges).forEach(x => { + const range = ranges[x]; + scaledRanges[x] = [ + scale(range[0], minValue, maxValue), + scale(range[1], minValue, maxValue), + ]; + }); + } - const shouldShowAlert = () => { - // If both after and before alert props are set, attempt to interpret both - // in a helpful way. - if (alertAfter && alertBefore && alertAfter < alertBefore) { - // If alertAfter is before alertBefore, only display an alert if - // we're between them. - if (alertAfter < value && alertBefore > value) { - return true; - } - } else if (alertAfter < value || alertBefore > value) { - // Otherwise, we have distint ranges, or only one or neither are set. - // Either way, being on the active side of either is sufficient. - return true; - } - return false; - }; + const shouldShowAlert = () => { + // If both after and before alert props are set, attempt to interpret both + // in a helpful way. + if (alertAfter && alertBefore && alertAfter < alertBefore) { + // If alertAfter is before alertBefore, only display an alert if + // we're between them. + if (alertAfter < value && alertBefore > value) { + return true; + } + } else if (alertAfter < value || alertBefore > value) { + // Otherwise, we have distint ranges, or only one or neither are set. + // Either way, being on the active side of either is sufficient. + return true; + } + return false; + }; - const alertColor = shouldShowAlert() + const alertColor = shouldShowAlert() && keyOfMatchingRange(clampedValue, scaledRanges); - return ( - -
- - {(alertAfter || alertBefore) && ( - - - - )} - - - - - {Object.keys(scaledRanges).map((x, i) => { - const col_ranges = scaledRanges[x]; - return ( - +
+ + {(alertAfter || alertBefore) && ( + + + + )} + + + + + {Object.keys(scaledRanges).map((x, i) => { + const col_ranges = scaledRanges[x]; + return ( + - ); - })} - - - - - - -
- - - ); - }; + ), + }} + transform={`rotate(${180 + 180 * col_ranges[0]} 50 50)`} + cx="50" + cy="50" + r="45" /> + ); + })} + + + + + + +
+ +
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/AiDashboard.js b/tgui/packages/tgui/interfaces/AiDashboard.js index 8fbf92d2a0cf..521628a8a570 100644 --- a/tgui/packages/tgui/interfaces/AiDashboard.js +++ b/tgui/packages/tgui/interfaces/AiDashboard.js @@ -22,9 +22,7 @@ export const AiDashboard = (props, context) => { resizable title="Dashboard"> -
act('toggle_contribute_cpu')} color={data.contribute_spare_cpu ? "good" : "bad"} icon={data.contribute_spare_cpu ? "toggle-on" : "toggle-off"}>{!data.contribute_spare_cpu ? "NOT " : null}Contributing Spare CPU to Research - )}> +
{ const { act, data } = useBackend(context); - if(data.locked) { + if (data.locked) { return ( - -
- Machine locked - - - -
-
-
- ) + width={500} + height={450} + resizable> + +
+ Machine locked + + + +
+
+ + ); } return ( @@ -40,8 +40,7 @@ export const AiNetworking = (props, context) => { )}> {data.possible_targets.map(target => ( - - data.is_connected == target ? ( + data.is_connected === target ? ( act('disconnect')} diff --git a/tgui/packages/tgui/interfaces/NtosAIMonitor.js b/tgui/packages/tgui/interfaces/NtosAIMonitor.js index 05b0f8321154..8007adcc2b34 100644 --- a/tgui/packages/tgui/interfaces/NtosAIMonitor.js +++ b/tgui/packages/tgui/interfaces/NtosAIMonitor.js @@ -35,15 +35,23 @@ export const NtosAIMonitor = (props, context) => { setTab(1))}> - Upload + Networking Devices setTab(2))}> - Download + AI Upload + + setTab(3))}> + AI Download {tab === 1 && ( +
+ )} + {tab === 2 && (
@@ -78,7 +86,7 @@ export const NtosAIMonitor = (props, context) => { )}
)} - {tab === 2 && ( + {tab === 3 && (
{data.downloading && ( diff --git a/yogstation.dme b/yogstation.dme index 3f00c7512480..23856d71862c 100644 --- a/yogstation.dme +++ b/yogstation.dme @@ -2453,7 +2453,6 @@ #include "code\modules\mob\living\silicon\ai\decentralized\projects\ai_huds.dm" #include "code\modules\mob\living\silicon\ai\decentralized\projects\camera_mobility.dm" #include "code\modules\mob\living\silicon\ai\decentralized\projects\coolant_manager.dm" -#include "code\modules\mob\living\silicon\ai\decentralized\projects\cryptominer.dm" #include "code\modules\mob\living\silicon\ai\decentralized\projects\examine.dm" #include "code\modules\mob\living\silicon\ai\decentralized\projects\firewall.dm" #include "code\modules\mob\living\silicon\ai\decentralized\projects\induction.dm" From 6c96dc0852964fbdd2866752807ca9af4fede8ed Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Tue, 30 Aug 2022 14:19:54 +0200 Subject: [PATCH 48/66] prep for local network control --- code/modules/mob/living/silicon/ai/ai.dm | 6 +- .../silicon/ai/ai_network/ai_network.dm | 45 +++--- .../silicon/ai/ai_network/shared_resources.dm | 131 +++++++++++++----- .../silicon/ai/decentralized/ai_data_core.dm | 9 +- .../ai/decentralized/projects/_ai_project.dm | 2 + .../ai/decentralized/projects/ai_dab.dm | 2 +- .../decentralized/projects/coolant_manager.dm | 8 +- .../projects/research_booster.dm | 19 --- .../ai/decentralized/projects/self_defense.dm | 2 +- .../programs/ainetworkinterface.dm | 13 +- .../packages/tgui/interfaces/NtosAIMonitor.js | 16 ++- yogstation.dme | 1 - 12 files changed, 163 insertions(+), 91 deletions(-) delete mode 100644 code/modules/mob/living/silicon/ai/decentralized/projects/research_booster.dm diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 803a3b505907..a445e64a55b1 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -121,8 +121,6 @@ //Did we get the death prompt? var/is_dying = FALSE - ///Multiplier for amount of points gained when passively using CPU for science - var/research_point_booster = 1 var/datum/ai_network/ai_network @@ -576,6 +574,10 @@ to_chat(src, "[target] is not on or near any active cameras on the station.") +/mob/living/silicon/ai/proc/switch_ainet(datum/ai_network/old_net, datum/ai_network/new_net) + for(var/datum/ai_project/project in dashboard.completed_projects) + project.switch_network(old_net, new_net) + /mob/living/silicon/ai/proc/switchCamera(obj/machinery/camera/C) if(QDELETED(C)) diff --git a/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm b/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm index 922a20d5472b..58886e73bf09 100644 --- a/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm +++ b/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm @@ -1,3 +1,5 @@ +#define CRYPTO "crypto" + //////////////////////////////////////////// // AI NETWORK DATUM // each contiguous network of ethernet cables & AI machinery @@ -10,8 +12,6 @@ var/list/ai_list = list() //List of all AIs in this network var/list/remote_networks = list() - - var/total_activity = 0 // How much data is being sent through the network. For transmitters and receivers var/networked_cpu = 0 //How much CPU is in this network var/networked_ram = 0 //How much RAM is in this network @@ -23,10 +23,14 @@ var/temp_limit = AI_TEMP_LIMIT + var/local_cpu_usage = list() //How we use CPU locally + + + + /datum/ai_network/New() SSmachines.ainets += src resources = new(starting_network = src) - START_PROCESSING(SSobj, src) /datum/ai_network/Destroy() //Go away references, you suck! @@ -45,25 +49,26 @@ resources = null SSmachines.ainets -= src - STOP_PROCESSING(SSobj, src) return ..() /datum/ai_network/process() - /* - if(remaining_cpu > 0 && contribute_spare_cpu) - var/points = max(round(AI_RESEARCH_PER_CPU * (remaining_cpu * current_cpu) * owner.research_point_booster), 0) - - - if(crypto_mining) - points *= 0.5 - var/bitcoin_mined = points * (1-0.05*sqrt(points)) - bitcoin_mined = clamp(bitcoin_mined, 0, MAX_AI_BITCOIN_MINED_PER_TICK) - var/datum/bank_account/D = SSeconomy.get_dep_account(ACCOUNT_CAR) - if(D) - D.adjust_money(bitcoin_mined * AI_BITCOIN_PRICE) - SSresearch.science_tech.add_point_list(list(TECHWEB_POINT_TYPE_AI = points)) - */ - + var/total_cpu = resources.total_cpu() + + if(local_cpu_usage[CRYPTO]) + var/points = max(round(AI_RESEARCH_PER_CPU * (local_cpu_usage[CRYPTO] * total_cpu)), 0) + var/bitcoin_mined = points * (1-0.05*sqrt(points)) + bitcoin_mined = clamp(bitcoin_mined, 0, MAX_AI_BITCOIN_MINED_PER_TICK) + var/datum/bank_account/D = SSeconomy.get_dep_account(ACCOUNT_CAR) + if(D) + D.adjust_money(bitcoin_mined * AI_BITCOIN_PRICE) + + var/locally_used = 0 + for(var/A in local_cpu_usage) + locally_used += local_cpu_usage[A] + + var/research_points = max(round(AI_RESEARCH_PER_CPU * ((1 - locally_used) * total_cpu)), 0) + SSresearch.science_tech.add_point_list(list(TECHWEB_POINT_TYPE_AI = research_points)) + /datum/ai_network/proc/is_empty() @@ -340,3 +345,5 @@ message_admins("----------------------------") for(var/datum/ai_shared_resources/ASR in resource_list) message_admins("Resource count [REF(ASR)], CPU: [ASR.total_cpu()] | RAM: [ASR.total_ram()]") + +#undef CRYPTO diff --git a/code/modules/mob/living/silicon/ai/ai_network/shared_resources.dm b/code/modules/mob/living/silicon/ai/ai_network/shared_resources.dm index 2e25b6262ca9..8ad8d7901cd9 100644 --- a/code/modules/mob/living/silicon/ai/ai_network/shared_resources.dm +++ b/code/modules/mob/living/silicon/ai/ai_network/shared_resources.dm @@ -29,6 +29,24 @@ for(var/datum/ai_network/AN in networks) AN.rebuild_remote() + START_PROCESSING(SSobj, src) + +/datum/ai_shared_resources/Destroy(network_assigned_cpu, network_assigned_ram, datum/ai_network/split_network, datum/ai_network/starting_network) + STOP_PROCESSING(SSobj, src) + . = ..() + +/datum/ai_shared_resources/process() + for(var/datum/ai_network/net in networks) + net.process() + + //Networks automatically use their unspent CPU to research, this just catches cluster unassigned CPU. Local clusters can have their points boosted by local AIs + var/unused_cpu = 1 - total_cpu_assigned() + + var/research_points = max(round(AI_RESEARCH_PER_CPU * (unused_cpu * total_cpu())), 0) + SSresearch.science_tech.add_point_list(list(TECHWEB_POINT_TYPE_AI = research_points)) + + + /datum/ai_shared_resources/proc/total_cpu_assigned() var/total = 0 @@ -68,8 +86,11 @@ for(var/RU in new_resources.ram_assigned) ram_assigned[RU] = new_resources.ram_assigned[RU] + for(var/CU in cpu_assigned) //We split the CPUs 50/50 + cpu_assigned[CU] = round((cpu_assigned[CU] * 0.5) * 100) / 100 + for(var/CU in new_resources.cpu_assigned) - cpu_assigned[CU] = (1 - total_cpu_assigned()) + cpu_assigned[CU] = round((new_resources.cpu_assigned[CU] * 0.5) * 100) / 100 for(var/datum/ai_network/N in new_resources.networks) networks |= N @@ -83,14 +104,30 @@ var/network_ram_assign = list() var/network_cpu_assign = list() + + var/split_network_cpu = 0 var/network_ais = split_network.ai_list for(var/A in cpu_assigned) - if(A in network_ais) + if(A in network_ais || A == split_network) network_cpu_assign[A] = cpu_assigned[A] + split_network_cpu += cpu_assigned[A] cpu_assigned[A] = 0 + //Normalize CPU so 100% is used in the new network if 100% was used in total before + var/total_usage = total_cpu_assigned() //We normalise around this value, so the split network CPU usage will (approximately) end up at this too + for(var/A in network_cpu_assign) + var/split_usage = network_cpu_assign[A] / split_network_cpu + network_cpu_assign[A] = 1 * round(split_usage, 0.01) + + //We do the same for the network we leave behid + for(var/A in cpu_assigned) + var/split_usage = cpu_assigned[A] / total_usage + cpu_assigned[A] = 1 * round(split_usage, 0.01) + + + //Not needed for RAM since it's not a percentage for(var/A in ram_assigned) - if(A in network_ais) + if(A in network_ais || A == split_network) network_ram_assign[A] = ram_assigned[A] ram_assigned[A] = 0 @@ -123,20 +160,33 @@ if(total_assigned_ram > total_ram) var/needed_amount = total_assigned_ram - total_ram for(var/A in ram_assigned_copy) - var/mob/living/silicon/ai/AI = A - if((ram_assigned_copy[AI] - AI.dashboard.free_ram) >= needed_amount) - ram_assigned_copy[AI] -= needed_amount - total_assigned_ram -= needed_amount - affected_AIs |= AI - break - else if(ram_assigned_copy[AI]) - var/amount = ram_assigned_copy[AI] - AI.dashboard.free_ram - ram_assigned_copy[AI] -= amount - affected_AIs |= AI - needed_amount -= amount - total_assigned_ram -= amount - if(total_ram >= total_assigned_ram) + if(isAI(A)) + var/mob/living/silicon/ai/AI = A + if((ram_assigned_copy[AI] - AI.dashboard.free_ram) >= needed_amount) + ram_assigned_copy[AI] -= needed_amount + total_assigned_ram -= needed_amount + affected_AIs |= AI + break + else if(ram_assigned_copy[AI]) + var/amount = ram_assigned_copy[AI] - AI.dashboard.free_ram + ram_assigned_copy[AI] -= amount + affected_AIs |= AI + needed_amount -= amount + total_assigned_ram -= amount + if(total_ram >= total_assigned_ram) + break + else //If we're not an AI we are a network, networks have no programs to stop (for now) + if((ram_assigned_copy[A]) >= needed_amount) + ram_assigned_copy[A] -= needed_amount + total_assigned_ram -= needed_amount break + else if(ram_assigned_copy[A]) + var/amount = ram_assigned_copy[A] + ram_assigned_copy[A] -= amount + needed_amount -= amount + total_assigned_ram -= amount + if(total_ram >= total_assigned_ram) + break //Set the actual values of the assigned to our manipulated copies. Bypass helper procs as we assume we're correct. ram_assigned = ram_assigned_copy @@ -144,50 +194,57 @@ -/datum/ai_shared_resources/proc/set_cpu(mob/living/silicon/ai/AI, amount) +/datum/ai_shared_resources/proc/set_cpu(target, amount) + if(!istype(target, /datum/ai_network) && !istype(target, /mob/living/silicon/ai)) + stack_trace("Attempted to set_cpu with non-AI/network target! T: [target]") + return - if(!AI) + if(!target) return if(amount > 1 || amount < 0) return - if(!istype(AI)) - return - cpu_assigned[AI] = amount + cpu_assigned[target] = amount update_allocations() -/datum/ai_shared_resources/proc/add_ram(mob/living/silicon/ai/AI, amount) - - if(!AI || !amount) +/datum/ai_shared_resources/proc/add_ram(target, amount) + if(!istype(target, /datum/ai_network) && !istype(target, /mob/living/silicon/ai)) + stack_trace("Attempted to add_ram with non-AI/network target! T: [target]") return - if(!istype(AI)) + + if(!target || !amount) return - ram_assigned[AI] += amount + ram_assigned[target] += amount update_allocations() -/datum/ai_shared_resources/proc/remove_ram(mob/living/silicon/ai/AI, amount) - - if(!AI || !amount) +/datum/ai_shared_resources/proc/remove_ram(target, amount) + if(!istype(target, /datum/ai_network) && !istype(target, /mob/living/silicon/ai)) + stack_trace("Attempted to remove_ram with non-AI/network target! T: [target]") return - if(!istype(AI)) + + if(!target || !amount) return - if(ram_assigned[AI] - amount < 0) - ram_assigned[AI] = 0 + if(ram_assigned[target] - amount < 0) + ram_assigned[target] = 0 else - ram_assigned[AI] -= amount + ram_assigned[target] -= amount update_allocations() -/datum/ai_shared_resources/proc/clear_ai_resources(mob/living/silicon/ai/AI) - if(!AI || !istype(AI)) +/datum/ai_shared_resources/proc/clear_ai_resources(target) + if(!istype(target, /datum/ai_network) && !istype(target, /mob/living/silicon/ai)) + stack_trace("Attempted to clear_ai_resources with non-AI/network target! T: [target]") + return + + if(!target) return - remove_ram(AI, ram_assigned[AI]) - cpu_assigned[AI] = 0 + remove_ram(target, ram_assigned[target]) + cpu_assigned[target] = 0 update_allocations() diff --git a/code/modules/mob/living/silicon/ai/decentralized/ai_data_core.dm b/code/modules/mob/living/silicon/ai/decentralized/ai_data_core.dm index 6a0bf6357a3e..61ea4531ef20 100644 --- a/code/modules/mob/living/silicon/ai/decentralized/ai_data_core.dm +++ b/code/modules/mob/living/silicon/ai/decentralized/ai_data_core.dm @@ -173,8 +173,10 @@ GLOBAL_VAR_INIT(primary_data_core, null) if(network != AI.ai_network) if(AI.ai_network) AI.ai_network.remove_ai(AI) + var/old_net = AI.ai_network AI.ai_network = network network.ai_list += AI + AI.switch_ainet(old_net, network) /obj/machinery/ai/data_core/update_icon() cut_overlays() @@ -186,17 +188,22 @@ GLOBAL_VAR_INIT(primary_data_core, null) else icon_state = "core-offline" -/obj/machinery/ai/data_core/connect_to_network() //If we ever get connected to a network (or a new one gets created) we get the AI to the correct one too +/obj/machinery/ai/data_core/connect_to_network() //If we ever get connected to a network (or a new one gets created) we get the AIs to the correct one too . = ..() for(var/mob/living/silicon/ai/AI in contents) if(!AI.ai_network) network.ai_list |= AI + var/old_net = AI.ai_network AI.ai_network = network + AI.switch_ainet(old_net, network) + if(AI.ai_network != network) if(AI.ai_network) AI.ai_network.remove_ai(AI) + var/old_net = AI.ai_network AI.ai_network = network network.ai_list |= AI + AI.switch_ainet(old_net, network) diff --git a/code/modules/mob/living/silicon/ai/decentralized/projects/_ai_project.dm b/code/modules/mob/living/silicon/ai/decentralized/projects/_ai_project.dm index 3d6d9486e4b2..6a3cd91d8782 100644 --- a/code/modules/mob/living/silicon/ai/decentralized/projects/_ai_project.dm +++ b/code/modules/mob/living/silicon/ai/decentralized/projects/_ai_project.dm @@ -55,6 +55,8 @@ GLOBAL_LIST_EMPTY(ai_projects) dashboard.running_projects += src return TRUE +/datum/ai_project/proc/switch_network(datum/ai_network/old_net, datum/ai_network/new_net) + return TRUE /datum/ai_project/proc/stop() SHOULD_CALL_PARENT(TRUE) diff --git a/code/modules/mob/living/silicon/ai/decentralized/projects/ai_dab.dm b/code/modules/mob/living/silicon/ai/decentralized/projects/ai_dab.dm index b3090fa553b0..4e0e6e8f54f4 100644 --- a/code/modules/mob/living/silicon/ai/decentralized/projects/ai_dab.dm +++ b/code/modules/mob/living/silicon/ai/decentralized/projects/ai_dab.dm @@ -10,7 +10,7 @@ . = ..() if(!.) return . - for(var/obj/machinery/ai/data_core/datacores in GLOB.data_cores) + for(var/obj/machinery/ai/data_core/datacores in ai.ai_network.get_all_nodes()) datacores.DabAnimation() stop() diff --git a/code/modules/mob/living/silicon/ai/decentralized/projects/coolant_manager.dm b/code/modules/mob/living/silicon/ai/decentralized/projects/coolant_manager.dm index 28b5f497b6c3..b946c5f97abb 100644 --- a/code/modules/mob/living/silicon/ai/decentralized/projects/coolant_manager.dm +++ b/code/modules/mob/living/silicon/ai/decentralized/projects/coolant_manager.dm @@ -7,6 +7,8 @@ can_be_run = FALSE /datum/ai_project/coolant_manager/finish() - if(ai.ai_network.temp_limit == AI_TEMP_LIMIT) //Limit to only 1 AI doing it. - ai.ai_network.temp_limit += 10 - \ No newline at end of file + ai.ai_network.temp_limit += 10 + +/datum/ai_project/coolant_manager/switch_network(datum/ai_network/old_net, datum/ai_network/new_net) + old_net.temp_limit -= 10 + new_net.temp_limit += 10 diff --git a/code/modules/mob/living/silicon/ai/decentralized/projects/research_booster.dm b/code/modules/mob/living/silicon/ai/decentralized/projects/research_booster.dm deleted file mode 100644 index 4f38cc003342..000000000000 --- a/code/modules/mob/living/silicon/ai/decentralized/projects/research_booster.dm +++ /dev/null @@ -1,19 +0,0 @@ -/datum/ai_project/research_booster - name = "Research Acceleration" - description = "Using fast RAM instead of slow SSD and HDD storage allows for the production of approximately 25% more research points" - research_cost = 2500 - ram_required = 8 - research_requirements_text = "None" - category = AI_PROJECT_MISC - -/datum/ai_project/research_booster/run_project(force_run = FALSE) - . = ..(force_run) - if(!.) - return . - - ai.research_point_booster += 0.25 - -/datum/ai_project/research_booster/stop() - ai.research_point_booster -= 0.25 - ..() - diff --git a/code/modules/mob/living/silicon/ai/decentralized/projects/self_defense.dm b/code/modules/mob/living/silicon/ai/decentralized/projects/self_defense.dm index 2e1c35d976c3..00b2b118de01 100644 --- a/code/modules/mob/living/silicon/ai/decentralized/projects/self_defense.dm +++ b/code/modules/mob/living/silicon/ai/decentralized/projects/self_defense.dm @@ -26,6 +26,6 @@ if(!isaicore(owner.loc)) to_chat(owner, span_warning("You must be in your core to do this!")) return - for(var/obj/machinery/ai/data_core/core in GLOB.data_cores) + for(var/obj/machinery/ai/data_core/core in owner.ai_network.get_all_nodes()) tesla_zap(core, 2, 15000, (TESLA_MOB_DAMAGE | TESLA_MOB_STUN)) core.use_power(5000) diff --git a/code/modules/modular_computers/file_system/programs/ainetworkinterface.dm b/code/modules/modular_computers/file_system/programs/ainetworkinterface.dm index bde588147011..9728e09a1db9 100644 --- a/code/modules/modular_computers/file_system/programs/ainetworkinterface.dm +++ b/code/modules/modular_computers/file_system/programs/ainetworkinterface.dm @@ -125,6 +125,13 @@ data["can_upload"] = net.find_data_core() ? TRUE : FALSE + data["available_cpu_resources"] = (1 - net.resources.total_cpu_assigned()) + data["network_cpu_resources"] = net.resources.cpu_assigned[net] + + data["network_cpu_assignments"] = list(net.local_cpu_usage) + + + return data /datum/computer_file/program/ai_network_interface/ui_act(action, params, datum/tgui/ui) @@ -211,7 +218,7 @@ if("start_download") if(!get_ai(TRUE) || downloading) return - var/mob/living/silicon/ai/target = locate(params["download_target"]) + var/mob/living/silicon/ai/target = locate(params["download_target"]) in net.get_all_ais() if(!target || !istype(target)) return if(!istype(target.loc, /obj/machinery/ai/data_core)) @@ -240,7 +247,7 @@ to_chat(user, span_warning("You need to be holding the serial exploitation unit to initiate the hijacking process!")) return var/obj/item/ai_hijack_device/device = user.get_active_held_item() - var/mob/living/silicon/ai/target = locate(params["target_ai"]) + var/mob/living/silicon/ai/target = locate(params["target_ai"]) in net.get_all_ais() if(!target || !isAI(target)) return var/mob/living/silicon/ai/A = target @@ -270,7 +277,7 @@ notify_ghosts("[user] has begun to hijack [A]!", source = computer.physical, action = NOTIFY_ORBIT, ghost_sound = 'sound/machines/chime.ogg') if("stop_hijack") - var/mob/living/silicon/ai/target = locate(params["target_ai"]) + var/mob/living/silicon/ai/target = locate(params["target_ai"]) in net.get_all_ais() if(!target || !isAI(target)) return var/mob/living/silicon/ai/A = target diff --git a/tgui/packages/tgui/interfaces/NtosAIMonitor.js b/tgui/packages/tgui/interfaces/NtosAIMonitor.js index 8007adcc2b34..5f4a372f82d0 100644 --- a/tgui/packages/tgui/interfaces/NtosAIMonitor.js +++ b/tgui/packages/tgui/interfaces/NtosAIMonitor.js @@ -32,19 +32,24 @@ export const NtosAIMonitor = (props, context) => { - setTab(1))}> - Networking Devices + Cluster Management setTab(2))}> - AI Upload + Networking Devices setTab(3))}> + AI Upload + + setTab(4))}> AI Download @@ -52,6 +57,9 @@ export const NtosAIMonitor = (props, context) => {
)} {tab === 2 && ( +
+ )} + {tab === 3 && (
@@ -86,7 +94,7 @@ export const NtosAIMonitor = (props, context) => { )}
)} - {tab === 3 && ( + {tab === 4 && (
{data.downloading && ( diff --git a/yogstation.dme b/yogstation.dme index 23856d71862c..ab44edacead6 100644 --- a/yogstation.dme +++ b/yogstation.dme @@ -2457,7 +2457,6 @@ #include "code\modules\mob\living\silicon\ai\decentralized\projects\firewall.dm" #include "code\modules\mob\living\silicon\ai\decentralized\projects\induction.dm" #include "code\modules\mob\living\silicon\ai\decentralized\projects\memory_compressor.dm" -#include "code\modules\mob\living\silicon\ai\decentralized\projects\research_booster.dm" #include "code\modules\mob\living\silicon\ai\decentralized\projects\rgb.dm" #include "code\modules\mob\living\silicon\ai\decentralized\projects\self_defense.dm" #include "code\modules\mob\living\silicon\ai\decentralized\projects\surveillance.dm" From da36102b3792f2cc074d492a0d3142d477ec935b Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Thu, 1 Sep 2022 14:26:08 +0200 Subject: [PATCH 49/66] free ram stuff that seems misplaced --- .../mob/living/silicon/ai/ai_network/shared_resources.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/mob/living/silicon/ai/ai_network/shared_resources.dm b/code/modules/mob/living/silicon/ai/ai_network/shared_resources.dm index 8ad8d7901cd9..93b299cb4932 100644 --- a/code/modules/mob/living/silicon/ai/ai_network/shared_resources.dm +++ b/code/modules/mob/living/silicon/ai/ai_network/shared_resources.dm @@ -57,7 +57,7 @@ /datum/ai_shared_resources/proc/total_ram_assigned() var/total = 0 for(var/mob/living/silicon/ai/AI in ram_assigned) - total += (ram_assigned[AI] - AI.dashboard.free_ram) + total += (ram_assigned[AI]) return total /datum/ai_shared_resources/proc/total_cpu() @@ -162,13 +162,13 @@ for(var/A in ram_assigned_copy) if(isAI(A)) var/mob/living/silicon/ai/AI = A - if((ram_assigned_copy[AI] - AI.dashboard.free_ram) >= needed_amount) + if((ram_assigned_copy[AI]) >= needed_amount) ram_assigned_copy[AI] -= needed_amount total_assigned_ram -= needed_amount affected_AIs |= AI break else if(ram_assigned_copy[AI]) - var/amount = ram_assigned_copy[AI] - AI.dashboard.free_ram + var/amount = ram_assigned_copy[AI] ram_assigned_copy[AI] -= amount affected_AIs |= AI needed_amount -= amount From f32f5a1e18d6429ee19bf75b8159d82bf4c43ca0 Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Thu, 1 Sep 2022 16:01:53 +0200 Subject: [PATCH 50/66] remote control + local resources --- .../silicon/ai/ai_network/ai_network.dm | 7 +- .../ai/ai_network/networking_machines.dm | 6 +- .../silicon/ai/decentralized/_ai_machinery.dm | 1 + .../silicon/ai/decentralized/ai_data_core.dm | 1 + .../ai/decentralized/projects/self_defense.dm | 3 +- .../ai/decentralized/server_cabinet.dm | 1 + .../programs/ainetworkinterface.dm | 86 +++++++++- .../packages/tgui/interfaces/NtosAIMonitor.js | 157 +++++++++++++++++- 8 files changed, 246 insertions(+), 16 deletions(-) diff --git a/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm b/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm index 58886e73bf09..cf752fcaf49e 100644 --- a/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm +++ b/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm @@ -25,11 +25,14 @@ var/local_cpu_usage = list() //How we use CPU locally + var/label + /datum/ai_network/New() SSmachines.ainets += src + label = num2hex(rand(1,65535), -1) resources = new(starting_network = src) /datum/ai_network/Destroy() @@ -120,7 +123,7 @@ return core /datum/ai_network/proc/get_all_nodes(checked_nets = list()) - . = nodes + . = nodes.Copy() for(var/datum/ai_network/net in resources.networks) if(net == src) continue @@ -134,7 +137,7 @@ /datum/ai_network/proc/get_all_ais(checked_nets = list()) - . = ai_list + . = ai_list.Copy() for(var/datum/ai_network/net in resources.networks) if(net == src) continue diff --git a/code/modules/mob/living/silicon/ai/ai_network/networking_machines.dm b/code/modules/mob/living/silicon/ai/ai_network/networking_machines.dm index 68031873de18..cd6b5ed89975 100644 --- a/code/modules/mob/living/silicon/ai/ai_network/networking_machines.dm +++ b/code/modules/mob/living/silicon/ai/ai_network/networking_machines.dm @@ -161,9 +161,11 @@ GLOBAL_LIST_EMPTY(ai_networking_machines) if(N.locked) to_chat(usr, span_warning("Unable to connect to '[target_label]'! It seems to be locked.")) return - if(partner) - disconnect() + if(N.partner) + to_chat(usr, span_warning("Unable to connect to '[target_label]'! It seems to already have a connection established.")) + return connect_to_partner(N) + to_chat(usr, span_notice("Connection established to '[target_label]'.")) return . = TRUE if("disconnect") diff --git a/code/modules/mob/living/silicon/ai/decentralized/_ai_machinery.dm b/code/modules/mob/living/silicon/ai/decentralized/_ai_machinery.dm index fe7cca02dad2..523c29039c98 100644 --- a/code/modules/mob/living/silicon/ai/decentralized/_ai_machinery.dm +++ b/code/modules/mob/living/silicon/ai/decentralized/_ai_machinery.dm @@ -16,6 +16,7 @@ SSair.atmos_machinery += src connect_to_network() + message_admins("init call") /obj/machinery/ai/Destroy() . = ..() diff --git a/code/modules/mob/living/silicon/ai/decentralized/ai_data_core.dm b/code/modules/mob/living/silicon/ai/decentralized/ai_data_core.dm index 61ea4531ef20..bc9f10da6271 100644 --- a/code/modules/mob/living/silicon/ai/decentralized/ai_data_core.dm +++ b/code/modules/mob/living/silicon/ai/decentralized/ai_data_core.dm @@ -190,6 +190,7 @@ GLOBAL_VAR_INIT(primary_data_core, null) /obj/machinery/ai/data_core/connect_to_network() //If we ever get connected to a network (or a new one gets created) we get the AIs to the correct one too . = ..() + message_admins("core") for(var/mob/living/silicon/ai/AI in contents) if(!AI.ai_network) network.ai_list |= AI diff --git a/code/modules/mob/living/silicon/ai/decentralized/projects/self_defense.dm b/code/modules/mob/living/silicon/ai/decentralized/projects/self_defense.dm index 00b2b118de01..5656a911f5bf 100644 --- a/code/modules/mob/living/silicon/ai/decentralized/projects/self_defense.dm +++ b/code/modules/mob/living/silicon/ai/decentralized/projects/self_defense.dm @@ -26,6 +26,7 @@ if(!isaicore(owner.loc)) to_chat(owner, span_warning("You must be in your core to do this!")) return - for(var/obj/machinery/ai/data_core/core in owner.ai_network.get_all_nodes()) + var/mob/living/silicon/ai/AI = owner + for(var/obj/machinery/ai/data_core/core in AI.ai_network.get_all_nodes()) tesla_zap(core, 2, 15000, (TESLA_MOB_DAMAGE | TESLA_MOB_STUN)) core.use_power(5000) diff --git a/code/modules/mob/living/silicon/ai/decentralized/server_cabinet.dm b/code/modules/mob/living/silicon/ai/decentralized/server_cabinet.dm index 9a0199537971..7fb6d134a78d 100644 --- a/code/modules/mob/living/silicon/ai/decentralized/server_cabinet.dm +++ b/code/modules/mob/living/silicon/ai/decentralized/server_cabinet.dm @@ -187,6 +187,7 @@ GLOBAL_LIST_EMPTY(server_cabinets) . = ..() if(network) network.update_resources() + message_admins("cabinet") /obj/machinery/ai/server_cabinet/disconnect_from_network() var/datum/ai_network/temp = network diff --git a/code/modules/modular_computers/file_system/programs/ainetworkinterface.dm b/code/modules/modular_computers/file_system/programs/ainetworkinterface.dm index 9728e09a1db9..2a0ae30289d3 100644 --- a/code/modules/modular_computers/file_system/programs/ainetworkinterface.dm +++ b/code/modules/modular_computers/file_system/programs/ainetworkinterface.dm @@ -86,18 +86,23 @@ if(!net) return data + + //Networking devices control data["networking_devices"] = list() for(var/obj/machinery/ai/networking/N in net.get_local_nodes_oftype(/obj/machinery/ai/networking)) - data["networking_devices"] += list(list("label" = N.label, "ref" = REF(N))) + data["networking_devices"] += list(list("label" = N.label, "ref" = REF(N), "has_partner" = N.partner ? N.partner.label : null)) + //Downloading/Uploadingainet data["ai_list"] = list() for(var/mob/living/silicon/ai/AI in net.get_all_ais()) var/being_hijacked = AI.hijacking ? TRUE : FALSE - data["ai_list"] += list(list("name" = AI.name, "ref" = REF(AI), "can_download" = AI.can_download, "health" = AI.health, "active" = AI.mind ? TRUE : FALSE, "being_hijacked" = being_hijacked, "in_core" = istype(AI.loc, /obj/machinery/ai/data_core))) + data["ai_list"] += list(list("name" = AI.name, "ref" = REF(AI), "can_download" = AI.can_download, "health" = AI.health, "active" = AI.mind ? TRUE : FALSE, "being_hijacked" = being_hijacked, "in_core" = istype(AI.loc, /obj/machinery/ai/data_core), + "assigned_cpu" = net.resources.cpu_assigned[AI] ? net.resources.cpu_assigned[AI] : 0, "assigned_ram" = net.resources.ram_assigned[AI] ? net.resources.ram_assigned[AI] : 0)) data["is_infiltrator"] = is_infiltrator(user) data["connection_type"] = ismachinery(computer.physical) ? "wired connection" : "local wire shunt" + data["network_name"] = net.label data["current_ai_ref"] = null if(isAI(user)) @@ -125,12 +130,21 @@ data["can_upload"] = net.find_data_core() ? TRUE : FALSE - data["available_cpu_resources"] = (1 - net.resources.total_cpu_assigned()) - data["network_cpu_resources"] = net.resources.cpu_assigned[net] - data["network_cpu_assignments"] = list(net.local_cpu_usage) + //Resource allocation + data["total_cpu"] = net.resources.total_cpu() + data["total_ram"] = net.resources.total_ram() + + data["total_assigned_cpu"] = net.resources.total_cpu_assigned() + data["total_assigned_ram"] = net.resources.total_ram_assigned() + + data["network_cpu_assignments"] = list(net.local_cpu_usage) + + data["network_ref"] = REF(net) + data["network_assigned_ram"] = net.resources.ram_assigned[net] + data["network_assigned_cpu"] = net.resources.cpu_assigned[net] return data @@ -143,6 +157,19 @@ return switch(action) + //General actions + if("change_network_name") + var/new_label = stripped_input(usr, "Enter new label", "Set label", max_length = 32) + if(new_label) + if(isnotpretty(new_label)) + to_chat(usr, span_notice("The machine rejects the input. See rule 0.1.")) + var/log_message = "[key_name(usr)] just tripped a pretty filter: '[new_label]'." + message_admins(log_message) + log_say(log_message) + return + net.label = new_label + . = TRUE + //AI interaction, downloading/uploading if("apply_object") if(!net) return TRUE @@ -292,6 +319,8 @@ to_chat(A, span_bolddanger("Unknown device disconnected. Systems confirmed secure.")) else to_chat(user, span_notice("You fail to remove the device.")) + + //Network control if("control_networking") if(!params["ref"]) return @@ -303,6 +332,53 @@ active_networking.remote_control = networking_operator active_networking.ui_interact(networking_operator) + //Resource allocation + if("clear_ai_resources") + var/mob/living/silicon/ai/target_ai = locate(params["target_ai"]) in net.get_all_ais() + if(!istype(target_ai)) + return + + net.resources.clear_ai_resources(target_ai) + . = TRUE + + if("set_cpu") + var/mob/living/silicon/ai/target_ai = locate(params["target_ai"]) in net.get_all_ais() + if(!istype(target_ai)) + return + var/amount = params["amount_cpu"] + if(amount > 1 || amount < 0) + return + net.resources.set_cpu(target_ai, amount) + . = TRUE + if("max_cpu") + var/mob/living/silicon/ai/target_ai = locate(params["target_ai"]) in net.get_all_ais() + if(!istype(target_ai)) + return + var/amount = (1 - net.resources.total_cpu_assigned()) + net.resources.cpu_assigned[target_ai] + + net.resources.set_cpu(target_ai, amount) + . = TRUE + if("add_ram") + var/mob/living/silicon/ai/target_ai = locate(params["target_ai"]) in net.get_all_ais() + if(!istype(target_ai)) + return + + if(net.resources.total_ram_assigned() >= net.resources.total_ram()) + return + net.resources.add_ram(target_ai, 1) + . = TRUE + + if("remove_ram") + var/mob/living/silicon/ai/target_ai = locate(params["target_ai"]) in net.get_all_ais() + if(!istype(target_ai)) + return + + var/current_ram = net.resources.ram_assigned[target_ai] + + if(current_ram <= 0) + return + net.resources.remove_ram(target_ai, 1) + . = TRUE /datum/computer_file/program/ai_network_interface/proc/finish_download() diff --git a/tgui/packages/tgui/interfaces/NtosAIMonitor.js b/tgui/packages/tgui/interfaces/NtosAIMonitor.js index 5f4a372f82d0..d1e49afc28bb 100644 --- a/tgui/packages/tgui/interfaces/NtosAIMonitor.js +++ b/tgui/packages/tgui/interfaces/NtosAIMonitor.js @@ -1,11 +1,12 @@ import { NtosWindow } from '../layouts'; import { Fragment } from 'inferno'; import { useBackend, useLocalState } from '../backend'; -import { Button, Box, Section, Tabs, NoticeBox, Flex, ProgressBar } from '../components'; +import { Button, Box, Section, Tabs, NoticeBox, Flex, ProgressBar, LabeledList, NumberInput, Divider } from '../components'; export const NtosAIMonitor = (props, context) => { const { act, data } = useBackend(context); const [tab, setTab] = useLocalState(context, 'tab', 1); + const [clusterTab, setClusterTab] = useLocalState(context, 'clustertab', 1) if (!data.has_ai_net) { return ( @@ -26,13 +27,13 @@ export const NtosAIMonitor = (props, context) => { return ( - setTab(1))}> Cluster Management @@ -54,10 +55,40 @@ export const NtosAIMonitor = (props, context) => { {tab === 1 && ( -
+ + + + setClusterTab(1))}> + Resource Allocation + + setClusterTab(2))}> + Local Computing + + + + )} + {(clusterTab === 1 && tab === 1) && ( + + )} + {(clusterTab === 2&& tab === 1) && ( +
)} {tab === 2 && ( -
+
+ + {data.networking_devices.map((networker, index) => { + return ( + act("control_networking", { ref: networker.ref })}>Control)}> + {networker.has_partner ? "ONLINE - CONNECTED TO " + networker.has_partner : "DISCONNECTED"} + + ); + })} + +
)} {tab === 3 && (
@@ -145,3 +176,117 @@ export const NtosAIMonitor = (props, context) => { ); }; + + + + +const ResourceAllocation = (props, context) => { + const { act, data } = useBackend(context); + let remaining_cpu = (1 - data.total_assigned_cpu) * 100; + + return ( + +
+ {data.total_cpu * data.total_assigned_cpu}/{data.total_cpu} THz + ({data.total_assigned_cpu * 100}%) + +
+
+ {data.total_assigned_ram}/{data.total_ram} TB + +
+
+ + + CPU Capacity: + + {data.total_cpu * ai.assigned_cpu} THz + + act('set_cpu', { + target_ai: ai.ref, + amount_cpu: Math.round((value / 100) * 100) / 100, + })} /> + + + + + RAM Capacity: + + {ai.assigned_ram} TB + +
+
+ + {data.ai_list.map((ai, index) => { + return ( +
act("clear_ai_resources", { target_ai: ai.ref })}>Clear AI Resources + )}> + + CPU Capacity: + + {data.total_cpu * ai.assigned_cpu} THz + + act('set_cpu', { + target_ai: ai.ref, + amount_cpu: Math.round((value / 100) * 100) / 100, + })} /> + + + + + RAM Capacity: + + {ai.assigned_ram} TB + +
+ ); + })} +
+
+
+ ); +}; From 8130aacc08ead07afe0c9866a703a1e7eb6449be Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Thu, 1 Sep 2022 17:19:56 +0200 Subject: [PATCH 51/66] finished local resources --- code/__DEFINES/ai.dm | 16 + code/controllers/subsystem/job.dm | 18 +- .../silicon/ai/ai_network/ai_network.dm | 13 +- .../silicon/ai/ai_network/shared_resources.dm | 4 +- .../silicon/ai/decentralized/_ai_machinery.dm | 1 - .../silicon/ai/decentralized/ai_data_core.dm | 1 - .../decentralized/computer_science_datum.dm | 3 + .../ai/decentralized/decentralized_os.dm | 59 ---- .../ai/decentralized/server_cabinet.dm | 1 - .../programs/ainetworkinterface.dm | 82 ++++-- .../packages/tgui/interfaces/NtosAIMonitor.js | 278 +++++++++++------- yogstation.dme | 2 +- 12 files changed, 275 insertions(+), 203 deletions(-) create mode 100644 code/modules/mob/living/silicon/ai/decentralized/computer_science_datum.dm delete mode 100644 code/modules/mob/living/silicon/ai/decentralized/decentralized_os.dm diff --git a/code/__DEFINES/ai.dm b/code/__DEFINES/ai.dm index 319c9dd7f8a1..11106b57a5ce 100644 --- a/code/__DEFINES/ai.dm +++ b/code/__DEFINES/ai.dm @@ -66,3 +66,19 @@ GLOBAL_LIST_INIT(ai_project_categories, list( //How much RAM and CPU a core needs locally to be functional #define AI_CORE_CPU_REQUIREMENT 1 #define AI_CORE_RAM_REQUIREMENT 1 + +//For network based research and tasks. Since each network are going to contribute to a "global" pool of research there's no point in making this more complicated or modular +//Adding an entry here automatically adds it to the UI and allows CPU to be allocated. Just use your define in the network process() to do stuff +#define AI_CRYPTO "Cryptocurrency Mining" + +GLOBAL_LIST_INIT(possible_ainet_activities, list( + "[AI_CRYPTO]" +)) + +GLOBAL_LIST_INIT(ainet_activity_tagline, list( + "[AI_CRYPTO]" = "Use CPU to generate credits!" +)) + +GLOBAL_LIST_INIT(ainet_activity_description, list( + "[AI_CRYPTO]" = "Using CPU to mine NTCoin should allow for a meager sum of passive credit income." +)) diff --git a/code/controllers/subsystem/job.dm b/code/controllers/subsystem/job.dm index d0de6312dba6..cd7d683d8f85 100644 --- a/code/controllers/subsystem/job.dm +++ b/code/controllers/subsystem/job.dm @@ -256,6 +256,21 @@ SUBSYSTEM_DEF(job) return TRUE return FALSE +/datum/controller/subsystem/job/proc/FillNetminPosition() + var/datum/job/job = GetJob("Network Admin") + if(!job) + return + for(var/i = job.total_positions, i > 0, i--) + if(job.current_positions >= job.total_positions) //If we assign a netmin before this proc is run, (malf rework?) + return TRUE + for(var/level in level_order) + var/list/candidates = list() + candidates = FindOccupationCandidates(job, level) + if(candidates.len) + var/mob/dead/new_player/candidate = pick(candidates) + if(AssignRole(candidate, "Network Admin")) + break + /// Rolls a number of security based on the roundstart population /datum/controller/subsystem/job/proc/FillSecurityPositions() var/coeff = CONFIG_GET(number/min_security_scaling_coeff) @@ -339,7 +354,8 @@ SUBSYSTEM_DEF(job) //Check for an AI JobDebug("DO, Running AI Check") - FillAIPosition() + if(FillAIPosition()) + FillNetminPosition() JobDebug("DO, AI Check end") //Check for Security diff --git a/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm b/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm index cf752fcaf49e..863ec24ad673 100644 --- a/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm +++ b/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm @@ -1,5 +1,3 @@ -#define CRYPTO "crypto" - //////////////////////////////////////////// // AI NETWORK DATUM // each contiguous network of ethernet cables & AI machinery @@ -19,7 +17,7 @@ var/datum/ai_shared_resources/resources //Cash from crypto, can be withdrawn at network console - var/stored_cash = 0 + var/bitcoin_payout = 0 var/temp_limit = AI_TEMP_LIMIT @@ -57,13 +55,11 @@ /datum/ai_network/process() var/total_cpu = resources.total_cpu() - if(local_cpu_usage[CRYPTO]) - var/points = max(round(AI_RESEARCH_PER_CPU * (local_cpu_usage[CRYPTO] * total_cpu)), 0) + if(local_cpu_usage[AI_CRYPTO]) + var/points = max(round(AI_RESEARCH_PER_CPU * (local_cpu_usage[AI_CRYPTO] * total_cpu)), 0) var/bitcoin_mined = points * (1-0.05*sqrt(points)) bitcoin_mined = clamp(bitcoin_mined, 0, MAX_AI_BITCOIN_MINED_PER_TICK) - var/datum/bank_account/D = SSeconomy.get_dep_account(ACCOUNT_CAR) - if(D) - D.adjust_money(bitcoin_mined * AI_BITCOIN_PRICE) + bitcoin_payout += bitcoin_mined * AI_BITCOIN_PRICE var/locally_used = 0 for(var/A in local_cpu_usage) @@ -349,4 +345,3 @@ for(var/datum/ai_shared_resources/ASR in resource_list) message_admins("Resource count [REF(ASR)], CPU: [ASR.total_cpu()] | RAM: [ASR.total_ram()]") -#undef CRYPTO diff --git a/code/modules/mob/living/silicon/ai/ai_network/shared_resources.dm b/code/modules/mob/living/silicon/ai/ai_network/shared_resources.dm index 93b299cb4932..148dbf999d7e 100644 --- a/code/modules/mob/living/silicon/ai/ai_network/shared_resources.dm +++ b/code/modules/mob/living/silicon/ai/ai_network/shared_resources.dm @@ -50,13 +50,13 @@ /datum/ai_shared_resources/proc/total_cpu_assigned() var/total = 0 - for(var/mob/living/silicon/ai/AI in cpu_assigned) + for(var/AI in cpu_assigned) total += cpu_assigned[AI] return total /datum/ai_shared_resources/proc/total_ram_assigned() var/total = 0 - for(var/mob/living/silicon/ai/AI in ram_assigned) + for(var/AI in ram_assigned) total += (ram_assigned[AI]) return total diff --git a/code/modules/mob/living/silicon/ai/decentralized/_ai_machinery.dm b/code/modules/mob/living/silicon/ai/decentralized/_ai_machinery.dm index 523c29039c98..fe7cca02dad2 100644 --- a/code/modules/mob/living/silicon/ai/decentralized/_ai_machinery.dm +++ b/code/modules/mob/living/silicon/ai/decentralized/_ai_machinery.dm @@ -16,7 +16,6 @@ SSair.atmos_machinery += src connect_to_network() - message_admins("init call") /obj/machinery/ai/Destroy() . = ..() diff --git a/code/modules/mob/living/silicon/ai/decentralized/ai_data_core.dm b/code/modules/mob/living/silicon/ai/decentralized/ai_data_core.dm index bc9f10da6271..61ea4531ef20 100644 --- a/code/modules/mob/living/silicon/ai/decentralized/ai_data_core.dm +++ b/code/modules/mob/living/silicon/ai/decentralized/ai_data_core.dm @@ -190,7 +190,6 @@ GLOBAL_VAR_INIT(primary_data_core, null) /obj/machinery/ai/data_core/connect_to_network() //If we ever get connected to a network (or a new one gets created) we get the AIs to the correct one too . = ..() - message_admins("core") for(var/mob/living/silicon/ai/AI in contents) if(!AI.ai_network) network.ai_list |= AI diff --git a/code/modules/mob/living/silicon/ai/decentralized/computer_science_datum.dm b/code/modules/mob/living/silicon/ai/decentralized/computer_science_datum.dm new file mode 100644 index 000000000000..daabc3307057 --- /dev/null +++ b/code/modules/mob/living/silicon/ai/decentralized/computer_science_datum.dm @@ -0,0 +1,3 @@ +/datum/computer_science + var/projects = list() + diff --git a/code/modules/mob/living/silicon/ai/decentralized/decentralized_os.dm b/code/modules/mob/living/silicon/ai/decentralized/decentralized_os.dm deleted file mode 100644 index 32404d3ca200..000000000000 --- a/code/modules/mob/living/silicon/ai/decentralized/decentralized_os.dm +++ /dev/null @@ -1,59 +0,0 @@ -/datum/ai_os - var/name = "Decentralized Resource Management System (DRMS)" - - var/total_cpu = 0 - var/total_ram = 0 - - var/previous_ram = 0 - - - -/datum/ai_os/proc/set_cpu(mob/living/silicon/ai/AI, amount) -/* - if(!AI) - return - if(amount > 1 || amount < 0) - return - if(!istype(AI)) - return - cpu_assigned[AI] = amount - - update_allocations() -*/ - -/datum/ai_os/proc/add_ram(mob/living/silicon/ai/AI, amount) -/* - if(!AI || !amount) - return - if(!istype(AI)) - return - ram_assigned[AI] += amount - - update_allocations() -*/ - -/datum/ai_os/proc/remove_ram(mob/living/silicon/ai/AI, amount) -/* - if(!AI || !amount) - return - if(!istype(AI)) - return - if(ram_assigned[AI] - amount < 0) - ram_assigned[AI] = 0 - else - ram_assigned[AI] -= amount - - update_allocations() -*/ - -/datum/ai_os/proc/clear_ai_resources(mob/living/silicon/ai/AI) -/* - if(!AI || !istype(AI)) - return - - remove_ram(AI, ram_assigned[AI]) - cpu_assigned[AI] = 0 - - update_allocations() - -*/ diff --git a/code/modules/mob/living/silicon/ai/decentralized/server_cabinet.dm b/code/modules/mob/living/silicon/ai/decentralized/server_cabinet.dm index 7fb6d134a78d..9a0199537971 100644 --- a/code/modules/mob/living/silicon/ai/decentralized/server_cabinet.dm +++ b/code/modules/mob/living/silicon/ai/decentralized/server_cabinet.dm @@ -187,7 +187,6 @@ GLOBAL_LIST_EMPTY(server_cabinets) . = ..() if(network) network.update_resources() - message_admins("cabinet") /obj/machinery/ai/server_cabinet/disconnect_from_network() var/datum/ai_network/temp = network diff --git a/code/modules/modular_computers/file_system/programs/ainetworkinterface.dm b/code/modules/modular_computers/file_system/programs/ainetworkinterface.dm index 2a0ae30289d3..c9f38dd80246 100644 --- a/code/modules/modular_computers/file_system/programs/ainetworkinterface.dm +++ b/code/modules/modular_computers/file_system/programs/ainetworkinterface.dm @@ -140,11 +140,21 @@ data["total_assigned_cpu"] = net.resources.total_cpu_assigned() data["total_assigned_ram"] = net.resources.total_ram_assigned() - data["network_cpu_assignments"] = list(net.local_cpu_usage) + //Local processing + + data["network_cpu_assignments"] = list() + var/remaining_net_cpu = 1 + for(var/project in GLOB.possible_ainet_activities) + var/assigned = net.local_cpu_usage[project] ? net.local_cpu_usage[project] : 0 + data["network_cpu_assignments"] += list(list("name" = project, "assigned" = assigned, "tagline" = GLOB.ainet_activity_tagline[project], "description" = GLOB.ainet_activity_description[project])) + remaining_net_cpu -= assigned data["network_ref"] = REF(net) - data["network_assigned_ram"] = net.resources.ram_assigned[net] - data["network_assigned_cpu"] = net.resources.cpu_assigned[net] + data["network_assigned_ram"] = net.resources.ram_assigned[net] ? net.resources.ram_assigned[net] : 0 + data["network_assigned_cpu"] = net.resources.cpu_assigned[net] ? net.resources.cpu_assigned[net] : 0 + data["bitcoin_amount"] = net.bitcoin_payout + + data["remaining_network_cpu"] = remaining_net_cpu return data @@ -334,34 +344,28 @@ //Resource allocation if("clear_ai_resources") - var/mob/living/silicon/ai/target_ai = locate(params["target_ai"]) in net.get_all_ais() - if(!istype(target_ai)) - return + var/atom/target_ai = locate(params["target_ai"]) in net.get_all_ais() | net.resources.networks net.resources.clear_ai_resources(target_ai) . = TRUE if("set_cpu") - var/mob/living/silicon/ai/target_ai = locate(params["target_ai"]) in net.get_all_ais() - if(!istype(target_ai)) - return + var/atom/target_ai = locate(params["target_ai"]) in net.get_all_ais() | net.resources.networks + var/amount = params["amount_cpu"] if(amount > 1 || amount < 0) return net.resources.set_cpu(target_ai, amount) . = TRUE if("max_cpu") - var/mob/living/silicon/ai/target_ai = locate(params["target_ai"]) in net.get_all_ais() - if(!istype(target_ai)) - return + var/atom/target_ai = locate(params["target_ai"]) in net.get_all_ais() | net.resources.networks + var/amount = (1 - net.resources.total_cpu_assigned()) + net.resources.cpu_assigned[target_ai] net.resources.set_cpu(target_ai, amount) . = TRUE if("add_ram") - var/mob/living/silicon/ai/target_ai = locate(params["target_ai"]) in net.get_all_ais() - if(!istype(target_ai)) - return + var/atom/target_ai = locate(params["target_ai"]) in net.get_all_ais() | net.resources.networks if(net.resources.total_ram_assigned() >= net.resources.total_ram()) return @@ -369,9 +373,7 @@ . = TRUE if("remove_ram") - var/mob/living/silicon/ai/target_ai = locate(params["target_ai"]) in net.get_all_ais() - if(!istype(target_ai)) - return + var/atom/target_ai = locate(params["target_ai"]) in net.get_all_ais() | net.resources.networks var/current_ram = net.resources.ram_assigned[target_ai] @@ -380,6 +382,50 @@ net.resources.remove_ram(target_ai, 1) . = TRUE + //Local computing + if("allocate_network_cpu") + var/project_type = params["project_name"] + if(!(project_type in GLOB.possible_ainet_activities)) + return + var/amount = text2num(params["amount"]) + if(amount <= 0) + return + + var/total_cpu_used = 0 + for(var/I in net.local_cpu_usage) + if(I == project_type) + continue + total_cpu_used += net.local_cpu_usage[I] + + if((1 - total_cpu_used) >= amount) + net.local_cpu_usage[project_type] = amount + + . = TRUE + + if("max_network_cpu") + var/project_type = params["project_name"] + if(!(project_type in GLOB.possible_ainet_activities)) + return + + var/total_cpu_used = 0 + for(var/I in net.local_cpu_usage) + if(I == project_type) + continue + total_cpu_used += net.local_cpu_usage[I] + + var/amount_to_add = 1 - total_cpu_used + + net.local_cpu_usage[project_type] = amount_to_add + . = TRUE + if("bitcoin_payout") + var/payout_amount = net.bitcoin_payout + var/obj/item/holochip/holochip = new (computer.physical.drop_location(), payout_amount) + user.put_in_hands(holochip) + to_chat(user, span_notice("Payout of [payout_amount]cr confirmed.")) + net.bitcoin_payout = 0 + + + /datum/computer_file/program/ai_network_interface/proc/finish_download() var/obj/item/aicard/intellicard = get_ai(TRUE) diff --git a/tgui/packages/tgui/interfaces/NtosAIMonitor.js b/tgui/packages/tgui/interfaces/NtosAIMonitor.js index d1e49afc28bb..2e56983bf9ef 100644 --- a/tgui/packages/tgui/interfaces/NtosAIMonitor.js +++ b/tgui/packages/tgui/interfaces/NtosAIMonitor.js @@ -27,7 +27,7 @@ export const NtosAIMonitor = (props, context) => { return ( @@ -36,21 +36,26 @@ export const NtosAIMonitor = (props, context) => { setTab(1))}> - Cluster Management + Cluster Control setTab(2))}> - Networking Devices + Resource Allocation setTab(3))}> - AI Upload + Networking setTab(4))}> + AI Upload + + setTab(5))}> AI Download @@ -61,115 +66,25 @@ export const NtosAIMonitor = (props, context) => { setClusterTab(1))}> - Resource Allocation - - setClusterTab(2))}> Local Computing )} {(clusterTab === 1 && tab === 1) && ( - - )} - {(clusterTab === 2&& tab === 1) && ( -
+ )} {tab === 2 && ( -
- - {data.networking_devices.map((networker, index) => { - return ( - act("control_networking", { ref: networker.ref })}>Control)}> - {networker.has_partner ? "ONLINE - CONNECTED TO " + networker.has_partner : "DISCONNECTED"} - - ); - })} - -
+ )} {tab === 3 && ( -
- - - - {!data.intellicard && ( - - - No IntelliCard inserted! - - - ) || ( - - {data.intellicard_ai && ( - - -
- - -
-
-
- ) || ( - - - Intellicard contains no AI! - - - )} -
- )} -
+ )} {tab === 4 && ( -
- {data.downloading && ( - - Currently downloading {data.downloading} - - - {!!data.current_ai_ref && data.current_ai_ref === data.downloading_ref && ( - - )} - - - )|| ( - - {data.ai_list.filter(ai => { - return !!ai.in_core; - }).map((ai, index) => { - return ( -
{ai.name} | {ai.active ? "Active" : "Inactive"})} - buttons={( - - - - {!!data.is_infiltrator && !ai.being_hijacked && ( - - ) } - {!!ai.being_hijacked && ( - - )} - - )}> - Integrity: - -
- ); - })} -
- )} -
+ + )} + {tab === 5 && ( + )}
@@ -179,6 +94,39 @@ export const NtosAIMonitor = (props, context) => { +const LocalCompute = (props, context) => { + const { act, data } = useBackend(context); + let network_remaining_cpu = (1 - data.remaining_network_cpu) * 100; + + return ( +
+ + {data.network_cpu_assignments.map((project, index) => { + project.tagline = "Use CPU to generate credits!" + return ( +
{project.name} | {project.tagline})} buttons={( + + Assigned CPU:  + act('allocate_network_cpu', { + project_name: project.name, + amount: Math.round((value / 100) * 100) / 100, + })} /> + + + + )}> + {project.description} +
+ ); + })} +
+
+ ); +}; + const ResourceAllocation = (props, context) => { const { act, data } = useBackend(context); @@ -214,15 +162,15 @@ const ResourceAllocation = (props, context) => { CPU Capacity: - {data.total_cpu * ai.assigned_cpu} THz + {data.total_cpu * data.network_assigned_cpu} THz - act('set_cpu', { - target_ai: ai.ref, + act('set_cpu', { + target_ai: data.network_ref, amount_cpu: Math.round((value / 100) * 100) / 100, })} /> @@ -230,14 +178,14 @@ const ResourceAllocation = (props, context) => { RAM Capacity: - {ai.assigned_ram} TB + {data.network_assigned_ram} TB + {!!data.current_ai_ref && data.current_ai_ref === data.downloading_ref && ( + + )} + + + )|| ( + + {data.ai_list.filter(ai => { + return !!ai.in_core; + }).map((ai, index) => { + return ( +
{ai.name} | {ai.active ? "Active" : "Inactive"})} + buttons={( + + + + {!!data.is_infiltrator && !ai.being_hijacked && ( + + ) } + {!!ai.being_hijacked && ( + + )} + + )}> + Integrity: + +
+ ); + })} +
+ )} +
+ ); +}; + +const AIUpload = (props, context) => { + const { act, data } = useBackend(context); + + return ( +
+ + + + {!data.intellicard && ( + + + No IntelliCard inserted! + + + ) || ( + + {data.intellicard_ai && ( + + +
+ + +
+
+
+ ) || ( + + + Intellicard contains no AI! + + + )} +
+ )} +
+ ); +}; + +const Networking = (props, context) => { + const { act, data } = useBackend(context); + + return ( +
+ + {data.networking_devices.map((networker, index) => { + return ( + act("control_networking", { ref: networker.ref })}>Control)}> + {networker.has_partner ? "ONLINE - CONNECTED TO " + networker.has_partner : "DISCONNECTED"} + + ); + })} + +
+ ); +}; diff --git a/yogstation.dme b/yogstation.dme index ab44edacead6..8d1dbfeb3ca8 100644 --- a/yogstation.dme +++ b/yogstation.dme @@ -2443,7 +2443,7 @@ #include "code\modules\mob\living\silicon\ai\decentralized\_ai_machinery.dm" #include "code\modules\mob\living\silicon\ai\decentralized\ai_core_display.dm" #include "code\modules\mob\living\silicon\ai\decentralized\ai_data_core.dm" -#include "code\modules\mob\living\silicon\ai\decentralized\decentralized_os.dm" +#include "code\modules\mob\living\silicon\ai\decentralized\computer_science_datum.dm" #include "code\modules\mob\living\silicon\ai\decentralized\server_cabinet.dm" #include "code\modules\mob\living\silicon\ai\decentralized\management\ai_dashboard.dm" #include "code\modules\mob\living\silicon\ai\decentralized\management\ai_server_overview.dm" From c0709daa2df77c000fdce4e912c5c034b16f006a Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Thu, 1 Sep 2022 17:38:28 +0200 Subject: [PATCH 52/66] local resources finished --- .../silicon/ai/ai_network/ai_network.dm | 5 +- .../programs/ainetworkinterface.dm | 4 +- .../packages/tgui/interfaces/NtosAIMonitor.js | 80 +++++++++++++------ 3 files changed, 61 insertions(+), 28 deletions(-) diff --git a/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm b/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm index 863ec24ad673..cf8759260208 100644 --- a/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm +++ b/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm @@ -54,9 +54,10 @@ /datum/ai_network/process() var/total_cpu = resources.total_cpu() + var/resources_assigned = resources.cpu_assigned[src] ? resources.cpu_assigned[src] : 0 if(local_cpu_usage[AI_CRYPTO]) - var/points = max(round(AI_RESEARCH_PER_CPU * (local_cpu_usage[AI_CRYPTO] * total_cpu)), 0) + var/points = max(round(AI_RESEARCH_PER_CPU * (local_cpu_usage[AI_CRYPTO] * total_cpu * resources_assigned)), 0) var/bitcoin_mined = points * (1-0.05*sqrt(points)) bitcoin_mined = clamp(bitcoin_mined, 0, MAX_AI_BITCOIN_MINED_PER_TICK) bitcoin_payout += bitcoin_mined * AI_BITCOIN_PRICE @@ -65,7 +66,7 @@ for(var/A in local_cpu_usage) locally_used += local_cpu_usage[A] - var/research_points = max(round(AI_RESEARCH_PER_CPU * ((1 - locally_used) * total_cpu)), 0) + var/research_points = max(round(AI_RESEARCH_PER_CPU * ((1 - locally_used) * total_cpu * resources_assigned)), 0) SSresearch.science_tech.add_point_list(list(TECHWEB_POINT_TYPE_AI = research_points)) diff --git a/code/modules/modular_computers/file_system/programs/ainetworkinterface.dm b/code/modules/modular_computers/file_system/programs/ainetworkinterface.dm index c9f38dd80246..947da9cc3dec 100644 --- a/code/modules/modular_computers/file_system/programs/ainetworkinterface.dm +++ b/code/modules/modular_computers/file_system/programs/ainetworkinterface.dm @@ -152,7 +152,7 @@ data["network_ref"] = REF(net) data["network_assigned_ram"] = net.resources.ram_assigned[net] ? net.resources.ram_assigned[net] : 0 data["network_assigned_cpu"] = net.resources.cpu_assigned[net] ? net.resources.cpu_assigned[net] : 0 - data["bitcoin_amount"] = net.bitcoin_payout + data["bitcoin_amount"] = round(net.bitcoin_payout, 1) data["remaining_network_cpu"] = remaining_net_cpu @@ -418,7 +418,7 @@ net.local_cpu_usage[project_type] = amount_to_add . = TRUE if("bitcoin_payout") - var/payout_amount = net.bitcoin_payout + var/payout_amount = round(net.bitcoin_payout, 1) //Sure you can have your extra 0.5 credits :) var/obj/item/holochip/holochip = new (computer.physical.drop_location(), payout_amount) user.put_in_hands(holochip) to_chat(user, span_notice("Payout of [payout_amount]cr confirmed.")) diff --git a/tgui/packages/tgui/interfaces/NtosAIMonitor.js b/tgui/packages/tgui/interfaces/NtosAIMonitor.js index 2e56983bf9ef..c919a817ef46 100644 --- a/tgui/packages/tgui/interfaces/NtosAIMonitor.js +++ b/tgui/packages/tgui/interfaces/NtosAIMonitor.js @@ -66,12 +66,20 @@ export const NtosAIMonitor = (props, context) => { setClusterTab(1))}> + Dashboard + + setClusterTab(2))}> Local Computing )} {(clusterTab === 1 && tab === 1) && ( + + )} + {(clusterTab === 2 && tab === 1) && ( )} {tab === 2 && ( @@ -93,36 +101,60 @@ export const NtosAIMonitor = (props, context) => { }; +const LocalDashboard = (props, context) => { + const { act, data } = useBackend(context); + let network_remaining_cpu = data.remaining_network_cpu * 100; + + return ( +
+ + act("bitcoin_payout")}>Withdraw)}> + {data.bitcoin_amount} cr + + +
+ ); +}; const LocalCompute = (props, context) => { const { act, data } = useBackend(context); - let network_remaining_cpu = (1 - data.remaining_network_cpu) * 100; + let network_remaining_cpu = data.remaining_network_cpu * 100; return ( -
- - {data.network_cpu_assignments.map((project, index) => { - project.tagline = "Use CPU to generate credits!" - return ( -
{project.name} | {project.tagline})} buttons={( - - Assigned CPU:  - act('allocate_network_cpu', { - project_name: project.name, - amount: Math.round((value / 100) * 100) / 100, - })} /> - +
+ Local CPU Resources: + {(100 - network_remaining_cpu)}% ({data.total_cpu * data.network_assigned_cpu} THz) + +
+ + {data.network_cpu_assignments.map((project, index) => { + return ( +
{project.name})} buttons={( + + Assigned CPU:  + act('allocate_network_cpu', { + project_name: project.name, + amount: Math.round((value / 100) * 100) / 100, + })} /> + - - )}> - {project.description} -
- ); - })} -
+ + )}> + {project.tagline} + {project.description} +
+ ); + })} + +
); }; From 1665cc674b7da8a8382c8c46a24e30fc9c5a3c74 Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Thu, 1 Sep 2022 17:41:00 +0200 Subject: [PATCH 53/66] tgui lint --- .../packages/tgui/interfaces/NtosAIMonitor.js | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/tgui/packages/tgui/interfaces/NtosAIMonitor.js b/tgui/packages/tgui/interfaces/NtosAIMonitor.js index c919a817ef46..2420b70c2389 100644 --- a/tgui/packages/tgui/interfaces/NtosAIMonitor.js +++ b/tgui/packages/tgui/interfaces/NtosAIMonitor.js @@ -6,7 +6,7 @@ import { Button, Box, Section, Tabs, NoticeBox, Flex, ProgressBar, LabeledList, export const NtosAIMonitor = (props, context) => { const { act, data } = useBackend(context); const [tab, setTab] = useLocalState(context, 'tab', 1); - const [clusterTab, setClusterTab] = useLocalState(context, 'clustertab', 1) + const [clusterTab, setClusterTab] = useLocalState(context, 'clustertab', 1); if (!data.has_ai_net) { return ( @@ -60,21 +60,21 @@ export const NtosAIMonitor = (props, context) => { {tab === 1 && ( - - - - setClusterTab(1))}> - Dashboard - - setClusterTab(2))}> - Local Computing - - - + + + + setClusterTab(1))}> + Dashboard + + setClusterTab(2))}> + Local Computing + + + )} {(clusterTab === 1 && tab === 1) && ( @@ -371,8 +371,8 @@ const Networking = (props, context) => { {data.networking_devices.map((networker, index) => { return ( - act("control_networking", { ref: networker.ref })}>Control)}> - {networker.has_partner ? "ONLINE - CONNECTED TO " + networker.has_partner : "DISCONNECTED"} + act("control_networking", { ref: networker.ref })}>Control)}> + {networker.has_partner ? "ONLINE - CONNECTED TO " + networker.has_partner : "DISCONNECTED"} ); })} From e5ea32cea30b22d3fb03b5ee30c862683c5a0f94 Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Thu, 1 Sep 2022 17:47:56 +0200 Subject: [PATCH 54/66] Update yogstation.dme --- yogstation.dme | 2 -- 1 file changed, 2 deletions(-) diff --git a/yogstation.dme b/yogstation.dme index 1051fb6022e1..041ecacc8d26 100644 --- a/yogstation.dme +++ b/yogstation.dme @@ -2662,8 +2662,6 @@ #include "code\modules\modular_computers\file_system\program.dm" #include "code\modules\modular_computers\file_system\program_events.dm" #include "code\modules\modular_computers\file_system\programs\ainetworkinterface.dm" -#include "code\modules\modular_computers\file_system\programs\airestorer.dm" -#include "code\modules\modular_computers\file_system\programs\alarm.dm" #include "code\modules\modular_computers\file_system\programs\arcade.dm" #include "code\modules\modular_computers\file_system\programs\configurator.dm" #include "code\modules\modular_computers\file_system\programs\file_browser.dm" From 6922ea51ee5e1a5586951ffbfda90d430adc99b9 Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Thu, 1 Sep 2022 18:09:26 +0200 Subject: [PATCH 55/66] cs department --- _maps/map_files/YogStation/YogStation.dmm | 1933 ++++++++++++--------- 1 file changed, 1080 insertions(+), 853 deletions(-) diff --git a/_maps/map_files/YogStation/YogStation.dmm b/_maps/map_files/YogStation/YogStation.dmm index 13a8725706f1..0956cdcbec86 100644 --- a/_maps/map_files/YogStation/YogStation.dmm +++ b/_maps/map_files/YogStation/YogStation.dmm @@ -220,12 +220,6 @@ }, /turf/open/floor/plasteel, /area/security/prison) -"abx" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/ai/server_cabinet/prefilled, -/turf/open/floor/circuit/green/telecomms, -/area/ai_monitored/turret_protected/ai) "aby" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 8 @@ -1612,6 +1606,11 @@ "aic" = ( /turf/closed/wall/r_wall, /area/maintenance/fore/secondary) +"aif" = ( +/turf/open/floor/plating{ + icon_state = "platingdmg3" + }, +/area/space/nearstation) "aih" = ( /obj/structure/chair/comfy/black, /turf/open/floor/carpet, @@ -3389,18 +3388,6 @@ }, /turf/open/floor/plasteel/dark, /area/ai_monitored/security/armory) -"aue" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 1 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plating{ - icon_state = "platingdmg3" - }, -/area/maintenance/starboard/aft) "aug" = ( /obj/structure/table, /obj/item/storage/toolbox/electrical{ @@ -6660,22 +6647,6 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/aft) -"aMD" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/structure/cable{ - icon_state = "1-8" - }, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "aME" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 4; @@ -7820,15 +7791,6 @@ /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/vacant_room/commissary) -"aSy" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "aSG" = ( /obj/structure/table, /obj/item/stack/sheet/glass/fifty, @@ -13160,18 +13122,6 @@ "bCv" = ( /turf/closed/wall, /area/janitor) -"bCw" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 1 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "bCz" = ( /obj/machinery/vending/cigarette, /turf/open/floor/plasteel/dark, @@ -13973,22 +13923,6 @@ }, /turf/open/floor/plasteel, /area/engine/atmos_distro) -"bKB" = ( -/obj/structure/closet/emcloset, -/obj/structure/sign/warning/electricshock{ - pixel_y = -32 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 9 - }, -/obj/structure/cable{ - icon_state = "1-8" - }, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "bKG" = ( /obj/machinery/requests_console{ department = "EVA"; @@ -14852,23 +14786,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/medical/virology) -"bRR" = ( -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/airlock/research/glass{ - name = "Secondary AI Core"; - normalspeed = 0; - req_access_txt = "47" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "bSm" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ @@ -16095,10 +16012,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/wood, /area/medical/psych) -"chH" = ( -/obj/structure/closet/firecloset, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "chK" = ( /obj/structure/table, /obj/item/stack/sheet/metal/fifty, @@ -16145,6 +16058,12 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) +"cix" = ( +/obj/structure/table, +/obj/item/storage/box/donkpockets, +/obj/effect/turf_decal/trimline/purple/filled/line, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "ciN" = ( /obj/effect/spawner/structure/window/shutter, /turf/open/floor/plating, @@ -17264,6 +17183,19 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel/dark, /area/hydroponics) +"cvB" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/chair/office/light{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/effect/landmark/start/yogs/network_admin, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "cvR" = ( /obj/structure/chair{ dir = 4; @@ -17483,25 +17415,6 @@ }, /turf/open/floor/plasteel/dark/telecomms, /area/tcommsat/server) -"cyZ" = ( -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/airlock/hatch{ - name = "Hardware Workshop"; - req_access_txt = "61" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plasteel/grimy, -/area/tcommsat/computer) "czc" = ( /obj/machinery/door/airlock/highsecurity{ name = "AI Upload Access"; @@ -19066,6 +18979,14 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/plasteel, /area/security/courtroom) +"dbb" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/frame/machine{ + anchored = 1; + state = 2 + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) "dbt" = ( /obj/machinery/door/firedoor/border_only{ dir = 4 @@ -19110,6 +19031,13 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /turf/open/floor/plasteel/grimy, /area/tcommsat/computer) +"dcr" = ( +/obj/machinery/ai/server_cabinet/prefilled, +/obj/structure/ethernet_cable{ + icon_state = "0-8" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) "dcx" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 6 @@ -19277,6 +19205,16 @@ }, /turf/open/floor/plating, /area/ai_monitored/storage/satellite) +"dhq" = ( +/obj/structure/ethernet_cable{ + icon_state = "1-8" + }, +/obj/structure/ethernet_cable{ + icon_state = "1-4" + }, +/obj/machinery/light, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/secondarydatacore) "dhC" = ( /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/stripes/line{ @@ -19296,6 +19234,15 @@ }, /turf/open/floor/plating/airless, /area/space/nearstation) +"dhU" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "dio" = ( /obj/machinery/power/apc/highcap{ areastring = "/area/science/misc_lab"; @@ -20000,13 +19947,6 @@ }, /turf/open/floor/plasteel/dark, /area/ai_monitored/nuke_storage) -"dBH" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible{ - dir = 4 - }, -/obj/machinery/meter, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/secondarydatacore) "dBU" = ( /obj/machinery/light_switch{ pixel_x = 27 @@ -20161,15 +20101,6 @@ }, /turf/open/floor/plasteel/freezer, /area/crew_quarters/toilet) -"dFJ" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "dFX" = ( /obj/machinery/door/airlock/maintenance{ name = "Security Maintenance"; @@ -20500,16 +20431,6 @@ }, /turf/open/floor/plasteel, /area/science/misc_lab) -"dMA" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 1 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "dMJ" = ( /obj/machinery/advanced_airlock_controller{ dir = 8; @@ -21518,6 +21439,14 @@ /obj/structure/closet/emcloset, /turf/open/floor/plating, /area/maintenance/port/aft) +"ekq" = ( +/obj/item/stack/cable_coil, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/ethernet_cable{ + icon_state = "2-8" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) "ekt" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 @@ -22024,9 +21953,25 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) +"ewf" = ( +/obj/structure/ethernet_cable{ + icon_state = "2-4" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/secondarydatacore) "ewG" = ( /turf/closed/wall, /area/maintenance/solars/starboard/fore) +"ewJ" = ( +/obj/machinery/ai/networking{ + label = "Computer Science"; + roundstart_connection = "Main Core" + }, +/obj/structure/ethernet_cable{ + icon_state = "0-4" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/secondarydatacore) "ewO" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -22315,6 +22260,11 @@ /obj/effect/turf_decal/box/corners, /turf/open/floor/engine, /area/science/xenobiology) +"eCW" = ( +/obj/structure/rack, +/obj/effect/spawner/lootdrop/maintenance, +/turf/open/floor/plating, +/area/space/nearstation) "eDG" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ dir = 8 @@ -24054,6 +24004,16 @@ /obj/effect/turf_decal/trimline/yellow/filled/warning, /turf/open/floor/plasteel, /area/crew_quarters/fitness) +"foH" = ( +/obj/machinery/ai/data_core/primary, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/obj/structure/ethernet_cable{ + icon_state = "0-2" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) "fpR" = ( /obj/machinery/computer/shuttle/labor, /obj/effect/turf_decal/trimline/red/filled/line{ @@ -24117,18 +24077,6 @@ /obj/machinery/door/firedoor/border_only, /turf/open/floor/plating, /area/maintenance/starboard/aft) -"frD" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ - dir = 8 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "frH" = ( /obj/machinery/light/small{ dir = 8 @@ -24251,6 +24199,17 @@ }, /turf/open/floor/plasteel, /area/engine/engine_smes) +"ftt" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 8; + external_pressure_bound = 140; + pressure_checks = 0 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/secondarydatacore) "ftv" = ( /obj/machinery/airalarm{ pixel_y = 24 @@ -24427,6 +24386,22 @@ }, /turf/open/floor/plasteel, /area/science/misc_lab) +"fwR" = ( +/obj/machinery/power/terminal{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/purple/filled/warning{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "fxq" = ( /obj/machinery/light, /obj/machinery/modular_computer/telescreen/preset/medical{ @@ -24788,6 +24763,12 @@ }, /turf/open/floor/plasteel/white, /area/science/nanite) +"fER" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) "fFy" = ( /obj/structure/sign/warning/nosmoking{ pixel_y = 32 @@ -24840,18 +24821,6 @@ }, /turf/open/floor/plasteel/dark, /area/security/prison) -"fFO" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/computer/ai_resource_distribution{ - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "fFS" = ( /obj/structure/table/reinforced, /obj/machinery/door/firedoor/border_only{ @@ -25010,15 +24979,6 @@ }, /turf/open/floor/plating, /area/maintenance/port/aft) -"fIs" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "fIu" = ( /obj/machinery/door/airlock/public/glass{ name = "Central Access" @@ -25032,13 +24992,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/aft_starboard) -"fIH" = ( -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/door/firedoor/border_only, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "fIS" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 4 @@ -25351,6 +25304,26 @@ /obj/item/aiModule/reset, /turf/open/floor/circuit, /area/ai_monitored/turret_protected/ai_upload) +"fOB" = ( +/obj/structure/chair/office/dark{ + dir = 4 + }, +/obj/machinery/computer/security/telescreen{ + dir = 1; + name = "Telecomms Camera Monitor"; + network = list("tcomms"); + pixel_x = 30; + pixel_y = -37 + }, +/obj/item/radio/intercom{ + dir = 1; + freerange = 1; + name = "Station Intercom (Telecomms)"; + pixel_x = 28; + pixel_y = -26 + }, +/turf/open/floor/plasteel/grimy, +/area/tcommsat/computer) "fOS" = ( /obj/machinery/atmospherics/components/unary/vent_pump/siphon/layer4{ dir = 8 @@ -25983,12 +25956,6 @@ }, /turf/open/floor/wood, /area/library) -"gdI" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible{ - dir = 10 - }, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/secondarydatacore) "gdU" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -26194,6 +26161,18 @@ }, /turf/open/floor/plasteel, /area/security/prison) +"gkp" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) "gkA" = ( /obj/effect/landmark/start/medical_doctor, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ @@ -26291,19 +26270,6 @@ }, /turf/open/floor/plasteel/dark, /area/bridge) -"goW" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/power/apc/highcap{ - areastring = "/area/ai_monitored/secondarydatacore"; - dir = 4; - name = "AI Secondary Datacore"; - pixel_x = 24 - }, -/obj/structure/cable, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "goZ" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -26767,6 +26733,9 @@ }, /turf/open/floor/plasteel/white, /area/medical/paramedic) +"gAF" = ( +/turf/open/floor/plating, +/area/space) "gBa" = ( /obj/structure/cable{ icon_state = "1-4" @@ -26868,22 +26837,6 @@ }, /turf/open/floor/plasteel, /area/security/prison/hallway) -"gDs" = ( -/obj/machinery/doorButtons/access_button{ - idDoor = "secondary_aicore_interior"; - idSelf = "secondary_aicore_controller"; - name = "Secondary AI Core Access Button"; - pixel_x = -24; - pixel_y = 8; - req_one_access_txt = "30;70" - }, -/obj/structure/chair/office/light, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "gDD" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 8 @@ -27073,6 +27026,10 @@ }, /turf/open/floor/plasteel/white, /area/science/xenobiology) +"gId" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/plating, +/area/space) "gIj" = ( /obj/structure/sign/warning/vacuum/external, /obj/effect/spawner/structure/window/reinforced/shutter, @@ -27683,6 +27640,13 @@ /obj/effect/turf_decal/bot, /turf/open/floor/plasteel/white, /area/science/nanite) +"gWM" = ( +/obj/effect/turf_decal/trimline/purple/filled/line, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "gXs" = ( /obj/structure/lattice, /turf/open/space/basic, @@ -27871,12 +27835,6 @@ /obj/effect/turf_decal/trimline/purple/filled/warning, /turf/open/floor/plasteel/white, /area/science/research) -"hbO" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "hcu" = ( /obj/structure/table, /obj/item/storage/box/fancy/heart_box{ @@ -28024,6 +27982,15 @@ }, /turf/open/space/basic, /area/space) +"hew" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "hez" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/preopen{ @@ -28395,6 +28362,19 @@ }, /turf/open/floor/plating, /area/hallway/secondary/entry) +"hlq" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) +"hlx" = ( +/obj/structure/lattice, +/turf/open/space, +/area/space) "hlz" = ( /obj/structure/table, /obj/item/assembly/prox_sensor{ @@ -29448,10 +29428,6 @@ }, /turf/open/floor/plasteel, /area/engine/atmos_distro) -"hJq" = ( -/obj/machinery/ai/data_core/primary, -/turf/open/floor/circuit/green/telecomms, -/area/ai_monitored/turret_protected/ai) "hJu" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/light/small{ @@ -29708,15 +29684,6 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) -"hOU" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/computer/ai_server_console{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "hPk" = ( /obj/machinery/holopad, /turf/open/floor/plasteel/white, @@ -30230,19 +30197,6 @@ }, /turf/open/floor/plasteel/grimy, /area/ai_monitored/turret_protected/aisat_interior) -"hYY" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "hZg" = ( /obj/machinery/power/smes/engineering{ charge = 5e+006; @@ -30502,20 +30456,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) -"ief" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ - dir = 4; - external_pressure_bound = 120 - }, -/obj/machinery/airalarm/tcomms{ - dir = 4; - pixel_x = -24 - }, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/secondarydatacore) "ieh" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ @@ -30699,10 +30639,6 @@ }, /turf/open/floor/plasteel, /area/hydroponics) -"iiJ" = ( -/obj/machinery/ai/server_cabinet, -/turf/open/floor/circuit/green/telecomms/mainframe, -/area/ai_monitored/secondarydatacore) "iiO" = ( /obj/machinery/gulag_item_reclaimer{ pixel_y = 24 @@ -30712,6 +30648,10 @@ }, /turf/open/floor/plasteel, /area/security/processing) +"iiP" = ( +/obj/structure/closet/firecloset, +/turf/open/floor/plating, +/area/space) "ijm" = ( /obj/machinery/light/small{ dir = 4 @@ -30778,10 +30718,6 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/exit) -"ikV" = ( -/obj/machinery/ai/server_cabinet/prefilled, -/turf/open/floor/circuit/green/telecomms, -/area/ai_monitored/turret_protected/ai) "ilk" = ( /obj/structure/closet/secure_closet/captains, /turf/open/floor/carpet/blue, @@ -31270,6 +31206,12 @@ }, /turf/open/floor/plating, /area/maintenance/disposal) +"ivJ" = ( +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) "ivM" = ( /obj/machinery/light_switch{ pixel_y = 28 @@ -31543,6 +31485,15 @@ /obj/effect/spawner/lootdrop/grille_or_trash, /turf/open/floor/plating, /area/maintenance/aft) +"iBu" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) "iBC" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 @@ -31582,6 +31533,12 @@ }, /turf/open/floor/plating, /area/maintenance/aft) +"iCM" = ( +/obj/structure/ethernet_cable{ + icon_state = "1-4" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) "iCQ" = ( /obj/effect/turf_decal/trimline/yellow/filled/warning{ dir = 8 @@ -31645,6 +31602,9 @@ "iEt" = ( /turf/open/floor/plasteel, /area/escapepodbay) +"iEF" = ( +/turf/template_noop, +/area/space) "iEY" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 @@ -32293,6 +32253,13 @@ /obj/machinery/door/firedoor/border_only, /turf/open/floor/plasteel, /area/science/robotics/mechbay) +"iQM" = ( +/obj/structure/window/reinforced, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) "iQR" = ( /obj/item/wrench, /turf/open/floor/plating/airless, @@ -32350,27 +32317,6 @@ /obj/effect/turf_decal/trimline/yellow/filled/line, /turf/open/floor/plasteel, /area/construction/mining/aux_base) -"iRV" = ( -/obj/structure/chair/office/dark{ - dir = 4 - }, -/obj/machinery/computer/security/telescreen{ - dir = 1; - name = "Telecomms Camera Monitor"; - network = list("tcomms"); - pixel_x = 30; - pixel_y = -37 - }, -/obj/item/radio/intercom{ - dir = 1; - freerange = 1; - name = "Station Intercom (Telecomms)"; - pixel_x = 28; - pixel_y = -26 - }, -/obj/effect/landmark/start/yogs/network_admin, -/turf/open/floor/plasteel/grimy, -/area/tcommsat/computer) "iRY" = ( /obj/structure/table, /obj/item/flashlight{ @@ -32536,10 +32482,6 @@ }, /turf/open/floor/plating, /area/medical/paramedic) -"iVk" = ( -/obj/structure/girder, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "iVn" = ( /obj/structure/closet/crate{ icon_state = "crateopen" @@ -33101,6 +33043,13 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/fitness) +"jiH" = ( +/obj/structure/frame/machine{ + anchored = 1; + state = 2 + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) "jjr" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 @@ -33456,6 +33405,12 @@ icon_state = "platingdmg3" }, /area/maintenance/port) +"jqR" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ + external_pressure_bound = 120 + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/secondarydatacore) "jqV" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 @@ -33878,18 +33833,29 @@ /obj/effect/mapping_helpers/airlock/abandoned, /turf/open/floor/plating, /area/maintenance/aft) +"jyL" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/airlock/research/glass{ + name = "Computer Science"; + normalspeed = 0; + req_access_txt = "47" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "jzg" = ( /obj/structure/cable{ icon_state = "1-2" }, /turf/open/floor/plating, /area/maintenance/disposal/incinerator) -"jzm" = ( -/obj/structure/cable/yellow{ - icon_state = "2-4" - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "jzo" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ dir = 1 @@ -34324,6 +34290,13 @@ /obj/effect/turf_decal/siding/wood, /turf/open/floor/wood, /area/library) +"jIT" = ( +/obj/machinery/ai/data_core, +/obj/structure/ethernet_cable{ + icon_state = "0-8" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/secondarydatacore) "jJy" = ( /obj/structure/chair{ dir = 4 @@ -34549,20 +34522,6 @@ }, /turf/open/floor/plating, /area/hallway/secondary/exit) -"jPU" = ( -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 1 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "jQg" = ( /obj/effect/turf_decal/arrows/white{ color = "#99ccff"; @@ -34626,6 +34585,15 @@ /obj/structure/bookcase/random/religion, /turf/open/floor/carpet, /area/library) +"jRK" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 4 + }, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) "jRP" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 9 @@ -34680,18 +34648,6 @@ }, /turf/open/floor/plasteel, /area/hydroponics/garden) -"jSR" = ( -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, -/obj/machinery/door/airlock/external{ - req_access_txt = "13" - }, -/obj/machinery/atmospherics/pipe/layer_manifold{ - dir = 4 - }, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "jTj" = ( /obj/structure/chair/stool, /obj/effect/landmark/start/mime, @@ -35499,6 +35455,14 @@ /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/science/storage) +"kkT" = ( +/obj/structure/table, +/obj/machinery/microwave, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 10 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "kkW" = ( /obj/machinery/vending/wardrobe/jani_wardrobe, /obj/machinery/light{ @@ -35570,6 +35534,16 @@ }, /turf/open/floor/plasteel/dark, /area/maintenance/department/tcoms) +"kmG" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) "kmT" = ( /obj/machinery/button/door{ id = "kanyewest"; @@ -35773,6 +35747,18 @@ /obj/effect/turf_decal/trimline/red/filled/line, /turf/open/floor/plasteel, /area/security/checkpoint/engineering) +"kvY" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "kwm" = ( /obj/structure/lattice/catwalk, /obj/machinery/atmospherics/pipe/simple/orange/visible{ @@ -36178,6 +36164,13 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /turf/open/floor/plasteel/dark, /area/science/xenobiology) +"kDU" = ( +/obj/machinery/rack_creator, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/maintenance/starboard/aft) "kEh" = ( /obj/machinery/conveyor{ dir = 4; @@ -36428,12 +36421,6 @@ }, /turf/open/floor/carpet, /area/crew_quarters/fitness) -"kJz" = ( -/obj/machinery/atmospherics/pipe/manifold/general/visible{ - dir = 4 - }, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/secondarydatacore) "kJK" = ( /obj/structure/grille, /obj/structure/window{ @@ -36512,6 +36499,16 @@ icon_state = "platingdmg3" }, /area/maintenance/port) +"kLq" = ( +/obj/machinery/modular_computer/console/preset/netmin{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/purple/filled/line, +/obj/structure/ethernet_cable{ + icon_state = "0-2" + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "kLy" = ( /obj/item/stack/sheet/cardboard, /obj/effect/decal/cleanable/dirt, @@ -36743,21 +36740,6 @@ }, /turf/open/floor/engine, /area/maintenance/disposal/incinerator) -"kRp" = ( -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 - }, -/obj/machinery/door/airlock/external{ - req_access_txt = "13" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "kRv" = ( /turf/open/floor/carpet/blue, /area/bridge/meeting_room) @@ -36833,16 +36815,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/fore) -"kSZ" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/hidden, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "kTm" = ( /obj/machinery/portable_atmospherics/canister/nitrogen, /obj/structure/window/reinforced{ @@ -37143,12 +37115,6 @@ /obj/effect/turf_decal/trimline/yellow/filled/line, /turf/open/floor/plasteel, /area/hallway/primary/central) -"lbr" = ( -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "lbE" = ( /obj/machinery/light, /obj/effect/turf_decal/trimline/blue/filled/corner{ @@ -37662,6 +37628,12 @@ }, /turf/open/floor/plasteel, /area/security/main) +"lnd" = ( +/obj/structure/ethernet_cable{ + icon_state = "1-8" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/secondarydatacore) "lnf" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ @@ -38340,6 +38312,12 @@ }, /turf/open/floor/plasteel/dark/telecomms, /area/tcommsat/server) +"lFr" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) "lFG" = ( /obj/structure/chair/office/light{ dir = 1 @@ -38396,11 +38374,6 @@ /obj/structure/chair/sofa/right, /turf/open/floor/wood, /area/medical/psych) -"lHO" = ( -/obj/item/stack/cable_coil, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/circuit/green/telecomms, -/area/ai_monitored/turret_protected/ai) "lIb" = ( /obj/structure/sign/warning/electricshock{ pixel_y = 32 @@ -38563,6 +38536,16 @@ /obj/machinery/electrolyzer, /turf/open/floor/plasteel, /area/engine/atmos_distro) +"lMe" = ( +/obj/structure/window/reinforced, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) "lMg" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 @@ -38825,6 +38808,13 @@ }, /turf/open/floor/plasteel/dark, /area/engine/gravity_generator) +"lVx" = ( +/obj/structure/ethernet_cable{ + icon_state = "0-8" + }, +/obj/machinery/ai/server_cabinet/prefilled, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/secondarydatacore) "lVL" = ( /obj/machinery/light, /obj/structure/sign/warning/electricshock{ @@ -38894,6 +38884,10 @@ /obj/effect/turf_decal/trimline/brown/filled/line, /turf/open/floor/plasteel, /area/quartermaster/qm) +"lWL" = ( +/obj/structure/table, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "lXG" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, @@ -38933,6 +38927,15 @@ }, /turf/open/floor/plating, /area/medical/genetics) +"lYb" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 4 + }, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/secondarydatacore) "lYc" = ( /obj/machinery/door/airlock/highsecurity{ name = "Gravity Generator"; @@ -39127,6 +39130,13 @@ }, /turf/open/floor/wood, /area/library) +"maT" = ( +/obj/machinery/rnd/production/circuit_imprinter/department/netmin, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "maV" = ( /obj/structure/grille, /obj/structure/window{ @@ -39750,6 +39760,14 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/hallway/secondary/entry) +"mnk" = ( +/obj/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) "mnl" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 8 @@ -40797,6 +40815,15 @@ }, /turf/open/floor/plasteel/white, /area/medical/virology) +"mFl" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) "mFA" = ( /obj/effect/landmark/event_spawn, /turf/open/floor/plasteel, @@ -40877,6 +40904,25 @@ }, /turf/open/floor/plasteel, /area/maintenance/disposal/incinerator) +"mHv" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/airlock/hatch{ + name = "Telecommunications"; + req_access_txt = "61" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/grimy, +/area/tcommsat/computer) "mHx" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 8; @@ -41275,10 +41321,6 @@ }, /turf/open/floor/wood, /area/crew_quarters/heads/captain) -"mSg" = ( -/obj/machinery/atmospherics/pipe/manifold/general/visible, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/secondarydatacore) "mSl" = ( /obj/structure/closet/l3closet/scientist, /obj/effect/turf_decal/trimline/purple/filled/line{ @@ -42385,6 +42427,18 @@ /obj/effect/turf_decal/trimline/yellow/filled/warning, /turf/open/floor/plasteel, /area/construction/mining/aux_base) +"nnq" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/ai/networking{ + label = "Main Core"; + roundstart_connection = "Computer Science" + }, +/obj/structure/ethernet_cable{ + icon_state = "0-4" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) "nnx" = ( /obj/machinery/holopad, /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ @@ -43063,13 +43117,14 @@ }, /turf/open/floor/plasteel, /area/security/prison/hallway) -"nDW" = ( -/obj/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden, -/obj/structure/cable/yellow{ - icon_state = "4-8" +"nEq" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 4 }, -/turf/open/floor/plasteel/dark/telecomms, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/catwalk_floor, /area/ai_monitored/turret_protected/ai) "nEu" = ( /obj/effect/turf_decal/loading_area{ @@ -43270,13 +43325,6 @@ }, /turf/open/floor/plating, /area/maintenance/aft) -"nJj" = ( -/obj/machinery/holopad, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "nJl" = ( /obj/effect/turf_decal/pool{ dir = 8 @@ -43443,6 +43491,10 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/white, /area/medical/sleeper) +"nMp" = ( +/obj/structure/lattice/catwalk, +/turf/open/space, +/area/space) "nNC" = ( /obj/machinery/meter, /obj/machinery/atmospherics/pipe/manifold/cyan/hidden{ @@ -43683,15 +43735,6 @@ }, /turf/open/floor/plasteel/white, /area/science/research) -"nTI" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "nTR" = ( /obj/item/cigbutt/roach, /turf/open/floor/plating, @@ -44261,6 +44304,9 @@ }, /turf/open/floor/plating, /area/storage/tech) +"ofw" = ( +/turf/closed/wall, +/area/space) "ogb" = ( /obj/effect/turf_decal/stripes/corner{ dir = 4 @@ -44549,6 +44595,10 @@ }, /turf/open/floor/plasteel, /area/clerk) +"omM" = ( +/obj/structure/grille, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "ong" = ( /obj/machinery/light{ dir = 1 @@ -44911,6 +44961,13 @@ /obj/effect/landmark/stationroom/box/testingsite, /turf/open/space/basic, /area/space) +"ouJ" = ( +/obj/effect/spawner/structure/window/reinforced/tinted, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/turf/open/floor/plating, +/area/ai_monitored/secondarydatacore) "ouY" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 @@ -45605,6 +45662,9 @@ }, /turf/open/floor/carpet/blue, /area/crew_quarters/heads/captain) +"oKU" = ( +/turf/open/floor/catwalk_floor, +/area/ai_monitored/secondarydatacore) "oLf" = ( /obj/machinery/door/firedoor/border_only{ dir = 1 @@ -45929,6 +45989,32 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) +"oSh" = ( +/obj/machinery/power/apc/highcap{ + areastring = "/area/ai_monitored/secondarydatacore"; + dir = 4; + name = "AI Secondary Datacore"; + pixel_x = 24 + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/structure/table, +/obj/item/circuitboard/machine/server_cabinet, +/obj/item/circuitboard/machine/ai_data_core, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Secondary AI Core"; + dir = 8; + network = list("ss13","rd") + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "oSn" = ( /obj/machinery/door/airlock/hatch{ autoclose = 0; @@ -46100,6 +46186,13 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/dorms) +"oVR" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 6 + }, +/obj/item/twohanded/required/kirbyplants/random, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "oWa" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, @@ -46595,20 +46688,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/medical/sleeper) -"piV" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 1 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plating{ - icon_state = "platingdmg3" - }, -/area/maintenance/starboard/aft) "pjc" = ( /obj/effect/turf_decal/arrows/white{ color = "#99ccff"; @@ -47515,6 +47594,10 @@ /obj/effect/turf_decal/trimline/blue/filled/corner, /turf/open/floor/plasteel, /area/hallway/primary/central) +"pAB" = ( +/obj/machinery/space_heater, +/turf/open/floor/plating, +/area/space) "pAL" = ( /turf/open/floor/plasteel, /area/security/checkpoint/auxiliary) @@ -47566,10 +47649,6 @@ }, /turf/open/space, /area/solar/port/aft) -"pDa" = ( -/obj/machinery/ai/data_core, -/turf/open/floor/circuit/green/telecomms/mainframe, -/area/ai_monitored/secondarydatacore) "pDq" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ dir = 1 @@ -48409,28 +48488,6 @@ }, /turf/open/floor/plasteel/dark, /area/security/courtroom) -"pYv" = ( -/obj/machinery/camera{ - c_tag = "Secondary AI Core"; - dir = 8; - network = list("ss13","rd") - }, -/obj/machinery/airalarm{ - pixel_y = 24 - }, -/obj/structure/extinguisher_cabinet{ - pixel_x = 27 - }, -/obj/machinery/power/smes/engineering{ - charge = 5e+006; - input_level = 25000; - output_level = 20000 - }, -/obj/structure/cable{ - icon_state = "0-2" - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "pYC" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, @@ -48653,6 +48710,15 @@ }, /turf/open/floor/plasteel, /area/hydroponics/garden) +"qcP" = ( +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/abandoned, +/obj/machinery/door/airlock/maintenance_hatch, +/turf/open/floor/plating, +/area/space/nearstation) "qdv" = ( /turf/open/floor/carpet, /area/crew_quarters/fitness) @@ -48935,18 +49001,6 @@ }, /turf/open/floor/plasteel/dark, /area/security/courtroom) -"qjZ" = ( -/obj/machinery/power/apc{ - areastring = "/area/maintenance/starboard/aft"; - dir = 1; - name = "Starboard Quarter Maintenance APC"; - pixel_y = 23 - }, -/obj/structure/cable{ - icon_state = "0-2" - }, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "qko" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 @@ -49392,6 +49446,10 @@ }, /turf/open/floor/plasteel, /area/security/brig) +"quc" = ( +/obj/effect/spawner/structure/window/reinforced/shutter, +/turf/open/floor/plating, +/area/space) "qum" = ( /obj/structure/chair{ dir = 4 @@ -50072,12 +50130,10 @@ }, /turf/open/floor/plating, /area/maintenance/solars/starboard/fore) -"qJg" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/turret_protected/ai) +"qJk" = ( +/obj/structure/closet/firecloset, +/turf/open/floor/plating, +/area/space/nearstation) "qJt" = ( /obj/machinery/door/firedoor/border_only{ dir = 1 @@ -50938,6 +50994,13 @@ }, /turf/open/floor/plasteel/freezer, /area/security/prison) +"raf" = ( +/obj/machinery/holopad, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) "ras" = ( /obj/machinery/atmospherics/pipe/simple/cyan/hidden{ dir = 4 @@ -51572,13 +51635,6 @@ /obj/machinery/light, /turf/open/floor/plasteel, /area/crew_quarters/dorms) -"rqW" = ( -/obj/structure/window/reinforced, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "rqZ" = ( /obj/machinery/door/poddoor{ id = "QMLoaddoor"; @@ -51740,6 +51796,28 @@ }, /turf/open/floor/plating, /area/ai_monitored/storage/satellite) +"ruU" = ( +/obj/machinery/camera{ + c_tag = "Secondary AI Core"; + dir = 8; + network = list("ss13","rd") + }, +/obj/machinery/airalarm{ + pixel_y = 24 + }, +/obj/machinery/power/smes/engineering{ + charge = 5e+006; + input_level = 25000; + output_level = 20000 + }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "ruW" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper, /obj/machinery/door/airlock/security/glass{ @@ -52040,6 +52118,12 @@ "rCG" = ( /turf/closed/wall/r_wall, /area/hallway/primary/aft) +"rCK" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 8 + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/secondarydatacore) "rCQ" = ( /obj/machinery/atmospherics/components/binary/pump/on{ dir = 1; @@ -52263,15 +52347,6 @@ /obj/machinery/teleport/station, /turf/open/floor/plating, /area/teleporter) -"rGM" = ( -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/structure/cable/yellow{ - icon_state = "1-8" - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/ai_monitored/turret_protected/ai) "rHf" = ( /turf/open/floor/engine/vacuum, /area/engine/atmos_distro) @@ -52797,6 +52872,21 @@ }, /turf/open/floor/plasteel/white, /area/medical/medbay/central) +"rTH" = ( +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/machinery/door/airlock/external{ + req_access_txt = "13" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plating, +/area/space/nearstation) "rTK" = ( /obj/machinery/mineral/ore_redemption{ input_dir = 2; @@ -53232,6 +53322,18 @@ }, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/ai_upload_foyer) +"sbF" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "sbG" = ( /obj/machinery/atmospherics/pipe/simple/cyan/hidden{ dir = 4 @@ -53426,6 +53528,9 @@ /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/science/storage) +"shx" = ( +/turf/open/floor/plating, +/area/space/nearstation) "shz" = ( /obj/machinery/smartfridge/organ, /turf/closed/wall, @@ -53617,6 +53722,15 @@ }, /turf/open/floor/plasteel/white, /area/medical/medbay/lobby) +"smn" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) "smE" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ dir = 8 @@ -53724,6 +53838,10 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/maintenance/starboard/aft) +"snG" = ( +/obj/effect/spawner/structure/window/reinforced/tinted, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "snN" = ( /obj/effect/turf_decal/trimline/red/filled/warning{ dir = 4 @@ -53733,6 +53851,16 @@ "soo" = ( /turf/closed/wall, /area/engine/atmos_distro) +"sox" = ( +/obj/structure/ethernet_cable{ + icon_state = "1-4" + }, +/obj/structure/ethernet_cable{ + icon_state = "1-8" + }, +/obj/machinery/light, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/secondarydatacore) "soM" = ( /obj/item/twohanded/required/kirbyplants/random, /obj/effect/turf_decal/trimline/purple/filled/line{ @@ -53826,6 +53954,21 @@ "ssx" = ( /turf/open/floor/plating, /area/maintenance/disposal/incinerator) +"ssB" = ( +/obj/structure/sign/warning/electricshock{ + pixel_y = -32 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 9 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "ssK" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 @@ -54121,21 +54264,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) -"szB" = ( -/obj/structure/sign/warning/vacuum/external{ - pixel_y = -32 - }, -/obj/machinery/atmospherics/components/binary/dp_vent_pump/layer2{ - dir = 4 - }, -/obj/machinery/advanced_airlock_controller{ - pixel_y = 24 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "sAl" = ( /obj/machinery/door/airlock/engineering{ name = "Starboard Bow Solar Access"; @@ -54759,12 +54887,6 @@ }, /turf/open/floor/plasteel/dark, /area/bridge) -"sLZ" = ( -/obj/machinery/atmospherics/components/unary/thermomachine/freezer/on{ - dir = 4 - }, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/secondarydatacore) "sMh" = ( /obj/structure/filingcabinet, /obj/machinery/light_switch{ @@ -55127,6 +55249,13 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/visible, /turf/open/floor/plasteel/dark, /area/engine/atmos_distro) +"sVC" = ( +/obj/machinery/computer/ai_overclocking, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/maintenance/starboard/aft) "sVM" = ( /obj/structure/chair{ dir = 4 @@ -55227,6 +55356,14 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) +"sXo" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1; + external_pressure_bound = 140; + pressure_checks = 0 + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/secondarydatacore) "sXp" = ( /obj/structure/sign/warning/nosmoking{ pixel_y = 32 @@ -55636,6 +55773,14 @@ }, /turf/open/floor/plasteel, /area/engine/atmos_distro) +"tcu" = ( +/obj/structure/table, +/obj/item/storage/toolbox/mechanical, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/maintenance/starboard/aft) "tcS" = ( /obj/machinery/door/airlock/public/glass{ name = "Central Access" @@ -55990,6 +56135,15 @@ }, /turf/open/floor/plasteel, /area/maintenance/disposal/incinerator) +"tlL" = ( +/obj/machinery/power/apc{ + areastring = "/area/maintenance/starboard/aft"; + dir = 4; + name = "Starboard Quarter Maintenance APC"; + pixel_x = 24 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "tlN" = ( /obj/machinery/power/smes/engineering, /obj/structure/cable{ @@ -56421,12 +56575,6 @@ }, /turf/open/floor/plasteel/white, /area/science/mixing) -"twt" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible{ - dir = 4 - }, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/secondarydatacore) "twv" = ( /obj/effect/spawner/structure/window, /obj/machinery/door/firedoor/border_only{ @@ -56574,6 +56722,9 @@ }, /turf/open/floor/plasteel/dark, /area/engine/atmos_distro) +"tzz" = ( +/turf/closed/wall/r_wall, +/area/space) "tzJ" = ( /obj/machinery/computer/warrant{ dir = 8 @@ -56865,6 +57016,15 @@ }, /turf/open/floor/plating, /area/maintenance/aft) +"tHr" = ( +/obj/structure/ethernet_cable{ + icon_state = "2-8" + }, +/obj/structure/ethernet_cable{ + icon_state = "2-4" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/secondarydatacore) "tHJ" = ( /obj/machinery/camera{ c_tag = "AI Chamber - Port"; @@ -57060,6 +57220,10 @@ }, /turf/open/floor/plasteel, /area/maintenance/disposal/incinerator) +"tLY" = ( +/obj/machinery/atmospherics/pipe/manifold/general/visible, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/secondarydatacore) "tMj" = ( /obj/machinery/status_display/evac{ layer = 4; @@ -57346,17 +57510,6 @@ }, /turf/open/floor/plasteel, /area/clerk) -"tQv" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 8; - external_pressure_bound = 140; - pressure_checks = 0 - }, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/secondarydatacore) "tQD" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, @@ -57621,9 +57774,6 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) -"tXb" = ( -/turf/open/floor/circuit/green/telecomms/mainframe, -/area/ai_monitored/secondarydatacore) "tXk" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 4 @@ -57918,6 +58068,10 @@ }, /turf/open/floor/plasteel/dark, /area/bridge) +"ubD" = ( +/obj/effect/spawner/structure/window/reinforced/tinted, +/turf/open/floor/plating, +/area/ai_monitored/secondarydatacore) "ubY" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -58178,6 +58332,11 @@ }, /turf/open/floor/plasteel, /area/security/checkpoint/auxiliary) +"uhp" = ( +/obj/effect/spawner/structure/window/reinforced/tinted, +/obj/machinery/atmospherics/pipe/simple/general/visible, +/turf/open/floor/plating, +/area/ai_monitored/secondarydatacore) "uhy" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ @@ -58793,6 +58952,18 @@ }, /turf/open/floor/plating, /area/maintenance/solars/port/aft) +"uwh" = ( +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/machinery/door/airlock/external{ + req_access_txt = "13" + }, +/obj/machinery/atmospherics/pipe/layer_manifold{ + dir = 4 + }, +/turf/open/floor/plating, +/area/space/nearstation) "uwQ" = ( /obj/machinery/airalarm{ dir = 8; @@ -58808,6 +58979,15 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/heads/hop) +"uxi" = ( +/obj/machinery/atmospherics/pipe/manifold/general/visible{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/secondarydatacore) "uxv" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -58876,6 +59056,14 @@ }, /turf/open/floor/plating, /area/maintenance/port/aft) +"uzk" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible, +/obj/machinery/airalarm/tcomms{ + dir = 4; + pixel_x = -24 + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/secondarydatacore) "uzs" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 10 @@ -59141,30 +59329,6 @@ }, /turf/open/floor/plasteel, /area/maintenance/disposal/incinerator) -"uFS" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 4 - }, -/obj/machinery/doorButtons/access_button{ - idDoor = "secondary_aicore_exterior"; - idSelf = "secondary_aicore_controller"; - name = "Secondary AI Core Access Button"; - pixel_x = -24; - pixel_y = 8; - req_one_access_txt = "30;70" - }, -/obj/machinery/doorButtons/airlock_controller{ - idExterior = "secondary_aicore_exterior"; - idInterior = "secondary_aicore_interior"; - idSelf = "secondary_aicore_controller"; - name = "Secondary AI Core Access Console"; - pixel_x = -26; - pixel_y = -6; - req_one_access_txt = "30;70" - }, -/obj/machinery/portable_atmospherics/canister/nitrogen, -/turf/open/floor/circuit/telecomms/server, -/area/ai_monitored/secondarydatacore) "uFW" = ( /obj/effect/landmark/event_spawn, /turf/open/floor/plating, @@ -59800,6 +59964,11 @@ /obj/effect/turf_decal/trimline/red/filled/line, /turf/open/floor/plasteel, /area/security/brig) +"uUx" = ( +/obj/effect/turf_decal/trimline/purple/filled/line, +/obj/machinery/atmospherics/components/unary/thermomachine/freezer/on, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "uUY" = ( /obj/machinery/door/poddoor/preopen{ id = "Biohazard"; @@ -60010,6 +60179,18 @@ /obj/effect/turf_decal/trimline/blue/filled/corner, /turf/open/floor/plasteel/white, /area/medical/paramedic) +"uXG" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ + dir = 1; + external_pressure_bound = 120 + }, +/obj/machinery/camera{ + c_tag = "Secondary AI Core"; + dir = 4; + network = list("ss13","rd") + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/secondarydatacore) "uYk" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -60695,6 +60876,17 @@ }, /turf/open/floor/plasteel, /area/security/main) +"vpU" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = 27 + }, +/obj/structure/table, +/obj/item/stack/ethernet_coil, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 5 + }, +/turf/open/floor/plasteel/dark, +/area/space) "vra" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -61568,6 +61760,13 @@ }, /turf/open/floor/plating, /area/quartermaster/miningdock) +"vIX" = ( +/obj/structure/ethernet_cable{ + icon_state = "0-4" + }, +/obj/machinery/ai/server_cabinet, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/secondarydatacore) "vIY" = ( /obj/structure/table/wood, /obj/structure/mirror{ @@ -61648,15 +61847,6 @@ }, /turf/open/floor/plasteel/white, /area/medical/medbay/central) -"vKX" = ( -/obj/machinery/door/airlock/maintenance_hatch, -/obj/effect/mapping_helpers/airlock/abandoned, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "vLb" = ( /obj/item/twohanded/required/kirbyplants/random, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ @@ -61785,6 +61975,10 @@ }, /turf/open/floor/plating, /area/maintenance/aft) +"vOD" = ( +/obj/machinery/atmospherics/pipe/manifold4w/general/visible, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/secondarydatacore) "vOQ" = ( /obj/machinery/door/firedoor/border_only{ dir = 1 @@ -62256,6 +62450,15 @@ }, /turf/open/floor/plasteel/white, /area/medical/sleeper) +"vXT" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/abandoned, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/turf/open/floor/plating, +/area/space/nearstation) "vXV" = ( /obj/structure/chair/comfy/brown{ dir = 1 @@ -62572,14 +62775,6 @@ }, /turf/open/floor/plasteel, /area/quartermaster/office) -"wer" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/frame/machine{ - anchored = 1; - state = 2 - }, -/turf/open/floor/circuit/green/telecomms, -/area/ai_monitored/turret_protected/ai) "weD" = ( /obj/machinery/disposal/deliveryChute{ dir = 8 @@ -62856,6 +63051,29 @@ }, /turf/open/floor/plasteel/white, /area/medical/virology) +"wls" = ( +/obj/machinery/doorButtons/access_button{ + idDoor = "secondary_aicore_interior"; + idSelf = "secondary_aicore_controller"; + name = "Secondary AI Core Access Button"; + pixel_x = -24; + pixel_y = 8; + req_one_access_txt = "30;70" + }, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "wlG" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 6 @@ -62980,13 +63198,6 @@ }, /turf/open/floor/plasteel/white, /area/medical/chemistry) -"wnI" = ( -/obj/structure/frame/machine{ - anchored = 1; - state = 2 - }, -/turf/open/floor/circuit/green/telecomms/mainframe, -/area/ai_monitored/secondarydatacore) "wnN" = ( /obj/structure/table, /obj/item/storage/toolbox/mechanical{ @@ -63523,6 +63734,12 @@ /obj/effect/spawner/structure/window/reinforced/shutter, /turf/open/floor/plating, /area/engine/engineering) +"wyD" = ( +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) "wAc" = ( /obj/effect/spawner/structure/window/reinforced/shutter, /turf/open/floor/plating, @@ -63564,6 +63781,12 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/maintenance/starboard/aft) +"wAV" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 4 + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/secondarydatacore) "wAX" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ dir = 1 @@ -64955,6 +65178,21 @@ }, /turf/open/floor/plating, /area/maintenance/department/medical/morgue) +"xkK" = ( +/obj/structure/sign/warning/vacuum/external{ + pixel_y = -32 + }, +/obj/machinery/atmospherics/components/binary/dp_vent_pump/layer2{ + dir = 4 + }, +/obj/machinery/advanced_airlock_controller{ + pixel_y = 24 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plating, +/area/space/nearstation) "xkN" = ( /obj/machinery/chem_heater, /obj/effect/turf_decal/trimline/yellow/filled/line{ @@ -65324,6 +65562,12 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/maintenance/starboard/aft) +"xtY" = ( +/obj/effect/turf_decal/trimline/purple/filled/line, +/obj/machinery/portable_atmospherics/canister/nitrogen, +/obj/machinery/atmospherics/components/unary/portables_connector/visible, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "xul" = ( /turf/open/floor/wood, /area/bridge/meeting_room) @@ -66259,22 +66503,6 @@ }, /turf/open/floor/plating, /area/maintenance/port/aft) -"xTe" = ( -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 1 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "xTZ" = ( /obj/structure/cloth_curtain{ color = "#99ccff" @@ -66338,13 +66566,6 @@ }, /turf/open/floor/plasteel/dark, /area/engine/atmos_distro) -"xUW" = ( -/obj/structure/frame/machine{ - anchored = 1; - state = 2 - }, -/turf/open/floor/circuit/green/telecomms, -/area/ai_monitored/turret_protected/ai) "xVm" = ( /obj/effect/turf_decal/trimline/purple/filled/corner{ dir = 4 @@ -66566,6 +66787,12 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) +"xYI" = ( +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) "xZb" = ( /obj/structure/sign/warning/securearea, /turf/closed/wall/r_wall, @@ -66851,15 +67078,6 @@ }, /turf/open/floor/plating, /area/maintenance/port/aft) -"yeN" = ( -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/effect/mapping_helpers/airlock/abandoned, -/obj/machinery/door/airlock/maintenance_hatch, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "yfg" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -67143,6 +67361,9 @@ /obj/effect/turf_decal/trimline/purple/filled/line, /turf/open/floor/plasteel/white, /area/medical/genetics) +"yhP" = ( +/turf/closed/wall/r_wall, +/area/maintenance/starboard/aft) "yhS" = ( /obj/structure/sign/warning/radiation/rad_area{ pixel_x = -32 @@ -67287,6 +67508,12 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/aft) +"yll" = ( +/obj/structure/ethernet_cable{ + icon_state = "4-8" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/secondarydatacore) "ylH" = ( /obj/machinery/sparker{ id = "testigniter"; @@ -97008,7 +97235,7 @@ dcc qsZ lFe rEb -cyZ +mHv kLA sYk rtp @@ -97519,7 +97746,7 @@ fPM wKU bVJ rzx -iRV +fOB aSV agz aJw @@ -109405,11 +109632,11 @@ cva cva cva gQa -jzm -fIs -rGM -hbO -lbr +ivJ +hlq +mFl +lFr +xYI yap cva cva @@ -109660,15 +109887,15 @@ pEf pEf cva cva -abx +nnq nLw -nDW +mnk enZ nSN xlV -dFJ +smn rjo -wer +dbb cva cva pEf @@ -109917,15 +110144,15 @@ pEf koy cva cva -lHO -rjo -rqW -rjo -hJq -sAu -dFJ -rjo -xlV +ekq +jRK +lMe +jRK +foH +wyD +gkp +jRK +iCM cva cva vUh @@ -110174,15 +110401,15 @@ pEf pEf cva cva -xUW +jiH rjo -rqW +iQM jTn nVK enZ -kSZ +kmG pyn -ikV +dcr cva cva pEf @@ -110433,11 +110660,11 @@ cva cva cva mWE -qJg -aSy -nJj -nTI -pnR +fER +nEq +raf +iBu +xYI kcr cva cva @@ -116829,7 +117056,7 @@ atN atN atN atN -cOe +yhP fXS cOe gpq @@ -117081,12 +117308,12 @@ iKk oGM mwf oxg -uFS -sLZ -ief -tXb -oGM -oGM +jqR +uzk +uxi +uXG +ewJ +tzz fXS cOe gpq @@ -117338,12 +117565,12 @@ rnA oGM mQY nlV -gdI -kJz -mSg -wnI -oGM -oGM +oKU +oKU +wAV +ewf +dhq +tzz fXS cOe cNW @@ -117595,12 +117822,12 @@ eEp oGM fKM oGM -oxg -oxg -dBH -pDa -oGM -oGM +snG +ubD +wAV +yll +jIT +tzz fXS cNW cNW @@ -117849,15 +118076,15 @@ alj aXb xix uVI -bRR -hYY -gDs -fFO -oxg -twt -wnI -oGM -oGM +jyL +fwR +wls +kkT +ubD +wAV +yll +vIX +tzz fXS bNA cOe @@ -118107,14 +118334,14 @@ pWH pgx gxq oGM -pYv -goW -hOU -oxg -tQv -iiJ -oGM -oGM +ruU +kvY +cix +ubD +rCK +tHr +sox +tzz fXS cOe cOe @@ -118364,14 +118591,14 @@ aRv bQZ bQZ oGM -oGM -oGM -oGM -oGM -oGM -oGM -oGM -oGM +maT +sbF +gWM +ubD +wAV +yll +lVx +tzz fXS cjE bMB @@ -118618,17 +118845,17 @@ cOe cOe alZ aMC -cOe thv cOe -cOe -cOe -cOe -ezr -oGM -oGM -oGM -cOe +yhP +kDU +cvB +kLq +ouJ +lYb +lnd +tzz +tzz fXS cjD cjD @@ -118872,20 +119099,20 @@ lNU cNW qHY cNW -cNW +bNB cdR xHc -bNB -cNW -cOe -cOe -cNW -iVk -cNW cNW -ceR -fIH cOe +yhP +sVC +hew +uUx +uhp +tLY +oKU +tzz +lWL mfN cjD bQq @@ -119128,21 +119355,21 @@ axl cNW cNW xSu -bMB cNW cNW -aMC -cNW cNW -cOe -cOe -bNB -cOe +aMC cNW -axl cOe -cNW -qjZ +yhP +tcu +dhU +xtY +uhp +vOD +sXo +tzz +bNA uSq kQW iwk @@ -119385,22 +119612,22 @@ cNZ cNZ bSm aWg -cNZ -cNZ -cNZ -aMD -dMA -jPU -dMA -aue -dMA -dMA -dMA -frD -piV -xTe -bCw -bKB +gAF +gId +ofw +gAF +ofw +gAF +tzz +vpU +oSh +oVR +ubD +ftt +oKU +tzz +pAB +ssB cjD shT clz @@ -119642,22 +119869,22 @@ nex cNW cNW cNW +cOe +cOe cNW +cOe cNW -woo -cNW -cNW -cNW -cNW -cNW -cNW -cNW -cNW -umE -cNW -cNW -arG -cNW +cOe +yhP +yhP +yhP +yhP +yhP +yhP +yhP +yhP +cOe +cOe cjD cjD cjD @@ -119899,22 +120126,22 @@ iKq iKq eoH cNW -cou -cou -cae -cmo -cNW -iKq -iKq -cCG -cNW -ccW -hLb -jjr -cNW -iKq -iKq -hNs +cOe +cOe +cOe +cOe +cOe +cOe +cOe +cOe +cOe +cOe +cOe +cOe +cOe +cOe +ceR +cOe cNW gXs aaf @@ -120158,20 +120385,20 @@ iKq euJ cOe cOe -cae cOe -vKX -iKq -iKq -iKq -yeN +cNW +ezr cOe -wZs -jjr +cOe +axl cNW -iKq -iKq -iKq +bNB +cOe +cOe +omM +tlL +cOe +cdR cNW aaa aaa @@ -120413,22 +120640,22 @@ iKq iKq iKq cNW -chH +cNW +cNW +woo cNW cNW cNW cNW -iKq -iKq -iKq cNW -chH -cOe -tPY cNW -iKq -iKq -iKq +cNW +cNW +umE +cNW +cNW +arG +cNW cNW gXs gXs @@ -120670,22 +120897,22 @@ cNW bPp bPp cNW +cou +cou +aif +eCW cNW +iKq +iKq +cCG cNW -aaf -pEf -cNW -bPp -bPp -bPp -cNW -cNW -cNW -kRp +ccW +hLb +jjr cNW iKq iKq -iKq +hNs cNW aoV aaa @@ -120925,20 +121152,20 @@ aaf aaa aaa aaf -aaa -aaa -aoV -aaf -aaf -pEf -aaf -aaa -aaa -aaa -aaf -aaf -cNW -szB +aJt +ofw +gAF +shx +aif +shx +vXT +iEF +iEF +iEF +qcP +shx +wZs +jjr cNW iKq iKq @@ -121183,23 +121410,23 @@ aaa aaa aaf aaa -aaa -aoV -aaa -aaa -aag -aaf -aaa -aaa -aaa -aaa -aaf -cNW -jSR -cNW -cNW -cNW +ofw +iiP +ofw +ofw +atS +atS +iEF +iEF +iEF +ofw +qJk +cOe +tPY cNW +iKq +iKq +iKq cNW gXs gXs @@ -121440,24 +121667,24 @@ aaa aaa aaf aaa -aaa -aaa -aaa -aaa +ofw +ofw +ofw +hlx pEf -aaf -aaa -aaa -aaa -aaa -aaf -aag -aag -aag -aoV -aaa -aaa -aoV +atS +quc +quc +quc +ofw +atS +atS +rTH +atS +iEF +iEF +iEF +ofw aaa aaa aaa @@ -121698,23 +121925,23 @@ aaa aag aaa aaa -aaa -aaa -aaa +aoV +hlx +hlx pEf +hlx aaa aaa aaa -aaa -aaa -aaa -aaa -aag -aaa -aaa -aaa -aaa -aaa +hlx +hlx +ofw +xkK +ofw +iEF +iEF +iEF +ofw aaa aaa aaa @@ -121955,23 +122182,23 @@ aaa aag aaa aaa +aoV aaa aaa -aaa -pEf -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaf -aaa +aag +hlx aaa aaa aaa aaa +hlx +ofw +uwh +ofw +ofw +ofw +ofw +ofw aaa aaa aaa @@ -122215,20 +122442,20 @@ aaa aaa aaa aaa -aaf -aaa -aaa -aaa -aaa -aaa -aaa +pEf +hlx aaa -aaf aaa aaa aaa +hlx +nMp +aag +nMp +aoV aaa aaa +aoV aaa aaa aaa @@ -122472,15 +122699,15 @@ aaa aaa aaa aaa +eqR aaa aaa aaa aaa -aae aaa aaa aaa -aaf +aag aaa aaa aaa @@ -122729,7 +122956,7 @@ aaa aaa aaa aaa -aaa +eqR aaa aaa aaa @@ -122986,6 +123213,7 @@ aaa aaa aaa aaa +hlx aaa aaa aaa @@ -122993,8 +123221,7 @@ aaa aaa aaa aaa -aaa -aaa +hlx aaa aaa aaa @@ -123247,11 +123474,11 @@ aaa aaa aaa aaa +aae aaa aaa aaa -aaa -aaa +hlx aaa aaa aaa @@ -123508,7 +123735,7 @@ aaa aaa aaa aaa -aaa +hlx aaa aaa aaa From 26a2cc769eb366533694ed420d7a64f02cbe2988 Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Thu, 1 Sep 2022 18:15:39 +0200 Subject: [PATCH 56/66] map stuff --- _maps/map_files/YogStation/YogStation.dmm | 2445 ++++++++++----------- 1 file changed, 1204 insertions(+), 1241 deletions(-) diff --git a/_maps/map_files/YogStation/YogStation.dmm b/_maps/map_files/YogStation/YogStation.dmm index 0956cdcbec86..f15dae278733 100644 --- a/_maps/map_files/YogStation/YogStation.dmm +++ b/_maps/map_files/YogStation/YogStation.dmm @@ -1606,11 +1606,6 @@ "aic" = ( /turf/closed/wall/r_wall, /area/maintenance/fore/secondary) -"aif" = ( -/turf/open/floor/plating{ - icon_state = "platingdmg3" - }, -/area/space/nearstation) "aih" = ( /obj/structure/chair/comfy/black, /turf/open/floor/carpet, @@ -5114,6 +5109,15 @@ /obj/effect/decal/remains/human, /turf/open/floor/plating, /area/maintenance/starboard/fore) +"aFe" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "aFf" = ( /obj/structure/table, /obj/item/reagent_containers/glass/beaker/jar{ @@ -10275,6 +10279,15 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/dorms) +"bip" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) "biE" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -13203,6 +13216,13 @@ }, /turf/open/floor/plasteel/white, /area/science/research) +"bDq" = ( +/obj/structure/ethernet_cable{ + icon_state = "0-4" + }, +/obj/machinery/ai/server_cabinet, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/secondarydatacore) "bDx" = ( /obj/structure/table/wood, /obj/item/canvas/twentythreeXtwentythree{ @@ -13991,6 +14011,16 @@ }, /turf/open/floor/plating, /area/maintenance/aft) +"bKX" = ( +/obj/machinery/ai/data_core/primary, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/obj/structure/ethernet_cable{ + icon_state = "0-2" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) "bKZ" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 4 @@ -15990,6 +16020,10 @@ /obj/item/stack/rods/fifty, /turf/open/floor/plasteel, /area/engine/engineering) +"chk" = ( +/obj/effect/spawner/structure/window/reinforced/tinted, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "chq" = ( /obj/machinery/processor/slime, /obj/item/radio/intercom{ @@ -16012,6 +16046,10 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/wood, /area/medical/psych) +"chH" = ( +/obj/structure/closet/firecloset, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "chK" = ( /obj/structure/table, /obj/item/stack/sheet/metal/fifty, @@ -16058,12 +16096,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) -"cix" = ( -/obj/structure/table, -/obj/item/storage/box/donkpockets, -/obj/effect/turf_decal/trimline/purple/filled/line, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "ciN" = ( /obj/effect/spawner/structure/window/shutter, /turf/open/floor/plating, @@ -16171,6 +16203,18 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) +"cjN" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "ckf" = ( /obj/structure/chair/office{ dir = 4 @@ -17183,19 +17227,6 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel/dark, /area/hydroponics) -"cvB" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/chair/office/light{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/effect/landmark/start/yogs/network_admin, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "cvR" = ( /obj/structure/chair{ dir = 4; @@ -18021,6 +18052,12 @@ }, /turf/open/floor/plating, /area/science/mixing) +"cIX" = ( +/obj/structure/table, +/obj/item/storage/box/donkpockets, +/obj/effect/turf_decal/trimline/purple/filled/line, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "cIZ" = ( /turf/open/floor/plasteel, /area/hydroponics) @@ -18979,14 +19016,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/plasteel, /area/security/courtroom) -"dbb" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/frame/machine{ - anchored = 1; - state = 2 - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "dbt" = ( /obj/machinery/door/firedoor/border_only{ dir = 4 @@ -19031,13 +19060,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /turf/open/floor/plasteel/grimy, /area/tcommsat/computer) -"dcr" = ( -/obj/machinery/ai/server_cabinet/prefilled, -/obj/structure/ethernet_cable{ - icon_state = "0-8" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "dcx" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 6 @@ -19205,16 +19227,6 @@ }, /turf/open/floor/plating, /area/ai_monitored/storage/satellite) -"dhq" = ( -/obj/structure/ethernet_cable{ - icon_state = "1-8" - }, -/obj/structure/ethernet_cable{ - icon_state = "1-4" - }, -/obj/machinery/light, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/secondarydatacore) "dhC" = ( /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/stripes/line{ @@ -19234,15 +19246,6 @@ }, /turf/open/floor/plating/airless, /area/space/nearstation) -"dhU" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "dio" = ( /obj/machinery/power/apc/highcap{ areastring = "/area/science/misc_lab"; @@ -20315,6 +20318,14 @@ /obj/structure/disposalpipe/trunk, /turf/open/floor/plasteel/dark, /area/security/prison) +"dJZ" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/frame/machine{ + anchored = 1; + state = 2 + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) "dKq" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, /obj/machinery/light{ @@ -20431,6 +20442,23 @@ }, /turf/open/floor/plasteel, /area/science/misc_lab) +"dMq" = ( +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) +"dMB" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 8; + external_pressure_bound = 140; + pressure_checks = 0 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/secondarydatacore) "dMJ" = ( /obj/machinery/advanced_airlock_controller{ dir = 8; @@ -20909,6 +20937,15 @@ }, /turf/open/floor/plasteel, /area/clerk) +"dZj" = ( +/obj/machinery/atmospherics/pipe/manifold/general/visible{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/secondarydatacore) "dZv" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/trimline/blue/filled/warning{ @@ -21439,14 +21476,6 @@ /obj/structure/closet/emcloset, /turf/open/floor/plating, /area/maintenance/port/aft) -"ekq" = ( -/obj/item/stack/cable_coil, -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/ethernet_cable{ - icon_state = "2-8" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "ekt" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 @@ -21599,6 +21628,12 @@ }, /turf/open/floor/plasteel, /area/quartermaster/office) +"enn" = ( +/obj/structure/ethernet_cable{ + icon_state = "1-8" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/secondarydatacore) "enW" = ( /obj/machinery/door/firedoor/border_only{ dir = 1 @@ -21953,25 +21988,9 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) -"ewf" = ( -/obj/structure/ethernet_cable{ - icon_state = "2-4" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/secondarydatacore) "ewG" = ( /turf/closed/wall, /area/maintenance/solars/starboard/fore) -"ewJ" = ( -/obj/machinery/ai/networking{ - label = "Computer Science"; - roundstart_connection = "Main Core" - }, -/obj/structure/ethernet_cable{ - icon_state = "0-4" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/secondarydatacore) "ewO" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -22260,11 +22279,6 @@ /obj/effect/turf_decal/box/corners, /turf/open/floor/engine, /area/science/xenobiology) -"eCW" = ( -/obj/structure/rack, -/obj/effect/spawner/lootdrop/maintenance, -/turf/open/floor/plating, -/area/space/nearstation) "eDG" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ dir = 8 @@ -22423,6 +22437,12 @@ }, /turf/open/floor/plasteel, /area/quartermaster/miningdock) +"eEW" = ( +/obj/structure/ethernet_cable{ + icon_state = "1-4" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) "eEZ" = ( /obj/machinery/power/apc{ areastring = "/area/ai_monitored/turret_protected/aisat_interior"; @@ -22699,6 +22719,16 @@ }, /turf/open/floor/plating, /area/science/xenobiology) +"eJE" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) "eJS" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 @@ -23365,6 +23395,14 @@ }, /turf/open/floor/plating, /area/construction/mining/aux_base) +"eYs" = ( +/obj/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) "eYt" = ( /obj/machinery/meter, /obj/machinery/atmospherics/pipe/simple/cyan/visible{ @@ -24004,16 +24042,6 @@ /obj/effect/turf_decal/trimline/yellow/filled/warning, /turf/open/floor/plasteel, /area/crew_quarters/fitness) -"foH" = ( -/obj/machinery/ai/data_core/primary, -/obj/structure/ethernet_cable{ - icon_state = "1-2" - }, -/obj/structure/ethernet_cable{ - icon_state = "0-2" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "fpR" = ( /obj/machinery/computer/shuttle/labor, /obj/effect/turf_decal/trimline/red/filled/line{ @@ -24113,6 +24141,14 @@ }, /turf/closed/wall/r_wall, /area/maintenance/disposal/incinerator) +"fsh" = ( +/obj/item/stack/cable_coil, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/ethernet_cable{ + icon_state = "2-8" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) "fsi" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 @@ -24199,17 +24235,15 @@ }, /turf/open/floor/plasteel, /area/engine/engine_smes) -"ftt" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 8; - external_pressure_bound = 140; - pressure_checks = 0 - }, -/obj/machinery/light{ +"fts" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ dir = 4 }, +/obj/structure/window/reinforced{ + dir = 8 + }, /turf/open/floor/catwalk_floor, -/area/ai_monitored/secondarydatacore) +/area/ai_monitored/turret_protected/ai) "ftv" = ( /obj/machinery/airalarm{ pixel_y = 24 @@ -24386,22 +24420,6 @@ }, /turf/open/floor/plasteel, /area/science/misc_lab) -"fwR" = ( -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/structure/cable, -/obj/effect/turf_decal/trimline/purple/filled/warning{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "fxq" = ( /obj/machinery/light, /obj/machinery/modular_computer/telescreen/preset/medical{ @@ -24611,6 +24629,12 @@ }, /turf/open/floor/plasteel, /area/engine/atmos) +"fBW" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) "fCb" = ( /obj/machinery/portable_atmospherics/canister/air, /turf/open/floor/plating, @@ -24763,12 +24787,6 @@ }, /turf/open/floor/plasteel/white, /area/science/nanite) -"fER" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "fFy" = ( /obj/structure/sign/warning/nosmoking{ pixel_y = 32 @@ -25304,26 +25322,6 @@ /obj/item/aiModule/reset, /turf/open/floor/circuit, /area/ai_monitored/turret_protected/ai_upload) -"fOB" = ( -/obj/structure/chair/office/dark{ - dir = 4 - }, -/obj/machinery/computer/security/telescreen{ - dir = 1; - name = "Telecomms Camera Monitor"; - network = list("tcomms"); - pixel_x = 30; - pixel_y = -37 - }, -/obj/item/radio/intercom{ - dir = 1; - freerange = 1; - name = "Station Intercom (Telecomms)"; - pixel_x = 28; - pixel_y = -26 - }, -/turf/open/floor/plasteel/grimy, -/area/tcommsat/computer) "fOS" = ( /obj/machinery/atmospherics/components/unary/vent_pump/siphon/layer4{ dir = 8 @@ -26009,6 +26007,10 @@ }, /turf/open/floor/plasteel, /area/security/prison) +"gfq" = ( +/obj/machinery/atmospherics/pipe/manifold/general/visible, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/secondarydatacore) "gft" = ( /obj/effect/decal/cleanable/cobweb, /obj/machinery/power/smes, @@ -26033,6 +26035,15 @@ }, /turf/open/space, /area/solar/port/aft) +"gfQ" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) "ggh" = ( /obj/machinery/power/apc/highcap/five_k{ areastring = "/area/bridge"; @@ -26161,18 +26172,6 @@ }, /turf/open/floor/plasteel, /area/security/prison) -"gkp" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/obj/structure/ethernet_cable{ - icon_state = "1-2" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "gkA" = ( /obj/effect/landmark/start/medical_doctor, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ @@ -26733,9 +26732,6 @@ }, /turf/open/floor/plasteel/white, /area/medical/paramedic) -"gAF" = ( -/turf/open/floor/plating, -/area/space) "gBa" = ( /obj/structure/cable{ icon_state = "1-4" @@ -26879,6 +26875,28 @@ /obj/effect/turf_decal/trimline/red/filled/warning, /turf/open/floor/plasteel, /area/security/checkpoint/auxiliary) +"gEH" = ( +/obj/machinery/camera{ + c_tag = "Secondary AI Core"; + dir = 8; + network = list("ss13","rd") + }, +/obj/machinery/airalarm{ + pixel_y = 24 + }, +/obj/machinery/power/smes/engineering{ + charge = 5e+006; + input_level = 25000; + output_level = 20000 + }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "gFe" = ( /obj/structure/table, /obj/item/vending_refill/medical{ @@ -27026,10 +27044,6 @@ }, /turf/open/floor/plasteel/white, /area/science/xenobiology) -"gId" = ( -/obj/structure/reagent_dispensers/fueltank, -/turf/open/floor/plating, -/area/space) "gIj" = ( /obj/structure/sign/warning/vacuum/external, /obj/effect/spawner/structure/window/reinforced/shutter, @@ -27174,6 +27188,25 @@ }, /turf/open/floor/plasteel/white, /area/science/explab) +"gNW" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/airlock/hatch{ + name = "Telecommunications"; + req_access_txt = "61" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/grimy, +/area/tcommsat/computer) "gOa" = ( /obj/effect/turf_decal/siding/wood{ dir = 1 @@ -27360,6 +27393,10 @@ }, /turf/open/floor/plating, /area/maintenance/port) +"gRl" = ( +/obj/effect/spawner/structure/window/reinforced/tinted, +/turf/open/floor/plating, +/area/ai_monitored/secondarydatacore) "gRH" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 @@ -27640,11 +27677,17 @@ /obj/effect/turf_decal/bot, /turf/open/floor/plasteel/white, /area/science/nanite) -"gWM" = ( -/obj/effect/turf_decal/trimline/purple/filled/line, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ +"gWR" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/chair/office/light{ dir = 1 }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/effect/landmark/start/yogs/network_admin, /turf/open/floor/plasteel/dark, /area/ai_monitored/secondarydatacore) "gXs" = ( @@ -27687,6 +27730,13 @@ }, /turf/open/floor/plasteel, /area/quartermaster/office) +"gYg" = ( +/obj/machinery/rnd/production/circuit_imprinter/department/netmin, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "gYw" = ( /obj/machinery/computer/libraryconsole, /obj/structure/table/wood, @@ -27982,15 +28032,6 @@ }, /turf/open/space/basic, /area/space) -"hew" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "hez" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/preopen{ @@ -28011,6 +28052,10 @@ }, /turf/open/floor/plating, /area/bridge/meeting_room) +"heA" = ( +/obj/structure/grille, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "heO" = ( /obj/effect/turf_decal/trimline/yellow/filled/corner{ dir = 1 @@ -28362,19 +28407,6 @@ }, /turf/open/floor/plating, /area/hallway/secondary/entry) -"hlq" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) -"hlx" = ( -/obj/structure/lattice, -/turf/open/space, -/area/space) "hlz" = ( /obj/structure/table, /obj/item/assembly/prox_sensor{ @@ -30496,6 +30528,22 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /turf/open/floor/plasteel, /area/engine/atmos_distro) +"ieC" = ( +/obj/machinery/power/terminal{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/purple/filled/warning{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "ifk" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -30648,10 +30696,6 @@ }, /turf/open/floor/plasteel, /area/security/processing) -"iiP" = ( -/obj/structure/closet/firecloset, -/turf/open/floor/plating, -/area/space) "ijm" = ( /obj/machinery/light/small{ dir = 4 @@ -30911,6 +30955,9 @@ }, /turf/open/floor/plasteel, /area/maintenance/disposal/incinerator) +"ipt" = ( +/turf/closed/wall/r_wall, +/area/maintenance/starboard/aft) "ipu" = ( /obj/structure/table/reinforced, /obj/item/cartridge/engineering{ @@ -31206,12 +31253,6 @@ }, /turf/open/floor/plating, /area/maintenance/disposal) -"ivJ" = ( -/obj/structure/cable/yellow{ - icon_state = "2-4" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "ivM" = ( /obj/machinery/light_switch{ pixel_y = 28 @@ -31485,15 +31526,6 @@ /obj/effect/spawner/lootdrop/grille_or_trash, /turf/open/floor/plating, /area/maintenance/aft) -"iBu" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "iBC" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 @@ -31533,12 +31565,6 @@ }, /turf/open/floor/plating, /area/maintenance/aft) -"iCM" = ( -/obj/structure/ethernet_cable{ - icon_state = "1-4" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "iCQ" = ( /obj/effect/turf_decal/trimline/yellow/filled/warning{ dir = 8 @@ -31590,6 +31616,12 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/aft) +"iDT" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) "iDY" = ( /obj/machinery/atmospherics/pipe/simple/green/visible{ dir = 4 @@ -31602,9 +31634,6 @@ "iEt" = ( /turf/open/floor/plasteel, /area/escapepodbay) -"iEF" = ( -/turf/template_noop, -/area/space) "iEY" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 @@ -32204,6 +32233,10 @@ }, /turf/open/floor/plasteel/white, /area/science/xenobiology) +"iPY" = ( +/obj/machinery/atmospherics/pipe/manifold4w/general/visible, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/secondarydatacore) "iQm" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -32253,13 +32286,6 @@ /obj/machinery/door/firedoor/border_only, /turf/open/floor/plasteel, /area/science/robotics/mechbay) -"iQM" = ( -/obj/structure/window/reinforced, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "iQR" = ( /obj/item/wrench, /turf/open/floor/plating/airless, @@ -33043,13 +33069,6 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/fitness) -"jiH" = ( -/obj/structure/frame/machine{ - anchored = 1; - state = 2 - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "jjr" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 @@ -33068,6 +33087,17 @@ }, /turf/open/floor/engine, /area/maintenance/disposal/incinerator) +"jjQ" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = 27 + }, +/obj/structure/table, +/obj/item/stack/ethernet_coil, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 5 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "jjR" = ( /obj/machinery/atmospherics/components/unary/tank/toxins, /turf/open/floor/plasteel, @@ -33360,6 +33390,13 @@ }, /turf/open/floor/plasteel/white, /area/medical/medbay/central) +"jpR" = ( +/obj/machinery/rack_creator, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "jpZ" = ( /obj/structure/table, /obj/item/multitool, @@ -33405,12 +33442,6 @@ icon_state = "platingdmg3" }, /area/maintenance/port) -"jqR" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ - external_pressure_bound = 120 - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/secondarydatacore) "jqV" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 @@ -33474,6 +33505,12 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) +"jrx" = ( +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) "jry" = ( /obj/structure/cable{ icon_state = "4-8" @@ -33568,6 +33605,13 @@ }, /turf/open/floor/carpet/blue, /area/crew_quarters/heads/captain) +"jsZ" = ( +/obj/structure/window/reinforced, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) "jte" = ( /obj/machinery/door/firedoor/border_only, /obj/machinery/door/firedoor/border_only{ @@ -33833,23 +33877,6 @@ /obj/effect/mapping_helpers/airlock/abandoned, /turf/open/floor/plating, /area/maintenance/aft) -"jyL" = ( -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/airlock/research/glass{ - name = "Computer Science"; - normalspeed = 0; - req_access_txt = "47" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "jzg" = ( /obj/structure/cable{ icon_state = "1-2" @@ -33997,6 +34024,14 @@ }, /turf/open/floor/plasteel/white, /area/medical/virology) +"jDx" = ( +/obj/structure/table, +/obj/machinery/microwave, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 10 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "jDB" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 @@ -34290,13 +34325,6 @@ /obj/effect/turf_decal/siding/wood, /turf/open/floor/wood, /area/library) -"jIT" = ( -/obj/machinery/ai/data_core, -/obj/structure/ethernet_cable{ - icon_state = "0-8" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/secondarydatacore) "jJy" = ( /obj/structure/chair{ dir = 4 @@ -34581,19 +34609,19 @@ }, /turf/open/floor/wood, /area/library) +"jRE" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "jRI" = ( /obj/structure/bookcase/random/religion, /turf/open/floor/carpet, /area/library) -"jRK" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 4 - }, -/obj/structure/ethernet_cable{ - icon_state = "1-2" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "jRP" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 9 @@ -34648,6 +34676,18 @@ }, /turf/open/floor/plasteel, /area/hydroponics/garden) +"jSR" = ( +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/machinery/door/airlock/external{ + req_access_txt = "13" + }, +/obj/machinery/atmospherics/pipe/layer_manifold{ + dir = 4 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "jTj" = ( /obj/structure/chair/stool, /obj/effect/landmark/start/mime, @@ -35105,6 +35145,13 @@ }, /turf/open/floor/plating, /area/engine/engineering) +"kep" = ( +/obj/structure/ethernet_cable{ + icon_state = "0-8" + }, +/obj/machinery/ai/server_cabinet/prefilled, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/secondarydatacore) "ker" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 @@ -35455,14 +35502,6 @@ /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/science/storage) -"kkT" = ( -/obj/structure/table, -/obj/machinery/microwave, -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 10 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "kkW" = ( /obj/machinery/vending/wardrobe/jani_wardrobe, /obj/machinery/light{ @@ -35473,6 +35512,15 @@ }, /turf/open/floor/plasteel, /area/janitor) +"kkY" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 4 + }, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) "klD" = ( /obj/structure/sign/departments/minsky/medical/chemistry/chemical2, /turf/closed/wall, @@ -35534,16 +35582,6 @@ }, /turf/open/floor/plasteel/dark, /area/maintenance/department/tcoms) -"kmG" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/hidden, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "kmT" = ( /obj/machinery/button/door{ id = "kanyewest"; @@ -35605,6 +35643,14 @@ dir = 1 }, /area/hallway/secondary/entry) +"koa" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1; + external_pressure_bound = 140; + pressure_checks = 0 + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/secondarydatacore) "kob" = ( /turf/open/floor/plasteel/white/corner{ dir = 8 @@ -35747,18 +35793,6 @@ /obj/effect/turf_decal/trimline/red/filled/line, /turf/open/floor/plasteel, /area/security/checkpoint/engineering) -"kvY" = ( -/obj/structure/cable{ - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "kwm" = ( /obj/structure/lattice/catwalk, /obj/machinery/atmospherics/pipe/simple/orange/visible{ @@ -36096,6 +36130,12 @@ /obj/item/wrench, /turf/open/floor/plasteel/dark, /area/science/xenobiology) +"kCx" = ( +/obj/structure/ethernet_cable{ + icon_state = "2-4" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/secondarydatacore) "kCI" = ( /obj/machinery/navbeacon{ codes_txt = "delivery;dir=8"; @@ -36164,13 +36204,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /turf/open/floor/plasteel/dark, /area/science/xenobiology) -"kDU" = ( -/obj/machinery/rack_creator, -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/maintenance/starboard/aft) "kEh" = ( /obj/machinery/conveyor{ dir = 4; @@ -36499,16 +36532,6 @@ icon_state = "platingdmg3" }, /area/maintenance/port) -"kLq" = ( -/obj/machinery/modular_computer/console/preset/netmin{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/purple/filled/line, -/obj/structure/ethernet_cable{ - icon_state = "0-2" - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "kLy" = ( /obj/item/stack/sheet/cardboard, /obj/effect/decal/cleanable/dirt, @@ -36740,6 +36763,21 @@ }, /turf/open/floor/engine, /area/maintenance/disposal/incinerator) +"kRp" = ( +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/machinery/door/airlock/external{ + req_access_txt = "13" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "kRv" = ( /turf/open/floor/carpet/blue, /area/bridge/meeting_room) @@ -37628,12 +37666,6 @@ }, /turf/open/floor/plasteel, /area/security/main) -"lnd" = ( -/obj/structure/ethernet_cable{ - icon_state = "1-8" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/secondarydatacore) "lnf" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ @@ -38283,6 +38315,13 @@ /obj/effect/turf_decal/trimline/blue/filled/line, /turf/open/floor/plasteel/white, /area/medical/genetics/cloning) +"lEP" = ( +/obj/machinery/computer/ai_overclocking, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "lEQ" = ( /obj/machinery/door/poddoor/shutters/preopen{ id = "robotics2"; @@ -38312,12 +38351,6 @@ }, /turf/open/floor/plasteel/dark/telecomms, /area/tcommsat/server) -"lFr" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "lFG" = ( /obj/structure/chair/office/light{ dir = 1 @@ -38536,16 +38569,6 @@ /obj/machinery/electrolyzer, /turf/open/floor/plasteel, /area/engine/atmos_distro) -"lMe" = ( -/obj/structure/window/reinforced, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/structure/ethernet_cable{ - icon_state = "1-2" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "lMg" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 @@ -38808,13 +38831,6 @@ }, /turf/open/floor/plasteel/dark, /area/engine/gravity_generator) -"lVx" = ( -/obj/structure/ethernet_cable{ - icon_state = "0-8" - }, -/obj/machinery/ai/server_cabinet/prefilled, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/secondarydatacore) "lVL" = ( /obj/machinery/light, /obj/structure/sign/warning/electricshock{ @@ -38884,10 +38900,6 @@ /obj/effect/turf_decal/trimline/brown/filled/line, /turf/open/floor/plasteel, /area/quartermaster/qm) -"lWL" = ( -/obj/structure/table, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "lXG" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, @@ -38927,15 +38939,6 @@ }, /turf/open/floor/plating, /area/medical/genetics) -"lYb" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible{ - dir = 4 - }, -/obj/structure/ethernet_cable{ - icon_state = "1-2" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/secondarydatacore) "lYc" = ( /obj/machinery/door/airlock/highsecurity{ name = "Gravity Generator"; @@ -39035,6 +39038,10 @@ }, /turf/open/floor/plating, /area/maintenance/disposal) +"lZa" = ( +/obj/effect/spawner/structure/window/reinforced/shutter, +/turf/open/floor/plating, +/area/space) "lZb" = ( /obj/machinery/door/airlock/public/glass{ name = "Fitness" @@ -39130,13 +39137,6 @@ }, /turf/open/floor/wood, /area/library) -"maT" = ( -/obj/machinery/rnd/production/circuit_imprinter/department/netmin, -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "maV" = ( /obj/structure/grille, /obj/structure/window{ @@ -39447,6 +39447,13 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) +"mik" = ( +/obj/effect/spawner/structure/window/reinforced/tinted, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/turf/open/floor/plating, +/area/ai_monitored/secondarydatacore) "min" = ( /obj/structure/table/wood, /obj/machinery/photocopier/faxmachine{ @@ -39574,6 +39581,15 @@ /obj/structure/disposalpipe/trunk, /turf/open/floor/wood, /area/lawoffice) +"mkd" = ( +/obj/structure/ethernet_cable{ + icon_state = "2-8" + }, +/obj/structure/ethernet_cable{ + icon_state = "2-4" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/secondarydatacore) "mkg" = ( /obj/machinery/door/firedoor/border_only{ dir = 1 @@ -39760,14 +39776,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/hallway/secondary/entry) -"mnk" = ( -/obj/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "mnl" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 8 @@ -40815,15 +40823,6 @@ }, /turf/open/floor/plasteel/white, /area/medical/virology) -"mFl" = ( -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/structure/cable/yellow{ - icon_state = "1-8" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "mFA" = ( /obj/effect/landmark/event_spawn, /turf/open/floor/plasteel, @@ -40904,25 +40903,6 @@ }, /turf/open/floor/plasteel, /area/maintenance/disposal/incinerator) -"mHv" = ( -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/airlock/hatch{ - name = "Telecommunications"; - req_access_txt = "61" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plasteel/grimy, -/area/tcommsat/computer) "mHx" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 8; @@ -42088,6 +42068,18 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/quartermaster/storage) +"nfM" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) "nfX" = ( /turf/open/floor/carpet/blue, /area/crew_quarters/heads/hop) @@ -42399,6 +42391,21 @@ /obj/item/aiModule/supplied/freeform, /turf/open/floor/circuit, /area/ai_monitored/turret_protected/ai_upload) +"nmb" = ( +/obj/structure/sign/warning/electricshock{ + pixel_y = -32 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 9 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "nmn" = ( /obj/machinery/door/airlock/maintenance_hatch, /obj/effect/mapping_helpers/airlock/abandoned, @@ -42427,18 +42434,6 @@ /obj/effect/turf_decal/trimline/yellow/filled/warning, /turf/open/floor/plasteel, /area/construction/mining/aux_base) -"nnq" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/ai/networking{ - label = "Main Core"; - roundstart_connection = "Computer Science" - }, -/obj/structure/ethernet_cable{ - icon_state = "0-4" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "nnx" = ( /obj/machinery/holopad, /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ @@ -43117,15 +43112,6 @@ }, /turf/open/floor/plasteel, /area/security/prison/hallway) -"nEq" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "nEu" = ( /obj/effect/turf_decal/loading_area{ dir = 1 @@ -43455,6 +43441,16 @@ }, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/ai) +"nKQ" = ( +/obj/structure/ethernet_cable{ + icon_state = "1-4" + }, +/obj/structure/ethernet_cable{ + icon_state = "1-8" + }, +/obj/machinery/light, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/secondarydatacore) "nKU" = ( /obj/effect/turf_decal/trimline/yellow/filled/corner, /turf/open/floor/plasteel, @@ -43491,10 +43487,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/white, /area/medical/sleeper) -"nMp" = ( -/obj/structure/lattice/catwalk, -/turf/open/space, -/area/space) "nNC" = ( /obj/machinery/meter, /obj/machinery/atmospherics/pipe/manifold/cyan/hidden{ @@ -43512,6 +43504,16 @@ }, /turf/open/floor/plasteel, /area/security/brig) +"nOl" = ( +/obj/structure/window/reinforced, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) "nOu" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 8 @@ -44304,9 +44306,6 @@ }, /turf/open/floor/plating, /area/storage/tech) -"ofw" = ( -/turf/closed/wall, -/area/space) "ogb" = ( /obj/effect/turf_decal/stripes/corner{ dir = 4 @@ -44347,6 +44346,16 @@ /obj/structure/cable, /turf/open/floor/plating, /area/security/brig) +"ogU" = ( +/obj/structure/ethernet_cable{ + icon_state = "1-8" + }, +/obj/structure/ethernet_cable{ + icon_state = "1-4" + }, +/obj/machinery/light, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/secondarydatacore) "ogV" = ( /obj/structure/lattice/catwalk, /obj/structure/cable/yellow{ @@ -44595,10 +44604,6 @@ }, /turf/open/floor/plasteel, /area/clerk) -"omM" = ( -/obj/structure/grille, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "ong" = ( /obj/machinery/light{ dir = 1 @@ -44961,13 +44966,6 @@ /obj/effect/landmark/stationroom/box/testingsite, /turf/open/space/basic, /area/space) -"ouJ" = ( -/obj/effect/spawner/structure/window/reinforced/tinted, -/obj/structure/ethernet_cable{ - icon_state = "1-2" - }, -/turf/open/floor/plating, -/area/ai_monitored/secondarydatacore) "ouY" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 @@ -45353,6 +45351,16 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/aft) +"oBF" = ( +/obj/machinery/modular_computer/console/preset/netmin{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/purple/filled/line, +/obj/structure/ethernet_cable{ + icon_state = "0-2" + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "oBH" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, @@ -45529,6 +45537,12 @@ /obj/item/book/manual/wiki/xenobiology, /turf/open/floor/plasteel/dark, /area/science/xenobiology) +"oGp" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 8 + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/secondarydatacore) "oGM" = ( /turf/closed/wall/r_wall, /area/ai_monitored/secondarydatacore) @@ -45662,9 +45676,6 @@ }, /turf/open/floor/carpet/blue, /area/crew_quarters/heads/captain) -"oKU" = ( -/turf/open/floor/catwalk_floor, -/area/ai_monitored/secondarydatacore) "oLf" = ( /obj/machinery/door/firedoor/border_only{ dir = 1 @@ -45792,6 +45803,29 @@ }, /turf/open/floor/engine, /area/science/mixing/chamber) +"oMZ" = ( +/obj/machinery/doorButtons/access_button{ + idDoor = "secondary_aicore_interior"; + idSelf = "secondary_aicore_controller"; + name = "Secondary AI Core Access Button"; + pixel_x = -24; + pixel_y = 8; + req_one_access_txt = "30;70" + }, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "oNb" = ( /obj/structure/sign/departments/minsky/command/charge{ pixel_x = 32 @@ -45989,32 +46023,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) -"oSh" = ( -/obj/machinery/power/apc/highcap{ - areastring = "/area/ai_monitored/secondarydatacore"; - dir = 4; - name = "AI Secondary Datacore"; - pixel_x = 24 - }, -/obj/machinery/light{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "0-8" - }, -/obj/structure/table, -/obj/item/circuitboard/machine/server_cabinet, -/obj/item/circuitboard/machine/ai_data_core, -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 4 - }, -/obj/machinery/camera{ - c_tag = "Secondary AI Core"; - dir = 8; - network = list("ss13","rd") - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "oSn" = ( /obj/machinery/door/airlock/hatch{ autoclose = 0; @@ -46186,13 +46194,6 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/dorms) -"oVR" = ( -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 6 - }, -/obj/item/twohanded/required/kirbyplants/random, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "oWa" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, @@ -47594,10 +47595,6 @@ /obj/effect/turf_decal/trimline/blue/filled/corner, /turf/open/floor/plasteel, /area/hallway/primary/central) -"pAB" = ( -/obj/machinery/space_heater, -/turf/open/floor/plating, -/area/space) "pAL" = ( /turf/open/floor/plasteel, /area/security/checkpoint/auxiliary) @@ -48710,15 +48707,24 @@ }, /turf/open/floor/plasteel, /area/hydroponics/garden) -"qcP" = ( -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/firedoor/border_only{ - dir = 1 +"qdi" = ( +/obj/machinery/power/apc{ + areastring = "/area/maintenance/starboard/aft"; + dir = 4; + name = "Starboard Quarter Maintenance APC"; + pixel_x = 24 }, -/obj/effect/mapping_helpers/airlock/abandoned, -/obj/machinery/door/airlock/maintenance_hatch, /turf/open/floor/plating, -/area/space/nearstation) +/area/maintenance/starboard/aft) +"qdp" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) "qdv" = ( /turf/open/floor/carpet, /area/crew_quarters/fitness) @@ -48890,6 +48896,10 @@ /obj/effect/turf_decal/trimline/purple/filled/line, /turf/open/floor/plasteel, /area/hallway/primary/starboard) +"qhz" = ( +/obj/structure/table, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "qhA" = ( /obj/structure/transit_tube/curved/flipped{ dir = 8 @@ -49116,6 +49126,13 @@ }, /turf/closed/wall/r_wall, /area/engine/atmos) +"qnb" = ( +/obj/machinery/ai/data_core, +/obj/structure/ethernet_cable{ + icon_state = "0-8" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/secondarydatacore) "qnm" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ dir = 1 @@ -49419,6 +49436,13 @@ /mob/living/carbon/monkey, /turf/open/floor/grass, /area/medical/genetics) +"qtx" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 6 + }, +/obj/item/twohanded/required/kirbyplants/random, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "qtP" = ( /turf/closed/wall, /area/hallway/primary/aft) @@ -49446,10 +49470,6 @@ }, /turf/open/floor/plasteel, /area/security/brig) -"quc" = ( -/obj/effect/spawner/structure/window/reinforced/shutter, -/turf/open/floor/plating, -/area/space) "qum" = ( /obj/structure/chair{ dir = 4 @@ -49971,6 +49991,15 @@ }, /turf/open/floor/plasteel/white, /area/medical/surgery) +"qGg" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) "qGp" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 10 @@ -50130,10 +50159,6 @@ }, /turf/open/floor/plating, /area/maintenance/solars/starboard/fore) -"qJk" = ( -/obj/structure/closet/firecloset, -/turf/open/floor/plating, -/area/space/nearstation) "qJt" = ( /obj/machinery/door/firedoor/border_only{ dir = 1 @@ -50513,6 +50538,32 @@ }, /turf/open/floor/plasteel, /area/ai_monitored/storage/eva) +"qPy" = ( +/obj/machinery/power/apc/highcap{ + areastring = "/area/ai_monitored/secondarydatacore"; + dir = 4; + name = "AI Secondary Datacore"; + pixel_x = 24 + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/structure/table, +/obj/item/circuitboard/machine/server_cabinet, +/obj/item/circuitboard/machine/ai_data_core, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Secondary AI Core"; + dir = 8; + network = list("ss13","rd") + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "qPC" = ( /obj/machinery/bounty_board, /turf/closed/wall, @@ -50994,13 +51045,6 @@ }, /turf/open/floor/plasteel/freezer, /area/security/prison) -"raf" = ( -/obj/machinery/holopad, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "ras" = ( /obj/machinery/atmospherics/pipe/simple/cyan/hidden{ dir = 4 @@ -51796,28 +51840,6 @@ }, /turf/open/floor/plating, /area/ai_monitored/storage/satellite) -"ruU" = ( -/obj/machinery/camera{ - c_tag = "Secondary AI Core"; - dir = 8; - network = list("ss13","rd") - }, -/obj/machinery/airalarm{ - pixel_y = 24 - }, -/obj/machinery/power/smes/engineering{ - charge = 5e+006; - input_level = 25000; - output_level = 20000 - }, -/obj/structure/cable{ - icon_state = "0-2" - }, -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "ruW" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper, /obj/machinery/door/airlock/security/glass{ @@ -52013,6 +52035,18 @@ }, /turf/open/floor/plasteel/cafeteria, /area/crew_quarters/heads/cmo) +"rzQ" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/ai/networking{ + label = "Main Core"; + roundstart_connection = "Computer Science" + }, +/obj/structure/ethernet_cable{ + icon_state = "0-4" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) "rAb" = ( /obj/structure/lattice/catwalk, /obj/machinery/atmospherics/components/binary/pump/layer2{ @@ -52118,12 +52152,6 @@ "rCG" = ( /turf/closed/wall/r_wall, /area/hallway/primary/aft) -"rCK" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible{ - dir = 8 - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/secondarydatacore) "rCQ" = ( /obj/machinery/atmospherics/components/binary/pump/on{ dir = 1; @@ -52872,21 +52900,6 @@ }, /turf/open/floor/plasteel/white, /area/medical/medbay/central) -"rTH" = ( -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 - }, -/obj/machinery/door/airlock/external{ - req_access_txt = "13" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/plating, -/area/space/nearstation) "rTK" = ( /obj/machinery/mineral/ore_redemption{ input_dir = 2; @@ -53232,6 +53245,13 @@ }, /turf/open/floor/plasteel, /area/hydroponics/garden) +"rZo" = ( +/obj/machinery/holopad, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) "rZt" = ( /turf/closed/wall, /area/medical/paramedic) @@ -53322,18 +53342,6 @@ }, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/ai_upload_foyer) -"sbF" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "sbG" = ( /obj/machinery/atmospherics/pipe/simple/cyan/hidden{ dir = 4 @@ -53343,6 +53351,26 @@ }, /turf/open/floor/circuit/telecomms/server, /area/ai_monitored/turret_protected/ai) +"scr" = ( +/obj/structure/chair/office/dark{ + dir = 4 + }, +/obj/machinery/computer/security/telescreen{ + dir = 1; + name = "Telecomms Camera Monitor"; + network = list("tcomms"); + pixel_x = 30; + pixel_y = -37 + }, +/obj/item/radio/intercom{ + dir = 1; + freerange = 1; + name = "Station Intercom (Telecomms)"; + pixel_x = 28; + pixel_y = -26 + }, +/turf/open/floor/plasteel/grimy, +/area/tcommsat/computer) "sde" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 1 @@ -53528,9 +53556,6 @@ /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/science/storage) -"shx" = ( -/turf/open/floor/plating, -/area/space/nearstation) "shz" = ( /obj/machinery/smartfridge/organ, /turf/closed/wall, @@ -53722,15 +53747,6 @@ }, /turf/open/floor/plasteel/white, /area/medical/medbay/lobby) -"smn" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "smE" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ dir = 8 @@ -53838,10 +53854,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/maintenance/starboard/aft) -"snG" = ( -/obj/effect/spawner/structure/window/reinforced/tinted, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "snN" = ( /obj/effect/turf_decal/trimline/red/filled/warning{ dir = 4 @@ -53851,16 +53863,6 @@ "soo" = ( /turf/closed/wall, /area/engine/atmos_distro) -"sox" = ( -/obj/structure/ethernet_cable{ - icon_state = "1-4" - }, -/obj/structure/ethernet_cable{ - icon_state = "1-8" - }, -/obj/machinery/light, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/secondarydatacore) "soM" = ( /obj/item/twohanded/required/kirbyplants/random, /obj/effect/turf_decal/trimline/purple/filled/line{ @@ -53954,21 +53956,6 @@ "ssx" = ( /turf/open/floor/plating, /area/maintenance/disposal/incinerator) -"ssB" = ( -/obj/structure/sign/warning/electricshock{ - pixel_y = -32 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 9 - }, -/obj/structure/cable{ - icon_state = "1-8" - }, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "ssK" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 @@ -54264,6 +54251,21 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) +"szB" = ( +/obj/structure/sign/warning/vacuum/external{ + pixel_y = -32 + }, +/obj/machinery/atmospherics/components/binary/dp_vent_pump/layer2{ + dir = 4 + }, +/obj/machinery/advanced_airlock_controller{ + pixel_y = 24 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "sAl" = ( /obj/machinery/door/airlock/engineering{ name = "Starboard Bow Solar Access"; @@ -54841,6 +54843,18 @@ }, /turf/open/floor/plasteel/dark, /area/science/robotics/lab) +"sLh" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "sLk" = ( /obj/machinery/camera{ c_tag = "Xenobiology Desk Exterior"; @@ -55249,13 +55263,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/visible, /turf/open/floor/plasteel/dark, /area/engine/atmos_distro) -"sVC" = ( -/obj/machinery/computer/ai_overclocking, -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/maintenance/starboard/aft) "sVM" = ( /obj/structure/chair{ dir = 4 @@ -55356,14 +55363,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) -"sXo" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 1; - external_pressure_bound = 140; - pressure_checks = 0 - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/secondarydatacore) "sXp" = ( /obj/structure/sign/warning/nosmoking{ pixel_y = 32 @@ -55773,14 +55772,6 @@ }, /turf/open/floor/plasteel, /area/engine/atmos_distro) -"tcu" = ( -/obj/structure/table, -/obj/item/storage/toolbox/mechanical, -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/maintenance/starboard/aft) "tcS" = ( /obj/machinery/door/airlock/public/glass{ name = "Central Access" @@ -56135,15 +56126,6 @@ }, /turf/open/floor/plasteel, /area/maintenance/disposal/incinerator) -"tlL" = ( -/obj/machinery/power/apc{ - areastring = "/area/maintenance/starboard/aft"; - dir = 4; - name = "Starboard Quarter Maintenance APC"; - pixel_x = 24 - }, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "tlN" = ( /obj/machinery/power/smes/engineering, /obj/structure/cable{ @@ -56722,9 +56704,6 @@ }, /turf/open/floor/plasteel/dark, /area/engine/atmos_distro) -"tzz" = ( -/turf/closed/wall/r_wall, -/area/space) "tzJ" = ( /obj/machinery/computer/warrant{ dir = 8 @@ -57016,15 +56995,6 @@ }, /turf/open/floor/plating, /area/maintenance/aft) -"tHr" = ( -/obj/structure/ethernet_cable{ - icon_state = "2-8" - }, -/obj/structure/ethernet_cable{ - icon_state = "2-4" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/secondarydatacore) "tHJ" = ( /obj/machinery/camera{ c_tag = "AI Chamber - Port"; @@ -57220,10 +57190,6 @@ }, /turf/open/floor/plasteel, /area/maintenance/disposal/incinerator) -"tLY" = ( -/obj/machinery/atmospherics/pipe/manifold/general/visible, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/secondarydatacore) "tMj" = ( /obj/machinery/status_display/evac{ layer = 4; @@ -57762,6 +57728,14 @@ }, /turf/open/floor/plasteel, /area/hydroponics/garden) +"tWC" = ( +/obj/machinery/camera{ + c_tag = "Secondary AI Core"; + dir = 8; + network = list("ss13","rd") + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/secondarydatacore) "tWQ" = ( /obj/structure/cable/orange{ icon_state = "4-8" @@ -58068,10 +58042,6 @@ }, /turf/open/floor/plasteel/dark, /area/bridge) -"ubD" = ( -/obj/effect/spawner/structure/window/reinforced/tinted, -/turf/open/floor/plating, -/area/ai_monitored/secondarydatacore) "ubY" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -58332,11 +58302,6 @@ }, /turf/open/floor/plasteel, /area/security/checkpoint/auxiliary) -"uhp" = ( -/obj/effect/spawner/structure/window/reinforced/tinted, -/obj/machinery/atmospherics/pipe/simple/general/visible, -/turf/open/floor/plating, -/area/ai_monitored/secondarydatacore) "uhy" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ @@ -58588,6 +58553,12 @@ }, /turf/open/floor/plating, /area/medical/chemistry) +"uow" = ( +/obj/effect/turf_decal/trimline/purple/filled/line, +/obj/machinery/portable_atmospherics/canister/nitrogen, +/obj/machinery/atmospherics/components/unary/portables_connector/visible, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "uoF" = ( /obj/machinery/portable_atmospherics/canister/oxygen, /turf/open/floor/plasteel, @@ -58952,18 +58923,6 @@ }, /turf/open/floor/plating, /area/maintenance/solars/port/aft) -"uwh" = ( -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, -/obj/machinery/door/airlock/external{ - req_access_txt = "13" - }, -/obj/machinery/atmospherics/pipe/layer_manifold{ - dir = 4 - }, -/turf/open/floor/plating, -/area/space/nearstation) "uwQ" = ( /obj/machinery/airalarm{ dir = 8; @@ -58979,15 +58938,6 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/heads/hop) -"uxi" = ( -/obj/machinery/atmospherics/pipe/manifold/general/visible{ - dir = 8 - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/secondarydatacore) "uxv" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -59056,14 +59006,6 @@ }, /turf/open/floor/plating, /area/maintenance/port/aft) -"uzk" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible, -/obj/machinery/airalarm/tcomms{ - dir = 4; - pixel_x = -24 - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/secondarydatacore) "uzs" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 10 @@ -59964,11 +59906,6 @@ /obj/effect/turf_decal/trimline/red/filled/line, /turf/open/floor/plasteel, /area/security/brig) -"uUx" = ( -/obj/effect/turf_decal/trimline/purple/filled/line, -/obj/machinery/atmospherics/components/unary/thermomachine/freezer/on, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "uUY" = ( /obj/machinery/door/poddoor/preopen{ id = "Biohazard"; @@ -59989,6 +59926,16 @@ }, /turf/open/floor/plasteel, /area/science/research) +"uVl" = ( +/obj/machinery/ai/networking{ + label = "Computer Science"; + roundstart_connection = "Main Core" + }, +/obj/structure/ethernet_cable{ + icon_state = "0-4" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/secondarydatacore) "uVm" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 @@ -60179,18 +60126,6 @@ /obj/effect/turf_decal/trimline/blue/filled/corner, /turf/open/floor/plasteel/white, /area/medical/paramedic) -"uXG" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ - dir = 1; - external_pressure_bound = 120 - }, -/obj/machinery/camera{ - c_tag = "Secondary AI Core"; - dir = 4; - network = list("ss13","rd") - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/secondarydatacore) "uYk" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -60525,6 +60460,18 @@ "vfS" = ( /turf/open/floor/plasteel, /area/crew_quarters/heads/chief) +"vgF" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ + dir = 1; + external_pressure_bound = 120 + }, +/obj/machinery/camera{ + c_tag = "Secondary AI Core"; + dir = 4; + network = list("ss13","rd") + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/secondarydatacore) "vhj" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 @@ -60738,6 +60685,14 @@ }, /turf/open/floor/plasteel/dark, /area/chapel/main) +"vlA" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible, +/obj/machinery/airalarm/tcomms{ + dir = 4; + pixel_x = -24 + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/secondarydatacore) "vlJ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 9 @@ -60769,6 +60724,11 @@ "vmm" = ( /turf/closed/wall, /area/ai_monitored/turret_protected/aisat_interior) +"vmp" = ( +/obj/effect/spawner/structure/window/reinforced/tinted, +/obj/machinery/atmospherics/pipe/simple/general/visible, +/turf/open/floor/plating, +/area/ai_monitored/secondarydatacore) "vnv" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 10 @@ -60876,17 +60836,6 @@ }, /turf/open/floor/plasteel, /area/security/main) -"vpU" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = 27 - }, -/obj/structure/table, -/obj/item/stack/ethernet_coil, -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 5 - }, -/turf/open/floor/plasteel/dark, -/area/space) "vra" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -61124,6 +61073,12 @@ }, /turf/open/floor/plasteel, /area/hydroponics/garden) +"vvF" = ( +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) "vvH" = ( /obj/structure/sign/warning/fire, /turf/closed/wall/r_wall, @@ -61742,6 +61697,13 @@ /obj/effect/turf_decal/trimline/blue/filled/corner, /turf/open/floor/plasteel/white, /area/medical/medbay/central) +"vIE" = ( +/obj/machinery/ai/server_cabinet/prefilled, +/obj/structure/ethernet_cable{ + icon_state = "0-8" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) "vIQ" = ( /obj/machinery/cryopod{ dir = 4 @@ -61760,13 +61722,6 @@ }, /turf/open/floor/plating, /area/quartermaster/miningdock) -"vIX" = ( -/obj/structure/ethernet_cable{ - icon_state = "0-4" - }, -/obj/machinery/ai/server_cabinet, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/secondarydatacore) "vIY" = ( /obj/structure/table/wood, /obj/structure/mirror{ @@ -61847,6 +61802,15 @@ }, /turf/open/floor/plasteel/white, /area/medical/medbay/central) +"vKX" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/abandoned, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "vLb" = ( /obj/item/twohanded/required/kirbyplants/random, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ @@ -61975,10 +61939,6 @@ }, /turf/open/floor/plating, /area/maintenance/aft) -"vOD" = ( -/obj/machinery/atmospherics/pipe/manifold4w/general/visible, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/secondarydatacore) "vOQ" = ( /obj/machinery/door/firedoor/border_only{ dir = 1 @@ -62450,15 +62410,6 @@ }, /turf/open/floor/plasteel/white, /area/medical/sleeper) -"vXT" = ( -/obj/machinery/door/airlock/maintenance_hatch, -/obj/effect/mapping_helpers/airlock/abandoned, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/turf/open/floor/plating, -/area/space/nearstation) "vXV" = ( /obj/structure/chair/comfy/brown{ dir = 1 @@ -62835,6 +62786,23 @@ }, /turf/open/space/basic, /area/space/nearstation) +"wfG" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/airlock/research/glass{ + name = "Computer Science"; + normalspeed = 0; + req_access_txt = "47" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "wfN" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, @@ -63051,29 +63019,6 @@ }, /turf/open/floor/plasteel/white, /area/medical/virology) -"wls" = ( -/obj/machinery/doorButtons/access_button{ - idDoor = "secondary_aicore_interior"; - idSelf = "secondary_aicore_controller"; - name = "Secondary AI Core Access Button"; - pixel_x = -24; - pixel_y = 8; - req_one_access_txt = "30;70" - }, -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 5 - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "wlG" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 6 @@ -63495,6 +63440,15 @@ }, /turf/open/floor/plating, /area/engine/engineering) +"wuI" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 4 + }, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/secondarydatacore) "wuL" = ( /obj/machinery/light/small{ dir = 1 @@ -63734,12 +63688,6 @@ /obj/effect/spawner/structure/window/reinforced/shutter, /turf/open/floor/plating, /area/engine/engineering) -"wyD" = ( -/obj/structure/ethernet_cable{ - icon_state = "1-2" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "wAc" = ( /obj/effect/spawner/structure/window/reinforced/shutter, /turf/open/floor/plating, @@ -63781,12 +63729,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/maintenance/starboard/aft) -"wAV" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible{ - dir = 4 - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/secondarydatacore) "wAX" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ dir = 1 @@ -63802,6 +63744,12 @@ "wBd" = ( /turf/open/floor/plasteel/white, /area/medical/genetics) +"wBl" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ + external_pressure_bound = 120 + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/secondarydatacore) "wBr" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -65178,21 +65126,6 @@ }, /turf/open/floor/plating, /area/maintenance/department/medical/morgue) -"xkK" = ( -/obj/structure/sign/warning/vacuum/external{ - pixel_y = -32 - }, -/obj/machinery/atmospherics/components/binary/dp_vent_pump/layer2{ - dir = 4 - }, -/obj/machinery/advanced_airlock_controller{ - pixel_y = 24 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/plating, -/area/space/nearstation) "xkN" = ( /obj/machinery/chem_heater, /obj/effect/turf_decal/trimline/yellow/filled/line{ @@ -65562,12 +65495,6 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/maintenance/starboard/aft) -"xtY" = ( -/obj/effect/turf_decal/trimline/purple/filled/line, -/obj/machinery/portable_atmospherics/canister/nitrogen, -/obj/machinery/atmospherics/components/unary/portables_connector/visible, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "xul" = ( /turf/open/floor/wood, /area/bridge/meeting_room) @@ -65770,6 +65697,12 @@ }, /turf/open/floor/plasteel/dark, /area/science/xenobiology) +"xAr" = ( +/obj/structure/ethernet_cable{ + icon_state = "4-8" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/secondarydatacore) "xAA" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/simple/orange/visible, @@ -66292,6 +66225,11 @@ "xML" = ( /turf/closed/wall, /area/hallway/primary/aft_starboard) +"xNi" = ( +/obj/effect/turf_decal/trimline/purple/filled/line, +/obj/machinery/atmospherics/components/unary/thermomachine/freezer/on, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "xNu" = ( /obj/machinery/door/firedoor/border_only{ dir = 1 @@ -66566,12 +66504,25 @@ }, /turf/open/floor/plasteel/dark, /area/engine/atmos_distro) +"xVe" = ( +/obj/structure/frame/machine{ + anchored = 1; + state = 2 + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) "xVm" = ( /obj/effect/turf_decal/trimline/purple/filled/corner{ dir = 4 }, /turf/open/floor/plasteel/white, /area/science/research) +"xVw" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 4 + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/secondarydatacore) "xVy" = ( /obj/structure/table/reinforced, /obj/item/paper_bin, @@ -66714,6 +66665,13 @@ }, /turf/open/floor/plasteel/white, /area/science/robotics/lab) +"xXx" = ( +/obj/effect/turf_decal/trimline/purple/filled/line, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "xXT" = ( /obj/machinery/vending/cola/random, /obj/machinery/light{ @@ -66787,12 +66745,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) -"xYI" = ( -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "xZb" = ( /obj/structure/sign/warning/securearea, /turf/closed/wall/r_wall, @@ -67049,6 +67001,14 @@ }, /turf/open/floor/wood, /area/medical/psych) +"ydY" = ( +/obj/structure/table, +/obj/item/storage/toolbox/mechanical, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "yeb" = ( /obj/machinery/atmospherics/pipe/simple/yellow/hidden{ dir = 1 @@ -67078,6 +67038,15 @@ }, /turf/open/floor/plating, /area/maintenance/port/aft) +"yeN" = ( +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/abandoned, +/obj/machinery/door/airlock/maintenance_hatch, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "yfg" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -67361,9 +67330,6 @@ /obj/effect/turf_decal/trimline/purple/filled/line, /turf/open/floor/plasteel/white, /area/medical/genetics) -"yhP" = ( -/turf/closed/wall/r_wall, -/area/maintenance/starboard/aft) "yhS" = ( /obj/structure/sign/warning/radiation/rad_area{ pixel_x = -32 @@ -67376,6 +67342,9 @@ }, /turf/open/floor/plasteel, /area/storage/primary) +"yin" = ( +/turf/open/floor/catwalk_floor, +/area/ai_monitored/secondarydatacore) "yiu" = ( /obj/machinery/door/firedoor/border_only{ dir = 8 @@ -67508,12 +67477,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/aft) -"yll" = ( -/obj/structure/ethernet_cable{ - icon_state = "4-8" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/secondarydatacore) "ylH" = ( /obj/machinery/sparker{ id = "testigniter"; @@ -97235,7 +97198,7 @@ dcc qsZ lFe rEb -mHv +gNW kLA sYk rtp @@ -97746,7 +97709,7 @@ fPM wKU bVJ rzx -fOB +scr aSV agz aJw @@ -109632,11 +109595,11 @@ cva cva cva gQa -ivJ -hlq -mFl -lFr -xYI +vvF +qGg +qdp +iDT +jrx yap cva cva @@ -109887,15 +109850,15 @@ pEf pEf cva cva -nnq +rzQ nLw -mnk +eYs enZ nSN xlV -smn +gfQ rjo -dbb +dJZ cva cva pEf @@ -110144,15 +110107,15 @@ pEf koy cva cva -ekq -jRK -lMe -jRK -foH -wyD -gkp -jRK -iCM +fsh +kkY +nOl +kkY +bKX +dMq +nfM +kkY +eEW cva cva vUh @@ -110401,15 +110364,15 @@ pEf pEf cva cva -jiH +xVe rjo -iQM +jsZ jTn nVK enZ -kmG +eJE pyn -dcr +vIE cva cva pEf @@ -110660,11 +110623,11 @@ cva cva cva mWE -fER -nEq -raf -iBu -xYI +fBW +fts +rZo +bip +jrx kcr cva cva @@ -117056,7 +117019,7 @@ atN atN atN atN -yhP +ipt fXS cOe gpq @@ -117308,12 +117271,12 @@ iKk oGM mwf oxg -jqR -uzk -uxi -uXG -ewJ -tzz +wBl +vlA +dZj +vgF +uVl +oGM fXS cOe gpq @@ -117565,12 +117528,12 @@ rnA oGM mQY nlV -oKU -oKU -wAV -ewf -dhq -tzz +yin +yin +xVw +kCx +ogU +oGM fXS cOe cNW @@ -117822,12 +117785,12 @@ eEp oGM fKM oGM -snG -ubD -wAV -yll -jIT -tzz +chk +gRl +xVw +xAr +qnb +oGM fXS cNW cNW @@ -118076,15 +118039,15 @@ alj aXb xix uVI -jyL -fwR -wls -kkT -ubD -wAV -yll -vIX -tzz +wfG +ieC +oMZ +jDx +gRl +xVw +xAr +bDq +oGM fXS bNA cOe @@ -118334,14 +118297,14 @@ pWH pgx gxq oGM -ruU -kvY -cix -ubD -rCK -tHr -sox -tzz +gEH +sLh +cIX +gRl +oGp +mkd +nKQ +oGM fXS cOe cOe @@ -118591,14 +118554,14 @@ aRv bQZ bQZ oGM -maT -sbF -gWM -ubD -wAV -yll -lVx -tzz +gYg +cjN +xXx +gRl +xVw +xAr +kep +oGM fXS cjE bMB @@ -118847,15 +118810,15 @@ alZ aMC thv cOe -yhP -kDU -cvB -kLq -ouJ -lYb -lnd -tzz -tzz +oGM +jpR +gWR +oBF +mik +wuI +enn +oGM +oGM fXS cjD cjD @@ -119104,15 +119067,15 @@ cdR xHc cNW cOe -yhP -sVC -hew -uUx -uhp -tLY -oKU -tzz -lWL +oGM +lEP +jRE +xNi +vmp +gfq +yin +oGM +qhz mfN cjD bQq @@ -119361,14 +119324,14 @@ cNW aMC cNW cOe -yhP -tcu -dhU -xtY -uhp -vOD -sXo -tzz +oGM +ydY +aFe +uow +vmp +iPY +koa +oGM bNA uSq kQW @@ -119612,22 +119575,22 @@ cNZ cNZ bSm aWg -gAF -gId -ofw -gAF -ofw -gAF -tzz -vpU -oSh -oVR -ubD -ftt -oKU -tzz -pAB -ssB +cOe +bMB +cNW +cOe +cNW +cOe +oGM +jjQ +qPy +qtx +gRl +dMB +tWC +oGM +cou +nmb cjD shT clz @@ -119875,14 +119838,14 @@ cNW cOe cNW cOe -yhP -yhP -yhP -yhP -yhP -yhP -yhP -yhP +oGM +oGM +oGM +oGM +oGM +oGM +oGM +oGM cOe cOe cjD @@ -120395,8 +120358,8 @@ cNW bNB cOe cOe -omM -tlL +heA +qdi cOe cdR cNW @@ -120899,8 +120862,8 @@ bPp cNW cou cou -aif -eCW +cae +cmo cNW iKq iKq @@ -121152,18 +121115,18 @@ aaf aaa aaa aaf -aJt -ofw -gAF -shx -aif -shx -vXT -iEF -iEF -iEF -qcP -shx +gXs +cNW +cOe +cOe +cae +cOe +vKX +iKq +iKq +iKq +yeN +cOe wZs jjr cNW @@ -121410,17 +121373,17 @@ aaa aaa aaf aaa -ofw -iiP -ofw -ofw -atS -atS -iEF -iEF -iEF -ofw -qJk +cNW +chH +cNW +cNW +cNW +cNW +iKq +iKq +iKq +cNW +chH cOe tPY cNW @@ -121667,24 +121630,24 @@ aaa aaa aaf aaa -ofw -ofw -ofw -hlx +cNW +cNW +cNW +aaf pEf -atS -quc -quc -quc -ofw -atS -atS -rTH -atS -iEF -iEF -iEF -ofw +cNW +lZa +bPp +bPp +cNW +cNW +cNW +kRp +cNW +iKq +iKq +iKq +cNW aaa aaa aaa @@ -121693,255 +121656,255 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(212,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaf -aaa -aaa -aaa -aaf -aaa -aaa -aaf -aaa -aaa -aaa -aaa -aaf -aaa -aaf -aaa -aaa -aaa -aag -aaa -aaa -aoV -hlx -hlx -pEf -hlx -aaa -aaa -aaa -hlx -hlx -ofw -xkK -ofw -iEF -iEF -iEF -ofw +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +"} +(212,1,1) = {" +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaf +aaa +aaa +aaa +aaf +aaa +aaa +aaf +aaa +aaa +aaa +aaa +aaf +aaa +aaf +aaa +aaa +aaa +aag +aaa +aaa +aoV +aaf +aaf +pEf +aaf +aaa +aaa +aaa +aaf +aaf +cNW +szB +cNW +iKq +iKq +iKq +cNW aaa aaa aaa @@ -122186,19 +122149,19 @@ aoV aaa aaa aag -hlx +aaf aaa aaa aaa aaa -hlx -ofw -uwh -ofw -ofw -ofw -ofw -ofw +aaf +cNW +jSR +cNW +cNW +cNW +cNW +cNW aaa aaa aaa @@ -122443,15 +122406,15 @@ aaa aaa aaa pEf -hlx +aaf aaa aaa aaa aaa -hlx -nMp +aaf +aag +aag aag -nMp aoV aaa aaa @@ -122699,7 +122662,7 @@ aaa aaa aaa aaa -eqR +pEf aaa aaa aaa @@ -122956,7 +122919,7 @@ aaa aaa aaa aaa -eqR +pEf aaa aaa aaa @@ -123213,7 +123176,7 @@ aaa aaa aaa aaa -hlx +aaf aaa aaa aaa @@ -123221,7 +123184,7 @@ aaa aaa aaa aaa -hlx +aaf aaa aaa aaa @@ -123478,7 +123441,7 @@ aae aaa aaa aaa -hlx +aaf aaa aaa aaa @@ -123735,7 +123698,7 @@ aaa aaa aaa aaa -hlx +aaf aaa aaa aaa From a09e4d951e6a9bb35b2a61a75f2cc765717cf290 Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Thu, 1 Sep 2022 18:17:03 +0200 Subject: [PATCH 57/66] bit more --- _maps/map_files/YogStation/YogStation.dmm | 1608 ++++++++++----------- 1 file changed, 800 insertions(+), 808 deletions(-) diff --git a/_maps/map_files/YogStation/YogStation.dmm b/_maps/map_files/YogStation/YogStation.dmm index f15dae278733..ae728144b081 100644 --- a/_maps/map_files/YogStation/YogStation.dmm +++ b/_maps/map_files/YogStation/YogStation.dmm @@ -1610,6 +1610,14 @@ /obj/structure/chair/comfy/black, /turf/open/floor/carpet, /area/crew_quarters/heads/hos) +"ail" = ( +/obj/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) "aiu" = ( /obj/structure/sign/departments/minsky/engineering/atmospherics{ pixel_x = 32 @@ -3522,6 +3530,12 @@ /obj/item/stock_parts/cell/high/plus, /turf/open/floor/plasteel, /area/storage/primary) +"avn" = ( +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) "avo" = ( /obj/docking_port/stationary{ dwidth = 8; @@ -5109,15 +5123,6 @@ /obj/effect/decal/remains/human, /turf/open/floor/plating, /area/maintenance/starboard/fore) -"aFe" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "aFf" = ( /obj/structure/table, /obj/item/reagent_containers/glass/beaker/jar{ @@ -9830,6 +9835,15 @@ }, /turf/open/floor/plasteel, /area/bridge/meeting_room) +"bfp" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) "bfq" = ( /obj/machinery/door/firedoor/border_only{ dir = 1 @@ -10279,15 +10293,6 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/dorms) -"bip" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "biE" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -11810,6 +11815,12 @@ /obj/machinery/door/firedoor/border_only, /turf/open/floor/plasteel/white, /area/medical/medbay/lobby) +"btS" = ( +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) "btT" = ( /obj/structure/disposalpipe/sorting/mail/flip{ dir = 8; @@ -13216,13 +13227,6 @@ }, /turf/open/floor/plasteel/white, /area/science/research) -"bDq" = ( -/obj/structure/ethernet_cable{ - icon_state = "0-4" - }, -/obj/machinery/ai/server_cabinet, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/secondarydatacore) "bDx" = ( /obj/structure/table/wood, /obj/item/canvas/twentythreeXtwentythree{ @@ -13395,6 +13399,13 @@ }, /turf/open/floor/plasteel/white/corner, /area/hallway/secondary/entry) +"bEy" = ( +/obj/structure/ethernet_cable{ + icon_state = "0-4" + }, +/obj/machinery/ai/server_cabinet, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/secondarydatacore) "bEC" = ( /turf/closed/wall/r_wall, /area/science/mixing) @@ -13943,6 +13954,16 @@ }, /turf/open/floor/plasteel, /area/engine/atmos_distro) +"bKx" = ( +/obj/machinery/modular_computer/console/preset/netmin{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/purple/filled/line, +/obj/structure/ethernet_cable{ + icon_state = "0-2" + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "bKG" = ( /obj/machinery/requests_console{ department = "EVA"; @@ -14011,16 +14032,6 @@ }, /turf/open/floor/plating, /area/maintenance/aft) -"bKX" = ( -/obj/machinery/ai/data_core/primary, -/obj/structure/ethernet_cable{ - icon_state = "1-2" - }, -/obj/structure/ethernet_cable{ - icon_state = "0-2" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "bKZ" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 4 @@ -14992,6 +15003,13 @@ }, /turf/open/floor/plasteel/white, /area/medical/medbay/lobby) +"bUU" = ( +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/ai_monitored/secondarydatacore) "bUV" = ( /obj/machinery/vending/wardrobe/sec_wardrobe, /obj/machinery/light, @@ -15316,6 +15334,15 @@ }, /turf/open/floor/plating, /area/maintenance/solars/starboard/aft) +"bZc" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 4 + }, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/secondarydatacore) "bZg" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 8 @@ -16020,10 +16047,6 @@ /obj/item/stack/rods/fifty, /turf/open/floor/plasteel, /area/engine/engineering) -"chk" = ( -/obj/effect/spawner/structure/window/reinforced/tinted, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "chq" = ( /obj/machinery/processor/slime, /obj/item/radio/intercom{ @@ -16203,18 +16226,6 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) -"cjN" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "ckf" = ( /obj/structure/chair/office{ dir = 4 @@ -17276,6 +17287,13 @@ }, /turf/open/floor/plasteel/white, /area/medical/medbay/lobby) +"cwg" = ( +/obj/machinery/ai/server_cabinet/prefilled, +/obj/structure/ethernet_cable{ + icon_state = "0-8" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) "cwy" = ( /obj/structure/table/reinforced, /obj/item/paper_bin{ @@ -18052,12 +18070,6 @@ }, /turf/open/floor/plating, /area/science/mixing) -"cIX" = ( -/obj/structure/table, -/obj/item/storage/box/donkpockets, -/obj/effect/turf_decal/trimline/purple/filled/line, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "cIZ" = ( /turf/open/floor/plasteel, /area/hydroponics) @@ -18481,6 +18493,12 @@ }, /turf/open/floor/plasteel, /area/quartermaster/miningdock) +"cPu" = ( +/obj/effect/turf_decal/trimline/purple/filled/line, +/obj/machinery/portable_atmospherics/canister/nitrogen, +/obj/machinery/atmospherics/components/unary/portables_connector/visible, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "cPD" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 6 @@ -18877,6 +18895,15 @@ }, /turf/open/floor/plasteel/white, /area/medical/medbay/central) +"cYg" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) "cYj" = ( /obj/structure/lattice, /obj/effect/spawner/lootdrop/maintenance, @@ -19453,6 +19480,12 @@ }, /turf/open/floor/plasteel/dark, /area/science/xenobiology) +"dmC" = ( +/obj/structure/ethernet_cable{ + icon_state = "1-4" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) "dmK" = ( /obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, @@ -19713,6 +19746,16 @@ /obj/structure/closet/crate, /turf/open/floor/plasteel, /area/construction) +"dwz" = ( +/obj/machinery/ai/data_core/primary, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/obj/structure/ethernet_cable{ + icon_state = "0-2" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) "dwA" = ( /obj/effect/mapping_helpers/airlock/unres, /obj/machinery/door/firedoor/border_only{ @@ -19784,6 +19827,26 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/fore) +"dxO" = ( +/obj/structure/chair/office/dark{ + dir = 4 + }, +/obj/machinery/computer/security/telescreen{ + dir = 1; + name = "Telecomms Camera Monitor"; + network = list("tcomms"); + pixel_x = 30; + pixel_y = -37 + }, +/obj/item/radio/intercom{ + dir = 1; + freerange = 1; + name = "Station Intercom (Telecomms)"; + pixel_x = 28; + pixel_y = -26 + }, +/turf/open/floor/plasteel/grimy, +/area/tcommsat/computer) "dxV" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table, @@ -19950,6 +20013,12 @@ }, /turf/open/floor/plasteel/dark, /area/ai_monitored/nuke_storage) +"dBQ" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 4 + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/secondarydatacore) "dBU" = ( /obj/machinery/light_switch{ pixel_x = 27 @@ -20104,6 +20173,12 @@ }, /turf/open/floor/plasteel/freezer, /area/crew_quarters/toilet) +"dFv" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ + external_pressure_bound = 120 + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/secondarydatacore) "dFX" = ( /obj/machinery/door/airlock/maintenance{ name = "Security Maintenance"; @@ -20318,14 +20393,6 @@ /obj/structure/disposalpipe/trunk, /turf/open/floor/plasteel/dark, /area/security/prison) -"dJZ" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/frame/machine{ - anchored = 1; - state = 2 - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "dKq" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, /obj/machinery/light{ @@ -20442,23 +20509,6 @@ }, /turf/open/floor/plasteel, /area/science/misc_lab) -"dMq" = ( -/obj/structure/ethernet_cable{ - icon_state = "1-2" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) -"dMB" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 8; - external_pressure_bound = 140; - pressure_checks = 0 - }, -/obj/machinery/light{ - dir = 4 - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/secondarydatacore) "dMJ" = ( /obj/machinery/advanced_airlock_controller{ dir = 8; @@ -20937,15 +20987,6 @@ }, /turf/open/floor/plasteel, /area/clerk) -"dZj" = ( -/obj/machinery/atmospherics/pipe/manifold/general/visible{ - dir = 8 - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/secondarydatacore) "dZv" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/trimline/blue/filled/warning{ @@ -21236,6 +21277,12 @@ }, /turf/open/floor/plasteel, /area/security/checkpoint/engineering) +"efW" = ( +/obj/structure/table, +/obj/item/storage/box/donkpockets, +/obj/effect/turf_decal/trimline/purple/filled/line, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "egc" = ( /obj/machinery/door/poddoor/preopen{ id = "atmos"; @@ -21628,12 +21675,6 @@ }, /turf/open/floor/plasteel, /area/quartermaster/office) -"enn" = ( -/obj/structure/ethernet_cable{ - icon_state = "1-8" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/secondarydatacore) "enW" = ( /obj/machinery/door/firedoor/border_only{ dir = 1 @@ -22437,12 +22478,6 @@ }, /turf/open/floor/plasteel, /area/quartermaster/miningdock) -"eEW" = ( -/obj/structure/ethernet_cable{ - icon_state = "1-4" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "eEZ" = ( /obj/machinery/power/apc{ areastring = "/area/ai_monitored/turret_protected/aisat_interior"; @@ -22719,16 +22754,6 @@ }, /turf/open/floor/plating, /area/science/xenobiology) -"eJE" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/hidden, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "eJS" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 @@ -23082,6 +23107,18 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/locker) +"eRM" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) "eRR" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, @@ -23110,6 +23147,25 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /turf/open/floor/plasteel, /area/janitor) +"eUd" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/airlock/hatch{ + name = "Telecommunications"; + req_access_txt = "61" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/grimy, +/area/tcommsat/computer) "eUf" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 @@ -23395,14 +23451,6 @@ }, /turf/open/floor/plating, /area/construction/mining/aux_base) -"eYs" = ( -/obj/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "eYt" = ( /obj/machinery/meter, /obj/machinery/atmospherics/pipe/simple/cyan/visible{ @@ -23480,6 +23528,12 @@ /obj/effect/landmark/stationroom/maint/threexfive, /turf/template_noop, /area/maintenance/port/aft) +"faX" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) "fbF" = ( /obj/structure/table, /obj/item/radio/off, @@ -23536,6 +23590,17 @@ }, /turf/open/floor/plasteel/white, /area/science/research) +"fcx" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = 27 + }, +/obj/structure/table, +/obj/item/stack/ethernet_coil, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 5 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "fcB" = ( /obj/machinery/atmospherics/pipe/simple/yellow/visible, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ @@ -23656,6 +23721,16 @@ }, /turf/open/floor/engine, /area/maintenance/disposal/incinerator) +"fhg" = ( +/obj/structure/ethernet_cable{ + icon_state = "1-4" + }, +/obj/structure/ethernet_cable{ + icon_state = "1-8" + }, +/obj/machinery/light, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/secondarydatacore) "fhs" = ( /obj/machinery/light, /obj/structure/table/glass, @@ -23861,6 +23936,12 @@ /obj/effect/turf_decal/trimline/red/filled/line, /turf/open/floor/plasteel, /area/hallway/primary/fore) +"fky" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) "fkK" = ( /obj/machinery/vending/gifts, /obj/structure/sign/poster/official/random{ @@ -23888,6 +23969,15 @@ /obj/effect/turf_decal/trimline/red/filled/corner, /turf/open/floor/plasteel, /area/security/brig) +"flr" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "flC" = ( /obj/machinery/door/firedoor/border_only{ dir = 4 @@ -24141,14 +24231,6 @@ }, /turf/closed/wall/r_wall, /area/maintenance/disposal/incinerator) -"fsh" = ( -/obj/item/stack/cable_coil, -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/ethernet_cable{ - icon_state = "2-8" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "fsi" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 @@ -24235,15 +24317,6 @@ }, /turf/open/floor/plasteel, /area/engine/engine_smes) -"fts" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "ftv" = ( /obj/machinery/airalarm{ pixel_y = 24 @@ -24629,12 +24702,6 @@ }, /turf/open/floor/plasteel, /area/engine/atmos) -"fBW" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "fCb" = ( /obj/machinery/portable_atmospherics/canister/air, /turf/open/floor/plating, @@ -25853,6 +25920,14 @@ }, /turf/open/floor/plasteel, /area/quartermaster/storage) +"gcd" = ( +/obj/structure/table, +/obj/machinery/microwave, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 10 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "gce" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/door/firedoor/border_only{ @@ -26007,10 +26082,6 @@ }, /turf/open/floor/plasteel, /area/security/prison) -"gfq" = ( -/obj/machinery/atmospherics/pipe/manifold/general/visible, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/secondarydatacore) "gft" = ( /obj/effect/decal/cleanable/cobweb, /obj/machinery/power/smes, @@ -26035,15 +26106,6 @@ }, /turf/open/space, /area/solar/port/aft) -"gfQ" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "ggh" = ( /obj/machinery/power/apc/highcap/five_k{ areastring = "/area/bridge"; @@ -26255,6 +26317,13 @@ /obj/machinery/atmospherics/miner/toxins, /turf/open/floor/engine/plasma, /area/engine/atmos_distro) +"goz" = ( +/obj/machinery/holopad, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) "goG" = ( /obj/structure/sign/warning/securearea{ pixel_x = 32 @@ -26668,6 +26737,18 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, /turf/open/floor/plasteel/white, /area/security/brig) +"gyo" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/ai/networking{ + label = "Main Core"; + roundstart_connection = "Computer Science" + }, +/obj/structure/ethernet_cable{ + icon_state = "0-4" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) "gyX" = ( /obj/machinery/light{ dir = 4 @@ -26875,28 +26956,6 @@ /obj/effect/turf_decal/trimline/red/filled/warning, /turf/open/floor/plasteel, /area/security/checkpoint/auxiliary) -"gEH" = ( -/obj/machinery/camera{ - c_tag = "Secondary AI Core"; - dir = 8; - network = list("ss13","rd") - }, -/obj/machinery/airalarm{ - pixel_y = 24 - }, -/obj/machinery/power/smes/engineering{ - charge = 5e+006; - input_level = 25000; - output_level = 20000 - }, -/obj/structure/cable{ - icon_state = "0-2" - }, -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "gFe" = ( /obj/structure/table, /obj/item/vending_refill/medical{ @@ -26937,6 +26996,13 @@ }, /turf/open/floor/plasteel/white, /area/science/xenobiology) +"gFD" = ( +/obj/structure/frame/machine{ + anchored = 1; + state = 2 + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) "gFN" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 @@ -27188,25 +27254,6 @@ }, /turf/open/floor/plasteel/white, /area/science/explab) -"gNW" = ( -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/airlock/hatch{ - name = "Telecommunications"; - req_access_txt = "61" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plasteel/grimy, -/area/tcommsat/computer) "gOa" = ( /obj/effect/turf_decal/siding/wood{ dir = 1 @@ -27393,10 +27440,6 @@ }, /turf/open/floor/plating, /area/maintenance/port) -"gRl" = ( -/obj/effect/spawner/structure/window/reinforced/tinted, -/turf/open/floor/plating, -/area/ai_monitored/secondarydatacore) "gRH" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 @@ -27677,19 +27720,6 @@ /obj/effect/turf_decal/bot, /turf/open/floor/plasteel/white, /area/science/nanite) -"gWR" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/chair/office/light{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/effect/landmark/start/yogs/network_admin, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "gXs" = ( /obj/structure/lattice, /turf/open/space/basic, @@ -27730,13 +27760,6 @@ }, /turf/open/floor/plasteel, /area/quartermaster/office) -"gYg" = ( -/obj/machinery/rnd/production/circuit_imprinter/department/netmin, -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "gYw" = ( /obj/machinery/computer/libraryconsole, /obj/structure/table/wood, @@ -28052,10 +28075,6 @@ }, /turf/open/floor/plating, /area/bridge/meeting_room) -"heA" = ( -/obj/structure/grille, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "heO" = ( /obj/effect/turf_decal/trimline/yellow/filled/corner{ dir = 1 @@ -30219,6 +30238,10 @@ }, /turf/open/floor/plasteel/grimy, /area/tcommsat/computer) +"hYR" = ( +/obj/effect/spawner/structure/window/reinforced/shutter, +/turf/open/floor/plating, +/area/space) "hYX" = ( /obj/structure/cable/yellow{ icon_state = "1-2" @@ -30528,22 +30551,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /turf/open/floor/plasteel, /area/engine/atmos_distro) -"ieC" = ( -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/structure/cable, -/obj/effect/turf_decal/trimline/purple/filled/warning{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "ifk" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -30671,6 +30678,15 @@ }, /turf/open/floor/plasteel, /area/security/processing) +"iif" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) "iiE" = ( /obj/machinery/firealarm{ dir = 1; @@ -30955,9 +30971,6 @@ }, /turf/open/floor/plasteel, /area/maintenance/disposal/incinerator) -"ipt" = ( -/turf/closed/wall/r_wall, -/area/maintenance/starboard/aft) "ipu" = ( /obj/structure/table/reinforced, /obj/item/cartridge/engineering{ @@ -31616,12 +31629,6 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/aft) -"iDT" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "iDY" = ( /obj/machinery/atmospherics/pipe/simple/green/visible{ dir = 4 @@ -32233,10 +32240,6 @@ }, /turf/open/floor/plasteel/white, /area/science/xenobiology) -"iPY" = ( -/obj/machinery/atmospherics/pipe/manifold4w/general/visible, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/secondarydatacore) "iQm" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -33087,17 +33090,6 @@ }, /turf/open/floor/engine, /area/maintenance/disposal/incinerator) -"jjQ" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = 27 - }, -/obj/structure/table, -/obj/item/stack/ethernet_coil, -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 5 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "jjR" = ( /obj/machinery/atmospherics/components/unary/tank/toxins, /turf/open/floor/plasteel, @@ -33250,6 +33242,16 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/aft_starboard) +"jnI" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) "joa" = ( /obj/effect/spawner/lootdrop/maintenance{ lootcount = 3; @@ -33390,13 +33392,6 @@ }, /turf/open/floor/plasteel/white, /area/medical/medbay/central) -"jpR" = ( -/obj/machinery/rack_creator, -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "jpZ" = ( /obj/structure/table, /obj/item/multitool, @@ -33505,12 +33500,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) -"jrx" = ( -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "jry" = ( /obj/structure/cable{ icon_state = "4-8" @@ -33605,13 +33594,6 @@ }, /turf/open/floor/carpet/blue, /area/crew_quarters/heads/captain) -"jsZ" = ( -/obj/structure/window/reinforced, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "jte" = ( /obj/machinery/door/firedoor/border_only, /obj/machinery/door/firedoor/border_only{ @@ -33983,6 +33965,10 @@ /obj/effect/turf_decal/box/corners, /turf/open/floor/engine, /area/science/xenobiology) +"jCO" = ( +/obj/machinery/atmospherics/pipe/manifold4w/general/visible, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/secondarydatacore) "jDa" = ( /obj/structure/table/wood, /obj/item/folder/blue, @@ -34024,14 +34010,6 @@ }, /turf/open/floor/plasteel/white, /area/medical/virology) -"jDx" = ( -/obj/structure/table, -/obj/machinery/microwave, -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 10 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "jDB" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 @@ -34325,6 +34303,29 @@ /obj/effect/turf_decal/siding/wood, /turf/open/floor/wood, /area/library) +"jJv" = ( +/obj/machinery/doorButtons/access_button{ + idDoor = "secondary_aicore_interior"; + idSelf = "secondary_aicore_controller"; + name = "Secondary AI Core Access Button"; + pixel_x = -24; + pixel_y = 8; + req_one_access_txt = "30;70" + }, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "jJy" = ( /obj/structure/chair{ dir = 4 @@ -34609,15 +34610,6 @@ }, /turf/open/floor/wood, /area/library) -"jRE" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "jRI" = ( /obj/structure/bookcase/random/religion, /turf/open/floor/carpet, @@ -35145,13 +35137,6 @@ }, /turf/open/floor/plating, /area/engine/engineering) -"kep" = ( -/obj/structure/ethernet_cable{ - icon_state = "0-8" - }, -/obj/machinery/ai/server_cabinet/prefilled, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/secondarydatacore) "ker" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 @@ -35512,15 +35497,6 @@ }, /turf/open/floor/plasteel, /area/janitor) -"kkY" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 4 - }, -/obj/structure/ethernet_cable{ - icon_state = "1-2" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "klD" = ( /obj/structure/sign/departments/minsky/medical/chemistry/chemical2, /turf/closed/wall, @@ -35643,14 +35619,6 @@ dir = 1 }, /area/hallway/secondary/entry) -"koa" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 1; - external_pressure_bound = 140; - pressure_checks = 0 - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/secondarydatacore) "kob" = ( /turf/open/floor/plasteel/white/corner{ dir = 8 @@ -35712,6 +35680,14 @@ }, /turf/open/space/basic, /area/space) +"krU" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1; + external_pressure_bound = 140; + pressure_checks = 0 + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/secondarydatacore) "kse" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, @@ -35727,6 +35703,18 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/service) +"ksJ" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ + dir = 1; + external_pressure_bound = 120 + }, +/obj/machinery/camera{ + c_tag = "Secondary AI Core"; + dir = 4; + network = list("ss13","rd") + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/secondarydatacore) "ksL" = ( /obj/structure/chair/stool, /obj/effect/landmark/start/scientist, @@ -36130,12 +36118,6 @@ /obj/item/wrench, /turf/open/floor/plasteel/dark, /area/science/xenobiology) -"kCx" = ( -/obj/structure/ethernet_cable{ - icon_state = "2-4" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/secondarydatacore) "kCI" = ( /obj/machinery/navbeacon{ codes_txt = "delivery;dir=8"; @@ -37257,6 +37239,13 @@ "ldW" = ( /turf/template_noop, /area/maintenance/aft) +"lej" = ( +/obj/effect/turf_decal/trimline/purple/filled/line, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "leo" = ( /obj/structure/window/reinforced{ dir = 4 @@ -37786,6 +37775,23 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/starboard) +"lpZ" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/airlock/research/glass{ + name = "Computer Science"; + normalspeed = 0; + req_access_txt = "47" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "lql" = ( /obj/structure/rack, /obj/item/storage/toolbox/electrical{ @@ -38315,13 +38321,6 @@ /obj/effect/turf_decal/trimline/blue/filled/line, /turf/open/floor/plasteel/white, /area/medical/genetics/cloning) -"lEP" = ( -/obj/machinery/computer/ai_overclocking, -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "lEQ" = ( /obj/machinery/door/poddoor/shutters/preopen{ id = "robotics2"; @@ -38670,6 +38669,12 @@ }, /turf/open/floor/plasteel/white, /area/medical/virology) +"lPZ" = ( +/obj/structure/ethernet_cable{ + icon_state = "2-4" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/secondarydatacore) "lQm" = ( /obj/effect/turf_decal/stripes/end{ dir = 1 @@ -39038,10 +39043,6 @@ }, /turf/open/floor/plating, /area/maintenance/disposal) -"lZa" = ( -/obj/effect/spawner/structure/window/reinforced/shutter, -/turf/open/floor/plating, -/area/space) "lZb" = ( /obj/machinery/door/airlock/public/glass{ name = "Fitness" @@ -39356,6 +39357,15 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/fore) +"mgk" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) "mgl" = ( /obj/machinery/door/airlock/external{ name = "Solar Maintenance"; @@ -39447,13 +39457,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) -"mik" = ( -/obj/effect/spawner/structure/window/reinforced/tinted, -/obj/structure/ethernet_cable{ - icon_state = "1-2" - }, -/turf/open/floor/plating, -/area/ai_monitored/secondarydatacore) "min" = ( /obj/structure/table/wood, /obj/machinery/photocopier/faxmachine{ @@ -39581,15 +39584,6 @@ /obj/structure/disposalpipe/trunk, /turf/open/floor/wood, /area/lawoffice) -"mkd" = ( -/obj/structure/ethernet_cable{ - icon_state = "2-8" - }, -/obj/structure/ethernet_cable{ - icon_state = "2-4" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/secondarydatacore) "mkg" = ( /obj/machinery/door/firedoor/border_only{ dir = 1 @@ -39708,6 +39702,13 @@ }, /turf/open/floor/plasteel, /area/security/brig) +"mls" = ( +/obj/structure/ethernet_cable{ + icon_state = "0-8" + }, +/obj/machinery/ai/server_cabinet/prefilled, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/secondarydatacore) "mlv" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/vending/cola/shamblers/prison{ @@ -39715,6 +39716,10 @@ }, /turf/open/floor/plasteel, /area/security/prison) +"mmu" = ( +/obj/machinery/atmospherics/pipe/manifold/general/visible, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/secondarydatacore) "mmT" = ( /obj/machinery/door/airlock/medical{ name = "Paramedic Staging Area"; @@ -40419,6 +40424,14 @@ /obj/effect/turf_decal/trimline/red/filled/line, /turf/open/floor/plasteel, /area/security/prison/hallway) +"myC" = ( +/obj/item/stack/cable_coil, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/ethernet_cable{ + icon_state = "2-8" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) "myI" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ @@ -41574,6 +41587,9 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/starboard) +"mYX" = ( +/turf/closed/wall/r_wall, +/area/maintenance/starboard/aft) "mZa" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 5 @@ -42068,18 +42084,6 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/quartermaster/storage) -"nfM" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/obj/structure/ethernet_cable{ - icon_state = "1-2" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "nfX" = ( /turf/open/floor/carpet/blue, /area/crew_quarters/heads/hop) @@ -42391,21 +42395,6 @@ /obj/item/aiModule/supplied/freeform, /turf/open/floor/circuit, /area/ai_monitored/turret_protected/ai_upload) -"nmb" = ( -/obj/structure/sign/warning/electricshock{ - pixel_y = -32 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 9 - }, -/obj/structure/cable{ - icon_state = "1-8" - }, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "nmn" = ( /obj/machinery/door/airlock/maintenance_hatch, /obj/effect/mapping_helpers/airlock/abandoned, @@ -43380,6 +43369,13 @@ }, /turf/closed/wall, /area/engine/atmos_distro) +"nKi" = ( +/obj/machinery/rack_creator, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "nKv" = ( /obj/effect/turf_decal/bot_white/right, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, @@ -43441,16 +43437,6 @@ }, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/ai) -"nKQ" = ( -/obj/structure/ethernet_cable{ - icon_state = "1-4" - }, -/obj/structure/ethernet_cable{ - icon_state = "1-8" - }, -/obj/machinery/light, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/secondarydatacore) "nKU" = ( /obj/effect/turf_decal/trimline/yellow/filled/corner, /turf/open/floor/plasteel, @@ -43504,16 +43490,6 @@ }, /turf/open/floor/plasteel, /area/security/brig) -"nOl" = ( -/obj/structure/window/reinforced, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/structure/ethernet_cable{ - icon_state = "1-2" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "nOu" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 8 @@ -43818,6 +43794,10 @@ }, /turf/open/floor/plasteel/dark, /area/engine/engineering) +"nUE" = ( +/obj/structure/table, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "nUH" = ( /obj/effect/turf_decal/trimline/purple/filled/corner{ dir = 1 @@ -44045,6 +44025,13 @@ /obj/effect/turf_decal/ramp_middle, /turf/open/floor/wood, /area/library) +"nZs" = ( +/obj/structure/window/reinforced, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) "oat" = ( /obj/machinery/disposal/bin, /obj/machinery/light{ @@ -44228,6 +44215,14 @@ dir = 8 }, /area/hallway/secondary/exit) +"odc" = ( +/obj/machinery/camera{ + c_tag = "Secondary AI Core"; + dir = 8; + network = list("ss13","rd") + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/secondarydatacore) "ody" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 4 @@ -44346,16 +44341,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/security/brig) -"ogU" = ( -/obj/structure/ethernet_cable{ - icon_state = "1-8" - }, -/obj/structure/ethernet_cable{ - icon_state = "1-4" - }, -/obj/machinery/light, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/secondarydatacore) "ogV" = ( /obj/structure/lattice/catwalk, /obj/structure/cable/yellow{ @@ -44767,6 +44752,12 @@ }, /turf/open/floor/plasteel, /area/engine/atmos) +"osd" = ( +/obj/structure/ethernet_cable{ + icon_state = "4-8" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/secondarydatacore) "osj" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 8 @@ -45351,16 +45342,6 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/aft) -"oBF" = ( -/obj/machinery/modular_computer/console/preset/netmin{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/purple/filled/line, -/obj/structure/ethernet_cable{ - icon_state = "0-2" - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "oBH" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, @@ -45537,12 +45518,6 @@ /obj/item/book/manual/wiki/xenobiology, /turf/open/floor/plasteel/dark, /area/science/xenobiology) -"oGp" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible{ - dir = 8 - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/secondarydatacore) "oGM" = ( /turf/closed/wall/r_wall, /area/ai_monitored/secondarydatacore) @@ -45803,29 +45778,6 @@ }, /turf/open/floor/engine, /area/science/mixing/chamber) -"oMZ" = ( -/obj/machinery/doorButtons/access_button{ - idDoor = "secondary_aicore_interior"; - idSelf = "secondary_aicore_controller"; - name = "Secondary AI Core Access Button"; - pixel_x = -24; - pixel_y = 8; - req_one_access_txt = "30;70" - }, -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 5 - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "oNb" = ( /obj/structure/sign/departments/minsky/command/charge{ pixel_x = 32 @@ -46336,6 +46288,15 @@ }, /turf/open/floor/plating, /area/storage/tech) +"paj" = ( +/obj/machinery/atmospherics/pipe/manifold/general/visible{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/secondarydatacore) "pal" = ( /obj/machinery/atmospherics/pipe/simple/green/visible{ dir = 10 @@ -48707,24 +48668,6 @@ }, /turf/open/floor/plasteel, /area/hydroponics/garden) -"qdi" = ( -/obj/machinery/power/apc{ - areastring = "/area/maintenance/starboard/aft"; - dir = 4; - name = "Starboard Quarter Maintenance APC"; - pixel_x = 24 - }, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) -"qdp" = ( -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/structure/cable/yellow{ - icon_state = "1-8" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "qdv" = ( /turf/open/floor/carpet, /area/crew_quarters/fitness) @@ -48896,10 +48839,6 @@ /obj/effect/turf_decal/trimline/purple/filled/line, /turf/open/floor/plasteel, /area/hallway/primary/starboard) -"qhz" = ( -/obj/structure/table, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "qhA" = ( /obj/structure/transit_tube/curved/flipped{ dir = 8 @@ -49126,13 +49065,6 @@ }, /turf/closed/wall/r_wall, /area/engine/atmos) -"qnb" = ( -/obj/machinery/ai/data_core, -/obj/structure/ethernet_cable{ - icon_state = "0-8" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/secondarydatacore) "qnm" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ dir = 1 @@ -49436,13 +49368,6 @@ /mob/living/carbon/monkey, /turf/open/floor/grass, /area/medical/genetics) -"qtx" = ( -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 6 - }, -/obj/item/twohanded/required/kirbyplants/random, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "qtP" = ( /turf/closed/wall, /area/hallway/primary/aft) @@ -49661,6 +49586,12 @@ }, /turf/open/floor/plasteel/white, /area/science/mixing/chamber) +"qyM" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 8 + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/secondarydatacore) "qyN" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 @@ -49772,6 +49703,11 @@ }, /turf/open/space/basic, /area/ai_monitored/turret_protected/aisat_interior) +"qAr" = ( +/obj/effect/turf_decal/trimline/purple/filled/line, +/obj/machinery/atmospherics/components/unary/thermomachine/freezer/on, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "qAt" = ( /obj/structure/table, /obj/item/paper_bin{ @@ -49991,15 +49927,6 @@ }, /turf/open/floor/plasteel/white, /area/medical/surgery) -"qGg" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "qGp" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 10 @@ -50538,32 +50465,6 @@ }, /turf/open/floor/plasteel, /area/ai_monitored/storage/eva) -"qPy" = ( -/obj/machinery/power/apc/highcap{ - areastring = "/area/ai_monitored/secondarydatacore"; - dir = 4; - name = "AI Secondary Datacore"; - pixel_x = 24 - }, -/obj/machinery/light{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "0-8" - }, -/obj/structure/table, -/obj/item/circuitboard/machine/server_cabinet, -/obj/item/circuitboard/machine/ai_data_core, -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 4 - }, -/obj/machinery/camera{ - c_tag = "Secondary AI Core"; - dir = 8; - network = list("ss13","rd") - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "qPC" = ( /obj/machinery/bounty_board, /turf/closed/wall, @@ -51030,6 +50931,16 @@ /obj/effect/turf_decal/trimline/red/filled/line, /turf/open/floor/plasteel/dark/telecomms, /area/tcommsat/server) +"qZP" = ( +/obj/structure/window/reinforced, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) "qZY" = ( /obj/structure/sink{ dir = 8; @@ -51052,6 +50963,14 @@ /obj/effect/turf_decal/trimline/blue/filled/corner, /turf/open/floor/plasteel, /area/engine/atmos) +"rav" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible, +/obj/machinery/airalarm/tcomms{ + dir = 4; + pixel_x = -24 + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/secondarydatacore) "ray" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 9 @@ -51217,6 +51136,17 @@ }, /turf/open/floor/plasteel, /area/science/robotics/mechbay) +"rfh" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 8; + external_pressure_bound = 140; + pressure_checks = 0 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/secondarydatacore) "rfy" = ( /obj/machinery/airalarm{ dir = 8; @@ -51300,6 +51230,13 @@ /obj/structure/closet/toolcloset, /turf/open/floor/plasteel, /area/construction) +"rhz" = ( +/obj/machinery/ai/data_core, +/obj/structure/ethernet_cable{ + icon_state = "0-8" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/secondarydatacore) "rhN" = ( /obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, @@ -52035,18 +51972,22 @@ }, /turf/open/floor/plasteel/cafeteria, /area/crew_quarters/heads/cmo) -"rzQ" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/ai/networking{ - label = "Main Core"; - roundstart_connection = "Computer Science" +"rzU" = ( +/obj/machinery/power/terminal{ + dir = 4 }, -/obj/structure/ethernet_cable{ - icon_state = "0-4" +/obj/structure/cable, +/obj/effect/turf_decal/trimline/purple/filled/warning{ + dir = 9 }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "rAb" = ( /obj/structure/lattice/catwalk, /obj/machinery/atmospherics/components/binary/pump/layer2{ @@ -52097,6 +52038,15 @@ }, /turf/open/floor/plasteel, /area/engine/atmos_distro) +"rBx" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "rBz" = ( /obj/item/radio/intercom{ pixel_y = -27 @@ -52577,6 +52527,32 @@ }, /turf/open/floor/plating, /area/maintenance/department/electrical) +"rKn" = ( +/obj/machinery/power/apc/highcap{ + areastring = "/area/ai_monitored/secondarydatacore"; + dir = 4; + name = "AI Secondary Datacore"; + pixel_x = 24 + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/structure/table, +/obj/item/circuitboard/machine/server_cabinet, +/obj/item/circuitboard/machine/ai_data_core, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Secondary AI Core"; + dir = 8; + network = list("ss13","rd") + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "rKs" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, @@ -52691,6 +52667,13 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/entry) +"rOm" = ( +/obj/machinery/computer/ai_overclocking, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "rOz" = ( /obj/structure/table, /obj/item/storage/belt/utility, @@ -53245,13 +53228,6 @@ }, /turf/open/floor/plasteel, /area/hydroponics/garden) -"rZo" = ( -/obj/machinery/holopad, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "rZt" = ( /turf/closed/wall, /area/medical/paramedic) @@ -53351,26 +53327,6 @@ }, /turf/open/floor/circuit/telecomms/server, /area/ai_monitored/turret_protected/ai) -"scr" = ( -/obj/structure/chair/office/dark{ - dir = 4 - }, -/obj/machinery/computer/security/telescreen{ - dir = 1; - name = "Telecomms Camera Monitor"; - network = list("tcomms"); - pixel_x = 30; - pixel_y = -37 - }, -/obj/item/radio/intercom{ - dir = 1; - freerange = 1; - name = "Station Intercom (Telecomms)"; - pixel_x = 28; - pixel_y = -26 - }, -/turf/open/floor/plasteel/grimy, -/area/tcommsat/computer) "sde" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 1 @@ -54216,6 +54172,12 @@ "syq" = ( /turf/template_noop, /area/maintenance/starboard/fore) +"syy" = ( +/obj/structure/ethernet_cable{ + icon_state = "1-8" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/secondarydatacore) "syA" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 4 @@ -54438,6 +54400,18 @@ }, /turf/open/floor/plasteel, /area/science/nanite) +"sDx" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "sDG" = ( /obj/structure/closet{ name = "Evidence Closet" @@ -54843,18 +54817,6 @@ }, /turf/open/floor/plasteel/dark, /area/science/robotics/lab) -"sLh" = ( -/obj/structure/cable{ - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "sLk" = ( /obj/machinery/camera{ c_tag = "Xenobiology Desk Exterior"; @@ -55572,6 +55534,9 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) +"tad" = ( +/turf/open/floor/catwalk_floor, +/area/ai_monitored/secondarydatacore) "tah" = ( /obj/effect/landmark/stationroom/maint/threexfive, /turf/template_noop, @@ -56428,6 +56393,13 @@ }, /turf/open/floor/plasteel/white, /area/medical/virology) +"trH" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 6 + }, +/obj/item/twohanded/required/kirbyplants/random, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "tsu" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 1 @@ -56917,6 +56889,13 @@ }, /turf/open/floor/plasteel, /area/maintenance/disposal/incinerator) +"tEQ" = ( +/obj/machinery/rnd/production/circuit_imprinter/department/netmin, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "tEV" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ @@ -57728,14 +57707,6 @@ }, /turf/open/floor/plasteel, /area/hydroponics/garden) -"tWC" = ( -/obj/machinery/camera{ - c_tag = "Secondary AI Core"; - dir = 8; - network = list("ss13","rd") - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/secondarydatacore) "tWQ" = ( /obj/structure/cable/orange{ icon_state = "4-8" @@ -57985,6 +57956,10 @@ }, /turf/open/floor/circuit, /area/ai_monitored/turret_protected/ai_upload) +"uaD" = ( +/obj/structure/grille, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "uaL" = ( /obj/machinery/light/small{ dir = 1 @@ -58553,12 +58528,6 @@ }, /turf/open/floor/plating, /area/medical/chemistry) -"uow" = ( -/obj/effect/turf_decal/trimline/purple/filled/line, -/obj/machinery/portable_atmospherics/canister/nitrogen, -/obj/machinery/atmospherics/components/unary/portables_connector/visible, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "uoF" = ( /obj/machinery/portable_atmospherics/canister/oxygen, /turf/open/floor/plasteel, @@ -59232,6 +59201,16 @@ }, /turf/open/floor/plating, /area/maintenance/aft) +"uEo" = ( +/obj/machinery/ai/networking{ + label = "Computer Science"; + roundstart_connection = "Main Core" + }, +/obj/structure/ethernet_cable{ + icon_state = "0-4" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/secondarydatacore) "uEH" = ( /obj/effect/turf_decal/trimline/brown/filled/warning{ dir = 1 @@ -59791,6 +59770,15 @@ }, /turf/open/floor/circuit, /area/ai_monitored/nuke_storage) +"uRW" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 4 + }, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) "uSd" = ( /obj/structure/closet/secure_closet/paramedic, /obj/effect/turf_decal/delivery, @@ -59849,6 +59837,11 @@ }, /turf/open/floor/plasteel, /area/engine/foyer) +"uSO" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/ai_monitored/secondarydatacore) "uTh" = ( /turf/closed/wall, /area/security/execution/transfer) @@ -59926,16 +59919,6 @@ }, /turf/open/floor/plasteel, /area/science/research) -"uVl" = ( -/obj/machinery/ai/networking{ - label = "Computer Science"; - roundstart_connection = "Main Core" - }, -/obj/structure/ethernet_cable{ - icon_state = "0-4" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/secondarydatacore) "uVm" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 @@ -60029,6 +60012,15 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) +"uWO" = ( +/obj/structure/ethernet_cable{ + icon_state = "2-8" + }, +/obj/structure/ethernet_cable{ + icon_state = "2-4" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/secondarydatacore) "uWQ" = ( /obj/machinery/flasher{ id = "Cell 2"; @@ -60460,18 +60452,6 @@ "vfS" = ( /turf/open/floor/plasteel, /area/crew_quarters/heads/chief) -"vgF" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ - dir = 1; - external_pressure_bound = 120 - }, -/obj/machinery/camera{ - c_tag = "Secondary AI Core"; - dir = 4; - network = list("ss13","rd") - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/secondarydatacore) "vhj" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 @@ -60679,20 +60659,34 @@ }, /turf/open/floor/plasteel, /area/maintenance/disposal/incinerator) +"vkE" = ( +/obj/machinery/camera{ + c_tag = "Secondary AI Core"; + dir = 8; + network = list("ss13","rd") + }, +/obj/machinery/airalarm{ + pixel_y = 24 + }, +/obj/machinery/power/smes/engineering{ + charge = 5e+006; + input_level = 25000; + output_level = 20000 + }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "vkJ" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/open/floor/plasteel/dark, /area/chapel/main) -"vlA" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible, -/obj/machinery/airalarm/tcomms{ - dir = 4; - pixel_x = -24 - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/secondarydatacore) "vlJ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 9 @@ -60724,11 +60718,6 @@ "vmm" = ( /turf/closed/wall, /area/ai_monitored/turret_protected/aisat_interior) -"vmp" = ( -/obj/effect/spawner/structure/window/reinforced/tinted, -/obj/machinery/atmospherics/pipe/simple/general/visible, -/turf/open/floor/plating, -/area/ai_monitored/secondarydatacore) "vnv" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 10 @@ -61016,6 +61005,18 @@ /obj/machinery/portable_atmospherics/canister/toxins, /turf/open/floor/plating, /area/construction/mining/aux_base) +"vuY" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "vvd" = ( /obj/structure/lattice/catwalk, /obj/structure/cable/yellow{ @@ -61073,12 +61074,6 @@ }, /turf/open/floor/plasteel, /area/hydroponics/garden) -"vvF" = ( -/obj/structure/cable/yellow{ - icon_state = "2-4" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "vvH" = ( /obj/structure/sign/warning/fire, /turf/closed/wall/r_wall, @@ -61697,13 +61692,6 @@ /obj/effect/turf_decal/trimline/blue/filled/corner, /turf/open/floor/plasteel/white, /area/medical/medbay/central) -"vIE" = ( -/obj/machinery/ai/server_cabinet/prefilled, -/obj/structure/ethernet_cable{ - icon_state = "0-8" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "vIQ" = ( /obj/machinery/cryopod{ dir = 4 @@ -61839,6 +61827,16 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/starboard) +"vLU" = ( +/obj/structure/ethernet_cable{ + icon_state = "1-8" + }, +/obj/structure/ethernet_cable{ + icon_state = "1-4" + }, +/obj/machinery/light, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/secondarydatacore) "vMp" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 8 @@ -62786,23 +62784,6 @@ }, /turf/open/space/basic, /area/space/nearstation) -"wfG" = ( -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/airlock/research/glass{ - name = "Computer Science"; - normalspeed = 0; - req_access_txt = "47" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "wfN" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, @@ -63440,15 +63421,6 @@ }, /turf/open/floor/plating, /area/engine/engineering) -"wuI" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible{ - dir = 4 - }, -/obj/structure/ethernet_cable{ - icon_state = "1-2" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/secondarydatacore) "wuL" = ( /obj/machinery/light/small{ dir = 1 @@ -63744,12 +63716,6 @@ "wBd" = ( /turf/open/floor/plasteel/white, /area/medical/genetics) -"wBl" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ - external_pressure_bound = 120 - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/secondarydatacore) "wBr" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -64604,6 +64570,14 @@ /obj/effect/turf_decal/trimline/brown/filled/warning, /turf/open/floor/plasteel, /area/quartermaster/sorting) +"wVN" = ( +/obj/structure/table, +/obj/item/storage/toolbox/mechanical, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "wVP" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 @@ -64664,6 +64638,15 @@ /obj/effect/turf_decal/trimline/yellow/filled/corner, /turf/open/floor/plasteel, /area/hallway/primary/aft) +"wXh" = ( +/obj/machinery/power/apc{ + areastring = "/area/maintenance/starboard/aft"; + dir = 4; + name = "Starboard Quarter Maintenance APC"; + pixel_x = 24 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "wXw" = ( /obj/machinery/light{ dir = 4 @@ -64918,6 +64901,14 @@ }, /turf/open/floor/plasteel, /area/security/processing) +"xfi" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/frame/machine{ + anchored = 1; + state = 2 + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) "xfv" = ( /obj/structure/cable{ icon_state = "1-8" @@ -65697,12 +65688,6 @@ }, /turf/open/floor/plasteel/dark, /area/science/xenobiology) -"xAr" = ( -/obj/structure/ethernet_cable{ - icon_state = "4-8" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/secondarydatacore) "xAA" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/simple/orange/visible, @@ -65877,6 +65862,15 @@ }, /turf/open/floor/carpet/royalblue, /area/crew_quarters/heads/cmo) +"xDK" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) "xDQ" = ( /turf/closed/wall/r_wall, /area/maintenance/aft) @@ -66206,6 +66200,12 @@ /obj/effect/turf_decal/trimline/red/filled/corner, /turf/open/floor/plasteel, /area/hallway/secondary/exit) +"xMt" = ( +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/turf/open/floor/catwalk_floor, +/area/ai_monitored/turret_protected/ai) "xMH" = ( /obj/machinery/door/airlock/maintenance{ name = "Psychiatrist maintenance"; @@ -66225,11 +66225,6 @@ "xML" = ( /turf/closed/wall, /area/hallway/primary/aft_starboard) -"xNi" = ( -/obj/effect/turf_decal/trimline/purple/filled/line, -/obj/machinery/atmospherics/components/unary/thermomachine/freezer/on, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "xNu" = ( /obj/machinery/door/firedoor/border_only{ dir = 1 @@ -66237,6 +66232,21 @@ /obj/machinery/door/firedoor/border_only, /turf/open/floor/plating, /area/maintenance/starboard/fore) +"xNz" = ( +/obj/structure/sign/warning/electricshock{ + pixel_y = -32 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 9 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "xND" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ dir = 4 @@ -66406,6 +66416,19 @@ }, /turf/open/floor/plating, /area/maintenance/starboard) +"xRG" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/chair/office/light{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/effect/landmark/start/yogs/network_admin, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/secondarydatacore) "xRO" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/trimline/yellow/filled/line{ @@ -66504,25 +66527,12 @@ }, /turf/open/floor/plasteel/dark, /area/engine/atmos_distro) -"xVe" = ( -/obj/structure/frame/machine{ - anchored = 1; - state = 2 - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "xVm" = ( /obj/effect/turf_decal/trimline/purple/filled/corner{ dir = 4 }, /turf/open/floor/plasteel/white, /area/science/research) -"xVw" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible{ - dir = 4 - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/secondarydatacore) "xVy" = ( /obj/structure/table/reinforced, /obj/item/paper_bin, @@ -66665,13 +66675,6 @@ }, /turf/open/floor/plasteel/white, /area/science/robotics/lab) -"xXx" = ( -/obj/effect/turf_decal/trimline/purple/filled/line, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "xXT" = ( /obj/machinery/vending/cola/random, /obj/machinery/light{ @@ -67001,14 +67004,6 @@ }, /turf/open/floor/wood, /area/medical/psych) -"ydY" = ( -/obj/structure/table, -/obj/item/storage/toolbox/mechanical, -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/secondarydatacore) "yeb" = ( /obj/machinery/atmospherics/pipe/simple/yellow/hidden{ dir = 1 @@ -67342,9 +67337,6 @@ }, /turf/open/floor/plasteel, /area/storage/primary) -"yin" = ( -/turf/open/floor/catwalk_floor, -/area/ai_monitored/secondarydatacore) "yiu" = ( /obj/machinery/door/firedoor/border_only{ dir = 8 @@ -97198,7 +97190,7 @@ dcc qsZ lFe rEb -gNW +eUd kLA sYk rtp @@ -97709,7 +97701,7 @@ fPM wKU bVJ rzx -scr +dxO aSV agz aJw @@ -109595,11 +109587,11 @@ cva cva cva gQa -vvF -qGg -qdp -iDT -jrx +xMt +iif +bfp +faX +avn yap cva cva @@ -109850,15 +109842,15 @@ pEf pEf cva cva -rzQ +gyo nLw -eYs +ail enZ nSN xlV -gfQ +cYg rjo -dJZ +xfi cva cva pEf @@ -110107,15 +110099,15 @@ pEf koy cva cva -fsh -kkY -nOl -kkY -bKX -dMq -nfM -kkY -eEW +myC +uRW +qZP +uRW +dwz +btS +eRM +uRW +dmC cva cva vUh @@ -110364,15 +110356,15 @@ pEf pEf cva cva -xVe +gFD rjo -jsZ +nZs jTn nVK enZ -eJE +jnI pyn -vIE +cwg cva cva pEf @@ -110623,11 +110615,11 @@ cva cva cva mWE -fBW -fts -rZo -bip -jrx +fky +xDK +goz +mgk +avn kcr cva cva @@ -117019,7 +117011,7 @@ atN atN atN atN -ipt +mYX fXS cOe gpq @@ -117271,11 +117263,11 @@ iKk oGM mwf oxg -wBl -vlA -dZj -vgF -uVl +dFv +rav +paj +ksJ +uEo oGM fXS cOe @@ -117528,11 +117520,11 @@ rnA oGM mQY nlV -yin -yin -xVw -kCx -ogU +tad +tad +dBQ +lPZ +vLU oGM fXS cOe @@ -117785,11 +117777,11 @@ eEp oGM fKM oGM -chk -gRl -xVw -xAr -qnb +oxg +oxg +dBQ +osd +rhz oGM fXS cNW @@ -118039,14 +118031,14 @@ alj aXb xix uVI -wfG -ieC -oMZ -jDx -gRl -xVw -xAr -bDq +lpZ +rzU +jJv +gcd +oxg +dBQ +osd +bEy oGM fXS bNA @@ -118297,13 +118289,13 @@ pWH pgx gxq oGM -gEH -sLh -cIX -gRl -oGp -mkd -nKQ +vkE +vuY +efW +oxg +qyM +uWO +fhg oGM fXS cOe @@ -118554,13 +118546,13 @@ aRv bQZ bQZ oGM -gYg -cjN -xXx -gRl -xVw -xAr -kep +tEQ +sDx +lej +oxg +dBQ +osd +mls oGM fXS cjE @@ -118811,12 +118803,12 @@ aMC thv cOe oGM -jpR -gWR -oBF -mik -wuI -enn +nKi +xRG +bKx +bUU +bZc +syy oGM oGM fXS @@ -119068,14 +119060,14 @@ xHc cNW cOe oGM -lEP -jRE -xNi -vmp -gfq -yin +rOm +rBx +qAr +uSO +mmu +tad oGM -qhz +nUE mfN cjD bQq @@ -119325,12 +119317,12 @@ aMC cNW cOe oGM -ydY -aFe -uow -vmp -iPY -koa +wVN +flr +cPu +uSO +jCO +krU oGM bNA uSq @@ -119582,15 +119574,15 @@ cOe cNW cOe oGM -jjQ -qPy -qtx -gRl -dMB -tWC +fcx +rKn +trH +oxg +rfh +odc oGM cou -nmb +xNz cjD shT clz @@ -120358,8 +120350,8 @@ cNW bNB cOe cOe -heA -qdi +uaD +wXh cOe cdR cNW @@ -121636,7 +121628,7 @@ cNW aaf pEf cNW -lZa +hYR bPp bPp cNW From 5d96ed60d3ab3f95ec994c7896831d9e2e2c97f9 Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Thu, 1 Sep 2022 18:17:56 +0200 Subject: [PATCH 58/66] minor changes --- code/game/turfs/simulated/floor/plating/catwalk_plating.dm | 3 +++ yogstation/code/modules/jobs/job_types/network_admin.dm | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/code/game/turfs/simulated/floor/plating/catwalk_plating.dm b/code/game/turfs/simulated/floor/plating/catwalk_plating.dm index 48a0c420ae26..0339cac2be89 100644 --- a/code/game/turfs/simulated/floor/plating/catwalk_plating.dm +++ b/code/game/turfs/simulated/floor/plating/catwalk_plating.dm @@ -98,3 +98,6 @@ icon_state = "smoothiron_above" floor_tile = /obj/item/stack/tile/catwalk_tile/iron_smooth catwalk_type = "smoothiron" + +/turf/open/floor/catwalk_floor/telecomms + initial_gas_mix = TCOMMS_ATMOS diff --git a/yogstation/code/modules/jobs/job_types/network_admin.dm b/yogstation/code/modules/jobs/job_types/network_admin.dm index 7307918be523..2d32811ed739 100644 --- a/yogstation/code/modules/jobs/job_types/network_admin.dm +++ b/yogstation/code/modules/jobs/job_types/network_admin.dm @@ -41,7 +41,7 @@ gloves = /obj/item/clothing/gloves/color/black shoes = /obj/item/clothing/shoes/workboots digitigrade_shoes = /obj/item/clothing/shoes/xeno_wraps/engineering - backpack_contents = list(/obj/item/modular_computer/tablet/preset/advanced=1) + backpack_contents = list(/obj/item/modular_computer/laptop/preset/network_admin=1) backpack = /obj/item/storage/backpack/industrial satchel = /obj/item/storage/backpack/satchel/eng From a9d8369774d83b5be6e0fee31fc72a1c4ff7b2b1 Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Thu, 1 Sep 2022 18:19:23 +0200 Subject: [PATCH 59/66] cold floors --- _maps/map_files/YogStation/YogStation.dmm | 850 +++++++++++----------- 1 file changed, 425 insertions(+), 425 deletions(-) diff --git a/_maps/map_files/YogStation/YogStation.dmm b/_maps/map_files/YogStation/YogStation.dmm index ae728144b081..d5289129590d 100644 --- a/_maps/map_files/YogStation/YogStation.dmm +++ b/_maps/map_files/YogStation/YogStation.dmm @@ -1610,14 +1610,6 @@ /obj/structure/chair/comfy/black, /turf/open/floor/carpet, /area/crew_quarters/heads/hos) -"ail" = ( -/obj/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "aiu" = ( /obj/structure/sign/departments/minsky/engineering/atmospherics{ pixel_x = 32 @@ -3530,12 +3522,6 @@ /obj/item/stock_parts/cell/high/plus, /turf/open/floor/plasteel, /area/storage/primary) -"avn" = ( -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "avo" = ( /obj/docking_port/stationary{ dwidth = 8; @@ -9835,15 +9821,6 @@ }, /turf/open/floor/plasteel, /area/bridge/meeting_room) -"bfp" = ( -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/structure/cable/yellow{ - icon_state = "1-8" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "bfq" = ( /obj/machinery/door/firedoor/border_only{ dir = 1 @@ -10806,6 +10783,15 @@ }, /turf/open/floor/plasteel, /area/teleporter) +"bmd" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 4 + }, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "bmi" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /turf/open/floor/plasteel, @@ -11815,12 +11801,6 @@ /obj/machinery/door/firedoor/border_only, /turf/open/floor/plasteel/white, /area/medical/medbay/lobby) -"btS" = ( -/obj/structure/ethernet_cable{ - icon_state = "1-2" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "btT" = ( /obj/structure/disposalpipe/sorting/mail/flip{ dir = 8; @@ -13399,13 +13379,6 @@ }, /turf/open/floor/plasteel/white/corner, /area/hallway/secondary/entry) -"bEy" = ( -/obj/structure/ethernet_cable{ - icon_state = "0-4" - }, -/obj/machinery/ai/server_cabinet, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/secondarydatacore) "bEC" = ( /turf/closed/wall/r_wall, /area/science/mixing) @@ -15334,15 +15307,6 @@ }, /turf/open/floor/plating, /area/maintenance/solars/starboard/aft) -"bZc" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible{ - dir = 4 - }, -/obj/structure/ethernet_cable{ - icon_state = "1-2" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/secondarydatacore) "bZg" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 8 @@ -16841,6 +16805,16 @@ /obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden/layer4, /turf/open/floor/circuit, /area/ai_monitored/turret_protected/aisat_interior) +"cqJ" = ( +/obj/machinery/ai/networking{ + label = "Computer Science"; + roundstart_connection = "Main Core" + }, +/obj/structure/ethernet_cable{ + icon_state = "0-4" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "cqP" = ( /obj/structure/table, /obj/item/stack/sheet/glass/fifty, @@ -17287,13 +17261,6 @@ }, /turf/open/floor/plasteel/white, /area/medical/medbay/lobby) -"cwg" = ( -/obj/machinery/ai/server_cabinet/prefilled, -/obj/structure/ethernet_cable{ - icon_state = "0-8" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "cwy" = ( /obj/structure/table/reinforced, /obj/item/paper_bin{ @@ -17788,6 +17755,10 @@ icon_state = "platingdmg3" }, /area/maintenance/starboard/fore) +"cDb" = ( +/obj/machinery/atmospherics/pipe/manifold4w/general/visible, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "cDr" = ( /obj/effect/turf_decal/box/corners{ dir = 4 @@ -18895,15 +18866,6 @@ }, /turf/open/floor/plasteel/white, /area/medical/medbay/central) -"cYg" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "cYj" = ( /obj/structure/lattice, /obj/effect/spawner/lootdrop/maintenance, @@ -18948,6 +18910,15 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/entry) +"cZW" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 4 + }, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "cZZ" = ( /obj/machinery/door/firedoor/border_only{ dir = 1 @@ -19117,6 +19088,18 @@ }, /turf/open/floor/plasteel/white, /area/medical/medbay/aft) +"dcZ" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/ai/networking{ + label = "Main Core"; + roundstart_connection = "Computer Science" + }, +/obj/structure/ethernet_cable{ + icon_state = "0-4" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "ddb" = ( /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=HOP"; @@ -19480,12 +19463,6 @@ }, /turf/open/floor/plasteel/dark, /area/science/xenobiology) -"dmC" = ( -/obj/structure/ethernet_cable{ - icon_state = "1-4" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "dmK" = ( /obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, @@ -19746,16 +19723,6 @@ /obj/structure/closet/crate, /turf/open/floor/plasteel, /area/construction) -"dwz" = ( -/obj/machinery/ai/data_core/primary, -/obj/structure/ethernet_cable{ - icon_state = "1-2" - }, -/obj/structure/ethernet_cable{ - icon_state = "0-2" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "dwA" = ( /obj/effect/mapping_helpers/airlock/unres, /obj/machinery/door/firedoor/border_only{ @@ -19772,6 +19739,16 @@ }, /turf/open/floor/plasteel/white, /area/medical/medbay/central) +"dwE" = ( +/obj/machinery/ai/data_core/primary, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/obj/structure/ethernet_cable{ + icon_state = "0-2" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "dwN" = ( /obj/structure/cable{ icon_state = "1-2" @@ -20013,12 +19990,6 @@ }, /turf/open/floor/plasteel/dark, /area/ai_monitored/nuke_storage) -"dBQ" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible{ - dir = 4 - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/secondarydatacore) "dBU" = ( /obj/machinery/light_switch{ pixel_x = 27 @@ -20173,12 +20144,6 @@ }, /turf/open/floor/plasteel/freezer, /area/crew_quarters/toilet) -"dFv" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ - external_pressure_bound = 120 - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/secondarydatacore) "dFX" = ( /obj/machinery/door/airlock/maintenance{ name = "Security Maintenance"; @@ -21057,6 +21022,14 @@ /obj/effect/turf_decal/trimline/red/filled/warning, /turf/open/floor/plasteel, /area/security/brig) +"ebU" = ( +/obj/machinery/camera{ + c_tag = "Secondary AI Core"; + dir = 8; + network = list("ss13","rd") + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "eco" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/structure/disposalpipe/segment, @@ -22865,6 +22838,12 @@ }, /turf/open/floor/plasteel/white, /area/medical/medbay/central) +"eMb" = ( +/obj/structure/ethernet_cable{ + icon_state = "4-8" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "eMu" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -23107,18 +23086,6 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/locker) -"eRM" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/obj/structure/ethernet_cable{ - icon_state = "1-2" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "eRR" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, @@ -23494,6 +23461,12 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/heads/chief) +"eYK" = ( +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "eZl" = ( /obj/effect/turf_decal/trimline/brown/filled/line{ dir = 4 @@ -23528,12 +23501,6 @@ /obj/effect/landmark/stationroom/maint/threexfive, /turf/template_noop, /area/maintenance/port/aft) -"faX" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "fbF" = ( /obj/structure/table, /obj/item/radio/off, @@ -23721,16 +23688,6 @@ }, /turf/open/floor/engine, /area/maintenance/disposal/incinerator) -"fhg" = ( -/obj/structure/ethernet_cable{ - icon_state = "1-4" - }, -/obj/structure/ethernet_cable{ - icon_state = "1-8" - }, -/obj/machinery/light, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/secondarydatacore) "fhs" = ( /obj/machinery/light, /obj/structure/table/glass, @@ -23936,12 +23893,6 @@ /obj/effect/turf_decal/trimline/red/filled/line, /turf/open/floor/plasteel, /area/hallway/primary/fore) -"fky" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "fkK" = ( /obj/machinery/vending/gifts, /obj/structure/sign/poster/official/random{ @@ -24257,6 +24208,15 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/port) +"fsw" = ( +/obj/structure/ethernet_cable{ + icon_state = "2-8" + }, +/obj/structure/ethernet_cable{ + icon_state = "2-4" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "fsz" = ( /obj/machinery/camera{ c_tag = "Fitness Room" @@ -26227,6 +26187,12 @@ /obj/effect/spawner/structure/window/reinforced/shutter, /turf/open/floor/plating, /area/maintenance/fore/secondary) +"gjO" = ( +/obj/structure/ethernet_cable{ + icon_state = "1-4" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "gkk" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ @@ -26317,13 +26283,6 @@ /obj/machinery/atmospherics/miner/toxins, /turf/open/floor/engine/plasma, /area/engine/atmos_distro) -"goz" = ( -/obj/machinery/holopad, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "goG" = ( /obj/structure/sign/warning/securearea{ pixel_x = 32 @@ -26737,18 +26696,6 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, /turf/open/floor/plasteel/white, /area/security/brig) -"gyo" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/ai/networking{ - label = "Main Core"; - roundstart_connection = "Computer Science" - }, -/obj/structure/ethernet_cable{ - icon_state = "0-4" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "gyX" = ( /obj/machinery/light{ dir = 4 @@ -26788,6 +26735,14 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/locker) +"gzZ" = ( +/obj/item/stack/cable_coil, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/ethernet_cable{ + icon_state = "2-8" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "gAi" = ( /obj/structure/table, /obj/item/electronics/apc, @@ -26996,13 +26951,6 @@ }, /turf/open/floor/plasteel/white, /area/science/xenobiology) -"gFD" = ( -/obj/structure/frame/machine{ - anchored = 1; - state = 2 - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "gFN" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 @@ -28828,6 +28776,12 @@ }, /turf/open/floor/plasteel/dark/telecomms, /area/tcommsat/server) +"hsu" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 8 + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "hsA" = ( /obj/machinery/computer/camera_advanced/base_construction{ dir = 1 @@ -29410,6 +29364,12 @@ /obj/structure/cable/yellow, /turf/open/floor/plasteel/airless/solarpanel, /area/solar/starboard/aft) +"hHX" = ( +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "hIf" = ( /obj/structure/table, /obj/item/paper_bin{ @@ -30404,6 +30364,17 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/entry) +"ibL" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 8; + external_pressure_bound = 140; + pressure_checks = 0 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "ibZ" = ( /obj/machinery/holopad, /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ @@ -30644,6 +30615,13 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /turf/open/floor/plasteel, /area/hallway/primary/central) +"ihs" = ( +/obj/machinery/holopad, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "ihB" = ( /obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden/layer4, /obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer2, @@ -30678,15 +30656,6 @@ }, /turf/open/floor/plasteel, /area/security/processing) -"iif" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "iiE" = ( /obj/machinery/firealarm{ dir = 1; @@ -30912,6 +30881,16 @@ "inQ" = ( /turf/open/floor/plasteel, /area/construction/mining/aux_base) +"ioc" = ( +/obj/structure/ethernet_cable{ + icon_state = "1-4" + }, +/obj/structure/ethernet_cable{ + icon_state = "1-8" + }, +/obj/machinery/light, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "iod" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ @@ -31312,6 +31291,14 @@ }, /turf/open/floor/plating, /area/maintenance/solars/starboard/aft) +"iwl" = ( +/obj/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "iwx" = ( /obj/item/twohanded/required/kirbyplants/random, /obj/effect/turf_decal/trimline/blue/filled/line, @@ -31656,6 +31643,15 @@ }, /turf/open/floor/plasteel, /area/science/robotics/lab) +"iFg" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "iFQ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, @@ -32934,6 +32930,16 @@ "jdO" = ( /turf/closed/wall, /area/medical/storage) +"jdQ" = ( +/obj/structure/window/reinforced, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "jec" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 8; @@ -33242,16 +33248,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/aft_starboard) -"jnI" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/hidden, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "joa" = ( /obj/effect/spawner/lootdrop/maintenance{ lootcount = 3; @@ -33965,10 +33961,6 @@ /obj/effect/turf_decal/box/corners, /turf/open/floor/engine, /area/science/xenobiology) -"jCO" = ( -/obj/machinery/atmospherics/pipe/manifold4w/general/visible, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/secondarydatacore) "jDa" = ( /obj/structure/table/wood, /obj/item/folder/blue, @@ -35680,14 +35672,6 @@ }, /turf/open/space/basic, /area/space) -"krU" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 1; - external_pressure_bound = 140; - pressure_checks = 0 - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/secondarydatacore) "kse" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, @@ -35703,18 +35687,6 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/service) -"ksJ" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ - dir = 1; - external_pressure_bound = 120 - }, -/obj/machinery/camera{ - c_tag = "Secondary AI Core"; - dir = 4; - network = list("ss13","rd") - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/secondarydatacore) "ksL" = ( /obj/structure/chair/stool, /obj/effect/landmark/start/scientist, @@ -37021,6 +36993,12 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/port) +"kYF" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 4 + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "kYK" = ( /turf/closed/wall/r_wall, /area/medical/genetics/cloning) @@ -37036,6 +37014,15 @@ /obj/structure/closet/l3closet, /turf/open/floor/plating, /area/maintenance/aft) +"kZP" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "kZX" = ( /obj/structure/window/reinforced{ dir = 8 @@ -38669,12 +38656,6 @@ }, /turf/open/floor/plasteel/white, /area/medical/virology) -"lPZ" = ( -/obj/structure/ethernet_cable{ - icon_state = "2-4" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/secondarydatacore) "lQm" = ( /obj/effect/turf_decal/stripes/end{ dir = 1 @@ -39357,15 +39338,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/fore) -"mgk" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "mgl" = ( /obj/machinery/door/airlock/external{ name = "Solar Maintenance"; @@ -39702,13 +39674,6 @@ }, /turf/open/floor/plasteel, /area/security/brig) -"mls" = ( -/obj/structure/ethernet_cable{ - icon_state = "0-8" - }, -/obj/machinery/ai/server_cabinet/prefilled, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/secondarydatacore) "mlv" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/vending/cola/shamblers/prison{ @@ -39716,10 +39681,6 @@ }, /turf/open/floor/plasteel, /area/security/prison) -"mmu" = ( -/obj/machinery/atmospherics/pipe/manifold/general/visible, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/secondarydatacore) "mmT" = ( /obj/machinery/door/airlock/medical{ name = "Paramedic Staging Area"; @@ -40424,14 +40385,6 @@ /obj/effect/turf_decal/trimline/red/filled/line, /turf/open/floor/plasteel, /area/security/prison/hallway) -"myC" = ( -/obj/item/stack/cable_coil, -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/ethernet_cable{ - icon_state = "2-8" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "myI" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ @@ -41425,6 +41378,10 @@ }, /turf/open/floor/plasteel/white, /area/maintenance/department/tcoms) +"mVk" = ( +/obj/machinery/atmospherics/pipe/manifold/general/visible, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "mVN" = ( /obj/effect/turf_decal/trimline/blue/filled/corner{ dir = 8 @@ -42172,6 +42129,13 @@ }, /turf/open/floor/plasteel, /area/security/brig) +"nhW" = ( +/obj/structure/frame/machine{ + anchored = 1; + state = 2 + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "nia" = ( /turf/template_noop, /area/hydroponics) @@ -43868,6 +43832,9 @@ }, /turf/open/floor/circuit/telecomms/server, /area/ai_monitored/turret_protected/ai) +"nVU" = ( +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "nWd" = ( /obj/machinery/computer/rdconsole/experiment{ dir = 1 @@ -44025,13 +43992,6 @@ /obj/effect/turf_decal/ramp_middle, /turf/open/floor/wood, /area/library) -"nZs" = ( -/obj/structure/window/reinforced, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "oat" = ( /obj/machinery/disposal/bin, /obj/machinery/light{ @@ -44215,14 +44175,6 @@ dir = 8 }, /area/hallway/secondary/exit) -"odc" = ( -/obj/machinery/camera{ - c_tag = "Secondary AI Core"; - dir = 8; - network = list("ss13","rd") - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/secondarydatacore) "ody" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 4 @@ -44752,12 +44704,6 @@ }, /turf/open/floor/plasteel, /area/engine/atmos) -"osd" = ( -/obj/structure/ethernet_cable{ - icon_state = "4-8" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/secondarydatacore) "osj" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 8 @@ -46239,6 +46185,15 @@ }, /turf/open/floor/plasteel, /area/clerk) +"oYg" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "oYn" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ @@ -46288,15 +46243,6 @@ }, /turf/open/floor/plating, /area/storage/tech) -"paj" = ( -/obj/machinery/atmospherics/pipe/manifold/general/visible{ - dir = 8 - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/secondarydatacore) "pal" = ( /obj/machinery/atmospherics/pipe/simple/green/visible{ dir = 10 @@ -46325,6 +46271,16 @@ }, /turf/open/floor/plasteel/white, /area/science/explab) +"paP" = ( +/obj/structure/ethernet_cable{ + icon_state = "1-8" + }, +/obj/structure/ethernet_cable{ + icon_state = "1-4" + }, +/obj/machinery/light, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "paQ" = ( /obj/machinery/atmospherics/pipe/simple/supply/visible{ dir = 4 @@ -46548,6 +46504,12 @@ }, /turf/open/floor/carpet/blue, /area/bridge/meeting_room) +"pfB" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "pfK" = ( /obj/machinery/modular_computer/console/preset/cargo{ dir = 1 @@ -47849,6 +47811,12 @@ }, /turf/open/floor/engine, /area/maintenance/disposal/incinerator) +"pIM" = ( +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "pJB" = ( /turf/closed/wall, /area/tcommsat/computer) @@ -48505,6 +48473,13 @@ }, /turf/open/floor/plasteel, /area/engine/atmos) +"pZD" = ( +/obj/machinery/ai/data_core, +/obj/structure/ethernet_cable{ + icon_state = "0-8" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "pZF" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 4 @@ -48616,6 +48591,12 @@ }, /turf/open/floor/plasteel/white, /area/medical/virology) +"qbp" = ( +/obj/structure/ethernet_cable{ + icon_state = "2-4" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "qbw" = ( /obj/structure/sign/departments/minsky/medical/virology/virology2{ pixel_y = -32 @@ -48950,6 +48931,12 @@ }, /turf/open/floor/plasteel/dark, /area/security/courtroom) +"qkc" = ( +/obj/structure/ethernet_cable{ + icon_state = "1-8" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "qko" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 @@ -49285,6 +49272,12 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) +"qpN" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "qqz" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 6 @@ -49586,12 +49579,6 @@ }, /turf/open/floor/plasteel/white, /area/science/mixing/chamber) -"qyM" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible{ - dir = 8 - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/secondarydatacore) "qyN" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 @@ -50931,16 +50918,6 @@ /obj/effect/turf_decal/trimline/red/filled/line, /turf/open/floor/plasteel/dark/telecomms, /area/tcommsat/server) -"qZP" = ( -/obj/structure/window/reinforced, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/structure/ethernet_cable{ - icon_state = "1-2" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "qZY" = ( /obj/structure/sink{ dir = 8; @@ -50963,14 +50940,6 @@ /obj/effect/turf_decal/trimline/blue/filled/corner, /turf/open/floor/plasteel, /area/engine/atmos) -"rav" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible, -/obj/machinery/airalarm/tcomms{ - dir = 4; - pixel_x = -24 - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/secondarydatacore) "ray" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 9 @@ -51136,17 +51105,6 @@ }, /turf/open/floor/plasteel, /area/science/robotics/mechbay) -"rfh" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 8; - external_pressure_bound = 140; - pressure_checks = 0 - }, -/obj/machinery/light{ - dir = 4 - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/secondarydatacore) "rfy" = ( /obj/machinery/airalarm{ dir = 8; @@ -51230,13 +51188,6 @@ /obj/structure/closet/toolcloset, /turf/open/floor/plasteel, /area/construction) -"rhz" = ( -/obj/machinery/ai/data_core, -/obj/structure/ethernet_cable{ - icon_state = "0-8" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/secondarydatacore) "rhN" = ( /obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, @@ -51460,6 +51411,12 @@ }, /turf/open/floor/plasteel/white, /area/medical/medbay/lobby) +"rmn" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ + external_pressure_bound = 120 + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "rmT" = ( /obj/effect/turf_decal/trimline/red/filled/corner{ dir = 1 @@ -53535,6 +53492,15 @@ icon_state = "platingdmg2" }, /area/maintenance/aft) +"sih" = ( +/obj/machinery/atmospherics/pipe/manifold/general/visible{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "siG" = ( /obj/machinery/door/airlock/maintenance{ req_access_txt = "12" @@ -54172,12 +54138,6 @@ "syq" = ( /turf/template_noop, /area/maintenance/starboard/fore) -"syy" = ( -/obj/structure/ethernet_cable{ - icon_state = "1-8" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/secondarydatacore) "syA" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 4 @@ -55534,9 +55494,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) -"tad" = ( -/turf/open/floor/catwalk_floor, -/area/ai_monitored/secondarydatacore) "tah" = ( /obj/effect/landmark/stationroom/maint/threexfive, /turf/template_noop, @@ -55766,6 +55723,18 @@ /obj/effect/turf_decal/trimline/yellow/filled/line, /turf/open/floor/plasteel, /area/engine/engineering) +"tdP" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "tdV" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -56195,6 +56164,18 @@ /obj/structure/lattice, /turf/open/space/basic, /area/space/nearstation) +"tou" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ + dir = 1; + external_pressure_bound = 120 + }, +/obj/machinery/camera{ + c_tag = "Secondary AI Core"; + dir = 4; + network = list("ss13","rd") + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "toz" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -57418,6 +57399,13 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/fore) +"tPW" = ( +/obj/structure/window/reinforced, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "tPY" = ( /obj/machinery/light/small, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ @@ -59151,6 +59139,16 @@ icon_state = "panelscorched" }, /area/maintenance/starboard/fore) +"uCy" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "uCM" = ( /obj/machinery/computer/prisoner, /obj/effect/turf_decal/stripes/line{ @@ -59201,16 +59199,6 @@ }, /turf/open/floor/plating, /area/maintenance/aft) -"uEo" = ( -/obj/machinery/ai/networking{ - label = "Computer Science"; - roundstart_connection = "Main Core" - }, -/obj/structure/ethernet_cable{ - icon_state = "0-4" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/secondarydatacore) "uEH" = ( /obj/effect/turf_decal/trimline/brown/filled/warning{ dir = 1 @@ -59770,15 +59758,6 @@ }, /turf/open/floor/circuit, /area/ai_monitored/nuke_storage) -"uRW" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 4 - }, -/obj/structure/ethernet_cable{ - icon_state = "1-2" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "uSd" = ( /obj/structure/closet/secure_closet/paramedic, /obj/effect/turf_decal/delivery, @@ -60012,15 +59991,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) -"uWO" = ( -/obj/structure/ethernet_cable{ - icon_state = "2-8" - }, -/obj/structure/ethernet_cable{ - icon_state = "2-4" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/secondarydatacore) "uWQ" = ( /obj/machinery/flasher{ id = "Cell 2"; @@ -61257,6 +61227,14 @@ }, /turf/open/floor/plasteel/white, /area/medical/medbay/aft) +"vyy" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible, +/obj/machinery/airalarm/tcomms{ + dir = 4; + pixel_x = -24 + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "vyA" = ( /obj/machinery/button/door{ id = "aux_base_shutters"; @@ -61299,6 +61277,14 @@ }, /turf/open/floor/plating, /area/maintenance/aft) +"vzF" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1; + external_pressure_bound = 140; + pressure_checks = 0 + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "vAc" = ( /obj/machinery/meter{ target_layer = 2 @@ -61533,6 +61519,13 @@ }, /turf/open/floor/plasteel/white, /area/medical/storage) +"vGn" = ( +/obj/structure/ethernet_cable{ + icon_state = "0-8" + }, +/obj/machinery/ai/server_cabinet/prefilled, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "vGx" = ( /turf/closed/wall/r_wall, /area/medical/genetics) @@ -61827,16 +61820,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/starboard) -"vLU" = ( -/obj/structure/ethernet_cable{ - icon_state = "1-8" - }, -/obj/structure/ethernet_cable{ - icon_state = "1-4" - }, -/obj/machinery/light, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/secondarydatacore) "vMp" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 8 @@ -64098,6 +64081,13 @@ /obj/effect/spawner/structure/window/reinforced/shutter, /turf/open/floor/plating, /area/tcommsat/computer) +"wJP" = ( +/obj/structure/ethernet_cable{ + icon_state = "0-4" + }, +/obj/machinery/ai/server_cabinet, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "wKw" = ( /obj/machinery/door/airlock/command/glass{ name = "Chief Engineer"; @@ -64812,6 +64802,15 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) +"xbG" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "xbS" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -64901,14 +64900,6 @@ }, /turf/open/floor/plasteel, /area/security/processing) -"xfi" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/frame/machine{ - anchored = 1; - state = 2 - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "xfv" = ( /obj/structure/cable{ icon_state = "1-8" @@ -65862,15 +65853,6 @@ }, /turf/open/floor/carpet/royalblue, /area/crew_quarters/heads/cmo) -"xDK" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "xDQ" = ( /turf/closed/wall/r_wall, /area/maintenance/aft) @@ -66200,12 +66182,6 @@ /obj/effect/turf_decal/trimline/red/filled/corner, /turf/open/floor/plasteel, /area/hallway/secondary/exit) -"xMt" = ( -/obj/structure/cable/yellow{ - icon_state = "2-4" - }, -/turf/open/floor/catwalk_floor, -/area/ai_monitored/turret_protected/ai) "xMH" = ( /obj/machinery/door/airlock/maintenance{ name = "Psychiatrist maintenance"; @@ -66782,6 +66758,15 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/exit) +"xZQ" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "yab" = ( /obj/machinery/computer/shuttle/mining, /obj/machinery/computer/security/telescreen{ @@ -67042,6 +67027,13 @@ /obj/machinery/door/airlock/maintenance_hatch, /turf/open/floor/plating, /area/maintenance/starboard/aft) +"yeV" = ( +/obj/machinery/ai/server_cabinet/prefilled, +/obj/structure/ethernet_cable{ + icon_state = "0-8" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "yfg" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -67469,6 +67461,14 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/aft) +"yli" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/frame/machine{ + anchored = 1; + state = 2 + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "ylH" = ( /obj/machinery/sparker{ id = "testigniter"; @@ -109587,11 +109587,11 @@ cva cva cva gQa -xMt -iif -bfp -faX -avn +pIM +oYg +xZQ +qpN +eYK yap cva cva @@ -109842,15 +109842,15 @@ pEf pEf cva cva -gyo +dcZ nLw -ail +iwl enZ nSN xlV -cYg +xbG rjo -xfi +yli cva cva pEf @@ -110099,15 +110099,15 @@ pEf koy cva cva -myC -uRW -qZP -uRW -dwz -btS -eRM -uRW -dmC +gzZ +bmd +jdQ +bmd +dwE +hHX +tdP +bmd +gjO cva cva vUh @@ -110356,15 +110356,15 @@ pEf pEf cva cva -gFD +nhW rjo -nZs +tPW jTn nVK enZ -jnI +uCy pyn -cwg +yeV cva cva pEf @@ -110615,11 +110615,11 @@ cva cva cva mWE -fky -xDK -goz -mgk -avn +pfB +iFg +ihs +kZP +eYK kcr cva cva @@ -117263,11 +117263,11 @@ iKk oGM mwf oxg -dFv -rav -paj -ksJ -uEo +rmn +vyy +sih +tou +cqJ oGM fXS cOe @@ -117520,11 +117520,11 @@ rnA oGM mQY nlV -tad -tad -dBQ -lPZ -vLU +nVU +nVU +kYF +qbp +paP oGM fXS cOe @@ -117779,9 +117779,9 @@ fKM oGM oxg oxg -dBQ -osd -rhz +kYF +eMb +pZD oGM fXS cNW @@ -118036,9 +118036,9 @@ rzU jJv gcd oxg -dBQ -osd -bEy +kYF +eMb +wJP oGM fXS bNA @@ -118293,9 +118293,9 @@ vkE vuY efW oxg -qyM -uWO -fhg +hsu +fsw +ioc oGM fXS cOe @@ -118550,9 +118550,9 @@ tEQ sDx lej oxg -dBQ -osd -mls +kYF +eMb +vGn oGM fXS cjE @@ -118807,8 +118807,8 @@ nKi xRG bKx bUU -bZc -syy +cZW +qkc oGM oGM fXS @@ -119064,8 +119064,8 @@ rOm rBx qAr uSO -mmu -tad +mVk +nVU oGM nUE mfN @@ -119321,8 +119321,8 @@ wVN flr cPu uSO -jCO -krU +cDb +vzF oGM bNA uSq @@ -119578,8 +119578,8 @@ fcx rKn trH oxg -rfh -odc +ibL +ebU oGM cou xNz From e5e55885fc3ad1b8319963d2b4dbc710496e6086 Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Thu, 1 Sep 2022 18:34:40 +0200 Subject: [PATCH 60/66] last mapping --- _maps/map_files/YogStation/YogStation.dmm | 850 +++++++++++----------- 1 file changed, 424 insertions(+), 426 deletions(-) diff --git a/_maps/map_files/YogStation/YogStation.dmm b/_maps/map_files/YogStation/YogStation.dmm index d5289129590d..71af9ff1f27c 100644 --- a/_maps/map_files/YogStation/YogStation.dmm +++ b/_maps/map_files/YogStation/YogStation.dmm @@ -1211,6 +1211,12 @@ /obj/machinery/recharger, /turf/open/floor/plasteel/showroomfloor, /area/security/warden) +"agv" = ( +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "agy" = ( /obj/structure/table, /obj/item/storage/firstaid/regular{ @@ -6465,6 +6471,13 @@ /obj/machinery/vending/cigarette, /turf/open/floor/plasteel/dark, /area/hallway/secondary/entry) +"aLA" = ( +/obj/structure/window/reinforced, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "aLD" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 @@ -10590,6 +10603,14 @@ /obj/structure/closet/wardrobe/black, /turf/open/floor/plating, /area/maintenance/central) +"bkY" = ( +/obj/item/stack/cable_coil, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/ethernet_cable{ + icon_state = "2-8" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "bkZ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, @@ -10783,15 +10804,6 @@ }, /turf/open/floor/plasteel, /area/teleporter) -"bmd" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 4 - }, -/obj/structure/ethernet_cable{ - icon_state = "1-2" - }, -/turf/open/floor/catwalk_floor/telecomms, -/area/ai_monitored/turret_protected/ai) "bmi" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /turf/open/floor/plasteel, @@ -10922,6 +10934,16 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/quartermaster/office) +"bnB" = ( +/obj/machinery/ai/networking{ + label = "Computer Science"; + roundstart_connection = "Main Core" + }, +/obj/structure/ethernet_cable{ + icon_state = "0-4" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "bnE" = ( /obj/machinery/door/airlock/research{ name = "Research Division Access"; @@ -14424,6 +14446,12 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/white, /area/medical/virology) +"bOz" = ( +/obj/structure/ethernet_cable{ + icon_state = "1-4" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "bOH" = ( /obj/structure/sign/warning/docking, /obj/effect/spawner/structure/window/reinforced/shutter, @@ -15630,6 +15658,12 @@ }, /turf/open/space, /area/solar/port/aft) +"cde" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 4 + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "cdh" = ( /obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ @@ -16805,16 +16839,6 @@ /obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden/layer4, /turf/open/floor/circuit, /area/ai_monitored/turret_protected/aisat_interior) -"cqJ" = ( -/obj/machinery/ai/networking{ - label = "Computer Science"; - roundstart_connection = "Main Core" - }, -/obj/structure/ethernet_cable{ - icon_state = "0-4" - }, -/turf/open/floor/catwalk_floor/telecomms, -/area/ai_monitored/secondarydatacore) "cqP" = ( /obj/structure/table, /obj/item/stack/sheet/glass/fifty, @@ -17755,10 +17779,6 @@ icon_state = "platingdmg3" }, /area/maintenance/starboard/fore) -"cDb" = ( -/obj/machinery/atmospherics/pipe/manifold4w/general/visible, -/turf/open/floor/catwalk_floor/telecomms, -/area/ai_monitored/secondarydatacore) "cDr" = ( /obj/effect/turf_decal/box/corners{ dir = 4 @@ -18910,15 +18930,6 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/entry) -"cZW" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible{ - dir = 4 - }, -/obj/structure/ethernet_cable{ - icon_state = "1-2" - }, -/turf/open/floor/catwalk_floor/telecomms, -/area/ai_monitored/secondarydatacore) "cZZ" = ( /obj/machinery/door/firedoor/border_only{ dir = 1 @@ -19088,18 +19099,6 @@ }, /turf/open/floor/plasteel/white, /area/medical/medbay/aft) -"dcZ" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/ai/networking{ - label = "Main Core"; - roundstart_connection = "Computer Science" - }, -/obj/structure/ethernet_cable{ - icon_state = "0-4" - }, -/turf/open/floor/catwalk_floor/telecomms, -/area/ai_monitored/turret_protected/ai) "ddb" = ( /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=HOP"; @@ -19119,6 +19118,15 @@ /obj/effect/turf_decal/trimline/brown/filled/line, /turf/open/floor/plasteel, /area/quartermaster/miningdock) +"ddQ" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1; + external_pressure_bound = 140; + plane = -2; + pressure_checks = 0 + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "dea" = ( /obj/structure/table, /obj/item/folder/yellow, @@ -19626,6 +19634,15 @@ }, /turf/open/floor/engine, /area/maintenance/disposal/incinerator) +"duc" = ( +/obj/structure/ethernet_cable{ + icon_state = "2-8" + }, +/obj/structure/ethernet_cable{ + icon_state = "2-4" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "dus" = ( /obj/structure/table/wood, /obj/item/flashlight/lantern, @@ -19739,16 +19756,6 @@ }, /turf/open/floor/plasteel/white, /area/medical/medbay/central) -"dwE" = ( -/obj/machinery/ai/data_core/primary, -/obj/structure/ethernet_cable{ - icon_state = "1-2" - }, -/obj/structure/ethernet_cable{ - icon_state = "0-2" - }, -/turf/open/floor/catwalk_floor/telecomms, -/area/ai_monitored/turret_protected/ai) "dwN" = ( /obj/structure/cable{ icon_state = "1-2" @@ -20779,6 +20786,13 @@ }, /turf/open/floor/plasteel, /area/quartermaster/qm) +"dTf" = ( +/obj/structure/frame/machine{ + anchored = 1; + state = 2 + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "dTu" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, @@ -21022,14 +21036,6 @@ /obj/effect/turf_decal/trimline/red/filled/warning, /turf/open/floor/plasteel, /area/security/brig) -"ebU" = ( -/obj/machinery/camera{ - c_tag = "Secondary AI Core"; - dir = 8; - network = list("ss13","rd") - }, -/turf/open/floor/catwalk_floor/telecomms, -/area/ai_monitored/secondarydatacore) "eco" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/structure/disposalpipe/segment, @@ -21370,6 +21376,13 @@ }, /turf/open/floor/plasteel, /area/construction/mining/aux_base) +"ehY" = ( +/obj/machinery/ai/server_cabinet/prefilled, +/obj/structure/ethernet_cable{ + icon_state = "0-8" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "eie" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 4 @@ -22481,6 +22494,18 @@ }, /turf/open/floor/plasteel/dark, /area/chapel/office) +"eFt" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/ai/networking{ + label = "Main Core"; + roundstart_connection = "Computer Science" + }, +/obj/structure/ethernet_cable{ + icon_state = "0-4" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "eFL" = ( /obj/machinery/camera{ c_tag = "Engineering Escape Pod"; @@ -22838,12 +22863,6 @@ }, /turf/open/floor/plasteel/white, /area/medical/medbay/central) -"eMb" = ( -/obj/structure/ethernet_cable{ - icon_state = "4-8" - }, -/turf/open/floor/catwalk_floor/telecomms, -/area/ai_monitored/secondarydatacore) "eMu" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -23461,12 +23480,6 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/heads/chief) -"eYK" = ( -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/turf/open/floor/catwalk_floor/telecomms, -/area/ai_monitored/turret_protected/ai) "eZl" = ( /obj/effect/turf_decal/trimline/brown/filled/line{ dir = 4 @@ -23640,6 +23653,18 @@ }, /turf/open/floor/plasteel/white, /area/medical/chemistry) +"feK" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "feV" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 @@ -24208,15 +24233,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/port) -"fsw" = ( -/obj/structure/ethernet_cable{ - icon_state = "2-8" - }, -/obj/structure/ethernet_cable{ - icon_state = "2-4" - }, -/turf/open/floor/catwalk_floor/telecomms, -/area/ai_monitored/secondarydatacore) "fsz" = ( /obj/machinery/camera{ c_tag = "Fitness Room" @@ -26163,6 +26179,15 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/aft) +"giM" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "giP" = ( /obj/machinery/door/window/eastright{ base_state = "left"; @@ -26187,12 +26212,6 @@ /obj/effect/spawner/structure/window/reinforced/shutter, /turf/open/floor/plating, /area/maintenance/fore/secondary) -"gjO" = ( -/obj/structure/ethernet_cable{ - icon_state = "1-4" - }, -/turf/open/floor/catwalk_floor/telecomms, -/area/ai_monitored/turret_protected/ai) "gkk" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ @@ -26735,14 +26754,6 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/locker) -"gzZ" = ( -/obj/item/stack/cable_coil, -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/ethernet_cable{ - icon_state = "2-8" - }, -/turf/open/floor/catwalk_floor/telecomms, -/area/ai_monitored/turret_protected/ai) "gAi" = ( /obj/structure/table, /obj/item/electronics/apc, @@ -27405,6 +27416,10 @@ icon_state = "platingdmg3" }, /area/maintenance/port) +"gRT" = ( +/obj/machinery/atmospherics/pipe/manifold4w/cyan/hidden, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "gSd" = ( /obj/machinery/camera{ c_tag = "Research Division Access" @@ -28506,6 +28521,12 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/entry) +"hnb" = ( +/obj/structure/ethernet_cable{ + icon_state = "2-4" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "hnh" = ( /obj/structure/cable{ icon_state = "4-8" @@ -28776,12 +28797,6 @@ }, /turf/open/floor/plasteel/dark/telecomms, /area/tcommsat/server) -"hsu" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible{ - dir = 8 - }, -/turf/open/floor/catwalk_floor/telecomms, -/area/ai_monitored/secondarydatacore) "hsA" = ( /obj/machinery/computer/camera_advanced/base_construction{ dir = 1 @@ -29364,12 +29379,6 @@ /obj/structure/cable/yellow, /turf/open/floor/plasteel/airless/solarpanel, /area/solar/starboard/aft) -"hHX" = ( -/obj/structure/ethernet_cable{ - icon_state = "1-2" - }, -/turf/open/floor/catwalk_floor/telecomms, -/area/ai_monitored/turret_protected/ai) "hIf" = ( /obj/structure/table, /obj/item/paper_bin{ @@ -30364,17 +30373,6 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/entry) -"ibL" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 8; - external_pressure_bound = 140; - pressure_checks = 0 - }, -/obj/machinery/light{ - dir = 4 - }, -/turf/open/floor/catwalk_floor/telecomms, -/area/ai_monitored/secondarydatacore) "ibZ" = ( /obj/machinery/holopad, /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ @@ -30615,13 +30613,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /turf/open/floor/plasteel, /area/hallway/primary/central) -"ihs" = ( -/obj/machinery/holopad, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/turf/open/floor/catwalk_floor/telecomms, -/area/ai_monitored/turret_protected/ai) "ihB" = ( /obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden/layer4, /obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer2, @@ -30881,16 +30872,6 @@ "inQ" = ( /turf/open/floor/plasteel, /area/construction/mining/aux_base) -"ioc" = ( -/obj/structure/ethernet_cable{ - icon_state = "1-4" - }, -/obj/structure/ethernet_cable{ - icon_state = "1-8" - }, -/obj/machinery/light, -/turf/open/floor/catwalk_floor/telecomms, -/area/ai_monitored/secondarydatacore) "iod" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ @@ -31291,14 +31272,6 @@ }, /turf/open/floor/plating, /area/maintenance/solars/starboard/aft) -"iwl" = ( -/obj/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/turf/open/floor/catwalk_floor/telecomms, -/area/ai_monitored/turret_protected/ai) "iwx" = ( /obj/item/twohanded/required/kirbyplants/random, /obj/effect/turf_decal/trimline/blue/filled/line, @@ -31476,6 +31449,12 @@ }, /turf/open/floor/plasteel/dark, /area/bridge) +"izK" = ( +/obj/structure/ethernet_cable{ + icon_state = "4-8" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "izV" = ( /obj/item/radio/intercom{ name = "Station Intercom (General)"; @@ -31643,15 +31622,6 @@ }, /turf/open/floor/plasteel, /area/science/robotics/lab) -"iFg" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/open/floor/catwalk_floor/telecomms, -/area/ai_monitored/turret_protected/ai) "iFQ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, @@ -32606,6 +32576,14 @@ /obj/structure/cable, /turf/open/floor/plasteel, /area/science/mixing) +"iWz" = ( +/obj/machinery/camera{ + c_tag = "Secondary AI Core"; + dir = 8; + network = list("ss13","rd") + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "iWF" = ( /obj/effect/spawner/structure/window/reinforced/shutter, /obj/structure/cable{ @@ -32930,16 +32908,6 @@ "jdO" = ( /turf/closed/wall, /area/medical/storage) -"jdQ" = ( -/obj/structure/window/reinforced, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/structure/ethernet_cable{ - icon_state = "1-2" - }, -/turf/open/floor/catwalk_floor/telecomms, -/area/ai_monitored/turret_protected/ai) "jec" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 8; @@ -33023,6 +32991,16 @@ }, /turf/closed/wall/r_wall, /area/engine/atmos_distro) +"jgW" = ( +/obj/machinery/ai/data_core/primary, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/obj/structure/ethernet_cable{ + icon_state = "0-2" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "jhc" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, @@ -33143,6 +33121,13 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) +"jkO" = ( +/obj/structure/ethernet_cable{ + icon_state = "0-4" + }, +/obj/machinery/ai/server_cabinet, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "jld" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/techstorage/rnd, @@ -34388,6 +34373,15 @@ }, /turf/open/floor/plasteel/cafeteria, /area/crew_quarters/heads/hor) +"jKp" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "jKG" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, /turf/open/floor/plasteel, @@ -34543,6 +34537,13 @@ }, /turf/open/floor/plating, /area/hallway/secondary/exit) +"jPF" = ( +/obj/machinery/ai/data_core, +/obj/structure/ethernet_cable{ + icon_state = "0-8" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "jQg" = ( /obj/effect/turf_decal/arrows/white{ color = "#99ccff"; @@ -35067,6 +35068,13 @@ }, /turf/open/floor/circuit/telecomms/server, /area/ai_monitored/turret_protected/ai) +"kcA" = ( +/obj/structure/ethernet_cable{ + icon_state = "0-8" + }, +/obj/machinery/ai/server_cabinet/prefilled, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "kcH" = ( /obj/machinery/disposal/bin, /obj/structure/window/reinforced, @@ -35489,6 +35497,16 @@ }, /turf/open/floor/plasteel, /area/janitor) +"kkY" = ( +/obj/structure/ethernet_cable{ + icon_state = "1-4" + }, +/obj/structure/ethernet_cable{ + icon_state = "1-8" + }, +/obj/machinery/light, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "klD" = ( /obj/structure/sign/departments/minsky/medical/chemistry/chemical2, /turf/closed/wall, @@ -36993,12 +37011,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/port) -"kYF" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible{ - dir = 4 - }, -/turf/open/floor/catwalk_floor/telecomms, -/area/ai_monitored/secondarydatacore) "kYK" = ( /turf/closed/wall/r_wall, /area/medical/genetics/cloning) @@ -37014,15 +37026,6 @@ /obj/structure/closet/l3closet, /turf/open/floor/plating, /area/maintenance/aft) -"kZP" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/open/floor/catwalk_floor/telecomms, -/area/ai_monitored/turret_protected/ai) "kZX" = ( /obj/structure/window/reinforced{ dir = 8 @@ -38662,6 +38665,15 @@ }, /turf/open/floor/plasteel/white, /area/science/xenobiology) +"lQo" = ( +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 4 + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "lQB" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 @@ -38774,6 +38786,9 @@ /obj/effect/turf_decal/trimline/blue/filled/line, /turf/open/floor/plasteel, /area/hallway/primary/starboard) +"lTx" = ( +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "lTC" = ( /obj/machinery/light, /obj/machinery/disposal/bin, @@ -39762,6 +39777,10 @@ }, /turf/open/floor/plasteel, /area/security/prison) +"mnp" = ( +/obj/machinery/atmospherics/pipe/manifold/cyan/hidden, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "mnN" = ( /obj/structure/chair{ dir = 4 @@ -41378,10 +41397,6 @@ }, /turf/open/floor/plasteel/white, /area/maintenance/department/tcoms) -"mVk" = ( -/obj/machinery/atmospherics/pipe/manifold/general/visible, -/turf/open/floor/catwalk_floor/telecomms, -/area/ai_monitored/secondarydatacore) "mVN" = ( /obj/effect/turf_decal/trimline/blue/filled/corner{ dir = 8 @@ -42129,13 +42144,6 @@ }, /turf/open/floor/plasteel, /area/security/brig) -"nhW" = ( -/obj/structure/frame/machine{ - anchored = 1; - state = 2 - }, -/turf/open/floor/catwalk_floor/telecomms, -/area/ai_monitored/turret_protected/ai) "nia" = ( /turf/template_noop, /area/hydroponics) @@ -43493,6 +43501,18 @@ }, /turf/open/floor/plasteel/cafeteria, /area/crew_quarters/heads/cmo) +"nQz" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 8; + external_pressure_bound = 140; + plane = -2; + pressure_checks = 0 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "nQC" = ( /obj/effect/spawner/structure/window/reinforced/shutter, /obj/structure/cable{ @@ -43832,9 +43852,6 @@ }, /turf/open/floor/circuit/telecomms/server, /area/ai_monitored/turret_protected/ai) -"nVU" = ( -/turf/open/floor/catwalk_floor/telecomms, -/area/ai_monitored/secondarydatacore) "nWd" = ( /obj/machinery/computer/rdconsole/experiment{ dir = 1 @@ -44514,6 +44531,16 @@ "omk" = ( /turf/template_noop, /area/maintenance/fore) +"omv" = ( +/obj/structure/window/reinforced, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "omI" = ( /obj/item/instrument/piano_synth{ pixel_x = -10 @@ -45367,6 +45394,15 @@ /obj/effect/turf_decal/trimline/red/filled/line, /turf/open/floor/plasteel, /area/hallway/secondary/exit) +"oDB" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "oDR" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ @@ -45577,6 +45613,16 @@ }, /turf/open/floor/plasteel/dark, /area/engine/engine_smes) +"oJg" = ( +/obj/structure/ethernet_cable{ + icon_state = "1-8" + }, +/obj/structure/ethernet_cable{ + icon_state = "1-4" + }, +/obj/machinery/light, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "oJj" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/plating, @@ -46185,15 +46231,6 @@ }, /turf/open/floor/plasteel, /area/clerk) -"oYg" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/turf/open/floor/catwalk_floor/telecomms, -/area/ai_monitored/turret_protected/ai) "oYn" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ @@ -46271,16 +46308,6 @@ }, /turf/open/floor/plasteel/white, /area/science/explab) -"paP" = ( -/obj/structure/ethernet_cable{ - icon_state = "1-8" - }, -/obj/structure/ethernet_cable{ - icon_state = "1-4" - }, -/obj/machinery/light, -/turf/open/floor/catwalk_floor/telecomms, -/area/ai_monitored/secondarydatacore) "paQ" = ( /obj/machinery/atmospherics/pipe/simple/supply/visible{ dir = 4 @@ -46504,12 +46531,6 @@ }, /turf/open/floor/carpet/blue, /area/bridge/meeting_room) -"pfB" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/turf/open/floor/catwalk_floor/telecomms, -/area/ai_monitored/turret_protected/ai) "pfK" = ( /obj/machinery/modular_computer/console/preset/cargo{ dir = 1 @@ -47811,12 +47832,6 @@ }, /turf/open/floor/engine, /area/maintenance/disposal/incinerator) -"pIM" = ( -/obj/structure/cable/yellow{ - icon_state = "2-4" - }, -/turf/open/floor/catwalk_floor/telecomms, -/area/ai_monitored/turret_protected/ai) "pJB" = ( /turf/closed/wall, /area/tcommsat/computer) @@ -47868,6 +47883,19 @@ /obj/machinery/atmospherics/pipe/simple/yellow/visible, /turf/open/floor/plasteel, /area/engine/atmos_distro) +"pLx" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ + dir = 1; + external_pressure_bound = 120; + plane = -2 + }, +/obj/machinery/camera{ + c_tag = "Secondary AI Core"; + dir = 4; + network = list("ss13","rd") + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "pLQ" = ( /obj/effect/landmark/event_spawn, /obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{ @@ -48031,6 +48059,14 @@ /obj/item/stock_parts/subspace/treatment, /turf/open/floor/plasteel/white, /area/storage/tech) +"pPm" = ( +/obj/machinery/airalarm/tcomms{ + dir = 4; + pixel_x = -24 + }, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "pPs" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 @@ -48216,6 +48252,15 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /turf/open/floor/plating, /area/maintenance/port/aft) +"pTp" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/cyan/hidden{ + dir = 8 + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "pTL" = ( /obj/structure/sign/departments/minsky/engineering/telecommmunications{ pixel_y = 32 @@ -48473,13 +48518,6 @@ }, /turf/open/floor/plasteel, /area/engine/atmos) -"pZD" = ( -/obj/machinery/ai/data_core, -/obj/structure/ethernet_cable{ - icon_state = "0-8" - }, -/turf/open/floor/catwalk_floor/telecomms, -/area/ai_monitored/secondarydatacore) "pZF" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 4 @@ -48591,12 +48629,6 @@ }, /turf/open/floor/plasteel/white, /area/medical/virology) -"qbp" = ( -/obj/structure/ethernet_cable{ - icon_state = "2-4" - }, -/turf/open/floor/catwalk_floor/telecomms, -/area/ai_monitored/secondarydatacore) "qbw" = ( /obj/structure/sign/departments/minsky/medical/virology/virology2{ pixel_y = -32 @@ -48649,6 +48681,14 @@ }, /turf/open/floor/plasteel, /area/hydroponics/garden) +"qdb" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/frame/machine{ + anchored = 1; + state = 2 + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "qdv" = ( /turf/open/floor/carpet, /area/crew_quarters/fitness) @@ -48879,6 +48919,11 @@ /obj/effect/turf_decal/trimline/blue/filled/warning, /turf/open/floor/plasteel/dark, /area/bridge) +"qiX" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/turf/open/floor/plating, +/area/ai_monitored/secondarydatacore) "qjc" = ( /obj/structure/disposalpipe/sorting/mail{ sortType = 10 @@ -48931,12 +48976,6 @@ }, /turf/open/floor/plasteel/dark, /area/security/courtroom) -"qkc" = ( -/obj/structure/ethernet_cable{ - icon_state = "1-8" - }, -/turf/open/floor/catwalk_floor/telecomms, -/area/ai_monitored/secondarydatacore) "qko" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 @@ -49272,12 +49311,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) -"qpN" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/open/floor/catwalk_floor/telecomms, -/area/ai_monitored/turret_protected/ai) "qqz" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 6 @@ -51411,12 +51444,6 @@ }, /turf/open/floor/plasteel/white, /area/medical/medbay/lobby) -"rmn" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ - external_pressure_bound = 120 - }, -/turf/open/floor/catwalk_floor/telecomms, -/area/ai_monitored/secondarydatacore) "rmT" = ( /obj/effect/turf_decal/trimline/red/filled/corner{ dir = 1 @@ -53492,15 +53519,6 @@ icon_state = "platingdmg2" }, /area/maintenance/aft) -"sih" = ( -/obj/machinery/atmospherics/pipe/manifold/general/visible{ - dir = 8 - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/open/floor/catwalk_floor/telecomms, -/area/ai_monitored/secondarydatacore) "siG" = ( /obj/machinery/door/airlock/maintenance{ req_access_txt = "12" @@ -54381,6 +54399,12 @@ }, /turf/open/floor/plasteel, /area/security/brig) +"sDM" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "sEr" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 @@ -54766,6 +54790,16 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/theatre) +"sKT" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "sKX" = ( /obj/structure/table, /obj/item/clothing/gloves/color/latex, @@ -55449,6 +55483,15 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/starboard) +"sYO" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 4 + }, +/obj/structure/ethernet_cable{ + icon_state = "1-2" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "sZn" = ( /obj/structure/table/wood, /obj/item/stamp/captain{ @@ -55723,18 +55766,6 @@ /obj/effect/turf_decal/trimline/yellow/filled/line, /turf/open/floor/plasteel, /area/engine/engineering) -"tdP" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/obj/structure/ethernet_cable{ - icon_state = "1-2" - }, -/turf/open/floor/catwalk_floor/telecomms, -/area/ai_monitored/turret_protected/ai) "tdV" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -56164,18 +56195,6 @@ /obj/structure/lattice, /turf/open/space/basic, /area/space/nearstation) -"tou" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ - dir = 1; - external_pressure_bound = 120 - }, -/obj/machinery/camera{ - c_tag = "Secondary AI Core"; - dir = 4; - network = list("ss13","rd") - }, -/turf/open/floor/catwalk_floor/telecomms, -/area/ai_monitored/secondarydatacore) "toz" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -56387,6 +56406,13 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/fore) +"tsx" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ + external_pressure_bound = 120; + plane = -2 + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "tsS" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, @@ -56534,6 +56560,15 @@ }, /turf/open/floor/plasteel, /area/security/prison) +"txn" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "txG" = ( /obj/machinery/light{ dir = 1 @@ -57399,8 +57434,9 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/fore) -"tPW" = ( +"tPR" = ( /obj/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, /obj/structure/cable/yellow{ icon_state = "4-8" }, @@ -59139,16 +59175,6 @@ icon_state = "panelscorched" }, /area/maintenance/starboard/fore) -"uCy" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/hidden, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/turf/open/floor/catwalk_floor/telecomms, -/area/ai_monitored/turret_protected/ai) "uCM" = ( /obj/machinery/computer/prisoner, /obj/effect/turf_decal/stripes/line{ @@ -59816,11 +59842,6 @@ }, /turf/open/floor/plasteel, /area/engine/foyer) -"uSO" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible, -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/ai_monitored/secondarydatacore) "uTh" = ( /turf/closed/wall, /area/security/execution/transfer) @@ -60860,6 +60881,12 @@ }, /turf/open/floor/plating, /area/maintenance/port/aft) +"vsl" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "vst" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 @@ -61227,14 +61254,6 @@ }, /turf/open/floor/plasteel/white, /area/medical/medbay/aft) -"vyy" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible, -/obj/machinery/airalarm/tcomms{ - dir = 4; - pixel_x = -24 - }, -/turf/open/floor/catwalk_floor/telecomms, -/area/ai_monitored/secondarydatacore) "vyA" = ( /obj/machinery/button/door{ id = "aux_base_shutters"; @@ -61277,14 +61296,6 @@ }, /turf/open/floor/plating, /area/maintenance/aft) -"vzF" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 1; - external_pressure_bound = 140; - pressure_checks = 0 - }, -/turf/open/floor/catwalk_floor/telecomms, -/area/ai_monitored/secondarydatacore) "vAc" = ( /obj/machinery/meter{ target_layer = 2 @@ -61519,13 +61530,6 @@ }, /turf/open/floor/plasteel/white, /area/medical/storage) -"vGn" = ( -/obj/structure/ethernet_cable{ - icon_state = "0-8" - }, -/obj/machinery/ai/server_cabinet/prefilled, -/turf/open/floor/catwalk_floor/telecomms, -/area/ai_monitored/secondarydatacore) "vGx" = ( /turf/closed/wall/r_wall, /area/medical/genetics) @@ -62880,6 +62884,12 @@ }, /turf/open/floor/plasteel, /area/security/prison) +"wjt" = ( +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "wjG" = ( /obj/structure/reagent_dispensers/water_cooler, /turf/open/floor/wood, @@ -64081,13 +64091,6 @@ /obj/effect/spawner/structure/window/reinforced/shutter, /turf/open/floor/plating, /area/tcommsat/computer) -"wJP" = ( -/obj/structure/ethernet_cable{ - icon_state = "0-4" - }, -/obj/machinery/ai/server_cabinet, -/turf/open/floor/catwalk_floor/telecomms, -/area/ai_monitored/secondarydatacore) "wKw" = ( /obj/machinery/door/airlock/command/glass{ name = "Chief Engineer"; @@ -64310,6 +64313,13 @@ }, /turf/open/floor/plasteel/white, /area/science/nanite) +"wOd" = ( +/obj/machinery/holopad, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "wOj" = ( /obj/machinery/atmospherics/pipe/simple/orange/visible{ dir = 6 @@ -64802,15 +64812,6 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) -"xbG" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/turf/open/floor/catwalk_floor/telecomms, -/area/ai_monitored/turret_protected/ai) "xbS" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -65692,6 +65693,12 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, /turf/open/floor/plasteel, /area/engine/engineering) +"xAS" = ( +/obj/structure/ethernet_cable{ + icon_state = "1-8" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/secondarydatacore) "xAW" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cloth_curtain{ @@ -65926,6 +65933,12 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/wood, /area/library) +"xFQ" = ( +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "xFW" = ( /obj/effect/landmark/stationroom/maint/fivexfour, /turf/template_noop, @@ -66137,6 +66150,15 @@ /obj/item/twohanded/required/kirbyplants/random, /turf/open/floor/carpet, /area/library) +"xLm" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/catwalk_floor/telecomms, +/area/ai_monitored/turret_protected/ai) "xLR" = ( /obj/structure/table, /obj/item/flashlight/lamp/green{ @@ -66758,15 +66780,6 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/exit) -"xZQ" = ( -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/structure/cable/yellow{ - icon_state = "1-8" - }, -/turf/open/floor/catwalk_floor/telecomms, -/area/ai_monitored/turret_protected/ai) "yab" = ( /obj/machinery/computer/shuttle/mining, /obj/machinery/computer/security/telescreen{ @@ -67027,13 +67040,6 @@ /obj/machinery/door/airlock/maintenance_hatch, /turf/open/floor/plating, /area/maintenance/starboard/aft) -"yeV" = ( -/obj/machinery/ai/server_cabinet/prefilled, -/obj/structure/ethernet_cable{ - icon_state = "0-8" - }, -/turf/open/floor/catwalk_floor/telecomms, -/area/ai_monitored/turret_protected/ai) "yfg" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -67461,14 +67467,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/aft) -"yli" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/frame/machine{ - anchored = 1; - state = 2 - }, -/turf/open/floor/catwalk_floor/telecomms, -/area/ai_monitored/turret_protected/ai) "ylH" = ( /obj/machinery/sparker{ id = "testigniter"; @@ -109587,11 +109585,11 @@ cva cva cva gQa -pIM -oYg -xZQ -qpN -eYK +xFQ +txn +oDB +vsl +wjt yap cva cva @@ -109842,15 +109840,15 @@ pEf pEf cva cva -dcZ +eFt nLw -iwl +tPR enZ nSN xlV -xbG +giM rjo -yli +qdb cva cva pEf @@ -110099,15 +110097,15 @@ pEf koy cva cva -gzZ -bmd -jdQ -bmd -dwE -hHX -tdP -bmd -gjO +bkY +sYO +omv +sYO +jgW +agv +feK +sYO +bOz cva cva vUh @@ -110356,15 +110354,15 @@ pEf pEf cva cva -nhW +dTf rjo -tPW +aLA jTn nVK enZ -uCy +sKT pyn -yeV +ehY cva cva pEf @@ -110615,11 +110613,11 @@ cva cva cva mWE -pfB -iFg -ihs -kZP -eYK +sDM +xLm +wOd +jKp +wjt kcr cva cva @@ -117263,11 +117261,11 @@ iKk oGM mwf oxg -rmn -vyy -sih -tou -cqJ +tsx +pPm +pTp +pLx +bnB oGM fXS cOe @@ -117520,11 +117518,11 @@ rnA oGM mQY nlV -nVU -nVU -kYF -qbp -paP +lTx +lTx +cde +hnb +oJg oGM fXS cOe @@ -117779,9 +117777,9 @@ fKM oGM oxg oxg -kYF -eMb -pZD +cde +izK +jPF oGM fXS cNW @@ -118036,9 +118034,9 @@ rzU jJv gcd oxg -kYF -eMb -wJP +cde +izK +jkO oGM fXS bNA @@ -118293,9 +118291,9 @@ vkE vuY efW oxg -hsu -fsw -ioc +cde +duc +kkY oGM fXS cOe @@ -118550,9 +118548,9 @@ tEQ sDx lej oxg -kYF -eMb -vGn +cde +izK +kcA oGM fXS cjE @@ -118807,8 +118805,8 @@ nKi xRG bKx bUU -cZW -qkc +lQo +xAS oGM oGM fXS @@ -119063,9 +119061,9 @@ oGM rOm rBx qAr -uSO -mVk -nVU +qiX +mnp +lTx oGM nUE mfN @@ -119320,9 +119318,9 @@ oGM wVN flr cPu -uSO -cDb -vzF +qiX +gRT +ddQ oGM bNA uSq @@ -119578,8 +119576,8 @@ fcx rKn trH oxg -ibL -ebU +nQz +iWz oGM cou xNz From 82dc340b11ff54053b70e8e28fd87091fcc7ad73 Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Thu, 15 Sep 2022 17:04:58 +0200 Subject: [PATCH 61/66] dut --- _maps/map_files/YogStation/YogStation.dmm | 88 ++++++++++------------- 1 file changed, 39 insertions(+), 49 deletions(-) diff --git a/_maps/map_files/YogStation/YogStation.dmm b/_maps/map_files/YogStation/YogStation.dmm index 71af9ff1f27c..7607de655611 100644 --- a/_maps/map_files/YogStation/YogStation.dmm +++ b/_maps/map_files/YogStation/YogStation.dmm @@ -599,6 +599,16 @@ }, /turf/open/space/basic, /area/space) +"acX" = ( +/obj/structure/rack, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/structure/sign/plaques/cave{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/white, +/area/crew_quarters/heads/hor) "acY" = ( /obj/structure/closet/bombcloset/security, /turf/open/floor/plasteel/showroomfloor, @@ -19051,16 +19061,6 @@ }, /turf/open/floor/plasteel/dark, /area/science/xenobiology) -"dbJ" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/obj/structure/sign/plaques/ai_password{ - pixel_x = 32 - }, -/obj/machinery/papershredder, -/turf/open/floor/plasteel/white, -/area/crew_quarters/heads/hor) "dcc" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -21941,6 +21941,13 @@ }, /turf/open/floor/plasteel, /area/engine/atmos_distro) +"euD" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/machinery/papershredder, +/turf/open/floor/plasteel/white, +/area/crew_quarters/heads/hor) "euJ" = ( /obj/machinery/door/airlock/maintenance_hatch, /obj/machinery/door/firedoor/border_only, @@ -23592,17 +23599,6 @@ /obj/machinery/holopad, /turf/open/floor/plasteel, /area/engine/foyer) -"fdU" = ( -/obj/structure/rack, -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/obj/structure/sign/plaques/cave{ - pixel_y = 32 - }, -/obj/item/circuitboard/computer/ai_upload_download, -/turf/open/floor/plasteel/white, -/area/crew_quarters/heads/hor) "fen" = ( /obj/machinery/computer/upload/ai{ dir = 1 @@ -49662,16 +49658,6 @@ }, /turf/open/floor/wood, /area/lawoffice) -"qzd" = ( -/obj/machinery/airalarm{ - dir = 8; - pixel_x = 24 - }, -/obj/machinery/computer/ai_control_console{ - dir = 8 - }, -/turf/open/floor/plasteel/grimy, -/area/ai_monitored/turret_protected/aisat_interior) "qzt" = ( /obj/machinery/door/airlock/external{ name = "Engineering External Access"; @@ -50245,20 +50231,6 @@ }, /turf/open/floor/plating, /area/storage/tech) -"qLi" = ( -/obj/machinery/camera{ - c_tag = "MiniSat - Monitoring room"; - dir = 8; - network = list("minisat","ss13") - }, -/obj/machinery/newscaster/security_unit{ - pixel_x = 28 - }, -/obj/machinery/computer/ai_resource_distribution{ - dir = 8 - }, -/turf/open/floor/plasteel/grimy, -/area/ai_monitored/turret_protected/aisat_interior) "qLt" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -62668,6 +62640,13 @@ /obj/effect/landmark/start/assistant, /turf/open/floor/plasteel, /area/crew_quarters/fitness) +"wcX" = ( +/obj/machinery/airalarm{ + dir = 8; + pixel_x = 24 + }, +/turf/open/floor/plasteel/grimy, +/area/ai_monitored/turret_protected/aisat_interior) "wdb" = ( /obj/structure/door_assembly/door_assembly_mhatch, /turf/open/floor/plating, @@ -64604,6 +64583,17 @@ /obj/machinery/light/small, /turf/open/floor/plating, /area/maintenance/aft) +"wVY" = ( +/obj/machinery/camera{ + c_tag = "MiniSat - Monitoring room"; + dir = 8; + network = list("minisat","ss13") + }, +/obj/machinery/newscaster/security_unit{ + pixel_x = 28 + }, +/turf/open/floor/plasteel/grimy, +/area/ai_monitored/turret_protected/aisat_interior) "wWl" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, @@ -108049,8 +108039,8 @@ kik eEZ jWq vmm -qzd -qLi +wcX +wVY mtW tiN gtB @@ -116976,7 +116966,7 @@ dRo kxz oaO bvK -fdU +acX bys bzM aDa @@ -117492,7 +117482,7 @@ eEA bvK bxm byu -dbJ +euD bCf aGs bvK From 24c192dc803d1e89167f65693e5c98cf72f43dfe Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Thu, 15 Sep 2022 19:26:05 +0200 Subject: [PATCH 62/66] unused --- code/modules/mob/living/silicon/ai/ai_network/ai_network.dm | 2 -- yogstation/code/modules/jobs/job_types/network_admin.dm | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm b/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm index cf8759260208..8e815d23666f 100644 --- a/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm +++ b/code/modules/mob/living/silicon/ai/ai_network/ai_network.dm @@ -11,8 +11,6 @@ var/list/remote_networks = list() - var/networked_cpu = 0 //How much CPU is in this network - var/networked_ram = 0 //How much RAM is in this network var/previous_ram = 0 var/datum/ai_shared_resources/resources diff --git a/yogstation/code/modules/jobs/job_types/network_admin.dm b/yogstation/code/modules/jobs/job_types/network_admin.dm index 2d32811ed739..4da0200b3277 100644 --- a/yogstation/code/modules/jobs/job_types/network_admin.dm +++ b/yogstation/code/modules/jobs/job_types/network_admin.dm @@ -15,7 +15,7 @@ outfit = /datum/outfit/job/network_admin added_access = list(ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_MAINT_TUNNELS) - base_access = list(ACCESS_TCOMSAT, ACCESS_TCOM_ADMIN, ACCESS_TECH_STORAGE, ACCESS_RC_ANNOUNCE, ACCESS_CONSTRUCTION, ACCESS_MECH_ENGINE, ACCESS_NETWORK, ACCESS_RESEARCH, ACCESS_MINISAT) + base_access = list(ACCESS_TCOM_ADMIN, ACCESS_TECH_STORAGE, ACCESS_RC_ANNOUNCE, ACCESS_CONSTRUCTION, ACCESS_MECH_ENGINE, ACCESS_NETWORK, ACCESS_RESEARCH, ACCESS_MINISAT) paycheck = PAYCHECK_MEDIUM paycheck_department = ACCOUNT_ENG display_order = JOB_DISPLAY_ORDER_NETWORK_ADMIN From 926dc13593a73d00e445e3f713fee989db7fc6c7 Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Thu, 15 Sep 2022 19:27:58 +0200 Subject: [PATCH 63/66] map --- _maps/map_files/YogStation/YogStation.dmm | 265 ++++++++++++++++------ 1 file changed, 195 insertions(+), 70 deletions(-) diff --git a/_maps/map_files/YogStation/YogStation.dmm b/_maps/map_files/YogStation/YogStation.dmm index 7607de655611..adc2265abc24 100644 --- a/_maps/map_files/YogStation/YogStation.dmm +++ b/_maps/map_files/YogStation/YogStation.dmm @@ -76,6 +76,15 @@ }, /turf/open/floor/plasteel/showroomfloor, /area/security/main) +"aaC" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "aaH" = ( /turf/open/floor/plating/airless, /area/space/nearstation) @@ -14851,6 +14860,21 @@ icon_state = "platingdmg3" }, /area/maintenance/starboard/aft) +"bSp" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "bSC" = ( /obj/machinery/portable_atmospherics/canister/water_vapor, /obj/structure/window/reinforced{ @@ -15847,10 +15871,6 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/fore) -"ceR" = ( -/obj/effect/landmark/blobstart, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "ceW" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/techstorage/RnD_secure, @@ -21786,6 +21806,14 @@ /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/quartermaster/office) +"erS" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "erX" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -22090,6 +22118,15 @@ /obj/effect/turf_decal/bot, /turf/open/floor/plasteel/white, /area/science/nanite) +"exV" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "exW" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 1 @@ -26078,6 +26115,21 @@ }, /turf/open/space, /area/solar/port/aft) +"ggd" = ( +/obj/structure/sign/warning/electricshock{ + pixel_y = -32 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "ggh" = ( /obj/machinery/power/apc/highcap/five_k{ areastring = "/area/bridge"; @@ -27961,6 +28013,21 @@ }, /turf/open/floor/plasteel/white, /area/science/research) +"hdM" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 10 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "hdR" = ( /obj/machinery/door/airlock/maintenance{ req_access_txt = "12" @@ -28059,6 +28126,21 @@ /obj/item/twohanded/required/pool/rubber_ring, /turf/open/floor/plasteel, /area/crew_quarters/fitness) +"hfQ" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "hfW" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/atmos/nitrous_input{ dir = 8 @@ -30041,6 +30123,17 @@ icon_state = "panelscorched" }, /area/maintenance/starboard/fore) +"hVc" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "hVj" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 @@ -35991,6 +36084,15 @@ }, /turf/open/floor/wood, /area/crew_quarters/dorms) +"kBn" = ( +/obj/effect/landmark/blobstart, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "kBq" = ( /obj/machinery/camera{ c_tag = "Garden"; @@ -40477,6 +40579,18 @@ }, /turf/open/floor/plasteel/white, /area/medical/storage) +"mzT" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 9 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "mzU" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 4 @@ -42578,6 +42692,21 @@ }, /turf/open/floor/plating, /area/maintenance/department/electrical) +"nsK" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "ntm" = ( /obj/machinery/light, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ @@ -48597,6 +48726,20 @@ }, /turf/open/floor/plasteel, /area/quartermaster/storage) +"qaN" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "qaO" = ( /turf/closed/wall/r_wall, /area/security/interrogation) @@ -54798,6 +54941,18 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/aft_starboard) +"sLo" = ( +/obj/machinery/power/apc{ + areastring = "/area/maintenance/starboard/aft"; + dir = 4; + name = "Starboard Quarter Maintenance APC"; + pixel_x = 24 + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "sLr" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 @@ -59781,24 +59936,6 @@ /obj/item/stack/sheet/mineral/plasma, /turf/open/floor/plasteel/white, /area/medical/virology) -"uSq" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ - dir = 1 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/cable{ - icon_state = "1-4" - }, -/obj/structure/cable{ - icon_state = "2-4" - }, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "uSG" = ( /obj/machinery/power/apc{ areastring = "/area/engine/foyer"; @@ -62268,6 +62405,18 @@ }, /turf/open/floor/plating, /area/maintenance/port/aft) +"vVt" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "vVX" = ( /obj/structure/sign/directions/medical{ dir = 4; @@ -64628,15 +64777,6 @@ /obj/effect/turf_decal/trimline/yellow/filled/corner, /turf/open/floor/plasteel, /area/hallway/primary/aft) -"wXh" = ( -/obj/machinery/power/apc{ - areastring = "/area/maintenance/starboard/aft"; - dir = 4; - name = "Starboard Quarter Maintenance APC"; - pixel_x = 24 - }, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "wXw" = ( /obj/machinery/light{ dir = 4 @@ -66220,21 +66360,6 @@ /obj/machinery/door/firedoor/border_only, /turf/open/floor/plating, /area/maintenance/starboard/fore) -"xNz" = ( -/obj/structure/sign/warning/electricshock{ - pixel_y = -32 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 9 - }, -/obj/structure/cable{ - icon_state = "1-8" - }, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "xND" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ dir = 4 @@ -119313,7 +119438,7 @@ gRT ddQ oGM bNA -uSq +hfQ kQW iwk mNK @@ -119555,10 +119680,10 @@ cNZ cNZ bSm aWg -cOe +nsK bMB cNW -cOe +exV cNW cOe oGM @@ -119570,7 +119695,7 @@ nQz iWz oGM cou -xNz +ggd cjD shT clz @@ -119812,10 +119937,10 @@ nex cNW cNW cNW -cOe +bSp cOe cNW -cOe +exV cNW cOe oGM @@ -119827,7 +119952,7 @@ oGM oGM oGM cOe -cOe +vVt cjD cjD cjD @@ -120069,22 +120194,22 @@ iKq iKq eoH cNW -cOe -cOe -cOe -cOe -cOe -cOe -cOe -cOe -cOe -cOe -cOe -cOe -cOe -cOe -ceR -cOe +hdM +aaC +aaC +qaN +erS +erS +erS +erS +erS +erS +erS +erS +erS +hVc +kBn +mzT cNW gXs aaf @@ -120339,7 +120464,7 @@ bNB cOe cOe uaD -wXh +sLo cOe cdR cNW From fe2c75f768cf680b892bb663435ec2f3e585088b Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Thu, 15 Sep 2022 19:28:51 +0200 Subject: [PATCH 64/66] PIPES --- _maps/map_files/YogStation/YogStation.dmm | 413 ++++++++++++---------- 1 file changed, 217 insertions(+), 196 deletions(-) diff --git a/_maps/map_files/YogStation/YogStation.dmm b/_maps/map_files/YogStation/YogStation.dmm index adc2265abc24..53dc0e83aa69 100644 --- a/_maps/map_files/YogStation/YogStation.dmm +++ b/_maps/map_files/YogStation/YogStation.dmm @@ -76,15 +76,6 @@ }, /turf/open/floor/plasteel/showroomfloor, /area/security/main) -"aaC" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "aaH" = ( /turf/open/floor/plating/airless, /area/space/nearstation) @@ -2562,6 +2553,21 @@ }, /turf/open/floor/carpet, /area/crew_quarters/fitness) +"aob" = ( +/obj/structure/sign/warning/electricshock{ + pixel_y = -32 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "aof" = ( /turf/closed/wall/r_wall, /area/maintenance/solars/starboard/fore) @@ -6028,6 +6034,14 @@ }, /turf/open/floor/plasteel/dark, /area/engine/engineering) +"aJj" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "aJk" = ( /obj/machinery/light, /obj/structure/table, @@ -14860,21 +14874,6 @@ icon_state = "platingdmg3" }, /area/maintenance/starboard/aft) -"bSp" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "bSC" = ( /obj/machinery/portable_atmospherics/canister/water_vapor, /obj/structure/window/reinforced{ @@ -17485,6 +17484,15 @@ }, /turf/open/floor/plasteel/dark/telecomms, /area/tcommsat/server) +"czb" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "czc" = ( /obj/machinery/door/airlock/highsecurity{ name = "AI Upload Access"; @@ -17950,6 +17958,20 @@ }, /turf/open/floor/plasteel, /area/quartermaster/miningdock) +"cGu" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "cGw" = ( /obj/machinery/meter, /obj/machinery/atmospherics/pipe/simple/supply/visible, @@ -21806,14 +21828,6 @@ /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/quartermaster/office) -"erS" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "erX" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -22070,6 +22084,15 @@ /obj/effect/landmark/start/assistant, /turf/open/floor/wood, /area/library) +"exA" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "exB" = ( /obj/structure/chair/office/dark{ dir = 4 @@ -22118,15 +22141,6 @@ /obj/effect/turf_decal/bot, /turf/open/floor/plasteel/white, /area/science/nanite) -"exV" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "exW" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 1 @@ -25047,6 +25061,18 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating, /area/storage/tech) +"fIh" = ( +/obj/machinery/power/apc{ + areastring = "/area/maintenance/starboard/aft"; + dir = 4; + name = "Starboard Quarter Maintenance APC"; + pixel_x = 24 + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "fIn" = ( /obj/machinery/computer/cargo{ dir = 4 @@ -26115,21 +26141,6 @@ }, /turf/open/space, /area/solar/port/aft) -"ggd" = ( -/obj/structure/sign/warning/electricshock{ - pixel_y = -32 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "ggh" = ( /obj/machinery/power/apc/highcap/five_k{ areastring = "/area/bridge"; @@ -26382,6 +26393,18 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/maintenance/starboard/aft) +"gqo" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 8 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "gqu" = ( /obj/machinery/door/firedoor/border_only{ dir = 1 @@ -28013,21 +28036,6 @@ }, /turf/open/floor/plasteel/white, /area/science/research) -"hdM" = ( -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 10 - }, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "hdR" = ( /obj/machinery/door/airlock/maintenance{ req_access_txt = "12" @@ -28126,21 +28134,6 @@ /obj/item/twohanded/required/pool/rubber_ring, /turf/open/floor/plasteel, /area/crew_quarters/fitness) -"hfQ" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ - dir = 1 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/cable{ - icon_state = "2-4" - }, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "hfW" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/atmos/nitrous_input{ dir = 8 @@ -30123,17 +30116,6 @@ icon_state = "panelscorched" }, /area/maintenance/starboard/fore) -"hVc" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/structure/cable{ - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "hVj" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 @@ -36084,15 +36066,6 @@ }, /turf/open/floor/wood, /area/crew_quarters/dorms) -"kBn" = ( -/obj/effect/landmark/blobstart, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "kBq" = ( /obj/machinery/camera{ c_tag = "Garden"; @@ -37120,6 +37093,21 @@ /obj/structure/closet/firecloset, /turf/open/floor/plating, /area/maintenance/port/aft) +"kYZ" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "kZl" = ( /obj/structure/closet/l3closet, /turf/open/floor/plating, @@ -38221,6 +38209,21 @@ }, /turf/open/floor/plasteel, /area/quartermaster/office) +"lzq" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 10 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "lzt" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/trimline/yellow/filled/warning{ @@ -38546,6 +38549,15 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/engine, /area/science/xenobiology) +"lJK" = ( +/obj/effect/landmark/blobstart, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "lKd" = ( /obj/machinery/firealarm{ pixel_y = 28 @@ -40579,18 +40591,6 @@ }, /turf/open/floor/plasteel/white, /area/medical/storage) -"mzT" = ( -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 9 - }, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "mzU" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 4 @@ -40903,6 +40903,15 @@ /obj/effect/turf_decal/trimline/yellow/filled/line, /turf/open/floor/plasteel, /area/construction/mining/aux_base) +"mEQ" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "mFg" = ( /obj/machinery/airalarm{ dir = 4; @@ -41309,6 +41318,21 @@ }, /turf/open/floor/plasteel/white, /area/science/research) +"mQO" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "mQY" = ( /obj/effect/turf_decal/stripes/end{ dir = 4 @@ -42002,6 +42026,21 @@ }, /turf/open/floor/plating, /area/science/robotics/lab) +"ncw" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "ncA" = ( /obj/machinery/button/door{ desc = "A remote control-switch for shuttle construction storage."; @@ -42692,21 +42731,6 @@ }, /turf/open/floor/plating, /area/maintenance/department/electrical) -"nsK" = ( -/obj/structure/cable{ - icon_state = "1-4" - }, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 5 - }, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "ntm" = ( /obj/machinery/light, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ @@ -43731,6 +43755,18 @@ }, /turf/open/floor/plasteel/white, /area/medical/storage) +"nSD" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 9 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "nSI" = ( /obj/machinery/atmospherics/pipe/simple/orange/visible{ dir = 4 @@ -46779,6 +46815,17 @@ }, /turf/open/floor/plasteel, /area/security/main) +"pkn" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "pkC" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, @@ -48726,20 +48773,6 @@ }, /turf/open/floor/plasteel, /area/quartermaster/storage) -"qaN" = ( -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "qaO" = ( /turf/closed/wall/r_wall, /area/security/interrogation) @@ -51424,6 +51457,18 @@ }, /turf/open/floor/plating, /area/construction) +"rjl" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "rjo" = ( /obj/machinery/atmospherics/pipe/simple/cyan/hidden{ dir = 4 @@ -54941,18 +54986,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/aft_starboard) -"sLo" = ( -/obj/machinery/power/apc{ - areastring = "/area/maintenance/starboard/aft"; - dir = 4; - name = "Starboard Quarter Maintenance APC"; - pixel_x = 24 - }, -/obj/structure/cable{ - icon_state = "0-8" - }, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "sLr" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 @@ -62405,18 +62438,6 @@ }, /turf/open/floor/plating, /area/maintenance/port/aft) -"vVt" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "vVX" = ( /obj/structure/sign/directions/medical{ dir = 4; @@ -119438,7 +119459,7 @@ gRT ddQ oGM bNA -hfQ +ncw kQW iwk mNK @@ -119680,10 +119701,10 @@ cNZ cNZ bSm aWg -nsK +kYZ bMB cNW -exV +mEQ cNW cOe oGM @@ -119695,7 +119716,7 @@ nQz iWz oGM cou -ggd +aob cjD shT clz @@ -119937,10 +119958,10 @@ nex cNW cNW cNW -bSp +mQO cOe cNW -exV +mEQ cNW cOe oGM @@ -119952,7 +119973,7 @@ oGM oGM oGM cOe -vVt +rjl cjD cjD cjD @@ -120194,22 +120215,22 @@ iKq iKq eoH cNW -hdM -aaC -aaC -qaN -erS -erS -erS -erS -erS -erS -erS -erS -erS -hVc -kBn -mzT +lzq +exA +exA +cGu +aJj +aJj +aJj +aJj +aJj +aJj +aJj +gqo +aJj +pkn +lJK +nSD cNW gXs aaf @@ -120462,9 +120483,9 @@ axl cNW bNB cOe -cOe +czb uaD -sLo +fIh cOe cdR cNW From 6cbd4157e6ca8d6c2065699564c94f648af7b807 Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Thu, 15 Sep 2022 19:34:15 +0200 Subject: [PATCH 65/66] Update network_admin.dm --- yogstation/code/modules/jobs/job_types/network_admin.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yogstation/code/modules/jobs/job_types/network_admin.dm b/yogstation/code/modules/jobs/job_types/network_admin.dm index 4da0200b3277..fb10da074bfb 100644 --- a/yogstation/code/modules/jobs/job_types/network_admin.dm +++ b/yogstation/code/modules/jobs/job_types/network_admin.dm @@ -15,7 +15,7 @@ outfit = /datum/outfit/job/network_admin added_access = list(ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_MAINT_TUNNELS) - base_access = list(ACCESS_TCOM_ADMIN, ACCESS_TECH_STORAGE, ACCESS_RC_ANNOUNCE, ACCESS_CONSTRUCTION, ACCESS_MECH_ENGINE, ACCESS_NETWORK, ACCESS_RESEARCH, ACCESS_MINISAT) + base_access = list(ACCESS_TCOM_ADMIN, ACCESS_TECH_STORAGE, ACCESS_RC_ANNOUNCE, ACCESS_CONSTRUCTION, ACCESS_MECH_ENGINE, ACCESS_NETWORK, ACCESS_RESEARCH, ACCESS_MINISAT, ACCESS_TOX) paycheck = PAYCHECK_MEDIUM paycheck_department = ACCOUNT_ENG display_order = JOB_DISPLAY_ORDER_NETWORK_ADMIN From 343e2ff7c2e63754ed77f78372e8536665a1cde7 Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Thu, 15 Sep 2022 19:40:44 +0200 Subject: [PATCH 66/66] config- revert --- .../file_system/programs/ainetworkinterface.dm | 6 ++++-- config/maps.txt | 3 +++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/code/modules/modular_computers/file_system/programs/ainetworkinterface.dm b/code/modules/modular_computers/file_system/programs/ainetworkinterface.dm index 947da9cc3dec..777e7332118b 100644 --- a/code/modules/modular_computers/file_system/programs/ainetworkinterface.dm +++ b/code/modules/modular_computers/file_system/programs/ainetworkinterface.dm @@ -388,7 +388,7 @@ if(!(project_type in GLOB.possible_ainet_activities)) return var/amount = text2num(params["amount"]) - if(amount <= 0) + if(amount < 0 || amount > 1) return var/total_cpu_used = 0 @@ -396,9 +396,11 @@ if(I == project_type) continue total_cpu_used += net.local_cpu_usage[I] - + if((1 - total_cpu_used) >= amount) net.local_cpu_usage[project_type] = amount + else + net.local_cpu_usage[project_type] = (1 - total_cpu_used) . = TRUE diff --git a/config/maps.txt b/config/maps.txt index eb45f3ec3b0d..079a3bfb5339 100644 --- a/config/maps.txt +++ b/config/maps.txt @@ -19,6 +19,7 @@ endmap map asteroidstation minplayers 25 + disabled endmap map omegastation @@ -29,6 +30,7 @@ endmap map yogsmeta minplayers 25 votable + disabled endmap map yogsdelta @@ -44,6 +46,7 @@ endmap map gaxstation maxplayers 40 votable + disabled endmap map icebox