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 (
+
+
+
+
+
+ );
+};
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%Wd2NzVu
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~Kokgl^^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 (
-
+
+
+ setTab(1))}>
+ Upload
+
+ setTab(2))}>
+ Download
+
+
+ {tab === 1 && (
+
+
+ act("upload_person")}>Upload from MMI/Posibrain
+
+ {!data.intellicard && (
+
+
+ No IntelliCard inserted!
+
+
+ ) || (
+
+ {data.intellicard_ai && (
+
+
+
+
+ act("upload_ai")}>Upload
+
+
+
+
+ ) || (
+
+
+ Intellicard contains no AI!
+
+
+ )}
+
+ )}
+
+ )}
+ {tab === 2 && (
+
+ {data.downloading && (
+
+ Currently downloading {data.downloading}
+
+ act("stop_download")}>Cancel Download
+ {!!data.current_ai_ref && data.current_ai_ref === data.downloading_ref && (
+ act("skip_download")}>Instantly finish download
+ )}
+
+
+ )|| (
+
+ {data.ai_list.filter(ai => {
+ return !!ai.in_core;
+ }).map((ai, index) => {
+ return (
+ {ai.name} | {ai.active ? "Active" : "Inactive"})}
+ buttons={(
+
+ act("apply_object", { ai_ref: ai.ref })}>Apply Upgrade
+ act("start_download", { download_target: ai.ref })}>{ai.can_download ? "Download" : "&gr4&!/"}
+ {!!data.is_infiltrator && !ai.being_hijacked && (
+ act("start_hijack", { target_ai: ai.ref })}>Start hijacking
+ ) }
+ {!!ai.being_hijacked && (
+ act("stop_hijack", { target_ai: ai.ref })}>Stop hijacking
+ )}
+
+ )}>
+ 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
+
+ act('toggle_lock')} color="good" tooltip="If not already connected, this will allow foreign devices to connect to this one.">Unlock
+
+
+
+
+ )
+ }
+
+
+ return (
+
+
+
+ act('toggle_lock')} color="bad" tooltip="If not connected this will prevent others connecting to this device. Will not sever existing connections.">Lock
+ act('switch_label')}>Set Label
+
+ )}>
+
+ {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 && (
-
-
- act("upload_person")}>Upload from MMI/Posibrain
+
+
+ setTab(1))}>
+ Upload
+
+ setTab(2))}>
+ Download
+
+
+ {tab === 1 && (
+
+
+ act("upload_person")}>Upload from MMI/Posibrain
+
+ {!data.intellicard && (
+
+
+ No IntelliCard inserted!
+
+
+ ) || (
+
+ {data.intellicard_ai && (
+
+
+
+
+ act("upload_ai")}>Upload
+
+
+
+
+ ) || (
+
+
+ Intellicard contains no AI!
+
+
+ )}
- {!data.intellicard && (
-
-
- No IntelliCard inserted!
-
-
- ) || (
-
- {data.intellicard_ai && (
-
-
-
-
- act("upload_ai")}>Upload
-
-
-
-
- ) || (
-
-
- Intellicard contains no AI!
-
-
- )}
-
- )}
-
- )}
- {tab === 2 && (
-
- {data.downloading && (
-
- Currently downloading {data.downloading}
-
- act("stop_download")}>Cancel Download
- {!!data.current_ai_ref && data.current_ai_ref === data.downloading_ref && (
- act("skip_download")}>Instantly finish download
- )}
-
+ )}
+
+ )}
+ {tab === 2 && (
+
+ {data.downloading && (
+
+ Currently downloading {data.downloading}
+
+ act("stop_download")}>Cancel Download
+ {!!data.current_ai_ref && data.current_ai_ref === data.downloading_ref && (
+ act("skip_download")}>Instantly finish download
+ )}
+
- )|| (
-
- {data.ai_list.filter(ai => {
- return !!ai.in_core;
- }).map((ai, index) => {
- return (
- {ai.name} | {ai.active ? "Active" : "Inactive"})}
- buttons={(
-
- act("apply_object", { ai_ref: ai.ref })}>Apply Upgrade
- act("start_download", { download_target: ai.ref })}>{ai.can_download ? "Download" : "&gr4&!/"}
- {!!data.is_infiltrator && !ai.being_hijacked && (
- act("start_hijack", { target_ai: ai.ref })}>Start hijacking
- ) }
- {!!ai.being_hijacked && (
- act("stop_hijack", { target_ai: ai.ref })}>Stop hijacking
- )}
-
- )}>
- Integrity:
-
-
- );
- })}
-
- )}
-
- )}
-
+ )|| (
+
+ {data.ai_list.filter(ai => {
+ return !!ai.in_core;
+ }).map((ai, index) => {
+ return (
+ {ai.name} | {ai.active ? "Active" : "Inactive"})}
+ buttons={(
+
+ act("apply_object", { ai_ref: ai.ref })}>Apply Upgrade
+ act("start_download", { download_target: ai.ref })}>{ai.can_download ? "Download" : "&gr4&!/"}
+ {!!data.is_infiltrator && !ai.being_hijacked && (
+ act("start_hijack", { target_ai: ai.ref })}>Start hijacking
+ ) }
+ {!!ai.being_hijacked && (
+ act("stop_hijack", { target_ai: ai.ref })}>Stop hijacking
+ )}
+
+ )}>
+ 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 (
+
+
+
+
+
+
+ );
+};
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} />
+
+
{
onClick={() => act('pressure', {
pressure: 'reset',
})} />
-
-
+
+
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'}
+
+
+
{
onClick={() => act('pressure', {
pressure: 'reset',
})} />
-
-
+
+
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 (
-
-
-
-
-
-
- );
-};
+ const alertColor = shouldShowAlert()
+ && keyOfMatchingRange(clampedValue, scaledRanges);
+
+ 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 (
-
-
-
+
+
+
+ );
+};
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
-
- act('toggle_lock')} color="good" tooltip="If not already connected, this will allow foreign devices to connect to this one.">Unlock
-
-
-
-
- )
+ width={500}
+ height={450}
+ resizable>
+
+
+ Machine locked
+
+ act('toggle_lock')} color="good" tooltip="If not already connected, this will allow foreign devices to connect to this one.">Unlock
+
+
+
+
+ );
}
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 && (
act("upload_person")}>Upload from MMI/Posibrain
@@ -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 && (
act("upload_person")}>Upload from MMI/Posibrain
@@ -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,
+ })} />
+ act("max_cpu", {
+ target_ai: ai.ref,
+ })}>Max
+
+
+
+
+ RAM Capacity:
+
+ {ai.assigned_ram} TB
+
+ act("add_ram", {
+ target_ai: ai.ref,
+ })} />
+ act("remove_ram", {
+ target_ai: ai.ref,
+ })} />
+
+
+
+
+
+
+ {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,
+ })} />
+ act("max_cpu", {
+ target_ai: ai.ref,
+ })}>Max
+
+
+
+
+ RAM Capacity:
+
+ {ai.assigned_ram} TB
+
+ act("add_ram", {
+ target_ai: ai.ref,
+ })} />
+ act("remove_ram", {
+ target_ai: ai.ref,
+ })} />
+
+
+
+
+ );
+ })}
+
+
+
+ );
+};
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 && (
-
-
- act("upload_person")}>Upload from MMI/Posibrain
-
- {!data.intellicard && (
-
-
- No IntelliCard inserted!
-
-
- ) || (
-
- {data.intellicard_ai && (
-
-
-
-
- act("upload_ai")}>Upload
-
-
-
-
- ) || (
-
-
- Intellicard contains no AI!
-
-
- )}
-
- )}
-
+
)}
{tab === 4 && (
-
- {data.downloading && (
-
- Currently downloading {data.downloading}
-
- act("stop_download")}>Cancel Download
- {!!data.current_ai_ref && data.current_ai_ref === data.downloading_ref && (
- act("skip_download")}>Instantly finish download
- )}
-
-
- )|| (
-
- {data.ai_list.filter(ai => {
- return !!ai.in_core;
- }).map((ai, index) => {
- return (
- {ai.name} | {ai.active ? "Active" : "Inactive"})}
- buttons={(
-
- act("apply_object", { ai_ref: ai.ref })}>Apply Upgrade
- act("start_download", { download_target: ai.ref })}>{ai.can_download ? "Download" : "&gr4&!/"}
- {!!data.is_infiltrator && !ai.being_hijacked && (
- act("start_hijack", { target_ai: ai.ref })}>Start hijacking
- ) }
- {!!ai.being_hijacked && (
- act("stop_hijack", { target_ai: ai.ref })}>Stop hijacking
- )}
-
- )}>
- 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,
+ })} />
+ act('max_network_cpu', {
+ project_name: project.name,
+ })}>Max
+
+
+
+ )}>
+ {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,
})} />
act("max_cpu", {
- target_ai: ai.ref,
+ target_ai: data.network_ref,
})}>Max
@@ -230,14 +178,14 @@ const ResourceAllocation = (props, context) => {
RAM Capacity:
- {ai.assigned_ram} TB
+ {data.network_assigned_ram} TB
act("add_ram", {
- target_ai: ai.ref,
+ target_ai: data.network_ref,
})} />
act("remove_ram", {
- target_ai: ai.ref,
+ target_ai: data.network_ref,
})} />
@@ -290,3 +238,113 @@ const ResourceAllocation = (props, context) => {
);
};
+
+
+const AIDownload = (props, context) => {
+ const { act, data } = useBackend(context);
+
+ return (
+
+ {data.downloading && (
+
+ Currently downloading {data.downloading}
+
+ act("stop_download")}>Cancel Download
+ {!!data.current_ai_ref && data.current_ai_ref === data.downloading_ref && (
+ act("skip_download")}>Instantly finish download
+ )}
+
+
+ )|| (
+
+ {data.ai_list.filter(ai => {
+ return !!ai.in_core;
+ }).map((ai, index) => {
+ return (
+ {ai.name} | {ai.active ? "Active" : "Inactive"})}
+ buttons={(
+
+ act("apply_object", { ai_ref: ai.ref })}>Apply Upgrade
+ act("start_download", { download_target: ai.ref })}>{ai.can_download ? "Download" : "&gr4&!/"}
+ {!!data.is_infiltrator && !ai.being_hijacked && (
+ act("start_hijack", { target_ai: ai.ref })}>Start hijacking
+ ) }
+ {!!ai.being_hijacked && (
+ act("stop_hijack", { target_ai: ai.ref })}>Stop hijacking
+ )}
+
+ )}>
+ Integrity:
+
+
+ );
+ })}
+
+ )}
+
+ );
+};
+
+const AIUpload = (props, context) => {
+ const { act, data } = useBackend(context);
+
+ return (
+
+
+ act("upload_person")}>Upload from MMI/Posibrain
+
+ {!data.intellicard && (
+
+
+ No IntelliCard inserted!
+
+
+ ) || (
+
+ {data.intellicard_ai && (
+
+
+
+
+ act("upload_ai")}>Upload
+
+
+
+
+ ) || (
+
+
+ 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,
- })} />
- act('max_network_cpu', {
- project_name: project.name,
- })}>Max
-
+
+ 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,
+ })} />
+ act('max_network_cpu', {
+ project_name: project.name,
+ })}>Max
+
-
- )}>
- {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