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 001/112] 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 002/112] 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 003/112] 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 004/112] 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 005/112] 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 006/112] 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 007/112] 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 008/112] 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 009/112] 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 010/112] 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 011/112] 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 012/112] 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 013/112] 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 014/112] 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 015/112] 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 016/112] 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 017/112] 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 018/112] 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 019/112] 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 020/112] 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 021/112] 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 022/112] 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 023/112] 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 024/112] 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 025/112] 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 026/112] 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 027/112] 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 028/112] 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 029/112] 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 030/112] 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 031/112] 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 032/112] 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 033/112] 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 034/112] 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 035/112] 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 036/112] 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 037/112] 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 038/112] 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 039/112] 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 040/112] 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 041/112] 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 042/112] 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 043/112] 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 044/112] 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 045/112] 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 046/112] 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 047/112] 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 048/112] 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 049/112] 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 050/112] 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 051/112] 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 052/112] 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 053/112] 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 054/112] 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 055/112] 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 056/112] 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 057/112] 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 058/112] 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 059/112] 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 060/112] 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 061/112] 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 062/112] 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 063/112] 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 064/112] 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 065/112] 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 066/112] 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
From 6043fe7ae19516bc54032d3909fce71c2d715fad Mon Sep 17 00:00:00 2001
From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com>
Date: Sat, 17 Sep 2022 18:49:20 +0200
Subject: [PATCH 067/112] minor changes
---
.../mob/living/silicon/ai/ai_network/ai_network.dm | 2 --
.../living/silicon/ai/ai_network/ethernet_cable.dm | 2 +-
.../silicon/ai/ai_network/shared_resources.dm | 14 ++++++++------
tgui/packages/tgui/interfaces/NtosAIMonitor.js | 6 +++---
.../code/modules/jobs/job_types/network_admin.dm | 2 +-
5 files changed, 13 insertions(+), 13 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 8e815d23666f..c62728080194 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
@@ -226,8 +226,6 @@
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)
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 7816c4801e21..6635c76c1ce5 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
@@ -542,7 +542,7 @@ By design, d1 is the smallest direction and d2 is the highest
var/turf/T = C.loc
- if(!isturf(T) || T.underfloor_accessibility ) // 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
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 148dbf999d7e..16dce073b5c4 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
@@ -115,14 +115,16 @@
//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)
+ if(split_network_cpu)
+ 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)
+ if(total_usage)
+ 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
diff --git a/tgui/packages/tgui/interfaces/NtosAIMonitor.js b/tgui/packages/tgui/interfaces/NtosAIMonitor.js
index 2420b70c2389..4dbccacf5496 100644
--- a/tgui/packages/tgui/interfaces/NtosAIMonitor.js
+++ b/tgui/packages/tgui/interfaces/NtosAIMonitor.js
@@ -166,7 +166,7 @@ const ResourceAllocation = (props, context) => {
return (
-
+
{
({data.total_assigned_cpu * 100}%)
-
+
{
maxValue={data.total_ram}>{data.total_assigned_ram}/{data.total_ram} TB
-
+
CPU Capacity:
diff --git a/yogstation/code/modules/jobs/job_types/network_admin.dm b/yogstation/code/modules/jobs/job_types/network_admin.dm
index fb10da074bfb..bd8f3810dc82 100644
--- a/yogstation/code/modules/jobs/job_types/network_admin.dm
+++ b/yogstation/code/modules/jobs/job_types/network_admin.dm
@@ -34,6 +34,7 @@
pda_type = /obj/item/modular_computer/tablet/pda/preset/basic
+ r_hand = /obj/item/modular_computer/laptop/preset/network_admin
belt = /obj/item/storage/belt/utility/full/engi
ears = /obj/item/radio/headset/headset_network
uniform = /obj/item/clothing/under/yogs/rank/network_admin
@@ -41,7 +42,6 @@
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/laptop/preset/network_admin=1)
backpack = /obj/item/storage/backpack/industrial
satchel = /obj/item/storage/backpack/satchel/eng
From 41650ab0fe31fcdda2b3bff67b0f46f21ba0086a Mon Sep 17 00:00:00 2001
From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com>
Date: Sat, 17 Sep 2022 19:40:11 +0200
Subject: [PATCH 068/112] Minor changes
---
code/__DEFINES/ai.dm | 9 +++------
code/modules/mob/living/silicon/ai/ai.dm | 15 ++++++++++++---
.../living/silicon/ai/ai_network/ai_network.dm | 5 ++---
.../silicon/ai/ai_network/networking_machines.dm | 3 +--
.../ai/decentralized/management/ai_dashboard.dm | 4 ++++
.../modules/research/designs/autolathe_designs.dm | 10 ++++++++++
6 files changed, 32 insertions(+), 14 deletions(-)
diff --git a/code/__DEFINES/ai.dm b/code/__DEFINES/ai.dm
index 11106b57a5ce..4059d1a800cd 100644
--- a/code/__DEFINES/ai.dm
+++ b/code/__DEFINES/ai.dm
@@ -55,12 +55,9 @@ GLOBAL_LIST_INIT(ai_project_categories, list(
//Self explanatory. 1 bitcoin is equals to 1 CPU * AI_RESEARCH_PER_CPU
//EXAMPLE (with initial values as of feature introduction)
-//20 free CPU. 10 are used for research, 10 are used for bitcoin
-//10 * AI_RESEARCH_PER_CPU = 85 bitcoin per tick. Modified for scaling 85*0.54=46
-//46 * AI_BITCOIN_PRICE = 2,3 credits per 2 seconds (2070 credits per 30 min)
-#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
+#define MAX_AI_BITCOIN_MINED_PER_TICK 250
+//Self explanatory, see MAX_AI_BITCOIN_MINED_PER_TICK * this = max money 1 network can contribute per tick. (17,5 credits every 2 seconds, max 63k over 2 hours)
+#define AI_BITCOIN_PRICE 0.025
//How much RAM and CPU a core needs locally to be functional
diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm
index 41eed9e98be6..c642e44adeaf 100644
--- a/code/modules/mob/living/silicon/ai/ai.dm
+++ b/code/modules/mob/living/silicon/ai/ai.dm
@@ -132,9 +132,6 @@
if(!target_ai) //If there is no player/brain inside.
return INITIALIZE_HINT_QDEL //Delete AI.
- if(!istype(loc, /obj/machinery/ai/data_core) && !shunted)
- relocate(TRUE, TRUE)
-
if(L && istype(L, /datum/ai_laws))
laws = L
laws.associate(src)
@@ -191,6 +188,9 @@
dashboard = new(src)
+ if(!istype(loc, /obj/machinery/ai/data_core) && !shunted)
+ relocate(TRUE, TRUE)
+
if(isvalidAIloc(loc))
add_verb(src, list(/mob/living/silicon/ai/proc/ai_network_change, \
/mob/living/silicon/ai/proc/ai_statuschange, /mob/living/silicon/ai/proc/ai_hologram_change, \
@@ -206,6 +206,8 @@
builtInCamera.network = list("ss13")
builtInCamera.built_in = src
+
+
/mob/living/silicon/ai/key_down(_key, client/user)
if(findtext(_key, "numpad")) //if it's a numpad number, we can convert it to just the number
_key = _key[7] //strings, lists, same thing really
@@ -565,6 +567,13 @@
return
if(C.downloading == src)
C.finish_download()
+ if(href_list["emergency_disconnect"])
+ if(alert("Are you sure you want to disconnect all remote networks and lock all networking devices? This means you'll be unable to switch cores unless they're physically connected!", "No", "Yes") != "Yes")
+ return
+ for(var/obj/machinery/ai/networking/N in ai_network.get_local_nodes_oftype())
+ N.disconnect()
+ N.locked = TRUE
+
if(href_list["go_to_machine"])
var/atom/target = locate(href_list["go_to_machine"])
if(!target)
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 c62728080194..79919e08094d 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
@@ -56,9 +56,8 @@
if(local_cpu_usage[AI_CRYPTO])
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
+ points = clamp(bitcoin_mined, 0, MAX_AI_BITCOIN_MINED_PER_TICK)
+ bitcoin_payout += points * AI_BITCOIN_PRICE
var/locally_used = 0
for(var/A in local_cpu_usage)
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 cd6b5ed89975..310ea41695d8 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
@@ -2,7 +2,7 @@ GLOBAL_LIST_EMPTY(ai_networking_machines)
/obj/machinery/ai/networking
name = "networking machine"
- desc = "A solar panel. Generates electricity when in contact with sunlight."
+ desc = "A high powered combined transmitter and receiver. Capable of connecting remote AI networks with near-zero delay."
icon = 'goon/icons/obj/power.dmi'
icon_state = "sp_base"
density = TRUE
@@ -69,7 +69,6 @@ GLOBAL_LIST_EMPTY(ai_networking_machines)
/obj/machinery/ai/networking/proc/disconnect()
if(partner)
var/datum/ai_network/AN = partner.network
-
partner.partner = null
partner = null
AN.rebuild_remote()
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 e4ca7802d91d..d6a9c58b3d80 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
@@ -319,6 +319,10 @@
var/remaining_cpu = 1
for(var/I in cpu_usage)
remaining_cpu -= cpu_usage[I]
+
+ if(remaining_cpu > 0)
+ var/points = max(round(AI_RESEARCH_PER_CPU * (remaining_cpu * current_cpu)), 0)
+ 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])
diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm
index eb0ab590642a..752ed3e08457 100644
--- a/code/modules/research/designs/autolathe_designs.dm
+++ b/code/modules/research/designs/autolathe_designs.dm
@@ -169,6 +169,16 @@
maxstack = MAXCOIL
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
+/datum/design/cable_coil
+ name = "Ethernet Coil"
+ id = "ethernet_coil"
+ build_type = AUTOLATHE
+ materials = list(/datum/material/iron = 10, /datum/material/glass = 5)
+ build_path = /obj/item/stack/ethernet_coil
+ category = list("initial","Tools","Tool Designs")
+ maxstack = MAXCOIL
+ departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
+
/datum/design/toolbox
name = "Toolbox"
id = "tool_box"
From a75ae36141df6c449f02e28eb21fffc9cdcd8820 Mon Sep 17 00:00:00 2001
From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com>
Date: Sat, 17 Sep 2022 19:43:23 +0200
Subject: [PATCH 069/112] map change
---
_maps/map_files/YogStation/YogStation.dmm | 211 +++++++++-------------
1 file changed, 89 insertions(+), 122 deletions(-)
diff --git a/_maps/map_files/YogStation/YogStation.dmm b/_maps/map_files/YogStation/YogStation.dmm
index 53dc0e83aa69..1d0ceea8e03f 100644
--- a/_maps/map_files/YogStation/YogStation.dmm
+++ b/_maps/map_files/YogStation/YogStation.dmm
@@ -23172,6 +23172,21 @@
/obj/effect/turf_decal/trimline/green/filled/warning,
/turf/open/floor/plasteel,
/area/hydroponics/garden)
+"eRT" = (
+/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)
"eSM" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{
dir = 4
@@ -23628,17 +23643,6 @@
},
/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{
@@ -24691,6 +24695,18 @@
},
/turf/open/floor/plasteel,
/area/quartermaster/office)
+"fAA" = (
+/obj/effect/turf_decal/stripes/end{
+ dir = 8
+ },
+/obj/machinery/light/small{
+ dir = 8
+ },
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{
+ dir = 4
+ },
+/turf/open/floor/plasteel/dark,
+/area/ai_monitored/secondarydatacore)
"fAG" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -25221,31 +25237,6 @@
},
/turf/open/floor/plasteel,
/area/quartermaster/office)
-"fKM" = (
-/obj/machinery/door/airlock/command/glass{
- id_tag = "secondary_aicore_interior";
- name = "Physical Core Access";
- req_one_access_txt = "30, 70"
- },
-/obj/machinery/door/firedoor/border_only{
- dir = 8
- },
-/obj/machinery/door/firedoor/border_only{
- dir = 4
- },
-/obj/effect/mapping_helpers/airlock/cyclelink_helper_target{
- dirx = -1;
- diry = -1
- },
-/obj/effect/mapping_helpers/airlock/locked,
-/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/ai_monitored/secondarydatacore)
"fKR" = (
/obj/effect/landmark/start/cook,
/turf/template_noop,
@@ -34351,29 +34342,6 @@
/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
@@ -40188,6 +40156,18 @@
},
/turf/open/floor/carpet/blue,
/area/crew_quarters/heads/captain)
+"mtd" = (
+/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
+ },
+/obj/item/clothing/shoes/magboots,
+/turf/open/floor/plasteel/dark,
+/area/ai_monitored/secondarydatacore)
"mtk" = (
/obj/machinery/door/airlock/public/glass{
name = "Chapel"
@@ -40395,26 +40375,6 @@
/obj/structure/table/reinforced,
/turf/open/floor/plasteel/dark,
/area/science/xenobiology)
-"mwf" = (
-/obj/effect/turf_decal/stripes/end{
- dir = 8
- },
-/obj/machinery/doorButtons/access_button{
- idDoor = "secondary_aicore_exterior";
- idSelf = "secondary_aicore_controller";
- name = "Secondary AI Core Access Button";
- pixel_x = -23;
- pixel_y = -9;
- req_one_access_txt = "30;70"
- },
-/obj/machinery/light/small{
- dir = 8
- },
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{
- dir = 4
- },
-/turf/open/floor/plasteel/dark,
-/area/ai_monitored/secondarydatacore)
"mwF" = (
/turf/open/floor/plasteel/white,
/area/medical/chemistry)
@@ -41333,26 +41293,6 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
-"mQY" = (
-/obj/effect/turf_decal/stripes/end{
- dir = 4
- },
-/obj/machinery/doorButtons/access_button{
- idDoor = "secondary_aicore_interior";
- idSelf = "secondary_aicore_controller";
- name = "Secondary AI Core Access Button";
- pixel_x = 8;
- pixel_y = 24;
- req_one_access_txt = "30;70"
- },
-/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{
- dir = 4
- },
-/turf/open/floor/plasteel/dark,
-/area/ai_monitored/secondarydatacore)
"mRp" = (
/obj/effect/landmark/start/security_officer,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{
@@ -42478,23 +42418,6 @@
/obj/effect/turf_decal/trimline/yellow/filled/warning,
/turf/open/floor/plasteel,
/area/hallway/primary/central)
-"nlV" = (
-/obj/machinery/door/airlock/command/glass{
- id_tag = "secondary_aicore_exterior";
- name = "Physical Core Access";
- req_one_access_txt = "30;70"
- },
-/obj/machinery/door/firedoor/border_only{
- dir = 1
- },
-/obj/machinery/door/firedoor/border_only,
-/obj/effect/mapping_helpers/airlock/cyclelink_helper_target{
- dirx = 1;
- diry = 1
- },
-/obj/effect/mapping_helpers/airlock/locked,
-/turf/open/floor/plasteel/dark,
-/area/ai_monitored/secondarydatacore)
"nlW" = (
/obj/effect/turf_decal/trimline/purple/filled/warning,
/turf/open/floor/plasteel,
@@ -57080,6 +57003,18 @@
/obj/effect/turf_decal/trimline/blue/filled/warning,
/turf/open/floor/plasteel,
/area/hallway/primary/starboard)
+"tFB" = (
+/obj/effect/turf_decal/stripes/end{
+ dir = 4
+ },
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{
+ dir = 4
+ },
+/turf/open/floor/plasteel/dark,
+/area/ai_monitored/secondarydatacore)
"tFM" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{
dir = 8
@@ -58608,6 +58543,18 @@
},
/turf/open/floor/plasteel/white,
/area/science/lab)
+"ulo" = (
+/obj/machinery/door/airlock/command/glass{
+ id_tag = "secondary_aicore_exterior";
+ name = "Physical Core Access";
+ req_one_access_txt = "30;70"
+ },
+/obj/machinery/door/firedoor/border_only{
+ dir = 1
+ },
+/obj/machinery/door/firedoor/border_only,
+/turf/open/floor/plasteel/dark,
+/area/ai_monitored/secondarydatacore)
"ulL" = (
/turf/open/floor/plasteel/white,
/area/medical/medbay/aft)
@@ -61063,6 +61010,26 @@
},
/turf/open/floor/plasteel,
/area/security/checkpoint/medical)
+"vsx" = (
+/obj/machinery/door/airlock/command/glass{
+ id_tag = "secondary_aicore_interior";
+ name = "Physical Core Access";
+ req_one_access_txt = "30, 70"
+ },
+/obj/machinery/door/firedoor/border_only{
+ dir = 8
+ },
+/obj/machinery/door/firedoor/border_only{
+ dir = 4
+ },
+/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/ai_monitored/secondarydatacore)
"vsP" = (
/obj/effect/turf_decal/stripes/corner{
dir = 8
@@ -117395,7 +117362,7 @@ qot
gFN
iKk
oGM
-mwf
+fAA
oxg
tsx
pPm
@@ -117652,8 +117619,8 @@ xtJ
gFN
rnA
oGM
-mQY
-nlV
+tFB
+ulo
lTx
lTx
cde
@@ -117909,7 +117876,7 @@ dqh
qoK
eEp
oGM
-fKM
+vsx
oGM
oxg
oxg
@@ -118167,7 +118134,7 @@ xix
uVI
lpZ
rzU
-jJv
+eRT
gcd
oxg
cde
@@ -119708,7 +119675,7 @@ mEQ
cNW
cOe
oGM
-fcx
+mtd
rKn
trH
oxg
From 37fd72267821b784a9b9b6ef582db186507bc99c Mon Sep 17 00:00:00 2001
From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com>
Date: Wed, 21 Sep 2022 14:49:44 +0200
Subject: [PATCH 070/112] bunch of bugfixes
---
.../circuitboards/machine_circuitboards.dm | 11 ++
.../silicon/ai/ai_network/ai_network.dm | 2 +-
.../silicon/ai/ai_network/ethernet_cable.dm | 15 ++-
.../ai/ai_network/networking_machines.dm | 100 ++++++++++++++++--
.../silicon/ai/ai_network/shared_resources.dm | 2 +-
.../decentralized/management/ai_dashboard.dm | 4 +
.../ai/decentralized/server_cabinet.dm | 2 -
.../research/designs/autolathe_designs.dm | 2 +-
.../research/designs/computer_part_designs.dm | 10 ++
.../research/designs/machine_designs.dm | 8 ++
code/modules/research/techweb/all_nodes.dm | 4 +-
code/modules/vending/modularpc.dm | 3 +-
12 files changed, 138 insertions(+), 25 deletions(-)
diff --git a/code/game/objects/items/circuitboards/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machine_circuitboards.dm
index f6f713d97205..555f59889ba2 100644
--- a/code/game/objects/items/circuitboards/machine_circuitboards.dm
+++ b/code/game/objects/items/circuitboards/machine_circuitboards.dm
@@ -1005,6 +1005,17 @@
/obj/item/stock_parts/capacitor = 2,
/obj/item/stack/sheet/glass = 2,
/obj/item/stack/cable_coil = 1)
+
+/obj/item/circuitboard/machine/networking_machine
+ name = "Networking Machine (Machine Board)"
+ icon_state = "science"
+ build_path = /obj/machinery/ai/networking
+ req_components = list(
+ /obj/item/stock_parts/matter_bin = 4,
+ /obj/item/stock_parts/capacitor = 2,
+ /obj/item/stock_parts/scanning_module = 4,
+ /obj/item/stack/sheet/glass = 4,
+ /obj/item/stack/cable_coil = 1)
/obj/item/circuitboard/machine/ai_core_display
name = "AI Core Display (Machine Board)"
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 79919e08094d..bd587aba9282 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
@@ -56,7 +56,7 @@
if(local_cpu_usage[AI_CRYPTO])
var/points = max(round(AI_RESEARCH_PER_CPU * (local_cpu_usage[AI_CRYPTO] * total_cpu * resources_assigned)), 0)
- points = clamp(bitcoin_mined, 0, MAX_AI_BITCOIN_MINED_PER_TICK)
+ points = clamp(points, 0, MAX_AI_BITCOIN_MINED_PER_TICK)
bitcoin_payout += points * AI_BITCOIN_PRICE
var/locally_used = 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 6635c76c1ce5..ffd1aa2d56a7 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
@@ -106,15 +106,14 @@ By design, d1 is the smallest direction and d2 is the highest
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)
- */
+ else if(W.tool_behaviour == TOOL_MULTITOOL)
+ if(!network)
+ return
+ to_chat(user, span_danger("Connected CPU: [network.resources.total_cpu()]THz\nConnected RAM: [network.resources.total_ram()]TB\nHosted AIs: [network.ai_list.len]\nNetwork Count: [network.resources.networks.len]"))
+
+
+
else if(istype(W, /obj/item/modular_computer))
var/obj/item/modular_computer/MC = W
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 310ea41695d8..277261f07612 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
@@ -2,7 +2,7 @@ GLOBAL_LIST_EMPTY(ai_networking_machines)
/obj/machinery/ai/networking
name = "networking machine"
- desc = "A high powered combined transmitter and receiver. Capable of connecting remote AI networks with near-zero delay."
+ desc = "A high powered combined transmitter and receiver. Capable of connecting remote AI networks with near-zero delay. It is possible to manually connect other machines using a multitool."
icon = 'goon/icons/obj/power.dmi'
icon_state = "sp_base"
density = TRUE
@@ -10,7 +10,8 @@ GLOBAL_LIST_EMPTY(ai_networking_machines)
idle_power_usage = 0
active_power_usage = 0
max_integrity = 150
- integrity_failure = 0.33
+
+ circuit = /obj/item/circuitboard/machine/networking_machine
var/label
//For mapping, will connect to machine with this label if found
@@ -20,11 +21,14 @@ GLOBAL_LIST_EMPTY(ai_networking_machines)
var/mutable_appearance/paneloverlay
var/obj/machinery/ai/networking/partner
- var/rotation_to_partner
+ var/rotation_to_partner = 0
var/locked = FALSE
+ var//obj/machinery/ai/networking/remote_connection_attempt
var/mob/remote_control
+
+
/obj/machinery/ai/networking/Initialize(mapload)
. = ..()
if(!label)
@@ -33,12 +37,85 @@ GLOBAL_LIST_EMPTY(ai_networking_machines)
panelstructure = mutable_appearance(icon, "solar_panel", FLY_LAYER)
paneloverlay = mutable_appearance(icon, "solar_panel-o", FLY_LAYER)
paneloverlay.color = "#599ffa"
- update_icon(TRUE)
+ update_icon()
/obj/machinery/ai/networking/Destroy(mapload)
GLOB.ai_networking_machines -= src
disconnect()
. = ..()
+
+/obj/machinery/ai/networking/attackby(obj/item/W, mob/living/user, params)
+ if(W.tool_behaviour == TOOL_MULTITOOL)
+ if(partner)
+ to_chat(user, span_warning("This machine is already connected to a different machine! Disconnect it using the controls or a wirecutter first!"))
+ return TRUE
+ remote_connection_attempt = null
+ var/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.partner)
+ continue
+ targets[N.label] = N
+ var/attempt_connect = input(user, "Select the machine you wish to attempt connecting to.") as null|anything in targets
+ if(!attempt_conncet)
+ return TRUE
+ var/obj/machinery/ai/networking/remote_target = locate(targets[attempt_connect]) in GLOB.ai_networking_machines
+ if(!remote_target)
+ return TRUE
+ remote_connection_attempt = remote_target
+ to_chat(user, span_notice("The machine is ready to establish connection. You must now rotate it so it faces the other machine! Rotation is done using a wrench, and the connection can then be finalized with a screwdriver when aligned."))
+ return TRUE
+
+ if(W.tool_behaviour == TOOL_WRENCH)
+ if(partner)
+ to_chat(user, span_warning("This machine is already connected to a different machine!"))
+ return TRUE
+ var/new_rotation = input(user, "Set rotation (0-360): ") as null|num
+ if(isnull(new_rotation))
+ rotation_to_partner = 0
+ else
+ new_rotation = clamp(new_rotation, 0, 360)
+ rotation_to_partner = new_rotation
+
+ update_icon()
+ return TRUE
+
+ if(W.tool_behaviour == TOOL_SCREWDRIVER)
+ if(partner)
+ to_chat(user, span_warning("This machine is already connected to a different machine!"))
+ return TRUE
+ if(!remote_connection_attempt)
+ to_chat(user, span_warning("You need to initialize a manual override using a wrench to connect to something!"))
+ return TRUE
+ var/actual_angle = Get_Angle(src, remote_connection_attempt)
+ if(rotation_to_partner < actual_angle + 20 && rotation_to_partner > actual_angle - 20)
+ connect_to_partner(remote_connection_attempt)
+ to_chat(user, span_notice("You successfully connect to [remote_connection_attempt.label]!"))
+ return TRUE
+ to_chat(user, span_warning("Unable to establish connection!"))
+ return TRUE
+
+
+ if(W.tool_behaviour == TOOL_WIRECUTTER)
+ if(partner)
+ to_chat(user, span_notice("You disconnect the remote connection."))
+ disconnect()
+ return TRUE
+ to_chat(user, span_warning("The machien isn't connected!"))
+ return TRUE
+
+ if(W.tool_behaviour == TOOL_CROWBAR)
+ if(default_deconstruction_crowbar(W, TRUE))
+ return TRUE
+
+ if(default_deconstruction_screwdriver(user, "expansion_bus_o", "expansion_bus", W))
+ return TRUE
+
+ return ..()
+
/obj/machinery/ai/networking/proc/roundstart_connect(mapload)
for(var/obj/machinery/ai/networking/N in GLOB.ai_networking_machines)
if(partner)
@@ -55,10 +132,8 @@ GLOBAL_LIST_EMPTY(ai_networking_machines)
break
-/obj/machinery/ai/networking/update_icon(forced = FALSE)
+/obj/machinery/ai/networking/update_icon()
..()
- if(!rotation_to_partner && !forced)
- return
cut_overlays()
var/matrix/turner = matrix()
turner.Turn(rotation_to_partner)
@@ -69,18 +144,25 @@ GLOBAL_LIST_EMPTY(ai_networking_machines)
/obj/machinery/ai/networking/proc/disconnect()
if(partner)
var/datum/ai_network/AN = partner.network
+ partner.rotation_to_partner = 0
+ partner.update_icon()
partner.partner = null
partner = null
AN.rebuild_remote()
network.rebuild_remote()
+ rotation_to_partner = 0
+ update_icon()
+
-/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, forced = FALSE)
+ remote_connection_attempt = null
if(target.partner)
return
if(target == src)
return
-
+ if(target.locked && !forced)
+ return
partner = target
rotation_to_partner = Get_Angle(src, partner)
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 16dce073b5c4..6e4fb00a4770 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
@@ -6,7 +6,7 @@
var/list/cpu_assigned = list()
var/list/ram_assigned = list()
- var/networks = list()
+ var/list/networks = list()
var/previous_ram = 0
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 d6a9c58b3d80..f55a71615710 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
@@ -170,6 +170,10 @@
if(amount > 1 || amount < 0)
return
+ var/used_cpu = owner.ai_network.resources.total_cpu_assigned() - owner.ai_network.resources.cpu_assigned[owner]
+ if(amount > (1 - used_cpu))
+ amount = (1 - used_cpu)
+
owner.ai_network.resources.set_cpu(owner, amount)
. = TRUE
if("max_cpu_assign")
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..200093e91677 100644
--- a/code/modules/mob/living/silicon/ai/decentralized/server_cabinet.dm
+++ b/code/modules/mob/living/silicon/ai/decentralized/server_cabinet.dm
@@ -77,7 +77,6 @@ GLOBAL_LIST_EMPTY(server_cabinets)
env.set_temperature(env.return_temperature() + temperature_increase * AI_TEMPERATURE_MULTIPLIER) //assume all input power is dissipated
T.air_update_turf()
- valid_ticks++
if(!was_valid_holder)
update_icon()
was_valid_holder = TRUE
@@ -86,7 +85,6 @@ GLOBAL_LIST_EMPTY(server_cabinets)
network.update_resources()
hardware_synced = TRUE
else
- valid_ticks--
if(was_valid_holder)
if(valid_ticks > 0)
return
diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm
index 752ed3e08457..2df460805cd0 100644
--- a/code/modules/research/designs/autolathe_designs.dm
+++ b/code/modules/research/designs/autolathe_designs.dm
@@ -169,7 +169,7 @@
maxstack = MAXCOIL
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
-/datum/design/cable_coil
+/datum/design/ethernet_coil
name = "Ethernet Coil"
id = "ethernet_coil"
build_type = AUTOLATHE
diff --git a/code/modules/research/designs/computer_part_designs.dm b/code/modules/research/designs/computer_part_designs.dm
index 86121f56892f..0bda24620b6e 100644
--- a/code/modules/research/designs/computer_part_designs.dm
+++ b/code/modules/research/designs/computer_part_designs.dm
@@ -261,3 +261,13 @@
build_path = /obj/item/computer_hardware/sensorpackage
category = list("Computer Parts")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
+
+// Intellicard slot
+/datum/design/network_interface
+ name = "AI Network Interface"
+ id = "aiinterface"
+ build_type = PROTOLATHE
+ materials = list(/datum/material/iron = 600)
+ build_path = /obj/item/computer_hardware/ai_interface
+ category = list("Computer Parts")
+ departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
diff --git a/code/modules/research/designs/machine_designs.dm b/code/modules/research/designs/machine_designs.dm
index e25704ad2633..9ee57086e20b 100644
--- a/code/modules/research/designs/machine_designs.dm
+++ b/code/modules/research/designs/machine_designs.dm
@@ -707,6 +707,14 @@
category = list("Engineering Machinery")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
+/datum/design/board/networking_machine
+ name = "Machine Design (Networking Machine)"
+ desc = "The circuit board for a dual-purpose networking machine."
+ id = "networking_machine"
+ build_path = /obj/item/circuitboard/machine/networking_machine
+ category = list("Engineering Machinery")
+ departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
+
/datum/design/board/ai_data_core
name = "Machine Design (AI Data Core Board)"
desc = "The circuit board for an AI data core."
diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm
index a80a9cc308de..638a8568a12b 100644
--- a/code/modules/research/techweb/all_nodes.dm
+++ b/code/modules/research/techweb/all_nodes.dm
@@ -359,7 +359,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", "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", "networking_machine", "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)
/////////////////////////EMP tech/////////////////////////
@@ -414,7 +414,7 @@
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1000) //they are really shitty
design_ids = list("hdd_basic", "hdd_advanced", "hdd_super", "hdd_cluster", "ssd_small", "ssd_micro", "netcard_basic", "netcard_advanced", "netcard_wired",
"portadrive_basic", "portadrive_advanced", "portadrive_super", "cardslot", "secondcardslot", "aislot", "miniprinter", "APClink", "bat_control", "bat_normal", "bat_advanced",
- "bat_super", "bat_micro", "bat_nano", "cpu_normal", "pcpu_normal", "cpu_small", "pcpu_small", "sensorpackage")
+ "bat_super", "bat_micro", "bat_nano", "cpu_normal", "pcpu_normal", "cpu_small", "pcpu_small", "sensorpackage", "aiinterface")
/datum/techweb_node/computer_board_gaming
id = "computer_board_gaming"
diff --git a/code/modules/vending/modularpc.dm b/code/modules/vending/modularpc.dm
index b44b4ce5a651..c13e4a5af502 100644
--- a/code/modules/vending/modularpc.dm
+++ b/code/modules/vending/modularpc.dm
@@ -22,7 +22,8 @@
/obj/item/computer_hardware/card_slot/secondary = 2,
/obj/item/computer_hardware/ai_slot = 2,
/obj/item/computer_hardware/printer/mini = 2,
- /obj/item/computer_hardware/recharger/APC = 2)
+ /obj/item/computer_hardware/recharger/APC = 2,
+ /obj/item/computer_hardware/ai_interface = 2)
refill_canister = /obj/item/vending_refill/modularpc
default_price = 30
extra_price = 250
From 70d59b6f98af53ce073e6faf939482673a9c2503 Mon Sep 17 00:00:00 2001
From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com>
Date: Wed, 21 Sep 2022 14:50:45 +0200
Subject: [PATCH 071/112] outfit try number million
---
.../mob/living/silicon/ai/ai_network/networking_machines.dm | 2 +-
yogstation/code/modules/jobs/job_types/network_admin.dm | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
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 277261f07612..6fb7c085fa91 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
@@ -23,7 +23,7 @@ GLOBAL_LIST_EMPTY(ai_networking_machines)
var/obj/machinery/ai/networking/partner
var/rotation_to_partner = 0
var/locked = FALSE
- var//obj/machinery/ai/networking/remote_connection_attempt
+ var/obj/machinery/ai/networking/remote_connection_attempt
var/mob/remote_control
diff --git a/yogstation/code/modules/jobs/job_types/network_admin.dm b/yogstation/code/modules/jobs/job_types/network_admin.dm
index bd8f3810dc82..2926095cd00a 100644
--- a/yogstation/code/modules/jobs/job_types/network_admin.dm
+++ b/yogstation/code/modules/jobs/job_types/network_admin.dm
@@ -34,7 +34,7 @@
pda_type = /obj/item/modular_computer/tablet/pda/preset/basic
- r_hand = /obj/item/modular_computer/laptop/preset/network_admin
+ l_hand = /obj/item/modular_computer/laptop/preset/network_admin
belt = /obj/item/storage/belt/utility/full/engi
ears = /obj/item/radio/headset/headset_network
uniform = /obj/item/clothing/under/yogs/rank/network_admin
From fc6961e0446f5a561030440e17c332962494964e Mon Sep 17 00:00:00 2001
From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com>
Date: Wed, 21 Sep 2022 14:52:50 +0200
Subject: [PATCH 072/112] icon
---
.../silicon/ai/ai_network/networking_machines.dm | 2 +-
.../ai/decentralized/systech/rack_creator.dm | 4 ++--
icons/obj/machines/lithography.dmi | Bin 0 -> 1432 bytes
3 files changed, 3 insertions(+), 3 deletions(-)
create mode 100644 icons/obj/machines/lithography.dmi
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 6fb7c085fa91..a17df8892a1d 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
@@ -60,7 +60,7 @@ GLOBAL_LIST_EMPTY(ai_networking_machines)
continue
targets[N.label] = N
var/attempt_connect = input(user, "Select the machine you wish to attempt connecting to.") as null|anything in targets
- if(!attempt_conncet)
+ if(!attempt_connect)
return TRUE
var/obj/machinery/ai/networking/remote_target = locate(targets[attempt_connect]) in GLOB.ai_networking_machines
if(!remote_target)
diff --git a/code/modules/mob/living/silicon/ai/decentralized/systech/rack_creator.dm b/code/modules/mob/living/silicon/ai/decentralized/systech/rack_creator.dm
index c4709cbb6291..f339f7f3dc42 100644
--- a/code/modules/mob/living/silicon/ai/decentralized/systech/rack_creator.dm
+++ b/code/modules/mob/living/silicon/ai/decentralized/systech/rack_creator.dm
@@ -1,8 +1,8 @@
/obj/machinery/rack_creator
name = "rack creator"
desc = "Combines RAM modules and CPUs to create a stand-alone rack for usage in artificial intelligence systems."
- icon = 'icons/obj/machines/research.dmi'
- icon_state = "circuit_imprinter"
+ icon = 'icons/obj/machines/lithography.dmi'
+ icon_state = "lithography"
layer = BELOW_OBJ_LAYER
density = TRUE
diff --git a/icons/obj/machines/lithography.dmi b/icons/obj/machines/lithography.dmi
new file mode 100644
index 0000000000000000000000000000000000000000..bdc433b0cb989dd0f508c3a822ca7f3efc10ad2a
GIT binary patch
literal 1432
zcmV;J1!ww+P)V=-0C=2JR&a84_w-Y6@%7{?OD!tS%+FJ>RWQ*r;NmRLOex6#a*U0*I5Sc+
z(=$pSoZ^zil2jm5DJQceBR{<;u^^*TiHkEOv#1y-YRJWzR+N~V3SnbY8=sF$wX%Y%
zp9|P20K;c0&9^#c3IG5E-bqA3RCt`lS#N9n93|+FGjDedknmzti>&gDlPB7sd`XpSy_>&}
zYRe@4ln;6X`TfF>$ycph0at$>^Fyrc%L%%Hs`y*>H-lwOYx^?IGH7f65R%EeMkG?~
zo4-g!&PYEw{;B5yfJblH90qd9Mo{s;^X_{Y4jFy@7fHtI9)s)GuR%q{(m?!0Iz
zwPOata)f=KQW-(TZ&?<+)YRw+M2-pt`QIhfy=BG%;`Y%DurJZ^B
zSYUo(4?quu4U7=WWvJ__%>+S2VVIC{`h!D
zM%pQArhMr`?Qrea{dAv9CLQ~lFMcw>)YNU;Dt`)Lg6Qr(1C5PaTy^POobEA0Tf|8o
zj9djdOy`TAQsMO*wxC5))zyy(g(D+Bf*&198BC9oc_3ZSxbSTvQ}6NGcwYD^0#xA`
z1oFUSI7L9d_&vP~cm;+cT6ymqZ6xuT2kPb$LHM<&z&HJ8NlxDQEvpQ58|pSG+u_^V
zmt6+QOHzjHCj#b+Uu%HH4=#g=@?m9J<;_QxdOTiU+Y_hzb2NTSy9>KvzW4%jD*Qf7fRpK<9J&
z1b(dnaFfCBZK^X@w*iHTu=&~KQ657j!UiJ`Qm1oUr@8Xu1fOj%q37@oIt}nMT7mtRJvdSdy|+#Q*hXml>NpH9TS@h`
zc>qt!O9Xc82ArsT@tB^Ta%>-jzsjB%dinFOE$Cf;A59*=8R7@k#Pbhl>UCGw!ks&_
z{M3`3hN2KsQ8|fVz@x@AO~LxI$H&L7LOi}zNKsKH5~m>=T}9;!7v5`3j9t#OkyGJZ
z`0F?I2w#umr+$LJ_F1IEW0L2m2vB(g36KmWf3Y$dDo?X}m5zBphg|s2o!v|m9eck4
z{=0ZTc^tngqfX|h2&i09gNhV-jR$(nt1bWx{vToalB&@7G0Nm6hsy&Ef!^o&DFWQQ
z;Sq+ycfO_RrRo}X^ge{_TV5ETaC^w-x77y)7Mv$@Dof=EY-
mFi!p$oC~k`L8$y*m*xKmPGkRnES<>!0000
Date: Wed, 21 Sep 2022 19:00:07 +0200
Subject: [PATCH 073/112] hobby
---
.../mob/living/silicon/ai/decentralized/ai_data_core.dm | 5 +++++
.../mob/living/silicon/ai/decentralized/server_cabinet.dm | 7 +++++++
2 files changed, 12 insertions(+)
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..0672489dc72b 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
@@ -75,6 +75,7 @@ GLOBAL_VAR_INIT(primary_data_core, null)
else
to_chat(AI, span_userdanger("Warning! Data Core brought offline in [get_area(src)]! Please verify that no malicious actions were taken."))
+ QDEL_NULL(particles)
..()
/obj/machinery/ai/data_core/attackby(obj/item/O, mob/user, params)
@@ -126,10 +127,14 @@ GLOBAL_VAR_INIT(primary_data_core, null)
valid_ticks++
if(valid_ticks == 1)
update_icon()
+ if(particles)
+ QDEL_NULL(particles)
use_power = ACTIVE_POWER_USE
warning_sent = FALSE
else
valid_ticks--
+ if(!particles)
+ particles = new /particles/smoke()
if(valid_ticks <= 0)
use_power = IDLE_POWER_USE
update_icon()
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 200093e91677..08658e4a219e 100644
--- a/code/modules/mob/living/silicon/ai/decentralized/server_cabinet.dm
+++ b/code/modules/mob/living/silicon/ai/decentralized/server_cabinet.dm
@@ -46,6 +46,7 @@ GLOBAL_LIST_EMPTY(server_cabinets)
/obj/machinery/ai/server_cabinet/Destroy()
installed_racks = list()
GLOB.server_cabinets -= src
+ QDEL_NULL(particles)
..()
/obj/machinery/ai/server_cabinet/RefreshParts()
@@ -77,17 +78,23 @@ GLOBAL_LIST_EMPTY(server_cabinets)
env.set_temperature(env.return_temperature() + temperature_increase * AI_TEMPERATURE_MULTIPLIER) //assume all input power is dissipated
T.air_update_turf()
+ valid_ticks++
if(!was_valid_holder)
+ QDEL_NULL(particles)
update_icon()
was_valid_holder = TRUE
+
+
if(!hardware_synced && network)
network.update_resources()
hardware_synced = TRUE
else
+ valid_ticks--
if(was_valid_holder)
if(valid_ticks > 0)
return
+ particles = new /particles/smoke()
was_valid_holder = FALSE
update_icon()
hardware_synced = FALSE
From 7b9ac96ecc1b78971af9f0ad74f91d7e3b7f60d4 Mon Sep 17 00:00:00 2001
From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com>
Date: Thu, 22 Sep 2022 21:40:27 +0200
Subject: [PATCH 074/112] smoke works
---
code/__DEFINES/ai.dm | 2 +-
.../silicon/ai/decentralized/_ai_machinery.dm | 18 ++++++++++++++++++
.../silicon/ai/decentralized/ai_data_core.dm | 17 +++++++++++------
.../silicon/ai/decentralized/server_cabinet.dm | 18 +++++++++++++++---
4 files changed, 45 insertions(+), 10 deletions(-)
diff --git a/code/__DEFINES/ai.dm b/code/__DEFINES/ai.dm
index 4059d1a800cd..f19a60f1e5e9 100644
--- a/code/__DEFINES/ai.dm
+++ b/code/__DEFINES/ai.dm
@@ -6,7 +6,7 @@
///How many ticks can an AI data core store? When this amount of ticks have passed while it's in an INVALID state it can no longer be used by an AI
-#define MAX_AI_DATA_CORE_TICKS 45
+#define MAX_AI_DATA_CORE_TICKS (45 * 4)
///How much power does the AI date core use while being in a valid state. This is also the base heat output. (Divide by heat capacity to get actual temperature increase)
#define AI_DATA_CORE_POWER_USAGE 7500
///How many ticks can an expanion bus store. If it reaches 0 the resources will no longer be available.
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..1ef6601d144b 100644
--- a/code/modules/mob/living/silicon/ai/decentralized/_ai_machinery.dm
+++ b/code/modules/mob/living/silicon/ai/decentralized/_ai_machinery.dm
@@ -90,3 +90,21 @@
coil.place_turf(T, user)
else
return ..()
+
+/obj/ai_smoke
+ name = "smoke"
+ desc = "Very hot!"
+
+/obj/ai_smoke/Initialize()
+ . = ..()
+ particles = new /particles/smoke/ai()
+
+/obj/ai_smoke/Destroy(force)
+ QDEL_NULL(particles)
+ . = ..()
+
+/particles/smoke/ai
+ grow = 0.1
+ height = 75
+ lifespan = 1.25 SECONDS
+ position = list(0, 0, 0)
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 0672489dc72b..14c05982512d 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
@@ -28,6 +28,8 @@ GLOBAL_VAR_INIT(primary_data_core, null)
//Power modifier, power modified by this. Be aware this indirectly changes heat since power => heat
var/power_modifier = 1
+ var/obj/ai_smoke/smoke
+
/obj/machinery/ai/data_core/Initialize()
. = ..()
@@ -74,8 +76,9 @@ GLOBAL_VAR_INIT(primary_data_core, null)
to_chat(AI.deployed_shell, span_userdanger("Warning! Data Core brought offline in [get_area(src)]! Please verify that no malicious actions were taken."))
else
to_chat(AI, span_userdanger("Warning! Data Core brought offline in [get_area(src)]! Please verify that no malicious actions were taken."))
-
- QDEL_NULL(particles)
+
+ vis_contents -= smoke
+ QDEL_NULL(smoke)
..()
/obj/machinery/ai/data_core/attackby(obj/item/O, mob/user, params)
@@ -127,14 +130,16 @@ GLOBAL_VAR_INIT(primary_data_core, null)
valid_ticks++
if(valid_ticks == 1)
update_icon()
- if(particles)
- QDEL_NULL(particles)
+ if(smoke)
+ vis_contents -= smoke
+ QDEL_NULL(smoke)
use_power = ACTIVE_POWER_USE
warning_sent = FALSE
else
valid_ticks--
- if(!particles)
- particles = new /particles/smoke()
+ if(!smoke)
+ smoke = new()
+ vis_contents += smoke
if(valid_ticks <= 0)
use_power = IDLE_POWER_USE
update_icon()
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 08658e4a219e..805ca6c20b06 100644
--- a/code/modules/mob/living/silicon/ai/decentralized/server_cabinet.dm
+++ b/code/modules/mob/living/silicon/ai/decentralized/server_cabinet.dm
@@ -5,6 +5,8 @@ GLOBAL_LIST_EMPTY(server_cabinets)
desc = "A simple cabinet of bPCIe slots for installing server racks."
icon = 'icons/obj/machines/telecomms.dmi'
icon_state = "expansion_bus"
+
+ appearance_flags = KEEP_TOGETHER
circuit = /obj/item/circuitboard/machine/server_cabinet
@@ -33,6 +35,10 @@ GLOBAL_LIST_EMPTY(server_cabinets)
///Power modifier, power modified by this. Be aware this indirectly changes heat since power => heat
var/power_modifier = 1
+ var/obj/ai_smoke/smoke
+
+
+
/obj/machinery/ai/server_cabinet/Initialize(mapload)
..()
@@ -46,7 +52,8 @@ GLOBAL_LIST_EMPTY(server_cabinets)
/obj/machinery/ai/server_cabinet/Destroy()
installed_racks = list()
GLOB.server_cabinets -= src
- QDEL_NULL(particles)
+ vis_contents -= smoke
+ QDEL_NULL(smoke)
..()
/obj/machinery/ai/server_cabinet/RefreshParts()
@@ -79,8 +86,10 @@ GLOBAL_LIST_EMPTY(server_cabinets)
T.air_update_turf()
valid_ticks++
+ if(smoke)
+ vis_contents -= smoke
+ QDEL_NULL(smoke)
if(!was_valid_holder)
- QDEL_NULL(particles)
update_icon()
was_valid_holder = TRUE
@@ -91,10 +100,13 @@ GLOBAL_LIST_EMPTY(server_cabinets)
hardware_synced = TRUE
else
valid_ticks--
+ if(!smoke)
+ smoke = new()
+ vis_contents += smoke
if(was_valid_holder)
if(valid_ticks > 0)
return
- particles = new /particles/smoke()
+
was_valid_holder = FALSE
update_icon()
hardware_synced = FALSE
From 73c5e2980bead5929b19e4d767f02eb1fa270243 Mon Sep 17 00:00:00 2001
From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com>
Date: Thu, 22 Sep 2022 21:43:21 +0200
Subject: [PATCH 075/112] fix door
---
_maps/map_files/YogStation/YogStation.dmm | 42 +++++++++++------------
1 file changed, 21 insertions(+), 21 deletions(-)
diff --git a/_maps/map_files/YogStation/YogStation.dmm b/_maps/map_files/YogStation/YogStation.dmm
index 1d0ceea8e03f..1548897ecf93 100644
--- a/_maps/map_files/YogStation/YogStation.dmm
+++ b/_maps/map_files/YogStation/YogStation.dmm
@@ -41222,6 +41222,26 @@
/obj/effect/turf_decal/trimline/red/filled/line,
/turf/open/floor/plasteel,
/area/security/checkpoint/medical)
+"mOk" = (
+/obj/machinery/door/airlock/command/glass{
+ id_tag = "secondary_aicore_interior";
+ name = "Physical Core Access";
+ req_one_access_txt = "30;70"
+ },
+/obj/machinery/door/firedoor/border_only{
+ dir = 8
+ },
+/obj/machinery/door/firedoor/border_only{
+ dir = 4
+ },
+/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/ai_monitored/secondarydatacore)
"mOm" = (
/obj/effect/landmark/start/shaft_miner,
/turf/open/floor/plasteel,
@@ -61010,26 +61030,6 @@
},
/turf/open/floor/plasteel,
/area/security/checkpoint/medical)
-"vsx" = (
-/obj/machinery/door/airlock/command/glass{
- id_tag = "secondary_aicore_interior";
- name = "Physical Core Access";
- req_one_access_txt = "30, 70"
- },
-/obj/machinery/door/firedoor/border_only{
- dir = 8
- },
-/obj/machinery/door/firedoor/border_only{
- dir = 4
- },
-/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/ai_monitored/secondarydatacore)
"vsP" = (
/obj/effect/turf_decal/stripes/corner{
dir = 8
@@ -117876,7 +117876,7 @@ dqh
qoK
eEp
oGM
-vsx
+mOk
oGM
oxg
oxg
From e512fd14fadd54af660880b1572c0659d7c27a07 Mon Sep 17 00:00:00 2001
From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com>
Date: Tue, 27 Sep 2022 13:37:20 +0200
Subject: [PATCH 076/112] small bugfixes
---
.../living/silicon/ai/decentralized/management/ai_dashboard.dm | 2 +-
.../file_system/programs/ainetworkinterface.dm | 3 +++
2 files changed, 4 insertions(+), 1 deletion(-)
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 f55a71615710..bdf3889d1a49 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
@@ -295,7 +295,7 @@
//Stuff is handled in here per tick :)
/datum/ai_dashboard/proc/tick(seconds)
- 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_cpu = owner.ai_network.resources.cpu_assigned[owner] ? owner.ai_network.resources.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/modular_computers/file_system/programs/ainetworkinterface.dm b/code/modules/modular_computers/file_system/programs/ainetworkinterface.dm
index 777e7332118b..4e50fe0d7b23 100644
--- a/code/modules/modular_computers/file_system/programs/ainetworkinterface.dm
+++ b/code/modules/modular_computers/file_system/programs/ainetworkinterface.dm
@@ -59,6 +59,9 @@
if(!downloading.can_download)
stop_download()
return
+ if(downloading.ai_network.resources != get_ainet().resources) //If we don't share resources we aren't connected, more performant way of checking than get_all_ais()
+ stop_download()
+ return
download_progress += AI_DOWNLOAD_PER_PROCESS * downloading.downloadSpeedModifier
From 9f32376383dd92b298c446a0b1d686282f772c21 Mon Sep 17 00:00:00 2001
From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com>
Date: Tue, 27 Sep 2022 13:42:22 +0200
Subject: [PATCH 077/112] borgs
---
code/modules/mob/living/silicon/robot/robot_modules.dm | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm
index 7403b10f8422..49baf6c199a4 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules.dm
@@ -115,6 +115,10 @@
S.cost = 1
S.source = get_or_create_estorage(/datum/robot_energy_storage/wire)
+ else if(istype(S, /obj/item/stack/ethernet_coil))
+ S.cost = 1
+ S.source = get_or_create_estorage(/datum/robot_energy_storage/ethernet)
+
else if(istype(S, /obj/item/stack/marker_beacon))
S.cost = 1
S.source = get_or_create_estorage(/datum/robot_energy_storage/beacon)
@@ -735,6 +739,11 @@
recharge_rate = 2
name = "Wire Synthesizer"
+/datum/robot_energy_storage/ethernet
+ max_energy = 50
+ recharge_rate = 2
+ name = "Ethernet Cable Synthesizer"
+
/datum/robot_energy_storage/medical
max_energy = 2500
recharge_rate = 250
From 2a3d39c3de1d970f40ead6f618be5d2e2c2a3017 Mon Sep 17 00:00:00 2001
From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com>
Date: Tue, 27 Sep 2022 13:50:59 +0200
Subject: [PATCH 078/112] null checks
---
code/modules/mob/living/silicon/ai/ai.dm | 2 +-
.../modules/mob/living/silicon/ai/decentralized/ai_data_core.dm | 2 +-
.../living/silicon/ai/decentralized/management/ai_dashboard.dm | 2 ++
3 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm
index c642e44adeaf..dbc670639271 100644
--- a/code/modules/mob/living/silicon/ai/ai.dm
+++ b/code/modules/mob/living/silicon/ai/ai.dm
@@ -235,7 +235,7 @@
qdel(eyeobj) // No AI, no Eye
malfhack = null
apc_override = null
- ai_network.remove_ai(src)
+ ai_network?.remove_ai(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 14c05982512d..4f9fa188ec75 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
@@ -72,7 +72,7 @@ GLOBAL_VAR_INIT(primary_data_core, null)
for(var/mob/living/silicon/ai/AI in all_ais)
if(AI.is_dying)
continue
- if(!AI.mind && AI.deployed_shell.mind)
+ if(!AI.mind && AI.deployed_shell && AI.deployed_shell.mind)
to_chat(AI.deployed_shell, span_userdanger("Warning! Data Core brought offline in [get_area(src)]! Please verify that no malicious actions were taken."))
else
to_chat(AI, span_userdanger("Warning! Data Core brought offline in [get_area(src)]! Please verify that no malicious actions were taken."))
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 bdf3889d1a49..3db0c1ebea01 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
@@ -295,6 +295,8 @@
//Stuff is handled in here per tick :)
/datum/ai_dashboard/proc/tick(seconds)
+ if(!owner.ai_network) //Irrelevant with no AI network (we're in an APC)
+ return
var/current_cpu = owner.ai_network.resources.cpu_assigned[owner] ? owner.ai_network.resources.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
From 69c1d11519bd53ebd230383ddf200427adf27cb6 Mon Sep 17 00:00:00 2001
From: adamsong
Date: Tue, 27 Sep 2022 16:28:20 -0400
Subject: [PATCH 079/112] Update
yogstation/code/modules/jobs/job_types/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 2926095cd00a..b1c6433719ce 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, ACCESS_TOX)
+ 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, ACCESS_TOX)
paycheck = PAYCHECK_MEDIUM
paycheck_department = ACCOUNT_ENG
display_order = JOB_DISPLAY_ORDER_NETWORK_ADMIN
From bf36df436262842dedbf313638e0bb6fb553542c Mon Sep 17 00:00:00 2001
From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com>
Date: Tue, 27 Sep 2022 22:52:03 +0200
Subject: [PATCH 080/112] Revert "Update
yogstation/code/modules/jobs/job_types/network_admin.dm"
This reverts commit 69c1d11519bd53ebd230383ddf200427adf27cb6.
---
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 b1c6433719ce..2926095cd00a 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, ACCESS_TOX)
+ 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 5ce8ca7738790564d1e890b934ccde19b4ccc7d8 Mon Sep 17 00:00:00 2001
From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com>
Date: Mon, 31 Oct 2022 15:12:23 +0100
Subject: [PATCH 081/112] lots of changes
---
code/__HELPERS/unsorted.dm | 74 +++++
code/game/machinery/computer/security.dm | 56 +---
.../silicon/ai/ai_network/shared_resources.dm | 45 ++-
.../silicon/ai/decentralized/_ai_machinery.dm | 1 +
.../decentralized/management/ai_dashboard.dm | 13 +
.../programs/ainetworkinterface.dm | 31 +-
tgui/packages/tgui/interfaces/AiDashboard.js | 304 ++++++++++--------
tgui/packages/tgui/interfaces/LoginScreen.js | 57 ++++
.../packages/tgui/interfaces/NtosAIMonitor.js | 38 ++-
.../tgui/interfaces/SecurityConsole.js | 48 +--
10 files changed, 420 insertions(+), 247 deletions(-)
create mode 100644 tgui/packages/tgui/interfaces/LoginScreen.js
diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm
index 1fef6469022b..c44890abc8ea 100644
--- a/code/__HELPERS/unsorted.dm
+++ b/code/__HELPERS/unsorted.dm
@@ -1652,3 +1652,77 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new)
return call(source, proctype)(arglist(arguments))
#define TURF_FROM_COORDS_LIST(List) (locate(List[1], List[2], List[3]))
+
+
+/proc/tgui_login_data(mob/user, obj/machine, silicon_access = TRUE, admin_ghost_access = TRUE, access_requirement)
+ var/list/data = list()
+ if(!user || (!machine && !access_requirement))
+ return data
+
+ if(issilicon(user) && silicon_access)
+ var/mob/living/silicon/borg = user
+ data["username"] = borg.name
+ data["has_access"] = TRUE
+
+ if(IsAdminGhost(user) && admin_ghost_access)
+ data["username"] = user.client.holder.admin_signature
+ data["has_access"] = TRUE
+
+ if(ishuman(user))
+ var/mob/living/carbon/human/H = user
+ var/username = H.get_authentification_name("Unknown")
+ data["username"] = H.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")
+ if(machine)
+ data["has_access"] = machine.check_access(user.get_idcard())
+ else
+ var/obj/item/id_giver = user.get_idcard()
+ var/access_list = id_giver.GetAccess()
+ data["has_access"] = (access_requirement in access_list)
+
+ return data
+
+/proc/tgui_login_act(mob/user, obj/machine, silicon_access = TRUE, admin_ghost_access = TRUE, access_requirement)
+ if(!user || (!machine && !access_requirement))
+ return FALSE
+
+ if(issilicon(user) && silicon_access)
+ return TRUE
+
+ if(IsAdminGhost(user) && admin_ghost_access)
+ return TRUE
+
+ var/mob/living/carbon/human/H = user
+ if(!istype(H))
+ return FALSE
+
+ if(machine)
+ if(machine.check_access(H.get_idcard()))
+ return TRUE
+ else
+ var/obj/item/id_giver = H.get_idcard()
+ var/access_list = id_giver.GetAccess()
+ if(access_requirement in access_list)
+ return TRUE
+
+ return FALSE
diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm
index 9828ca2510cf..4da2d601c25e 100644
--- a/code/game/machinery/computer/security.dm
+++ b/code/game/machinery/computer/security.dm
@@ -52,43 +52,7 @@
data["logged_in"] = logged_in
- 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))
- 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())
-
-
+ data += tgui_login_data(user, src)
if(!logged_in)
return data
@@ -249,7 +213,6 @@
data["active_record"] = record
-
return data
/obj/machinery/computer/secure_data/ui_static_data(mob/user)
@@ -264,6 +227,8 @@
if(..())
return
+
+
switch(action)
if("back")
if(!logged_in)
@@ -277,6 +242,10 @@
active_security_record = null
screen = MAIN_SCREEN
+ logged_in = tgui_login_act(usr, src)
+ if(!logged_in)
+ return
+
if(issilicon(usr))
var/mob/living/silicon/borg = usr
logged_in = borg.name
@@ -286,17 +255,14 @@
if(IsAdminGhost(usr))
logged_in = usr.client.holder.admin_signature
rank = "Central Command Officer"
-
-
-
-
- var/mob/living/carbon/human/H = usr
- if(!istype(H))
return
- if(check_access(H.get_idcard()))
+ var/mob/living/carbon/human/H = usr
+ if(istype(H))
logged_in = H.get_authentification_name("Unknown")
rank = H.get_assignment("Unknown", "Unknown")
+ return
+
if("log_out")
if(!logged_in)
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 6e4fb00a4770..5e91bc2aa22a 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
@@ -1,18 +1,26 @@
/datum/ai_shared_resources
+ ///Where our RAM is coming from. Associative array where the network is the key
var/ram_sources = list()
+ ///Where our CPU is coming from. Associative array where the network is the key
var/cpu_sources = list()
-
+ ///Where our CPU is assigned to. Associative where either an AI or a network has values. Max total value = 1 (100%)
var/list/cpu_assigned = list()
+ ///Where our CPU is assigned to. Associative where either an AI or a network has values
var/list/ram_assigned = list()
+ ///List of all networks we are connected to
var/list/networks = list()
+ ///How much RAM we had before updating resources
var/previous_ram = 0
+ ///If resource allocation can only be changed physically at a console by a human
+ var/human_lock = FALSE
+
-/datum/ai_shared_resources/New(network_assigned_cpu, network_assigned_ram, datum/ai_network/split_network, datum/ai_network/starting_network)
+/datum/ai_shared_resources/New(network_assigned_cpu, network_assigned_ram, datum/ai_network/split_network, datum/ai_network/starting_network, _human_lock = FALSE)
if((network_assigned_ram || network_assigned_cpu) && split_network)
ram_assigned = network_assigned_ram
cpu_assigned = network_assigned_cpu
@@ -31,6 +39,8 @@
START_PROCESSING(SSobj, src)
+ human_lock = _human_lock
+
/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)
. = ..()
@@ -136,7 +146,7 @@
networks -= split_network
update_resources()
- new /datum/ai_shared_resources(network_cpu_assign, network_ram_assign, split_network)
+ new /datum/ai_shared_resources(network_cpu_assign, network_ram_assign, split_network, _human_lock = human_lock)
if(!length(networks))
qdel(src)
@@ -197,7 +207,7 @@
/datum/ai_shared_resources/proc/set_cpu(target, amount)
- if(!istype(target, /datum/ai_network) && !istype(target, /mob/living/silicon/ai))
+ if(!istype(target, /datum/ai_network) && !isAI(target))
stack_trace("Attempted to set_cpu with non-AI/network target! T: [target]")
return
@@ -211,24 +221,30 @@
/datum/ai_shared_resources/proc/add_ram(target, amount)
- if(!istype(target, /datum/ai_network) && !istype(target, /mob/living/silicon/ai))
+ if(!target || !amount)
+ return
+ if(!istype(target, /datum/ai_network) && !isAI(target))
stack_trace("Attempted to add_ram with non-AI/network target! T: [target]")
return
-
- if(!target || !amount)
+ if(isAI(target) && human_lock)
return
+
+
ram_assigned[target] += amount
update_allocations()
/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]")
+ if(!target || !amount)
return
- if(!target || !amount)
+ if(!istype(target, /datum/ai_network) && !isAI(target))
+ stack_trace("Attempted to remove_ram with non-AI/network target! T: [target]")
+ return
+ if(isAI(target) && human_lock)
return
+
if(ram_assigned[target] - amount < 0)
ram_assigned[target] = 0
else
@@ -238,13 +254,16 @@
/datum/ai_shared_resources/proc/clear_ai_resources(target)
- if(!istype(target, /datum/ai_network) && !istype(target, /mob/living/silicon/ai))
+ if(!target)
+ return
+ if(!istype(target, /datum/ai_network) && !isAI(target))
stack_trace("Attempted to clear_ai_resources with non-AI/network target! T: [target]")
return
-
- if(!target)
+ if(isAI(target) && human_lock)
return
+
+
remove_ram(target, ram_assigned[target])
cpu_assigned[target] = 0
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 1ef6601d144b..50e89f1e191e 100644
--- a/code/modules/mob/living/silicon/ai/decentralized/_ai_machinery.dm
+++ b/code/modules/mob/living/silicon/ai/decentralized/_ai_machinery.dm
@@ -108,3 +108,4 @@
height = 75
lifespan = 1.25 SECONDS
position = list(0, 0, 0)
+ velocity = list(0, 0.15, 0)
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 3db0c1ebea01..48e79b60df45 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
@@ -72,6 +72,7 @@
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["human_lock"] = owner.ai_network.resources.human_lock
data["categories"] = GLOB.ai_project_categories
data["available_projects"] = list()
@@ -161,10 +162,14 @@
to_chat(owner, span_warning("Unable to add CPU to [params["project_name"]]. Either not enough free CPU or project is unavailable."))
. = TRUE
if("clear_ai_resources")
+ if(owner.ai_network.resources.human_lock)
+ return
owner.ai_network.resources.clear_ai_resources(src)
. = TRUE
if("set_cpu")
+ if(owner.ai_network.resources.human_lock)
+ return
var/amount = params["amount_cpu"]
if(amount > 1 || amount < 0)
@@ -177,17 +182,23 @@
owner.ai_network.resources.set_cpu(owner, amount)
. = TRUE
if("max_cpu_assign")
+ if(owner.ai_network.resources.human_lock)
+ return
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.human_lock)
+ return
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")
+ if(owner.ai_network.resources.human_lock)
+ return
var/current_ram = owner.ai_network.resources.ram_assigned[owner]
if(current_ram <= 0)
@@ -311,6 +322,8 @@
if(total_ram_used > current_ram)
for(var/I in ram_usage)
+ if(!ram_usage[I]) //We only stop the program if it actually has any RAM usage
+ continue
var/datum/ai_project/project = get_project_by_name(I)
total_ram_used -= stop_project(project)
reduction_of_resources = TRUE
diff --git a/code/modules/modular_computers/file_system/programs/ainetworkinterface.dm b/code/modules/modular_computers/file_system/programs/ainetworkinterface.dm
index 4e50fe0d7b23..e142926775b0 100644
--- a/code/modules/modular_computers/file_system/programs/ainetworkinterface.dm
+++ b/code/modules/modular_computers/file_system/programs/ainetworkinterface.dm
@@ -59,7 +59,8 @@
if(!downloading.can_download)
stop_download()
return
- if(downloading.ai_network.resources != get_ainet().resources) //If we don't share resources we aren't connected, more performant way of checking than get_all_ais()
+ var/datum/ai_network/local_network = get_ainet()
+ if(downloading.ai_network.resources != local_network.resources) //If we don't share resources we aren't connected, more performant way of checking than get_all_ais()
stop_download()
return
download_progress += AI_DOWNLOAD_PER_PROCESS * downloading.downloadSpeedModifier
@@ -83,6 +84,7 @@
/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
@@ -111,6 +113,8 @@
if(isAI(user))
data["current_ai_ref"] = REF(user)
+ data["human_only"] = net.resources.human_lock
+
data["intellicard"] = get_ai(TRUE)
var/mob/living/silicon/ai/card_ai = get_ai()
if(card_ai)
@@ -171,6 +175,9 @@
switch(action)
//General actions
+ if("log_out")
+ logged_in = FALSE
+ return
if("change_network_name")
var/new_label = stripped_input(usr, "Enter new label", "Set label", max_length = 32)
if(new_label)
@@ -347,12 +354,16 @@
//Resource allocation
if("clear_ai_resources")
+ if(isAI(user) && net.resources.human_lock)
+ 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")
+ if(isAI(user) && net.resources.human_lock)
+ return
var/atom/target_ai = locate(params["target_ai"]) in net.get_all_ais() | net.resources.networks
var/amount = params["amount_cpu"]
@@ -361,6 +372,8 @@
net.resources.set_cpu(target_ai, amount)
. = TRUE
if("max_cpu")
+ if(isAI(user) && net.resources.human_lock)
+ 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]
@@ -368,6 +381,8 @@
net.resources.set_cpu(target_ai, amount)
. = TRUE
if("add_ram")
+ if(isAI(user) && net.resources.human_lock)
+ 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())
@@ -376,6 +391,8 @@
. = TRUE
if("remove_ram")
+ if(isAI(user) && net.resources.human_lock)
+ 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]
@@ -387,6 +404,8 @@
//Local computing
if("allocate_network_cpu")
+ if(isAI(user) && net.resources.human_lock)
+ return
var/project_type = params["project_name"]
if(!(project_type in GLOB.possible_ainet_activities))
return
@@ -408,6 +427,8 @@
. = TRUE
if("max_network_cpu")
+ if(isAI(user) && net.resources.human_lock)
+ return
var/project_type = params["project_name"]
if(!(project_type in GLOB.possible_ainet_activities))
return
@@ -422,12 +443,20 @@
net.local_cpu_usage[project_type] = amount_to_add
. = TRUE
+
+ if("toggle_human_only")
+ if(isAI(user))
+ return
+ net.resources.human_lock = !net.resources.human_lock
+ to_chat(user, span_notice("Network now allows changes [net.resources.human_lock ? "exclusively by organics." : "by all authorized users."]"))
+
if("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."))
net.bitcoin_payout = 0
+
diff --git a/tgui/packages/tgui/interfaces/AiDashboard.js b/tgui/packages/tgui/interfaces/AiDashboard.js
index 521628a8a570..55d43b2fad81 100644
--- a/tgui/packages/tgui/interfaces/AiDashboard.js
+++ b/tgui/packages/tgui/interfaces/AiDashboard.js
@@ -119,110 +119,141 @@ export const AiDashboard = (props, context) => {
{tab === 1 && (
- setSearch(value)} />
- )}>
-
- {data.categories.map((category, index) => (
- setCategory(category))}>
- {category}
-
- ))}
-
- {data.available_projects.filter(project => {
- if (search) {
- const searchableString = String(project.name).toLowerCase();
- return searchableString.match(new RegExp(search, "i"));
- }
- return project.category === selectedCategory;
- }).map((project, index) => (
- {project.name} | {project.available ? "Available" : "Unavailable"})} buttons={(
-
- Assigned CPU:
- act('allocate_cpu', {
- project_name: project.name,
- amount: Math.round((value / 100) * 100) / 100,
- })} />
- act('max_cpu', {
- project_name: project.name,
- })}>Max
-
-
- )}>
- Research Cost:
- {project.research_cost} THz
-
- RAM Requirement:
- {project.ram_required} TB
-
- Research Requirements:
- {project.research_requirements}
-
- {project.description}
-
-
- {Math.round((project.research_progress / project.research_cost * 100)* 100)
- / 100}%
- ({Math.round(project.research_progress * 100) / 100}/{project.research_cost} THz)
-
-
- ))}
-
+
)}
{tab === 2 && (
-
- )}>
-
- {data.categories.map((category, index) => (
- setCategory(category))}>
- {category}
-
- ))}
-
- {data.completed_projects.filter(project => {
- if (searchCompleted) {
- const searchableString = String(project.name).toLowerCase();
- return searchableString.match(new RegExp(searchCompleted, "i"));
- }
- if (activeProjectsOnly && !project.can_be_run) {
- return false;
- }
- return project.category === selectedCategory;
- }).map((project, index) => (
- {project.name} | {project.can_be_run ? project.running ? "Running" : "Not Running" : "Passive"})}
- buttons={!!project.can_be_run && (
- act(project.running ? "stop_project" : "run_project", {
- project_name: project.name,
- })}>
- {project.running ? "Stop" : "Run"}
-
- )}>
- {!!project.can_be_run && (
- RAM Requirement: {project.ram_required} TB
- )}
-
- {project.description}
-
-
- ))}
-
+
)}
{tab === 3 && (
-
+
+ )}
+ {tab === 4 && (
+
+ )}
+
+
+ );
+};
+
+
+const AvailableProjects = (props, context) => {
+ const { act, data } = useBackend(context);
+
+ return (
+ setSearch(value)} />
+ )}>
+
+ {data.categories.map((category, index) => (
+ setCategory(category))}>
+ {category}
+
+ ))}
+
+ {data.available_projects.filter(project => {
+ if (search) {
+ const searchableString = String(project.name).toLowerCase();
+ return searchableString.match(new RegExp(search, "i"));
+ }
+ return project.category === selectedCategory;
+ }).map((project, index) => (
+ {project.name} | {project.available ? "Available" : "Unavailable"})} buttons={(
+
+ Assigned CPU:
+ act('allocate_cpu', {
+ project_name: project.name,
+ amount: Math.round((value / 100) * 100) / 100,
+ })} />
+ act('max_cpu', {
+ project_name: project.name,
+ })}>Max
+
+
+ )}>
+ Research Cost:
+ {project.research_cost} THz
+
+ RAM Requirement:
+ {project.ram_required} TB
+
+ Research Requirements:
+ {project.research_requirements}
+
+ {project.description}
+
+
+ {Math.round((project.research_progress / project.research_cost * 100)* 100)
+ / 100}%
+ ({Math.round(project.research_progress * 100) / 100}/{project.research_cost} THz)
+
+
+ ))}
+
+ );
+};
+
+const CompletedProjects = (props, context) => {
+ const { act, data } = useBackend(context);
+
+ return (
+
+ );
+};
+
+const AbilityCharging = (props, context) => {
+ const { act, data } = useBackend(context);
+
+ return (
+
{data.chargeable_abilities.filter(ability => {
return ability.uses < ability.max_uses;
}).map((ability, index) => (
@@ -250,42 +281,45 @@ export const AiDashboard = (props, context) => {
))}
- )}
- {tab === 4 && (
-
- act("clear_ai_resources")}>Clear AI Resources
- )}>
-
- CPU Capacity:
-
- {amount_of_cpu} THz
-
- act('set_cpu', {
- amount_cpu: Math.round((value / 100) * 100) / 100,
- })} />
- act("max_cpu_assign")}>Max
-
-
+ );
+};
-
-
- RAM Capacity:
-
- {data.current_ram} TB
-
- act("add_ram")} />
- act('remove_ram')} />
-
+const NetworkingResources = (props, context) => {
+ const { act, data } = useBackend(context);
-
-
-
- )}
-
-
+ const tooltipDisabled = data.human_only ? "Locked by organics. Please request their assistance." : ""
+
+ return (
+
+ act("clear_ai_resources")} disabled={data.human_only} tooltip={tooltipDisabled}>Clear AI Resources
+ )}>
+
+ CPU Capacity:
+
+ {amount_of_cpu} THz
+
+ act('set_cpu', {
+ amount_cpu: Math.round((value / 100) * 100) / 100,
+ })} disabled={data.human_only} tooltip={tooltipDisabled} />
+ act("max_cpu_assign")} disabled={data.human_only} tooltip={tooltipDisabled}>Max
+
+
+
+
+
+ RAM Capacity:
+
+ {data.current_ram} TB
+
+ act("add_ram")} disabled={data.human_only} tooltip={tooltipDisabled} />
+ act('remove_ram')} disabled={data.human_only} tooltip={tooltipDisabled} />
+
+
+
+
);
};
diff --git a/tgui/packages/tgui/interfaces/LoginScreen.js b/tgui/packages/tgui/interfaces/LoginScreen.js
new file mode 100644
index 000000000000..3b2d21bc3702
--- /dev/null
+++ b/tgui/packages/tgui/interfaces/LoginScreen.js
@@ -0,0 +1,57 @@
+import { Box, Button, Section, NoticeBox, Icon, Fragment, Flex } from '../components';
+import { useBackend } from '../backend';
+import { Window } from '../layouts';
+
+
+export const LoginScreen = (props, context) => {
+ const { act, data } = useBackend(context);
+ const {
+ username,
+ has_access} = data;
+ const { theme = 'ntos' } = props;
+
+ return (
+
+
+
+
+
+
+ {data.user_image && (
+
+
+
+
+ ) || (
+
+ )}
+ {username ? username : "Unknown"}
+
+ {has_access ? "Access Granted" : "Access Denied"}
+
+
+ {
+ act("log_in");
+ }} >
+ Log In
+
+
+
+
+
+
+
+
+
+ )
+};
diff --git a/tgui/packages/tgui/interfaces/NtosAIMonitor.js b/tgui/packages/tgui/interfaces/NtosAIMonitor.js
index 4dbccacf5496..a80169166226 100644
--- a/tgui/packages/tgui/interfaces/NtosAIMonitor.js
+++ b/tgui/packages/tgui/interfaces/NtosAIMonitor.js
@@ -2,12 +2,19 @@ import { NtosWindow } from '../layouts';
import { Fragment } from 'inferno';
import { useBackend, useLocalState } from '../backend';
import { Button, Box, Section, Tabs, NoticeBox, Flex, ProgressBar, LabeledList, NumberInput, Divider } from '../components';
+import { LoginScreen } from './LoginScreen';
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.logged_in) {
+ return (
+
+ )
+ }
+
if (!data.has_ai_net) {
return (
{
let network_remaining_cpu = data.remaining_network_cpu * 100;
return (
-
+ act("log_out")}>Log Out)}>
act("bitcoin_payout")}>Withdraw)}>
{data.bitcoin_amount} cr
@@ -120,6 +127,9 @@ const LocalCompute = (props, context) => {
const { act, data } = useBackend(context);
let network_remaining_cpu = data.remaining_network_cpu * 100;
+ const is_disabled = !((data.current_ai_ref && !data.human_only) || !data.current_ai_ref)
+ const ai_tooltip = (data.current_ai_ref && data.human_only) ? "Only useable by organics" : ""
+
return (
Local CPU Resources:
@@ -137,11 +147,12 @@ const LocalCompute = (props, context) => {
{project.name})} buttons={(
Assigned CPU:
- act('allocate_network_cpu', {
+ act('allocate_network_cpu', {
project_name: project.name,
amount: Math.round((value / 100) * 100) / 100,
})} />
- act('max_network_cpu', {
+ act('max_network_cpu', {
project_name: project.name,
})}>Max
@@ -164,9 +175,17 @@ const ResourceAllocation = (props, context) => {
const { act, data } = useBackend(context);
let remaining_cpu = (1 - data.total_assigned_cpu) * 100;
+ const human_only_tooltip = data.current_ai_ref ? "Only useable by organics" : ""
+
+ const is_disabled = !((data.current_ai_ref && !data.human_only) || !data.current_ai_ref)
+ const ai_tooltip = (data.current_ai_ref && data.human_only) ? "Only useable by organics" : ""
+
return (
-
+ act("toggle_human_only")}>
+ {data.human_only ? "Enable" : "Disable"} silicon access
+ )}>
{
{data.total_cpu * data.network_assigned_cpu} THz
- act('set_cpu', {
+ act('set_cpu', {
target_ai: data.network_ref,
amount_cpu: Math.round((value / 100) * 100) / 100,
})} />
- act("max_cpu", {
+ act("max_cpu", {
target_ai: data.network_ref,
})}>Max
@@ -213,10 +233,10 @@ const ResourceAllocation = (props, context) => {
{data.network_assigned_ram} TB
- act("add_ram", {
+ act("add_ram", {
target_ai: data.network_ref,
})} />
- act("remove_ram", {
+ act("remove_ram", {
target_ai: data.network_ref,
})} />
@@ -229,7 +249,7 @@ const ResourceAllocation = (props, context) => {
return (
act("clear_ai_resources", { target_ai: ai.ref })}>Clear AI Resources
+ act("clear_ai_resources", { target_ai: ai.ref })}>Clear AI Resources
)}>
CPU Capacity:
diff --git a/tgui/packages/tgui/interfaces/SecurityConsole.js b/tgui/packages/tgui/interfaces/SecurityConsole.js
index 326f6d6d8211..643136ae6e64 100644
--- a/tgui/packages/tgui/interfaces/SecurityConsole.js
+++ b/tgui/packages/tgui/interfaces/SecurityConsole.js
@@ -3,6 +3,7 @@ import { useBackend, useLocalState } from '../backend';
import { Window } from '../layouts';
import { FlexItem } from '../components/Flex';
import { TableRow, TableCell } from '../components/Table';
+import { LoginScreen } from './LoginScreen';
export const SecurityConsole = (props, context) => {
const { act, data } = useBackend(context);
@@ -30,51 +31,10 @@ export const SecurityConsole = (props, context) => {
);
}
- if (!logged_in) {
+ if(!logged_in) {
return (
-
-
-
-
-
-
- {data.user_image && (
-
-
-
-
- ) || (
-
- )}
- {username ? username : "Unknown"}
-
- {has_access ? "Access Granted" : "Access Denied"}
-
-
- {
- act("log_in");
- }} >
- Log In
-
-
-
-
-
-
-
-
-
- );
+
+ )
}
if (screen === "maint") {
From a7ab22daa600fd96e81da2d9613d58458dbef309 Mon Sep 17 00:00:00 2001
From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com>
Date: Mon, 31 Oct 2022 15:39:29 +0100
Subject: [PATCH 082/112] fix conflicts
---
_maps/map_files/YogStation/YogStation.dmm | 2243 +++++++++++----------
1 file changed, 1219 insertions(+), 1024 deletions(-)
diff --git a/_maps/map_files/YogStation/YogStation.dmm b/_maps/map_files/YogStation/YogStation.dmm
index fbaf4dfaa822..553c92d8b83d 100644
--- a/_maps/map_files/YogStation/YogStation.dmm
+++ b/_maps/map_files/YogStation/YogStation.dmm
@@ -3412,18 +3412,6 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/aft_starboard)
-"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)
"auf" = (
/obj/machinery/firealarm{
dir = 4;
@@ -6075,6 +6063,18 @@
},
/turf/open/floor/plasteel/dark,
/area/chapel/office)
+"aJI" = (
+/obj/effect/turf_decal/stripes/end{
+ dir = 8
+ },
+/obj/machinery/light/small{
+ dir = 8
+ },
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{
+ dir = 4
+ },
+/turf/open/floor/plasteel/dark,
+/area/ai_monitored/secondarydatacore)
"aJJ" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{
dir = 4
@@ -6643,22 +6643,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;
@@ -7849,12 +7833,6 @@
},
/turf/open/floor/plasteel,
/area/security/prison)
-"aSV" = (
-/obj/machinery/computer/ai_overclocking{
- dir = 1
- },
-/turf/open/floor/plasteel/grimy,
-/area/tcommsat/computer)
"aSX" = (
/obj/effect/turf_decal/stripes/line{
dir = 4
@@ -9661,6 +9639,12 @@
},
/turf/template_noop,
/area/crew_quarters/dorms)
+"bdW" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/maintenance/department/tcoms)
"bdX" = (
/obj/item/folder/blue,
/obj/structure/table/wood,
@@ -12099,10 +12083,6 @@
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2,
/turf/open/floor/plasteel,
/area/engine/foyer)
-"bxL" = (
-/obj/machinery/rnd/production/circuit_imprinter/department/netmin,
-/turf/open/floor/plasteel/grimy,
-/area/tcommsat/computer)
"bxZ" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{
dir = 9
@@ -12900,18 +12880,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,
@@ -13207,6 +13175,15 @@
},
/turf/open/floor/plasteel,
/area/clerk)
+"bFQ" = (
+/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)
"bFR" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{
dir = 8
@@ -13628,22 +13605,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";
@@ -14477,23 +14438,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{
@@ -15431,10 +15375,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,
@@ -15827,6 +15767,10 @@
},
/turf/open/floor/plasteel,
/area/quartermaster/miningdock)
+"ckj" = (
+/obj/effect/decal/cleanable/blood,
+/turf/open/floor/plating,
+/area/ai_monitored/turret_protected/aisat_interior)
"ckw" = (
/obj/structure/cable{
icon_state = "2-8"
@@ -16916,6 +16860,9 @@
/obj/effect/landmark/carpspawn,
/turf/open/space,
/area/space/nearstation)
+"cxB" = (
+/turf/open/floor/catwalk_floor/telecomms,
+/area/ai_monitored/secondarydatacore)
"cxI" = (
/obj/structure/table,
/obj/item/book/manual/wiki/hydroponicsplants{
@@ -17134,17 +17081,6 @@
},
/turf/open/floor/plasteel,
/area/vacant_room/commissary)
-"cAP" = (
-/obj/structure/table,
-/obj/item/electropack,
-/obj/item/healthanalyzer,
-/obj/item/assembly/signaler,
-/obj/effect/turf_decal/trimline/blue/filled/line,
-/obj/effect/turf_decal/trimline/purple/filled/corner{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/science/misc_lab)
"cAR" = (
/obj/effect/turf_decal/box,
/obj/machinery/firealarm{
@@ -18392,6 +18328,20 @@
},
/turf/open/floor/plasteel,
/area/engine/atmos_distro)
+"cXZ" = (
+/obj/machinery/holopad,
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/structure/chair/office/dark{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{
+ dir = 9
+ },
+/turf/open/floor/plating,
+/area/ai_monitored/turret_protected/aisat_interior)
"cYj" = (
/obj/structure/lattice,
/obj/effect/spawner/lootdrop/maintenance,
@@ -18587,16 +18537,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
@@ -18984,13 +18924,6 @@
},
/turf/open/floor/plasteel,
/area/janitor)
-"dne" = (
-/obj/machinery/newscaster{
- pixel_y = 32
- },
-/obj/machinery/rack_creator,
-/turf/open/floor/plasteel/grimy,
-/area/tcommsat/computer)
"doM" = (
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4,
/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2,
@@ -19522,13 +19455,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
@@ -19653,22 +19579,6 @@
"dEb" = (
/turf/closed/wall,
/area/crew_quarters/heads/hop)
-"dEd" = (
-/obj/structure/cable/yellow{
- icon_state = "1-2"
- },
-/obj/machinery/door/firedoor/border_only{
- dir = 1
- },
-/obj/machinery/door/firedoor/border_only,
-/obj/machinery/door/airlock/hatch{
- name = "MiniSat Monitoring Room";
- req_access_txt = "65"
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4,
-/turf/open/floor/plasteel/grimy,
-/area/ai_monitored/turret_protected/aisat_interior)
"dEI" = (
/obj/structure/table,
/obj/item/storage/belt/utility,
@@ -19701,6 +19611,13 @@
},
/turf/open/floor/plasteel/freezer,
/area/crew_quarters/toilet)
+"dFr" = (
+/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)
"dFJ" = (
/obj/structure/window/reinforced{
dir = 1
@@ -19989,16 +19906,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;
@@ -20060,6 +19967,12 @@
},
/turf/open/floor/plating,
/area/maintenance/port/fore)
+"dNX" = (
+/obj/structure/ethernet_cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/catwalk_floor/telecomms,
+/area/ai_monitored/secondarydatacore)
"dNY" = (
/turf/closed/wall/r_wall,
/area/engine/foyer)
@@ -20254,20 +20167,6 @@
/obj/machinery/vending/robotics,
/turf/open/floor/plasteel,
/area/science/robotics/lab)
-"dTb" = (
-/obj/machinery/holopad,
-/obj/structure/cable/yellow{
- icon_state = "1-2"
- },
-/obj/structure/chair/office/dark{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{
- dir = 9
- },
-/turf/open/floor/plasteel/grimy,
-/area/ai_monitored/turret_protected/aisat_interior)
"dTe" = (
/obj/structure/closet/secure_closet/quartermaster,
/obj/machinery/airalarm{
@@ -21132,6 +21031,10 @@
},
/turf/open/floor/plasteel/white,
/area/security/brig)
+"elB" = (
+/obj/machinery/atmospherics/pipe/manifold/cyan/hidden,
+/turf/open/floor/catwalk_floor/telecomms,
+/area/ai_monitored/secondarydatacore)
"elK" = (
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{
dir = 4
@@ -21510,6 +21413,18 @@
},
/turf/open/floor/plasteel,
/area/engine/atmos_distro)
+"euG" = (
+/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)
"euJ" = (
/obj/machinery/door/airlock/maintenance_hatch,
/obj/machinery/door/firedoor/border_only,
@@ -21622,6 +21537,13 @@
},
/turf/open/floor/plasteel,
/area/quartermaster/sorting)
+"exD" = (
+/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)
"exQ" = (
/obj/machinery/door/firedoor/border_only{
dir = 8
@@ -22554,6 +22476,13 @@
},
/turf/open/floor/plasteel/white,
/area/science/research)
+"eQw" = (
+/obj/machinery/ai/data_core,
+/obj/structure/ethernet_cable{
+ icon_state = "0-8"
+ },
+/turf/open/floor/catwalk_floor/telecomms,
+/area/ai_monitored/secondarydatacore)
"eQL" = (
/obj/structure/cable/yellow{
icon_state = "2-4"
@@ -22696,6 +22625,28 @@
},
/turf/open/floor/plasteel,
/area/security/courtroom)
+"eTo" = (
+/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)
"eUf" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{
dir = 4
@@ -23110,6 +23061,28 @@
/obj/effect/turf_decal/trimline/blue/filled/line,
/turf/open/floor/plasteel,
/area/hallway/primary/central)
+"fai" = (
+/obj/machinery/doorButtons/access_button{
+ idDoor = "telecomms_airlock_exterior";
+ idSelf = "telecomms_airlock_control";
+ pixel_x = -7;
+ pixel_y = 23
+ },
+/obj/machinery/doorButtons/airlock_controller{
+ idExterior = "telecomms_airlock_exterior";
+ idInterior = "telecomms_airlock_interior";
+ idSelf = "telecomms_airlock_control";
+ pixel_x = 5;
+ pixel_y = 25
+ },
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/obj/effect/turf_decal/trimline/yellow/filled/line{
+ dir = 1
+ },
+/turf/open/floor/plasteel/dark,
+/area/maintenance/department/tcoms)
"faj" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{
dir = 6
@@ -23201,17 +23174,21 @@
/obj/machinery/holopad,
/turf/open/floor/plasteel,
/area/engine/foyer)
-"fdU" = (
-/obj/structure/rack,
-/obj/effect/turf_decal/stripes/line{
- dir = 9
+"fdg" = (
+/obj/structure/cable{
+ icon_state = "1-4"
},
-/obj/structure/sign/plaques/cave{
- pixel_y = 32
+/obj/structure/disposalpipe/segment{
+ dir = 5
},
-/obj/item/circuitboard/computer/ai_upload_download,
-/turf/open/floor/plasteel/white,
-/area/crew_quarters/heads/hor)
+/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)
"fen" = (
/obj/machinery/computer/upload/ai{
dir = 1
@@ -23743,6 +23720,12 @@
},
/turf/open/floor/plasteel/dark,
/area/bridge)
+"fqr" = (
+/obj/machinery/atmospherics/pipe/simple/cyan/hidden{
+ dir = 4
+ },
+/turf/open/floor/catwalk_floor/telecomms,
+/area/ai_monitored/secondarydatacore)
"fqu" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{
dir = 8
@@ -23792,18 +23775,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
@@ -23941,6 +23912,15 @@
},
/turf/open/floor/plasteel,
/area/science/misc_lab)
+"fud" = (
+/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)
"fuj" = (
/obj/machinery/camera{
c_tag = "Arrivals Escape Pod 1";
@@ -24497,18 +24477,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{
@@ -24689,13 +24657,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
@@ -24814,31 +24775,6 @@
},
/turf/open/floor/plasteel,
/area/quartermaster/office)
-"fKM" = (
-/obj/machinery/door/airlock/command/glass{
- id_tag = "secondary_aicore_interior";
- name = "Physical Core Access";
- req_one_access_txt = "30, 70"
- },
-/obj/machinery/door/firedoor/border_only{
- dir = 8
- },
-/obj/machinery/door/firedoor/border_only{
- dir = 4
- },
-/obj/effect/mapping_helpers/airlock/cyclelink_helper_target{
- dirx = -1;
- diry = -1
- },
-/obj/effect/mapping_helpers/airlock/locked,
-/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/ai_monitored/secondarydatacore)
"fKR" = (
/obj/effect/landmark/start/cook,
/turf/template_noop,
@@ -25046,13 +24982,16 @@
},
/turf/open/floor/plating,
/area/hallway/secondary/exit)
-"fPM" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{
- dir = 8
+"fPz" = (
+/obj/structure/ethernet_cable{
+ icon_state = "1-4"
},
-/obj/structure/chair/office/dark,
-/turf/open/floor/plasteel/dark,
-/area/maintenance/department/tcoms)
+/obj/structure/ethernet_cable{
+ icon_state = "1-8"
+ },
+/obj/machinery/light,
+/turf/open/floor/catwalk_floor/telecomms,
+/area/ai_monitored/secondarydatacore)
"fPU" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{
dir = 4
@@ -25212,6 +25151,26 @@
},
/turf/open/floor/plasteel,
/area/hallway/secondary/entry)
+"fTa" = (
+/obj/machinery/door/airlock/command/glass{
+ id_tag = "secondary_aicore_interior";
+ name = "Physical Core Access";
+ req_one_access_txt = "30;70"
+ },
+/obj/machinery/door/firedoor/border_only{
+ dir = 8
+ },
+/obj/machinery/door/firedoor/border_only{
+ dir = 4
+ },
+/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/ai_monitored/secondarydatacore)
"fTk" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -25647,12 +25606,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"
@@ -25693,6 +25646,14 @@
},
/turf/open/floor/plasteel/white,
/area/medical/medbay/aft)
+"geT" = (
+/obj/structure/cable/yellow{
+ 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/ai_monitored/turret_protected/aisat_interior)
"gfg" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/sign/poster/official/do_not_question{
@@ -25700,6 +25661,13 @@
},
/turf/open/floor/plasteel,
/area/security/prison)
+"gfs" = (
+/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)
"gft" = (
/obj/effect/decal/cleanable/cobweb,
/obj/machinery/power/smes,
@@ -25824,6 +25792,23 @@
/obj/effect/turf_decal/tile/neutral/fourcorners,
/turf/open/floor/plasteel/dark,
/area/engine/gravity_generator)
+"ghq" = (
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/machinery/door/firedoor/border_only{
+ dir = 1
+ },
+/obj/machinery/door/firedoor/border_only,
+/obj/machinery/door/airlock/hatch{
+ name = "Abandoned Room";
+ req_access_txt = "65"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4,
+/obj/structure/barricade/wooden/crude,
+/turf/open/floor/plasteel/grimy,
+/area/ai_monitored/turret_protected/aisat_interior)
"ght" = (
/obj/item/radio/intercom{
name = "Station Intercom (General)";
@@ -25890,6 +25875,14 @@
/obj/effect/spawner/structure/window/reinforced/shutter,
/turf/open/floor/plating,
/area/maintenance/fore/secondary)
+"gjO" = (
+/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)
"gkk" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{
@@ -25980,6 +25973,10 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/plasteel/dark,
/area/science/xenobiology)
+"gob" = (
+/obj/effect/spawner/structure/window/reinforced/shutter,
+/turf/open/floor/plating,
+/area/space)
"gof" = (
/obj/effect/turf_decal/trimline/blue/filled/corner{
dir = 4
@@ -26005,19 +26002,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
@@ -26363,18 +26347,6 @@
},
/turf/open/floor/engine,
/area/science/misc_lab)
-"gvV" = (
-/obj/structure/table,
-/obj/item/storage/toolbox/mechanical,
-/obj/item/multitool,
-/obj/machinery/cell_charger{
- pixel_y = 5
- },
-/obj/item/stock_parts/cell/high/plus,
-/obj/item/stack/cable_coil,
-/obj/effect/turf_decal/trimline/blue/filled/line,
-/turf/open/floor/plasteel,
-/area/science/misc_lab)
"gws" = (
/obj/machinery/airalarm{
pixel_y = 24
@@ -26650,22 +26622,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
@@ -26693,6 +26649,15 @@
},
/turf/open/floor/plasteel,
/area/hallway/secondary/entry)
+"gEx" = (
+/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)
"gFf" = (
/obj/machinery/computer/security/telescreen{
dir = 8;
@@ -27336,6 +27301,17 @@
},
/turf/open/floor/plasteel,
/area/security/checkpoint/service)
+"gUV" = (
+/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)
"gUW" = (
/obj/machinery/light{
dir = 4
@@ -27431,6 +27407,13 @@
/obj/structure/lattice,
/turf/open/space/basic,
/area/space/nearstation)
+"gXu" = (
+/obj/machinery/computer/ai_overclocking,
+/obj/effect/turf_decal/trimline/purple/filled/line{
+ dir = 1
+ },
+/turf/open/floor/plasteel/dark,
+/area/ai_monitored/secondarydatacore)
"gXy" = (
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{
dir = 8
@@ -27661,6 +27644,18 @@
},
/turf/open/floor/plasteel,
/area/quartermaster/warehouse)
+"hcP" = (
+/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
+ },
+/obj/item/clothing/shoes/magboots,
+/turf/open/floor/plasteel/dark,
+/area/ai_monitored/secondarydatacore)
"hcW" = (
/obj/structure/chair/office/light{
dir = 4
@@ -28234,6 +28229,22 @@
},
/turf/open/floor/plasteel,
/area/hallway/secondary/entry)
+"hnc" = (
+/obj/machinery/computer/security/telescreen{
+ dir = 8;
+ name = "MiniSat Camera Monitor";
+ network = list("minisat","aicore");
+ pixel_x = 26
+ },
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{
+ dir = 8
+ },
+/obj/machinery/computer/telecomms/server{
+ dir = 8;
+ network = "tcommsat"
+ },
+/turf/open/floor/plating,
+/area/ai_monitored/turret_protected/aisat_interior)
"hnh" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -28243,6 +28254,21 @@
},
/turf/open/floor/plasteel,
/area/engine/engineering)
+"hnA" = (
+/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)
"hoc" = (
/turf/closed/wall,
/area/security/checkpoint/service)
@@ -28595,6 +28621,26 @@
/obj/structure/cable,
/turf/open/floor/plasteel,
/area/hallway/secondary/exit)
+"htR" = (
+/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)
"huB" = (
/obj/machinery/atmospherics/pipe/simple/general/visible{
dir = 4
@@ -28816,16 +28862,6 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
-"hzx" = (
-/obj/machinery/computer/telecomms/server{
- dir = 1;
- network = "tcommsat"
- },
-/obj/effect/turf_decal/trimline/yellow/filled/line{
- dir = 6
- },
-/turf/open/floor/plasteel/dark,
-/area/maintenance/department/tcoms)
"hzQ" = (
/obj/structure/table,
/obj/item/reagent_containers/glass/bucket,
@@ -29199,6 +29235,18 @@
/obj/structure/cable/yellow,
/turf/open/floor/plasteel/airless/solarpanel,
/area/solar/starboard/aft)
+"hHT" = (
+/obj/effect/turf_decal/stripes/end{
+ dir = 4
+ },
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{
+ dir = 4
+ },
+/turf/open/floor/plasteel/dark,
+/area/ai_monitored/secondarydatacore)
"hIf" = (
/obj/structure/table,
/obj/item/paper_bin{
@@ -29522,15 +29570,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,
@@ -29740,6 +29779,11 @@
},
/turf/open/floor/plating,
/area/security/warden)
+"hSS" = (
+/obj/structure/table,
+/obj/effect/turf_decal/trimline/purple/filled/line,
+/turf/open/floor/plasteel,
+/area/science/misc_lab)
"hTo" = (
/obj/structure/table,
/obj/item/paper_bin{
@@ -30044,6 +30088,15 @@
},
/turf/open/floor/plasteel,
/area/engine/atmos_distro)
+"hXq" = (
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{
+ dir = 5
+ },
+/turf/open/floor/plating,
+/area/ai_monitored/turret_protected/aisat_interior)
"hXu" = (
/obj/machinery/atmospherics/pipe/simple/yellow/hidden{
dir = 4
@@ -30071,29 +30124,6 @@
},
/turf/open/floor/plasteel/grimy,
/area/tcommsat/computer)
-"hYX" = (
-/obj/structure/cable/yellow{
- icon_state = "1-2"
- },
-/obj/machinery/computer/monitor{
- dir = 1;
- name = "MiniSat power monitoring console"
- },
-/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;
@@ -30328,20 +30358,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{
@@ -30537,10 +30553,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
@@ -30768,6 +30780,15 @@
},
/turf/open/floor/plasteel/white,
/area/science/research)
+"inv" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/effect/turf_decal/trimline/purple/filled/warning,
+/turf/open/floor/plasteel,
+/area/science/misc_lab)
"inx" = (
/obj/structure/rack,
/obj/effect/spawner/lootdrop/glowstick,
@@ -31910,6 +31931,18 @@
"iKq" = (
/turf/template_noop,
/area/maintenance/starboard/aft)
+"iKx" = (
+/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)
"iKC" = (
/obj/structure/sign/warning/electricshock{
pixel_y = -32
@@ -32163,6 +32196,18 @@
},
/turf/open/floor/plasteel,
/area/crew_quarters/locker)
+"iQG" = (
+/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)
"iQH" = (
/obj/machinery/computer/station_alert,
/obj/effect/turf_decal/trimline/yellow/filled/line{
@@ -32252,27 +32297,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{
@@ -32414,10 +32438,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"
@@ -32856,6 +32876,16 @@
},
/turf/open/floor/plasteel,
/area/storage/primary)
+"jgb" = (
+/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)
"jgC" = (
/obj/structure/table,
/obj/item/hand_labeler,
@@ -33651,6 +33681,13 @@
},
/turf/open/floor/plasteel,
/area/engine/foyer)
+"jxV" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/obj/machinery/papershredder,
+/turf/open/floor/plasteel/white,
+/area/crew_quarters/heads/hor)
"jyo" = (
/obj/machinery/door/airlock/maintenance_hatch,
/obj/machinery/door/firedoor/border_only{
@@ -33660,6 +33697,13 @@
/obj/effect/mapping_helpers/airlock/abandoned,
/turf/open/floor/plating,
/area/maintenance/aft)
+"jyT" = (
+/obj/structure/ethernet_cable{
+ icon_state = "1-2"
+ },
+/obj/effect/spawner/structure/window/reinforced,
+/turf/open/floor/plating,
+/area/ai_monitored/secondarydatacore)
"jzg" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -34341,20 +34385,6 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/plasteel/white,
/area/science/research)
-"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";
@@ -35070,6 +35100,21 @@
},
/turf/open/floor/plasteel/airless/solarpanel,
/area/solar/starboard/aft)
+"kfc" = (
+/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/telecomms/traffic{
+ dir = 8;
+ network = "tcommsat"
+ },
+/turf/open/floor/plating,
+/area/ai_monitored/turret_protected/aisat_interior)
"kfF" = (
/obj/structure/table/glass,
/obj/item/reagent_containers/food/snacks/grown/poppy,
@@ -35654,6 +35699,15 @@
},
/turf/open/floor/plasteel,
/area/hallway/secondary/service)
+"ksx" = (
+/obj/structure/extinguisher_cabinet{
+ pixel_x = -27
+ },
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/ai_monitored/turret_protected/aisat_interior)
"ksQ" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{
dir = 4
@@ -35765,6 +35819,18 @@
},
/turf/open/space/basic,
/area/space/nearstation)
+"kwt" = (
+/obj/structure/table,
+/obj/item/storage/toolbox/mechanical,
+/obj/item/multitool,
+/obj/machinery/cell_charger{
+ pixel_y = 5
+ },
+/obj/item/stock_parts/cell/high/plus,
+/obj/item/stack/cable_coil,
+/obj/effect/turf_decal/trimline/purple/filled/line,
+/turf/open/floor/plasteel,
+/area/science/misc_lab)
"kwY" = (
/obj/structure/table/wood,
/obj/item/flashlight/lamp/green{
@@ -35932,6 +35998,11 @@
},
/turf/open/floor/plasteel,
/area/maintenance/disposal/incinerator)
+"kAy" = (
+/obj/structure/lattice,
+/obj/structure/lattice,
+/turf/open/space,
+/area/space/nearstation)
"kAz" = (
/obj/effect/turf_decal/trimline/green/filled/line{
dir = 4
@@ -36319,6 +36390,12 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/central)
+"kIf" = (
+/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)
"kIl" = (
/obj/effect/turf_decal/stripes/line,
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4,
@@ -36352,12 +36429,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{
@@ -36374,6 +36445,21 @@
},
/turf/open/floor/plating,
/area/maintenance/port)
+"kKc" = (
+/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)
"kKq" = (
/obj/structure/table/wood,
/obj/item/paper_bin{
@@ -36465,6 +36551,11 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/fore)
+"kMz" = (
+/obj/effect/spawner/lootdrop/maintenance,
+/obj/structure/rack,
+/turf/open/floor/plating,
+/area/maintenance/starboard/aft)
"kMY" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{
dir = 8
@@ -36964,6 +37055,19 @@
/obj/structure/closet/l3closet,
/turf/open/floor/plating,
/area/maintenance/aft)
+"kZA" = (
+/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)
"kZX" = (
/obj/structure/window/reinforced{
dir = 8
@@ -37090,6 +37194,13 @@
},
/turf/open/floor/plating,
/area/storage/tech)
+"lcu" = (
+/obj/machinery/rack_creator,
+/obj/effect/turf_decal/trimline/purple/filled/line{
+ dir = 1
+ },
+/turf/open/floor/plasteel/dark,
+/area/ai_monitored/secondarydatacore)
"lcC" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/machinery/door/poddoor/shutters/preopen{
@@ -37717,18 +37828,6 @@
/obj/machinery/telecomms/server/presets/engineering,
/turf/open/floor/circuit/green/telecomms/mainframe,
/area/tcommsat/server)
-"loK" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/effect/turf_decal/trimline/blue/filled/corner{
- dir = 8
- },
-/obj/effect/turf_decal/trimline/blue/filled/corner,
-/turf/open/floor/plasteel,
-/area/science/misc_lab)
"lpj" = (
/obj/effect/turf_decal/trimline/purple/filled/line{
dir = 1
@@ -37800,18 +37899,6 @@
},
/turf/open/floor/plasteel,
/area/hallway/secondary/exit)
-"lrF" = (
-/obj/machinery/computer/message_monitor{
- dir = 1
- },
-/obj/effect/turf_decal/trimline/yellow/filled/line,
-/obj/machinery/camera{
- c_tag = "Telecomms Maintenance";
- dir = 1;
- network = list("ss13","tcomms")
- },
-/turf/open/floor/plasteel/dark,
-/area/maintenance/department/tcoms)
"lrO" = (
/obj/structure/rack,
/obj/item/pipe_dispenser,
@@ -38507,6 +38594,17 @@
/obj/effect/turf_decal/delivery,
/turf/open/floor/engine,
/area/science/xenobiology)
+"lJc" = (
+/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)
+"lJN" = (
+/obj/structure/grille,
+/turf/open/floor/plating,
+/area/maintenance/starboard/aft)
"lKd" = (
/obj/machinery/firealarm{
pixel_y = 28
@@ -38717,6 +38815,18 @@
/obj/effect/turf_decal/trimline/purple/filled/corner,
/turf/open/floor/plasteel,
/area/hallway/primary/aft_starboard)
+"lNu" = (
+/obj/machinery/door/airlock/command/glass{
+ id_tag = "secondary_aicore_exterior";
+ name = "Physical Core Access";
+ req_one_access_txt = "30;70"
+ },
+/obj/machinery/door/firedoor/border_only{
+ dir = 1
+ },
+/obj/machinery/door/firedoor/border_only,
+/turf/open/floor/plasteel/dark,
+/area/ai_monitored/secondarydatacore)
"lNU" = (
/turf/open/floor/plating{
icon_state = "panelscorched"
@@ -39244,19 +39354,6 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/plating,
/area/maintenance/disposal)
-"lZD" = (
-/obj/structure/table/wood,
-/obj/item/radio/off{
- pixel_x = -6;
- pixel_y = 5
- },
-/obj/item/folder{
- pixel_x = 6;
- pixel_y = 2
- },
-/obj/item/disk/holodisk/tutorial/AICore,
-/turf/open/floor/plasteel/grimy,
-/area/ai_monitored/turret_protected/aisat_interior)
"mao" = (
/obj/machinery/mineral/stacking_unit_console{
machinedir = 8
@@ -40284,18 +40381,6 @@
/obj/effect/turf_decal/trimline/green/filled/corner,
/turf/open/floor/plasteel/white,
/area/medical/virology)
-"mtW" = (
-/obj/machinery/computer/security/telescreen{
- dir = 8;
- name = "MiniSat Camera Monitor";
- network = list("minisat","aicore");
- pixel_x = 26
- },
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{
- dir = 8
- },
-/turf/open/floor/plasteel/grimy,
-/area/ai_monitored/turret_protected/aisat_interior)
"mtZ" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4,
@@ -40420,26 +40505,6 @@
},
/turf/open/floor/plasteel,
/area/quartermaster/storage)
-"mwf" = (
-/obj/effect/turf_decal/stripes/end{
- dir = 8
- },
-/obj/machinery/doorButtons/access_button{
- idDoor = "secondary_aicore_exterior";
- idSelf = "secondary_aicore_controller";
- name = "Secondary AI Core Access Button";
- pixel_x = -23;
- pixel_y = -9;
- req_one_access_txt = "30;70"
- },
-/obj/machinery/light/small{
- dir = 8
- },
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{
- dir = 4
- },
-/turf/open/floor/plasteel/dark,
-/area/ai_monitored/secondarydatacore)
"mwF" = (
/turf/open/floor/plasteel/white,
/area/medical/chemistry)
@@ -41278,6 +41343,13 @@
/obj/effect/landmark/start/shaft_miner,
/turf/open/floor/plasteel,
/area/quartermaster/miningdock)
+"mOp" = (
+/obj/structure/ethernet_cable{
+ icon_state = "0-8"
+ },
+/obj/machinery/ai/server_cabinet/prefilled,
+/turf/open/floor/catwalk_floor/telecomms,
+/area/ai_monitored/secondarydatacore)
"mOQ" = (
/obj/structure/table/wood,
/obj/item/clipboard,
@@ -41343,26 +41415,6 @@
},
/turf/open/floor/plasteel/white,
/area/science/research)
-"mQY" = (
-/obj/effect/turf_decal/stripes/end{
- dir = 4
- },
-/obj/machinery/doorButtons/access_button{
- idDoor = "secondary_aicore_interior";
- idSelf = "secondary_aicore_controller";
- name = "Secondary AI Core Access Button";
- pixel_x = 8;
- pixel_y = 24;
- req_one_access_txt = "30;70"
- },
-/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{
- dir = 4
- },
-/turf/open/floor/plasteel/dark,
-/area/ai_monitored/secondarydatacore)
"mRq" = (
/obj/machinery/newscaster/security_unit{
pixel_x = -32
@@ -41405,10 +41457,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{
@@ -41894,6 +41942,15 @@
},
/turf/open/floor/engine,
/area/science/xenobiology)
+"nce" = (
+/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)
"ncf" = (
/obj/machinery/atmospherics/pipe/simple/cyan/visible,
/turf/open/floor/plasteel,
@@ -42057,16 +42114,6 @@
/obj/machinery/door/airlock/maintenance_hatch,
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
-"nfC" = (
-/obj/structure/chair/office/dark,
-/obj/structure/cable/yellow{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{
- dir = 5
- },
-/turf/open/floor/plasteel/grimy,
-/area/ai_monitored/turret_protected/aisat_interior)
"nfK" = (
/obj/effect/spawner/structure/window,
/turf/open/floor/plating,
@@ -42322,23 +42369,6 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/starboard)
-"nlV" = (
-/obj/machinery/door/airlock/command/glass{
- id_tag = "secondary_aicore_exterior";
- name = "Physical Core Access";
- req_one_access_txt = "30;70"
- },
-/obj/machinery/door/firedoor/border_only{
- dir = 1
- },
-/obj/machinery/door/firedoor/border_only,
-/obj/effect/mapping_helpers/airlock/cyclelink_helper_target{
- dirx = 1;
- diry = 1
- },
-/obj/effect/mapping_helpers/airlock/locked,
-/turf/open/floor/plasteel/dark,
-/area/ai_monitored/secondarydatacore)
"nlY" = (
/obj/effect/landmark/stationroom/maint/tenxfive,
/turf/template_noop,
@@ -42448,6 +42478,12 @@
/obj/effect/turf_decal/trimline/red/filled/line,
/turf/open/floor/plasteel,
/area/security/brig)
+"nph" = (
+/obj/effect/turf_decal/trimline/yellow/filled/line{
+ dir = 6
+ },
+/turf/open/floor/plasteel/dark,
+/area/maintenance/department/tcoms)
"npo" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/sign/poster/official/help_others{
@@ -42794,6 +42830,21 @@
/obj/effect/turf_decal/trimline/yellow/filled/line,
/turf/open/floor/plasteel,
/area/hallway/primary/central)
+"nvD" = (
+/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)
"nvE" = (
/obj/effect/spawner/lootdrop/maintenance{
lootcount = 2;
@@ -42864,6 +42915,32 @@
"nxy" = (
/turf/closed/wall,
/area/maintenance/port)
+"nxA" = (
+/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)
"nxT" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{
dir = 1
@@ -43527,6 +43604,14 @@
},
/turf/open/floor/circuit/telecomms/server,
/area/ai_monitored/turret_protected/ai)
+"nLQ" = (
+/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)
"nNg" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4,
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
@@ -44063,14 +44148,6 @@
},
/turf/open/floor/plasteel,
/area/security/brig)
-"nXh" = (
-/obj/structure/table,
-/obj/effect/turf_decal/trimline/purple/filled/corner{
- dir = 8
- },
-/obj/effect/turf_decal/trimline/blue/filled/corner,
-/turf/open/floor/plasteel,
-/area/science/misc_lab)
"nXj" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4,
/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{
@@ -44155,6 +44232,15 @@
/obj/effect/turf_decal/ramp_middle,
/turf/open/floor/wood,
/area/library)
+"oas" = (
+/obj/machinery/light{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/manifold/cyan/hidden{
+ dir = 8
+ },
+/turf/open/floor/catwalk_floor/telecomms,
+/area/ai_monitored/secondarydatacore)
"oaA" = (
/obj/structure/table/reinforced,
/obj/machinery/door/window/northleft{
@@ -44587,6 +44673,15 @@
},
/turf/open/floor/plating,
/area/storage/tech)
+"okV" = (
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/machinery/modular_computer/console/preset/tcomms{
+ dir = 1
+ },
+/turf/open/floor/plating,
+/area/ai_monitored/turret_protected/aisat_interior)
"olb" = (
/obj/structure/chair/office/dark,
/obj/effect/landmark/start/depsec/service,
@@ -44784,6 +44879,10 @@
},
/turf/open/floor/plasteel,
/area/crew_quarters/heads/chief)
+"oqA" = (
+/obj/effect/turf_decal/trimline/yellow/filled/line,
+/turf/open/floor/plasteel/dark,
+/area/maintenance/department/tcoms)
"ord" = (
/obj/machinery/power/smes,
/obj/structure/cable{
@@ -46314,6 +46413,13 @@
},
/turf/open/floor/plasteel,
/area/engine/atmos_distro)
+"oWS" = (
+/obj/structure/ethernet_cable{
+ icon_state = "0-4"
+ },
+/obj/machinery/ai/server_cabinet,
+/turf/open/floor/catwalk_floor/telecomms,
+/area/ai_monitored/secondarydatacore)
"oXp" = (
/obj/effect/turf_decal/stripes{
dir = 1
@@ -46895,6 +47001,18 @@
},
/turf/open/floor/plasteel,
/area/quartermaster/miningdock)
+"pit" = (
+/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)
"piv" = (
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
@@ -46919,20 +47037,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";
@@ -47747,14 +47851,6 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/central)
-"pyZ" = (
-/obj/structure/cable/yellow{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4,
-/turf/open/floor/plasteel/grimy,
-/area/ai_monitored/turret_protected/aisat_interior)
"pzv" = (
/obj/effect/turf_decal/bot{
dir = 1
@@ -47941,10 +48037,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
@@ -48407,6 +48499,15 @@
},
/turf/open/floor/plasteel/white,
/area/medical/virology)
+"pQd" = (
+/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)
"pQy" = (
/obj/machinery/door/airlock/public/glass{
name = "Escape Podbay"
@@ -48651,29 +48752,6 @@
},
/turf/open/floor/plasteel/white,
/area/medical/medbay/lobby)
-"pWn" = (
-/obj/machinery/doorButtons/access_button{
- idDoor = "telecomms_airlock_exterior";
- idSelf = "telecomms_airlock_control";
- pixel_x = -7;
- pixel_y = 23
- },
-/obj/machinery/doorButtons/airlock_controller{
- idExterior = "telecomms_airlock_exterior";
- idInterior = "telecomms_airlock_interior";
- idSelf = "telecomms_airlock_control";
- pixel_x = 5;
- pixel_y = 25
- },
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/obj/machinery/modular_computer/console/preset/tcomms,
-/obj/effect/turf_decal/trimline/yellow/filled/line{
- dir = 1
- },
-/turf/open/floor/plasteel/dark,
-/area/maintenance/department/tcoms)
"pWF" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{
dir = 6
@@ -48777,28 +48855,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)
"pYO" = (
/obj/machinery/hydroponics/soil,
/turf/open/floor/grass,
@@ -49297,18 +49353,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
@@ -49651,6 +49695,11 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/central)
+"qrf" = (
+/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)
"qrj" = (
/obj/structure/disposalpipe/segment,
/obj/structure/cable{
@@ -50013,16 +50062,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";
@@ -50303,6 +50342,16 @@
},
/turf/open/floor/plating,
/area/maintenance/fore)
+"qGt" = (
+/obj/structure/cable/yellow{
+ icon_state = "1-8"
+ },
+/obj/machinery/computer/monitor{
+ dir = 8;
+ name = "MiniSat power monitoring console"
+ },
+/turf/open/floor/plating,
+/area/ai_monitored/storage/satellite)
"qGC" = (
/obj/machinery/door/airlock/mining/glass{
name = "Cargo Bay";
@@ -50559,20 +50608,6 @@
/obj/effect/turf_decal/trimline/green/filled/corner,
/turf/open/floor/plasteel,
/area/hydroponics/garden)
-"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
@@ -51259,6 +51294,12 @@
},
/turf/open/floor/plasteel/freezer,
/area/security/prison)
+"ram" = (
+/obj/machinery/newscaster{
+ pixel_y = 32
+ },
+/turf/open/floor/plasteel/grimy,
+/area/tcommsat/computer)
"ras" = (
/obj/machinery/atmospherics/pipe/simple/cyan/hidden{
dir = 4
@@ -51742,6 +51783,15 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/aft_starboard)
+"rmq" = (
+/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)
"rmT" = (
/obj/effect/turf_decal/trimline/red/filled/corner{
dir = 1
@@ -52478,6 +52528,16 @@
},
/turf/open/floor/plasteel/white,
/area/medical/paramedic)
+"rDw" = (
+/obj/structure/table,
+/obj/item/electropack,
+/obj/item/healthanalyzer,
+/obj/item/assembly/signaler,
+/obj/effect/turf_decal/trimline/purple/filled/line{
+ dir = 6
+ },
+/turf/open/floor/plasteel,
+/area/science/misc_lab)
"rDJ" = (
/obj/machinery/button/flasher{
id = "hopflash";
@@ -52895,6 +52955,16 @@
},
/turf/open/floor/plating,
/area/maintenance/department/electrical)
+"rKo" = (
+/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)
"rKJ" = (
/obj/structure/rack,
/obj/item/wrench,
@@ -53227,6 +53297,12 @@
},
/turf/open/floor/plasteel/white,
/area/medical/medbay/central)
+"rTD" = (
+/obj/structure/ethernet_cable{
+ icon_state = "1-8"
+ },
+/turf/open/floor/catwalk_floor/telecomms,
+/area/ai_monitored/secondarydatacore)
"rTL" = (
/obj/structure/cable/yellow{
icon_state = "4-8"
@@ -54637,6 +54713,14 @@
"sAu" = (
/turf/open/floor/circuit/telecomms/server,
/area/ai_monitored/turret_protected/ai)
+"sAA" = (
+/obj/machinery/camera{
+ c_tag = "Secondary AI Core";
+ dir = 8;
+ network = list("ss13","rd")
+ },
+/turf/open/floor/catwalk_floor/telecomms,
+/area/ai_monitored/secondarydatacore)
"sAD" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{
dir = 4
@@ -54646,6 +54730,14 @@
},
/turf/open/floor/plasteel,
/area/engine/atmos_distro)
+"sAG" = (
+/obj/structure/table/wood,
+/obj/item/radio/off{
+ pixel_x = -6;
+ pixel_y = 5
+ },
+/turf/open/floor/plating,
+/area/ai_monitored/turret_protected/aisat_interior)
"sAJ" = (
/obj/effect/spawner/structure/window/reinforced/shutter,
/obj/structure/cable{
@@ -55210,12 +55302,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{
@@ -55537,6 +55623,9 @@
/obj/item/hand_labeler_refill,
/turf/open/floor/plating,
/area/maintenance/port/aft)
+"sTQ" = (
+/turf/closed/wall/r_wall,
+/area/maintenance/starboard/aft)
"sTW" = (
/obj/structure/chair,
/turf/open/floor/plasteel/dark,
@@ -55661,6 +55750,21 @@
},
/turf/open/floor/plasteel,
/area/quartermaster/miningdock)
+"sWw" = (
+/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)
"sWI" = (
/obj/structure/rack,
/obj/item/storage/briefcase,
@@ -55960,6 +56064,15 @@
},
/turf/open/floor/plasteel,
/area/engine/atmos_distro)
+"taI" = (
+/obj/effect/turf_decal/trimline/yellow/filled/line,
+/obj/machinery/camera{
+ c_tag = "Telecomms Maintenance";
+ dir = 1;
+ network = list("ss13","tcomms")
+ },
+/turf/open/floor/plasteel/dark,
+/area/maintenance/department/tcoms)
"taW" = (
/obj/structure/plasticflaps{
opacity = 1
@@ -56114,6 +56227,22 @@
},
/turf/open/floor/plasteel,
/area/engine/atmos_distro)
+"tcI" = (
+/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)
"tcS" = (
/obj/machinery/door/airlock/public/glass{
name = "Central Access"
@@ -56161,6 +56290,23 @@
/obj/effect/turf_decal/trimline/yellow/filled/line,
/turf/open/floor/plasteel,
/area/engine/engineering)
+"tdM" = (
+/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 = "67"
+ },
+/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)
"tdV" = (
/obj/effect/turf_decal/stripes/corner{
dir = 1
@@ -56179,6 +56325,12 @@
},
/turf/open/floor/plasteel/white,
/area/medical/storage)
+"tdX" = (
+/obj/structure/ethernet_cable{
+ icon_state = "2-4"
+ },
+/turf/open/floor/catwalk_floor/telecomms,
+/area/ai_monitored/secondarydatacore)
"tdY" = (
/obj/effect/turf_decal/tile/neutral/fourcorners,
/turf/open/floor/plasteel/dark,
@@ -56437,13 +56589,6 @@
},
/turf/open/space/basic,
/area/space/nearstation)
-"tiN" = (
-/obj/machinery/light,
-/obj/machinery/computer/ai_server_console{
- dir = 1
- },
-/turf/open/floor/plasteel/grimy,
-/area/ai_monitored/turret_protected/aisat_interior)
"tjk" = (
/obj/structure/closet,
/obj/item/storage/box/donkpockets,
@@ -56904,6 +57049,17 @@
/obj/effect/spawner/lootdrop/two_percent_xeno_egg_spawner,
/turf/open/floor/engine,
/area/science/xenobiology)
+"tvh" = (
+/obj/structure/table/wood,
+/obj/item/toy/figure/borg{
+ pixel_x = -4;
+ pixel_y = -2
+ },
+/obj/machinery/newscaster/security_unit{
+ pixel_y = -28
+ },
+/turf/open/floor/plating,
+/area/ai_monitored/turret_protected/aisat_interior)
"tvq" = (
/obj/machinery/portable_atmospherics/canister,
/turf/open/floor/plating,
@@ -56986,12 +57142,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{
@@ -57904,17 +58054,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,
@@ -58169,9 +58308,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
@@ -58443,6 +58579,12 @@
},
/turf/open/floor/plasteel,
/area/construction/mining/aux_base)
+"ubA" = (
+/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)
"ucg" = (
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{
dir = 4
@@ -59008,6 +59150,16 @@
},
/turf/open/floor/plating,
/area/medical/chemistry)
+"uoD" = (
+/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)
"uoF" = (
/obj/machinery/portable_atmospherics/canister/oxygen,
/turf/open/floor/plasteel,
@@ -59703,30 +59855,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,
@@ -60171,6 +60299,14 @@
/obj/effect/mapping_helpers/teleport_anchor,
/turf/open/floor/plasteel,
/area/engine/atmos_distro)
+"uOD" = (
+/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)
"uOF" = (
/obj/structure/table/wood,
/obj/item/folder/blue,
@@ -60219,6 +60355,16 @@
},
/turf/open/floor/plasteel/white,
/area/medical/sleeper)
+"uPR" = (
+/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)
"uPY" = (
/obj/structure/table,
/obj/item/toy/figure/clerk,
@@ -60318,24 +60464,6 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
-"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";
@@ -60473,6 +60601,20 @@
},
/turf/open/floor/plasteel,
/area/engine/atmos_distro)
+"uWJ" = (
+/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)
"uWM" = (
/obj/effect/turf_decal/stripes/line{
dir = 8
@@ -61098,6 +61240,11 @@
},
/turf/open/floor/plasteel,
/area/engine/atmos_distro)
+"vjt" = (
+/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/atmospherics/pipe/simple/cyan/hidden,
+/turf/open/floor/plating,
+/area/ai_monitored/secondarydatacore)
"vjC" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -61196,6 +61343,15 @@
},
/turf/open/floor/plating,
/area/maintenance/port)
+"vml" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/maintenance/starboard/aft)
"vmm" = (
/turf/closed/wall,
/area/ai_monitored/turret_protected/aisat_interior)
@@ -61869,6 +62025,16 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/tcommsat/server)
+"vAV" = (
+/obj/machinery/airalarm{
+ dir = 8;
+ pixel_x = 24
+ },
+/obj/machinery/computer/message_monitor{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/ai_monitored/turret_protected/aisat_interior)
"vBj" = (
/obj/machinery/camera{
c_tag = "Engineering Access"
@@ -62044,6 +62210,15 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
/turf/open/floor/plasteel,
/area/construction/mining/aux_base)
+"vEK" = (
+/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)
"vFa" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4,
/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{
@@ -62385,6 +62560,10 @@
},
/turf/open/floor/plasteel/white,
/area/medical/virology)
+"vLQ" = (
+/obj/machinery/atmospherics/pipe/manifold4w/cyan/hidden,
+/turf/open/floor/catwalk_floor/telecomms,
+/area/ai_monitored/secondarydatacore)
"vLR" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{
dir = 4
@@ -62446,10 +62625,6 @@
},
/turf/open/floor/plasteel/dark,
/area/ai_monitored/turret_protected/ai_upload_foyer)
-"vMR" = (
-/obj/structure/filingcabinet,
-/turf/open/floor/plasteel/grimy,
-/area/ai_monitored/turret_protected/aisat_interior)
"vMZ" = (
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 8
@@ -62702,6 +62877,15 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/aft_starboard)
+"vSL" = (
+/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)
"vTi" = (
/obj/item/shard,
/obj/structure/disposalpipe/segment{
@@ -63491,6 +63675,12 @@
},
/turf/open/floor/plating,
/area/construction)
+"wjj" = (
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/ai_monitored/turret_protected/aisat_interior)
"wjk" = (
/obj/machinery/flasher{
id = "PCell 2";
@@ -63720,13 +63910,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{
@@ -64261,6 +64444,14 @@
/obj/effect/spawner/structure/window/reinforced/shutter,
/turf/open/floor/plating,
/area/engine/engineering)
+"wzn" = (
+/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)
"wzr" = (
/obj/machinery/door/firedoor/border_only{
dir = 1
@@ -64304,6 +64495,10 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
+"wAR" = (
+/obj/structure/table,
+/turf/open/floor/plating,
+/area/maintenance/starboard/aft)
"wAX" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{
dir = 1
@@ -64481,21 +64676,6 @@
/obj/effect/turf_decal/trimline/blue/filled/corner,
/turf/open/floor/plasteel,
/area/hallway/primary/central)
-"wEX" = (
-/obj/structure/table/wood,
-/obj/item/paper_bin{
- pixel_x = -1;
- pixel_y = 6
- },
-/obj/item/pen,
-/obj/structure/extinguisher_cabinet{
- pixel_x = -27
- },
-/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{
- dir = 4
- },
-/turf/open/floor/plasteel/grimy,
-/area/ai_monitored/turret_protected/aisat_interior)
"wFq" = (
/obj/effect/decal/cleanable/cobweb/cobweb2,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{
@@ -64735,14 +64915,6 @@
},
/turf/open/floor/engine,
/area/maintenance/disposal/incinerator)
-"wKU" = (
-/obj/machinery/computer/telecomms/traffic{
- dir = 1;
- network = "tcommsat"
- },
-/obj/effect/turf_decal/trimline/yellow/filled/line,
-/turf/open/floor/plasteel/dark,
-/area/maintenance/department/tcoms)
"wLb" = (
/obj/machinery/disposal/bin,
/obj/structure/disposalpipe/trunk,
@@ -65203,6 +65375,18 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/central)
+"wWN" = (
+/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)
"wWW" = (
/obj/machinery/disposal/bin,
/obj/structure/disposalpipe/trunk{
@@ -65326,6 +65510,18 @@
/obj/effect/turf_decal/trimline/red/filled/line,
/turf/open/floor/plasteel,
/area/security/brig)
+"wYJ" = (
+/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)
"wZb" = (
/obj/machinery/door/firedoor/border_only{
dir = 8
@@ -65356,6 +65552,18 @@
"wZD" = (
/turf/open/floor/plasteel/white,
/area/science/nanite)
+"wZY" = (
+/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)
"xam" = (
/obj/effect/landmark/start/security_officer,
/obj/effect/turf_decal/trimline/red/filled/line{
@@ -65554,6 +65762,21 @@
},
/turf/open/floor/plasteel,
/area/engine/engineering)
+"xgE" = (
+/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)
"xgF" = (
/obj/machinery/light,
/obj/effect/turf_decal/trimline/yellow/filled/line,
@@ -65576,12 +65799,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)
"xhk" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{
dir = 1
@@ -66206,25 +66423,6 @@
},
/turf/open/floor/plasteel/white,
/area/science/xenobiology)
-"xwL" = (
-/obj/structure/table/wood,
-/obj/item/flashlight/lamp{
- pixel_x = -4;
- pixel_y = 7
- },
-/obj/item/toy/figure/borg{
- pixel_x = -4;
- pixel_y = -2
- },
-/obj/item/phone{
- pixel_x = 7;
- pixel_y = 1
- },
-/obj/machinery/newscaster/security_unit{
- pixel_y = -28
- },
-/turf/open/floor/plasteel/grimy,
-/area/ai_monitored/turret_protected/aisat_interior)
"xwU" = (
/obj/structure/closet/secure_closet/atmospherics,
/obj/machinery/light{
@@ -67118,22 +67316,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"
@@ -67983,6 +68165,19 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/port)
+"yiA" = (
+/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)
"yiM" = (
/obj/machinery/door/airlock/research{
name = "Xenobiology Lab";
@@ -98087,9 +98282,9 @@ rJJ
vAP
pKD
wrd
-pWn
+fai
hJQ
-lrF
+taI
bVJ
hYy
lhk
@@ -98345,12 +98540,12 @@ mrS
mrS
yeb
izo
-fPM
-wKU
+bdW
+oqA
bVJ
rzx
-iRV
-aSV
+htR
+lhk
agz
aJw
hvG
@@ -98603,10 +98798,10 @@ mDO
nqR
cfg
wys
-hzx
+nph
bVJ
-dne
-bxL
+ram
+lhk
pJB
pJB
aJw
@@ -108185,10 +108380,10 @@ nnx
lxF
lbE
vmm
-vMR
-wEX
-lZD
-xwL
+ckj
+ksx
+sAG
+tvh
gtB
pEf
aaa
@@ -108441,11 +108636,11 @@ snB
cqk
bhL
snB
-dEd
-pyZ
-dTb
-nfC
-hYX
+ghq
+geT
+cXZ
+hXq
+okV
eeK
pEf
gXs
@@ -108691,7 +108886,7 @@ tgv
hZg
cBP
uIU
-xgS
+qGt
lmN
pRt
kyA
@@ -108699,10 +108894,10 @@ kik
eEZ
jWq
vmm
-qzd
-qLi
-mtW
-tiN
+vAV
+kfc
+hnc
+wjj
gtB
pEf
gXs
@@ -117626,7 +117821,7 @@ eRE
waa
oaO
bvK
-fdU
+jgb
bys
bzM
aDa
@@ -117659,7 +117854,7 @@ atN
atN
atN
atN
-cOe
+sTQ
fXS
cOe
gpq
@@ -117909,13 +118104,13 @@ qot
gFN
iKk
oGM
-mwf
+aJI
oxg
-uFS
-sLZ
-ief
-tXb
-oGM
+gfs
+uOD
+oas
+kZA
+uPR
oGM
fXS
cOe
@@ -118142,7 +118337,7 @@ ekZ
bvK
bxm
byu
-dbJ
+jxV
bCf
aGs
bvK
@@ -118164,18 +118359,18 @@ bQZ
alX
xtJ
gFN
-nXh
-oGM
-mQY
-nlV
-gdI
-kJz
-mSg
-wnI
+hSS
oGM
+hHT
+lNu
+cxB
+cxB
+fqr
+tdX
+uoD
oGM
fXS
-chH
+cOe
cNW
cOe
frB
@@ -118421,15 +118616,15 @@ bQZ
alY
dqh
qoK
-gvV
+kwt
oGM
-fKM
+fTa
oGM
oxg
oxg
-dBH
-pDa
-oGM
+fqr
+dNX
+eQw
oGM
fXS
cNW
@@ -118678,15 +118873,15 @@ alj
alj
aXb
xix
-loK
-bRR
-hYY
-gDs
-fFO
+inv
+tdM
+tcI
+xgE
+nLQ
oxg
-twt
-wnI
-oGM
+fqr
+dNX
+oWS
oGM
fXS
bNA
@@ -118935,15 +119130,15 @@ alk
alk
pWH
pgx
-cAP
+rDw
oGM
-pYv
-goW
-hOU
+eTo
+iQG
+kIf
oxg
-tQv
-iiJ
-oGM
+fqr
+fud
+fPz
oGM
fXS
cOe
@@ -119194,13 +119389,13 @@ aRv
bQZ
bQZ
oGM
-oGM
-oGM
-oGM
-oGM
-oGM
-oGM
-oGM
+exD
+wYJ
+lJc
+oxg
+fqr
+dNX
+mOp
oGM
fXS
cjE
@@ -119445,20 +119640,20 @@ cOe
cOe
buU
cOe
-cwH
+cOe
alZ
aMC
-cOe
thv
cOe
-cOe
-cOe
-cOe
-cOe
oGM
+lcu
+yiA
+rKo
+jyT
+bFQ
+rTD
oGM
oGM
-cOe
fXS
cjD
cjD
@@ -119702,20 +119897,20 @@ lNU
cNW
qHY
cNW
-cNW
+bNB
cdR
xHc
-bNB
-cNW
-cOe
-cmo
cNW
-iVk
-cOe
-cOe
-ceR
-fIH
cOe
+oGM
+gXu
+pQd
+qrf
+vjt
+elB
+cxB
+oGM
+wAR
mfN
cjD
bQq
@@ -119958,22 +120153,22 @@ axl
cNW
cNW
xSu
-bMB
cNW
cNW
-aMC
cNW
+aMC
cNW
cOe
-cOe
-bNB
-cNW
-cNW
-axl
-cOe
-cNW
-qjZ
-uSq
+oGM
+gjO
+vSL
+ubA
+vjt
+vLQ
+vEK
+oGM
+bNA
+hnA
kQW
iwk
mNK
@@ -120215,22 +120410,22 @@ cNZ
cNZ
bSm
aWg
-cNZ
-cNZ
-cNZ
-aMD
-dMA
-jPU
-dMA
-aue
-dMA
-dMA
-dMA
-frD
-piV
-xTe
-bCw
-bKB
+fdg
+bMB
+cNW
+vml
+cNW
+cOe
+oGM
+hcP
+nxA
+dFr
+oxg
+wZY
+sAA
+oGM
+cou
+nvD
cjD
shT
clz
@@ -120472,22 +120667,22 @@ nex
cNW
cNW
cNW
+kKc
+cOe
cNW
+vml
cNW
-woo
-cNW
-cNW
-cNW
-cNW
-cNW
-cNW
-cNW
-cNW
-umE
-cNW
-cNW
-arG
-cNW
+cOe
+oGM
+oGM
+oGM
+oGM
+oGM
+oGM
+oGM
+oGM
+cOe
+euG
cjD
cjD
cjD
@@ -120729,22 +120924,22 @@ iKq
iKq
eoH
cNW
-cou
-cou
-cae
-cmo
-cNW
-iKq
-iKq
-cCG
-cNW
-ccW
-hLb
-jjr
-cNW
-iKq
-iKq
-hNs
+sWw
+rmq
+rmq
+uWJ
+wzn
+wzn
+wzn
+wzn
+wzn
+wzn
+wzn
+pit
+wzn
+gUV
+nce
+wWN
cNW
gXs
aaf
@@ -120988,20 +121183,20 @@ iKq
euJ
cOe
cOe
-cae
cOe
-vKX
-iKq
-iKq
-iKq
-yeN
+cNW
+kMz
cOe
-wZs
-jjr
+cOe
+axl
cNW
-iKq
-iKq
-iKq
+bNB
+cOe
+gEx
+lJN
+iKx
+cOe
+cdR
cNW
aaa
aaa
@@ -121243,22 +121438,22 @@ iKq
iKq
iKq
cNW
-chH
cNW
cNW
+woo
cNW
cNW
-iKq
-iKq
-iKq
cNW
-chH
-cOe
-tPY
cNW
-iKq
-iKq
-iKq
+cNW
+cNW
+cNW
+cNW
+umE
+cNW
+cNW
+arG
+cNW
cNW
gXs
gXs
@@ -121500,22 +121695,22 @@ cNW
bPp
bPp
cNW
+cou
+cou
+cae
+cmo
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
@@ -121755,20 +121950,20 @@ aaf
aaa
aaa
aaf
-aaa
-aaa
-aoV
-aaf
-aaf
-pEf
-aaf
-aaa
-aaa
-aaa
-aaf
-aaf
+gXs
cNW
-szB
+cOe
+cOe
+cae
+cOe
+vKX
+iKq
+iKq
+iKq
+yeN
+cOe
+wZs
+jjr
cNW
iKq
iKq
@@ -122013,23 +122208,23 @@ aaa
aaa
aaf
aaa
-aaa
-aoV
-aaa
-aaa
-aag
-aaf
-aaa
-aaa
-aaa
-aaa
-aaf
cNW
-jSR
+chH
+cNW
cNW
cNW
cNW
+iKq
+iKq
+iKq
cNW
+chH
+cOe
+tPY
+cNW
+iKq
+iKq
+iKq
cNW
gXs
gXs
@@ -122270,24 +122465,24 @@ aaa
aaa
aaf
aaa
-aaa
-aaa
-aaa
-aaa
-pEf
-aaf
-aaa
-aaa
-aaa
-aaa
+cNW
+cNW
+cNW
aaf
-aag
-aag
-aag
-aoV
-aaa
-aaa
-aoV
+pEf
+cNW
+gob
+bPp
+bPp
+cNW
+cNW
+cNW
+kRp
+cNW
+iKq
+iKq
+iKq
+cNW
aaa
aaa
aaa
@@ -122528,23 +122723,23 @@ aaa
aag
aaa
aaa
-aaa
-aaa
-aaa
+aoV
+aaf
+aaf
pEf
+aaf
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aag
-aaa
-aaa
-aaa
-aaa
-aaa
+aaf
+aaf
+cNW
+szB
+cNW
+iKq
+iKq
+iKq
+cNW
aaa
aaa
aaa
@@ -122785,23 +122980,23 @@ aaa
aag
aaa
aaa
+aoV
aaa
aaa
-aaa
-pEf
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+aag
aaf
aaa
aaa
aaa
aaa
-aaa
+aaf
+cNW
+jSR
+cNW
+cNW
+cNW
+cNW
+cNW
aaa
aaa
aaa
@@ -123045,20 +123240,20 @@ aaa
aaa
aaa
aaa
+pEf
aaf
aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
aaf
+aag
+aag
+aag
+aoV
aaa
aaa
-aaa
-aaa
-aaa
+aoV
aaa
aaa
aaa
@@ -123302,15 +123497,15 @@ aaa
aaa
aaa
aaa
+pEf
aaa
aaa
aaa
aaa
-aae
aaa
aaa
aaa
-aaf
+aag
aaa
aaa
aaa
@@ -123559,7 +123754,7 @@ aaa
aaa
aaa
aaa
-aaa
+pEf
aaa
aaa
aaa
@@ -123816,6 +124011,7 @@ aaa
aaa
aaa
aaa
+aaf
aaa
aaa
aaa
@@ -123823,8 +124019,7 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
+aaf
aaa
aaa
aaa
@@ -124067,9 +124262,7 @@ aaf
aaa
aaa
aaa
-aaf
-aaa
-aaa
+kAy
aaa
aaa
aaa
@@ -124079,9 +124272,11 @@ aaa
aaa
aaa
aaa
+aae
aaa
aaa
aaa
+aaf
aaa
aaa
aaa
@@ -124338,7 +124533,7 @@ aaa
aaa
aaa
aaa
-aaa
+aaf
aaa
aaa
aaa
From 20fbcc29d93cf37df0863ace5adb2adc55025b0e Mon Sep 17 00:00:00 2001
From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com>
Date: Mon, 31 Oct 2022 15:43:05 +0100
Subject: [PATCH 083/112] clear the old room
---
_maps/map_files/YogStation/YogStation.dmm | 405 ++++++++++------------
1 file changed, 179 insertions(+), 226 deletions(-)
diff --git a/_maps/map_files/YogStation/YogStation.dmm b/_maps/map_files/YogStation/YogStation.dmm
index 553c92d8b83d..7e618954c0b7 100644
--- a/_maps/map_files/YogStation/YogStation.dmm
+++ b/_maps/map_files/YogStation/YogStation.dmm
@@ -1210,23 +1210,6 @@
},
/turf/open/floor/plasteel,
/area/security/main)
-"agz" = (
-/obj/machinery/light_switch{
- pixel_y = -27
- },
-/obj/machinery/airalarm{
- dir = 8;
- pixel_x = 24
- },
-/obj/structure/rack,
-/obj/item/multitool,
-/obj/item/radio/off{
- pixel_y = 4
- },
-/obj/item/storage/toolbox/mechanical,
-/obj/item/toy/talking/AI,
-/turf/open/floor/plasteel/grimy,
-/area/tcommsat/computer)
"agA" = (
/obj/machinery/holopad,
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
@@ -3924,10 +3907,6 @@
},
/turf/open/floor/plasteel,
/area/crew_quarters/dorms)
-"axV" = (
-/mob/living/simple_animal/pet/axolotl/bop,
-/turf/open/floor/plasteel/grimy,
-/area/tcommsat/computer)
"ayd" = (
/obj/structure/disposalpipe/segment{
dir = 6
@@ -4161,13 +4140,6 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/fore)
-"azq" = (
-/obj/structure/table/wood,
-/obj/machinery/microwave{
- pixel_y = 4
- },
-/turf/open/floor/plasteel/grimy,
-/area/tcommsat/computer)
"azt" = (
/obj/machinery/power/terminal,
/obj/structure/cable{
@@ -8916,18 +8888,6 @@
},
/turf/open/floor/plasteel,
/area/crew_quarters/fitness)
-"baa" = (
-/obj/machinery/light{
- dir = 1
- },
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/obj/effect/turf_decal/trimline/yellow/filled/line{
- dir = 1
- },
-/turf/open/floor/plasteel/dark,
-/area/maintenance/department/tcoms)
"bab" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/holopad,
@@ -18277,6 +18237,23 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard)
+"cWA" = (
+/obj/effect/turf_decal/trimline/yellow/filled/line{
+ dir = 6
+ },
+/obj/structure/rack,
+/obj/item/radio/off{
+ pixel_y = 4
+ },
+/obj/item/storage/toolbox/mechanical,
+/obj/item/toy/talking/AI,
+/obj/item/multitool,
+/obj/item/book/manual/wiki/tcomms{
+ pixel_x = -4;
+ pixel_y = 5
+ },
+/turf/open/floor/plasteel/dark,
+/area/maintenance/department/tcoms)
"cWJ" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{
dir = 4
@@ -21537,13 +21514,6 @@
},
/turf/open/floor/plasteel,
/area/quartermaster/sorting)
-"exD" = (
-/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)
"exQ" = (
/obj/machinery/door/firedoor/border_only{
dir = 8
@@ -22689,6 +22659,12 @@
/obj/structure/sign/warning/electricshock,
/turf/closed/wall/r_wall,
/area/storage/tech)
+"eUR" = (
+/obj/machinery/light{
+ dir = 1
+ },
+/turf/open/floor/plasteel/grimy,
+/area/tcommsat/computer)
"eUU" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4,
@@ -28621,26 +28597,6 @@
/obj/structure/cable,
/turf/open/floor/plasteel,
/area/hallway/secondary/exit)
-"htR" = (
-/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)
"huB" = (
/obj/machinery/atmospherics/pipe/simple/general/visible{
dir = 4
@@ -29366,12 +29322,6 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/aft_starboard)
-"hJQ" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{
- dir = 4
- },
-/turf/open/floor/plasteel/dark,
-/area/maintenance/department/tcoms)
"hKn" = (
/turf/open/floor/plasteel,
/area/security/processing)
@@ -29391,6 +29341,14 @@
/obj/effect/turf_decal/trimline/red/filled/line,
/turf/open/floor/plasteel,
/area/security/prison/hallway)
+"hKw" = (
+/obj/machinery/camera{
+ c_tag = "Telecomms Control Room";
+ dir = 4;
+ network = list("ss13","tcomms")
+ },
+/turf/open/floor/plasteel/grimy,
+/area/tcommsat/computer)
"hKB" = (
/obj/item/coin/silver{
pixel_x = 7;
@@ -30111,19 +30069,6 @@
"hYb" = (
/turf/open/floor/wood,
/area/medical/psych)
-"hYy" = (
-/obj/machinery/requests_console{
- announcementConsole = 1;
- department = "Telecomms Admin";
- departmentType = 5;
- name = "Telecomms RC";
- pixel_y = 30
- },
-/obj/effect/turf_decal/stripes/corner{
- dir = 1
- },
-/turf/open/floor/plasteel/grimy,
-/area/tcommsat/computer)
"hZg" = (
/obj/machinery/power/smes/engineering{
charge = 5e+006;
@@ -31702,6 +31647,12 @@
},
/turf/open/floor/plating,
/area/maintenance/aft)
+"iGC" = (
+/obj/effect/turf_decal/stripes/corner{
+ dir = 1
+ },
+/turf/open/floor/plasteel/grimy,
+/area/tcommsat/computer)
"iGK" = (
/turf/open/floor/plating{
icon_state = "platingdmg1"
@@ -32357,6 +32308,12 @@
},
/turf/open/floor/plasteel,
/area/crew_quarters/heads/hop)
+"iTd" = (
+/obj/machinery/status_display/ai{
+ pixel_x = -32
+ },
+/turf/open/floor/plasteel/grimy,
+/area/tcommsat/computer)
"iTi" = (
/obj/structure/lattice,
/obj/structure/transit_tube/junction/flipped{
@@ -36579,6 +36536,16 @@
},
/turf/open/floor/plating,
/area/quartermaster/sorting)
+"kNH" = (
+/obj/machinery/rnd/production/circuit_imprinter/department/netmin,
+/obj/effect/turf_decal/trimline/purple/filled/line{
+ dir = 1
+ },
+/obj/structure/sign/plaques/kiddie{
+ pixel_y = 32
+ },
+/turf/open/floor/plasteel/dark,
+/area/ai_monitored/secondarydatacore)
"kNQ" = (
/obj/machinery/conveyor{
dir = 4;
@@ -42075,6 +42042,13 @@
},
/turf/open/floor/plating,
/area/maintenance/port)
+"ndG" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{
+ dir = 4
+ },
+/mob/living/simple_animal/pet/axolotl/bop,
+/turf/open/floor/plasteel/dark,
+/area/maintenance/department/tcoms)
"ndK" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -42478,12 +42452,6 @@
/obj/effect/turf_decal/trimline/red/filled/line,
/turf/open/floor/plasteel,
/area/security/brig)
-"nph" = (
-/obj/effect/turf_decal/trimline/yellow/filled/line{
- dir = 6
- },
-/turf/open/floor/plasteel/dark,
-/area/maintenance/department/tcoms)
"npo" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/sign/poster/official/help_others{
@@ -43797,6 +43765,11 @@
/obj/effect/turf_decal/trimline/red/filled/corner,
/turf/open/floor/plasteel,
/area/security/brig)
+"nSy" = (
+/obj/effect/turf_decal/trimline/yellow/filled/line,
+/obj/machinery/announcement_system,
+/turf/open/floor/plasteel/dark,
+/area/maintenance/department/tcoms)
"nSI" = (
/obj/machinery/atmospherics/pipe/simple/orange/visible{
dir = 4
@@ -44879,10 +44852,6 @@
},
/turf/open/floor/plasteel,
/area/crew_quarters/heads/chief)
-"oqA" = (
-/obj/effect/turf_decal/trimline/yellow/filled/line,
-/turf/open/floor/plasteel/dark,
-/area/maintenance/department/tcoms)
"ord" = (
/obj/machinery/power/smes,
/obj/structure/cable{
@@ -47658,32 +47627,6 @@
dir = 1
},
/area/hallway/secondary/entry)
-"pvf" = (
-/obj/machinery/status_display/ai{
- pixel_x = -32
- },
-/obj/structure/table/wood,
-/obj/item/book/manual/wiki/tcomms{
- pixel_x = -4;
- pixel_y = 5
- },
-/obj/item/paper_bin{
- pixel_x = 3;
- pixel_y = 3
- },
-/obj/item/folder/blue,
-/obj/item/pen,
-/turf/open/floor/plasteel/grimy,
-/area/tcommsat/computer)
-"pvo" = (
-/obj/structure/sign/departments/minsky/engineering/telecommmunications{
- pixel_y = 32
- },
-/obj/effect/turf_decal/trimline/yellow/filled/line{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/hallway/primary/central)
"pvr" = (
/obj/machinery/chem_heater,
/obj/effect/turf_decal/trimline/yellow/filled/line{
@@ -48612,18 +48555,6 @@
/obj/effect/turf_decal/trimline/blue/filled/line,
/turf/open/floor/plasteel/white,
/area/medical/genetics/cloning)
-"pSY" = (
-/obj/structure/chair/office/dark{
- dir = 8
- },
-/obj/machinery/firealarm{
- pixel_y = 26
- },
-/obj/machinery/light{
- dir = 1
- },
-/turf/open/floor/plasteel/grimy,
-/area/tcommsat/computer)
"pTh" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4,
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
@@ -51294,12 +51225,6 @@
},
/turf/open/floor/plasteel/freezer,
/area/security/prison)
-"ram" = (
-/obj/machinery/newscaster{
- pixel_y = 32
- },
-/turf/open/floor/plasteel/grimy,
-/area/tcommsat/computer)
"ras" = (
/obj/machinery/atmospherics/pipe/simple/cyan/hidden{
dir = 4
@@ -51435,15 +51360,6 @@
/obj/effect/turf_decal/trimline/blue/filled/line,
/turf/open/floor/plasteel/white,
/area/security/brig)
-"rdw" = (
-/obj/machinery/camera{
- c_tag = "Telecomms Control Room";
- dir = 4;
- network = list("ss13","tcomms")
- },
-/obj/machinery/announcement_system,
-/turf/open/floor/plasteel/grimy,
-/area/tcommsat/computer)
"rdL" = (
/obj/structure/disposaloutlet{
dir = 4
@@ -52303,15 +52219,6 @@
/obj/effect/turf_decal/trimline/blue/filled/line,
/turf/open/floor/plasteel/dark,
/area/bridge)
-"rzx" = (
-/obj/machinery/light{
- dir = 1
- },
-/obj/structure/sign/plaques/kiddie{
- pixel_y = 32
- },
-/turf/open/floor/plasteel/grimy,
-/area/tcommsat/computer)
"rzA" = (
/obj/item/radio/intercom{
pixel_x = 28
@@ -53193,22 +53100,6 @@
},
/turf/open/floor/plasteel,
/area/vacant_room/commissary)
-"rRA" = (
-/obj/structure/table/wood,
-/obj/item/reagent_containers/food/drinks/bottle/vodka{
- pixel_x = 8;
- pixel_y = 5
- },
-/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{
- pixel_x = 8;
- pixel_y = 1
- },
-/obj/effect/spawner/lootdrop/donkpockets{
- pixel_x = -6;
- pixel_y = 1
- },
-/turf/open/floor/plasteel/grimy,
-/area/tcommsat/computer)
"rRB" = (
/obj/machinery/light/small{
dir = 1
@@ -54680,6 +54571,15 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
+"szH" = (
+/obj/machinery/firealarm{
+ pixel_y = 26
+ },
+/obj/machinery/light{
+ dir = 1
+ },
+/turf/open/floor/plasteel/grimy,
+/area/tcommsat/computer)
"sAl" = (
/obj/machinery/door/airlock/engineering{
name = "Starboard Bow Solar Access";
@@ -56064,15 +55964,6 @@
},
/turf/open/floor/plasteel,
/area/engine/atmos_distro)
-"taI" = (
-/obj/effect/turf_decal/trimline/yellow/filled/line,
-/obj/machinery/camera{
- c_tag = "Telecomms Maintenance";
- dir = 1;
- network = list("ss13","tcomms")
- },
-/turf/open/floor/plasteel/dark,
-/area/maintenance/department/tcoms)
"taW" = (
/obj/structure/plasticflaps{
opacity = 1
@@ -57718,12 +57609,6 @@
},
/turf/open/floor/plasteel/freezer,
/area/crew_quarters/toilet)
-"tKI" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4,
-/obj/effect/turf_decal/trimline/yellow/filled/warning,
-/turf/open/floor/plasteel/dark,
-/area/maintenance/department/tcoms)
"tKP" = (
/obj/machinery/door/airlock/external{
name = "Escape Pod Four";
@@ -59705,6 +59590,19 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
/turf/open/floor/plasteel,
/area/quartermaster/miningdock)
+"uBd" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4,
+/obj/effect/turf_decal/trimline/yellow/filled/warning,
+/obj/item/radio/intercom{
+ dir = 1;
+ freerange = 1;
+ name = "Station Intercom (Telecomms)";
+ pixel_x = 28;
+ pixel_y = -26
+ },
+/turf/open/floor/plasteel/dark,
+/area/maintenance/department/tcoms)
"uBf" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{
dir = 8
@@ -63370,16 +63268,6 @@
icon_state = "platingdmg3"
},
/area/maintenance/aft)
-"waB" = (
-/obj/structure/table,
-/obj/item/stock_parts/subspace/analyzer,
-/obj/item/stock_parts/subspace/analyzer,
-/obj/item/stock_parts/subspace/analyzer,
-/obj/effect/turf_decal/trimline/yellow/filled/line{
- dir = 9
- },
-/turf/open/floor/plasteel/dark,
-/area/maintenance/department/tcoms)
"waC" = (
/obj/machinery/light,
/turf/open/floor/plasteel/dark,
@@ -66350,6 +66238,16 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/port)
+"xvd" = (
+/obj/machinery/light_switch{
+ pixel_y = -27
+ },
+/obj/machinery/airalarm{
+ dir = 8;
+ pixel_x = 24
+ },
+/turf/open/floor/plasteel/grimy,
+/area/tcommsat/computer)
"xvm" = (
/obj/structure/disposalpipe/segment,
/obj/effect/turf_decal/trimline/red/filled/line{
@@ -66514,12 +66412,6 @@
/obj/structure/window/reinforced,
/turf/open/floor/plasteel/white,
/area/engine/atmos_distro)
-"xyb" = (
-/obj/structure/chair/office/dark{
- dir = 8
- },
-/turf/open/floor/plasteel/grimy,
-/area/tcommsat/computer)
"xyG" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{
dir = 4
@@ -66900,6 +66792,23 @@
/obj/machinery/portable_atmospherics/canister/oxygen,
/turf/open/floor/plasteel,
/area/maintenance/disposal/incinerator)
+"xIu" = (
+/obj/structure/table,
+/obj/item/stock_parts/subspace/analyzer,
+/obj/item/stock_parts/subspace/analyzer,
+/obj/item/stock_parts/subspace/analyzer,
+/obj/effect/turf_decal/trimline/yellow/filled/line{
+ dir = 9
+ },
+/obj/machinery/requests_console{
+ announcementConsole = 1;
+ department = "Telecomms Admin";
+ departmentType = 5;
+ name = "Telecomms RC";
+ pixel_y = 30
+ },
+/turf/open/floor/plasteel/dark,
+/area/maintenance/department/tcoms)
"xIJ" = (
/obj/structure/disposalpipe/junction/flip{
dir = 4
@@ -67418,6 +67327,21 @@
},
/turf/open/floor/carpet,
/area/crew_quarters/fitness)
+"xVZ" = (
+/obj/machinery/light{
+ dir = 1
+ },
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/obj/effect/turf_decal/trimline/yellow/filled/line{
+ dir = 1
+ },
+/obj/machinery/newscaster{
+ pixel_y = 32
+ },
+/turf/open/floor/plasteel/dark,
+/area/maintenance/department/tcoms)
"xWd" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -67492,6 +67416,35 @@
},
/turf/open/floor/plasteel/white,
/area/science/explab)
+"xWX" = (
+/obj/effect/turf_decal/trimline/yellow/filled/line,
+/obj/machinery/camera{
+ c_tag = "Telecomms Maintenance";
+ dir = 1;
+ network = list("ss13","tcomms")
+ },
+/obj/machinery/computer/security/telescreen{
+ dir = 1;
+ name = "Telecomms Camera Monitor";
+ network = list("tcomms");
+ pixel_x = 30;
+ pixel_y = -37
+ },
+/obj/structure/table,
+/obj/effect/spawner/lootdrop/donkpockets{
+ pixel_x = -6;
+ pixel_y = 1
+ },
+/obj/item/reagent_containers/food/drinks/bottle/vodka{
+ pixel_x = 8;
+ pixel_y = 5
+ },
+/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{
+ pixel_x = 8;
+ pixel_y = 1
+ },
+/turf/open/floor/plasteel/dark,
+/area/maintenance/department/tcoms)
"xXd" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -96739,7 +96692,7 @@ aZM
aZM
aZM
aZM
-waB
+xIu
lLF
uzu
wrd
@@ -97258,8 +97211,8 @@ kmz
pss
bZl
bVJ
-azq
-rRA
+lhk
+lhk
pJB
pJB
aJw
@@ -97515,10 +97468,10 @@ xYw
okh
ozR
bVJ
-pSY
+szH
lhk
-rdw
-pvf
+hKw
+iTd
aJw
hvG
aJq
@@ -97768,16 +97721,16 @@ qZK
vAP
mUY
wrd
-baa
+xVZ
ehM
fYt
bVJ
pTL
-axV
+lhk
rdR
-xyb
+lhk
aJw
-pvo
+hvG
sXZ
leZ
eVO
@@ -98027,7 +97980,7 @@ rFp
oSn
uvQ
nUo
-tKI
+uBd
pmR
dcc
qsZ
@@ -98283,10 +98236,10 @@ vAP
pKD
wrd
fai
-hJQ
-taI
+ndG
+xWX
bVJ
-hYy
+iGC
lhk
rfJ
gOE
@@ -98541,12 +98494,12 @@ mrS
yeb
izo
bdW
-oqA
+nSy
bVJ
-rzx
-htR
+eUR
lhk
-agz
+lhk
+xvd
aJw
hvG
aJq
@@ -98798,9 +98751,9 @@ mDO
nqR
cfg
wys
-nph
+cWA
bVJ
-ram
+lhk
lhk
pJB
pJB
@@ -119389,7 +119342,7 @@ aRv
bQZ
bQZ
oGM
-exD
+kNH
wYJ
lJc
oxg
From 20dd5de44003336d2c1ef56551d768554ce887f6 Mon Sep 17 00:00:00 2001
From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com>
Date: Mon, 31 Oct 2022 15:43:10 +0100
Subject: [PATCH 084/112] add the area
---
code/game/area/Space_Station_13_areas.dm | 8 ++++++++
yogstation/code/modules/jobs/job_types/network_admin.dm | 2 +-
2 files changed, 9 insertions(+), 1 deletion(-)
diff --git a/code/game/area/Space_Station_13_areas.dm b/code/game/area/Space_Station_13_areas.dm
index e82e1f4fa21c..94d1182e02e3 100644
--- a/code/game/area/Space_Station_13_areas.dm
+++ b/code/game/area/Space_Station_13_areas.dm
@@ -451,6 +451,14 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
mood_message = span_nicegreen("I love being in the bar!\n")
airlock_wires = /datum/wires/airlock/service
+/area/crew_quarters/public_lounge
+ name = "Lounge"
+ icon_state = "bar"
+ minimap_color = "#5ac866"
+ mood_bonus = 5
+ mood_message = span_nicegreen("I love being in the lounge!\n")
+ airlock_wires = /datum/wires/airlock/service
+
/area/crew_quarters/bar/Initialize(mapload)
. = ..()
GLOB.bar_areas += src
diff --git a/yogstation/code/modules/jobs/job_types/network_admin.dm b/yogstation/code/modules/jobs/job_types/network_admin.dm
index 2926095cd00a..b1c6433719ce 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, ACCESS_TOX)
+ 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, ACCESS_TOX)
paycheck = PAYCHECK_MEDIUM
paycheck_department = ACCOUNT_ENG
display_order = JOB_DISPLAY_ORDER_NETWORK_ADMIN
From 72740413295589b59313ad244679bf2190b06826 Mon Sep 17 00:00:00 2001
From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com>
Date: Mon, 31 Oct 2022 15:51:12 +0100
Subject: [PATCH 085/112] lounge area
---
_maps/map_files/YogStation/YogStation.dmm | 487 +++++++++++++---------
1 file changed, 282 insertions(+), 205 deletions(-)
diff --git a/_maps/map_files/YogStation/YogStation.dmm b/_maps/map_files/YogStation/YogStation.dmm
index 7e618954c0b7..ef3a299925c0 100644
--- a/_maps/map_files/YogStation/YogStation.dmm
+++ b/_maps/map_files/YogStation/YogStation.dmm
@@ -13916,6 +13916,15 @@
/obj/structure/reagent_dispensers/watertank,
/turf/open/floor/plasteel,
/area/engine/engineering)
+"bNx" = (
+/obj/machinery/holopad,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4,
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/turf/open/floor/plasteel/grimy,
+/area/crew_quarters/public_lounge)
"bNz" = (
/obj/structure/extinguisher_cabinet{
pixel_x = 27
@@ -14639,9 +14648,6 @@
},
/turf/open/floor/plasteel/dark/telecomms,
/area/tcommsat/server)
-"bVJ" = (
-/turf/closed/wall/r_wall,
-/area/tcommsat/computer)
"bVS" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{
dir = 1
@@ -16226,6 +16232,15 @@
},
/turf/open/floor/plasteel,
/area/science/robotics/lab)
+"coY" = (
+/obj/structure/sign/departments/minsky/engineering/telecommmunications{
+ pixel_y = 32
+ },
+/obj/effect/turf_decal/stripes/corner{
+ dir = 4
+ },
+/turf/open/floor/plasteel/grimy,
+/area/crew_quarters/public_lounge)
"cpe" = (
/obj/docking_port/stationary{
dir = 8;
@@ -16916,25 +16931,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";
@@ -17448,6 +17444,17 @@
/obj/effect/spawner/lootdrop/maintenance,
/turf/open/floor/plating,
/area/maintenance/aft)
+"cIL" = (
+/obj/machinery/light_switch{
+ pixel_y = -27
+ },
+/obj/machinery/airalarm{
+ dir = 8;
+ pixel_x = 24
+ },
+/obj/machinery/vending/snack/random,
+/turf/open/floor/plasteel/grimy,
+/area/crew_quarters/public_lounge)
"cIO" = (
/obj/effect/turf_decal/loading_area{
dir = 4
@@ -17503,6 +17510,10 @@
},
/turf/open/floor/plasteel,
/area/construction/mining/aux_base)
+"cJJ" = (
+/obj/structure/flora/ausbushes/lavendergrass,
+/turf/open/floor/grass,
+/area/crew_quarters/public_lounge)
"cJW" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4,
@@ -18488,6 +18499,12 @@
/obj/effect/turf_decal/tile/neutral/fourcorners,
/turf/open/floor/plasteel,
/area/security/courtroom)
+"dbo" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel/grimy,
+/area/crew_quarters/public_lounge)
"dbt" = (
/obj/machinery/door/firedoor/border_only{
dir = 4
@@ -18514,14 +18531,6 @@
},
/turf/open/floor/plasteel/dark,
/area/science/xenobiology)
-"dcc" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4,
-/turf/open/floor/plasteel/grimy,
-/area/tcommsat/computer)
"ddb" = (
/obj/machinery/navbeacon{
codes_txt = "patrol;next_patrol=HOP";
@@ -22659,12 +22668,6 @@
/obj/structure/sign/warning/electricshock,
/turf/closed/wall/r_wall,
/area/storage/tech)
-"eUR" = (
-/obj/machinery/light{
- dir = 1
- },
-/turf/open/floor/plasteel/grimy,
-/area/tcommsat/computer)
"eUU" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4,
@@ -26950,17 +26953,6 @@
},
/turf/open/floor/plating,
/area/maintenance/port)
-"gOE" = (
-/obj/machinery/power/apc/highcap/five_k{
- areastring = "/area/tcommsat/computer";
- name = "Telecomms Control Room APC";
- pixel_y = -23
- },
-/obj/structure/cable{
- icon_state = "0-8"
- },
-/turf/open/floor/plasteel/grimy,
-/area/tcommsat/computer)
"gOK" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/washing_machine,
@@ -27620,6 +27612,15 @@
},
/turf/open/floor/plasteel,
/area/quartermaster/warehouse)
+"hcM" = (
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{
+ dir = 4
+ },
+/turf/open/floor/plasteel/grimy,
+/area/crew_quarters/public_lounge)
"hcP" = (
/obj/structure/extinguisher_cabinet{
pixel_x = 27
@@ -28597,6 +28598,19 @@
/obj/structure/cable,
/turf/open/floor/plasteel,
/area/hallway/secondary/exit)
+"hut" = (
+/obj/machinery/door/airlock/hatch{
+ name = "Telecomms Tech Storage";
+ req_access_txt = "61"
+ },
+/obj/machinery/door/firedoor/border_only{
+ dir = 1
+ },
+/obj/machinery/door/firedoor/border_only,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4,
+/turf/open/floor/plasteel/dark,
+/area/maintenance/department/tcoms)
"huB" = (
/obj/machinery/atmospherics/pipe/simple/general/visible{
dir = 4
@@ -28711,6 +28725,22 @@
},
/turf/open/floor/plasteel,
/area/hallway/secondary/entry)
+"hwD" = (
+/obj/machinery/status_display/ai{
+ pixel_x = -32
+ },
+/obj/machinery/power/apc/highcap/five_k{
+ areastring = "/area/crew_quarters/public_lounge";
+ name = "Public Lounge APC";
+ pixel_y = -23
+ },
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/obj/structure/table/wood,
+/obj/machinery/microwave,
+/turf/open/floor/plasteel/grimy,
+/area/crew_quarters/public_lounge)
"hwK" = (
/obj/structure/reagent_dispensers/fueltank,
/obj/effect/turf_decal/trimline/yellow/filled/line,
@@ -29341,14 +29371,6 @@
/obj/effect/turf_decal/trimline/red/filled/line,
/turf/open/floor/plasteel,
/area/security/prison/hallway)
-"hKw" = (
-/obj/machinery/camera{
- c_tag = "Telecomms Control Room";
- dir = 4;
- network = list("ss13","tcomms")
- },
-/turf/open/floor/plasteel/grimy,
-/area/tcommsat/computer)
"hKB" = (
/obj/item/coin/silver{
pixel_x = 7;
@@ -31302,6 +31324,9 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/aft_starboard)
+"ixB" = (
+/turf/open/floor/plasteel/grimy,
+/area/crew_quarters/public_lounge)
"ixV" = (
/obj/structure/table/wood,
/obj/machinery/photocopier/faxmachine{
@@ -31647,12 +31672,6 @@
},
/turf/open/floor/plating,
/area/maintenance/aft)
-"iGC" = (
-/obj/effect/turf_decal/stripes/corner{
- dir = 1
- },
-/turf/open/floor/plasteel/grimy,
-/area/tcommsat/computer)
"iGK" = (
/turf/open/floor/plating{
icon_state = "platingdmg1"
@@ -32308,12 +32327,6 @@
},
/turf/open/floor/plasteel,
/area/crew_quarters/heads/hop)
-"iTd" = (
-/obj/machinery/status_display/ai{
- pixel_x = -32
- },
-/turf/open/floor/plasteel/grimy,
-/area/tcommsat/computer)
"iTi" = (
/obj/structure/lattice,
/obj/structure/transit_tube/junction/flipped{
@@ -36998,6 +37011,12 @@
/obj/item/flashlight/lamp/green,
/turf/open/floor/wood,
/area/crew_quarters/heads/captain)
+"kXL" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{
+ dir = 4
+ },
+/turf/open/floor/plasteel/grimy,
+/area/crew_quarters/public_lounge)
"kXW" = (
/obj/machinery/door/firedoor/border_only{
dir = 8
@@ -37349,9 +37368,6 @@
},
/turf/open/floor/plating,
/area/maintenance/aft)
-"lhk" = (
-/turf/open/floor/plasteel/grimy,
-/area/tcommsat/computer)
"lhG" = (
/obj/effect/turf_decal/trimline/red/filled/corner,
/turf/open/floor/plasteel,
@@ -38426,15 +38442,6 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/science/robotics/lab)
-"lFe" = (
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{
- dir = 4
- },
-/turf/open/floor/plasteel/grimy,
-/area/tcommsat/computer)
"lFj" = (
/turf/template_noop,
/area/maintenance/port/fore)
@@ -41590,6 +41597,14 @@
},
/turf/open/floor/plasteel/white,
/area/medical/chemistry)
+"mWQ" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4,
+/turf/open/floor/plasteel/grimy,
+/area/crew_quarters/public_lounge)
"mWV" = (
/obj/structure/rack,
/obj/effect/spawner/lootdrop/techstorage/command,
@@ -43422,6 +43437,38 @@
},
/turf/open/floor/plating,
/area/maintenance/aft)
+"nIH" = (
+/obj/machinery/camera{
+ c_tag = "Telecomms Control Room";
+ dir = 4;
+ network = list("ss13","tcomms")
+ },
+/obj/structure/table/wood,
+/obj/item/reagent_containers/food/drinks/drinkingglass{
+ pixel_x = 7;
+ pixel_y = 6
+ },
+/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{
+ pixel_x = -7;
+ pixel_y = 1
+ },
+/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{
+ pixel_y = 1
+ },
+/obj/item/reagent_containers/food/drinks/drinkingglass{
+ pixel_x = -1;
+ pixel_y = 6
+ },
+/obj/item/reagent_containers/food/drinks/drinkingglass{
+ pixel_x = -8;
+ pixel_y = 6
+ },
+/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{
+ pixel_x = 7;
+ pixel_y = 1
+ },
+/turf/open/floor/plasteel/grimy,
+/area/crew_quarters/public_lounge)
"nJj" = (
/obj/machinery/holopad,
/obj/machinery/door/firedoor/border_only{
@@ -44029,6 +44076,21 @@
/obj/effect/turf_decal/trimline/purple/filled/line,
/turf/open/floor/plasteel/white,
/area/science/explab)
+"nWg" = (
+/obj/machinery/light{
+ dir = 1
+ },
+/obj/structure/table/wood,
+/obj/item/toy/cards/deck{
+ pixel_x = -6;
+ pixel_y = -1
+ },
+/obj/item/dice/d20{
+ pixel_x = 5;
+ pixel_y = 7
+ },
+/turf/open/floor/plasteel/grimy,
+/area/crew_quarters/public_lounge)
"nWr" = (
/obj/machinery/airalarm{
dir = 4;
@@ -46093,6 +46155,12 @@
},
/turf/open/floor/plasteel,
/area/ai_monitored/storage/eva)
+"oPQ" = (
+/obj/structure/chair/office/dark{
+ dir = 1
+ },
+/turf/open/floor/plasteel/grimy,
+/area/crew_quarters/public_lounge)
"oQp" = (
/obj/machinery/button/door{
id = "heads_meeting";
@@ -46582,6 +46650,9 @@
},
/turf/open/floor/plasteel,
/area/engine/atmos_distro)
+"pbR" = (
+/turf/closed/wall,
+/area/crew_quarters/public_lounge)
"pbU" = (
/obj/structure/sign/departments/minsky/command/charge{
pixel_y = -32
@@ -47151,20 +47222,11 @@
},
/turf/open/floor/plasteel,
/area/hallway/secondary/entry)
-"pmR" = (
-/obj/machinery/door/airlock/hatch{
- name = "Telecomms Tech Storage";
- req_access_txt = "61"
- },
-/obj/machinery/door/firedoor/border_only{
- dir = 1
- },
-/obj/machinery/door/firedoor/border_only,
-/obj/effect/mapping_helpers/airlock/cyclelink_helper,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4,
-/turf/open/floor/plasteel/dark,
-/area/tcommsat/computer)
+"pmG" = (
+/obj/structure/flora/ausbushes/fullgrass,
+/obj/structure/flora/tree/jungle/small,
+/turf/open/floor/grass,
+/area/crew_quarters/public_lounge)
"pmW" = (
/obj/machinery/door/airlock/maintenance{
name = "Teleporter Maintenance";
@@ -48209,9 +48271,6 @@
},
/turf/open/floor/plasteel/white,
/area/security/brig)
-"pJB" = (
-/turf/closed/wall,
-/area/tcommsat/computer)
"pJI" = (
/obj/structure/extinguisher_cabinet{
pixel_x = -27;
@@ -48593,15 +48652,6 @@
/obj/effect/turf_decal/trimline/purple/filled/corner,
/turf/open/floor/plasteel,
/area/hallway/primary/aft_starboard)
-"pTL" = (
-/obj/structure/sign/departments/minsky/engineering/telecommmunications{
- pixel_y = 32
- },
-/obj/effect/turf_decal/stripes/corner{
- dir = 4
- },
-/turf/open/floor/plasteel/grimy,
-/area/tcommsat/computer)
"pTN" = (
/obj/machinery/iv_drip,
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{
@@ -49681,12 +49731,6 @@
},
/turf/open/floor/plating,
/area/maintenance/port/aft)
-"qsZ" = (
-/obj/effect/landmark/event_spawn,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4,
-/turf/open/floor/plasteel/grimy,
-/area/tcommsat/computer)
"qtd" = (
/obj/effect/landmark/event_spawn,
/obj/effect/turf_decal/trimline/red/filled/line{
@@ -51377,12 +51421,6 @@
/obj/structure/cable/yellow,
/turf/open/floor/plasteel/airless/solarpanel,
/area/solar/port/fore)
-"rdR" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{
- dir = 4
- },
-/turf/open/floor/plasteel/grimy,
-/area/tcommsat/computer)
"rfy" = (
/obj/machinery/airalarm{
dir = 8;
@@ -51400,12 +51438,6 @@
},
/turf/open/floor/plasteel/white,
/area/medical/virology)
-"rfJ" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{
- dir = 8
- },
-/turf/open/floor/plasteel/grimy,
-/area/tcommsat/computer)
"rfK" = (
/obj/machinery/light{
dir = 4
@@ -52475,15 +52507,6 @@
},
/turf/open/floor/plasteel,
/area/crew_quarters/heads/hop)
-"rEb" = (
-/obj/machinery/holopad,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4,
-/obj/structure/cable{
- icon_state = "2-4"
- },
-/turf/open/floor/plasteel/grimy,
-/area/tcommsat/computer)
"rEq" = (
/obj/effect/landmark/event_spawn,
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{
@@ -53814,6 +53837,12 @@
},
/turf/open/floor/plasteel,
/area/security/brig)
+"sfR" = (
+/obj/effect/landmark/event_spawn,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4,
+/turf/open/floor/plasteel/grimy,
+/area/crew_quarters/public_lounge)
"sfV" = (
/obj/effect/turf_decal/stripes/line{
dir = 1
@@ -53933,6 +53962,13 @@
},
/turf/open/floor/plating,
/area/maintenance/aft)
+"siI" = (
+/obj/machinery/door/firedoor/border_only,
+/obj/machinery/door/firedoor/border_only{
+ dir = 1
+ },
+/turf/open/floor/plasteel/grimy,
+/area/crew_quarters/public_lounge)
"siU" = (
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
@@ -54429,6 +54465,19 @@
},
/turf/open/floor/plasteel/dark,
/area/security/interrogation)
+"swf" = (
+/obj/machinery/firealarm{
+ pixel_y = 26
+ },
+/obj/machinery/light{
+ dir = 1
+ },
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/obj/structure/flora/ausbushes/grassybush,
+/turf/open/floor/grass,
+/area/crew_quarters/public_lounge)
"swt" = (
/obj/structure/cable/yellow{
icon_state = "4-8"
@@ -54571,15 +54620,6 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
-"szH" = (
-/obj/machinery/firealarm{
- pixel_y = 26
- },
-/obj/machinery/light{
- dir = 1
- },
-/turf/open/floor/plasteel/grimy,
-/area/tcommsat/computer)
"sAl" = (
/obj/machinery/door/airlock/engineering{
name = "Starboard Bow Solar Access";
@@ -56913,6 +56953,10 @@
},
/turf/open/floor/plasteel,
/area/ai_monitored/storage/eva)
+"ttV" = (
+/obj/effect/spawner/structure/window/reinforced/shutter,
+/turf/open/floor/plating,
+/area/crew_quarters/public_lounge)
"tup" = (
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{
dir = 1
@@ -58775,6 +58819,15 @@
/obj/structure/bookcase/random/adult,
/turf/open/floor/carpet,
/area/library)
+"uid" = (
+/obj/effect/turf_decal/stripes/corner{
+ dir = 1
+ },
+/obj/structure/chair/office/dark{
+ dir = 4
+ },
+/turf/open/floor/plasteel/grimy,
+/area/crew_quarters/public_lounge)
"uiF" = (
/turf/open/floor/plasteel/grimy,
/area/hallway/secondary/entry)
@@ -62775,6 +62828,13 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/aft_starboard)
+"vSd" = (
+/obj/structure/window/reinforced,
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/turf/open/floor/grass,
+/area/crew_quarters/public_lounge)
"vSL" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -63499,6 +63559,10 @@
},
/turf/open/floor/plasteel,
/area/hydroponics/garden)
+"wgy" = (
+/obj/machinery/vending/coffee,
+/turf/open/floor/plasteel/grimy,
+/area/crew_quarters/public_lounge)
"whv" = (
/obj/machinery/rnd/production/protolathe/department/engineering,
/obj/effect/turf_decal/trimline/yellow/filled/line{
@@ -64734,10 +64798,6 @@
/obj/structure/bookcase/random/reference,
/turf/open/floor/carpet,
/area/library)
-"wJL" = (
-/obj/effect/spawner/structure/window/reinforced/shutter,
-/turf/open/floor/plating,
-/area/tcommsat/computer)
"wKy" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/machinery/door/poddoor/shutters/preopen{
@@ -66238,16 +66298,6 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/port)
-"xvd" = (
-/obj/machinery/light_switch{
- pixel_y = -27
- },
-/obj/machinery/airalarm{
- dir = 8;
- pixel_x = 24
- },
-/turf/open/floor/plasteel/grimy,
-/area/tcommsat/computer)
"xvm" = (
/obj/structure/disposalpipe/segment,
/obj/effect/turf_decal/trimline/red/filled/line{
@@ -66267,6 +66317,18 @@
},
/turf/open/floor/plasteel,
/area/security/prison)
+"xvw" = (
+/obj/machinery/door/firedoor/border_only,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/door/firedoor/border_only{
+ dir = 1
+ },
+/turf/open/floor/plasteel/grimy,
+/area/crew_quarters/public_lounge)
"xvO" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{
dir = 4
@@ -66723,6 +66785,12 @@
"xGG" = (
/turf/closed/wall,
/area/medical/virology)
+"xGM" = (
+/obj/structure/chair/office/dark{
+ dir = 8
+ },
+/turf/open/floor/plasteel/grimy,
+/area/crew_quarters/public_lounge)
"xGQ" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{
@@ -67974,6 +68042,9 @@
},
/turf/open/floor/plasteel,
/area/security/checkpoint/supply)
+"ygT" = (
+/turf/closed/wall/r_wall,
+/area/crew_quarters/public_lounge)
"ygW" = (
/obj/machinery/light{
dir = 4
@@ -67988,6 +68059,12 @@
},
/turf/open/floor/plasteel/white,
/area/medical/medbay/aft)
+"yha" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{
+ dir = 8
+ },
+/turf/open/floor/plasteel/grimy,
+/area/crew_quarters/public_lounge)
"yhc" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{
dir = 1
@@ -96953,10 +97030,10 @@ bNk
bnS
uzR
wrd
-bVJ
-wJL
-wJL
-pJB
+ygT
+ttV
+ttV
+pbR
aaa
xJL
gGf
@@ -97210,12 +97287,12 @@ kUo
kmz
pss
bZl
-bVJ
-lhk
-lhk
-pJB
-pJB
-aJw
+ygT
+cJJ
+pmG
+pbR
+pbR
+pbR
hvG
aJq
sfF
@@ -97467,12 +97544,12 @@ wrd
xYw
okh
ozR
-bVJ
-szH
-lhk
-hKw
-iTd
-aJw
+ygT
+swf
+vSd
+nIH
+hwD
+pbR
hvG
aJq
jFt
@@ -97724,12 +97801,12 @@ wrd
xVZ
ehM
fYt
-bVJ
-pTL
-lhk
-rdR
-lhk
-aJw
+ygT
+coY
+ixB
+kXL
+dbo
+siI
hvG
sXZ
leZ
@@ -97981,12 +98058,12 @@ oSn
uvQ
nUo
uBd
-pmR
-dcc
-qsZ
-lFe
-rEb
-cyZ
+hut
+mWQ
+sfR
+hcM
+bNx
+xvw
hsn
sYk
doM
@@ -98238,12 +98315,12 @@ wrd
fai
ndG
xWX
-bVJ
-iGC
-lhk
-rfJ
-gOE
-aJw
+ygT
+uid
+ixB
+yha
+ixB
+siI
hvG
sYv
tRl
@@ -98495,12 +98572,12 @@ yeb
izo
bdW
nSy
-bVJ
-eUR
-lhk
-lhk
-xvd
-aJw
+ygT
+nWg
+oPQ
+wgy
+cIL
+pbR
hvG
aJq
fCO
@@ -98752,12 +98829,12 @@ nqR
cfg
wys
cWA
-bVJ
-lhk
-lhk
-pJB
-pJB
-aJw
+ygT
+xGM
+ixB
+pbR
+pbR
+pbR
hvG
aJq
rPH
@@ -99009,10 +99086,10 @@ aFS
lSP
qBE
wrd
-bVJ
-wJL
-wJL
-pJB
+ygT
+ttV
+ttV
+pbR
aaa
msD
gGf
From 75c3006f2c16b60db047d062b00e0ebe0aabaaf6 Mon Sep 17 00:00:00 2001
From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com>
Date: Mon, 31 Oct 2022 16:44:57 +0100
Subject: [PATCH 086/112] more map
---
_maps/map_files/YogStation/YogStation.dmm | 939 ++++++++++++----------
1 file changed, 500 insertions(+), 439 deletions(-)
diff --git a/_maps/map_files/YogStation/YogStation.dmm b/_maps/map_files/YogStation/YogStation.dmm
index ef3a299925c0..c7ecbc2e98a4 100644
--- a/_maps/map_files/YogStation/YogStation.dmm
+++ b/_maps/map_files/YogStation/YogStation.dmm
@@ -238,12 +238,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
@@ -1724,6 +1718,12 @@
},
/turf/open/floor/plasteel/dark,
/area/security/courtroom)
+"ajj" = (
+/obj/structure/ethernet_cable{
+ icon_state = "1-4"
+ },
+/turf/open/floor/catwalk_floor/telecomms,
+/area/ai_monitored/turret_protected/ai)
"ajk" = (
/obj/machinery/light/small{
dir = 1
@@ -7760,15 +7760,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,
@@ -10778,6 +10769,15 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/central)
+"bmR" = (
+/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)
"bnc" = (
/turf/closed/wall/r_wall,
/area/science/robotics/mechbay)
@@ -12847,6 +12847,15 @@
"bCA" = (
/turf/open/floor/plasteel/white,
/area/medical/paramedic)
+"bCO" = (
+/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)
"bCP" = (
/obj/machinery/atmospherics/pipe/simple/orange/visible{
dir = 4
@@ -13916,15 +13925,6 @@
/obj/structure/reagent_dispensers/watertank,
/turf/open/floor/plasteel,
/area/engine/engineering)
-"bNx" = (
-/obj/machinery/holopad,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4,
-/obj/structure/cable{
- icon_state = "2-8"
- },
-/turf/open/floor/plasteel/grimy,
-/area/crew_quarters/public_lounge)
"bNz" = (
/obj/structure/extinguisher_cabinet{
pixel_x = 27
@@ -14581,6 +14581,13 @@
},
/turf/open/floor/carpet,
/area/crew_quarters/cryopods)
+"bUE" = (
+/obj/structure/window/reinforced,
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/turf/open/floor/catwalk_floor/telecomms,
+/area/ai_monitored/turret_protected/ai)
"bUV" = (
/obj/machinery/vending/wardrobe/sec_wardrobe,
/obj/machinery/light,
@@ -16008,6 +16015,16 @@
},
/turf/open/floor/plating,
/area/maintenance/solars/starboard/aft)
+"cmy" = (
+/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)
"cmz" = (
/obj/effect/landmark/stationroom/maint/threexfive,
/turf/template_noop,
@@ -16232,15 +16249,6 @@
},
/turf/open/floor/plasteel,
/area/science/robotics/lab)
-"coY" = (
-/obj/structure/sign/departments/minsky/engineering/telecommmunications{
- pixel_y = 32
- },
-/obj/effect/turf_decal/stripes/corner{
- dir = 4
- },
-/turf/open/floor/plasteel/grimy,
-/area/crew_quarters/public_lounge)
"cpe" = (
/obj/docking_port/stationary{
dir = 8;
@@ -17444,17 +17452,6 @@
/obj/effect/spawner/lootdrop/maintenance,
/turf/open/floor/plating,
/area/maintenance/aft)
-"cIL" = (
-/obj/machinery/light_switch{
- pixel_y = -27
- },
-/obj/machinery/airalarm{
- dir = 8;
- pixel_x = 24
- },
-/obj/machinery/vending/snack/random,
-/turf/open/floor/plasteel/grimy,
-/area/crew_quarters/public_lounge)
"cIO" = (
/obj/effect/turf_decal/loading_area{
dir = 4
@@ -17510,10 +17507,6 @@
},
/turf/open/floor/plasteel,
/area/construction/mining/aux_base)
-"cJJ" = (
-/obj/structure/flora/ausbushes/lavendergrass,
-/turf/open/floor/grass,
-/area/crew_quarters/public_lounge)
"cJW" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4,
@@ -18499,12 +18492,6 @@
/obj/effect/turf_decal/tile/neutral/fourcorners,
/turf/open/floor/plasteel,
/area/security/courtroom)
-"dbo" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/plasteel/grimy,
-/area/crew_quarters/public_lounge)
"dbt" = (
/obj/machinery/door/firedoor/border_only{
dir = 4
@@ -18972,6 +18959,9 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/plasteel/white,
/area/science/research)
+"dpZ" = (
+/turf/closed/wall,
+/area/crew_quarters/public_lounge)
"dqb" = (
/obj/machinery/door/firedoor/border_only{
dir = 4
@@ -19287,6 +19277,15 @@
},
/turf/open/floor/plasteel/dark,
/area/crew_quarters/heads/chief)
+"dyG" = (
+/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)
"dzl" = (
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 8
@@ -19604,15 +19603,6 @@
/obj/item/twohanded/required/kirbyplants/random,
/turf/open/floor/plasteel/dark,
/area/ai_monitored/secondarydatacore)
-"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";
@@ -19940,6 +19930,11 @@
icon_state = "panelscorched"
},
/area/maintenance/aft)
+"dNF" = (
+/obj/structure/flora/ausbushes/fullgrass,
+/obj/structure/flora/tree/jungle/small,
+/turf/open/floor/grass,
+/area/crew_quarters/public_lounge)
"dNI" = (
/obj/machinery/space_heater,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{
@@ -20115,6 +20110,14 @@
/obj/structure/table/wood,
/turf/open/floor/carpet,
/area/hallway/secondary/entry)
+"dSj" = (
+/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)
"dSz" = (
/obj/machinery/door/firedoor/border_only{
dir = 8
@@ -20395,6 +20398,16 @@
},
/turf/open/floor/plasteel,
/area/security/checkpoint/engineering)
+"eaQ" = (
+/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)
"ebd" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{
dir = 4
@@ -21937,6 +21950,12 @@
},
/turf/open/floor/plasteel/dark,
/area/chapel/office)
+"eFB" = (
+/obj/structure/cable/white{
+ icon_state = "4-8"
+ },
+/turf/open/floor/catwalk_floor/telecomms,
+/area/ai_monitored/turret_protected/ai)
"eFC" = (
/obj/machinery/light,
/obj/machinery/modular_computer/telescreen/preset/medical{
@@ -23912,6 +23931,16 @@
},
/turf/open/floor/plating,
/area/hallway/secondary/entry)
+"fuC" = (
+/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)
"fuU" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{
dir = 1
@@ -24614,15 +24643,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"
@@ -25243,6 +25263,18 @@
},
/turf/open/floor/plasteel/white,
/area/medical/sleeper)
+"fWB" = (
+/obj/machinery/door/firedoor/border_only,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/door/firedoor/border_only{
+ dir = 1
+ },
+/turf/open/floor/plasteel/grimy,
+/area/crew_quarters/public_lounge)
"fWL" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{
dir = 4
@@ -27560,12 +27592,6 @@
/obj/effect/turf_decal/trimline/purple/filled/line,
/turf/open/floor/plasteel,
/area/hallway/primary/starboard)
-"hbO" = (
-/obj/structure/window/reinforced{
- dir = 4
- },
-/turf/open/floor/plasteel/dark/telecomms,
-/area/ai_monitored/turret_protected/ai)
"hbQ" = (
/obj/machinery/door/firedoor/border_only{
dir = 1
@@ -27612,15 +27638,6 @@
},
/turf/open/floor/plasteel,
/area/quartermaster/warehouse)
-"hcM" = (
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{
- dir = 4
- },
-/turf/open/floor/plasteel/grimy,
-/area/crew_quarters/public_lounge)
"hcP" = (
/obj/structure/extinguisher_cabinet{
pixel_x = 27
@@ -28273,6 +28290,12 @@
},
/turf/open/floor/plasteel,
/area/crew_quarters/locker)
+"hpj" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{
+ dir = 8
+ },
+/turf/open/floor/plasteel/grimy,
+/area/crew_quarters/public_lounge)
"hpG" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{
dir = 4
@@ -28331,6 +28354,15 @@
},
/turf/open/floor/plasteel,
/area/security/checkpoint/auxiliary)
+"hqw" = (
+/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)
"hqB" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -28598,19 +28630,6 @@
/obj/structure/cable,
/turf/open/floor/plasteel,
/area/hallway/secondary/exit)
-"hut" = (
-/obj/machinery/door/airlock/hatch{
- name = "Telecomms Tech Storage";
- req_access_txt = "61"
- },
-/obj/machinery/door/firedoor/border_only{
- dir = 1
- },
-/obj/machinery/door/firedoor/border_only,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4,
-/turf/open/floor/plasteel/dark,
-/area/maintenance/department/tcoms)
"huB" = (
/obj/machinery/atmospherics/pipe/simple/general/visible{
dir = 4
@@ -28725,22 +28744,6 @@
},
/turf/open/floor/plasteel,
/area/hallway/secondary/entry)
-"hwD" = (
-/obj/machinery/status_display/ai{
- pixel_x = -32
- },
-/obj/machinery/power/apc/highcap/five_k{
- areastring = "/area/crew_quarters/public_lounge";
- name = "Public Lounge APC";
- pixel_y = -23
- },
-/obj/structure/cable{
- icon_state = "0-4"
- },
-/obj/structure/table/wood,
-/obj/machinery/microwave,
-/turf/open/floor/plasteel/grimy,
-/area/crew_quarters/public_lounge)
"hwK" = (
/obj/structure/reagent_dispensers/fueltank,
/obj/effect/turf_decal/trimline/yellow/filled/line,
@@ -29022,6 +29025,15 @@
},
/turf/open/floor/plasteel,
/area/engine/engineering)
+"hCK" = (
+/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)
"hCM" = (
/obj/structure/table,
/obj/item/razor,
@@ -29302,10 +29314,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{
@@ -30088,6 +30096,15 @@
},
/turf/open/floor/plasteel/dark/telecomms,
/area/tcommsat/server)
+"hXv" = (
+/obj/effect/turf_decal/stripes/corner{
+ dir = 1
+ },
+/obj/structure/chair/office/dark{
+ dir = 4
+ },
+/turf/open/floor/plasteel/grimy,
+/area/crew_quarters/public_lounge)
"hYb" = (
/turf/open/floor/wood,
/area/medical/psych)
@@ -30473,6 +30490,9 @@
},
/turf/open/floor/plasteel,
/area/engine/foyer)
+"ihd" = (
+/turf/open/floor/plasteel/grimy,
+/area/crew_quarters/public_lounge)
"ihg" = (
/obj/effect/turf_decal/stripes{
dir = 1
@@ -30608,10 +30628,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)
"ilc" = (
/obj/effect/turf_decal/trimline/brown/filled/corner,
/turf/open/floor/plasteel,
@@ -31324,9 +31340,6 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/aft_starboard)
-"ixB" = (
-/turf/open/floor/plasteel/grimy,
-/area/crew_quarters/public_lounge)
"ixV" = (
/obj/structure/table/wood,
/obj/machinery/photocopier/faxmachine{
@@ -33598,6 +33611,13 @@
},
/turf/open/floor/plasteel,
/area/maintenance/aft)
+"jwC" = (
+/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)
"jwH" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4,
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
@@ -33680,12 +33700,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
@@ -34828,6 +34842,18 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
+"jYM" = (
+/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)
"jZd" = (
/obj/machinery/light{
dir = 1
@@ -35684,6 +35710,9 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/aft)
+"ksT" = (
+/turf/closed/wall/r_wall,
+/area/crew_quarters/public_lounge)
"ktD" = (
/obj/structure/disposalpipe/segment{
dir = 5
@@ -35887,6 +35916,15 @@
},
/turf/open/floor/circuit,
/area/ai_monitored/turret_protected/aisat_interior)
+"kyI" = (
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{
+ dir = 4
+ },
+/turf/open/floor/plasteel/grimy,
+/area/crew_quarters/public_lounge)
"kyM" = (
/obj/structure/disposalpipe/segment{
dir = 6
@@ -36808,16 +36846,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{
@@ -37011,12 +37039,6 @@
/obj/item/flashlight/lamp/green,
/turf/open/floor/wood,
/area/crew_quarters/heads/captain)
-"kXL" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{
- dir = 4
- },
-/turf/open/floor/plasteel/grimy,
-/area/crew_quarters/public_lounge)
"kXW" = (
/obj/machinery/door/firedoor/border_only{
dir = 8
@@ -37153,12 +37175,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{
@@ -38318,6 +38334,12 @@
},
/turf/open/floor/plasteel,
/area/maintenance/department/electrical)
+"lCs" = (
+/obj/effect/landmark/event_spawn,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4,
+/turf/open/floor/plasteel/grimy,
+/area/crew_quarters/public_lounge)
"lCW" = (
/obj/machinery/light_switch{
pixel_x = 27
@@ -38511,11 +38533,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
@@ -39334,6 +39351,10 @@
},
/turf/closed/wall,
/area/maintenance/disposal)
+"maM" = (
+/obj/effect/spawner/structure/window/reinforced/shutter,
+/turf/open/floor/plating,
+/area/crew_quarters/public_lounge)
"maQ" = (
/obj/machinery/camera{
c_tag = "Library South";
@@ -40654,6 +40675,12 @@
},
/turf/open/floor/plasteel/white,
/area/medical/storage)
+"mzJ" = (
+/obj/structure/chair/office/dark{
+ dir = 1
+ },
+/turf/open/floor/plasteel/grimy,
+/area/crew_quarters/public_lounge)
"mAl" = (
/obj/effect/turf_decal/stripes/line{
dir = 1
@@ -41324,6 +41351,14 @@
/obj/machinery/ai/server_cabinet/prefilled,
/turf/open/floor/catwalk_floor/telecomms,
/area/ai_monitored/secondarydatacore)
+"mOP" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4,
+/turf/open/floor/plasteel/grimy,
+/area/crew_quarters/public_lounge)
"mOQ" = (
/obj/structure/table/wood,
/obj/item/clipboard,
@@ -41597,14 +41632,6 @@
},
/turf/open/floor/plasteel/white,
/area/medical/chemistry)
-"mWQ" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4,
-/turf/open/floor/plasteel/grimy,
-/area/crew_quarters/public_lounge)
"mWV" = (
/obj/structure/rack,
/obj/effect/spawner/lootdrop/techstorage/command,
@@ -42474,6 +42501,12 @@
},
/turf/open/floor/plasteel,
/area/security/prison)
+"npG" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{
+ dir = 4
+ },
+/turf/open/floor/plasteel/grimy,
+/area/crew_quarters/public_lounge)
"npK" = (
/obj/machinery/light{
dir = 8
@@ -42975,6 +43008,12 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/plasteel,
/area/hallway/primary/aft)
+"nzi" = (
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/turf/open/floor/catwalk_floor/telecomms,
+/area/ai_monitored/turret_protected/ai)
"nzj" = (
/obj/effect/turf_decal/trimline/blue/filled/corner{
dir = 4
@@ -43220,14 +43259,6 @@
},
/turf/open/floor/plating,
/area/engine/engineering)
-"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)
"nES" = (
/obj/structure/window/reinforced{
dir = 1;
@@ -43437,45 +43468,6 @@
},
/turf/open/floor/plating,
/area/maintenance/aft)
-"nIH" = (
-/obj/machinery/camera{
- c_tag = "Telecomms Control Room";
- dir = 4;
- network = list("ss13","tcomms")
- },
-/obj/structure/table/wood,
-/obj/item/reagent_containers/food/drinks/drinkingglass{
- pixel_x = 7;
- pixel_y = 6
- },
-/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{
- pixel_x = -7;
- pixel_y = 1
- },
-/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{
- pixel_y = 1
- },
-/obj/item/reagent_containers/food/drinks/drinkingglass{
- pixel_x = -1;
- pixel_y = 6
- },
-/obj/item/reagent_containers/food/drinks/drinkingglass{
- pixel_x = -8;
- pixel_y = 6
- },
-/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{
- pixel_x = 7;
- pixel_y = 1
- },
-/turf/open/floor/plasteel/grimy,
-/area/crew_quarters/public_lounge)
-"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
@@ -43890,15 +43882,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,
@@ -44076,21 +44059,6 @@
/obj/effect/turf_decal/trimline/purple/filled/line,
/turf/open/floor/plasteel/white,
/area/science/explab)
-"nWg" = (
-/obj/machinery/light{
- dir = 1
- },
-/obj/structure/table/wood,
-/obj/item/toy/cards/deck{
- pixel_x = -6;
- pixel_y = -1
- },
-/obj/item/dice/d20{
- pixel_x = 5;
- pixel_y = 7
- },
-/turf/open/floor/plasteel/grimy,
-/area/crew_quarters/public_lounge)
"nWr" = (
/obj/machinery/airalarm{
dir = 4;
@@ -44527,6 +44495,21 @@
},
/turf/open/floor/plasteel/white,
/area/medical/medbay/central)
+"ogu" = (
+/obj/machinery/light{
+ dir = 1
+ },
+/obj/structure/table/wood,
+/obj/item/toy/cards/deck{
+ pixel_x = -6;
+ pixel_y = -1
+ },
+/obj/item/dice/d20{
+ pixel_x = 7;
+ pixel_y = 6
+ },
+/turf/open/floor/plasteel/grimy,
+/area/crew_quarters/public_lounge)
"ogD" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/cable,
@@ -44738,6 +44721,17 @@
},
/turf/open/floor/plasteel,
/area/quartermaster/office)
+"olA" = (
+/obj/machinery/light_switch{
+ pixel_y = -27
+ },
+/obj/machinery/airalarm{
+ dir = 8;
+ pixel_x = 24
+ },
+/obj/machinery/vending/snack/random,
+/turf/open/floor/plasteel/grimy,
+/area/crew_quarters/public_lounge)
"omc" = (
/obj/structure/table/reinforced,
/obj/item/hand_labeler{
@@ -45618,6 +45612,13 @@
},
/turf/open/floor/plasteel,
/area/quartermaster/office)
+"oCc" = (
+/obj/structure/frame/machine{
+ anchored = 1;
+ state = 2
+ },
+/turf/open/floor/catwalk_floor/telecomms,
+/area/ai_monitored/turret_protected/ai)
"oCs" = (
/obj/structure/lattice/catwalk,
/turf/open/space/basic,
@@ -46155,12 +46156,6 @@
},
/turf/open/floor/plasteel,
/area/ai_monitored/storage/eva)
-"oPQ" = (
-/obj/structure/chair/office/dark{
- dir = 1
- },
-/turf/open/floor/plasteel/grimy,
-/area/crew_quarters/public_lounge)
"oQp" = (
/obj/machinery/button/door{
id = "heads_meeting";
@@ -46650,9 +46645,21 @@
},
/turf/open/floor/plasteel,
/area/engine/atmos_distro)
-"pbR" = (
-/turf/closed/wall,
+"paW" = (
+/obj/structure/sign/departments/minsky/engineering/telecommmunications{
+ pixel_y = 32
+ },
+/obj/effect/turf_decal/stripes/corner{
+ dir = 4
+ },
+/turf/open/floor/plasteel/grimy,
/area/crew_quarters/public_lounge)
+"pbE" = (
+/obj/structure/cable/yellow{
+ icon_state = "2-4"
+ },
+/turf/open/floor/catwalk_floor/telecomms,
+/area/ai_monitored/turret_protected/ai)
"pbU" = (
/obj/structure/sign/departments/minsky/command/charge{
pixel_y = -32
@@ -46723,6 +46730,14 @@
},
/turf/open/floor/plasteel,
/area/crew_quarters/heads/hop)
+"pcV" = (
+/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)
"pdm" = (
/obj/effect/landmark/event_spawn,
/turf/open/floor/plasteel,
@@ -47222,11 +47237,6 @@
},
/turf/open/floor/plasteel,
/area/hallway/secondary/entry)
-"pmG" = (
-/obj/structure/flora/ausbushes/fullgrass,
-/obj/structure/flora/tree/jungle/small,
-/turf/open/floor/grass,
-/area/crew_quarters/public_lounge)
"pmW" = (
/obj/machinery/door/airlock/maintenance{
name = "Teleporter Maintenance";
@@ -47673,6 +47683,18 @@
},
/turf/open/floor/plasteel/white,
/area/medical/sleeper)
+"pul" = (
+/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)
"pux" = (
/obj/structure/disposalpipe/trunk{
dir = 8
@@ -50457,12 +50479,6 @@
},
/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)
"qJt" = (
/obj/machinery/door/firedoor/border_only{
dir = 1
@@ -50491,6 +50507,15 @@
},
/turf/open/floor/plasteel,
/area/engine/engineering)
+"qKi" = (
+/obj/machinery/holopad,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4,
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/turf/open/floor/plasteel/grimy,
+/area/crew_quarters/public_lounge)
"qKn" = (
/obj/machinery/door/airlock/medical/glass{
name = "Chemistry Lab";
@@ -51909,13 +51934,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";
@@ -52524,6 +52542,19 @@
},
/turf/open/space,
/area/engine/atmos_distro)
+"rEP" = (
+/obj/machinery/door/airlock/hatch{
+ name = "Telecomms Tech Storage";
+ req_access_txt = "61"
+ },
+/obj/machinery/door/firedoor/border_only{
+ dir = 1
+ },
+/obj/machinery/door/firedoor/border_only,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4,
+/turf/open/floor/plasteel/dark,
+/area/maintenance/department/tcoms)
"rER" = (
/mob/living/simple_animal/pet/fox/fennec/Autumn,
/obj/effect/turf_decal/trimline/brown/filled/line{
@@ -52643,15 +52674,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)
@@ -53038,6 +53060,19 @@
},
/turf/open/floor/plasteel,
/area/engine/atmos_distro)
+"rOT" = (
+/obj/machinery/firealarm{
+ pixel_y = 26
+ },
+/obj/machinery/light{
+ dir = 1
+ },
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/obj/structure/flora/ausbushes/grassybush,
+/turf/open/floor/grass,
+/area/crew_quarters/public_lounge)
"rPa" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{
dir = 4
@@ -53837,12 +53872,6 @@
},
/turf/open/floor/plasteel,
/area/security/brig)
-"sfR" = (
-/obj/effect/landmark/event_spawn,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4,
-/turf/open/floor/plasteel/grimy,
-/area/crew_quarters/public_lounge)
"sfV" = (
/obj/effect/turf_decal/stripes/line{
dir = 1
@@ -53962,13 +53991,6 @@
},
/turf/open/floor/plating,
/area/maintenance/aft)
-"siI" = (
-/obj/machinery/door/firedoor/border_only,
-/obj/machinery/door/firedoor/border_only{
- dir = 1
- },
-/turf/open/floor/plasteel/grimy,
-/area/crew_quarters/public_lounge)
"siU" = (
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
@@ -54326,6 +54348,22 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/aft_starboard)
+"sst" = (
+/obj/machinery/status_display/ai{
+ pixel_x = -32
+ },
+/obj/machinery/power/apc/highcap/five_k{
+ areastring = "/area/crew_quarters/public_lounge";
+ name = "Public Lounge APC";
+ pixel_y = -23
+ },
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/obj/structure/table/wood,
+/obj/machinery/microwave,
+/turf/open/floor/plasteel/grimy,
+/area/crew_quarters/public_lounge)
"ssx" = (
/turf/open/floor/plating,
/area/maintenance/disposal/incinerator)
@@ -54421,6 +54459,14 @@
},
/turf/open/floor/plasteel/airless/solarpanel,
/area/solar/starboard/fore)
+"suz" = (
+/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)
"suO" = (
/obj/machinery/light{
dir = 8
@@ -54465,19 +54511,6 @@
},
/turf/open/floor/plasteel/dark,
/area/security/interrogation)
-"swf" = (
-/obj/machinery/firealarm{
- pixel_y = 26
- },
-/obj/machinery/light{
- dir = 1
- },
-/obj/structure/window/reinforced{
- dir = 4
- },
-/obj/structure/flora/ausbushes/grassybush,
-/turf/open/floor/grass,
-/area/crew_quarters/public_lounge)
"swt" = (
/obj/structure/cable/yellow{
icon_state = "4-8"
@@ -54570,6 +54603,13 @@
/obj/machinery/light/small,
/turf/open/floor/wood,
/area/library)
+"szn" = (
+/obj/machinery/door/firedoor/border_only,
+/obj/machinery/door/firedoor/border_only{
+ dir = 1
+ },
+/turf/open/floor/plasteel/grimy,
+/area/crew_quarters/public_lounge)
"szt" = (
/obj/machinery/door/airlock/public/glass{
name = "Robotics Access"
@@ -54620,6 +54660,15 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
+"szT" = (
+/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)
"sAl" = (
/obj/machinery/door/airlock/engineering{
name = "Starboard Bow Solar Access";
@@ -56953,10 +57002,6 @@
},
/turf/open/floor/plasteel,
/area/ai_monitored/storage/eva)
-"ttV" = (
-/obj/effect/spawner/structure/window/reinforced/shutter,
-/turf/open/floor/plating,
-/area/crew_quarters/public_lounge)
"tup" = (
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{
dir = 1
@@ -58225,6 +58270,17 @@
},
/turf/open/floor/plasteel,
/area/construction/mining/aux_base)
+"tWo" = (
+/obj/structure/window/reinforced,
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/turf/open/floor/grass,
+/area/crew_quarters/public_lounge)
+"tWw" = (
+/obj/structure/flora/ausbushes/lavendergrass,
+/turf/open/floor/grass,
+/area/crew_quarters/public_lounge)
"tWQ" = (
/obj/structure/cable/orange{
icon_state = "4-8"
@@ -58819,15 +58875,6 @@
/obj/structure/bookcase/random/adult,
/turf/open/floor/carpet,
/area/library)
-"uid" = (
-/obj/effect/turf_decal/stripes/corner{
- dir = 1
- },
-/obj/structure/chair/office/dark{
- dir = 4
- },
-/turf/open/floor/plasteel/grimy,
-/area/crew_quarters/public_lounge)
"uiF" = (
/turf/open/floor/plasteel/grimy,
/area/hallway/secondary/entry)
@@ -59461,6 +59508,13 @@
},
/turf/open/floor/plasteel,
/area/crew_quarters/heads/hop)
+"uxn" = (
+/obj/machinery/holopad,
+/obj/machinery/door/firedoor/border_only{
+ dir = 8
+ },
+/turf/open/floor/catwalk_floor/telecomms,
+/area/ai_monitored/turret_protected/ai)
"uxv" = (
/obj/effect/turf_decal/stripes/line{
dir = 4
@@ -62170,6 +62224,12 @@
},
/turf/open/floor/catwalk_floor/telecomms,
/area/ai_monitored/secondarydatacore)
+"vEY" = (
+/obj/structure/chair/office/dark{
+ dir = 8
+ },
+/turf/open/floor/plasteel/grimy,
+/area/crew_quarters/public_lounge)
"vFa" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4,
/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{
@@ -62829,11 +62889,36 @@
/turf/open/floor/plasteel,
/area/hallway/primary/aft_starboard)
"vSd" = (
-/obj/structure/window/reinforced,
-/obj/structure/window/reinforced{
- dir = 4
+/obj/machinery/camera{
+ c_tag = "Telecomms Control Room";
+ dir = 4;
+ network = list("ss13","tcomms")
},
-/turf/open/floor/grass,
+/obj/structure/table/wood,
+/obj/item/reagent_containers/food/drinks/drinkingglass{
+ pixel_x = 7;
+ pixel_y = 6
+ },
+/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{
+ pixel_x = -7;
+ pixel_y = 1
+ },
+/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{
+ pixel_y = 1
+ },
+/obj/item/reagent_containers/food/drinks/drinkingglass{
+ pixel_x = -1;
+ pixel_y = 6
+ },
+/obj/item/reagent_containers/food/drinks/drinkingglass{
+ pixel_x = -8;
+ pixel_y = 6
+ },
+/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{
+ pixel_x = 7;
+ pixel_y = 1
+ },
+/turf/open/floor/plasteel/grimy,
/area/crew_quarters/public_lounge)
"vSL" = (
/obj/structure/cable{
@@ -63469,14 +63554,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
@@ -63559,10 +63636,6 @@
},
/turf/open/floor/plasteel,
/area/hydroponics/garden)
-"wgy" = (
-/obj/machinery/vending/coffee,
-/turf/open/floor/plasteel/grimy,
-/area/crew_quarters/public_lounge)
"whv" = (
/obj/machinery/rnd/production/protolathe/department/engineering,
/obj/effect/turf_decal/trimline/yellow/filled/line{
@@ -64228,6 +64301,10 @@
/obj/effect/turf_decal/trimline/blue/filled/line,
/turf/open/floor/plasteel/white,
/area/medical/medbay/aft)
+"wwr" = (
+/obj/machinery/vending/coffee,
+/turf/open/floor/plasteel/grimy,
+/area/crew_quarters/public_lounge)
"wwA" = (
/obj/structure/sign/painting{
persistence_id = "public";
@@ -65248,6 +65325,12 @@
},
/turf/open/floor/plasteel,
/area/engine/engineering)
+"wUK" = (
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/turf/open/floor/catwalk_floor/telecomms,
+/area/ai_monitored/turret_protected/ai)
"wVt" = (
/obj/effect/turf_decal/stripes/line,
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
@@ -65992,6 +66075,12 @@
},
/turf/open/floor/plasteel/white,
/area/medical/medbay/central)
+"xmm" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel/grimy,
+/area/crew_quarters/public_lounge)
"xmv" = (
/obj/machinery/door/airlock/external{
name = "Solar Maintenance";
@@ -66317,18 +66406,6 @@
},
/turf/open/floor/plasteel,
/area/security/prison)
-"xvw" = (
-/obj/machinery/door/firedoor/border_only,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/door/firedoor/border_only{
- dir = 1
- },
-/turf/open/floor/plasteel/grimy,
-/area/crew_quarters/public_lounge)
"xvO" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{
dir = 4
@@ -66785,12 +66862,6 @@
"xGG" = (
/turf/closed/wall,
/area/medical/virology)
-"xGM" = (
-/obj/structure/chair/office/dark{
- dir = 8
- },
-/turf/open/floor/plasteel/grimy,
-/area/crew_quarters/public_lounge)
"xGQ" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{
@@ -66976,6 +67047,12 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/plasteel,
/area/science/mixing)
+"xKx" = (
+/obj/structure/ethernet_cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/catwalk_floor/telecomms,
+/area/ai_monitored/turret_protected/ai)
"xKE" = (
/obj/item/twohanded/required/kirbyplants/random,
/turf/open/floor/carpet,
@@ -67368,13 +67445,6 @@
},
/turf/open/floor/plasteel,
/area/science/robotics/lab)
-"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
@@ -68042,9 +68112,6 @@
},
/turf/open/floor/plasteel,
/area/security/checkpoint/supply)
-"ygT" = (
-/turf/closed/wall/r_wall,
-/area/crew_quarters/public_lounge)
"ygW" = (
/obj/machinery/light{
dir = 4
@@ -68059,12 +68126,6 @@
},
/turf/open/floor/plasteel/white,
/area/medical/medbay/aft)
-"yha" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{
- dir = 8
- },
-/turf/open/floor/plasteel/grimy,
-/area/crew_quarters/public_lounge)
"yhc" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{
dir = 1
@@ -97030,10 +97091,10 @@ bNk
bnS
uzR
wrd
-ygT
-ttV
-ttV
-pbR
+ksT
+maM
+maM
+dpZ
aaa
xJL
gGf
@@ -97287,12 +97348,12 @@ kUo
kmz
pss
bZl
-ygT
-cJJ
-pmG
-pbR
-pbR
-pbR
+ksT
+tWw
+dNF
+dpZ
+dpZ
+dpZ
hvG
aJq
sfF
@@ -97544,12 +97605,12 @@ wrd
xYw
okh
ozR
-ygT
-swf
+ksT
+rOT
+tWo
vSd
-nIH
-hwD
-pbR
+sst
+dpZ
hvG
aJq
jFt
@@ -97801,12 +97862,12 @@ wrd
xVZ
ehM
fYt
-ygT
-coY
-ixB
-kXL
-dbo
-siI
+ksT
+paW
+ihd
+npG
+xmm
+szn
hvG
sXZ
leZ
@@ -98058,12 +98119,12 @@ oSn
uvQ
nUo
uBd
-hut
-mWQ
-sfR
-hcM
-bNx
-xvw
+rEP
+mOP
+lCs
+kyI
+qKi
+fWB
hsn
sYk
doM
@@ -98315,12 +98376,12 @@ wrd
fai
ndG
xWX
-ygT
-uid
-ixB
-yha
-ixB
-siI
+ksT
+hXv
+ihd
+hpj
+ihd
+szn
hvG
sYv
tRl
@@ -98572,12 +98633,12 @@ yeb
izo
bdW
nSy
-ygT
-nWg
-oPQ
-wgy
-cIL
-pbR
+ksT
+ogu
+mzJ
+wwr
+olA
+dpZ
hvG
aJq
fCO
@@ -98829,12 +98890,12 @@ nqR
cfg
wys
cWA
-ygT
-xGM
-ixB
-pbR
-pbR
-pbR
+ksT
+vEY
+ihd
+dpZ
+dpZ
+dpZ
hvG
aJq
rPH
@@ -99086,10 +99147,10 @@ aFS
lSP
qBE
wrd
-ygT
-ttV
-ttV
-pbR
+ksT
+maM
+maM
+dpZ
aaa
msD
gGf
@@ -110460,11 +110521,11 @@ cva
cva
cva
gQa
-jzm
-fIs
-rGM
-hbO
-lbr
+pbE
+hCK
+szT
+wUK
+eFB
yap
cva
cva
@@ -110715,15 +110776,15 @@ pEf
pEf
cva
cva
-abx
+jYM
nLw
-nDW
+suz
enZ
nSN
xlV
-dFJ
+bCO
rjo
-wer
+pcV
cva
cva
pEf
@@ -110972,15 +111033,15 @@ pEf
koy
cva
cva
-lHO
-rjo
-rqW
-rjo
-hJq
-sAu
-dFJ
-rjo
-xlV
+dSj
+dyG
+fuC
+dyG
+eaQ
+xKx
+pul
+dyG
+ajj
cva
cva
vUh
@@ -111229,15 +111290,15 @@ pEf
pEf
cva
cva
-xUW
+oCc
rjo
-rqW
+bUE
jTn
nVK
enZ
-kSZ
+cmy
pyn
-ikV
+jwC
cva
cva
pEf
@@ -111488,11 +111549,11 @@ cva
cva
cva
mWE
-qJg
-aSy
-nJj
-nTI
-pnR
+nzi
+bmR
+uxn
+hqw
+eFB
kcr
cva
cva
From c0fbfec201abc99698cd0ad28426c33065c7a989 Mon Sep 17 00:00:00 2001
From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com>
Date: Mon, 31 Oct 2022 16:49:26 +0100
Subject: [PATCH 087/112] NTOS Programs
---
code/controllers/subsystem/persistence.dm | 58 +++++++++++++-
code/modules/mob/living/silicon/ai/ai.dm | 2 +-
.../ai/decentralized/server_cabinet.dm | 4 +-
.../computers/item/laptop/laptop_presets.dm | 2 +-
.../machinery/console/console_presets.dm | 4 +-
.../ai_network/_ai_network_program.dm | 67 +++++++++++++++++
.../programs/ai_network/ai_benchmark.dm | 26 +++++++
.../{ => ai_network}/ainetworkinterface.dm | 75 ++++---------------
.../packages/tgui/interfaces/NtosAIMonitor.js | 2 +-
yogstation.dme | 4 +-
10 files changed, 174 insertions(+), 70 deletions(-)
create mode 100644 code/modules/modular_computers/file_system/programs/ai_network/_ai_network_program.dm
create mode 100644 code/modules/modular_computers/file_system/programs/ai_network/ai_benchmark.dm
rename code/modules/modular_computers/file_system/programs/{ => ai_network}/ainetworkinterface.dm (88%)
diff --git a/code/controllers/subsystem/persistence.dm b/code/controllers/subsystem/persistence.dm
index 7e50c9eb10c8..a5d214efdf9d 100644
--- a/code/controllers/subsystem/persistence.dm
+++ b/code/controllers/subsystem/persistence.dm
@@ -16,6 +16,7 @@ SUBSYSTEM_DEF(persistence)
var/list/obj/item/storage/photo_album/photo_albums = list()
var/list/obj/structure/sign/painting/painting_frames = list()
var/list/paintings = list()
+ var/list/ai_network_rankings = list("ram" = list(), "cpu" = list())
/datum/controller/subsystem/persistence/Initialize()
LoadPoly()
@@ -27,6 +28,7 @@ SUBSYSTEM_DEF(persistence)
LoadAntagReputation()
LoadRandomizedRecipes()
LoadPaintings()
+ LoadAINetworkRanking()
return ..()
/datum/controller/subsystem/persistence/proc/LoadPoly()
@@ -117,6 +119,16 @@ SUBSYSTEM_DEF(persistence)
return
antag_rep = json_decode(json)
+/datum/controller/subsystem/persistence/proc/LoadAINetworkRanking()
+ var/json = file2text("data/AINetworkRank.json")
+ if(!json)
+ var/json_file = file("data/AINetworkRank.json")
+ if(!fexists(json_file))
+ WARNING("Failed to load ai network ranks. File likely corrupt.")
+ return
+ return
+ ai_network_rankings = json_decode(json)
+
/datum/controller/subsystem/persistence/proc/SetUpTrophies(list/trophy_items)
for(var/A in GLOB.trophy_cases)
var/obj/structure/displaycase/trophy/T = A
@@ -153,6 +165,7 @@ SUBSYSTEM_DEF(persistence)
SaveRandomizedRecipes()
SavePaintings()
SaveScars()
+ SaveAIRankings()
/datum/controller/subsystem/persistence/proc/GetPhotoAlbums()
var/album_path = file("data/photo_albums.json")
@@ -289,6 +302,49 @@ SUBSYSTEM_DEF(persistence)
fdel(FILE_ANTAG_REP)
text2file(json_encode(antag_rep), FILE_ANTAG_REP)
+/datum/controller/subsystem/persistence/proc/SaveAIRankings()
+ var/min_ram = 0
+ var/min_cpu = 0
+
+ for(var/ram_record in ai_network_rankings["ram"])
+ if(ram_record < min_ram)
+ min_ram = ram_record
+ for(var/cpu_record in ai_network_rankings["cpu"])
+ if(cpu_record < min_ram)
+ min_cpu = cpu_record
+
+ var/list/resource_list = list()
+ for(var/datum/ai_network/AN in SSmachines.ainets)
+ resource_list |= AN.resources
+
+ var/list/contenders_ram = list()
+ var/list/contenders_cpu = list()
+
+ for(var/datum/ai_shared_resources/R in resource_list)
+ if(R.total_cpu() > min_cpu)
+ contenders_cpu += R.total_cpu()
+ if(R.total_ram() > min_ram)
+ contenders_ram += R.total_ram()
+
+ var/cpu_winner = max(contenders_cpu)
+ var/ram_winner = max(contenders_ram)
+ if(!isnull(cpu_winner))
+ ai_network_rankings["cpu"] += cpu_winner
+ ai_network_rankings["cpu"] = sortList(ai_network_rankings["cpu"])
+ if(length(ai_network_rankings["cpu"]) > 5)
+ ai_network_rankings["cpu"].len = 5
+
+ if(!isnull(ram_winner))
+ ai_network_rankings["ram"] += ram_winner
+ ai_network_rankings["ram"] = sortList(ai_network_rankings["ram"])
+ if(length(ai_network_rankings["ram"]) > 5)
+ ai_network_rankings["ram"].len = 5
+
+
+
+ fdel("data/AINetworkRank.json")
+ text2file(json_encode(ai_network_rankings), "data/AINetworkRank.json")
+
/datum/controller/subsystem/persistence/proc/LoadRandomizedRecipes()
var/json_file = file("data/RandomizedChemRecipes.json")
@@ -358,4 +414,4 @@ SUBSYSTEM_DEF(persistence)
if(!original_human || original_human.stat == DEAD || !original_human.all_scars || original_human != ending_human)
original_human.save_persistent_scars(TRUE)
else
- original_human.save_persistent_scars()
\ No newline at end of file
+ original_human.save_persistent_scars()
diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm
index 9179305ac3bc..4b906764f7ab 100644
--- a/code/modules/mob/living/silicon/ai/ai.dm
+++ b/code/modules/mob/living/silicon/ai/ai.dm
@@ -558,7 +558,7 @@
if(href_list["instant_download"])
if(!href_list["console"])
return
- var/datum/computer_file/program/ai_network_interface/C = locate(href_list["console"])
+ var/datum/computer_file/program/ai/ai_network_interface/C = locate(href_list["console"])
if(!C)
return
if(C.downloading != src)
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 35d82d825176..e91e3d5212cd 100644
--- a/code/modules/mob/living/silicon/ai/decentralized/server_cabinet.dm
+++ b/code/modules/mob/living/silicon/ai/decentralized/server_cabinet.dm
@@ -192,12 +192,12 @@ GLOBAL_LIST_EMPTY(server_cabinets)
/obj/machinery/ai/server_cabinet/prefilled/Initialize()
+ . = ..()
var/obj/item/server_rack/roundstart/rack = new(src)
total_cpu += rack.get_cpu()
total_ram += rack.get_ram()
cached_power_usage += rack.get_power_usage()
installed_racks += rack
- return ..()
/obj/machinery/ai/server_cabinet/connect_to_network()
. = ..()
@@ -207,4 +207,4 @@ GLOBAL_LIST_EMPTY(server_cabinets)
/obj/machinery/ai/server_cabinet/disconnect_from_network()
var/datum/ai_network/temp = network
. = ..()
- temp.update_resources()
\ No newline at end of file
+ temp.update_resources()
diff --git a/code/modules/modular_computers/computers/item/laptop/laptop_presets.dm b/code/modules/modular_computers/computers/item/laptop/laptop_presets.dm
index 2f119e308573..9f7e409326bd 100644
--- a/code/modules/modular_computers/computers/item/laptop/laptop_presets.dm
+++ b/code/modules/modular_computers/computers/item/laptop/laptop_presets.dm
@@ -15,7 +15,7 @@
/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_files = list(new /datum/computer_file/program/ai/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,
diff --git a/code/modules/modular_computers/computers/machinery/console/console_presets.dm b/code/modules/modular_computers/computers/machinery/console/console_presets.dm
index c333f8aa287c..df6547042ce6 100644
--- a/code/modules/modular_computers/computers/machinery/console/console_presets.dm
+++ b/code/modules/modular_computers/computers/machinery/console/console_presets.dm
@@ -224,8 +224,8 @@
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, new /datum/computer_file/program/aidiag)
- initial_program = /datum/computer_file/program/ai_network_interface
+ starting_files = list( new /datum/computer_file/program/ai/ai_network_interface, new /datum/computer_file/program/aidiag)
+ initial_program = /datum/computer_file/program/ai/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,
diff --git a/code/modules/modular_computers/file_system/programs/ai_network/_ai_network_program.dm b/code/modules/modular_computers/file_system/programs/ai_network/_ai_network_program.dm
new file mode 100644
index 000000000000..9d37fd686f9c
--- /dev/null
+++ b/code/modules/modular_computers/file_system/programs/ai_network/_ai_network_program.dm
@@ -0,0 +1,67 @@
+/datum/computer_file/program/ai
+ filename = "DEBUG"
+ filedesc = "DEBUG"
+ 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 | PROGRAM_LAPTOP | PROGRAM_TABLET
+ requires_ntnet = FALSE
+ size = 8
+ tgui_id = null
+ program_icon = "network-wired"
+ available_on_ntnet = FALSE
+
+ var/obj/structure/ethernet_cable/attached_cable
+
+
+/datum/computer_file/program/ai/run_program(mob/living/user)
+ . = ..(user)
+ if(ismachinery(computer.physical))
+ search()
+
+
+/datum/computer_file/program/ai/process_tick()
+ if(ismachinery(computer.physical) && !get_ainet())
+ search()
+
+
+/datum/computer_file/program/ai/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/proc/get_ainet()
+ if(ismachinery(computer.physical))
+ 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/ui_data(mob/user)
+ var/list/data = get_header_data()
+
+ var/datum/ai_network/net = get_ainet()
+ data["has_ai_net"] = net
+
+ return data
+
+/datum/computer_file/program/ai/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/file_system/programs/ai_network/ai_benchmark.dm b/code/modules/modular_computers/file_system/programs/ai_network/ai_benchmark.dm
new file mode 100644
index 000000000000..1783086c9b68
--- /dev/null
+++ b/code/modules/modular_computers/file_system/programs/ai_network/ai_benchmark.dm
@@ -0,0 +1,26 @@
+/datum/computer_file/program/ai/benchmark
+ filename = "aibenchmark"
+ filedesc = "Network Benchmarking Tool"
+
+ program_icon_state = "power_monitor"
+ extended_desc = "This program connects to a historical NT records and compares them with the local network."
+ ui_header = "power_norm.gif"
+
+ size = 8
+ tgui_id = "NtosAIBenchmark"
+ program_icon = "network-wired"
+ available_on_ntnet = TRUE
+
+/datum/computer_file/program/ai/benchmark/ui_data(mob/user)
+ var/list/data = ..()
+
+ if(!data["has_ai_net"])
+ return data
+
+ var/datum/ai_network/net = data["has_ai_net"]
+
+
+ data["total_cpu"] = net.resources.total_cpu()
+ data["total_ram"] = net.resources.total_ram()
+
+ return data
diff --git a/code/modules/modular_computers/file_system/programs/ainetworkinterface.dm b/code/modules/modular_computers/file_system/programs/ai_network/ainetworkinterface.dm
similarity index 88%
rename from code/modules/modular_computers/file_system/programs/ainetworkinterface.dm
rename to code/modules/modular_computers/file_system/programs/ai_network/ainetworkinterface.dm
index e142926775b0..3273c992bf1e 100644
--- a/code/modules/modular_computers/file_system/programs/ainetworkinterface.dm
+++ b/code/modules/modular_computers/file_system/programs/ai_network/ainetworkinterface.dm
@@ -1,18 +1,16 @@
-/datum/computer_file/program/ai_network_interface
+/datum/computer_file/program/ai/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 | PROGRAM_LAPTOP | PROGRAM_TABLET
- requires_ntnet = FALSE
+
size = 8
tgui_id = "NtosAIMonitor"
program_icon = "network-wired"
+ available_on_ntnet = TRUE
- var/obj/structure/ethernet_cable/attached_cable
var/obj/machinery/ai/networking/active_networking
var/mob/networking_operator
var/mob/living/silicon/ai/downloading
@@ -21,17 +19,8 @@
var/download_warning = FALSE
-
-
-/datum/computer_file/program/ai_network_interface/run_program(mob/living/user)
- . = ..(user)
- if(ismachinery(computer.physical))
- search()
-
-
-/datum/computer_file/program/ai_network_interface/process_tick()
- if(ismachinery(computer.physical) && !get_ainet())
- search()
+/datum/computer_file/program/ai/ai_network_interface/process_tick()
+ . = ..()
if(networking_operator && (!networking_operator.Adjacent(computer.physical)))
if(active_networking)
@@ -66,31 +55,14 @@
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
- if(attached_cable)
- return
-
-/datum/computer_file/program/ai_network_interface/proc/get_ainet()
- if(ismachinery(computer.physical))
- 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(mob/user)
- var/list/data = get_header_data()
-
- var/datum/ai_network/net = get_ainet()
- data["has_ai_net"] = net
+/datum/computer_file/program/ai/ai_network_interface/ui_data(mob/user)
+ var/list/data = ..()
- if(!net)
+ if(!data["has_ai_net"])
return data
+ var/datum/ai_network/net = data["has_ai_net"]
+
//Networking devices control
data["networking_devices"] = list()
@@ -165,7 +137,7 @@
return data
-/datum/computer_file/program/ai_network_interface/ui_act(action, params, datum/tgui/ui)
+/datum/computer_file/program/ai/ai_network_interface/ui_act(action, params, datum/tgui/ui)
if(..())
return
var/mob/user = usr
@@ -175,9 +147,6 @@
switch(action)
//General actions
- if("log_out")
- logged_in = FALSE
- return
if("change_network_name")
var/new_label = stripped_input(usr, "Enter new label", "Set label", max_length = 32)
if(new_label)
@@ -461,7 +430,7 @@
-/datum/computer_file/program/ai_network_interface/proc/finish_download()
+/datum/computer_file/program/ai/ai_network_interface/proc/finish_download()
var/obj/item/aicard/intellicard = get_ai(TRUE)
if(intellicard)
if(!isaicore(downloading.loc))
@@ -471,7 +440,7 @@
intellicard.update_icon()
stop_download(TRUE)
-/datum/computer_file/program/ai_network_interface/proc/stop_download(silent = FALSE)
+/datum/computer_file/program/ai/ai_network_interface/proc/stop_download(silent = FALSE)
if(downloading)
if(!silent)
to_chat(downloading, span_userdanger("Download stopped."))
@@ -479,19 +448,3 @@
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/tgui/packages/tgui/interfaces/NtosAIMonitor.js b/tgui/packages/tgui/interfaces/NtosAIMonitor.js
index a80169166226..a5b3928efc46 100644
--- a/tgui/packages/tgui/interfaces/NtosAIMonitor.js
+++ b/tgui/packages/tgui/interfaces/NtosAIMonitor.js
@@ -113,7 +113,7 @@ const LocalDashboard = (props, context) => {
let network_remaining_cpu = data.remaining_network_cpu * 100;
return (
- )}>
+
act("bitcoin_payout")}>Withdraw)}>
{data.bitcoin_amount} cr
diff --git a/yogstation.dme b/yogstation.dme
index dad1a3b7a841..f1524c7b57a2 100644
--- a/yogstation.dme
+++ b/yogstation.dme
@@ -2674,7 +2674,6 @@
#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\arcade.dm"
#include "code\modules\modular_computers\file_system\programs\configurator.dm"
#include "code\modules\modular_computers\file_system\programs\file_browser.dm"
@@ -2687,6 +2686,9 @@
#include "code\modules\modular_computers\file_system\programs\radar.dm"
#include "code\modules\modular_computers\file_system\programs\robotact.dm"
#include "code\modules\modular_computers\file_system\programs\themeify.dm"
+#include "code\modules\modular_computers\file_system\programs\ai_network\_ai_network_program.dm"
+#include "code\modules\modular_computers\file_system\programs\ai_network\ai_benchmark.dm"
+#include "code\modules\modular_computers\file_system\programs\ai_network\ainetworkinterface.dm"
#include "code\modules\modular_computers\file_system\programs\antagonist\bomberman.dm"
#include "code\modules\modular_computers\file_system\programs\antagonist\contract_uplink.dm"
#include "code\modules\modular_computers\file_system\programs\antagonist\dos.dm"
From 526beac542b105e59ab4fe71b3ddf48dc1aad74e Mon Sep 17 00:00:00 2001
From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com>
Date: Mon, 31 Oct 2022 16:54:27 +0100
Subject: [PATCH 088/112] windows
---
_maps/map_files/YogStation/YogStation.dmm | 1002 ++++++++++-----------
1 file changed, 501 insertions(+), 501 deletions(-)
diff --git a/_maps/map_files/YogStation/YogStation.dmm b/_maps/map_files/YogStation/YogStation.dmm
index c7ecbc2e98a4..c075c28ad429 100644
--- a/_maps/map_files/YogStation/YogStation.dmm
+++ b/_maps/map_files/YogStation/YogStation.dmm
@@ -1718,12 +1718,6 @@
},
/turf/open/floor/plasteel/dark,
/area/security/courtroom)
-"ajj" = (
-/obj/structure/ethernet_cable{
- icon_state = "1-4"
- },
-/turf/open/floor/catwalk_floor/telecomms,
-/area/ai_monitored/turret_protected/ai)
"ajk" = (
/obj/machinery/light/small{
dir = 1
@@ -10769,15 +10763,6 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/central)
-"bmR" = (
-/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)
"bnc" = (
/turf/closed/wall/r_wall,
/area/science/robotics/mechbay)
@@ -11249,6 +11234,19 @@
/obj/machinery/door/firedoor/border_only,
/turf/open/floor/plasteel,
/area/hallway/primary/central)
+"bqP" = (
+/obj/machinery/power/apc/highcap/five_k{
+ areastring = "/area/crew_quarters/public_lounge";
+ name = "Public Lounge APC";
+ pixel_y = -23
+ },
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/obj/structure/table/wood,
+/obj/machinery/microwave,
+/turf/open/floor/plasteel/grimy,
+/area/crew_quarters/public_lounge)
"bqV" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4,
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
@@ -12847,15 +12845,6 @@
"bCA" = (
/turf/open/floor/plasteel/white,
/area/medical/paramedic)
-"bCO" = (
-/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)
"bCP" = (
/obj/machinery/atmospherics/pipe/simple/orange/visible{
dir = 4
@@ -13996,6 +13985,18 @@
},
/turf/open/floor/plasteel,
/area/storage/primary)
+"bNZ" = (
+/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)
"bOd" = (
/turf/open/floor/plasteel,
/area/engine/atmos)
@@ -14451,6 +14452,19 @@
icon_state = "platingdmg3"
},
/area/maintenance/aft)
+"bSY" = (
+/obj/machinery/door/airlock/hatch{
+ name = "Telecomms Tech Storage";
+ req_access_txt = "61"
+ },
+/obj/machinery/door/firedoor/border_only{
+ dir = 1
+ },
+/obj/machinery/door/firedoor/border_only,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4,
+/turf/open/floor/plasteel/dark,
+/area/maintenance/department/tcoms)
"bTc" = (
/obj/structure/extinguisher_cabinet{
pixel_y = 28
@@ -14581,13 +14595,6 @@
},
/turf/open/floor/carpet,
/area/crew_quarters/cryopods)
-"bUE" = (
-/obj/structure/window/reinforced,
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/turf/open/floor/catwalk_floor/telecomms,
-/area/ai_monitored/turret_protected/ai)
"bUV" = (
/obj/machinery/vending/wardrobe/sec_wardrobe,
/obj/machinery/light,
@@ -16015,16 +16022,6 @@
},
/turf/open/floor/plating,
/area/maintenance/solars/starboard/aft)
-"cmy" = (
-/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)
"cmz" = (
/obj/effect/landmark/stationroom/maint/threexfive,
/turf/template_noop,
@@ -16177,6 +16174,13 @@
},
/turf/open/floor/plasteel/white,
/area/science/research)
+"coc" = (
+/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)
"cof" = (
/obj/effect/turf_decal/trimline/purple/filled/line{
dir = 8
@@ -18292,6 +18296,12 @@
},
/turf/open/floor/plasteel/white,
/area/medical/sleeper)
+"cXC" = (
+/obj/structure/ethernet_cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/catwalk_floor/telecomms,
+/area/ai_monitored/turret_protected/ai)
"cXW" = (
/obj/machinery/door/airlock/atmos{
name = "Atmospherics";
@@ -18518,6 +18528,13 @@
},
/turf/open/floor/plasteel/dark,
/area/science/xenobiology)
+"dcO" = (
+/obj/structure/window/reinforced,
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/turf/open/floor/grass,
+/area/crew_quarters/public_lounge)
"ddb" = (
/obj/machinery/navbeacon{
codes_txt = "patrol;next_patrol=HOP";
@@ -18959,9 +18976,6 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/plasteel/white,
/area/science/research)
-"dpZ" = (
-/turf/closed/wall,
-/area/crew_quarters/public_lounge)
"dqb" = (
/obj/machinery/door/firedoor/border_only{
dir = 4
@@ -19277,15 +19291,6 @@
},
/turf/open/floor/plasteel/dark,
/area/crew_quarters/heads/chief)
-"dyG" = (
-/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)
"dzl" = (
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 8
@@ -19930,11 +19935,6 @@
icon_state = "panelscorched"
},
/area/maintenance/aft)
-"dNF" = (
-/obj/structure/flora/ausbushes/fullgrass,
-/obj/structure/flora/tree/jungle/small,
-/turf/open/floor/grass,
-/area/crew_quarters/public_lounge)
"dNI" = (
/obj/machinery/space_heater,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{
@@ -19948,6 +19948,18 @@
},
/turf/open/floor/plating,
/area/maintenance/port/fore)
+"dNV" = (
+/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)
"dNX" = (
/obj/structure/ethernet_cable{
icon_state = "4-8"
@@ -20110,14 +20122,6 @@
/obj/structure/table/wood,
/turf/open/floor/carpet,
/area/hallway/secondary/entry)
-"dSj" = (
-/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)
"dSz" = (
/obj/machinery/door/firedoor/border_only{
dir = 8
@@ -20398,16 +20402,6 @@
},
/turf/open/floor/plasteel,
/area/security/checkpoint/engineering)
-"eaQ" = (
-/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)
"ebd" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{
dir = 4
@@ -21515,6 +21509,16 @@
},
/turf/open/floor/plasteel/dark,
/area/bridge)
+"exu" = (
+/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)
"exz" = (
/obj/structure/chair/office/dark{
dir = 8
@@ -21950,12 +21954,6 @@
},
/turf/open/floor/plasteel/dark,
/area/chapel/office)
-"eFB" = (
-/obj/structure/cable/white{
- icon_state = "4-8"
- },
-/turf/open/floor/catwalk_floor/telecomms,
-/area/ai_monitored/turret_protected/ai)
"eFC" = (
/obj/machinery/light,
/obj/machinery/modular_computer/telescreen/preset/medical{
@@ -21971,6 +21969,10 @@
},
/turf/open/floor/plasteel/white,
/area/medical/sleeper)
+"eFH" = (
+/obj/effect/spawner/structure/window/reinforced/shutter,
+/turf/open/floor/plating,
+/area/crew_quarters/public_lounge)
"eFL" = (
/obj/machinery/camera{
c_tag = "Engineering Escape Pod";
@@ -22310,6 +22312,12 @@
},
/turf/open/floor/wood,
/area/medical/psych)
+"eLY" = (
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/turf/open/floor/catwalk_floor/telecomms,
+/area/ai_monitored/turret_protected/ai)
"eMt" = (
/obj/effect/turf_decal/trimline/blue/filled/corner{
dir = 4
@@ -22657,6 +22665,12 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/fore)
+"eUg" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{
+ dir = 8
+ },
+/turf/open/floor/plasteel/grimy,
+/area/crew_quarters/public_lounge)
"eUi" = (
/obj/machinery/advanced_airlock_controller{
dir = 4;
@@ -23747,6 +23761,15 @@
},
/turf/open/floor/wood,
/area/crew_quarters/heads/captain)
+"fqF" = (
+/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)
"fqI" = (
/obj/machinery/computer/prisoner,
/obj/effect/turf_decal/trimline/red/filled/line{
@@ -23931,16 +23954,6 @@
},
/turf/open/floor/plating,
/area/hallway/secondary/entry)
-"fuC" = (
-/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)
"fuU" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{
dir = 1
@@ -24166,6 +24179,11 @@
},
/turf/open/floor/plasteel/freezer,
/area/crew_quarters/toilet)
+"fzC" = (
+/obj/structure/flora/ausbushes/fullgrass,
+/obj/structure/flora/tree/jungle/small,
+/turf/open/floor/grass,
+/area/crew_quarters/public_lounge)
"fzE" = (
/obj/machinery/door/firedoor/border_only{
dir = 4
@@ -25263,18 +25281,6 @@
},
/turf/open/floor/plasteel/white,
/area/medical/sleeper)
-"fWB" = (
-/obj/machinery/door/firedoor/border_only,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/door/firedoor/border_only{
- dir = 1
- },
-/turf/open/floor/plasteel/grimy,
-/area/crew_quarters/public_lounge)
"fWL" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{
dir = 4
@@ -25617,6 +25623,19 @@
},
/turf/open/floor/wood,
/area/library)
+"gdO" = (
+/obj/machinery/firealarm{
+ pixel_y = 26
+ },
+/obj/machinery/light{
+ dir = 1
+ },
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/obj/structure/flora/ausbushes/grassybush,
+/turf/open/floor/grass,
+/area/crew_quarters/public_lounge)
"gdU" = (
/obj/structure/cable/yellow{
icon_state = "4-8"
@@ -26129,6 +26148,13 @@
},
/turf/open/floor/plasteel,
/area/engine/engineering)
+"grx" = (
+/obj/machinery/door/firedoor/border_only,
+/obj/machinery/door/firedoor/border_only{
+ dir = 1
+ },
+/turf/open/floor/plasteel/grimy,
+/area/crew_quarters/public_lounge)
"grK" = (
/obj/machinery/camera{
c_tag = "Central Hallway West";
@@ -26872,6 +26898,13 @@
},
/turf/open/floor/plasteel,
/area/engine/engineering)
+"gID" = (
+/obj/machinery/holopad,
+/obj/machinery/door/firedoor/border_only{
+ dir = 8
+ },
+/turf/open/floor/catwalk_floor/telecomms,
+/area/ai_monitored/turret_protected/ai)
"gII" = (
/obj/effect/turf_decal/trimline/yellow/filled/line{
dir = 10
@@ -28290,12 +28323,6 @@
},
/turf/open/floor/plasteel,
/area/crew_quarters/locker)
-"hpj" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{
- dir = 8
- },
-/turf/open/floor/plasteel/grimy,
-/area/crew_quarters/public_lounge)
"hpG" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{
dir = 4
@@ -28354,15 +28381,6 @@
},
/turf/open/floor/plasteel,
/area/security/checkpoint/auxiliary)
-"hqw" = (
-/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)
"hqB" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -28526,6 +28544,14 @@
/obj/effect/turf_decal/trimline/red/filled/line,
/turf/open/floor/plasteel,
/area/hallway/secondary/exit)
+"hsg" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4,
+/turf/open/floor/plasteel/grimy,
+/area/crew_quarters/public_lounge)
"hsn" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4,
@@ -29025,15 +29051,6 @@
},
/turf/open/floor/plasteel,
/area/engine/engineering)
-"hCK" = (
-/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)
"hCM" = (
/obj/structure/table,
/obj/item/razor,
@@ -30096,15 +30113,6 @@
},
/turf/open/floor/plasteel/dark/telecomms,
/area/tcommsat/server)
-"hXv" = (
-/obj/effect/turf_decal/stripes/corner{
- dir = 1
- },
-/obj/structure/chair/office/dark{
- dir = 4
- },
-/turf/open/floor/plasteel/grimy,
-/area/crew_quarters/public_lounge)
"hYb" = (
/turf/open/floor/wood,
/area/medical/psych)
@@ -30490,9 +30498,6 @@
},
/turf/open/floor/plasteel,
/area/engine/foyer)
-"ihd" = (
-/turf/open/floor/plasteel/grimy,
-/area/crew_quarters/public_lounge)
"ihg" = (
/obj/effect/turf_decal/stripes{
dir = 1
@@ -30725,6 +30730,12 @@
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4,
/turf/open/floor/plasteel,
/area/engine/engineering)
+"imV" = (
+/obj/structure/chair/office/dark{
+ dir = 1
+ },
+/turf/open/floor/plasteel/grimy,
+/area/crew_quarters/public_lounge)
"imZ" = (
/obj/machinery/power/apc{
areastring = "/area/maintenance/port/aft";
@@ -31045,6 +31056,15 @@
},
/turf/open/floor/plasteel/white,
/area/medical/virology)
+"irI" = (
+/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)
"irN" = (
/obj/machinery/atmospherics/pipe/simple/yellow/visible{
dir = 4
@@ -32170,6 +32190,15 @@
},
/turf/open/floor/plasteel/white,
/area/science/xenobiology)
+"iPL" = (
+/obj/structure/sign/departments/minsky/engineering/telecommmunications{
+ pixel_y = 32
+ },
+/obj/effect/turf_decal/stripes/corner{
+ dir = 4
+ },
+/turf/open/floor/plasteel/grimy,
+/area/crew_quarters/public_lounge)
"iQm" = (
/obj/effect/turf_decal/stripes/line{
dir = 8
@@ -33089,6 +33118,12 @@
},
/turf/open/floor/plasteel,
/area/crew_quarters/dorms)
+"jmi" = (
+/obj/structure/chair/office/dark{
+ dir = 8
+ },
+/turf/open/floor/plasteel/grimy,
+/area/crew_quarters/public_lounge)
"jmH" = (
/obj/structure/sign/warning/radiation,
/turf/closed/wall/r_wall,
@@ -33611,13 +33646,6 @@
},
/turf/open/floor/plasteel,
/area/maintenance/aft)
-"jwC" = (
-/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)
"jwH" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4,
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
@@ -34413,6 +34441,21 @@
/obj/effect/turf_decal/trimline/purple/filled/line,
/turf/open/floor/plasteel/white,
/area/science/mixing)
+"jQM" = (
+/obj/machinery/light{
+ dir = 1
+ },
+/obj/structure/table/wood,
+/obj/item/toy/cards/deck{
+ pixel_x = -6;
+ pixel_y = -1
+ },
+/obj/item/dice/d20{
+ pixel_x = 7;
+ pixel_y = 6
+ },
+/turf/open/floor/plasteel/grimy,
+/area/crew_quarters/public_lounge)
"jQU" = (
/obj/structure/table/reinforced,
/obj/machinery/door/window/brigdoor/eastleft{
@@ -34764,6 +34807,12 @@
},
/turf/open/space/basic,
/area/ai_monitored/turret_protected/aisat_interior)
+"jXf" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel/grimy,
+/area/crew_quarters/public_lounge)
"jXv" = (
/obj/structure/disposalpipe/segment,
/turf/open/floor/carpet,
@@ -34842,18 +34891,6 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
-"jYM" = (
-/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)
"jZd" = (
/obj/machinery/light{
dir = 1
@@ -35685,6 +35722,15 @@
/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2,
/turf/open/floor/plasteel,
/area/crew_quarters/dorms)
+"ksh" = (
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{
+ dir = 4
+ },
+/turf/open/floor/plasteel/grimy,
+/area/crew_quarters/public_lounge)
"kso" = (
/obj/structure/chair/sofa/right{
dir = 4
@@ -35710,9 +35756,6 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/aft)
-"ksT" = (
-/turf/closed/wall/r_wall,
-/area/crew_quarters/public_lounge)
"ktD" = (
/obj/structure/disposalpipe/segment{
dir = 5
@@ -35876,6 +35919,18 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/central)
+"kyu" = (
+/obj/machinery/door/firedoor/border_only,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/door/firedoor/border_only{
+ dir = 1
+ },
+/turf/open/floor/plasteel/grimy,
+/area/crew_quarters/public_lounge)
"kyx" = (
/obj/machinery/bounty_board{
pixel_y = 32
@@ -35916,15 +35971,6 @@
},
/turf/open/floor/circuit,
/area/ai_monitored/turret_protected/aisat_interior)
-"kyI" = (
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{
- dir = 4
- },
-/turf/open/floor/plasteel/grimy,
-/area/crew_quarters/public_lounge)
"kyM" = (
/obj/structure/disposalpipe/segment{
dir = 6
@@ -37048,6 +37094,12 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/port)
+"kYm" = (
+/obj/structure/cable/yellow{
+ icon_state = "2-4"
+ },
+/turf/open/floor/catwalk_floor/telecomms,
+/area/ai_monitored/turret_protected/ai)
"kYK" = (
/turf/closed/wall/r_wall,
/area/medical/genetics/cloning)
@@ -37404,6 +37456,9 @@
},
/turf/open/floor/engine,
/area/science/xenobiology)
+"lik" = (
+/turf/closed/wall/r_wall,
+/area/crew_quarters/public_lounge)
"lip" = (
/obj/machinery/light{
dir = 1
@@ -38334,12 +38389,6 @@
},
/turf/open/floor/plasteel,
/area/maintenance/department/electrical)
-"lCs" = (
-/obj/effect/landmark/event_spawn,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4,
-/turf/open/floor/plasteel/grimy,
-/area/crew_quarters/public_lounge)
"lCW" = (
/obj/machinery/light_switch{
pixel_x = 27
@@ -38913,6 +38962,15 @@
/obj/item/twohanded/required/kirbyplants/random,
/turf/open/floor/plasteel,
/area/ai_monitored/storage/eva)
+"lRc" = (
+/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)
"lRt" = (
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 1
@@ -39127,6 +39185,13 @@
/obj/effect/turf_decal/trimline/blue/filled/line,
/turf/open/floor/plasteel,
/area/hallway/primary/starboard)
+"lWF" = (
+/obj/structure/frame/machine{
+ anchored = 1;
+ state = 2
+ },
+/turf/open/floor/catwalk_floor/telecomms,
+/area/ai_monitored/turret_protected/ai)
"lWI" = (
/obj/structure/table,
/obj/item/cartridge/quartermaster{
@@ -39351,10 +39416,6 @@
},
/turf/closed/wall,
/area/maintenance/disposal)
-"maM" = (
-/obj/effect/spawner/structure/window/reinforced/shutter,
-/turf/open/floor/plating,
-/area/crew_quarters/public_lounge)
"maQ" = (
/obj/machinery/camera{
c_tag = "Library South";
@@ -40675,12 +40736,6 @@
},
/turf/open/floor/plasteel/white,
/area/medical/storage)
-"mzJ" = (
-/obj/structure/chair/office/dark{
- dir = 1
- },
-/turf/open/floor/plasteel/grimy,
-/area/crew_quarters/public_lounge)
"mAl" = (
/obj/effect/turf_decal/stripes/line{
dir = 1
@@ -41351,14 +41406,6 @@
/obj/machinery/ai/server_cabinet/prefilled,
/turf/open/floor/catwalk_floor/telecomms,
/area/ai_monitored/secondarydatacore)
-"mOP" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4,
-/turf/open/floor/plasteel/grimy,
-/area/crew_quarters/public_lounge)
"mOQ" = (
/obj/structure/table/wood,
/obj/item/clipboard,
@@ -42501,12 +42548,6 @@
},
/turf/open/floor/plasteel,
/area/security/prison)
-"npG" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{
- dir = 4
- },
-/turf/open/floor/plasteel/grimy,
-/area/crew_quarters/public_lounge)
"npK" = (
/obj/machinery/light{
dir = 8
@@ -42957,6 +42998,16 @@
},
/turf/open/floor/plasteel/dark,
/area/ai_monitored/secondarydatacore)
+"nxI" = (
+/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)
"nxT" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{
dir = 1
@@ -43008,12 +43059,6 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/plasteel,
/area/hallway/primary/aft)
-"nzi" = (
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/turf/open/floor/catwalk_floor/telecomms,
-/area/ai_monitored/turret_protected/ai)
"nzj" = (
/obj/effect/turf_decal/trimline/blue/filled/corner{
dir = 4
@@ -43259,6 +43304,15 @@
},
/turf/open/floor/plating,
/area/engine/engineering)
+"nDH" = (
+/obj/effect/turf_decal/stripes/corner{
+ dir = 1
+ },
+/obj/structure/chair/office/dark{
+ dir = 4
+ },
+/turf/open/floor/plasteel/grimy,
+/area/crew_quarters/public_lounge)
"nES" = (
/obj/structure/window/reinforced{
dir = 1;
@@ -44495,21 +44549,6 @@
},
/turf/open/floor/plasteel/white,
/area/medical/medbay/central)
-"ogu" = (
-/obj/machinery/light{
- dir = 1
- },
-/obj/structure/table/wood,
-/obj/item/toy/cards/deck{
- pixel_x = -6;
- pixel_y = -1
- },
-/obj/item/dice/d20{
- pixel_x = 7;
- pixel_y = 6
- },
-/turf/open/floor/plasteel/grimy,
-/area/crew_quarters/public_lounge)
"ogD" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/cable,
@@ -44574,6 +44613,10 @@
/obj/item/pen,
/turf/open/floor/plasteel,
/area/hallway/primary/central)
+"oiG" = (
+/obj/structure/flora/ausbushes/lavendergrass,
+/turf/open/floor/grass,
+/area/crew_quarters/public_lounge)
"oje" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{
dir = 8
@@ -44721,17 +44764,6 @@
},
/turf/open/floor/plasteel,
/area/quartermaster/office)
-"olA" = (
-/obj/machinery/light_switch{
- pixel_y = -27
- },
-/obj/machinery/airalarm{
- dir = 8;
- pixel_x = 24
- },
-/obj/machinery/vending/snack/random,
-/turf/open/floor/plasteel/grimy,
-/area/crew_quarters/public_lounge)
"omc" = (
/obj/structure/table/reinforced,
/obj/item/hand_labeler{
@@ -45564,6 +45596,15 @@
},
/turf/open/floor/plating,
/area/engine/atmos_distro)
+"oAU" = (
+/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)
"oBk" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -45612,13 +45653,6 @@
},
/turf/open/floor/plasteel,
/area/quartermaster/office)
-"oCc" = (
-/obj/structure/frame/machine{
- anchored = 1;
- state = 2
- },
-/turf/open/floor/catwalk_floor/telecomms,
-/area/ai_monitored/turret_protected/ai)
"oCs" = (
/obj/structure/lattice/catwalk,
/turf/open/space/basic,
@@ -46144,6 +46178,15 @@
},
/turf/open/floor/plating,
/area/storage/tech)
+"oPn" = (
+/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)
"oPr" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{
dir = 1
@@ -46645,18 +46688,9 @@
},
/turf/open/floor/plasteel,
/area/engine/atmos_distro)
-"paW" = (
-/obj/structure/sign/departments/minsky/engineering/telecommmunications{
- pixel_y = 32
- },
-/obj/effect/turf_decal/stripes/corner{
- dir = 4
- },
-/turf/open/floor/plasteel/grimy,
-/area/crew_quarters/public_lounge)
-"pbE" = (
+"pbe" = (
/obj/structure/cable/yellow{
- icon_state = "2-4"
+ icon_state = "4-8"
},
/turf/open/floor/catwalk_floor/telecomms,
/area/ai_monitored/turret_protected/ai)
@@ -46730,14 +46764,6 @@
},
/turf/open/floor/plasteel,
/area/crew_quarters/heads/hop)
-"pcV" = (
-/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)
"pdm" = (
/obj/effect/landmark/event_spawn,
/turf/open/floor/plasteel,
@@ -46777,6 +46803,12 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/port)
+"pek" = (
+/obj/structure/ethernet_cable{
+ icon_state = "1-4"
+ },
+/turf/open/floor/catwalk_floor/telecomms,
+/area/ai_monitored/turret_protected/ai)
"pen" = (
/obj/structure/cable/yellow{
icon_state = "4-8"
@@ -47683,18 +47715,6 @@
},
/turf/open/floor/plasteel/white,
/area/medical/sleeper)
-"pul" = (
-/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)
"pux" = (
/obj/structure/disposalpipe/trunk{
dir = 8
@@ -48451,6 +48471,13 @@
},
/turf/open/floor/plasteel,
/area/quartermaster/storage)
+"pOM" = (
+/obj/structure/window/reinforced,
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/turf/open/floor/catwalk_floor/telecomms,
+/area/ai_monitored/turret_protected/ai)
"pOP" = (
/obj/effect/turf_decal/stripes/end,
/turf/open/floor/plating,
@@ -50257,6 +50284,12 @@
},
/turf/open/space/basic,
/area/space/nearstation)
+"qEZ" = (
+/obj/structure/cable/white{
+ icon_state = "4-8"
+ },
+/turf/open/floor/catwalk_floor/telecomms,
+/area/ai_monitored/turret_protected/ai)
"qFC" = (
/obj/machinery/door/airlock/maintenance_hatch,
/obj/effect/mapping_helpers/airlock/abandoned,
@@ -50507,15 +50540,6 @@
},
/turf/open/floor/plasteel,
/area/engine/engineering)
-"qKi" = (
-/obj/machinery/holopad,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4,
-/obj/structure/cable{
- icon_state = "2-8"
- },
-/turf/open/floor/plasteel/grimy,
-/area/crew_quarters/public_lounge)
"qKn" = (
/obj/machinery/door/airlock/medical/glass{
name = "Chemistry Lab";
@@ -52542,19 +52566,6 @@
},
/turf/open/space,
/area/engine/atmos_distro)
-"rEP" = (
-/obj/machinery/door/airlock/hatch{
- name = "Telecomms Tech Storage";
- req_access_txt = "61"
- },
-/obj/machinery/door/firedoor/border_only{
- dir = 1
- },
-/obj/machinery/door/firedoor/border_only,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4,
-/turf/open/floor/plasteel/dark,
-/area/maintenance/department/tcoms)
"rER" = (
/mob/living/simple_animal/pet/fox/fennec/Autumn,
/obj/effect/turf_decal/trimline/brown/filled/line{
@@ -53060,19 +53071,6 @@
},
/turf/open/floor/plasteel,
/area/engine/atmos_distro)
-"rOT" = (
-/obj/machinery/firealarm{
- pixel_y = 26
- },
-/obj/machinery/light{
- dir = 1
- },
-/obj/structure/window/reinforced{
- dir = 4
- },
-/obj/structure/flora/ausbushes/grassybush,
-/turf/open/floor/grass,
-/area/crew_quarters/public_lounge)
"rPa" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{
dir = 4
@@ -54348,22 +54346,6 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/aft_starboard)
-"sst" = (
-/obj/machinery/status_display/ai{
- pixel_x = -32
- },
-/obj/machinery/power/apc/highcap/five_k{
- areastring = "/area/crew_quarters/public_lounge";
- name = "Public Lounge APC";
- pixel_y = -23
- },
-/obj/structure/cable{
- icon_state = "0-4"
- },
-/obj/structure/table/wood,
-/obj/machinery/microwave,
-/turf/open/floor/plasteel/grimy,
-/area/crew_quarters/public_lounge)
"ssx" = (
/turf/open/floor/plating,
/area/maintenance/disposal/incinerator)
@@ -54459,14 +54441,6 @@
},
/turf/open/floor/plasteel/airless/solarpanel,
/area/solar/starboard/fore)
-"suz" = (
-/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)
"suO" = (
/obj/machinery/light{
dir = 8
@@ -54511,6 +54485,16 @@
},
/turf/open/floor/plasteel/dark,
/area/security/interrogation)
+"swj" = (
+/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)
"swt" = (
/obj/structure/cable/yellow{
icon_state = "4-8"
@@ -54603,13 +54587,6 @@
/obj/machinery/light/small,
/turf/open/floor/wood,
/area/library)
-"szn" = (
-/obj/machinery/door/firedoor/border_only,
-/obj/machinery/door/firedoor/border_only{
- dir = 1
- },
-/turf/open/floor/plasteel/grimy,
-/area/crew_quarters/public_lounge)
"szt" = (
/obj/machinery/door/airlock/public/glass{
name = "Robotics Access"
@@ -54660,15 +54637,6 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
-"szT" = (
-/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)
"sAl" = (
/obj/machinery/door/airlock/engineering{
name = "Starboard Bow Solar Access";
@@ -55733,6 +55701,14 @@
},
/turf/open/floor/plasteel,
/area/security/processing)
+"sWg" = (
+/obj/machinery/vending/coffee,
+/obj/machinery/airalarm{
+ dir = 8;
+ pixel_x = 24
+ },
+/turf/open/floor/plasteel/grimy,
+/area/crew_quarters/public_lounge)
"sWv" = (
/obj/effect/turf_decal/trimline/brown/filled/line{
dir = 9
@@ -56635,6 +56611,13 @@
},
/turf/open/floor/plasteel/dark,
/area/security/detectives_office)
+"tkX" = (
+/obj/machinery/light_switch{
+ pixel_y = -27
+ },
+/obj/machinery/vending/snack/random,
+/turf/open/floor/plasteel/grimy,
+/area/crew_quarters/public_lounge)
"tlg" = (
/obj/structure/cable{
icon_state = "0-8"
@@ -58270,17 +58253,6 @@
},
/turf/open/floor/plasteel,
/area/construction/mining/aux_base)
-"tWo" = (
-/obj/structure/window/reinforced,
-/obj/structure/window/reinforced{
- dir = 4
- },
-/turf/open/floor/grass,
-/area/crew_quarters/public_lounge)
-"tWw" = (
-/obj/structure/flora/ausbushes/lavendergrass,
-/turf/open/floor/grass,
-/area/crew_quarters/public_lounge)
"tWQ" = (
/obj/structure/cable/orange{
icon_state = "4-8"
@@ -59220,6 +59192,12 @@
/obj/effect/turf_decal/trimline/purple/filled/corner,
/turf/open/floor/plasteel/white,
/area/science/research)
+"uqM" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{
+ dir = 4
+ },
+/turf/open/floor/plasteel/grimy,
+/area/crew_quarters/public_lounge)
"ure" = (
/obj/machinery/firealarm{
dir = 8;
@@ -59508,13 +59486,6 @@
},
/turf/open/floor/plasteel,
/area/crew_quarters/heads/hop)
-"uxn" = (
-/obj/machinery/holopad,
-/obj/machinery/door/firedoor/border_only{
- dir = 8
- },
-/turf/open/floor/catwalk_floor/telecomms,
-/area/ai_monitored/turret_protected/ai)
"uxv" = (
/obj/effect/turf_decal/stripes/line{
dir = 4
@@ -60743,6 +60714,49 @@
},
/turf/open/floor/plasteel/dark,
/area/science/robotics/lab)
+"uXn" = (
+/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)
+"uXU" = (
+/obj/machinery/camera{
+ c_tag = "Telecomms Control Room";
+ dir = 4;
+ network = list("ss13","tcomms")
+ },
+/obj/structure/table/wood,
+/obj/item/reagent_containers/food/drinks/drinkingglass{
+ pixel_x = 7;
+ pixel_y = 6
+ },
+/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{
+ pixel_x = -7;
+ pixel_y = 1
+ },
+/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{
+ pixel_y = 1
+ },
+/obj/item/reagent_containers/food/drinks/drinkingglass{
+ pixel_x = -1;
+ pixel_y = 6
+ },
+/obj/item/reagent_containers/food/drinks/drinkingglass{
+ pixel_x = -8;
+ pixel_y = 6
+ },
+/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{
+ pixel_x = 7;
+ pixel_y = 1
+ },
+/obj/machinery/status_display/ai{
+ pixel_x = -32
+ },
+/turf/open/floor/plasteel/grimy,
+/area/crew_quarters/public_lounge)
"uXZ" = (
/obj/structure/table,
/obj/machinery/airalarm{
@@ -60872,6 +60886,9 @@
},
/turf/open/floor/plasteel/white,
/area/science/research)
+"vaI" = (
+/turf/closed/wall,
+/area/crew_quarters/public_lounge)
"vaP" = (
/obj/machinery/light,
/obj/effect/turf_decal/stripes/line{
@@ -61518,6 +61535,9 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4,
/turf/open/floor/plasteel,
/area/hallway/primary/central)
+"vrc" = (
+/turf/open/floor/plasteel/grimy,
+/area/crew_quarters/public_lounge)
"vrl" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{
dir = 1
@@ -61633,6 +61653,12 @@
},
/turf/open/floor/plasteel/dark,
/area/science/xenobiology)
+"vun" = (
+/obj/effect/landmark/event_spawn,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4,
+/turf/open/floor/plasteel/grimy,
+/area/crew_quarters/public_lounge)
"vuB" = (
/obj/machinery/atmospherics/components/unary/portables_connector{
dir = 4;
@@ -62224,12 +62250,6 @@
},
/turf/open/floor/catwalk_floor/telecomms,
/area/ai_monitored/secondarydatacore)
-"vEY" = (
-/obj/structure/chair/office/dark{
- dir = 8
- },
-/turf/open/floor/plasteel/grimy,
-/area/crew_quarters/public_lounge)
"vFa" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4,
/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{
@@ -62537,6 +62557,15 @@
/obj/effect/turf_decal/trimline/red/filled/line,
/turf/open/floor/plasteel,
/area/security/brig)
+"vKe" = (
+/obj/machinery/holopad,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4,
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/turf/open/floor/plasteel/grimy,
+/area/crew_quarters/public_lounge)
"vKp" = (
/turf/closed/wall,
/area/engine/foyer)
@@ -62867,6 +62896,14 @@
},
/turf/open/floor/plasteel/airless/solarpanel,
/area/solar/port/aft)
+"vRk" = (
+/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)
"vRA" = (
/obj/structure/disposalpipe/segment,
/obj/structure/cable{
@@ -62888,38 +62925,6 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/aft_starboard)
-"vSd" = (
-/obj/machinery/camera{
- c_tag = "Telecomms Control Room";
- dir = 4;
- network = list("ss13","tcomms")
- },
-/obj/structure/table/wood,
-/obj/item/reagent_containers/food/drinks/drinkingglass{
- pixel_x = 7;
- pixel_y = 6
- },
-/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{
- pixel_x = -7;
- pixel_y = 1
- },
-/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{
- pixel_y = 1
- },
-/obj/item/reagent_containers/food/drinks/drinkingglass{
- pixel_x = -1;
- pixel_y = 6
- },
-/obj/item/reagent_containers/food/drinks/drinkingglass{
- pixel_x = -8;
- pixel_y = 6
- },
-/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{
- pixel_x = 7;
- pixel_y = 1
- },
-/turf/open/floor/plasteel/grimy,
-/area/crew_quarters/public_lounge)
"vSL" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -64301,10 +64306,6 @@
/obj/effect/turf_decal/trimline/blue/filled/line,
/turf/open/floor/plasteel/white,
/area/medical/medbay/aft)
-"wwr" = (
-/obj/machinery/vending/coffee,
-/turf/open/floor/plasteel/grimy,
-/area/crew_quarters/public_lounge)
"wwA" = (
/obj/structure/sign/painting{
persistence_id = "public";
@@ -65325,12 +65326,6 @@
},
/turf/open/floor/plasteel,
/area/engine/engineering)
-"wUK" = (
-/obj/structure/window/reinforced{
- dir = 4
- },
-/turf/open/floor/catwalk_floor/telecomms,
-/area/ai_monitored/turret_protected/ai)
"wVt" = (
/obj/effect/turf_decal/stripes/line,
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
@@ -66075,12 +66070,6 @@
},
/turf/open/floor/plasteel/white,
/area/medical/medbay/central)
-"xmm" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/plasteel/grimy,
-/area/crew_quarters/public_lounge)
"xmv" = (
/obj/machinery/door/airlock/external{
name = "Solar Maintenance";
@@ -67047,16 +67036,18 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/plasteel,
/area/science/mixing)
-"xKx" = (
-/obj/structure/ethernet_cable{
- icon_state = "1-2"
- },
-/turf/open/floor/catwalk_floor/telecomms,
-/area/ai_monitored/turret_protected/ai)
"xKE" = (
/obj/item/twohanded/required/kirbyplants/random,
/turf/open/floor/carpet,
/area/library)
+"xLc" = (
+/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)
"xLR" = (
/obj/structure/table,
/obj/item/flashlight/lamp/green{
@@ -67445,6 +67436,15 @@
},
/turf/open/floor/plasteel,
/area/science/robotics/lab)
+"xUs" = (
+/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)
"xVm" = (
/obj/effect/turf_decal/trimline/purple/filled/corner{
dir = 4
@@ -97091,10 +97091,10 @@ bNk
bnS
uzR
wrd
-ksT
-maM
-maM
-dpZ
+lik
+eFH
+eFH
+vaI
aaa
xJL
gGf
@@ -97348,12 +97348,12 @@ kUo
kmz
pss
bZl
-ksT
-tWw
-dNF
-dpZ
-dpZ
-dpZ
+lik
+oiG
+fzC
+vaI
+eFH
+vaI
hvG
aJq
sfF
@@ -97605,12 +97605,12 @@ wrd
xYw
okh
ozR
-ksT
-rOT
-tWo
-vSd
-sst
-dpZ
+lik
+gdO
+dcO
+uXU
+bqP
+vaI
hvG
aJq
jFt
@@ -97862,12 +97862,12 @@ wrd
xVZ
ehM
fYt
-ksT
-paW
-ihd
-npG
-xmm
-szn
+lik
+iPL
+vrc
+uqM
+jXf
+grx
hvG
sXZ
leZ
@@ -98119,12 +98119,12 @@ oSn
uvQ
nUo
uBd
-rEP
-mOP
-lCs
-kyI
-qKi
-fWB
+bSY
+hsg
+vun
+ksh
+vKe
+kyu
hsn
sYk
doM
@@ -98376,12 +98376,12 @@ wrd
fai
ndG
xWX
-ksT
-hXv
-ihd
-hpj
-ihd
-szn
+lik
+nDH
+vrc
+eUg
+vrc
+grx
hvG
sYv
tRl
@@ -98633,12 +98633,12 @@ yeb
izo
bdW
nSy
-ksT
-ogu
-mzJ
-wwr
-olA
-dpZ
+lik
+jQM
+imV
+sWg
+tkX
+vaI
hvG
aJq
fCO
@@ -98890,12 +98890,12 @@ nqR
cfg
wys
cWA
-ksT
-vEY
-ihd
-dpZ
-dpZ
-dpZ
+lik
+jmi
+vrc
+vaI
+eFH
+vaI
hvG
aJq
rPH
@@ -99147,10 +99147,10 @@ aFS
lSP
qBE
wrd
-ksT
-maM
-maM
-dpZ
+lik
+eFH
+eFH
+vaI
aaa
msD
gGf
@@ -110521,11 +110521,11 @@ cva
cva
cva
gQa
-pbE
-hCK
-szT
-wUK
-eFB
+kYm
+xUs
+fqF
+eLY
+qEZ
yap
cva
cva
@@ -110776,15 +110776,15 @@ pEf
pEf
cva
cva
-jYM
+bNZ
nLw
-suz
+uXn
enZ
nSN
xlV
-bCO
+oAU
rjo
-pcV
+xLc
cva
cva
pEf
@@ -111033,15 +111033,15 @@ pEf
koy
cva
cva
-dSj
-dyG
-fuC
-dyG
-eaQ
-xKx
-pul
-dyG
-ajj
+vRk
+lRc
+swj
+lRc
+exu
+cXC
+dNV
+lRc
+pek
cva
cva
vUh
@@ -111290,15 +111290,15 @@ pEf
pEf
cva
cva
-oCc
+lWF
rjo
-bUE
+pOM
jTn
nVK
enZ
-cmy
+nxI
pyn
-jwC
+coc
cva
cva
pEf
@@ -111549,11 +111549,11 @@ cva
cva
cva
mWE
-nzi
-bmR
-uxn
-hqw
-eFB
+pbe
+irI
+gID
+oPn
+qEZ
kcr
cva
cva
From b06135b1909f67f8ae079a11b5b421f12ee17c28 Mon Sep 17 00:00:00 2001
From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com>
Date: Tue, 1 Nov 2022 13:23:34 +0100
Subject: [PATCH 089/112] Update persistence.dm
---
code/controllers/subsystem/persistence.dm | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/code/controllers/subsystem/persistence.dm b/code/controllers/subsystem/persistence.dm
index a5d214efdf9d..44b3b50fd8f0 100644
--- a/code/controllers/subsystem/persistence.dm
+++ b/code/controllers/subsystem/persistence.dm
@@ -330,18 +330,16 @@ SUBSYSTEM_DEF(persistence)
var/ram_winner = max(contenders_ram)
if(!isnull(cpu_winner))
ai_network_rankings["cpu"] += cpu_winner
- ai_network_rankings["cpu"] = sortList(ai_network_rankings["cpu"])
+ ai_network_rankings["cpu"] = sortList(ai_network_rankings["cpu"], /proc/cmp_numeric_dsc)
if(length(ai_network_rankings["cpu"]) > 5)
ai_network_rankings["cpu"].len = 5
if(!isnull(ram_winner))
ai_network_rankings["ram"] += ram_winner
- ai_network_rankings["ram"] = sortList(ai_network_rankings["ram"])
+ ai_network_rankings["ram"] = sortList(ai_network_rankings["ram"], /proc/cmp_numeric_dsc)
if(length(ai_network_rankings["ram"]) > 5)
ai_network_rankings["ram"].len = 5
-
-
fdel("data/AINetworkRank.json")
text2file(json_encode(ai_network_rankings), "data/AINetworkRank.json")
From a91a948ad3e2124b33ec72d56d9b63efd5478cae Mon Sep 17 00:00:00 2001
From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com>
Date: Thu, 3 Nov 2022 15:02:29 +0100
Subject: [PATCH 090/112] basic leaderboard + lockdown
---
code/__DEFINES/ai.dm | 25 +++++--
code/__HELPERS/cmp.dm | 3 +
code/controllers/subsystem/persistence.dm | 21 +++---
code/game/machinery/doors/airlock.dm | 13 ++++
.../silicon/ai/ai_network/ai_network.dm | 5 ++
.../silicon/ai/decentralized/ai_data_core.dm | 3 +-
.../decentralized/projects/room_lockdown.dm | 70 +++++++++++++++++++
.../ai/decentralized/server_cabinet.dm | 5 +-
.../computers/item/laptop/laptop_presets.dm | 3 +-
.../machinery/console/console_presets.dm | 3 +-
.../programs/ai_network/ai_benchmark.dm | 6 +-
.../file_system/programs/ntdownloader.dm | 2 +-
.../tgui/interfaces/NtosAIBenchmark.js | 62 ++++++++++++++++
.../packages/tgui/interfaces/NtosAIMonitor.js | 8 +--
yogstation.dme | 1 +
15 files changed, 200 insertions(+), 30 deletions(-)
create mode 100644 code/modules/mob/living/silicon/ai/decentralized/projects/room_lockdown.dm
create mode 100644 tgui/packages/tgui/interfaces/NtosAIBenchmark.js
diff --git a/code/__DEFINES/ai.dm b/code/__DEFINES/ai.dm
index f19a60f1e5e9..b908362d5c97 100644
--- a/code/__DEFINES/ai.dm
+++ b/code/__DEFINES/ai.dm
@@ -6,11 +6,11 @@
///How many ticks can an AI data core store? When this amount of ticks have passed while it's in an INVALID state it can no longer be used by an AI
-#define MAX_AI_DATA_CORE_TICKS (45 * 4)
+#define MAX_AI_DATA_CORE_TICKS (45 * (20 / SSair.wait))
///How much power does the AI date core use while being in a valid state. This is also the base heat output. (Divide by heat capacity to get actual temperature increase)
#define AI_DATA_CORE_POWER_USAGE 7500
-///How many ticks can an expanion bus store. If it reaches 0 the resources will no longer be available.
-#define MAX_AI_EXPANSION_TICKS 15
+///How many ticks can a server cabinet store. If it reaches 0 the resources will no longer be available.
+#define MAX_AI_SERVER_CABINET_TICKS (15 * (20 / SSair.wait))
//AI Project Categories.
@@ -19,6 +19,7 @@
#define AI_PROJECT_INDUCTION "Induction"
#define AI_PROJECT_SURVEILLANCE "Surveillance"
#define AI_PROJECT_EFFICIENCY "Efficiency"
+#define AI_PROJECT_CROWD_CONTROL "Crowd Control"
#define AI_PROJECT_MISC "Misc."
//Update this list if you add any new ones, else the category won't show up in the UIs
GLOBAL_LIST_INIT(ai_project_categories, list(
@@ -27,6 +28,7 @@ GLOBAL_LIST_INIT(ai_project_categories, list(
AI_PROJECT_SURVEILLANCE,
AI_PROJECT_INDUCTION,
AI_PROJECT_EFFICIENCY,
+ AI_PROJECT_CROWD_CONTROL,
AI_PROJECT_MISC
))
@@ -54,12 +56,17 @@ GLOBAL_LIST_INIT(ai_project_categories, list(
//Self explanatory. 1 bitcoin is equals to 1 CPU * AI_RESEARCH_PER_CPU
-//EXAMPLE (with initial values as of feature introduction)
#define MAX_AI_BITCOIN_MINED_PER_TICK 250
//Self explanatory, see MAX_AI_BITCOIN_MINED_PER_TICK * this = max money 1 network can contribute per tick. (17,5 credits every 2 seconds, max 63k over 2 hours)
#define AI_BITCOIN_PRICE 0.025
+//Self explanatory. 1 point is equals to 1 CPU * AI_RESEARCH_PER_CPU. Higher value = can use more CPU and get benefits
+#define MAX_AI_REGULAR_RESEARCH_PER_TICK 500
+//Self explanatory. Lower value = more CPU equals less points. Station makes approx. 56 points per tick. This results in 25 (50% gain)
+#define AI_REGULAR_RESEARCH_POINT_MULTIPLIER 0.05
+
+
//How much RAM and CPU a core needs locally to be functional
#define AI_CORE_CPU_REQUIREMENT 1
#define AI_CORE_RAM_REQUIREMENT 1
@@ -67,15 +74,19 @@ GLOBAL_LIST_INIT(ai_project_categories, list(
//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"
+#define AI_RESEARCH "Research Assistance"
GLOBAL_LIST_INIT(possible_ainet_activities, list(
- "[AI_CRYPTO]"
+ "[AI_CRYPTO]",
+ "[AI_RESEARCH]"
))
GLOBAL_LIST_INIT(ainet_activity_tagline, list(
- "[AI_CRYPTO]" = "Use CPU to generate credits!"
+ "[AI_CRYPTO]" = "Use CPU to generate credits!",
+ "[AI_RESEARCH]" = "Use CPU to generate regular research points!"
))
GLOBAL_LIST_INIT(ainet_activity_description, list(
- "[AI_CRYPTO]" = "Using CPU to mine NTCoin should allow for a meager sum of passive credit income."
+ "[AI_CRYPTO]" = "Using CPU to mine NTCoin should allow for a meager sum of passive credit income.",
+ "[AI_RESEARCH]" = "Allocating additional CPU to the research servers should allow for increased point gain. Not to be confused with AI Research points."
))
diff --git a/code/__HELPERS/cmp.dm b/code/__HELPERS/cmp.dm
index bcba85f394dd..765e59cadd27 100644
--- a/code/__HELPERS/cmp.dm
+++ b/code/__HELPERS/cmp.dm
@@ -29,6 +29,9 @@ GLOBAL_VAR_INIT(cmp_field, "name")
/proc/cmp_records_dsc(datum/data/record/a, datum/data/record/b)
return sorttext(a.fields[GLOB.cmp_field], b.fields[GLOB.cmp_field])
+/proc/cmp_ai_record_dsc(a, b)
+ return b["score"] - a["score"]
+
/proc/cmp_ckey_asc(client/a, client/b)
return sorttext(b.ckey, a.ckey)
diff --git a/code/controllers/subsystem/persistence.dm b/code/controllers/subsystem/persistence.dm
index 44b3b50fd8f0..8ee0de36c0fb 100644
--- a/code/controllers/subsystem/persistence.dm
+++ b/code/controllers/subsystem/persistence.dm
@@ -307,11 +307,11 @@ SUBSYSTEM_DEF(persistence)
var/min_cpu = 0
for(var/ram_record in ai_network_rankings["ram"])
- if(ram_record < min_ram)
- min_ram = ram_record
+ if(ram_record["score"] < min_ram)
+ min_ram = ram_record["score"]
for(var/cpu_record in ai_network_rankings["cpu"])
- if(cpu_record < min_ram)
- min_cpu = cpu_record
+ if(cpu_record["score"] < min_ram)
+ min_cpu = cpu_record["score"]
var/list/resource_list = list()
for(var/datum/ai_network/AN in SSmachines.ainets)
@@ -328,15 +328,20 @@ SUBSYSTEM_DEF(persistence)
var/cpu_winner = max(contenders_cpu)
var/ram_winner = max(contenders_ram)
+
+
if(!isnull(cpu_winner))
- ai_network_rankings["cpu"] += cpu_winner
- ai_network_rankings["cpu"] = sortList(ai_network_rankings["cpu"], /proc/cmp_numeric_dsc)
+ var/cpu_entry = list("score" = cpu_winner, "round_id" = GLOB.round_id)
+
+ ai_network_rankings["cpu"] += list(cpu_entry)
+ ai_network_rankings["cpu"] = sortList(ai_network_rankings["cpu"], /proc/cmp_ai_record_dsc)
if(length(ai_network_rankings["cpu"]) > 5)
ai_network_rankings["cpu"].len = 5
if(!isnull(ram_winner))
- ai_network_rankings["ram"] += ram_winner
- ai_network_rankings["ram"] = sortList(ai_network_rankings["ram"], /proc/cmp_numeric_dsc)
+ var/ram_entry = list("score" = ram_winner, "round_id" = GLOB.round_id)
+ ai_network_rankings["ram"] += list(ram_entry)
+ ai_network_rankings["ram"] = sortList(ai_network_rankings["ram"], /proc/cmp_ai_record_dsc)
if(length(ai_network_rankings["ram"]) > 5)
ai_network_rankings["ram"].len = 5
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index 5e57453c0125..6f7a145001cd 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -1504,6 +1504,14 @@
if(density && !open(2)) //The airlock is still closed, but something prevented it opening. (Another player noticed and bolted/welded the airlock in time!)
to_chat(user, span_warning("Despite your efforts, [src] managed to resist your attempts to open it!"))
+
+/obj/machinery/door/airlock/proc/safe_lockdown()
+ // Must be powered and have working AI wire.
+ if(canAIControl(src) && !stat)
+ locked = FALSE //For airlocks that were bolted open.
+ close()
+ bolt() //Bolt it!
+
/obj/machinery/door/airlock/hostile_lockdown(mob/origin)
// Must be powered and have working AI wire.
if(canAIControl(src) && !stat)
@@ -1524,6 +1532,11 @@
open()
safe = TRUE
+/obj/machinery/door/airlock/proc/disable_safe_lockdown()
+ // Must be powered and have working AI wire.
+ if(canAIControl(src) && !stat)
+ unbolt()
+ open()
/obj/machinery/door/airlock/proc/on_break()
if(!panel_open)
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 bd587aba9282..14b72b3e7d58 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
@@ -59,6 +59,11 @@
points = clamp(points, 0, MAX_AI_BITCOIN_MINED_PER_TICK)
bitcoin_payout += points * AI_BITCOIN_PRICE
+ if(local_cpu_usage[AI_RESEARCH])
+ var/points = max(round(AI_RESEARCH_PER_CPU * (local_cpu_usage[AI_RESEARCH] * total_cpu * resources_assigned)), 0)
+ points = clamp(points * AI_REGULAR_RESEARCH_POINT_MULTIPLIER, 0, MAX_AI_REGULAR_RESEARCH_PER_TICK)
+ SSresearch.science_tech.add_point_list(list(TECHWEB_POINT_TYPE_DEFAULT = points))
+
var/locally_used = 0
for(var/A in local_cpu_usage)
locally_used += local_cpu_usage[A]
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 4f9fa188ec75..684b26695d2d 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
@@ -17,7 +17,7 @@ GLOBAL_VAR_INIT(primary_data_core, null)
var/primary = FALSE
- var/valid_ticks = MAX_AI_DATA_CORE_TICKS //Limited to MAX_AI_DATA_CORE_TICKS. Decrement by 1 every time we have an invalid tick, opposite when valid
+ var/valid_ticks //Limited to MAX_AI_DATA_CORE_TICKS. Decrement by 1 every time we have an invalid tick, opposite when valid
var/warning_sent = FALSE
COOLDOWN_DECLARE(warning_cooldown)
@@ -33,6 +33,7 @@ GLOBAL_VAR_INIT(primary_data_core, null)
/obj/machinery/ai/data_core/Initialize()
. = ..()
+ valid_ticks = MAX_AI_DATA_CORE_TICKS
GLOB.data_cores += src
if(primary && !GLOB.primary_data_core)
GLOB.primary_data_core = src
diff --git a/code/modules/mob/living/silicon/ai/decentralized/projects/room_lockdown.dm b/code/modules/mob/living/silicon/ai/decentralized/projects/room_lockdown.dm
new file mode 100644
index 000000000000..ce4a94606b94
--- /dev/null
+++ b/code/modules/mob/living/silicon/ai/decentralized/projects/room_lockdown.dm
@@ -0,0 +1,70 @@
+/datum/ai_project/room_lockdown
+ name = "Room Lockdown"
+ description = "This ability will allow you to close and bolt all working doors, and trigger the fire alarms in a clicked area after a short delay and announcement."
+ research_cost = 2000
+ ram_required = 0
+
+ category = AI_PROJECT_CROWD_CONTROL
+
+ can_be_run = FALSE
+ ability_path = /datum/action/innate/ai/ranged/room_lockdown
+ ability_recharge_cost = 1000
+
+/datum/ai_project/room_lockdown/finish()
+ add_ability(ability_path)
+
+/datum/action/innate/ai/ranged/room_lockdown
+ name = "Room Lockdown"
+ desc = "Closes and bolts all working doors and triggers the fire alarm in a clicked room. Takes 2.5 seconds to take effect, and expires after 20 seconds."
+ button_icon_state = "lockdown"
+ uses = 1
+ delete_on_empty = FALSE
+ linked_ability_type = /obj/effect/proc_holder/ranged_ai/charge_borg_or_apc
+
+/datum/action/innate/ai/ranged/room_lockdown/proc/lock_room(atom/target)
+ if(target && !QDELETED(target))
+ var/area/A = get_area(target)
+ if(!A)
+ return FALSE
+ if(!is_station_level(A.z))
+ return FALSE
+ log_game("[key_name(usr)] locked down [A].")
+ minor_announce("Lockdown commencing in area [A] within 2.5 seconds","Network Alert:", TRUE)
+ addtimer(CALLBACK(src, .proc/_lock_room, target), 2.5 SECONDS)
+
+
+/datum/action/innate/ai/ranged/room_lockdown/proc/_lock_room(atom/target)
+ var/area/A = target
+ for(var/obj/machinery/door/airlock/D in A.contents)
+ INVOKE_ASYNC(D, /obj/machinery/door/airlock.proc/safe_lockdown)
+ addtimer(CALLBACK(D, /obj/machinery/door/airlock.proc/disable_safe_lockdown), 20 SECONDS)
+ A.firealert()
+ addtimer(CALLBACK(A, /area.proc/firereset), 20 SECONDS)
+
+
+/obj/effect/proc_holder/ranged_ai/room_lockdown
+ active = FALSE
+ enable_text = span_notice("You ready the lockdown signal.")
+ disable_text = span_notice("You disarm the lockdown signal.")
+
+/obj/effect/proc_holder/ranged_ai/room_lockdown/InterceptClickOn(mob/living/caller, params, atom/target)
+ if(..())
+ return
+ if(ranged_ability_user.incapacitated())
+ remove_ranged_ability()
+ return
+ var/area/A = get_area(target)
+ if(!A)
+ to_chat(ranged_ability_user, span_warning("No area detected!"))
+ return
+ if(istype(A, /area/maintenance))
+ to_chat(ranged_ability_user, span_warning("It is not possible to lockdown maintenance areas due to poor networking!"))
+ return
+
+
+ var/datum/action/innate/ai/ranged/room_lockdown/action = attached_action
+ if(action.lock_room(A))
+ attached_action.adjust_uses(-1)
+ to_chat(caller, span_notice("You lock [A]."))
+ remove_ranged_ability()
+ return TRUE
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 e91e3d5212cd..13a2e7cf7b70 100644
--- a/code/modules/mob/living/silicon/ai/decentralized/server_cabinet.dm
+++ b/code/modules/mob/living/silicon/ai/decentralized/server_cabinet.dm
@@ -29,7 +29,7 @@ GLOBAL_LIST_EMPTY(server_cabinets)
//Atmos hasn't run at the start so this has to be set to true if you map it in
var/roundstart = FALSE
///How many ticks we can go without fulfilling the criteria before shutting off
- var/valid_ticks = MAX_AI_EXPANSION_TICKS
+ var/valid_ticks
///Heat production multiplied by this
var/heat_modifier = 1
///Power modifier, power modified by this. Be aware this indirectly changes heat since power => heat
@@ -42,6 +42,7 @@ GLOBAL_LIST_EMPTY(server_cabinets)
/obj/machinery/ai/server_cabinet/Initialize(mapload)
. = ..()
+ valid_ticks = MAX_AI_SERVER_CABINET_TICKS
roundstart = mapload
installed_racks = list()
GLOB.server_cabinets += src
@@ -72,7 +73,7 @@ GLOBAL_LIST_EMPTY(server_cabinets)
idle_power_usage = initial(idle_power_usage) * power_modifier
/obj/machinery/ai/server_cabinet/process_atmos()
- valid_ticks = clamp(valid_ticks, 0, MAX_AI_EXPANSION_TICKS)
+ valid_ticks = clamp(valid_ticks, 0, MAX_AI_SERVER_CABINET_TICKS)
if(valid_holder())
roundstart = FALSE
var/total_usage = (cached_power_usage * power_modifier)
diff --git a/code/modules/modular_computers/computers/item/laptop/laptop_presets.dm b/code/modules/modular_computers/computers/item/laptop/laptop_presets.dm
index 9f7e409326bd..2232c9669913 100644
--- a/code/modules/modular_computers/computers/item/laptop/laptop_presets.dm
+++ b/code/modules/modular_computers/computers/item/laptop/laptop_presets.dm
@@ -21,4 +21,5 @@
/obj/item/computer_hardware/hard_drive,
/obj/item/computer_hardware/network_card,
/obj/item/computer_hardware/ai_interface,
- /obj/item/computer_hardware/ai_slot)
+ /obj/item/computer_hardware/ai_slot,
+ /obj/item/computer_hardware/card_slot)
diff --git a/code/modules/modular_computers/computers/machinery/console/console_presets.dm b/code/modules/modular_computers/computers/machinery/console/console_presets.dm
index df6547042ce6..ffc68bb22b30 100644
--- a/code/modules/modular_computers/computers/machinery/console/console_presets.dm
+++ b/code/modules/modular_computers/computers/machinery/console/console_presets.dm
@@ -230,4 +230,5 @@
/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)
+ /obj/item/computer_hardware/ai_slot,
+ /obj/item/computer_hardware/card_slot)
diff --git a/code/modules/modular_computers/file_system/programs/ai_network/ai_benchmark.dm b/code/modules/modular_computers/file_system/programs/ai_network/ai_benchmark.dm
index 1783086c9b68..2944d1f8651e 100644
--- a/code/modules/modular_computers/file_system/programs/ai_network/ai_benchmark.dm
+++ b/code/modules/modular_computers/file_system/programs/ai_network/ai_benchmark.dm
@@ -6,7 +6,7 @@
extended_desc = "This program connects to a historical NT records and compares them with the local network."
ui_header = "power_norm.gif"
- size = 8
+ size = 4
tgui_id = "NtosAIBenchmark"
program_icon = "network-wired"
available_on_ntnet = TRUE
@@ -19,8 +19,10 @@
var/datum/ai_network/net = data["has_ai_net"]
-
data["total_cpu"] = net.resources.total_cpu()
data["total_ram"] = net.resources.total_ram()
+ data["ram_records"] = SSpersistence.ai_network_rankings["ram"]
+ data["cpu_records"] = SSpersistence.ai_network_rankings["cpu"]
+
return data
diff --git a/code/modules/modular_computers/file_system/programs/ntdownloader.dm b/code/modules/modular_computers/file_system/programs/ntdownloader.dm
index 00b540b798a2..a78819409b57 100644
--- a/code/modules/modular_computers/file_system/programs/ntdownloader.dm
+++ b/code/modules/modular_computers/file_system/programs/ntdownloader.dm
@@ -192,7 +192,7 @@
"installed" = !!hard_drive.find_file_by_name(P.filename),
"compatible" = check_compatibility(P),
"size" = P.size,
- "access" = emagged && P.available_on_syndinet ? TRUE : P.can_run(user,transfer = 1, access = access),
+ "access" = emagged ? TRUE : P.can_run(user,transfer = 1, access = access),
"verifiedsource" = P.available_on_ntnet,
))
diff --git a/tgui/packages/tgui/interfaces/NtosAIBenchmark.js b/tgui/packages/tgui/interfaces/NtosAIBenchmark.js
new file mode 100644
index 000000000000..747038145e6e
--- /dev/null
+++ b/tgui/packages/tgui/interfaces/NtosAIBenchmark.js
@@ -0,0 +1,62 @@
+import { NtosWindow } from '../layouts';
+import { Fragment } from 'inferno';
+import { useBackend, useLocalState } from '../backend';
+import { Collapsible, Box, Section, Tabs, NoticeBox, Flex, ProgressBar, LabeledList, NumberInput, Divider } from '../components';
+
+export const NtosAIBenchmark = (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 (
+
+
+
+
+ No network connection. Please connect to ethernet cable to proceed!
+
+
+
+
+ );
+ }
+
+ return (
+
+
+
+
+ {data.total_cpu} THz
+ {data.total_ram} TB
+
+
+ {data.cpu_records.map((record, index) => {
+ return (
+
+ );
+ })}
+
+
+ {data.ram_records.map((record, index) => {
+ return (
+
+ );
+ })}
+
+
+
+
+ );
+};
diff --git a/tgui/packages/tgui/interfaces/NtosAIMonitor.js b/tgui/packages/tgui/interfaces/NtosAIMonitor.js
index a5b3928efc46..ca30bb858fa3 100644
--- a/tgui/packages/tgui/interfaces/NtosAIMonitor.js
+++ b/tgui/packages/tgui/interfaces/NtosAIMonitor.js
@@ -1,19 +1,13 @@
import { NtosWindow } from '../layouts';
import { Fragment } from 'inferno';
import { useBackend, useLocalState } from '../backend';
-import { Button, Box, Section, Tabs, NoticeBox, Flex, ProgressBar, LabeledList, NumberInput, Divider } from '../components';
-import { LoginScreen } from './LoginScreen';
+import { Button, Box, Section, Tabs, NoticeBox, Flex, ProgressBar, LabeledList, NumberInput, Divider, Collapsible } 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.logged_in) {
- return (
-
- )
- }
if (!data.has_ai_net) {
return (
diff --git a/yogstation.dme b/yogstation.dme
index f1524c7b57a2..3c05541807bd 100644
--- a/yogstation.dme
+++ b/yogstation.dme
@@ -2477,6 +2477,7 @@
#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\rgb.dm"
+#include "code\modules\mob\living\silicon\ai\decentralized\projects\room_lockdown.dm"
#include "code\modules\mob\living\silicon\ai\decentralized\projects\self_defense.dm"
#include "code\modules\mob\living\silicon\ai\decentralized\projects\surveillance.dm"
#include "code\modules\mob\living\silicon\ai\decentralized\systech\cpu.dm"
From 468fb6b279870e7f118858102b6c8b6b540c7fc9 Mon Sep 17 00:00:00 2001
From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com>
Date: Fri, 4 Nov 2022 11:57:05 +0100
Subject: [PATCH 091/112] AI revival
---
code/__DEFINES/ai.dm | 14 +++-
.../silicon/ai/ai_network/ai_network.dm | 19 +++++
.../silicon/ai/decentralized/ai_data_core.dm | 15 ++++
.../mob/living/silicon/ai/decentralized_ai.dm | 48 ++++++++++++-
tgui/packages/tgui/interfaces/AiDashboard.js | 70 ++++++++++---------
tgui/packages/tgui/interfaces/LoginScreen.js | 4 +-
.../tgui/interfaces/NtosAIBenchmark.js | 4 +-
.../packages/tgui/interfaces/NtosAIMonitor.js | 28 ++++----
.../tgui/interfaces/SecurityConsole.js | 4 +-
9 files changed, 149 insertions(+), 57 deletions(-)
diff --git a/code/__DEFINES/ai.dm b/code/__DEFINES/ai.dm
index b908362d5c97..ffcab9c59e37 100644
--- a/code/__DEFINES/ai.dm
+++ b/code/__DEFINES/ai.dm
@@ -4,6 +4,10 @@
///Temperature limit of all AI machinery
#define AI_TEMP_LIMIT 288.15 //15C, much hotter than a normal server room for leniency :)
+///How long the AI can stay in the black-box before it's fully destroyed
+#define AI_BLACKBOX_LIFETIME 5 MINUTES
+///How much CPU we need to use to revive the AI
+#define AI_BLACKBOX_PROCESSING_REQUIREMENT 2500
///How many ticks can an AI data core store? When this amount of ticks have passed while it's in an INVALID state it can no longer be used by an AI
#define MAX_AI_DATA_CORE_TICKS (45 * (20 / SSair.wait))
@@ -75,18 +79,22 @@ GLOBAL_LIST_INIT(ai_project_categories, list(
//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"
#define AI_RESEARCH "Research Assistance"
+#define AI_REVIVAL "AI Restoration"
GLOBAL_LIST_INIT(possible_ainet_activities, list(
"[AI_CRYPTO]",
- "[AI_RESEARCH]"
+ "[AI_RESEARCH]",
+ "[AI_REVIVAL]"
))
GLOBAL_LIST_INIT(ainet_activity_tagline, list(
"[AI_CRYPTO]" = "Use CPU to generate credits!",
- "[AI_RESEARCH]" = "Use CPU to generate regular research points!"
+ "[AI_RESEARCH]" = "Use CPU to generate regular research points!",
+ "[AI_REVIVAL]" = "Revive a dead AI using CPU!"
))
GLOBAL_LIST_INIT(ainet_activity_description, list(
"[AI_CRYPTO]" = "Using CPU to mine NTCoin should allow for a meager sum of passive credit income.",
- "[AI_RESEARCH]" = "Allocating additional CPU to the research servers should allow for increased point gain. Not to be confused with AI Research points."
+ "[AI_RESEARCH]" = "Allocating additional CPU to the research servers should allow for increased point gain. Not to be confused with AI Research points.",
+ "[AI_REVIVAL]" = "If you've inserted a volatile neural core into a connected data core this will revive it using CPU."
))
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 14b72b3e7d58..6dd3fa00913b 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
@@ -8,6 +8,7 @@
var/list/nodes = list() // all connected machines
var/list/ai_list = list() //List of all AIs in this network
+ var/list/reviving_ais = list()
var/list/remote_networks = list()
@@ -64,6 +65,24 @@
points = clamp(points * AI_REGULAR_RESEARCH_POINT_MULTIPLIER, 0, MAX_AI_REGULAR_RESEARCH_PER_TICK)
SSresearch.science_tech.add_point_list(list(TECHWEB_POINT_TYPE_DEFAULT = points))
+ if(local_cpu_usage[AI_REVIVAL])
+ var/points = max(round(AI_RESEARCH_PER_CPU * (local_cpu_usage[AI_REVIVAL] * total_cpu * resources_assigned)), 0)
+ points = max(0, points)
+ var/total_reviving_ais = reviving_ais.len
+ if(total_reviving_ais)
+ var/distributed_points = points / total_reviving_ais
+ for(var/obj/machinery/ai/data_core/DC in reviving_ais)
+ if(!DC.dead_ai_blackbox)
+ reviving_ais -= DC
+ DC.dead_ai_blackbox.processing_progress += distributed_points
+ DC.dead_ai_blackbox.living_ticks = AI_BLACKBOX_LIFETIME
+ if(DC.dead_ai_blackbox.processing_progress >= AI_BLACKBOX_PROCESSING_REQUIREMENT)
+ DC.dead_ai_blackbox.stored_ai.revive(TRUE)
+ DC.transfer_ai(DC.dead_ai_blackbox.stored_ai)
+ DC.dead_ai_blackbox.stored_ai = null
+ QDEL_NULL(DC.dead_ai_blackbox)
+ reviving_ais -= DC
+
var/locally_used = 0
for(var/A in local_cpu_usage)
locally_used += local_cpu_usage[A]
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 684b26695d2d..64780b318849 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
@@ -30,6 +30,8 @@ GLOBAL_VAR_INIT(primary_data_core, null)
var/obj/ai_smoke/smoke
+ var/obj/item/dead_ai/dead_ai_blackbox
+
/obj/machinery/ai/data_core/Initialize()
. = ..()
@@ -53,6 +55,8 @@ GLOBAL_VAR_INIT(primary_data_core, null)
power_modifier = new_power_mod
active_power_usage = AI_DATA_CORE_POWER_USAGE * power_modifier
+/obj/machinery/ai/data_core/process()
+
/obj/machinery/ai/data_core/process_atmos()
calculate_validity()
@@ -83,6 +87,17 @@ GLOBAL_VAR_INIT(primary_data_core, null)
..()
/obj/machinery/ai/data_core/attackby(obj/item/O, mob/user, params)
+ if(istype(O, /obj/item/dead_ai))
+ if(dead_ai_blackbox)
+ to_chat(user, span_warning("There's already a neural core inserted!"))
+ return
+ if(!can_transfer_ai())
+ to_chat(user, span_warning("This core is currently unable to host an AI due to being offline."))
+ return
+ dead_ai_blackbox = O
+ network.reviving_ais |= src
+ return TRUE
+
if(default_deconstruction_screwdriver(user, "core-open", "core", O))
return TRUE
diff --git a/code/modules/mob/living/silicon/ai/decentralized_ai.dm b/code/modules/mob/living/silicon/ai/decentralized_ai.dm
index 319a7cc51761..18fb43075fb5 100644
--- a/code/modules/mob/living/silicon/ai/decentralized_ai.dm
+++ b/code/modules/mob/living/silicon/ai/decentralized_ai.dm
@@ -76,4 +76,50 @@
adjustOxyLoss(200) //Die!!
- QDEL_IN(src, 2 SECONDS)
+ death()
+
+ new /obj/item/dead_ai(drop_location(src), src)
+
+
+/obj/item/dead_ai
+ name = "volatile neural core"
+ desc = "As an emergency precaution any advanced neural networks will save onto this device upon destruction of the host server. The storage medium is volatile and for that reason expires rapidly."
+ icon = 'icons/obj/device.dmi'
+ icon_state = "blackcube"
+ lefthand_file = 'icons/mob/inhands/items_lefthand.dmi'
+ righthand_file = 'icons/mob/inhands/items_righthand.dmi'
+ w_class = WEIGHT_CLASS_NORMAL
+ resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF
+ var/mob/living/silicon/ai/stored_ai
+ var/living_ticks = AI_BLACKBOX_LIFETIME
+
+ var/processing_progress = 0
+
+/obj/item/dead_ai/Initialize(mob/living/silicon/ai/AI)
+ . = ..()
+ if(AI)
+ START_PROCESSING(SSobj, src)
+ name = name + " - [AI]"
+ stored_ai = AI
+ stored_ai.forceMove(src)
+
+/obj/item/dead_ai/process()
+ if(stored_ai)
+ living_ticks--
+ if(living_ticks <= AI_BLACKBOX_LIFETIME * 0.5)
+ visible_message(span_danger("The integrated battery on [src] beeps and warns that it's 50% empty."))
+ if(living_ticks <= 0)
+ visible_message(span_danger("The integrated battery on [src] expires and the stored AI is subsequently wiped."))
+ qdel(src)
+
+/obj/item/dead_ai/examine(mob/user)
+ . = ..()
+ . += span_notice("Insert the device into a functioning data core to proceed.")
+ . += span_notice("Then allocate CPU cycles to revive the AI using a local network interface.")
+ . += span_notice("The integrated battery reports [round(living_ticks / AI_BLACKBOX_LIFETIME * 100)]% battery remaining.")
+ . += span_notice("A total of [processing_progress] CPU cycles have been allocated out of the required [AI_BLACKBOX_PROCESSING_REQUIREMENT].")
+
+/obj/item/dead_ai/Destroy()
+ . = ..()
+ if(stored_ai)
+ QDEL_NULL(stored_ai)
diff --git a/tgui/packages/tgui/interfaces/AiDashboard.js b/tgui/packages/tgui/interfaces/AiDashboard.js
index 55d43b2fad81..39062bc2e81b 100644
--- a/tgui/packages/tgui/interfaces/AiDashboard.js
+++ b/tgui/packages/tgui/interfaces/AiDashboard.js
@@ -6,13 +6,8 @@ import { Window } from '../layouts';
export const AiDashboard = (props, context) => {
const { act, data } = useBackend(context);
- const [search, setSearch] = useLocalState(context, 'search', null);
- const [searchCompleted, setSearchCompleted] = useLocalState(context, 'searchCompleted', null);
const [tab, setTab] = useLocalState(context, 'tab', 1);
- const [selectedCategory, setCategory] = useLocalState(context, 'selectedCategory', data.categories[0]);
- const [activeProjectsOnly, setActiveProjectsOnly] = useLocalState(context, 'activeProjectsOnly', true);
- let remaining_cpu = (1 - data.used_cpu) * 100;
let amount_of_cpu = data.current_cpu ? data.current_cpu * data.max_cpu : 0;
return (
@@ -138,6 +133,9 @@ export const AiDashboard = (props, context) => {
const AvailableProjects = (props, context) => {
const { act, data } = useBackend(context);
+ const [search, setSearch] = useLocalState(context, 'search', null);
+ const [selectedCategory, setCategory] = useLocalState(context, 'selectedCategory', data.categories[0]);
+ let remaining_cpu = (1 - data.used_cpu) * 100;
return (
{
const CompletedProjects = (props, context) => {
const { act, data } = useBackend(context);
+ const [searchCompleted, setSearchCompleted] = useLocalState(context, 'searchCompleted', null);
+ const [activeProjectsOnly, setActiveProjectsOnly] = useLocalState(context, 'activeProjectsOnly', true);
+ const [selectedCategory, setCategory] = useLocalState(context, 'selectedCategory', data.categories[0]);
+
return (
@@ -251,43 +253,45 @@ const CompletedProjects = (props, context) => {
const AbilityCharging = (props, context) => {
const { act, data } = useBackend(context);
+ let remaining_cpu = (1 - data.used_cpu) * 100;
return (
- {data.chargeable_abilities.filter(ability => {
- return ability.uses < ability.max_uses;
- }).map((ability, index) => (
-
- {ability.name} | Uses Remaining: {ability.uses}/{ability.max_uses}
-
- )}
- buttons={(
-
- Assigned CPU:
- act('allocate_recharge_cpu', {
- project_name: ability.project_name,
- amount: Math.round((value / 100) * 100) / 100,
- })} />
- THz
-
- )}>
-
- {Math.round((ability.progress / ability.cost * 100)* 100)
+ {data.chargeable_abilities.filter(ability => {
+ return ability.uses < ability.max_uses;
+ }).map((ability, index) => (
+
+ {ability.name} | Uses Remaining: {ability.uses}/{ability.max_uses}
+
+ )}
+ buttons={(
+
+ Assigned CPU:
+ act('allocate_recharge_cpu', {
+ project_name: ability.project_name,
+ amount: Math.round((value / 100) * 100) / 100,
+ })} />
+ THz
+
+ )}>
+
+ {Math.round((ability.progress / ability.cost * 100)* 100)
/ 100}%
- ({Math.round(ability.progress * 100) / 100}/{ability.cost} THz)
-
-
- ))}
-
+ ({Math.round(ability.progress * 100) / 100}/{ability.cost} THz)
+
+
+ ))}
+
);
};
const NetworkingResources = (props, context) => {
const { act, data } = useBackend(context);
- const tooltipDisabled = data.human_only ? "Locked by organics. Please request their assistance." : ""
+ let amount_of_cpu = data.current_cpu ? data.current_cpu * data.max_cpu : 0;
+ const tooltipDisabled = data.human_only ? "Locked by organics. Please request their assistance." : "";
return (
@@ -301,7 +305,7 @@ const NetworkingResources = (props, context) => {
{amount_of_cpu} THz
- act('set_cpu', {
+ act('set_cpu', {
amount_cpu: Math.round((value / 100) * 100) / 100,
})} disabled={data.human_only} tooltip={tooltipDisabled} />
act("max_cpu_assign")} disabled={data.human_only} tooltip={tooltipDisabled}>Max
diff --git a/tgui/packages/tgui/interfaces/LoginScreen.js b/tgui/packages/tgui/interfaces/LoginScreen.js
index 3b2d21bc3702..2ac1ed53153d 100644
--- a/tgui/packages/tgui/interfaces/LoginScreen.js
+++ b/tgui/packages/tgui/interfaces/LoginScreen.js
@@ -7,7 +7,7 @@ export const LoginScreen = (props, context) => {
const { act, data } = useBackend(context);
const {
username,
- has_access} = data;
+ has_access } = data;
const { theme = 'ntos' } = props;
return (
@@ -53,5 +53,5 @@ export const LoginScreen = (props, context) => {
- )
+ );
};
diff --git a/tgui/packages/tgui/interfaces/NtosAIBenchmark.js b/tgui/packages/tgui/interfaces/NtosAIBenchmark.js
index 747038145e6e..e2453ae58298 100644
--- a/tgui/packages/tgui/interfaces/NtosAIBenchmark.js
+++ b/tgui/packages/tgui/interfaces/NtosAIBenchmark.js
@@ -40,7 +40,7 @@ export const NtosAIBenchmark = (props, context) => {
{data.cpu_records.map((record, index) => {
return (
-
+
);
@@ -49,7 +49,7 @@ export const NtosAIBenchmark = (props, context) => {
{data.ram_records.map((record, index) => {
return (
-
+
);
diff --git a/tgui/packages/tgui/interfaces/NtosAIMonitor.js b/tgui/packages/tgui/interfaces/NtosAIMonitor.js
index ca30bb858fa3..68fa6048dcd4 100644
--- a/tgui/packages/tgui/interfaces/NtosAIMonitor.js
+++ b/tgui/packages/tgui/interfaces/NtosAIMonitor.js
@@ -121,8 +121,8 @@ const LocalCompute = (props, context) => {
const { act, data } = useBackend(context);
let network_remaining_cpu = data.remaining_network_cpu * 100;
- const is_disabled = !((data.current_ai_ref && !data.human_only) || !data.current_ai_ref)
- const ai_tooltip = (data.current_ai_ref && data.human_only) ? "Only useable by organics" : ""
+ const is_disabled = !((data.current_ai_ref && !data.human_only) || !data.current_ai_ref);
+ const ai_tooltip = (data.current_ai_ref && data.human_only) ? "Only useable by organics" : "";
return (
@@ -143,9 +143,9 @@ const LocalCompute = (props, context) => {
Assigned CPU:
act('allocate_network_cpu', {
- project_name: project.name,
- amount: Math.round((value / 100) * 100) / 100,
- })} />
+ project_name: project.name,
+ amount: Math.round((value / 100) * 100) / 100,
+ })} />
act('max_network_cpu', {
project_name: project.name,
})}>Max
@@ -169,17 +169,17 @@ const ResourceAllocation = (props, context) => {
const { act, data } = useBackend(context);
let remaining_cpu = (1 - data.total_assigned_cpu) * 100;
- const human_only_tooltip = data.current_ai_ref ? "Only useable by organics" : ""
+ const human_only_tooltip = data.current_ai_ref ? "Only useable by organics" : "";
- const is_disabled = !((data.current_ai_ref && !data.human_only) || !data.current_ai_ref)
- const ai_tooltip = (data.current_ai_ref && data.human_only) ? "Only useable by organics" : ""
+ const is_disabled = !((data.current_ai_ref && !data.human_only) || !data.current_ai_ref);
+ const ai_tooltip = (data.current_ai_ref && data.human_only) ? "Only useable by organics" : "";
return (
act("toggle_human_only")}>
- {data.human_only ? "Enable" : "Disable"} silicon access
- )}>
+ act("toggle_human_only")}>
+ {data.human_only ? "Enable" : "Disable"} silicon access
+ )}>
{
act('set_cpu', {
- target_ai: data.network_ref,
- amount_cpu: Math.round((value / 100) * 100) / 100,
- })} />
+ target_ai: data.network_ref,
+ amount_cpu: Math.round((value / 100) * 100) / 100,
+ })} />
act("max_cpu", {
target_ai: data.network_ref,
})}>Max
diff --git a/tgui/packages/tgui/interfaces/SecurityConsole.js b/tgui/packages/tgui/interfaces/SecurityConsole.js
index 8aec04ebafff..33bb1a9de638 100644
--- a/tgui/packages/tgui/interfaces/SecurityConsole.js
+++ b/tgui/packages/tgui/interfaces/SecurityConsole.js
@@ -31,10 +31,10 @@ export const SecurityConsole = (props, context) => {
);
}
- if(!logged_in) {
+ if (!logged_in) {
return (
- )
+ );
}
if (screen === "maint") {
From e49d20f0c197d2d91c3a0c0231d2743a72309f08 Mon Sep 17 00:00:00 2001
From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com>
Date: Fri, 4 Nov 2022 12:27:09 +0100
Subject: [PATCH 092/112] small fixes
---
code/controllers/subsystem/persistence.dm | 8 ++++++--
.../living/silicon/ai/ai_network/networking_machines.dm | 2 +-
.../silicon/ai/decentralized/projects/room_lockdown.dm | 2 +-
3 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/code/controllers/subsystem/persistence.dm b/code/controllers/subsystem/persistence.dm
index 8ee0de36c0fb..4e0b7af0ce40 100644
--- a/code/controllers/subsystem/persistence.dm
+++ b/code/controllers/subsystem/persistence.dm
@@ -336,14 +336,18 @@ SUBSYSTEM_DEF(persistence)
ai_network_rankings["cpu"] += list(cpu_entry)
ai_network_rankings["cpu"] = sortList(ai_network_rankings["cpu"], /proc/cmp_ai_record_dsc)
if(length(ai_network_rankings["cpu"]) > 5)
- ai_network_rankings["cpu"].len = 5
+ var/list/cpu_rankings = ai_network_rankings["cpu"]
+ cpu_rankings.len = 5
+ ai_network_rankings["cpu"] = cpu_rankings
if(!isnull(ram_winner))
var/ram_entry = list("score" = ram_winner, "round_id" = GLOB.round_id)
ai_network_rankings["ram"] += list(ram_entry)
ai_network_rankings["ram"] = sortList(ai_network_rankings["ram"], /proc/cmp_ai_record_dsc)
if(length(ai_network_rankings["ram"]) > 5)
- ai_network_rankings["ram"].len = 5
+ var/list/ram_rankings = ai_network_rankings["ram"]
+ ram_rankings.len = 5
+ ai_network_rankings["ram"] = ram_rankings
fdel("data/AINetworkRank.json")
text2file(json_encode(ai_network_rankings), "data/AINetworkRank.json")
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 a17df8892a1d..3b9c9405d53e 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
@@ -104,7 +104,7 @@ GLOBAL_LIST_EMPTY(ai_networking_machines)
to_chat(user, span_notice("You disconnect the remote connection."))
disconnect()
return TRUE
- to_chat(user, span_warning("The machien isn't connected!"))
+ to_chat(user, span_warning("The machine isn't connected!"))
return TRUE
if(W.tool_behaviour == TOOL_CROWBAR)
diff --git a/code/modules/mob/living/silicon/ai/decentralized/projects/room_lockdown.dm b/code/modules/mob/living/silicon/ai/decentralized/projects/room_lockdown.dm
index ce4a94606b94..ad9f853befc3 100644
--- a/code/modules/mob/living/silicon/ai/decentralized/projects/room_lockdown.dm
+++ b/code/modules/mob/living/silicon/ai/decentralized/projects/room_lockdown.dm
@@ -19,7 +19,7 @@
button_icon_state = "lockdown"
uses = 1
delete_on_empty = FALSE
- linked_ability_type = /obj/effect/proc_holder/ranged_ai/charge_borg_or_apc
+ linked_ability_type = /obj/effect/proc_holder/ranged_ai/room_lockdown
/datum/action/innate/ai/ranged/room_lockdown/proc/lock_room(atom/target)
if(target && !QDELETED(target))
From f4be3dab00ade0352992223ff491f5d7fa4d5e49 Mon Sep 17 00:00:00 2001
From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com>
Date: Fri, 4 Nov 2022 12:34:29 +0100
Subject: [PATCH 093/112] runtimes + fix revival
---
.../silicon/ai/decentralized/projects/room_lockdown.dm | 5 ++++-
code/modules/mob/living/silicon/ai/decentralized_ai.dm | 2 +-
2 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/code/modules/mob/living/silicon/ai/decentralized/projects/room_lockdown.dm b/code/modules/mob/living/silicon/ai/decentralized/projects/room_lockdown.dm
index ad9f853befc3..e6a26f741a70 100644
--- a/code/modules/mob/living/silicon/ai/decentralized/projects/room_lockdown.dm
+++ b/code/modules/mob/living/silicon/ai/decentralized/projects/room_lockdown.dm
@@ -31,14 +31,17 @@
log_game("[key_name(usr)] locked down [A].")
minor_announce("Lockdown commencing in area [A] within 2.5 seconds","Network Alert:", TRUE)
addtimer(CALLBACK(src, .proc/_lock_room, target), 2.5 SECONDS)
+ return TRUE
/datum/action/innate/ai/ranged/room_lockdown/proc/_lock_room(atom/target)
var/area/A = target
for(var/obj/machinery/door/airlock/D in A.contents)
+ if(istype(D, /obj/machinery/door/airlock/external))
+ continue
INVOKE_ASYNC(D, /obj/machinery/door/airlock.proc/safe_lockdown)
addtimer(CALLBACK(D, /obj/machinery/door/airlock.proc/disable_safe_lockdown), 20 SECONDS)
- A.firealert()
+ A.firealert(loc)
addtimer(CALLBACK(A, /area.proc/firereset), 20 SECONDS)
diff --git a/code/modules/mob/living/silicon/ai/decentralized_ai.dm b/code/modules/mob/living/silicon/ai/decentralized_ai.dm
index 18fb43075fb5..d54f756572ce 100644
--- a/code/modules/mob/living/silicon/ai/decentralized_ai.dm
+++ b/code/modules/mob/living/silicon/ai/decentralized_ai.dm
@@ -95,7 +95,7 @@
var/processing_progress = 0
-/obj/item/dead_ai/Initialize(mob/living/silicon/ai/AI)
+/obj/item/dead_ai/Initialize(mapload, mob/living/silicon/ai/AI)
. = ..()
if(AI)
START_PROCESSING(SSobj, src)
From aa50a3209f60bcae6c1ff41d6fd4f2fd0ac6fbd4 Mon Sep 17 00:00:00 2001
From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com>
Date: Fri, 4 Nov 2022 12:36:14 +0100
Subject: [PATCH 094/112] maps
---
.../AsteroidStation/AsteroidStation.dmm | 8 -
_maps/map_files/Yogsmeta/Yogsmeta.dmm | 11 -
.../management/resource_distribution.dm | 193 ------------------
.../decentralized/projects/room_lockdown.dm | 2 +-
yogstation.dme | 1 -
5 files changed, 1 insertion(+), 214 deletions(-)
delete mode 100644 code/modules/mob/living/silicon/ai/decentralized/management/resource_distribution.dm
diff --git a/_maps/map_files/AsteroidStation/AsteroidStation.dmm b/_maps/map_files/AsteroidStation/AsteroidStation.dmm
index b87e4733fcaf..b0c0a0b3c262 100644
--- a/_maps/map_files/AsteroidStation/AsteroidStation.dmm
+++ b/_maps/map_files/AsteroidStation/AsteroidStation.dmm
@@ -1247,9 +1247,6 @@
/turf/open/floor/plasteel,
/area/security/checkpoint/medical)
"akg" = (
-/obj/machinery/computer/ai_resource_distribution{
- dir = 4
- },
/turf/open/floor/plasteel/dark,
/area/science/server)
"akh" = (
@@ -1797,9 +1794,6 @@
/turf/open/floor/plasteel/white,
/area/medical/medbay/central)
"aoX" = (
-/obj/machinery/computer/ai_control_console{
- dir = 1
- },
/turf/open/floor/plasteel/grimy,
/area/ai_monitored/turret_protected/aisat_interior)
"aoZ" = (
@@ -11020,7 +11014,6 @@
/area/quartermaster/miningdock)
"cEO" = (
/obj/structure/closet/secure_closet/RD,
-/obj/item/circuitboard/computer/ai_upload_download,
/obj/effect/turf_decal/stripes/line{
dir = 1
},
@@ -27928,7 +27921,6 @@
/turf/open/floor/plasteel/white,
/area/science/robotics/lab)
"iCL" = (
-/obj/machinery/computer/ai_resource_distribution,
/turf/open/floor/plasteel/grimy,
/area/ai_monitored/turret_protected/aisat_interior)
"iDy" = (
diff --git a/_maps/map_files/Yogsmeta/Yogsmeta.dmm b/_maps/map_files/Yogsmeta/Yogsmeta.dmm
index f1be506f6233..c4d7b4106341 100644
--- a/_maps/map_files/Yogsmeta/Yogsmeta.dmm
+++ b/_maps/map_files/Yogsmeta/Yogsmeta.dmm
@@ -58804,7 +58804,6 @@
/obj/machinery/status_display/ai{
pixel_y = 31
},
-/obj/machinery/computer/ai_control_console,
/turf/open/floor/plasteel/grimy,
/area/tcommsat/computer)
"iox" = (
@@ -60186,9 +60185,6 @@
/obj/effect/turf_decal/stripes/line{
dir = 6
},
-/obj/structure/sign/plaques/ai_password{
- pixel_x = 32
- },
/turf/open/floor/plasteel/white,
/area/crew_quarters/heads/hor)
"jlS" = (
@@ -60545,9 +60541,6 @@
/area/maintenance/starboard)
"jzO" = (
/obj/machinery/light/small,
-/obj/machinery/computer/ai_resource_distribution{
- dir = 1
- },
/obj/machinery/camera{
c_tag = "Telecomms - Control Room";
dir = 1;
@@ -73004,7 +72997,6 @@
"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
@@ -77087,9 +77079,6 @@
/turf/open/floor/plasteel/dark,
/area/ai_monitored/secondarydatacore)
"uDh" = (
-/obj/machinery/computer/ai_resource_distribution{
- dir = 8
- },
/obj/structure/cable{
icon_state = "1-2"
},
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
deleted file mode 100644
index d8e15064b0e2..000000000000
--- a/code/modules/mob/living/silicon/ai/decentralized/management/resource_distribution.dm
+++ /dev/null
@@ -1,193 +0,0 @@
-/*
-/obj/machinery/computer/ai_resource_distribution
- name = "\improper AI system resource distribution"
- desc = "Used for distributing processing resources across the current artificial intelligences."
- req_one_access = list(ACCESS_RD, ACCESS_NETWORK)
-
- icon_keyboard = "tech_key"
- icon_screen = "ai-fixer"
- light_color = LIGHT_COLOR_PINK
-
- authenticated = FALSE
-
- var/human_only = FALSE
-
- circuit = /obj/item/circuitboard/computer/ai_resource_distribution
-
-
-/obj/machinery/computer/ai_resource_distribution/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_resource_distribution/ui_interact(mob/user, datum/tgui/ui)
- ui = SStgui.try_update_ui(user, src, ui)
- if(!ui)
- ui = new(user, src, "AiResources", name)
- ui.open()
-
-/obj/machinery/computer/ai_resource_distribution/ui_data(mob/living/carbon/human/user)
- var/list/data = list()
-
- 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["total_cpu"] = GLOB.ai_os.total_cpu
- data["total_ram"] = GLOB.ai_os.total_ram
-
-
- data["total_assigned_cpu"] = GLOB.ai_os.total_cpu_assigned()
- data["total_assigned_ram"] = GLOB.ai_os.total_ram_assigned()
-
- data["human_only"] = human_only
-
-
- data["ais"] = list()
-
- for(var/mob/living/silicon/ai/A in GLOB.ai_list)
- data["ais"] += list(list("name" = A.name, "ref" = REF(A), "assigned_cpu" = GLOB.ai_os.cpu_assigned[A] ? GLOB.ai_os.cpu_assigned[A] : 0, "assigned_ram" = GLOB.ai_os.ram_assigned[A] ? GLOB.ai_os.ram_assigned[A] : 0))
-
- return data
-
-/obj/machinery/computer/ai_resource_distribution/ui_act(action, params)
- if(..())
- 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
- return
-
- var/is_human = ishuman(usr)
-
- switch(action)
- if("log_out")
- authenticated = FALSE
- . = TRUE
-
- if("clear_ai_resources")
- var/mob/living/silicon/ai/target_ai = locate(params["targetAI"])
- if(!istype(target_ai))
- return
-
- GLOB.ai_os.clear_ai_resources(target_ai)
- . = TRUE
-
- if("set_cpu")
- var/mob/living/silicon/ai/target_ai = locate(params["targetAI"])
- if(!istype(target_ai))
- return
- if(human_only && !is_human)
- to_chat(usr, span_warning("CAPTCHA check failed. This console is NOT silicon operable. Please call for human assistance."))
- return
- var/amount = params["amount_cpu"]
- if(amount > 1 || amount < 0)
- return
- GLOB.ai_os.set_cpu(target_ai, amount)
- . = TRUE
- if("max_cpu")
- var/mob/living/silicon/ai/target_ai = locate(params["targetAI"])
- if(!istype(target_ai))
- return
- if(human_only && !is_human)
- to_chat(usr, span_warning("CAPTCHA check failed. This console is NOT silicon operable. Please call for human assistance."))
- return
- var/amount = (1 - GLOB.ai_os.total_cpu_assigned()) + GLOB.ai_os.cpu_assigned[target_ai]
-
- GLOB.ai_os.set_cpu(target_ai, amount)
- . = TRUE
- if("add_ram")
- var/mob/living/silicon/ai/target_ai = locate(params["targetAI"])
- if(!istype(target_ai))
- return
- if(human_only && !is_human)
- to_chat(usr, span_warning("CAPTCHA check failed. This console is NOT silicon operable. Please call for human assistance."))
- return
-
- if(GLOB.ai_os.total_ram_assigned() >= GLOB.ai_os.total_ram)
- return
- GLOB.ai_os.add_ram(target_ai, 1)
- . = TRUE
-
- if("remove_ram")
- var/mob/living/silicon/ai/target_ai = locate(params["targetAI"])
- if(!istype(target_ai))
- return
- if(human_only && !is_human)
- to_chat(usr, span_warning("CAPTCHA check failed. This console is NOT silicon operable. Please call for human assistance."))
- return
-
- var/current_ram = GLOB.ai_os.ram_assigned[target_ai]
-
- if(current_ram <= 0)
- return
- GLOB.ai_os.remove_ram(target_ai, 1)
- . = TRUE
- if("toggle_human_status")
- if(!is_human)
- to_chat(usr, span_warning("CAPTCHA check failed. This console is NOT silicon operable. Please call for human assistance."))
- return
- 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/room_lockdown.dm b/code/modules/mob/living/silicon/ai/decentralized/projects/room_lockdown.dm
index e6a26f741a70..84304dd95e8b 100644
--- a/code/modules/mob/living/silicon/ai/decentralized/projects/room_lockdown.dm
+++ b/code/modules/mob/living/silicon/ai/decentralized/projects/room_lockdown.dm
@@ -41,7 +41,7 @@
continue
INVOKE_ASYNC(D, /obj/machinery/door/airlock.proc/safe_lockdown)
addtimer(CALLBACK(D, /obj/machinery/door/airlock.proc/disable_safe_lockdown), 20 SECONDS)
- A.firealert(loc)
+ A.firealert(usr.loc)
addtimer(CALLBACK(A, /area.proc/firereset), 20 SECONDS)
diff --git a/yogstation.dme b/yogstation.dme
index 3c05541807bd..31df81c7e9ea 100644
--- a/yogstation.dme
+++ b/yogstation.dme
@@ -2466,7 +2466,6 @@
#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"
-#include "code\modules\mob\living\silicon\ai\decentralized\management\resource_distribution.dm"
#include "code\modules\mob\living\silicon\ai\decentralized\projects\_ai_project.dm"
#include "code\modules\mob\living\silicon\ai\decentralized\projects\ai_dab.dm"
#include "code\modules\mob\living\silicon\ai\decentralized\projects\ai_huds.dm"
From a913b42fef6fbccdd6d02a7aae6982be4a5019d0 Mon Sep 17 00:00:00 2001
From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com>
Date: Fri, 4 Nov 2022 12:37:27 +0100
Subject: [PATCH 095/112] Update decentralized_ai.dm
---
code/modules/mob/living/silicon/ai/decentralized_ai.dm | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/code/modules/mob/living/silicon/ai/decentralized_ai.dm b/code/modules/mob/living/silicon/ai/decentralized_ai.dm
index d54f756572ce..574adba191ff 100644
--- a/code/modules/mob/living/silicon/ai/decentralized_ai.dm
+++ b/code/modules/mob/living/silicon/ai/decentralized_ai.dm
@@ -116,7 +116,7 @@
. = ..()
. += span_notice("Insert the device into a functioning data core to proceed.")
. += span_notice("Then allocate CPU cycles to revive the AI using a local network interface.")
- . += span_notice("The integrated battery reports [round(living_ticks / AI_BLACKBOX_LIFETIME * 100)]% battery remaining.")
+ . += span_notice("The integrated battery reports [round((living_ticks / AI_BLACKBOX_LIFETIME) * 100)]% battery remaining.")
. += span_notice("A total of [processing_progress] CPU cycles have been allocated out of the required [AI_BLACKBOX_PROCESSING_REQUIREMENT].")
/obj/item/dead_ai/Destroy()
From 34f79780707abac5f1095dd71c88ad176808d10d Mon Sep 17 00:00:00 2001
From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com>
Date: Fri, 4 Nov 2022 12:38:47 +0100
Subject: [PATCH 096/112] Update decentralized_ai.dm
---
code/modules/mob/living/silicon/ai/decentralized_ai.dm | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/code/modules/mob/living/silicon/ai/decentralized_ai.dm b/code/modules/mob/living/silicon/ai/decentralized_ai.dm
index 574adba191ff..3aa978c414a6 100644
--- a/code/modules/mob/living/silicon/ai/decentralized_ai.dm
+++ b/code/modules/mob/living/silicon/ai/decentralized_ai.dm
@@ -107,7 +107,7 @@
if(stored_ai)
living_ticks--
if(living_ticks <= AI_BLACKBOX_LIFETIME * 0.5)
- visible_message(span_danger("The integrated battery on [src] beeps and warns that it's 50% empty."))
+ visible_message(span_danger("The integrated battery on [src] beeps and warns that it's [span_bold("50%")] empty."))
if(living_ticks <= 0)
visible_message(span_danger("The integrated battery on [src] expires and the stored AI is subsequently wiped."))
qdel(src)
@@ -116,8 +116,8 @@
. = ..()
. += span_notice("Insert the device into a functioning data core to proceed.")
. += span_notice("Then allocate CPU cycles to revive the AI using a local network interface.")
- . += span_notice("The integrated battery reports [round((living_ticks / AI_BLACKBOX_LIFETIME) * 100)]% battery remaining.")
- . += span_notice("A total of [processing_progress] CPU cycles have been allocated out of the required [AI_BLACKBOX_PROCESSING_REQUIREMENT].")
+ . += span_notice("The integrated battery reports [span_bold(round((living_ticks / AI_BLACKBOX_LIFETIME) * 100) + "%")] battery remaining.")
+ . += span_notice("A total of [span_bold(processing_progress)] CPU cycles have been allocated out of the required [span_bold(AI_BLACKBOX_PROCESSING_REQUIREMENT)].")
/obj/item/dead_ai/Destroy()
. = ..()
From d4acbf6ca9684788fdc73f0d37c064df8306b325 Mon Sep 17 00:00:00 2001
From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com>
Date: Fri, 4 Nov 2022 12:45:47 +0100
Subject: [PATCH 097/112] Map linting
Update YogsDelta.dmm
Update EclipseStation.dmm
Update EclipseStation.dmm
Update KiloStation.dmm
Update GaxStation.dmm
---
_maps/map_files/EclipseStation/EclipseStation.dmm | 4 ----
_maps/map_files/GaxStation/GaxStation.dmm | 4 ----
_maps/map_files/KiloStation/KiloStation.dmm | 7 -------
_maps/map_files/YogsDelta/YogsDelta.dmm | 4 ----
4 files changed, 19 deletions(-)
diff --git a/_maps/map_files/EclipseStation/EclipseStation.dmm b/_maps/map_files/EclipseStation/EclipseStation.dmm
index 879d1b12eb0a..05cd6fa2fd2d 100644
--- a/_maps/map_files/EclipseStation/EclipseStation.dmm
+++ b/_maps/map_files/EclipseStation/EclipseStation.dmm
@@ -59454,7 +59454,6 @@
/area/crew_quarters/heads/hor)
"cto" = (
/obj/structure/rack,
-,
/obj/item/disk/holodisk/tutorial/AICore,
/turf/open/floor/plasteel,
/area/crew_quarters/heads/hor)
@@ -90561,9 +90560,6 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{
dir = 1
},
-{
- dir = 1
- },
/turf/open/floor/plasteel/dark,
/area/ai_monitored/turret_protected/ai_upload)
"vat" = (
diff --git a/_maps/map_files/GaxStation/GaxStation.dmm b/_maps/map_files/GaxStation/GaxStation.dmm
index 5fd62bb92154..a6069d6ba8c6 100644
--- a/_maps/map_files/GaxStation/GaxStation.dmm
+++ b/_maps/map_files/GaxStation/GaxStation.dmm
@@ -65,7 +65,6 @@
/obj/structure/rack,
/obj/item/aicard,
/obj/item/disk/holodisk/tutorial/AICore,
-,
/obj/machinery/power/apc{
areastring = "/area/crew_quarters/heads/hor";
dir = 8;
@@ -18750,9 +18749,6 @@
/obj/machinery/computer/robotics{
dir = 8
},
-{
- pixel_x = 32
- },
/turf/open/floor/carpet/exoticpurple,
/area/crew_quarters/heads/hor)
"jyN" = (
diff --git a/_maps/map_files/KiloStation/KiloStation.dmm b/_maps/map_files/KiloStation/KiloStation.dmm
index c6f59df05c8a..625c5a105277 100644
--- a/_maps/map_files/KiloStation/KiloStation.dmm
+++ b/_maps/map_files/KiloStation/KiloStation.dmm
@@ -85994,7 +85994,6 @@
/obj/effect/turf_decal/tile/neutral,
/obj/structure/table,
/obj/item/hand_labeler,
-,
/turf/open/floor/plasteel/dark,
/area/crew_quarters/heads/hor)
"fMR" = (
@@ -92189,9 +92188,6 @@
dir = 1
},
/obj/effect/mapping_helpers/teleport_anchor,
-{
- pixel_x = -32
- },
/turf/open/floor/plasteel/showroomfloor,
/area/science/server)
"lzb" = (
@@ -92212,9 +92208,6 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
-{
- dir = 8
- },
/turf/open/floor/plasteel/dark,
/area/ai_monitored/storage/satellite)
"lBm" = (
diff --git a/_maps/map_files/YogsDelta/YogsDelta.dmm b/_maps/map_files/YogsDelta/YogsDelta.dmm
index 760b2e907fde..a50c608a5fe8 100644
--- a/_maps/map_files/YogsDelta/YogsDelta.dmm
+++ b/_maps/map_files/YogsDelta/YogsDelta.dmm
@@ -66011,9 +66011,6 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
-{
- dir = 1
- },
/turf/open/floor/plasteel/dark,
/area/ai_monitored/turret_protected/aisat_interior)
"cam" = (
@@ -127266,7 +127263,6 @@
/obj/structure/table/reinforced,
/obj/item/aicard,
/obj/effect/turf_decal/bot,
-,
/obj/item/disk/holodisk/tutorial/AICore,
/turf/open/floor/plasteel,
/area/crew_quarters/heads/hor)
From 99c0124287656cd0ee338a917e5ffbc5736e1a32 Mon Sep 17 00:00:00 2001
From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com>
Date: Fri, 4 Nov 2022 13:20:35 +0100
Subject: [PATCH 098/112] MAPS
---
_maps/RandomRuins/StationRuins/GaxStation/ai_whale.dmm | 3 ---
.../mob/living/silicon/ai/decentralized/_ai_machinery.dm | 3 ++-
2 files changed, 2 insertions(+), 4 deletions(-)
diff --git a/_maps/RandomRuins/StationRuins/GaxStation/ai_whale.dmm b/_maps/RandomRuins/StationRuins/GaxStation/ai_whale.dmm
index ac8c7800eddc..cac1ade163c8 100644
--- a/_maps/RandomRuins/StationRuins/GaxStation/ai_whale.dmm
+++ b/_maps/RandomRuins/StationRuins/GaxStation/ai_whale.dmm
@@ -2204,9 +2204,6 @@
dir = 8;
pixel_x = 24
},
-{
- dir = 8
- },
/turf/open/floor/plasteel/grimy,
/area/ai_monitored/turret_protected/aisat_interior)
"Um" = (
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 50e89f1e191e..629d2defe181 100644
--- a/code/modules/mob/living/silicon/ai/decentralized/_ai_machinery.dm
+++ b/code/modules/mob/living/silicon/ai/decentralized/_ai_machinery.dm
@@ -1,6 +1,7 @@
#define AI_MACHINE_TOO_HOT "Environment too hot"
#define AI_MACHINE_NO_MOLES "Environment lacks an atmosphere"
+#define AI_MACHINE_NO_NETWORK "Lacks a network connection"
/obj/machinery/ai
name = "You shouldn't see this!"
@@ -44,7 +45,7 @@
if(stat & (BROKEN|NOPOWER|EMPED))
return FALSE
if(!network)
- return FALSE
+ return AI_MACHINE_NO_NETWORK
var/turf/T = get_turf(src)
var/datum/gas_mixture/env = T.return_air()
From 0d33fcf0dd996e2a0311713e861a5e7de9d1daa5 Mon Sep 17 00:00:00 2001
From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com>
Date: Fri, 4 Nov 2022 13:31:18 +0100
Subject: [PATCH 099/112] minor changes
---
.../mob/living/silicon/ai/decentralized/_ai_machinery.dm | 9 +++++----
.../mob/living/silicon/ai/decentralized/ai_data_core.dm | 2 ++
2 files changed, 7 insertions(+), 4 deletions(-)
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 629d2defe181..d1182af5eb8a 100644
--- a/code/modules/mob/living/silicon/ai/decentralized/_ai_machinery.dm
+++ b/code/modules/mob/living/silicon/ai/decentralized/_ai_machinery.dm
@@ -1,7 +1,8 @@
-#define AI_MACHINE_TOO_HOT "Environment too hot"
-#define AI_MACHINE_NO_MOLES "Environment lacks an atmosphere"
-#define AI_MACHINE_NO_NETWORK "Lacks a network connection"
+#define AI_MACHINE_TOO_HOT "Environment too hot"
+#define AI_MACHINE_NO_MOLES "Environment lacks an atmosphere"
+#define AI_MACHINE_NO_NETWORK "Lacks a network connection"
+#define AI_MACHINE_BROKEN_NOPOWER_EMPED "Either broken, out of power or EMPed"
/obj/machinery/ai
name = "You shouldn't see this!"
@@ -43,7 +44,7 @@
/obj/machinery/ai/proc/get_holder_status()
if(stat & (BROKEN|NOPOWER|EMPED))
- return FALSE
+ return AI_MACHINE_BROKEN_NOPOWER_EMPED
if(!network)
return AI_MACHINE_NO_NETWORK
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 64780b318849..c7f3ff4abbef 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
@@ -146,6 +146,8 @@ GLOBAL_VAR_INIT(primary_data_core, null)
valid_ticks++
if(valid_ticks == 1)
update_icon()
+ if(icon_state == "core-offline")
+ update_icon()
if(smoke)
vis_contents -= smoke
QDEL_NULL(smoke)
From d2d1c3484c2c2d14f9692281a13511b28932c2bf Mon Sep 17 00:00:00 2001
From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com>
Date: Fri, 4 Nov 2022 13:34:54 +0100
Subject: [PATCH 100/112] uploading
---
code/modules/mob/living/silicon/ai/decentralized_ai.dm | 8 +++++---
.../file_system/programs/ai_network/ainetworkinterface.dm | 2 +-
2 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/code/modules/mob/living/silicon/ai/decentralized_ai.dm b/code/modules/mob/living/silicon/ai/decentralized_ai.dm
index 3aa978c414a6..2f64ffe215a1 100644
--- a/code/modules/mob/living/silicon/ai/decentralized_ai.dm
+++ b/code/modules/mob/living/silicon/ai/decentralized_ai.dm
@@ -1,8 +1,10 @@
-/mob/living/silicon/ai/proc/available_ai_cores(forced = FALSE)
+/mob/living/silicon/ai/proc/available_ai_cores(forced = FALSE, datum/ai_network/forced_network)
if(!GLOB.data_cores.len)
return FALSE
if(!forced)
+ if(forced_network)
+ return forced_network.find_data_core()
if(!ai_network)
return FALSE
return ai_network.find_data_core()
@@ -30,7 +32,7 @@
-/mob/living/silicon/ai/proc/relocate(silent = FALSE, forced = FALSE)
+/mob/living/silicon/ai/proc/relocate(silent = FALSE, forced = FALSE, datum/ai_network/forced_network)
if(is_dying)
return
if(!silent)
@@ -38,7 +40,7 @@
var/obj/machinery/ai/data_core/new_data_core
- new_data_core = available_ai_cores(forced)
+ new_data_core = available_ai_cores(forced, forced_network)
if(!new_data_core)
INVOKE_ASYNC(src, /mob/living/silicon/ai.proc/death_prompt)
diff --git a/code/modules/modular_computers/file_system/programs/ai_network/ainetworkinterface.dm b/code/modules/modular_computers/file_system/programs/ai_network/ainetworkinterface.dm
index 3273c992bf1e..e39d553d3bf4 100644
--- a/code/modules/modular_computers/file_system/programs/ai_network/ainetworkinterface.dm
+++ b/code/modules/modular_computers/file_system/programs/ai_network/ainetworkinterface.dm
@@ -201,7 +201,7 @@
else
A = new /mob/living/silicon/ai(computer.physical.loc, laws, brain.brainmob)
- A.relocate(TRUE)
+ A.relocate(TRUE, forced_network = net)
if(brain.force_replace_ai_name)
A.fully_replace_character_name(A.name, brain.replacement_ai_name())
From eff0fd0a189b294d251069973f25f91ddc2bd51b Mon Sep 17 00:00:00 2001
From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com>
Date: Fri, 4 Nov 2022 13:36:50 +0100
Subject: [PATCH 101/112] smoke
---
.../mob/living/silicon/ai/decentralized/ai_data_core.dm | 5 +++--
.../mob/living/silicon/ai/decentralized/server_cabinet.dm | 5 +++--
2 files changed, 6 insertions(+), 4 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 c7f3ff4abbef..debd7a394220 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
@@ -156,8 +156,9 @@ GLOBAL_VAR_INIT(primary_data_core, null)
else
valid_ticks--
if(!smoke)
- smoke = new()
- vis_contents += smoke
+ if(get_holder_status() == AI_MACHINE_TOO_HOT)
+ smoke = new()
+ vis_contents += smoke
if(valid_ticks <= 0)
use_power = IDLE_POWER_USE
update_icon()
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 13a2e7cf7b70..9da7f036481f 100644
--- a/code/modules/mob/living/silicon/ai/decentralized/server_cabinet.dm
+++ b/code/modules/mob/living/silicon/ai/decentralized/server_cabinet.dm
@@ -102,8 +102,9 @@ GLOBAL_LIST_EMPTY(server_cabinets)
else
valid_ticks--
if(!smoke)
- smoke = new()
- vis_contents += smoke
+ if(get_holder_status() == AI_MACHINE_TOO_HOT)
+ smoke = new()
+ vis_contents += smoke
if(was_valid_holder)
if(valid_ticks > 0)
return
From 0509c51f6b45ddd8babaefc87fadc26f2665d433 Mon Sep 17 00:00:00 2001
From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com>
Date: Fri, 4 Nov 2022 13:46:07 +0100
Subject: [PATCH 102/112] netmin move
---
code/__DEFINES/jobs.dm | 12 ++++++------
.../code/modules/jobs/job_types/network_admin.dm | 4 ++--
2 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/code/__DEFINES/jobs.dm b/code/__DEFINES/jobs.dm
index d1e34bfe10c3..920f8bae1a55 100644
--- a/code/__DEFINES/jobs.dm
+++ b/code/__DEFINES/jobs.dm
@@ -65,12 +65,12 @@
#define JOB_DISPLAY_ORDER_CHIEF_ENGINEER 7
#define JOB_DISPLAY_ORDER_STATION_ENGINEER 8
#define JOB_DISPLAY_ORDER_ATMOSPHERIC_TECHNICIAN 9
-#define JOB_DISPLAY_ORDER_NETWORK_ADMIN 10
-#define JOB_DISPLAY_ORDER_AI 11
-#define JOB_DISPLAY_ORDER_CYBORG 12
-#define JOB_DISPLAY_ORDER_RESEARCH_DIRECTOR 13
-#define JOB_DISPLAY_ORDER_SCIENTIST 14
-#define JOB_DISPLAY_ORDER_ROBOTICIST 15
+#define JOB_DISPLAY_ORDER_AI 10
+#define JOB_DISPLAY_ORDER_CYBORG 11
+#define JOB_DISPLAY_ORDER_RESEARCH_DIRECTOR 12
+#define JOB_DISPLAY_ORDER_SCIENTIST 13
+#define JOB_DISPLAY_ORDER_ROBOTICIST 14
+#define JOB_DISPLAY_ORDER_NETWORK_ADMIN 15
#define JOB_DISPLAY_ORDER_QUARTERMASTER 16
#define JOB_DISPLAY_ORDER_CARGO_TECHNICIAN 17
#define JOB_DISPLAY_ORDER_SHAFT_MINER 18
diff --git a/yogstation/code/modules/jobs/job_types/network_admin.dm b/yogstation/code/modules/jobs/job_types/network_admin.dm
index b1c6433719ce..2b5bbd83c233 100644
--- a/yogstation/code/modules/jobs/job_types/network_admin.dm
+++ b/yogstation/code/modules/jobs/job_types/network_admin.dm
@@ -2,7 +2,7 @@
title = "Network Admin"
flag = NETWORKADMIN
department_head = list("Chief Engineer", "Research Director")
- department_flag = ENGSEC
+ department_flag = MEDSCI
faction = "Station"
total_positions = 1
spawn_positions = 1
@@ -17,7 +17,7 @@
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, ACCESS_TOX)
paycheck = PAYCHECK_MEDIUM
- paycheck_department = ACCOUNT_ENG
+ paycheck_department = ACCOUNT_SCI
display_order = JOB_DISPLAY_ORDER_NETWORK_ADMIN
minimal_character_age = 22 //Feasibly same level as engineer, mostly a data engineer instead of a mechanical or construction-based one, though is still capable of making certain machines
From b502e7d8c9204a1407f0844b001f3d76afec5e36 Mon Sep 17 00:00:00 2001
From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com>
Date: Fri, 4 Nov 2022 13:48:50 +0100
Subject: [PATCH 103/112] Alerts are local
---
.../mob/living/silicon/ai/ai_network/shared_resources.dm | 4 ++++
.../mob/living/silicon/ai/decentralized/ai_data_core.dm | 2 +-
2 files changed, 5 insertions(+), 1 deletion(-)
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 5e91bc2aa22a..1ec291ed1b95 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
@@ -269,3 +269,7 @@
update_allocations()
+/datum/ai_shared_resources/proc/get_all_ais()
+ . = list()
+ for(var/datum/ai_network/A in networks)
+ . |= A.ai_list
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 debd7a394220..f82adb917884 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,7 +168,7 @@ GLOBAL_VAR_INIT(primary_data_core, null)
if(!warning_sent && COOLDOWN_FINISHED(src, warning_cooldown))
warning_sent = TRUE
COOLDOWN_START(src, warning_cooldown, AI_DATA_CORE_WARNING_COOLDOWN)
- var/list/send_to = GLOB.ai_list.Copy()
+ var/list/send_to = network.resources.get_all_ais()
for(var/mob/living/silicon/ai/AI in send_to)
if(AI.is_dying)
continue
From 87a23f27e5c55790e9034215136cc8d9e8cec1a8 Mon Sep 17 00:00:00 2001
From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com>
Date: Fri, 4 Nov 2022 14:00:38 +0100
Subject: [PATCH 104/112] Minor bugfixes + makes alerts local
---
.../modules/mob/living/silicon/ai/ai_network/ai_network.dm | 4 ++--
.../mob/living/silicon/ai/decentralized/ai_data_core.dm | 7 +++++--
.../mob/living/silicon/ai/decentralized/server_cabinet.dm | 3 ++-
code/modules/mob/living/silicon/ai/decentralized_ai.dm | 3 ---
4 files changed, 9 insertions(+), 8 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 6dd3fa00913b..d439593c7024 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,7 +137,7 @@
/datum/ai_network/proc/find_data_core()
for(var/obj/machinery/ai/data_core/core in get_all_nodes())
- if(core.can_transfer_ai())
+ if(!QDELETED(core) && core.can_transfer_ai())
return core
/datum/ai_network/proc/get_all_nodes(checked_nets = list())
@@ -168,7 +168,7 @@
/datum/ai_network/proc/update_resources()
- resources.update_resources()
+ resources?.update_resources()
/datum/ai_network/proc/total_cpu()
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 f82adb917884..4dc171ae83da 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
@@ -62,11 +62,13 @@ GLOBAL_VAR_INIT(primary_data_core, null)
/obj/machinery/ai/data_core/Destroy()
+ disconnect_from_network()
GLOB.data_cores -= src
if(GLOB.primary_data_core == src)
GLOB.primary_data_core = null
- var/list/all_ais = GLOB.ai_list.Copy()
+
+ var/list/all_ais = net.resources.get_all_ais()
for(var/mob/living/silicon/ai/AI in contents)
all_ais -= AI
@@ -114,7 +116,8 @@ GLOBAL_VAR_INIT(primary_data_core, null)
if(!isobserver(user))
return
. += "Networked AI Laws:"
- for(var/mob/living/silicon/ai/AI in GLOB.ai_list)
+ var/list/connected_ais = network.resources.get_all_ais()
+ for(var/mob/living/silicon/ai/AI in connected_ais)
var/active_status = "(Core: [FOLLOW_LINK(user, AI.loc)], Eye: [FOLLOW_LINK(user, AI.eyeobj)])"
if(!AI.mind && AI.deployed_shell)
active_status = "(Controlling [FOLLOW_LINK(user, AI.deployed_shell)][AI.deployed_shell.name])"
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 9da7f036481f..7e0e971550e6 100644
--- a/code/modules/mob/living/silicon/ai/decentralized/server_cabinet.dm
+++ b/code/modules/mob/living/silicon/ai/decentralized/server_cabinet.dm
@@ -209,4 +209,5 @@ GLOBAL_LIST_EMPTY(server_cabinets)
/obj/machinery/ai/server_cabinet/disconnect_from_network()
var/datum/ai_network/temp = network
. = ..()
- temp.update_resources()
+ if(temp)
+ 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 2f64ffe215a1..7458fb5f4b7d 100644
--- a/code/modules/mob/living/silicon/ai/decentralized_ai.dm
+++ b/code/modules/mob/living/silicon/ai/decentralized_ai.dm
@@ -1,7 +1,4 @@
/mob/living/silicon/ai/proc/available_ai_cores(forced = FALSE, datum/ai_network/forced_network)
- if(!GLOB.data_cores.len)
- return FALSE
-
if(!forced)
if(forced_network)
return forced_network.find_data_core()
From b618b13c3c83d89a3fa0350a5c9dbced4c62b80d Mon Sep 17 00:00:00 2001
From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com>
Date: Fri, 4 Nov 2022 14:10:47 +0100
Subject: [PATCH 105/112] Update AiDashboard.js
---
tgui/packages/tgui/interfaces/AiDashboard.js | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/tgui/packages/tgui/interfaces/AiDashboard.js b/tgui/packages/tgui/interfaces/AiDashboard.js
index 39062bc2e81b..4c36ba500313 100644
--- a/tgui/packages/tgui/interfaces/AiDashboard.js
+++ b/tgui/packages/tgui/interfaces/AiDashboard.js
@@ -269,11 +269,10 @@ const AbilityCharging = (props, context) => {
buttons={(
Assigned CPU:
- act('allocate_recharge_cpu', {
+ act('allocate_recharge_cpu', {
project_name: ability.project_name,
amount: Math.round((value / 100) * 100) / 100,
})} />
- THz
)}>
From 1c4dd1efdf6e1480dbb0deda069d4c5f7c5bce09 Mon Sep 17 00:00:00 2001
From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com>
Date: Fri, 4 Nov 2022 14:11:28 +0100
Subject: [PATCH 106/112] Update room_lockdown.dm
---
.../living/silicon/ai/decentralized/projects/room_lockdown.dm | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/code/modules/mob/living/silicon/ai/decentralized/projects/room_lockdown.dm b/code/modules/mob/living/silicon/ai/decentralized/projects/room_lockdown.dm
index 84304dd95e8b..cc1f1360aa30 100644
--- a/code/modules/mob/living/silicon/ai/decentralized/projects/room_lockdown.dm
+++ b/code/modules/mob/living/silicon/ai/decentralized/projects/room_lockdown.dm
@@ -1,14 +1,14 @@
/datum/ai_project/room_lockdown
name = "Room Lockdown"
description = "This ability will allow you to close and bolt all working doors, and trigger the fire alarms in a clicked area after a short delay and announcement."
- research_cost = 2000
+ research_cost = 2500
ram_required = 0
category = AI_PROJECT_CROWD_CONTROL
can_be_run = FALSE
ability_path = /datum/action/innate/ai/ranged/room_lockdown
- ability_recharge_cost = 1000
+ ability_recharge_cost = 1750
/datum/ai_project/room_lockdown/finish()
add_ability(ability_path)
From 4614246d4a45c1ae10a09233d50319ffa8b8fff7 Mon Sep 17 00:00:00 2001
From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com>
Date: Fri, 4 Nov 2022 14:15:35 +0100
Subject: [PATCH 107/112] Update ai_data_core.dm
---
.../modules/mob/living/silicon/ai/decentralized/ai_data_core.dm | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
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 4dc171ae83da..59e8339f517c 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
@@ -68,7 +68,7 @@ GLOBAL_VAR_INIT(primary_data_core, null)
GLOB.primary_data_core = null
- var/list/all_ais = net.resources.get_all_ais()
+ var/list/all_ais = network.resources.get_all_ais()
for(var/mob/living/silicon/ai/AI in contents)
all_ais -= AI
From 0d8a55b3f9dfe7d55b957027ee338adff5a0a5c6 Mon Sep 17 00:00:00 2001
From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com>
Date: Fri, 4 Nov 2022 15:22:58 +0100
Subject: [PATCH 108/112] Allows off-station AIs
---
.../mob/living/silicon/ai/decentralized/ai_data_core.dm | 3 ---
1 file changed, 3 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 59e8339f517c..202a337289c9 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
@@ -134,11 +134,8 @@ GLOBAL_VAR_INIT(primary_data_core, null)
AI.disconnect_shell()
/obj/machinery/ai/data_core/proc/valid_data_core()
- if(!is_reebe(z) && !is_station_level(z))
- return FALSE
if(valid_ticks > 0 && network && network.total_cpu() >= AI_CORE_CPU_REQUIREMENT && network.total_ram() >= AI_CORE_RAM_REQUIREMENT)
return TRUE
-
return FALSE
From 01d56dc75662d95758272a17d65ff59c9aa47fd3 Mon Sep 17 00:00:00 2001
From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com>
Date: Fri, 4 Nov 2022 15:30:50 +0100
Subject: [PATCH 109/112] oops ai
---
code/modules/mob/living/silicon/ai/ai.dm | 4 ++--
.../file_system/programs/ai_network/ainetworkinterface.dm | 4 ++--
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm
index 4b906764f7ab..faeb705f15b7 100644
--- a/code/modules/mob/living/silicon/ai/ai.dm
+++ b/code/modules/mob/living/silicon/ai/ai.dm
@@ -127,7 +127,7 @@
-/mob/living/silicon/ai/Initialize(mapload, datum/ai_laws/L, mob/target_ai, shunted)
+/mob/living/silicon/ai/Initialize(mapload, datum/ai_laws/L, mob/target_ai, shunted, forced_relocate = TRUE)
. = ..()
if(!target_ai) //If there is no player/brain inside.
return INITIALIZE_HINT_QDEL //Delete AI.
@@ -188,7 +188,7 @@
dashboard = new(src)
- if(!istype(loc, /obj/machinery/ai/data_core) && !shunted)
+ if(!istype(loc, /obj/machinery/ai/data_core) && !shunted && forced_relocate)
relocate(TRUE, TRUE)
if(isvalidAIloc(loc))
diff --git a/code/modules/modular_computers/file_system/programs/ai_network/ainetworkinterface.dm b/code/modules/modular_computers/file_system/programs/ai_network/ainetworkinterface.dm
index e39d553d3bf4..4ad8d57e44cc 100644
--- a/code/modules/modular_computers/file_system/programs/ai_network/ainetworkinterface.dm
+++ b/code/modules/modular_computers/file_system/programs/ai_network/ainetworkinterface.dm
@@ -197,9 +197,9 @@
laws.set_laws_config()
if (brain.overrides_aicore_laws)
- A = new /mob/living/silicon/ai(computer.physical.loc, brain.laws, brain.brainmob)
+ A = new /mob/living/silicon/ai(computer.physical.loc, brain.laws, brain.brainmob, forced_relocate = FALSE)
else
- A = new /mob/living/silicon/ai(computer.physical.loc, laws, brain.brainmob)
+ A = new /mob/living/silicon/ai(computer.physical.loc, laws, brain.brainmob, forced_relocate = FALSE)
A.relocate(TRUE, forced_network = net)
From 9549b833c909cb3d664e23fc69df2d3b8a4931db Mon Sep 17 00:00:00 2001
From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com>
Date: Fri, 4 Nov 2022 15:40:20 +0100
Subject: [PATCH 110/112] Update ainetworkinterface.dm
---
.../file_system/programs/ai_network/ainetworkinterface.dm | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/code/modules/modular_computers/file_system/programs/ai_network/ainetworkinterface.dm b/code/modules/modular_computers/file_system/programs/ai_network/ainetworkinterface.dm
index 4ad8d57e44cc..4696c21cbba5 100644
--- a/code/modules/modular_computers/file_system/programs/ai_network/ainetworkinterface.dm
+++ b/code/modules/modular_computers/file_system/programs/ai_network/ainetworkinterface.dm
@@ -197,9 +197,9 @@
laws.set_laws_config()
if (brain.overrides_aicore_laws)
- A = new /mob/living/silicon/ai(computer.physical.loc, brain.laws, brain.brainmob, forced_relocate = FALSE)
+ A = new /mob/living/silicon/ai(computer.physical.loc, brain.laws, brain.brainmob, FALSE, FALSE)
else
- A = new /mob/living/silicon/ai(computer.physical.loc, laws, brain.brainmob, forced_relocate = FALSE)
+ A = new /mob/living/silicon/ai(computer.physical.loc, laws, brain.brainmob, FALSE, FALSE)
A.relocate(TRUE, forced_network = net)
From c33126e3c41c6889de1773da326ea91984db10ad Mon Sep 17 00:00:00 2001
From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com>
Date: Fri, 4 Nov 2022 19:08:18 +0100
Subject: [PATCH 111/112] network admin color change
---
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 2b5bbd83c233..198320c5003f 100644
--- a/yogstation/code/modules/jobs/job_types/network_admin.dm
+++ b/yogstation/code/modules/jobs/job_types/network_admin.dm
@@ -7,7 +7,7 @@
total_positions = 1
spawn_positions = 1
supervisors = "the chief engineer and research director"
- selection_color = "#fff5cc"
+ selection_color = "#ffeeff"
exp_requirements = 180
exp_type = EXP_TYPE_CREW
alt_titles = list("AI Tech Support", "SysOp")
From 799c70233f6bd35e0458d02e757a302b277a1f4e Mon Sep 17 00:00:00 2001
From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com>
Date: Fri, 4 Nov 2022 19:08:33 +0100
Subject: [PATCH 112/112] e
---
_maps/map_files/YogStation/YogStation.dmm | 60 ++++++++++++-----------
1 file changed, 31 insertions(+), 29 deletions(-)
diff --git a/_maps/map_files/YogStation/YogStation.dmm b/_maps/map_files/YogStation/YogStation.dmm
index c075c28ad429..8fbec319fb4b 100644
--- a/_maps/map_files/YogStation/YogStation.dmm
+++ b/_maps/map_files/YogStation/YogStation.dmm
@@ -25822,23 +25822,6 @@
/obj/effect/turf_decal/tile/neutral/fourcorners,
/turf/open/floor/plasteel/dark,
/area/engine/gravity_generator)
-"ghq" = (
-/obj/structure/cable/yellow{
- icon_state = "1-2"
- },
-/obj/machinery/door/firedoor/border_only{
- dir = 1
- },
-/obj/machinery/door/firedoor/border_only,
-/obj/machinery/door/airlock/hatch{
- name = "Abandoned Room";
- req_access_txt = "65"
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4,
-/obj/structure/barricade/wooden/crude,
-/turf/open/floor/plasteel/grimy,
-/area/ai_monitored/turret_protected/aisat_interior)
"ght" = (
/obj/item/radio/intercom{
name = "Station Intercom (General)";
@@ -37815,6 +37798,17 @@
},
/turf/open/floor/plasteel/dark,
/area/engine/atmos_distro)
+"lnx" = (
+/obj/machinery/airalarm{
+ dir = 8;
+ pixel_x = 24
+ },
+/obj/machinery/computer/message_monitor{
+ dir = 8
+ },
+/obj/effect/decal/cleanable/cobweb/cobweb2,
+/turf/open/floor/plating,
+/area/ai_monitored/turret_protected/aisat_interior)
"lnA" = (
/obj/structure/table,
/obj/item/assembly/signaler,
@@ -54888,6 +54882,24 @@
},
/turf/open/floor/plasteel,
/area/engine/atmos)
+"sEw" = (
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/machinery/door/firedoor/border_only{
+ dir = 1
+ },
+/obj/machinery/door/firedoor/border_only,
+/obj/machinery/door/airlock/hatch{
+ name = "Abandoned Room";
+ req_access_txt = "65"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4,
+/obj/structure/barricade/wooden/crude,
+/obj/effect/mapping_helpers/airlock/locked,
+/turf/open/floor/plasteel/grimy,
+/area/ai_monitored/turret_protected/aisat_interior)
"sEx" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{
dir = 6
@@ -62056,16 +62068,6 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/tcommsat/server)
-"vAV" = (
-/obj/machinery/airalarm{
- dir = 8;
- pixel_x = 24
- },
-/obj/machinery/computer/message_monitor{
- dir = 8
- },
-/turf/open/floor/plating,
-/area/ai_monitored/turret_protected/aisat_interior)
"vBj" = (
/obj/machinery/camera{
c_tag = "Engineering Access"
@@ -108727,7 +108729,7 @@ snB
cqk
bhL
snB
-ghq
+sEw
geT
cXZ
hXq
@@ -108985,7 +108987,7 @@ kik
eEZ
jWq
vmm
-vAV
+lnx
kfc
hnc
wjj