diff --git a/.vscode/launch.json b/.vscode/launch.json index 543058728f56..fbf8bfba5851 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -6,7 +6,8 @@ "request": "launch", "name": "Launch DreamSeeker", "preLaunchTask": "Build All", - "dmb": "${workspaceFolder}/${command:CurrentDMB}" + "dmb": "${workspaceFolder}/${command:CurrentDMB}", + "dreamDaemon": true } ] } diff --git a/_maps/RandomRuins/SpaceRuins/oldstation.dmm b/_maps/RandomRuins/SpaceRuins/oldstation.dmm index cbfc326abb8f..612bad2abbd0 100644 --- a/_maps/RandomRuins/SpaceRuins/oldstation.dmm +++ b/_maps/RandomRuins/SpaceRuins/oldstation.dmm @@ -705,10 +705,6 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/ancientstation/comm) -"bQ" = ( -/obj/structure/AIcore/deactivated, -/turf/open/floor/plasteel/dark, -/area/ruin/space/has_grav/ancientstation/deltaai) "bR" = ( /obj/machinery/light/small{ brightness = 3; @@ -8152,6 +8148,9 @@ }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/ancientstation/atmo) +"AC" = ( +/turf/open/floor/plasteel/dark, +/area/ruin/space/has_grav/ancientstation/deltaai) "AF" = ( /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating, @@ -12871,7 +12870,7 @@ gK ac ac ac -bQ +AC ac ac ac diff --git a/_maps/RandomRuins/StationRuins/maint/10x5/10x5_oldaichamber.dmm b/_maps/RandomRuins/StationRuins/maint/10x5/10x5_oldaichamber.dmm index 81963d160bf2..ed2e00f5de91 100644 --- a/_maps/RandomRuins/StationRuins/maint/10x5/10x5_oldaichamber.dmm +++ b/_maps/RandomRuins/StationRuins/maint/10x5/10x5_oldaichamber.dmm @@ -83,10 +83,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/dark, /area/template_noop) -"p" = ( -/obj/structure/AIcore, -/turf/open/floor/plasteel/dark, -/area/template_noop) "q" = ( /turf/open/floor/circuit, /area/template_noop) @@ -144,6 +140,9 @@ /obj/machinery/light/small/broken, /turf/open/floor/plating, /area/template_noop) +"K" = ( +/turf/open/floor/plasteel/dark, +/area/template_noop) (1,1,1) = {" a @@ -162,7 +161,7 @@ x (3,1,1) = {" c k -p +K q y "} diff --git a/_maps/map_files/EclipseStation/EclipseStation.dmm b/_maps/map_files/EclipseStation/EclipseStation.dmm index ab57391f6128..b645cf94ba1c 100644 --- a/_maps/map_files/EclipseStation/EclipseStation.dmm +++ b/_maps/map_files/EclipseStation/EclipseStation.dmm @@ -21584,12 +21584,6 @@ }, /turf/closed/wall/r_wall, /area/crew_quarters/heads/captain) -"aVo" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/port) "aVp" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 1 @@ -59293,14 +59287,6 @@ }, /turf/open/floor/carpet/purple, /area/crew_quarters/heads/hor) -"cto" = ( -/obj/structure/rack, -/obj/item/circuitboard/aicore{ - pixel_x = -2; - pixel_y = 4 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/heads/hor) "ctp" = ( /obj/structure/rack, /obj/item/taperecorder{ @@ -89117,6 +89103,11 @@ /obj/effect/spawner/lootdrop/maintenance/two, /turf/open/floor/plating, /area/maintenance/department/security) +"uRy" = ( +/obj/structure/rack, +/obj/item/circuitboard/computer/ai_upload_download, +/turf/open/floor/plasteel, +/area/crew_quarters/heads/hor) "uSP" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/vending/snack/random, @@ -124360,7 +124351,7 @@ crA cvA cwh csO -cto +uRy cOk aoU aaa @@ -141471,7 +141462,7 @@ azB hMY aRF aUP -aVo +aye axD aWW bas @@ -146610,7 +146601,7 @@ aBj aBj aJK aRX -aVo +aye ach aFk aFk diff --git a/_maps/map_files/IceBox/IceBox.dmm b/_maps/map_files/IceBox/IceBox.dmm index e4c7d67bf5ae..cc17be7e081d 100644 --- a/_maps/map_files/IceBox/IceBox.dmm +++ b/_maps/map_files/IceBox/IceBox.dmm @@ -37502,20 +37502,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/plasteel, /area/storage/primary) -"bxl" = ( -/obj/structure/rack, -/obj/item/circuitboard/aicore{ - pixel_x = -2; - pixel_y = 4 - }, -/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) "bxm" = ( /obj/effect/spawner/xmastree/rdrod, /obj/effect/turf_decal/stripes/line{ @@ -63037,6 +63023,16 @@ /obj/machinery/door/firedoor/border_only, /turf/open/floor/plating, /area/maintenance/port) +"uRu" = ( +/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) "uUM" = ( /obj/structure/closet/emcloset, /obj/machinery/atmospherics/components/unary/vent_pump/layer2{ @@ -113694,7 +113690,7 @@ bqk brp bmW bvK -bxl +uRu bys bzM bya diff --git a/_maps/map_files/KiloStation/KiloStation.dmm b/_maps/map_files/KiloStation/KiloStation.dmm index 74efff0dc284..d5c823264fd6 100644 --- a/_maps/map_files/KiloStation/KiloStation.dmm +++ b/_maps/map_files/KiloStation/KiloStation.dmm @@ -197,48 +197,13 @@ "aat" = ( /turf/closed/wall/r_wall/rust, /area/security/prison) -"aau" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/structure/table, -/obj/machinery/status_display/ai{ - pixel_y = 32 - }, -/obj/item/storage/toolbox/mechanical, -/obj/item/multitool, -/obj/effect/decal/cleanable/cobweb, -/obj/structure/cable/yellow{ - icon_state = "2-4" - }, -/turf/open/floor/engine, -/area/ai_monitored/turret_protected/ai) "aav" = ( /turf/closed/wall/r_wall, /area/security/prison) -"aaw" = ( -/obj/machinery/power/smes{ - charge = 5e+006; - name = "ai power storage unit" - }, -/obj/structure/cable/yellow{ - icon_state = "0-8" - }, -/turf/open/floor/circuit/red, -/area/ai_monitored/turret_protected/ai) "aax" = ( /obj/item/beacon, /turf/open/floor/engine, /area/science/xenobiology) -"aay" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/turf/open/floor/engine, -/area/ai_monitored/turret_protected/ai) "aaz" = ( /obj/structure/table/wood, /obj/item/clipboard, @@ -330,30 +295,6 @@ /obj/machinery/status_display/evac, /turf/closed/wall, /area/security/prison) -"aaH" = ( -/obj/machinery/power/terminal{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/structure/cable/yellow{ - icon_state = "0-2" - }, -/turf/open/floor/engine, -/area/ai_monitored/turret_protected/ai) -"aaI" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/structure/table, -/obj/structure/sign/warning/electricshock{ - pixel_y = 32 - }, -/obj/item/storage/toolbox/electrical, -/obj/item/assembly/flash/handheld, -/turf/open/floor/engine, -/area/ai_monitored/turret_protected/ai) "aaJ" = ( /obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/neutral{ @@ -421,37 +362,6 @@ }, /turf/open/floor/plasteel/dark, /area/science/xenobiology) -"aaM" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 5 - }, -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/remains/human, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line, -/obj/structure/cable/yellow{ - icon_state = "2-4" - }, -/turf/open/floor/engine, -/area/ai_monitored/turret_protected/ai) -"aaN" = ( -/obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 8 - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/turf/open/floor/engine, -/area/ai_monitored/turret_protected/ai) "aaO" = ( /obj/structure/flora/grass/jungle, /turf/open/floor/plating/asteroid/airless{ @@ -526,12 +436,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/security/warden) -"aaU" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/turf/open/floor/engine, -/area/ai_monitored/turret_protected/ai) "aaV" = ( /obj/structure/table/wood, /obj/item/radio/intercom, @@ -579,22 +483,6 @@ "aaY" = ( /turf/closed/wall, /area/security/detectives_office) -"aaZ" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 10 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/turf/open/floor/engine, -/area/ai_monitored/turret_protected/ai) "aba" = ( /obj/machinery/vending/snack/random, /obj/effect/turf_decal/tile/neutral{ @@ -648,24 +536,6 @@ /obj/machinery/door/firedoor/border_only, /turf/open/floor/plasteel/showroomfloor, /area/security/warden) -"abd" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/status_display/ai{ - pixel_x = 32 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/structure/cable/yellow{ - icon_state = "2-8" - }, -/turf/open/floor/engine, -/area/ai_monitored/turret_protected/ai) "abe" = ( /obj/effect/turf_decal/tile/blue{ dir = 4 @@ -700,13 +570,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/dark, /area/lawoffice) -"abg" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/circuit/green{ - luminosity = 2 - }, -/area/ai_monitored/turret_protected/ai) "abh" = ( /turf/closed/wall/rust, /area/security/prison) @@ -744,18 +607,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/fore) -"abk" = ( -/obj/structure/sign/warning/nosmoking{ - pixel_x = 30 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/turf/open/floor/engine, -/area/ai_monitored/turret_protected/ai) "abl" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ @@ -882,33 +733,6 @@ icon_state = "platingdmg1" }, /area/maintenance/starboard) -"aby" = ( -/obj/machinery/requests_console{ - department = "AI"; - departmentType = 5; - name = "AI RC"; - pixel_x = 30; - pixel_y = -30 - }, -/obj/machinery/ai_slipper{ - uses = 10 - }, -/obj/effect/turf_decal/box, -/obj/machinery/flasher{ - id = "AI"; - name = "Meatbag Pacifier"; - pixel_x = 24; - pixel_y = 24 - }, -/obj/machinery/camera{ - c_tag = "AI Chamber Core"; - dir = 1; - name = "core camera"; - network = list("aicore") - }, -/obj/machinery/light/floor, -/turf/open/floor/engine, -/area/ai_monitored/turret_protected/ai) "abz" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, /obj/machinery/computer/operating{ @@ -961,37 +785,11 @@ }, /turf/open/floor/plasteel/dark, /area/security/detectives_office) -"abC" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/turf/open/floor/circuit/green{ - luminosity = 2 - }, -/area/ai_monitored/turret_protected/ai) -"abD" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/turf/open/floor/engine, -/area/ai_monitored/turret_protected/ai) "abE" = ( /obj/effect/decal/cleanable/cobweb/cobweb2, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/maintenance/starboard) -"abF" = ( -/obj/machinery/ai_slipper{ - uses = 10 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/turf/open/floor/engine, -/area/ai_monitored/turret_protected/ai) "abG" = ( /obj/structure/chair/pew/left{ dir = 4; @@ -1044,20 +842,6 @@ initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/space/nearstation) -"abM" = ( -/obj/machinery/holopad, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/turf/open/floor/engine, -/area/ai_monitored/turret_protected/ai) "abN" = ( /obj/effect/turf_decal/bot, /obj/effect/decal/cleanable/dirt, @@ -1077,45 +861,6 @@ /obj/structure/sign/warning/securearea, /turf/closed/wall/rust, /area/chapel/office) -"abQ" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/flasher{ - id = "AI"; - name = "Meatbag Pacifier"; - pixel_x = 24 - }, -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/remains/human, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/turf/open/floor/engine, -/area/ai_monitored/turret_protected/ai) -"abR" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/flasher{ - id = "AI"; - name = "Meatbag Pacifier"; - pixel_y = 24 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, -/turf/open/floor/engine, -/area/ai_monitored/turret_protected/ai) -"abS" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ - dir = 4 - }, -/obj/structure/cable/yellow{ - icon_state = "1-4" - }, -/turf/open/floor/circuit/green{ - luminosity = 2 - }, -/area/ai_monitored/turret_protected/ai) "abT" = ( /obj/structure/sign/departments/security, /turf/closed/wall, @@ -1131,39 +876,6 @@ }, /turf/open/floor/plasteel/dark, /area/security/detectives_office) -"abV" = ( -/obj/machinery/flasher{ - id = "AI"; - name = "Meatbag Pacifier"; - pixel_y = 24 - }, -/turf/open/floor/circuit/green{ - luminosity = 2 - }, -/area/ai_monitored/turret_protected/ai) -"abW" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ - dir = 8 - }, -/turf/open/floor/circuit/green{ - luminosity = 2 - }, -/area/ai_monitored/turret_protected/ai) -"abX" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 8 - }, -/obj/machinery/newscaster/security_unit{ - pixel_x = 30 - }, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/turf/open/floor/engine, -/area/ai_monitored/turret_protected/ai) "abY" = ( /obj/effect/turf_decal/tile/red{ dir = 1 @@ -1200,19 +912,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /turf/open/floor/plasteel, /area/security/warden) -"acd" = ( -/obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 8 - }, -/obj/structure/cable/yellow{ - icon_state = "1-8" - }, -/turf/open/floor/engine, -/area/ai_monitored/turret_protected/ai) "ace" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/bot, @@ -1245,15 +944,6 @@ }, /turf/open/floor/plasteel, /area/security/warden) -"acg" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/turf/open/floor/circuit/green{ - luminosity = 2 - }, -/area/ai_monitored/turret_protected/ai) "ach" = ( /obj/structure/table, /obj/effect/turf_decal/tile/neutral{ @@ -1271,26 +961,6 @@ }, /turf/open/floor/plasteel/dark, /area/security/detectives_office) -"acj" = ( -/obj/machinery/ai_slipper{ - uses = 10 - }, -/obj/effect/turf_decal/box, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/corner, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 8 - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/turf/open/floor/engine, -/area/ai_monitored/turret_protected/ai) "ack" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 8 @@ -1310,35 +980,6 @@ /obj/structure/lattice, /turf/open/space/basic, /area/space/nearstation) -"acn" = ( -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/obj/machinery/light, -/obj/structure/extinguisher_cabinet{ - pixel_x = -26 - }, -/turf/open/floor/engine, -/area/ai_monitored/turret_protected/ai) -"aco" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line, -/obj/machinery/status_display/ai{ - pixel_x = 32; - pixel_y = -32 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 9 - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/turf/open/floor/engine, -/area/ai_monitored/turret_protected/ai) "acp" = ( /obj/effect/turf_decal/tile/red{ dir = 4 @@ -1380,37 +1021,9 @@ }, /turf/open/floor/wood, /area/security/detectives_office) -"acs" = ( -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/machinery/light, -/obj/item/radio/intercom{ - pixel_x = 28 - }, -/obj/structure/cable/yellow{ - icon_state = "1-8" - }, -/turf/open/floor/engine, -/area/ai_monitored/turret_protected/ai) "act" = ( /turf/closed/wall, /area/quartermaster/warehouse) -"acu" = ( -/obj/machinery/ai_slipper{ - uses = 10 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/turf/open/floor/engine, -/area/ai_monitored/turret_protected/ai) "acv" = ( /obj/structure/table, /obj/effect/turf_decal/tile/neutral{ @@ -1430,30 +1043,6 @@ }, /turf/open/floor/plasteel/dark, /area/science/xenobiology) -"acw" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/effect/decal/cleanable/blood/old, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/turf/open/floor/circuit/green{ - luminosity = 2 - }, -/area/ai_monitored/turret_protected/ai) -"acx" = ( -/obj/machinery/power/apc{ - areastring = "/area/ai_monitored/turret_protected/ai"; - dir = 1; - name = "AI Chamber APC"; - pixel_y = 23 - }, -/obj/structure/cable/yellow{ - icon_state = "0-8" - }, -/turf/open/floor/circuit/green{ - luminosity = 2 - }, -/area/ai_monitored/turret_protected/ai) "acy" = ( /obj/docking_port/stationary/random{ dir = 1; @@ -1557,21 +1146,6 @@ }, /turf/open/floor/plasteel/dark, /area/ai_monitored/storage/satellite) -"acG" = ( -/obj/machinery/power/port_gen/pacman, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/structure/sign/warning/electricshock{ - pixel_y = 32 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/open/floor/plating{ - icon_state = "panelscorched" - }, -/area/ai_monitored/storage/satellite) "acH" = ( /obj/effect/spawner/structure/window/reinforced/tinted, /turf/open/floor/plating, @@ -1653,21 +1227,6 @@ }, /turf/open/floor/plasteel/dark, /area/security/warden) -"acP" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line, -/obj/machinery/status_display/ai{ - pixel_x = -32; - pixel_y = -32 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 5 - }, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/engine, -/area/ai_monitored/turret_protected/ai) "acQ" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table, @@ -1688,29 +1247,6 @@ }, /turf/open/floor/plasteel/dark, /area/maintenance/port/fore) -"acR" = ( -/obj/machinery/holopad, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/engine, -/area/ai_monitored/turret_protected/ai) -"acS" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/turf/open/floor/engine, -/area/ai_monitored/storage/satellite) "acT" = ( /obj/structure/table/reinforced, /obj/effect/turf_decal/delivery, @@ -1750,21 +1286,6 @@ /obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/plasteel/dark, /area/ai_monitored/storage/satellite) -"acV" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 6 - }, -/obj/structure/cable/yellow{ - icon_state = "2-4" - }, -/turf/open/floor/engine, -/area/ai_monitored/turret_protected/ai) "acW" = ( /obj/structure/flora/ausbushes/lavendergrass, /obj/structure/flora/ausbushes/sparsegrass, @@ -1825,19 +1346,6 @@ }, /turf/open/floor/plasteel/dark, /area/hallway/primary/fore) -"adb" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/corner, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/effect/decal/cleanable/blood/old, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/turf/open/floor/engine, -/area/ai_monitored/turret_protected/ai) "adc" = ( /obj/structure/filingcabinet/employment, /obj/effect/turf_decal/tile/neutral{ @@ -1886,21 +1394,6 @@ "adg" = ( /turf/closed/wall/r_wall, /area/ai_monitored/turret_protected/aisat_interior) -"adh" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/turf/open/floor/engine, -/area/ai_monitored/turret_protected/aisat_interior) "adi" = ( /obj/structure/chair{ dir = 8 @@ -1950,20 +1443,6 @@ /obj/effect/turf_decal/caution/stand_clear, /turf/open/floor/plasteel/dark, /area/security/prison) -"adm" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/structure/cable/yellow{ - icon_state = "2-4" - }, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/mob/living/simple_animal/bot/secbot/pingsky, -/turf/open/floor/engine, -/area/ai_monitored/turret_protected/aisat_interior) "adn" = ( /obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/neutral{ @@ -2008,39 +1487,6 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/plasteel, /area/security/warden) -"adq" = ( -/obj/machinery/door/airlock/highsecurity{ - name = "AI Chamber"; - req_access_txt = "16" - }, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "AI Chamber entrance shutters"; - name = "AI Chamber Lockdown Shutter" - }, -/obj/machinery/flasher{ - id = "AI"; - pixel_x = -26; - pixel_y = 3 - }, -/obj/item/radio/intercom{ - broadcasting = 1; - frequency = 1447; - listening = 0; - name = "Station Intercom (AI Private)"; - pixel_x = 28 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/aisat_interior) "adr" = ( /obj/machinery/ai_slipper{ uses = 10 @@ -2066,20 +1512,6 @@ /obj/effect/turf_decal/caution/stand_clear, /turf/open/floor/plasteel/dark, /area/science/xenobiology) -"adt" = ( -/obj/machinery/holopad, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/turf/open/floor/engine, -/area/ai_monitored/turret_protected/aisat_interior) "adu" = ( /obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/neutral{ @@ -2111,20 +1543,6 @@ /mob/living/simple_animal/hostile/retaliate/poison/snake, /turf/open/floor/plasteel/dark, /area/maintenance/port/fore) -"adw" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/corner, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 8 - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/turf/open/floor/engine, -/area/ai_monitored/turret_protected/aisat_interior) "adx" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 4 @@ -2302,23 +1720,6 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, /area/bridge) -"adL" = ( -/obj/effect/turf_decal/stripes/corner, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/structure/cable/yellow{ - icon_state = "1-4" - }, -/turf/open/floor/engine, -/area/ai_monitored/turret_protected/aisat_interior) "adM" = ( /obj/machinery/camera{ c_tag = "Satellite Antechamber"; @@ -2900,22 +2301,6 @@ /obj/effect/turf_decal/bot, /turf/open/floor/plasteel/dark, /area/security/warden) -"aeK" = ( -/obj/effect/turf_decal/loading_area{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/structure/sign/warning/nosmoking{ - pixel_x = 30; - pixel_y = -32 - }, -/obj/structure/cable/yellow{ - icon_state = "2-8" - }, -/turf/open/floor/engine, -/area/ai_monitored/storage/satellite) "aeM" = ( /obj/machinery/photocopier, /obj/effect/turf_decal/bot, @@ -3147,25 +2532,6 @@ "afh" = ( /turf/open/space/basic, /area/hallway/secondary/command) -"afj" = ( -/obj/machinery/recharge_station, -/obj/effect/turf_decal/bot, -/obj/machinery/power/apc{ - areastring = "/area/ai_monitored/storage/satellite"; - dir = 2; - name = "MiniSat Maint APC"; - pixel_y = -23 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable/yellow, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/storage/satellite) "afl" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable/yellow{ @@ -3454,24 +2820,6 @@ }, /turf/open/floor/plasteel/showroomfloor, /area/science/xenobiology) -"afN" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/flasher{ - id = "AI"; - name = "Meatbag Pacifier"; - pixel_y = 24 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, -/obj/machinery/camera{ - c_tag = "AI Chamber SMES"; - dir = 2; - name = "core camera"; - network = list("aicore") - }, -/turf/open/floor/engine, -/area/ai_monitored/turret_protected/ai) "afO" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -4131,19 +3479,6 @@ }, /turf/open/floor/plasteel/dark, /area/security/main) -"ahf" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/status_display/ai{ - pixel_x = -32 - }, -/obj/effect/turf_decal/stripes/corner, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/engine, -/area/ai_monitored/turret_protected/ai) "ahg" = ( /obj/effect/decal/cleanable/blood/old, /obj/effect/decal/remains/human, @@ -4328,15 +3663,6 @@ /obj/item/beacon, /turf/open/floor/engine, /area/ai_monitored/turret_protected/aisat/foyer) -"ahA" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/structure/chair/office{ - dir = 4 - }, -/turf/open/floor/engine, -/area/ai_monitored/storage/satellite) "ahC" = ( /obj/effect/turf_decal/bot, /obj/effect/decal/cleanable/cobweb, @@ -5372,26 +4698,6 @@ }, /turf/open/floor/plasteel/dark, /area/construction/mining/aux_base) -"ajp" = ( -/obj/machinery/ai_slipper{ - uses = 10 - }, -/obj/effect/turf_decal/box, -/obj/effect/turf_decal/stripes/corner, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 8 - }, -/obj/structure/cable/yellow{ - icon_state = "1-4" - }, -/turf/open/floor/engine, -/area/ai_monitored/turret_protected/ai) "ajq" = ( /obj/effect/spawner/lootdrop/glowstick, /obj/effect/turf_decal/stripes/corner{ @@ -5513,19 +4819,6 @@ }, /turf/open/floor/engine, /area/ai_monitored/turret_protected/aisat/foyer) -"ajE" = ( -/obj/machinery/porta_turret/ai{ - dir = 4 - }, -/obj/structure/sign/warning/securearea{ - pixel_y = 32 - }, -/obj/effect/decal/cleanable/cobweb, -/obj/effect/turf_decal/box/red, -/turf/open/floor/circuit/green{ - luminosity = 2 - }, -/area/ai_monitored/turret_protected/ai) "ajF" = ( /obj/effect/decal/cleanable/blood/old, /obj/effect/decal/cleanable/dirt, @@ -6301,16 +5594,6 @@ icon_state = "wood-broken7" }, /area/maintenance/port/fore) -"alh" = ( -/obj/machinery/airalarm{ - dir = 4; - pixel_x = -24 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/engine, -/area/ai_monitored/turret_protected/ai) "ali" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 @@ -6614,13 +5897,6 @@ }, /turf/open/floor/plasteel/showroomfloor, /area/ai_monitored/security/armory) -"alz" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/engine, -/area/ai_monitored/turret_protected/ai) "alA" = ( /obj/effect/turf_decal/stripes/corner{ dir = 8 @@ -8730,19 +8006,6 @@ /obj/effect/decal/cleanable/blood/gibs/old, /turf/open/floor/plating/asteroid/airless, /area/space/nearstation) -"apn" = ( -/obj/machinery/porta_turret/ai{ - dir = 4 - }, -/obj/structure/sign/warning/securearea{ - pixel_y = 32 - }, -/obj/effect/decal/cleanable/cobweb/cobweb2, -/obj/effect/turf_decal/box/red, -/turf/open/floor/circuit/green{ - luminosity = 2 - }, -/area/ai_monitored/turret_protected/ai) "apo" = ( /obj/effect/turf_decal/bot, /obj/effect/decal/cleanable/dirt, @@ -11314,15 +10577,6 @@ "atA" = ( /turf/closed/wall/rust, /area/bridge) -"atB" = ( -/obj/machinery/porta_turret/ai{ - dir = 4 - }, -/obj/effect/turf_decal/box/red, -/turf/open/floor/circuit/green{ - luminosity = 2 - }, -/area/ai_monitored/turret_protected/ai) "atC" = ( /obj/structure/sign/warning/electricshock, /turf/closed/wall/r_wall, @@ -31527,14 +30781,6 @@ }, /turf/open/floor/plasteel, /area/quartermaster/miningoffice) -"baP" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - external_pressure_bound = 140; - name = "server vent"; - pressure_checks = 0 - }, -/turf/open/floor/circuit/green/telecomms/mainframe, -/area/science/server) "baQ" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ @@ -32446,16 +31692,6 @@ }, /turf/open/floor/plasteel/showroomfloor, /area/science/mixing) -"bcz" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/science/server) "bcA" = ( /obj/structure/cable/yellow, /obj/machinery/door/firedoor/border_only{ @@ -32489,24 +31725,6 @@ }, /turf/open/floor/plasteel/showroomfloor, /area/science/research) -"bcC" = ( -/obj/effect/landmark/blobstart, -/obj/machinery/light/small{ - dir = 4 - }, -/obj/machinery/airalarm/server{ - dir = 8; - pixel_x = 24 - }, -/obj/machinery/atmospherics/pipe/manifold/general/visible{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/science/server) "bcD" = ( /turf/closed/wall/rust, /area/science/mixing) @@ -61363,6 +60581,20 @@ }, /turf/open/floor/plating, /area/hallway/secondary/exit/departure_lounge) +"bXP" = ( +/obj/machinery/power/terminal{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/turf/open/floor/engine{ + initial_gas_mix = "n2=100;TEMP=80" + }, +/area/ai_monitored/turret_protected/ai) "bXQ" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/techstorage/rnd, @@ -65257,31 +64489,6 @@ }, /turf/open/space/basic, /area/space/nearstation) -"cdW" = ( -/obj/machinery/turretid{ - icon_state = "control_stun"; - name = "AI Chamber turret control"; - pixel_x = 3; - pixel_y = 28 - }, -/obj/machinery/door/window{ - base_state = "leftsecure"; - dir = 8; - icon_state = "leftsecure"; - name = "Primary AI Core Access"; - obj_integrity = 300; - req_access_txt = "16" - }, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "AI Core shutters"; - name = "AI Core Shutter" - }, -/obj/effect/turf_decal/delivery, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/turf/open/floor/engine, -/area/ai_monitored/turret_protected/ai) "cdX" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -65324,43 +64531,6 @@ /obj/item/seeds/potato, /turf/open/floor/grass, /area/security/prison) -"ced" = ( -/obj/item/radio/intercom{ - freerange = 1; - name = "Common Channel"; - pixel_x = -28; - pixel_y = 6 - }, -/obj/item/radio/intercom{ - freerange = 1; - listening = 0; - name = "Custom Channel"; - pixel_y = 22 - }, -/obj/item/radio/intercom{ - freerange = 1; - frequency = 1447; - name = "Private Channel"; - pixel_x = 28; - pixel_y = 6 - }, -/obj/effect/landmark/start/ai, -/obj/machinery/button/door{ - id = "AI Core shutters"; - name = "AI Core Shutters Toggle"; - pixel_x = 24; - pixel_y = 24; - req_access_txt = "16" - }, -/obj/machinery/button/door{ - id = "AI Chamber entrance shutters"; - name = "AI Chamber Lockdown"; - pixel_x = -24; - pixel_y = 24; - req_access_txt = "16" - }, -/turf/open/floor/circuit/red, -/area/ai_monitored/turret_protected/ai) "cee" = ( /obj/structure/table, /obj/item/stack/sheet/metal/fifty, @@ -65379,61 +64549,6 @@ /obj/effect/turf_decal/stripes/corner, /turf/open/floor/plasteel/dark, /area/engine/atmos) -"cef" = ( -/obj/effect/landmark/start/ai/secondary, -/obj/item/radio/intercom{ - freerange = 1; - listening = 0; - name = "Custom Channel"; - pixel_x = -10; - pixel_y = 22 - }, -/obj/item/radio/intercom{ - freerange = 1; - name = "Common Channel"; - pixel_x = -27 - }, -/obj/item/radio/intercom{ - freerange = 1; - frequency = 1447; - name = "Private Channel"; - pixel_x = -10; - pixel_y = -25 - }, -/obj/machinery/door/window{ - base_state = "rightsecure"; - dir = 4; - icon_state = "rightsecure"; - layer = 4.1; - name = "Secondary AI Core Access"; - obj_integrity = 300; - pixel_x = 4; - req_access_txt = "16" - }, -/turf/open/floor/circuit/red, -/area/ai_monitored/turret_protected/ai) -"ceg" = ( -/obj/machinery/holopad, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/corner, -/turf/open/floor/engine, -/area/ai_monitored/turret_protected/ai) -"ceh" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = -24 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 4 - }, -/turf/open/floor/engine, -/area/ai_monitored/turret_protected/ai) "cei" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/vomit/old, @@ -65512,50 +64627,6 @@ icon_state = "panelscorched" }, /area/maintenance/port/aft) -"ceo" = ( -/obj/effect/landmark/start/ai/secondary, -/obj/item/radio/intercom{ - freerange = 1; - listening = 0; - name = "Custom Channel"; - pixel_x = 10; - pixel_y = 22 - }, -/obj/item/radio/intercom{ - freerange = 1; - name = "Common Channel"; - pixel_x = 27 - }, -/obj/item/radio/intercom{ - freerange = 1; - frequency = 1447; - name = "Private Channel"; - pixel_x = 10; - pixel_y = -25 - }, -/obj/machinery/door/window{ - base_state = "leftsecure"; - dir = 8; - icon_state = "leftsecure"; - layer = 4.1; - name = "Tertiary AI Core Access"; - obj_integrity = 300; - pixel_x = -3; - req_access_txt = "16" - }, -/turf/open/floor/circuit/red, -/area/ai_monitored/turret_protected/ai) -"cep" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/flasher{ - id = "AI"; - name = "Meatbag Pacifier"; - pixel_x = -24 - }, -/turf/open/floor/engine, -/area/ai_monitored/turret_protected/ai) "ceq" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ @@ -66041,18 +65112,6 @@ icon_state = "platingdmg1" }, /area/maintenance/starboard/aft) -"cft" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/obj/machinery/camera{ - c_tag = "AI Chamber Door"; - dir = 1; - name = "core camera"; - network = list("aicore") - }, -/turf/open/floor/engine, -/area/ai_monitored/turret_protected/ai) "cfu" = ( /obj/machinery/door/airlock/hatch{ name = "Satellite Antechamber"; @@ -66118,12 +65177,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /turf/open/floor/engine, /area/security/nuke_storage) -"cfy" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/turf/open/floor/engine, -/area/ai_monitored/turret_protected/ai) "cfz" = ( /obj/machinery/atmospherics/pipe/simple/orange/visible{ dir = 4 @@ -66207,29 +65260,6 @@ icon_state = "platingdmg3" }, /area/maintenance/starboard/aft) -"cfK" = ( -/obj/machinery/door/window{ - base_state = "rightsecure"; - dir = 4; - icon_state = "rightsecure"; - name = "Primary AI Core Access"; - obj_integrity = 300; - req_access_txt = "16" - }, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "AI Core shutters"; - name = "AI Core Shutter" - }, -/obj/effect/turf_decal/delivery, -/obj/machinery/light_switch{ - pixel_x = 6; - pixel_y = 24 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/turf/open/floor/engine, -/area/ai_monitored/turret_protected/ai) "cfM" = ( /turf/closed/wall/r_wall, /area/tcommsat/computer) @@ -67161,25 +66191,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/aft) -"chp" = ( -/obj/machinery/door/airlock/hatch{ - name = "Satellite Antechamber"; - req_one_access_txt = "32;19" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/aisat_interior) "chq" = ( /obj/effect/turf_decal/tile/neutral{ dir = 8 @@ -67343,22 +66354,6 @@ icon_state = "platingdmg1" }, /area/maintenance/starboard/aft) -"chB" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, -/obj/machinery/power/terminal{ - dir = 1 - }, -/obj/structure/cable/yellow{ - icon_state = "0-8" - }, -/turf/open/floor/engine, -/area/ai_monitored/storage/satellite) "chC" = ( /obj/machinery/light_switch{ pixel_y = -24 @@ -67396,23 +66391,6 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/aft) -"chG" = ( -/obj/machinery/computer/station_alert{ - dir = 8 - }, -/obj/effect/turf_decal/bot, -/obj/machinery/status_display/ai{ - pixel_x = 32 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/storage/satellite) "chH" = ( /obj/structure/reflector/box/anchored{ dir = 1; @@ -67479,13 +66457,6 @@ /obj/structure/sign/warning/vacuum/external, /turf/closed/wall, /area/ai_monitored/turret_protected/aisat/atmos) -"chP" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/structure/reagent_dispensers/watertank, -/obj/effect/turf_decal/delivery, -/obj/machinery/light, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/aisat/atmos) "chQ" = ( /obj/structure/lattice/catwalk, /obj/structure/transit_tube/horizontal{ @@ -67785,18 +66756,6 @@ }, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/aisat/foyer) -"ciq" = ( -/obj/structure/reagent_dispensers/fueltank, -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/storage/satellite) "cir" = ( /obj/structure/sign/warning/nosmoking{ pixel_x = 28; @@ -67920,34 +66879,6 @@ }, /turf/open/floor/plasteel, /area/engine/break_room) -"ciC" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 8 - }, -/turf/open/floor/engine, -/area/ai_monitored/storage/satellite) -"ciD" = ( -/obj/structure/table, -/obj/item/stack/sheet/metal/fifty, -/obj/item/stack/sheet/glass/fifty, -/obj/item/stack/sheet/mineral/plasma{ - amount = 5 - }, -/obj/machinery/airalarm{ - dir = 8; - pixel_x = 24 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/storage/satellite) "ciE" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 5 @@ -68859,6 +67790,18 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/aft) +"ckb" = ( +/obj/machinery/power/apc{ + areastring = "/area/ai_monitored/turret_protected/ai"; + dir = 1; + name = "AI Chamber APC"; + pixel_y = 23 + }, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/turf/open/floor/circuit/green/telecomms, +/area/ai_monitored/turret_protected/ai) "ckc" = ( /obj/machinery/power/smes{ charge = 5e+006 @@ -76397,6 +75340,20 @@ icon_state = "platingdmg3" }, /area/maintenance/port/fore) +"cyw" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/newscaster/security_unit{ + pixel_x = 30 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/open/floor/engine{ + initial_gas_mix = "n2=100;TEMP=80" + }, +/area/ai_monitored/turret_protected/ai) "cyy" = ( /obj/structure/sign/warning/nosmoking, /turf/closed/wall, @@ -83542,6 +82499,17 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/exit/departure_lounge) +"cMX" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/open/floor/engine{ + initial_gas_mix = "n2=100;TEMP=80" + }, +/area/ai_monitored/turret_protected/ai) "cMY" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -86336,6 +85304,23 @@ /obj/machinery/atmospherics/pipe/layer_manifold, /turf/open/floor/plasteel/dark, /area/maintenance/port) +"ecz" = ( +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 10 + }, +/turf/open/floor/engine, +/area/ai_monitored/turret_protected/aisat_interior) "ecD" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -86389,6 +85374,28 @@ icon_state = "panelscorched" }, /area/maintenance/port/fore) +"egr" = ( +/obj/machinery/door/airlock/hatch{ + name = "Satellite Antechamber"; + req_one_access_txt = "32;19" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/turret_protected/aisat_interior) "egC" = ( /obj/structure/chair/office/light{ dir = 8 @@ -86508,6 +85515,20 @@ icon_state = "panelscorched" }, /area/maintenance/port/aft) +"eoH" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/machinery/camera{ + c_tag = "AI Chamber Door"; + dir = 1; + name = "core camera"; + network = list("aicore") + }, +/turf/open/floor/engine{ + initial_gas_mix = "n2=100;TEMP=80" + }, +/area/ai_monitored/turret_protected/ai) "eoL" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -86699,6 +85720,25 @@ /obj/effect/turf_decal/stripes/line, /turf/closed/wall, /area/maintenance/port) +"exR" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/obj/machinery/power/terminal{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ + dir = 4 + }, +/turf/open/floor/engine, +/area/ai_monitored/storage/satellite) "eyC" = ( /obj/effect/turf_decal/box, /obj/structure/cable{ @@ -86707,6 +85747,21 @@ /obj/effect/spawner/structure/solars/solar_96, /turf/open/floor/plasteel/airless/solarpanel, /area/solar/starboard/fore) +"eyD" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ + dir = 6 + }, +/turf/open/floor/engine{ + initial_gas_mix = "n2=100;TEMP=80" + }, +/area/ai_monitored/turret_protected/ai) "eyF" = ( /obj/effect/turf_decal/tile/neutral{ dir = 4 @@ -86727,6 +85782,17 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /turf/open/floor/plasteel/dark, /area/maintenance/port/fore) +"ezT" = ( +/obj/machinery/porta_turret/ai{ + dir = 4 + }, +/obj/structure/sign/warning/securearea{ + pixel_y = 32 + }, +/obj/effect/decal/cleanable/cobweb, +/obj/effect/turf_decal/box/red, +/turf/open/floor/circuit/green/telecomms, +/area/ai_monitored/turret_protected/ai) "ezV" = ( /obj/structure/table/wood, /obj/item/storage/crayons, @@ -86874,6 +85940,28 @@ /obj/effect/landmark/start/chief_engineer, /turf/open/floor/plasteel/dark, /area/bridge) +"eLz" = ( +/obj/machinery/ai_slipper{ + uses = 10 + }, +/obj/effect/turf_decal/box, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/corner, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ + dir = 4 + }, +/turf/open/floor/engine{ + initial_gas_mix = "n2=100;TEMP=80" + }, +/area/ai_monitored/turret_protected/ai) "eLB" = ( /obj/effect/turf_decal/box/corners{ dir = 1; @@ -87008,6 +86096,32 @@ }, /turf/open/floor/plasteel/dark, /area/quartermaster/miningoffice) +"eYS" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ + dir = 10 + }, +/turf/open/floor/engine, +/area/ai_monitored/storage/satellite) +"eZj" = ( +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/table, +/obj/item/stack/sheet/mineral/plasma{ + amount = 5 + }, +/obj/item/stack/sheet/glass/fifty, +/obj/item/stack/sheet/metal/fifty, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/storage/satellite) "eZv" = ( /obj/structure/disposalpipe/trunk{ dir = 4 @@ -87033,6 +86147,23 @@ }, /turf/open/floor/plasteel, /area/maintenance/disposal/incinerator) +"faP" = ( +/obj/machinery/door/poddoor/shutters/preopen{ + id = "AI Core shutters"; + name = "AI Core Shutter" + }, +/obj/effect/turf_decal/delivery, +/obj/machinery/light_switch{ + pixel_x = 6; + pixel_y = 24 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/turf/open/floor/engine{ + initial_gas_mix = "n2=100;TEMP=80" + }, +/area/ai_monitored/turret_protected/ai) "faW" = ( /obj/machinery/atmospherics/pipe/simple/yellow/hidden{ dir = 8 @@ -87543,6 +86674,19 @@ }, /turf/open/floor/plasteel/dark, /area/library) +"fwp" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/decal/cleanable/blood/old, +/obj/effect/decal/remains/human, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/open/floor/engine{ + initial_gas_mix = "n2=100;TEMP=80" + }, +/area/ai_monitored/turret_protected/ai) "fws" = ( /obj/machinery/newscaster/security_unit{ pixel_x = -28 @@ -87917,6 +87061,23 @@ }, /turf/open/floor/plasteel, /area/clerk) +"fSU" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/status_display/ai{ + pixel_x = 32; + pixel_y = -32 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/yellow/hidden, +/turf/open/floor/engine{ + initial_gas_mix = "n2=100;TEMP=80" + }, +/area/ai_monitored/turret_protected/ai) "fTc" = ( /obj/effect/turf_decal/tile/yellow, /obj/effect/turf_decal/tile/red, @@ -87988,6 +87149,20 @@ /obj/effect/spawner/structure/window/reinforced/shutter, /turf/open/floor/plating, /area/maintenance/port) +"fWT" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/corner, +/obj/effect/decal/cleanable/blood/old, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/yellow/hidden, +/turf/open/floor/engine{ + initial_gas_mix = "n2=100;TEMP=80" + }, +/area/ai_monitored/turret_protected/ai) "fXV" = ( /obj/machinery/door/airlock/maintenance{ req_access_txt = "12"; @@ -88544,6 +87719,17 @@ /obj/effect/mapping_helpers/teleport_anchor, /turf/open/floor/plasteel, /area/engine/atmos) +"gCY" = ( +/obj/machinery/porta_turret/ai{ + dir = 4 + }, +/obj/structure/sign/warning/securearea{ + pixel_y = 32 + }, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/effect/turf_decal/box/red, +/turf/open/floor/circuit/green/telecomms, +/area/ai_monitored/turret_protected/ai) "gDD" = ( /obj/structure/flora/ausbushes/lavendergrass, /obj/structure/flora/ausbushes/sparsegrass, @@ -88645,6 +87831,18 @@ icon_state = "platingdmg1" }, /area/maintenance/port/aft) +"gJr" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = -24 + }, +/turf/open/floor/engine{ + initial_gas_mix = "n2=100;TEMP=80" + }, +/area/ai_monitored/turret_protected/ai) "gJw" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -88671,6 +87869,20 @@ icon_state = "panelscorched" }, /area/engine/engineering) +"gJU" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold/yellow/hidden{ + dir = 1 + }, +/turf/open/floor/engine{ + initial_gas_mix = "n2=100;TEMP=80" + }, +/area/ai_monitored/turret_protected/ai) "gKq" = ( /obj/effect/turf_decal/tile/red{ dir = 8 @@ -88837,6 +88049,20 @@ "gWk" = ( /turf/open/floor/plating, /area/maintenance/disposal/incinerator) +"gXx" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/table, +/obj/structure/sign/warning/electricshock{ + pixel_y = 32 + }, +/obj/item/storage/toolbox/electrical, +/obj/item/assembly/flash/handheld, +/turf/open/floor/engine{ + initial_gas_mix = "n2=100;TEMP=80" + }, +/area/ai_monitored/turret_protected/ai) "gXF" = ( /obj/effect/landmark/stationroom/maint/tenxten, /turf/template_noop, @@ -89715,6 +88941,19 @@ }, /turf/open/floor/engine, /area/science/mixing/chamber) +"idl" = ( +/obj/machinery/ai_slipper{ + uses = 10 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/simple/yellow/hidden, +/turf/open/floor/engine{ + initial_gas_mix = "n2=100;TEMP=80" + }, +/area/ai_monitored/turret_protected/ai) "idU" = ( /obj/structure/cable/yellow{ icon_state = "0-2" @@ -89819,6 +89058,20 @@ /obj/effect/mapping_helpers/teleport_anchor, /turf/open/floor/plasteel, /area/maintenance/disposal/incinerator) +"ihI" = ( +/obj/structure/sign/warning/nosmoking{ + pixel_x = 30 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/open/floor/engine{ + initial_gas_mix = "n2=100;TEMP=80" + }, +/area/ai_monitored/turret_protected/ai) "ihX" = ( /obj/machinery/door/poddoor/preopen{ id = "bridge blast"; @@ -89978,6 +89231,14 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/heads/chief) +"ioh" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/engine{ + initial_gas_mix = "n2=100;TEMP=80" + }, +/area/ai_monitored/turret_protected/ai) "iol" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 @@ -90104,6 +89365,27 @@ /obj/effect/turf_decal/bot, /turf/open/floor/plasteel/dark, /area/tcommsat/computer) +"ivT" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/power/apc{ + areastring = "/area/ai_monitored/storage/satellite"; + dir = 2; + name = "MiniSat Maint APC"; + pixel_y = -23 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/yellow, +/obj/machinery/atmospherics/components/unary/thermomachine/freezer/on{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/storage/satellite) "ivX" = ( /obj/machinery/atmospherics/miner/nitrogen{ max_ext_kpa = 2500 @@ -90395,6 +89677,22 @@ }, /turf/open/floor/plating, /area/hallway/primary/fore) +"iED" = ( +/obj/machinery/ai_slipper{ + uses = 10 + }, +/obj/effect/turf_decal/box, +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/turf/open/floor/engine{ + initial_gas_mix = "n2=100;TEMP=80" + }, +/area/ai_monitored/turret_protected/ai) "iFa" = ( /obj/machinery/door/airlock/medical/glass{ name = "Infirmary"; @@ -90403,6 +89701,47 @@ }, /turf/open/floor/plasteel/dark, /area/security/main) +"iFr" = ( +/obj/machinery/holopad, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/open/floor/engine{ + initial_gas_mix = "n2=100;TEMP=80" + }, +/area/ai_monitored/turret_protected/ai) +"iFz" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/status_display/ai{ + pixel_x = 32 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ + dir = 8; + external_pressure_bound = 120; + name = "server vent" + }, +/turf/open/floor/engine{ + initial_gas_mix = "n2=100;TEMP=80" + }, +/area/ai_monitored/turret_protected/ai) "iGD" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 @@ -90975,6 +90314,21 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/dark, /area/crew_quarters/toilet/restrooms) +"jdk" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/sign/warning/electricshock{ + pixel_y = 32 + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/computer/ai_server_console, +/turf/open/floor/plating{ + icon_state = "panelscorched" + }, +/area/ai_monitored/storage/satellite) "jeG" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ @@ -91236,6 +90590,13 @@ }, /turf/open/floor/engine, /area/science/explab) +"jri" = ( +/obj/machinery/porta_turret/ai{ + dir = 4 + }, +/obj/effect/turf_decal/box/red, +/turf/open/floor/circuit/green/telecomms, +/area/ai_monitored/turret_protected/ai) "jsL" = ( /obj/effect/decal/cleanable/blood/old, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, @@ -92429,6 +91790,15 @@ /obj/effect/turf_decal/bot, /turf/open/floor/engine, /area/tcommsat/computer) +"kEH" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/engine{ + initial_gas_mix = "n2=100;TEMP=80" + }, +/area/ai_monitored/turret_protected/ai) "kEP" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 4 @@ -93053,6 +92423,14 @@ /obj/effect/spawner/structure/window/reinforced/shutter, /turf/open/floor/plating, /area/hallway/secondary/entry) +"lfA" = ( +/obj/machinery/flasher{ + id = "AI"; + name = "Meatbag Pacifier"; + pixel_y = 24 + }, +/turf/open/floor/circuit/green/telecomms, +/area/ai_monitored/turret_protected/ai) "lgh" = ( /obj/structure/chair/office/light, /obj/effect/turf_decal/tile/purple{ @@ -93400,6 +92778,46 @@ /obj/item/card/id/departmental_budget/sec, /turf/open/floor/plasteel/dark, /area/ai_monitored/security/armory) +"lFF" = ( +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/mob/living/simple_animal/bot/secbot/pingsky, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ + dir = 5 + }, +/turf/open/floor/engine, +/area/ai_monitored/turret_protected/aisat_interior) +"lGG" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/table, +/obj/machinery/status_display/ai{ + pixel_y = 32 + }, +/obj/item/storage/toolbox/mechanical, +/obj/item/multitool, +/obj/effect/decal/cleanable/cobweb, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/turf/open/floor/engine{ + initial_gas_mix = "n2=100;TEMP=80" + }, +/area/ai_monitored/turret_protected/ai) +"lGJ" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/light, +/obj/machinery/power/port_gen/pacman, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/turret_protected/aisat/atmos) "lHd" = ( /obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/neutral{ @@ -93422,12 +92840,42 @@ icon_state = "platingdmg1" }, /area/maintenance/disposal/incinerator) +"lKi" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/status_display/ai{ + pixel_x = -32 + }, +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 4 + }, +/turf/open/floor/engine{ + initial_gas_mix = "n2=100;TEMP=80" + }, +/area/ai_monitored/turret_protected/ai) "lKm" = ( /obj/machinery/atmospherics/components/trinary/mixer{ dir = 4 }, /turf/open/floor/plasteel, /area/maintenance/disposal/incinerator) +"lKv" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/airalarm/tcomms{ + dir = 4; + pixel_x = -24 + }, +/turf/open/floor/engine{ + initial_gas_mix = "n2=100;TEMP=80" + }, +/area/ai_monitored/turret_protected/ai) "lKW" = ( /obj/effect/turf_decal/tile/yellow{ dir = 1 @@ -93455,6 +92903,25 @@ icon_state = "panelscorched" }, /area/maintenance/port/aft) +"lNE" = ( +/obj/machinery/turretid{ + icon_state = "control_stun"; + name = "AI Chamber turret control"; + pixel_x = 3; + pixel_y = 28 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "AI Core shutters"; + name = "AI Core Shutter" + }, +/obj/effect/turf_decal/delivery, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/turf/open/floor/engine{ + initial_gas_mix = "n2=100;TEMP=80" + }, +/area/ai_monitored/turret_protected/ai) "lNV" = ( /obj/structure/table, /obj/item/paper_bin/construction{ @@ -93501,6 +92968,13 @@ /obj/item/storage/box/gloves, /turf/open/floor/plasteel/dark, /area/medical/storage) +"lQf" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/yellow/hidden, +/turf/open/floor/circuit/green/telecomms, +/area/ai_monitored/turret_protected/ai) "lRF" = ( /obj/machinery/door/airlock/maintenance{ req_access_txt = "12"; @@ -93550,6 +93024,23 @@ }, /turf/open/floor/plasteel, /area/maintenance/disposal/incinerator) +"lUG" = ( +/obj/effect/turf_decal/loading_area{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/sign/warning/nosmoking{ + pixel_x = 30; + pixel_y = -32 + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/yellow/hidden, +/turf/open/floor/engine, +/area/ai_monitored/storage/satellite) "lVf" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -94126,6 +93617,17 @@ }, /turf/open/floor/plating, /area/maintenance/disposal/incinerator) +"mtL" = ( +/obj/machinery/holopad, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/corner, +/turf/open/floor/engine{ + initial_gas_mix = "n2=100;TEMP=80" + }, +/area/ai_monitored/turret_protected/ai) "mxg" = ( /obj/effect/turf_decal/bot, /obj/effect/turf_decal/tile/neutral{ @@ -94499,6 +94001,39 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/entry) +"mNJ" = ( +/obj/machinery/door/airlock/highsecurity{ + name = "AI Chamber"; + req_access_txt = "16" + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "AI Chamber entrance shutters"; + name = "AI Chamber Lockdown Shutter" + }, +/obj/machinery/flasher{ + id = "AI"; + pixel_x = -26; + pixel_y = 3 + }, +/obj/item/radio/intercom{ + broadcasting = 1; + frequency = 1447; + listening = 0; + name = "Station Intercom (AI Private)"; + pixel_x = 28 + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/structure/fans/tiny, +/obj/machinery/atmospherics/pipe/simple/yellow/hidden, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/turret_protected/aisat_interior) "mOy" = ( /obj/effect/turf_decal/tile/neutral{ dir = 4 @@ -94638,6 +94173,16 @@ }, /turf/open/floor/plasteel/dark, /area/maintenance/central) +"mYy" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/yellow/hidden, +/turf/open/floor/engine, +/area/ai_monitored/storage/satellite) "mZu" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ @@ -95388,6 +94933,14 @@ }, /turf/open/floor/plating, /area/maintenance/disposal) +"nLv" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/floor/engine{ + initial_gas_mix = "n2=100;TEMP=80" + }, +/area/ai_monitored/turret_protected/ai) "nLA" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -95467,6 +95020,16 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/exit/departure_lounge) +"nNf" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/chair/office{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/yellow/hidden, +/turf/open/floor/engine, +/area/ai_monitored/storage/satellite) "nNt" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 @@ -95521,6 +95084,25 @@ icon_state = "platingdmg1" }, /area/maintenance/port) +"nQx" = ( +/obj/machinery/holopad, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ + dir = 4 + }, +/turf/open/floor/engine{ + initial_gas_mix = "n2=100;TEMP=80" + }, +/area/ai_monitored/turret_protected/ai) "nRc" = ( /obj/structure/cable/yellow, /obj/effect/spawner/structure/window/reinforced/shutter, @@ -96006,6 +95588,15 @@ }, /turf/open/floor/plasteel, /area/maintenance/disposal/incinerator) +"oAg" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/turf/open/floor/engine{ + initial_gas_mix = "n2=100;TEMP=80" + }, +/area/ai_monitored/turret_protected/ai) "oAH" = ( /obj/effect/turf_decal/stripes/corner, /obj/effect/decal/cleanable/dirt, @@ -96220,6 +95811,14 @@ }, /turf/open/floor/plasteel, /area/quartermaster/storage) +"oQb" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/turf/open/floor/engine{ + initial_gas_mix = "n2=100;TEMP=80" + }, +/area/ai_monitored/turret_protected/ai) "oTH" = ( /obj/machinery/door/poddoor/shutters{ id = "Skynet_launch"; @@ -96517,6 +96116,21 @@ }, /turf/open/floor/plasteel/white, /area/crew_quarters/cryopods) +"poi" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/status_display/ai{ + pixel_x = -32; + pixel_y = -32 + }, +/obj/effect/decal/cleanable/blood/old, +/obj/machinery/atmospherics/pipe/manifold/yellow/hidden, +/turf/open/floor/engine{ + initial_gas_mix = "n2=100;TEMP=80" + }, +/area/ai_monitored/turret_protected/ai) "pqh" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 4 @@ -96580,6 +96194,23 @@ icon_state = "platingdmg3" }, /area/maintenance/port/aft) +"psK" = ( +/obj/machinery/holopad, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ + dir = 4 + }, +/turf/open/floor/engine, +/area/ai_monitored/turret_protected/aisat_interior) "psT" = ( /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, @@ -96748,6 +96379,10 @@ }, /turf/open/space/basic, /area/space) +"pzG" = ( +/obj/machinery/atmospherics/pipe/simple/yellow/hidden, +/turf/open/floor/circuit/green/telecomms, +/area/ai_monitored/turret_protected/ai) "pBF" = ( /obj/structure/table, /obj/machinery/computer/security/telescreen/turbine{ @@ -96932,6 +96567,43 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, /turf/open/floor/engine, /area/ai_monitored/turret_protected/aisat/atmos) +"pNK" = ( +/obj/item/radio/intercom{ + freerange = 1; + name = "Common Channel"; + pixel_x = -28; + pixel_y = 6 + }, +/obj/item/radio/intercom{ + freerange = 1; + listening = 0; + name = "Custom Channel"; + pixel_y = 22 + }, +/obj/item/radio/intercom{ + freerange = 1; + frequency = 1447; + name = "Private Channel"; + pixel_x = 28; + pixel_y = 6 + }, +/obj/machinery/button/door{ + id = "AI Core shutters"; + name = "AI Core Shutters Toggle"; + pixel_x = 24; + pixel_y = 24; + req_access_txt = "16" + }, +/obj/machinery/button/door{ + id = "AI Chamber entrance shutters"; + name = "AI Chamber Lockdown"; + pixel_x = -24; + pixel_y = 24; + req_access_txt = "16" + }, +/obj/machinery/ai/data_core/primary, +/turf/open/floor/circuit/red/telecomms, +/area/ai_monitored/turret_protected/ai) "pNM" = ( /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating/asteroid/airless{ @@ -97617,6 +97289,19 @@ initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/space/nearstation) +"quW" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/flasher{ + id = "AI"; + name = "Meatbag Pacifier"; + pixel_y = 24 + }, +/turf/open/floor/engine{ + initial_gas_mix = "n2=100;TEMP=80" + }, +/area/ai_monitored/turret_protected/ai) "qvn" = ( /obj/structure/table, /obj/machinery/camera{ @@ -98190,12 +97875,44 @@ }, /turf/open/floor/plating, /area/quartermaster/warehouse) +"qXr" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/effect/decal/remains/human, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ + dir = 10 + }, +/turf/open/floor/engine{ + initial_gas_mix = "n2=100;TEMP=80" + }, +/area/ai_monitored/turret_protected/ai) "rbv" = ( /obj/effect/decal/cleanable/ash, /turf/open/floor/plating{ icon_state = "panelscorched" }, /area/maintenance/disposal/incinerator) +"rbE" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/airalarm/server{ + dir = 8; + pixel_x = 24 + }, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/ai/data_core, +/turf/open/floor/plasteel/dark/telecomms, +/area/science/server) "rbL" = ( /obj/effect/turf_decal/bot, /obj/machinery/portable_atmospherics/canister/air, @@ -98349,6 +98066,11 @@ icon_state = "platingdmg1" }, /area/maintenance/port/aft) +"rnq" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/machinery/atmospherics/pipe/simple/yellow/hidden, +/turf/open/floor/circuit/green/telecomms, +/area/ai_monitored/turret_protected/ai) "rnQ" = ( /obj/machinery/door/airlock/external{ name = "Ferry Shuttle Airlock" @@ -98452,6 +98174,22 @@ icon_state = "panelscorched" }, /area/maintenance/port/fore) +"rry" = ( +/obj/machinery/ai_slipper{ + uses = 10 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/yellow/hidden, +/turf/open/floor/engine{ + initial_gas_mix = "n2=100;TEMP=80" + }, +/area/ai_monitored/turret_protected/ai) "ruq" = ( /obj/structure/chair/comfy/brown{ buildstackamount = 0; @@ -98664,6 +98402,10 @@ icon_state = "panelscorched" }, /area/maintenance/fore) +"rEU" = ( +/obj/machinery/ai/expansion_card_holder/prefilled, +/turf/open/floor/circuit/red/telecomms, +/area/ai_monitored/turret_protected/ai) "rGm" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable/yellow{ @@ -98940,6 +98682,25 @@ }, /turf/open/floor/plasteel/dark, /area/maintenance/fore) +"sdu" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/flasher{ + id = "AI"; + name = "Meatbag Pacifier"; + pixel_y = 24 + }, +/obj/machinery/camera{ + c_tag = "AI Chamber SMES"; + dir = 2; + name = "core camera"; + network = list("aicore") + }, +/turf/open/floor/engine{ + initial_gas_mix = "n2=100;TEMP=80" + }, +/area/ai_monitored/turret_protected/ai) "sec" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -99155,22 +98916,6 @@ /obj/effect/mapping_helpers/teleport_anchor, /turf/open/floor/plasteel/showroomfloor, /area/science/server) -"smx" = ( -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/structure/table, -/obj/item/hand_labeler, -/obj/item/circuitboard/aicore{ - pixel_y = 5 - }, -/turf/open/floor/plasteel/dark, -/area/crew_quarters/heads/hor) "snc" = ( /obj/effect/turf_decal/tile/yellow, /obj/effect/turf_decal/tile/yellow{ @@ -99276,6 +99021,15 @@ }, /turf/open/floor/plasteel, /area/maintenance/disposal/incinerator) +"spM" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/engine{ + initial_gas_mix = "n2=100;TEMP=80" + }, +/area/ai_monitored/turret_protected/ai) "spN" = ( /obj/machinery/door/poddoor/shutters/preopen{ id = "Shower_2Privacy"; @@ -99605,6 +99359,27 @@ dir = 1 }, /area/hallway/primary/fore) +"sGh" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/machinery/light, +/obj/item/radio/intercom{ + pixel_x = 28 + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ + dir = 8; + external_pressure_bound = 120; + name = "server vent" + }, +/turf/open/floor/engine{ + initial_gas_mix = "n2=100;TEMP=80" + }, +/area/ai_monitored/turret_protected/ai) "sHw" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -100321,6 +100096,23 @@ /obj/structure/girder, /turf/open/floor/plating, /area/maintenance/starboard/fore) +"twd" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/corner, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ + dir = 4 + }, +/turf/open/floor/engine, +/area/ai_monitored/turret_protected/aisat_interior) "tBP" = ( /obj/effect/turf_decal/tile/blue, /obj/effect/turf_decal/tile/blue{ @@ -100922,6 +100714,23 @@ /obj/structure/grille, /turf/open/space/basic, /area/space) +"uqZ" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/status_display/ai{ + pixel_x = 32 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + 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) "uru" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -101371,6 +101180,17 @@ }, /turf/open/floor/plating, /area/maintenance/port/aft) +"uKV" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/open/floor/engine{ + initial_gas_mix = "n2=100;TEMP=80" + }, +/area/ai_monitored/turret_protected/ai) "uMM" = ( /obj/machinery/computer/turbine_computer{ dir = 8; @@ -101423,6 +101243,23 @@ icon_state = "panelscorched" }, /area/maintenance/solars/starboard/fore) +"uRd" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/machinery/light, +/obj/structure/extinguisher_cabinet{ + pixel_x = -26 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 4 + }, +/turf/open/floor/engine{ + initial_gas_mix = "n2=100;TEMP=80" + }, +/area/ai_monitored/turret_protected/ai) "uRZ" = ( /obj/structure/flora/grass/jungle, /obj/machinery/light{ @@ -101693,6 +101530,34 @@ /obj/effect/mapping_helpers/teleport_anchor, /turf/open/floor/plasteel, /area/hallway/secondary/entry) +"vhE" = ( +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/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) +"viP" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/yellow/hidden, +/turf/open/floor/engine, +/area/ai_monitored/turret_protected/aisat_interior) "viV" = ( /obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/neutral{ @@ -101827,6 +101692,13 @@ }, /turf/open/floor/plasteel/dark, /area/maintenance/port/aft) +"voX" = ( +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/yellow/hidden, +/turf/open/floor/circuit/green/telecomms, +/area/ai_monitored/turret_protected/ai) "voZ" = ( /obj/structure/chair/office{ dir = 1 @@ -102399,6 +102271,17 @@ /obj/structure/sign/warning/fire, /turf/closed/wall, /area/maintenance/disposal/incinerator) +"vQc" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/general/visible{ + dir = 4 + }, +/obj/effect/landmark/blobstart, +/turf/open/floor/plasteel/dark/telecomms, +/area/science/server) "vQC" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/simple/general/visible, @@ -102582,6 +102465,14 @@ }, /turf/open/floor/plasteel, /area/maintenance/disposal/incinerator) +"wgW" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/yellow/hidden, +/turf/open/floor/circuit/green/telecomms, +/area/ai_monitored/turret_protected/ai) "whN" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 @@ -102942,6 +102833,16 @@ }, /turf/open/floor/plating/asteroid/airless, /area/space/nearstation) +"wFN" = ( +/obj/machinery/power/smes{ + charge = 5e+006; + name = "ai power storage unit" + }, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/turf/open/floor/circuit/red/telecomms, +/area/ai_monitored/turret_protected/ai) "wFY" = ( /obj/structure/door_assembly/door_assembly_eng{ anchored = 1 @@ -103453,6 +103354,35 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/exit/departure_lounge) +"xkV" = ( +/obj/machinery/requests_console{ + department = "AI"; + departmentType = 5; + name = "AI RC"; + pixel_x = 30; + pixel_y = -30 + }, +/obj/machinery/ai_slipper{ + uses = 10 + }, +/obj/effect/turf_decal/box, +/obj/machinery/flasher{ + id = "AI"; + name = "Meatbag Pacifier"; + pixel_x = 24; + pixel_y = 24 + }, +/obj/machinery/camera{ + c_tag = "AI Chamber Core"; + dir = 1; + name = "core camera"; + network = list("aicore") + }, +/obj/machinery/light/floor, +/turf/open/floor/engine{ + initial_gas_mix = "n2=100;TEMP=80" + }, +/area/ai_monitored/turret_protected/ai) "xlm" = ( /obj/effect/turf_decal/tile/red, /obj/effect/turf_decal/tile/blue{ @@ -103730,6 +103660,14 @@ }, /turf/open/floor/plasteel/dark, /area/maintenance/starboard) +"xyR" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + external_pressure_bound = 140; + name = "server vent"; + pressure_checks = 0 + }, +/turf/open/floor/circuit/green/telecomms/mainframe, +/area/science/server) "xAx" = ( /obj/effect/turf_decal/tile/neutral{ dir = 8 @@ -103804,6 +103742,22 @@ }, /turf/open/floor/plasteel, /area/quartermaster/storage) +"xFc" = ( +/obj/machinery/airalarm{ + dir = 8; + pixel_x = 24 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/computer/ai_control_console{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/storage/satellite) "xFy" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 @@ -131977,7 +131931,7 @@ aAg aAg asZ asZ -cef +rEU asZ asZ aAg @@ -131988,7 +131942,7 @@ auf bmD ccl adZ -chP +lGJ chO agf ceF @@ -132230,14 +132184,14 @@ aeu aeu asZ asZ -ajE -ahf -alh -alz -ceg -cep -ceh -acn +ezT +lKi +lKv +spM +mtL +ioh +gJr +uRd asZ adg azv @@ -132487,15 +132441,15 @@ aeu asZ aAg asZ -abR -aaM -acg -acg -acu -acw -abS -acP -atB +quW +qXr +lQf +lQf +rry +wgW +voX +poi +jri adT aHw cgp @@ -132743,16 +132697,16 @@ ciQ aeu aAg asZ -aau -aay -acd +lGG +cMX +oAg cdY cdZ -cdW +lNE cdY -acx -acR -cft +ckb +nQx +eoH adg byD cgJ @@ -133000,20 +132954,20 @@ ciI cmS asZ asZ -aaw -aaH -ajp +wFN +bXP +iED cdY -ced -aby +pNK +xkV ceq -atB -acV -adb -adq -adh -adm -adL +jri +gJU +fWT +mNJ +viP +lFF +ecz adR fzy afg @@ -133257,19 +133211,19 @@ anH aeu asZ aAg -aaI -aaU -aaN +gXx +oQb +kEH cdZ cdY -cfK +faP cdY -abV -acj -cfy +lfA +eLz +nLv adg ceH -adt +psK adM chX aei @@ -133515,18 +133469,18 @@ aeu asZ asZ asZ -afN -aaZ -abg -abC -abF -abC -abW -aco -atB +sdu +eyD +rnq +pzG +idl +pzG +pzG +fSU +jri adT acD -adw +twd adN adg aen @@ -133772,18 +133726,18 @@ aeu aeu asZ aAg -apn -abd -abk -abD -abM -abQ -abX -acs +gCY +iFz +ihI +uKV +iFr +fwp +cyw +sGh asZ alV azv -chp +egr chV adg aeq @@ -134033,14 +133987,14 @@ asZ asZ aAg asZ -ceo +rEU asZ aAg asZ asZ cfY acF -chB +exR adr adD aex @@ -134296,12 +134250,12 @@ asZ aAg asZ cfY -acG -acS -ahA -ciC -aeK -afj +jdk +eYS +nNf +mYy +lUG +ivT cga acm aeo @@ -134555,9 +134509,9 @@ asZ cga cfY acU -chG -ciD -ciq +uqZ +xFc +eZj cfY cfY aaa @@ -143070,7 +143024,7 @@ smw ayt azR aAu -smx +vhE aVJ aVJ aYU @@ -143578,9 +143532,9 @@ aCh bkd cGo aZF -baJ -bcz -baJ +xyR +vQc +bcH bdi fcB aAv @@ -143835,9 +143789,9 @@ anO cbj aki aZF -baP -bcC -bcH +baJ +rbE +baJ bdi bcV kGp diff --git a/_maps/map_files/YogStation/YogStation.dmm b/_maps/map_files/YogStation/YogStation.dmm index 90cbce40ce01..4a518c0e004f 100644 --- a/_maps/map_files/YogStation/YogStation.dmm +++ b/_maps/map_files/YogStation/YogStation.dmm @@ -1606,9 +1606,6 @@ }, /turf/open/floor/plasteel, /area/security/main) -"aet" = ( -/turf/open/floor/circuit, -/area/ai_monitored/turret_protected/ai) "aev" = ( /obj/machinery/light{ dir = 4 @@ -6917,12 +6914,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/ai_monitored/security/armory) -"asK" = ( -/obj/structure/table, -/obj/item/storage/toolbox/mechanical, -/obj/item/clothing/ears/earmuffs, -/turf/open/floor/plasteel, -/area/science/misc_lab) "asM" = ( /obj/effect/landmark/event_spawn, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ @@ -6945,16 +6936,6 @@ /obj/structure/closet/emcloset, /turf/open/floor/plating, /area/maintenance/fore) -"asU" = ( -/obj/structure/table, -/obj/machinery/cell_charger{ - pixel_y = 5 - }, -/obj/item/stack/cable_coil, -/obj/item/multitool, -/obj/item/stock_parts/cell/high/plus, -/turf/open/floor/plasteel, -/area/science/misc_lab) "asV" = ( /obj/structure/chair{ dir = 1 @@ -8978,10 +8959,6 @@ /obj/structure/closet/ammunitionlocker, /turf/open/floor/plasteel/dark, /area/ai_monitored/security/armory) -"azM" = ( -/obj/machinery/light, -/turf/open/floor/circuit, -/area/ai_monitored/turret_protected/ai) "azP" = ( /obj/structure/window/reinforced{ dir = 1 @@ -11076,6 +11053,15 @@ }, /turf/open/floor/plasteel, /area/storage/primary) +"aFW" = ( +/obj/machinery/status_display/ai{ + pixel_y = -32 + }, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 4 + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "aFY" = ( /obj/effect/turf_decal/tile/yellow{ dir = 4 @@ -19398,6 +19384,22 @@ }, /turf/open/floor/plating, /area/maintenance/disposal) +"bhL" = ( +/obj/machinery/flasher{ + id = "AI"; + pixel_x = 24; + pixel_y = -10 + }, +/obj/machinery/camera/motion{ + c_tag = "MiniSat Foyer"; + dir = 8; + network = list("minisat","ss13") + }, +/obj/effect/turf_decal/tile/darkblue{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/turret_protected/aisat_interior) "bhM" = ( /obj/structure/cable{ icon_state = "4-8" @@ -23933,20 +23935,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/plasteel, /area/storage/primary) -"bxl" = ( -/obj/structure/rack, -/obj/item/circuitboard/aicore{ - pixel_x = -2; - pixel_y = 4 - }, -/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) "bxm" = ( /obj/effect/spawner/xmastree/rdrod, /obj/effect/turf_decal/stripes/line{ @@ -24849,6 +24837,12 @@ /obj/machinery/atmospherics/pipe/manifold/yellow/visible, /turf/open/floor/plasteel, /area/engine/atmos_distro) +"bAp" = ( +/obj/machinery/atmospherics/components/unary/thermomachine/freezer/on{ + dir = 8 + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "bAs" = ( /obj/machinery/atmospherics/components/unary/thermomachine/freezer/on{ dir = 1 @@ -27311,14 +27305,6 @@ /obj/effect/spawner/structure/window/reinforced/shutter, /turf/open/floor/plating, /area/science/research) -"bMw" = ( -/obj/item/twohanded/required/kirbyplants/random, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -26 - }, -/turf/open/floor/plasteel, -/area/science/misc_lab) "bMy" = ( /obj/machinery/atmospherics/components/binary/valve{ dir = 4; @@ -31156,6 +31142,17 @@ /obj/item/storage/lockbox/vialbox/blood, /turf/open/floor/plasteel/white, /area/security/brig) +"ctg" = ( +/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden/layer4, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer2, +/turf/open/floor/circuit, +/area/ai_monitored/turret_protected/aisat_interior) "ctu" = ( /obj/effect/spawner/structure/window, /obj/machinery/door/firedoor/border_only, @@ -31723,6 +31720,13 @@ }, /turf/open/floor/engine, /area/science/xenobiology) +"cDs" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/plasteel/dark, +/area/science/misc_lab) "cDz" = ( /obj/machinery/door/firedoor/border_only{ dir = 4 @@ -31858,6 +31862,20 @@ }, /turf/open/floor/plating, /area/storage/tech) +"cHK" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/end, +/obj/machinery/doorButtons/access_button{ + idDoor = "ai_core_airlock_exterior"; + idSelf = "ai_core_airlock_control"; + pixel_x = -23; + pixel_y = 7 + }, +/obj/machinery/light, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/turret_protected/ai) "cHL" = ( /turf/open/floor/mech_bay_recharge_floor, /area/science/robotics/mechbay) @@ -32354,6 +32372,10 @@ /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating, /area/maintenance/starboard/aft) +"cOC" = ( +/obj/machinery/status_display/ai_core, +/turf/open/floor/circuit/green/telecomms, +/area/ai_monitored/turret_protected/ai) "cOE" = ( /obj/machinery/telecomms/processor/preset_one, /turf/open/floor/circuit/green/telecomms/mainframe, @@ -32465,6 +32487,9 @@ /obj/machinery/atmospherics/pipe/manifold4w/yellow/visible, /turf/open/floor/plasteel, /area/maintenance/disposal/incinerator) +"cQu" = ( +/turf/open/floor/circuit/telecomms/server, +/area/science/misc_lab) "cQw" = ( /obj/effect/spawner/structure/window, /obj/machinery/door/firedoor/border_only, @@ -32823,12 +32848,6 @@ }, /turf/open/floor/carpet, /area/crew_quarters/fitness) -"cYM" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 5 - }, -/turf/open/floor/circuit, -/area/ai_monitored/turret_protected/ai) "cZl" = ( /obj/structure/cable{ icon_state = "4-8" @@ -33005,13 +33024,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/science/xenobiology) -"dgo" = ( -/obj/machinery/porta_turret/ai, -/obj/machinery/status_display/ai{ - pixel_y = -32 - }, -/turf/open/floor/circuit, -/area/ai_monitored/turret_protected/ai) "dgz" = ( /obj/structure/sign/warning/docking, /obj/structure/grille, @@ -33030,12 +33042,6 @@ /obj/machinery/telecomms/server/presets/common, /turf/open/floor/circuit/green/telecomms/mainframe, /area/tcommsat/server) -"diN" = ( -/obj/structure/cable/white{ - icon_state = "2-4" - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/ai) "djy" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ dir = 8 @@ -33209,6 +33215,10 @@ }, /turf/open/floor/plasteel/white, /area/science/xenobiology) +"dpE" = ( +/obj/machinery/ai/expansion_card_holder/prefilled, +/turf/open/floor/circuit/green/telecomms, +/area/ai_monitored/turret_protected/ai) "dpF" = ( /obj/machinery/atmospherics/pipe/manifold/yellow/visible, /obj/effect/landmark/xeno_spawn, @@ -33229,38 +33239,6 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/entry) -"dpR" = ( -/obj/effect/landmark/start/ai/secondary, -/obj/machinery/door/window{ - base_state = "rightsecure"; - icon_state = "rightsecure"; - layer = 4.1; - name = "Secondary AI Core Access"; - obj_integrity = 300; - pixel_y = -4; - req_access_txt = "16" - }, -/obj/item/radio/intercom{ - freerange = 1; - listening = 0; - name = "Custom Channel"; - pixel_x = 28; - pixel_y = 10 - }, -/obj/item/radio/intercom{ - freerange = 1; - name = "Common Channel"; - pixel_y = 21 - }, -/obj/item/radio/intercom{ - freerange = 1; - frequency = 1447; - name = "Private Channel"; - pixel_x = -27; - pixel_y = 10 - }, -/turf/open/floor/circuit/green, -/area/ai_monitored/turret_protected/ai) "dqb" = ( /obj/machinery/camera{ c_tag = "Aft Port Solar Access"; @@ -33636,12 +33614,6 @@ /obj/effect/landmark/stationroom/maint/tenxfive, /turf/template_noop, /area/maintenance/aft) -"dEa" = ( -/obj/machinery/ai_slipper{ - uses = 10 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/ai) "dEb" = ( /obj/machinery/door/firedoor/border_only{ dir = 1 @@ -33738,6 +33710,32 @@ }, /turf/open/space/basic, /area/engine/atmos_distro) +"dFJ" = ( +/obj/machinery/camera{ + c_tag = "AI Chamber - Port"; + dir = 4; + network = list("aicore") + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/obj/effect/turf_decal/stripes/end{ + dir = 1 + }, +/obj/machinery/flasher{ + id = "AI"; + pixel_x = 25; + pixel_y = 6 + }, +/obj/machinery/doorButtons/access_button{ + idDoor = "ai_core_airlock_interior"; + idSelf = "ai_core_airlock_control"; + pixel_x = 23; + pixel_y = -7 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/turret_protected/ai) "dFX" = ( /obj/structure/filingcabinet, /obj/effect/turf_decal/tile/red, @@ -34139,6 +34137,11 @@ }, /turf/open/floor/plasteel/dark, /area/science/robotics/lab) +"dTa" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/plasteel, +/area/science/misc_lab) "dTz" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ @@ -34149,6 +34152,19 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) +"dTK" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 1 + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -26 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/science/misc_lab) "dTV" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -34336,6 +34352,18 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /turf/open/floor/plasteel, /area/hallway/secondary/exit) +"edY" = ( +/obj/structure/cable/white{ + icon_state = "2-4" + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/cyan/hidden{ + dir = 8 + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "eec" = ( /obj/effect/spawner/structure/window/reinforced/shutter, /turf/closed/wall, @@ -34437,10 +34465,6 @@ }, /turf/open/floor/plasteel, /area/quartermaster/miningdock) -"ejs" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/turf/open/floor/circuit, -/area/ai_monitored/turret_protected/ai) "ejx" = ( /obj/structure/cable{ icon_state = "4-8" @@ -34579,23 +34603,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) -"epG" = ( -/obj/machinery/door/window{ - base_state = "leftsecure"; - dir = 1; - icon_state = "leftsecure"; - name = "Primary AI Core Access"; - obj_integrity = 300; - req_access_txt = "16" - }, -/obj/machinery/turretid{ - icon_state = "control_stun"; - name = "AI Chamber turret control"; - pixel_x = -31; - pixel_y = 5 - }, -/turf/open/floor/circuit, -/area/ai_monitored/turret_protected/ai) "epR" = ( /obj/structure/chair/office/light, /obj/effect/turf_decal/tile/blue{ @@ -34606,6 +34613,28 @@ }, /turf/open/floor/plasteel/cafeteria, /area/crew_quarters/heads/cmo) +"epV" = ( +/obj/machinery/ai_slipper{ + uses = 10 + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) +"eqb" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) +"eqW" = ( +/obj/item/stack/cable_coil, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/circuit/green/telecomms, +/area/ai_monitored/turret_protected/ai) "erb" = ( /obj/effect/turf_decal/tile/red{ dir = 4 @@ -34908,6 +34937,22 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /turf/open/floor/plasteel, /area/crew_quarters/dorms) +"eAi" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 4 + }, +/obj/machinery/door/airlock/command/glass{ + name = "Physical Core Access"; + req_access_txt = "30" + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/turf/open/floor/plasteel/white, +/area/science/misc_lab) "eAn" = ( /obj/structure/cable{ icon_state = "1-2" @@ -35376,6 +35421,19 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) +"eOj" = ( +/obj/machinery/status_display/ai{ + pixel_x = 32 + }, +/obj/structure/rack, +/obj/item/clothing/mask/breath, +/obj/item/clothing/mask/breath, +/obj/item/clothing/gloves/color/black, +/obj/item/clothing/gloves/color/black, +/obj/item/tank/internals/emergency_oxygen, +/obj/item/tank/internals/emergency_oxygen, +/turf/open/floor/circuit, +/area/ai_monitored/turret_protected/aisat_interior) "eOo" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 @@ -35469,14 +35527,6 @@ /obj/structure/grille, /turf/open/space/basic, /area/space/nearstation) -"eSF" = ( -/obj/machinery/camera{ - c_tag = "AI Chamber - Aft"; - dir = 1; - network = list("aicore") - }, -/turf/open/floor/circuit, -/area/ai_monitored/turret_protected/ai) "eSR" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 @@ -35695,10 +35745,6 @@ /obj/machinery/seed_extractor, /turf/open/floor/plating, /area/security/prison) -"eYo" = ( -/obj/machinery/porta_turret/ai, -/turf/open/floor/circuit, -/area/ai_monitored/turret_protected/ai) "eYG" = ( /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/tile/neutral{ @@ -35886,6 +35932,17 @@ }, /turf/open/floor/plasteel, /area/construction/mining/aux_base) +"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) "feu" = ( /obj/machinery/nuclearbomb/selfdestruct, /obj/effect/turf_decal/tile/neutral, @@ -35956,17 +36013,9 @@ "fhq" = ( /turf/open/floor/carpet, /area/crew_quarters/fitness) -"fhv" = ( -/obj/machinery/power/smes/engineering{ - charge = 5e+006 - }, -/obj/structure/cable/white{ - icon_state = "0-2" - }, -/obj/machinery/light{ - dir = 4 - }, -/turf/open/floor/circuit, +"fhN" = ( +/obj/machinery/atmospherics/pipe/manifold/cyan/hidden, +/turf/open/floor/circuit/telecomms/server, /area/ai_monitored/turret_protected/ai) "fib" = ( /obj/machinery/portable_atmospherics/canister/air, @@ -36206,6 +36255,24 @@ }, /turf/open/floor/plasteel/white, /area/medical/storage) +"fpW" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/ai_slipper{ + uses = 10 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/circuit, +/area/ai_monitored/turret_protected/aisat_interior) "fqv" = ( /obj/structure/cable/yellow{ icon_state = "2-8" @@ -36480,6 +36547,11 @@ /obj/effect/landmark/stationroom/maint/threexfive, /turf/template_noop, /area/maintenance/port/aft) +"fBX" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/science/misc_lab) "fCb" = ( /obj/structure/chair{ dir = 8 @@ -36738,12 +36810,6 @@ /obj/item/geiger_counter, /turf/open/floor/plating, /area/maintenance/aft) -"fMt" = ( -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/turf/open/floor/circuit, -/area/ai_monitored/turret_protected/ai) "fMu" = ( /obj/machinery/door/poddoor/shutters/preopen{ id = "hopqueue"; @@ -36810,15 +36876,6 @@ }, /turf/open/floor/plating, /area/hallway/secondary/entry) -"fNM" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, -/obj/structure/showcase/cyborg/old{ - dir = 4; - pixel_x = -9; - pixel_y = 2 - }, -/turf/open/floor/circuit, -/area/ai_monitored/turret_protected/ai) "fNQ" = ( /obj/effect/landmark/event_spawn, /turf/open/floor/plating, @@ -36836,6 +36893,15 @@ /obj/effect/landmark/start/medical_doctor, /turf/open/floor/plasteel/white, /area/medical/storage) +"fOx" = ( +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "fOz" = ( /turf/closed/wall/r_wall, /area/maintenance/port/aft) @@ -36946,13 +37012,6 @@ }, /turf/open/floor/plasteel, /area/engine/atmos_distro) -"fVa" = ( -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/structure/cable/yellow, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/ai) "fVj" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/preopen{ @@ -37025,6 +37084,16 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /turf/open/floor/plasteel/white, /area/medical/medbay/lobby) +"fYQ" = ( +/obj/machinery/ai/data_core, +/obj/machinery/atmospherics/pipe/manifold/general/visible{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/circuit/green/telecomms, +/area/science/misc_lab) "fZp" = ( /obj/machinery/light_switch{ pixel_x = 7; @@ -37228,15 +37297,6 @@ /obj/effect/mapping_helpers/teleport_anchor, /turf/open/floor/plasteel, /area/engine/engineering) -"ghq" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 6 - }, -/obj/structure/cable/yellow{ - icon_state = "2-4" - }, -/turf/open/floor/circuit, -/area/ai_monitored/turret_protected/ai) "ghA" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 1 @@ -37607,10 +37667,6 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/aft) -"gsL" = ( -/obj/effect/landmark/stationroom/maint/fivexfour, -/turf/template_noop, -/area/maintenance/starboard/aft) "gsM" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 8 @@ -37768,6 +37824,15 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, /turf/open/floor/plasteel, /area/engine/engineering) +"gxs" = ( +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 8 + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "gxA" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 6 @@ -37794,6 +37859,17 @@ }, /turf/open/floor/circuit, /area/ai_monitored/turret_protected/ai_upload) +"gxT" = ( +/obj/machinery/power/apc/highcap{ + dir = 8; + name = "AI Chamber APC"; + pixel_x = -25 + }, +/obj/structure/cable/white{ + icon_state = "0-4" + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "gyX" = ( /obj/effect/mapping_helpers/teleport_anchor, /turf/open/floor/plasteel, @@ -38086,14 +38162,6 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) -"gGj" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/holopad, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/turf/open/floor/plasteel/grimy, -/area/ai_monitored/turret_protected/aisat_interior) "gGA" = ( /obj/structure/rack, /obj/item/restraints/handcuffs/cable/zipties, @@ -38362,6 +38430,15 @@ }, /turf/open/floor/plasteel, /area/engine/atmos_distro) +"gQM" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/cyan/hidden{ + dir = 1 + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "gRh" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/techstorage/tcomms, @@ -38968,6 +39045,13 @@ }, /turf/open/floor/plasteel, /area/security/checkpoint/service) +"hqu" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "hqB" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -39262,6 +39346,12 @@ }, /turf/open/floor/plasteel/white, /area/medical/medbay/lobby) +"hyK" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 4 + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "hyV" = ( /obj/machinery/atmospherics/components/binary/pump{ name = "Pure to Incinerator" @@ -39755,6 +39845,9 @@ }, /turf/open/floor/plasteel, /area/science/robotics/lab) +"hOT" = ( +/turf/open/floor/circuit/green/telecomms, +/area/ai_monitored/turret_protected/ai) "hPk" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 4 @@ -39940,17 +40033,6 @@ icon_state = "platingdmg3" }, /area/maintenance/port) -"hVC" = ( -/obj/machinery/door/airlock/maintenance_hatch, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/obj/effect/mapping_helpers/airlock/abandoned, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "hVM" = ( /obj/machinery/power/apc{ areastring = "/area/quartermaster/miningdock"; @@ -40122,6 +40204,12 @@ }, /turf/open/floor/plating, /area/maintenance/port/aft) +"iaT" = ( +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/turf/open/floor/plating, +/area/ai_monitored/storage/satellite) "iaV" = ( /obj/effect/turf_decal/trimline/blue/filled/corner{ dir = 4 @@ -40174,6 +40262,15 @@ /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating, /area/maintenance/port/aft) +"ibT" = ( +/obj/structure/cable/white{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/components/unary/thermomachine/freezer/on{ + dir = 8 + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "ibZ" = ( /obj/structure/transit_tube/crossing/horizontal, /turf/open/space/basic, @@ -40474,6 +40571,9 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) +"ikn" = ( +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "ikt" = ( /obj/structure/cable{ icon_state = "1-8" @@ -40604,6 +40704,10 @@ }, /turf/open/floor/plasteel/white, /area/medical/medbay/aft) +"inN" = ( +/obj/machinery/ai/data_core/primary, +/turf/open/floor/circuit/green/telecomms, +/area/ai_monitored/turret_protected/ai) "inQ" = ( /obj/effect/turf_decal/delivery, /obj/effect/turf_decal/delivery, @@ -40619,6 +40723,11 @@ }, /turf/open/floor/plasteel, /area/construction/mining/aux_base) +"iog" = ( +/obj/structure/frame/machine, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/circuit/green/telecomms, +/area/ai_monitored/turret_protected/ai) "ioi" = ( /obj/effect/landmark/start/artist, /turf/open/floor/plasteel/vaporwave, @@ -40884,12 +40993,6 @@ /obj/effect/landmark/start/research_director, /turf/open/floor/carpet/blue, /area/bridge/meeting_room) -"iwJ" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/open/floor/circuit, -/area/ai_monitored/turret_protected/ai) "ixh" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 5 @@ -41122,17 +41225,6 @@ }, /turf/open/floor/plating, /area/maintenance/aft) -"iCG" = ( -/obj/machinery/flasher{ - id = "AI"; - pixel_x = 23; - pixel_y = 22 - }, -/obj/machinery/ai_slipper{ - uses = 10 - }, -/turf/open/floor/circuit, -/area/ai_monitored/turret_protected/ai) "iCJ" = ( /obj/effect/turf_decal/tile/blue{ dir = 4 @@ -41209,6 +41301,17 @@ }, /turf/open/floor/plating, /area/construction/mining/aux_base) +"iEZ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/holopad, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/chair/office/dark{ + dir = 4 + }, +/turf/open/floor/plasteel/grimy, +/area/ai_monitored/turret_protected/aisat_interior) "iFI" = ( /obj/effect/turf_decal/tile/yellow{ dir = 1 @@ -41322,21 +41425,6 @@ "iKq" = ( /turf/template_noop, /area/maintenance/starboard/aft) -"iKM" = ( -/obj/machinery/door/window{ - base_state = "rightsecure"; - icon_state = "rightsecure"; - name = "Primary AI Core Access"; - obj_integrity = 300; - req_access_txt = "16" - }, -/obj/machinery/camera{ - c_tag = "AI Chamber - Core"; - dir = 4; - network = list("aicore") - }, -/turf/open/floor/circuit, -/area/ai_monitored/turret_protected/ai) "iLi" = ( /obj/structure/disposalpipe/segment{ dir = 2 @@ -41406,6 +41494,18 @@ }, /turf/open/floor/engine, /area/science/xenobiology) +"iMo" = ( +/obj/machinery/atmospherics/pipe/manifold/cyan/hidden{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/machinery/airalarm/tcomms{ + pixel_y = 24 + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "iMx" = ( /obj/structure/railing, /obj/machinery/bookbinder{ @@ -41464,17 +41564,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /turf/open/floor/plasteel, /area/engine/atmos_distro) -"iNG" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/airalarm{ - dir = 8; - pixel_x = 24 - }, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/ai) "iOa" = ( /obj/structure/spacepoddoor, /turf/open/floor/engine/airless, @@ -42001,24 +42090,6 @@ }, /turf/open/floor/plasteel/dark, /area/maintenance/department/tcoms) -"jgB" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 10 - }, -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/ai_slipper{ - uses = 10 - }, -/obj/structure/cable/yellow{ - icon_state = "1-8" - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/ai) "jhe" = ( /obj/machinery/door/airlock/maintenance{ name = "Medbay Maintenance"; @@ -42185,6 +42256,26 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/entry) +"jmx" = ( +/obj/machinery/power/apc{ + areastring = "/area/ai_monitored/turret_protected/aisat_interior"; + dir = 4; + name = "MiniSat Antechamber APC"; + pixel_x = 24 + }, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/structure/rack, +/obj/item/clothing/shoes/winterboots, +/obj/item/clothing/shoes/winterboots, +/obj/item/clothing/suit/hooded/wintercoat, +/obj/item/clothing/suit/hooded/wintercoat, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/turf/open/floor/circuit, +/area/ai_monitored/turret_protected/aisat_interior) "jmA" = ( /obj/machinery/disposal/bin, /obj/effect/turf_decal/trimline/blue/filled/line{ @@ -42231,6 +42322,16 @@ "jnE" = ( /turf/closed/wall/r_wall, /area/medical/medbay/lobby) +"jnI" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "joM" = ( /obj/effect/decal/cleanable/oil, /turf/open/floor/plating, @@ -42544,28 +42645,6 @@ }, /turf/open/floor/plating, /area/maintenance/port/aft) -"jtX" = ( -/obj/machinery/flasher{ - id = "AI"; - pixel_x = 24; - pixel_y = -10 - }, -/obj/machinery/camera/motion{ - c_tag = "MiniSat Foyer"; - dir = 8; - network = list("minisat","ss13") - }, -/obj/machinery/turretid{ - control_area = "/area/ai_monitored/turret_protected/aisat_interior"; - name = "Antechamber Turret Control"; - pixel_x = 32; - req_access_txt = "19" - }, -/obj/effect/turf_decal/tile/darkblue{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/aisat_interior) "juh" = ( /obj/effect/turf_decal/tile/blue{ dir = 1 @@ -42958,6 +43037,13 @@ }, /turf/open/floor/plating, /area/hallway/secondary/exit) +"jKf" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/structure/window/reinforced, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "jKn" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -43045,6 +43131,12 @@ }, /turf/open/floor/plasteel/white, /area/science/robotics/lab) +"jNH" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "jNW" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/techstorage/command, @@ -43493,39 +43585,6 @@ }, /turf/open/floor/plating, /area/security/processing) -"kbP" = ( -/obj/effect/landmark/start/ai/secondary, -/obj/machinery/door/window{ - base_state = "leftsecure"; - dir = 1; - icon_state = "leftsecure"; - layer = 4.1; - name = "Tertiary AI Core Access"; - obj_integrity = 300; - pixel_y = 1; - req_access_txt = "16" - }, -/obj/item/radio/intercom{ - freerange = 1; - frequency = 1447; - name = "Private Channel"; - pixel_x = -27; - pixel_y = -13 - }, -/obj/item/radio/intercom{ - freerange = 1; - name = "Common Channel"; - pixel_y = -27 - }, -/obj/item/radio/intercom{ - freerange = 1; - listening = 0; - name = "Custom Channel"; - pixel_x = 28; - pixel_y = -13 - }, -/turf/open/floor/circuit/green, -/area/ai_monitored/turret_protected/ai) "kbT" = ( /obj/effect/spawner/structure/window/reinforced/shutter, /obj/structure/cable, @@ -43608,17 +43667,6 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/aft) -"keO" = ( -/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden/layer4, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/structure/cable/yellow{ - icon_state = "1-4" - }, -/turf/open/floor/circuit, -/area/ai_monitored/turret_protected/aisat_interior) "kfj" = ( /obj/machinery/computer/station_alert{ dir = 4 @@ -43726,6 +43774,15 @@ }, /turf/open/floor/plating, /area/hallway/secondary/service) +"kji" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "kjm" = ( /obj/structure/cable{ icon_state = "1-2" @@ -43846,6 +43903,18 @@ }, /turf/open/floor/plasteel/white, /area/medical/medbay/lobby) +"klu" = ( +/obj/machinery/power/smes/engineering{ + charge = 5e+006 + }, +/obj/structure/cable/white{ + icon_state = "0-2" + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "kmp" = ( /obj/machinery/computer/telecomms/traffic{ dir = 8; @@ -44046,15 +44115,6 @@ }, /turf/open/floor/plasteel, /area/engine/atmos_distro) -"kvW" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/ai) "kvX" = ( /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating, @@ -44168,6 +44228,15 @@ }, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/aisat_interior) +"kAS" = ( +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 8 + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "kBl" = ( /obj/machinery/door/firedoor/border_only{ dir = 4 @@ -44493,6 +44562,22 @@ }, /turf/open/floor/plating, /area/engine/atmos) +"kJZ" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/turret_protected/ai) "kKq" = ( /obj/structure/table/wood, /obj/item/paper_bin{ @@ -45032,6 +45117,13 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /turf/open/floor/plasteel/dark, /area/science/server) +"lcS" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/structure/cable/white{ + icon_state = "1-8" + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "lda" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, @@ -45151,17 +45243,6 @@ }, /turf/open/floor/engine, /area/science/xenobiology) -"lhR" = ( -/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) "lhU" = ( /obj/effect/turf_decal/stripes/end{ dir = 8 @@ -45222,6 +45303,20 @@ }, /turf/open/floor/plasteel/dark, /area/bridge) +"ljp" = ( +/obj/machinery/camera{ + c_tag = "AI Chamber - Port"; + dir = 8; + network = list("aicore") + }, +/obj/machinery/requests_console{ + department = "AI"; + departmentType = 5; + pixel_x = 0; + pixel_y = -32 + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "lka" = ( /obj/effect/turf_decal/tile/yellow{ dir = 4 @@ -45823,6 +45918,20 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /turf/open/floor/plasteel, /area/clerk) +"lCo" = ( +/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 = "55" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/plasteel/white, +/area/science/misc_lab) "lCS" = ( /obj/machinery/door/firedoor/border_only, /obj/effect/turf_decal/stripes/line{ @@ -46055,22 +46164,6 @@ }, /turf/open/floor/plasteel, /area/security/prison) -"lJM" = ( -/obj/machinery/camera{ - c_tag = "AI Chamber - Port"; - dir = 8; - network = list("aicore") - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 8 - }, -/obj/structure/showcase/cyborg/old{ - dir = 8; - pixel_x = 9; - pixel_y = 2 - }, -/turf/open/floor/circuit, -/area/ai_monitored/turret_protected/ai) "lKf" = ( /obj/machinery/atmospherics/pipe/simple/cyan/hidden, /turf/closed/wall/r_wall, @@ -46152,21 +46245,6 @@ }, /turf/open/floor/plating, /area/maintenance/port/aft) -"lMF" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/ai_slipper{ - uses = 10 - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/turf/open/floor/circuit, -/area/ai_monitored/turret_protected/aisat_interior) "lMK" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 1 @@ -46322,6 +46400,14 @@ }, /turf/open/floor/carpet, /area/medical/psych) +"lXb" = ( +/obj/machinery/turretid{ + icon_state = "control_stun"; + name = "AI Chamber turret control"; + pixel_y = 32 + }, +/turf/closed/wall/r_wall, +/area/ai_monitored/turret_protected/ai) "lYh" = ( /obj/structure/chair, /obj/effect/turf_decal/trimline/blue/filled/line{ @@ -46508,6 +46594,15 @@ }, /turf/open/floor/plating, /area/engine/atmos_distro) +"meS" = ( +/obj/machinery/atmospherics/pipe/manifold/general/visible{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 + }, +/turf/open/floor/plasteel/dark, +/area/science/misc_lab) "meX" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 @@ -47200,12 +47295,6 @@ }, /turf/open/floor/plasteel, /area/clerk) -"mAR" = ( -/obj/machinery/status_display/ai{ - pixel_y = -32 - }, -/turf/open/floor/circuit, -/area/ai_monitored/turret_protected/ai) "mAZ" = ( /obj/structure/chair{ dir = 4 @@ -47352,14 +47441,6 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/fore) -"mFd" = ( -/obj/machinery/camera{ - c_tag = "AI Chamber - Port"; - dir = 4; - network = list("aicore") - }, -/turf/open/floor/circuit, -/area/ai_monitored/turret_protected/ai) "mFw" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, @@ -47502,6 +47583,17 @@ /obj/effect/landmark/start/janitor, /turf/open/floor/plasteel, /area/janitor) +"mKt" = ( +/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, +/turf/open/floor/plasteel, +/area/science/misc_lab) "mKN" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 9 @@ -47628,6 +47720,13 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /turf/open/floor/plating, /area/maintenance/solars/starboard/aft) +"mNT" = ( +/obj/machinery/power/terminal{ + dir = 4 + }, +/obj/structure/cable/yellow, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "mOa" = ( /obj/effect/spawner/structure/window, /obj/machinery/door/firedoor/border_only, @@ -47741,14 +47840,14 @@ /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating, /area/maintenance/aft) -"mTp" = ( -/obj/machinery/flasher{ - id = "AI"; - pixel_x = 9; - pixel_y = -5 +"mTr" = ( +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -26 }, -/turf/closed/wall/r_wall, -/area/ai_monitored/turret_protected/ai) +/obj/item/twohanded/required/kirbyplants/random, +/turf/open/floor/plasteel, +/area/science/misc_lab) "mTv" = ( /obj/structure/table, /obj/effect/turf_decal/tile/red{ @@ -47925,17 +48024,6 @@ }, /turf/open/floor/plating, /area/hallway/secondary/exit) -"mZe" = ( -/obj/item/twohanded/required/kirbyplants/random, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 8 - }, -/obj/machinery/airalarm{ - dir = 8; - pixel_x = 24 - }, -/turf/open/floor/plasteel/grimy, -/area/ai_monitored/turret_protected/aisat_interior) "mZf" = ( /obj/machinery/light{ dir = 1 @@ -48077,6 +48165,18 @@ }, /turf/open/floor/plating, /area/bridge) +"naU" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 10 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/science/misc_lab) "nbu" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, @@ -48285,6 +48385,12 @@ }, /turf/open/floor/plasteel, /area/engine/atmos_distro) +"ner" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ + external_pressure_bound = 120 + }, +/turf/open/floor/circuit/telecomms/server, +/area/science/misc_lab) "nex" = ( /obj/effect/mapping_helpers/airlock/abandoned, /obj/machinery/door/firedoor/border_only{ @@ -48472,16 +48578,6 @@ /obj/machinery/telecomms/server/presets/security, /turf/open/floor/circuit/green/telecomms/mainframe, /area/tcommsat/server) -"njB" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ - dir = 1 - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/ai) "njN" = ( /obj/machinery/portable_atmospherics/canister/carbon_dioxide, /obj/structure/window/reinforced{ @@ -48616,6 +48712,16 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/aft) +"nqr" = ( +/obj/machinery/status_display/ai{ + pixel_y = -32 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 8 + }, +/obj/machinery/porta_turret/ai, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "nqR" = ( /obj/structure/cable{ icon_state = "2-8" @@ -49199,6 +49305,16 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/fore) +"nIU" = ( +/obj/machinery/doorButtons/airlock_controller{ + idExterior = "ai_core_airlock_exterior"; + idInterior = "ai_core_airlock_interior"; + idSelf = "ai_core_airlock_control"; + pixel_x = 5; + pixel_y = 25 + }, +/turf/closed/wall/r_wall, +/area/ai_monitored/turret_protected/ai) "nJu" = ( /obj/machinery/smartfridge/drying_rack, /obj/effect/decal/cleanable/cobweb, @@ -49452,6 +49568,15 @@ }, /turf/open/floor/plating, /area/science/xenobiology) +"nTS" = ( +/obj/machinery/atmospherics/components/unary/thermomachine/freezer/on{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/science/misc_lab) "nUj" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 @@ -49537,6 +49662,24 @@ }, /turf/open/floor/plasteel/white, /area/medical/medbay/aft) +"nVK" = ( +/obj/machinery/camera{ + c_tag = "AI Chamber - Fore"; + dir = 4; + network = list("aicore") + }, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 4 + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/porta_turret/ai, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "nWl" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, /obj/machinery/computer/cryopod{ @@ -50740,59 +50883,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /turf/open/floor/plasteel, /area/hallway/secondary/exit) -"oDF" = ( -/obj/machinery/button/door{ - id = "AI Core shutters"; - name = "AI Core shutters control"; - pixel_x = 8; - pixel_y = 22; - req_access_txt = "16" - }, -/obj/machinery/button/door{ - id = "AI Chamber entrance shutters"; - name = "AI Chamber entrance shutters control"; - pixel_x = 9; - pixel_y = -24; - req_access_txt = "16" - }, -/obj/item/radio/intercom{ - freerange = 1; - listening = 0; - name = "Custom Channel"; - pixel_x = -5; - pixel_y = -40 - }, -/obj/item/radio/intercom{ - freerange = 1; - name = "Common Channel"; - pixel_x = -5; - pixel_y = -27 - }, -/obj/item/radio/intercom{ - freerange = 1; - frequency = 1447; - name = "Private Channel"; - pixel_x = -7; - pixel_y = 20 - }, -/obj/machinery/door/window{ - base_state = "rightsecure"; - closingLayer = 4.1; - dir = 4; - icon_state = "rightsecure"; - layer = 4.1; - name = "Primary AI Core Access"; - obj_integrity = 300; - req_access_txt = "16" - }, -/obj/machinery/requests_console{ - department = "AI"; - departmentType = 5; - pixel_x = -32 - }, -/obj/effect/landmark/start/ai, -/turf/open/floor/circuit/green, -/area/ai_monitored/turret_protected/ai) "oEb" = ( /obj/structure/cable{ icon_state = "4-8" @@ -51030,15 +51120,6 @@ /obj/item/stack/cable_coil, /turf/open/floor/plasteel, /area/engine/engineering) -"oLO" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/structure/cable/yellow{ - icon_state = "2-8" - }, -/turf/open/floor/circuit, -/area/ai_monitored/turret_protected/ai) "oME" = ( /obj/structure/door_assembly/door_assembly_mhatch, /turf/open/floor/plating, @@ -51597,15 +51678,6 @@ /obj/effect/spawner/lootdrop/aimodule_harmful, /turf/open/floor/circuit, /area/ai_monitored/turret_protected/ai_upload) -"phB" = ( -/obj/machinery/door/airlock/maintenance_hatch, -/obj/effect/mapping_helpers/airlock/abandoned, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/door/firedoor/border_only, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "piv" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 @@ -51627,12 +51699,6 @@ }, /turf/open/floor/plasteel/dark, /area/engine/atmos) -"piS" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ai_monitored/storage/satellite) "pjc" = ( /obj/effect/landmark/start/medical_doctor, /obj/structure/disposalpipe/segment{ @@ -51838,13 +51904,6 @@ /obj/machinery/telecomms/server/presets/command, /turf/open/floor/circuit/green/telecomms/mainframe, /area/tcommsat/server) -"psc" = ( -/obj/machinery/light, -/obj/machinery/computer/aifixer{ - dir = 1 - }, -/turf/open/floor/plasteel/grimy, -/area/ai_monitored/turret_protected/aisat_interior) "psk" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable{ @@ -52012,6 +52071,21 @@ }, /turf/open/floor/plating, /area/maintenance/fore/secondary) +"pyn" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/machinery/ai_slipper{ + uses = 10 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "pyt" = ( /obj/machinery/door/airlock/security/glass{ name = "Holding Area"; @@ -52160,18 +52234,6 @@ }, /turf/open/floor/plasteel/white/corner, /area/hallway/secondary/entry) -"pBu" = ( -/obj/machinery/power/apc{ - areastring = "/area/ai_monitored/turret_protected/aisat_interior"; - dir = 4; - name = "MiniSat Antechamber APC"; - pixel_x = 24 - }, -/obj/structure/cable/yellow{ - icon_state = "0-8" - }, -/turf/open/floor/circuit, -/area/ai_monitored/turret_protected/aisat_interior) "pBw" = ( /obj/machinery/telecomms/broadcaster/preset_right{ name = "subspace broadcaster B" @@ -52226,6 +52288,22 @@ /obj/machinery/cryopod, /turf/open/floor/carpet, /area/crew_quarters/cryopods) +"pEj" = ( +/obj/structure/table, +/obj/item/wrench, +/obj/machinery/camera{ + c_tag = "Secondary AI Core"; + dir = 8; + network = list("ss13","rd") + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 + }, +/obj/machinery/airalarm{ + pixel_y = 24 + }, +/turf/open/floor/plasteel/dark, +/area/science/misc_lab) "pEk" = ( /obj/structure/cable{ icon_state = "4-8" @@ -52535,6 +52613,20 @@ }, /turf/open/floor/plating, /area/hallway/secondary/exit) +"pMu" = ( +/obj/machinery/status_display/ai{ + pixel_y = 32 + }, +/obj/machinery/light{ + dir = 4 + }, +/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) "pMy" = ( /obj/machinery/button/door{ id = "escapepodbay"; @@ -53363,12 +53455,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) -"qkW" = ( -/obj/structure/cable/yellow{ - icon_state = "1-4" - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/ai) "qlj" = ( /obj/effect/turf_decal/arrows/white{ color = "#99ccff"; @@ -53581,6 +53667,31 @@ }, /turf/open/floor/plating, /area/hallway/secondary/entry) +"qrP" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 + }, +/obj/machinery/camera{ + c_tag = "MiniSat Antechamber"; + dir = 8; + network = list("minisat","ss13") + }, +/obj/effect/turf_decal/stripes/corner, +/obj/machinery/doorButtons/airlock_controller{ + idExterior = "ai_core_airlock_exterior"; + idInterior = "ai_core_airlock_interior"; + idSelf = "ai_core_airlock_control"; + pixel_x = 25; + pixel_y = 7 + }, +/obj/machinery/doorButtons/access_button{ + idDoor = "ai_core_airlock_interior"; + idSelf = "ai_core_airlock_control"; + pixel_x = 23; + pixel_y = -7 + }, +/turf/open/floor/circuit, +/area/ai_monitored/turret_protected/aisat_interior) "qsa" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 8 @@ -53962,25 +54073,24 @@ /obj/item/storage/box, /turf/open/floor/plasteel, /area/engine/atmos) +"qDD" = ( +/obj/machinery/light, +/obj/machinery/camera{ + c_tag = "AI Chamber - Aft"; + dir = 4; + network = list("aicore") + }, +/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) "qEu" = ( /obj/machinery/telecomms/bus/preset_four, /turf/open/floor/circuit/green/telecomms/mainframe, /area/tcommsat/server) -"qFg" = ( -/obj/machinery/flasher{ - id = "AI"; - pixel_x = -25; - pixel_y = -25 - }, -/obj/machinery/ai_slipper{ - uses = 10 - }, -/turf/open/floor/circuit, -/area/ai_monitored/turret_protected/ai) -"qFA" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/ai) "qFC" = ( /obj/machinery/door/airlock/maintenance_hatch, /obj/effect/mapping_helpers/airlock/abandoned, @@ -54182,13 +54292,6 @@ /obj/machinery/light, /turf/open/floor/plasteel/white, /area/storage/tech) -"qLf" = ( -/obj/machinery/camera{ - c_tag = "AI Chamber - Fore"; - network = list("aicore") - }, -/turf/open/floor/circuit, -/area/ai_monitored/turret_protected/ai) "qLj" = ( /obj/effect/turf_decal/tile/red{ dir = 4 @@ -54228,6 +54331,15 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/plasteel, /area/engine/atmos) +"qMM" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 4 + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "qNt" = ( /turf/open/floor/plasteel, /area/hallway/secondary/service) @@ -54988,6 +55100,28 @@ }, /turf/open/floor/plating, /area/bridge) +"rjo" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/locked, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/airlock/public{ + id_tag = "ai_core_airlock_interior" + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "rjA" = ( /obj/effect/landmark/event_spawn, /obj/effect/turf_decal/tile/slightlydarkerblue{ @@ -55612,6 +55746,13 @@ /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plating, /area/maintenance/aft) +"rFU" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ + external_pressure_bound = 120; + name = "server vent" + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "rGe" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ dir = 4 @@ -55974,6 +56115,10 @@ }, /turf/closed/wall, /area/engine/atmos_distro) +"rSS" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/circuit/green/telecomms, +/area/ai_monitored/turret_protected/ai) "rSW" = ( /obj/effect/turf_decal/tile/red{ dir = 1 @@ -56047,6 +56192,12 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/aft) +"rTT" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 4 + }, +/turf/open/floor/circuit/telecomms/server, +/area/science/misc_lab) "rUD" = ( /obj/machinery/doorButtons/access_button{ idDoor = "toxins_airlock_exterior"; @@ -56083,6 +56234,12 @@ }, /turf/open/floor/plasteel/white, /area/medical/sleeper) +"rUV" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "rVk" = ( /obj/structure/cable/yellow{ icon_state = "1-2" @@ -56632,6 +56789,13 @@ /obj/machinery/chem_master, /turf/open/floor/plasteel/dark, /area/science/xenobiology) +"sml" = ( +/obj/structure/table, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel, +/area/science/misc_lab) "smA" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ @@ -56675,13 +56839,6 @@ }, /turf/open/floor/plasteel/stairs/goon/wood_stairs_wide, /area/library) -"sni" = ( -/obj/machinery/porta_turret/ai, -/obj/machinery/status_display/ai{ - pixel_y = 32 - }, -/turf/open/floor/circuit, -/area/ai_monitored/turret_protected/ai) "snk" = ( /obj/machinery/door/airlock/maintenance{ req_access_txt = "12" @@ -56879,6 +57036,13 @@ }, /turf/open/floor/plasteel/dark/telecomms, /area/tcommsat/server) +"swt" = ( +/obj/machinery/status_display/ai{ + pixel_x = 32 + }, +/obj/machinery/recharge_station, +/turf/open/floor/circuit, +/area/ai_monitored/turret_protected/aisat_interior) "swB" = ( /obj/machinery/power/apc{ areastring = "/area/engine/atmos"; @@ -56991,6 +57155,13 @@ }, /turf/open/floor/plasteel, /area/engine/atmos_distro) +"sAu" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "sBi" = ( /obj/structure/table/glass, /obj/item/storage/box/monkeycubes{ @@ -57264,18 +57435,6 @@ }, /turf/open/floor/plasteel/freezer, /area/crew_quarters/toilet/locker) -"sLV" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/turf/open/floor/circuit, -/area/ai_monitored/turret_protected/ai) "sMx" = ( /obj/structure/window/reinforced, /obj/structure/flora/ausbushes/ppflowers, @@ -57956,6 +58115,9 @@ }, /turf/open/floor/plasteel/dark, /area/bridge) +"tkF" = ( +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "tkW" = ( /obj/effect/turf_decal/tile/neutral{ dir = 1 @@ -58024,6 +58186,20 @@ }, /turf/open/floor/plasteel/dark, /area/bridge) +"tnF" = ( +/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) "tnK" = ( /obj/structure/grille, /obj/structure/lattice, @@ -58331,6 +58507,13 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /turf/open/floor/plasteel/white, /area/medical/medbay/central) +"tuX" = ( +/obj/machinery/light, +/obj/machinery/computer/ai_server_console{ + dir = 1 + }, +/turf/open/floor/plasteel/grimy, +/area/ai_monitored/turret_protected/aisat_interior) "tva" = ( /obj/effect/turf_decal/trimline/blue/filled/corner, /obj/effect/turf_decal/trimline/blue/filled/corner{ @@ -59273,6 +59456,15 @@ }, /turf/open/floor/plating, /area/maintenance/starboard) +"tYf" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 6 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "tYm" = ( /obj/structure/closet/crate{ icon_state = "crateopen" @@ -59606,6 +59798,12 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, /turf/open/floor/plasteel/white, /area/medical/storage) +"umh" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 8 + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "umj" = ( /obj/structure/cable{ icon_state = "1-8" @@ -59835,21 +60033,6 @@ }, /turf/open/floor/plasteel/dark/telecomms, /area/tcommsat/server) -"urx" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/power/apc{ - areastring = "/area/ai_monitored/turret_protected/ai"; - dir = 1; - name = "AI Chamber APC"; - pixel_y = 23 - }, -/obj/structure/cable/white{ - icon_state = "0-4" - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/ai) "usD" = ( /obj/machinery/door/airlock/research{ name = "Robotics Lab"; @@ -59912,9 +60095,14 @@ }, /turf/open/floor/plasteel, /area/quartermaster/warehouse) -"uvU" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/turf/open/floor/circuit, +"uwf" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 5 + }, +/turf/open/floor/plasteel/dark/telecomms, /area/ai_monitored/turret_protected/ai) "uwp" = ( /obj/effect/turf_decal/tile/neutral{ @@ -60685,6 +60873,39 @@ "uUO" = ( /turf/closed/wall/r_wall, /area/medical/storage) +"uUP" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/airlock/highsecurity{ + id_tag = "ai_core_airlock_exterior"; + name = "AI Core"; + req_access_txt = "16" + }, +/obj/effect/mapping_helpers/airlock/locked, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/turf/open/floor/circuit, +/area/ai_monitored/turret_protected/ai) "uVm" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -60774,12 +60995,6 @@ }, /turf/open/floor/carpet, /area/library) -"uYx" = ( -/obj/structure/cable/yellow{ - icon_state = "2-8" - }, -/turf/open/floor/circuit, -/area/ai_monitored/turret_protected/ai) "uYC" = ( /obj/machinery/door/window/northleft{ dir = 4; @@ -61042,6 +61257,15 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/dorms) +"vhB" = ( +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 8 + }, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "vhN" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 5 @@ -61809,12 +62033,6 @@ }, /turf/open/floor/plasteel/dark, /area/engine/engineering) -"vIi" = ( -/obj/machinery/status_display/ai{ - pixel_y = 32 - }, -/turf/open/floor/circuit, -/area/ai_monitored/turret_protected/ai) "vIj" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 5 @@ -61990,10 +62208,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) -"vOk" = ( -/obj/machinery/holopad, -/turf/open/floor/circuit, -/area/ai_monitored/turret_protected/ai) "vPf" = ( /obj/structure/rack, /obj/item/circuitboard/machine/techfab/department/security, @@ -62689,14 +62903,6 @@ }, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/aisat_interior) -"wku" = ( -/obj/machinery/door/poddoor/shutters/preopen{ - id = "AI Core shutters"; - name = "AI core shutters" - }, -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/ai_monitored/turret_protected/ai) "wkE" = ( /obj/machinery/door/airlock/external{ name = "External Access"; @@ -63368,6 +63574,15 @@ /obj/item/stock_parts/cell/high/plus, /turf/open/floor/plasteel, /area/engine/engineering) +"wGq" = ( +/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) "wGr" = ( /obj/item/twohanded/required/kirbyplants/random, /obj/machinery/light, @@ -63410,15 +63625,6 @@ }, /turf/open/floor/plasteel/white, /area/medical/storage) -"wHY" = ( -/obj/structure/cable/white{ - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/circuit, -/area/ai_monitored/turret_protected/ai) "wIv" = ( /obj/structure/cable{ icon_state = "4-8" @@ -63528,15 +63734,6 @@ }, /turf/open/floor/plasteel/dark, /area/engine/atmos_distro) -"wLP" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/ai) "wMq" = ( /obj/effect/turf_decal/trimline/yellow/filled/corner, /turf/open/floor/plasteel/white, @@ -63608,6 +63805,13 @@ }, /turf/open/floor/wood, /area/crew_quarters/heads/captain) +"wRD" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 4 + }, +/obj/machinery/power/port_gen/pacman, +/turf/open/floor/plating, +/area/ai_monitored/storage/satellite) "wRK" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -63636,6 +63840,14 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/exit) +"wTi" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1; + external_pressure_bound = 140; + pressure_checks = 0 + }, +/turf/open/floor/circuit/telecomms/server, +/area/science/misc_lab) "wTx" = ( /obj/effect/turf_decal/bot{ dir = 1 @@ -63772,17 +63984,6 @@ }, /turf/open/floor/plasteel, /area/construction/mining/aux_base) -"wZa" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 1 - }, -/obj/structure/showcase/cyborg/old{ - dir = 4; - pixel_x = -9; - pixel_y = 2 - }, -/turf/open/floor/circuit, -/area/ai_monitored/turret_protected/ai) "wZs" = ( /obj/effect/landmark/event_spawn, /turf/open/floor/plating{ @@ -63942,6 +64143,12 @@ /obj/item/flashlight, /turf/open/floor/plasteel, /area/science/misc_lab) +"xgK" = ( +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "xgS" = ( /obj/structure/lattice/catwalk, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ @@ -63949,6 +64156,21 @@ }, /turf/open/space/basic, /area/space/nearstation) +"xgY" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 + }, +/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) "xhr" = ( /obj/machinery/light{ dir = 8 @@ -64172,6 +64394,16 @@ }, /turf/open/floor/engine/vacuum, /area/maintenance/disposal/incinerator) +"xoQ" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/circuit/telecomms/server, +/area/ai_monitored/turret_protected/ai) "xpw" = ( /obj/machinery/door/airlock/medical{ name = "Paramedic Staging Area"; @@ -64471,17 +64703,6 @@ }, /turf/open/floor/plasteel/dark, /area/science/xenobiology) -"xAd" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 8 - }, -/obj/structure/showcase/cyborg/old{ - dir = 8; - pixel_x = 9; - pixel_y = 2 - }, -/turf/open/floor/circuit, -/area/ai_monitored/turret_protected/ai) "xAP" = ( /obj/structure/rack, /obj/item/electronics/airlock, @@ -64940,13 +65161,6 @@ }, /turf/open/floor/plasteel, /area/construction) -"xPv" = ( -/obj/structure/cable/yellow{ - icon_state = "1-8" - }, -/obj/machinery/power/port_gen/pacman, -/turf/open/floor/plating, -/area/ai_monitored/storage/satellite) "xPK" = ( /obj/effect/turf_decal/trimline/blue/filled/corner{ dir = 4 @@ -64982,6 +65196,10 @@ }, /turf/open/floor/engine, /area/science/mixing/chamber) +"xQt" = ( +/obj/machinery/holopad, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "xQA" = ( /obj/machinery/atmospherics/pipe/simple/green/visible{ dir = 4 @@ -65288,6 +65506,19 @@ /obj/effect/spawner/lootdrop/techstorage/tcomms, /turf/open/floor/plasteel/dark, /area/maintenance/department/tcoms) +"yau" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 + }, +/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) "yaD" = ( /obj/effect/turf_decal/bot, /obj/structure/window{ @@ -65449,15 +65680,6 @@ /obj/machinery/door/airlock/maintenance_hatch, /turf/open/floor/plating, /area/maintenance/starboard/aft) -"yeT" = ( -/obj/machinery/status_display/ai{ - pixel_x = 32 - }, -/obj/machinery/porta_turret/ai{ - scan_range = 4 - }, -/turf/open/floor/circuit, -/area/ai_monitored/turret_protected/aisat_interior) "yfe" = ( /obj/structure/table, /obj/item/shard{ @@ -65641,52 +65863,6 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/entry) -"ykl" = ( -/obj/machinery/door/poddoor/shutters/preopen{ - id = "AI Chamber entrance shutters"; - name = "AI Chamber entrance shutters" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/obj/machinery/door/airlock/highsecurity{ - name = "AI Core"; - req_access_txt = "16" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, -/obj/effect/mapping_helpers/airlock/locked, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/turf/open/floor/circuit, -/area/ai_monitored/turret_protected/ai) -"ykC" = ( -/obj/machinery/flasher{ - id = "AI"; - pixel_x = 25; - pixel_y = -6 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 8 - }, -/obj/machinery/camera{ - c_tag = "MiniSat Antechamber"; - dir = 8; - network = list("minisat","ss13") - }, -/turf/open/floor/circuit, -/area/ai_monitored/turret_protected/aisat_interior) "ykH" = ( /obj/structure/cable{ icon_state = "1-2" @@ -65709,12 +65885,6 @@ }, /turf/open/floor/plasteel/dark, /area/crew_quarters/heads/chief) -"ykL" = ( -/obj/structure/cable/white{ - icon_state = "1-8" - }, -/turf/closed/wall/r_wall, -/area/ai_monitored/turret_protected/ai) "ykZ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ @@ -106056,7 +106226,7 @@ oLF bQu fbU nnx -jtX +bhL kAv dEd pyZ @@ -106823,7 +106993,7 @@ ucZ tgv wFq fSL -piS +wRD tmG pnH vZa @@ -107085,12 +107255,12 @@ pPs pGB oTV bEI -keO +ctg cVj wjG pbT bTj -gGj +iEZ nyz war uHv @@ -107338,18 +107508,18 @@ tgv hWd gEh igK -xPv +iaT pnH -yeT -ykC -lMF -pBu -yeT +swt +qrP +fpW +jmx +eOj nnx -mZe -lhR +yau +tnF ouJ -psc +tuX gtB pEf gXs @@ -107598,8 +107768,8 @@ tgv tgv tgv cva -cva -ykl +nIU +uUP cva cva gtB @@ -107855,9 +108025,9 @@ pEf cva cva cva -mFd -sLV -aet +dFJ +kJZ +cHK cva cva cva @@ -108106,16 +108276,16 @@ aaa aaa aaa aaa -aaa pEf +pEf +cva +cva +cva +lXb cva +rjo cva cva -fNM -ejs -njB -uvU -wZa cva cva cva @@ -108362,18 +108532,18 @@ aaa aaa aaa aaa -aaa pEf pEf cva cva -eYo -ghq -iNG -jgB -qFA -cYM -eYo +cva +nVK +tYf +jnI +pyn +xgY +gxT +qDD cva cva pEf @@ -108619,18 +108789,18 @@ aaa aaa aaa aaa -aaa +pEf pEf cva cva cva -vIi -wLP -cva -cva -cva -urx -mAR +gQM +hqu +sAu +jNH +rUV +xgK +aFW cva cva cva @@ -108876,19 +109046,19 @@ aaa aaa aaa aaa -aaa +pEf mao cva cva -cva -iwJ -wLP -cva -oDF -mTp -kvW -eSF -cva +rSS +xoQ +jKf +cOC +ikn +dpE +wGq +hyK +iog cva cva mGQ @@ -109133,19 +109303,19 @@ aaa aaa aaa aaa -aaa +pEf pEf cva cva -dpR -iCG -wLP -epG -vOk -iKM -kvW -qFg -kbP +eqW +qMM +jKf +inN +xQt +dpE +wGq +hyK +hOT cva cva pEf @@ -109390,18 +109560,18 @@ aaa aaa aaa aaa -aaa +pEf pEf cva cva cva -qLf -wLP -wku -wku -wku -kvW -azM +iMo +eqb +uwf +rFU +edY +lcS +fhN cva cva cva @@ -109649,16 +109819,16 @@ aKN gXs gXs pEf -pEf cva cva -sni -oLO -qkW -dEa -diN -wHY -dgo +cva +pMu +kji +fOx +epV +kAS +tkF +nqr cva cva pEf @@ -109905,16 +110075,16 @@ aaa aKN aaa gXs -gXs +pEf pEf cva cva cva -xAd -uYx -fVa -fMt -lJM +umh +gxs +mNT +vhB +ljp cva cva cva @@ -110162,15 +110332,15 @@ aaa aKN gXs gXs -aaa +pEf pEf rfJ cva cva cva -cva -fhv -ykL +bAp +klu +ibT cva cva cva @@ -115249,7 +115419,7 @@ bqk brp bmW bvK -bxl +fdU bys bzM bya @@ -115530,13 +115700,13 @@ bQZ alN alN bwU -bWr +mTr +bQZ +ner +fYQ +wTi +bQZ bQZ -iKq -iKq -iKq -gsL -cNW ezr cOe vJS @@ -115787,13 +115957,13 @@ bQZ alX alX bwU -bMw +sml +fBX +cQu +rTT +cQu +bQZ bQZ -iKq -iKq -iKq -iKq -cNW cOT cOT vJS @@ -116044,14 +116214,14 @@ bQZ alY bwT bxG -asK +mKt bQZ -iKq -iKq -iKq -iKq -phB -axl +bZZ +eAi +bZZ +bQZ +cOe +cOe uxT vJS cNW @@ -116301,15 +116471,15 @@ alj alj bwU aqV -asU +dTa +lCo +cDs +meS +nTS bQZ -iKq -iKq -iKq -iKq -cNW cOe cNW +cNW vJS ciL bNA @@ -116560,12 +116730,12 @@ bwU xgD asW bQZ -iKq -iKq -iKq -iKq -cNW +pEj +naU +dTK +bQZ cOe +ezr cNW vJS fIH @@ -116817,11 +116987,11 @@ aRv bQZ bQZ bQZ -cNW -hVC -cNW -cNW -cNW +bQZ +bQZ +bQZ +bQZ +cOe cOe cNW bBT diff --git a/_maps/map_files/YogsDelta/YogsDelta.dmm b/_maps/map_files/YogsDelta/YogsDelta.dmm index e6b12352833a..14649313cb8f 100644 --- a/_maps/map_files/YogsDelta/YogsDelta.dmm +++ b/_maps/map_files/YogsDelta/YogsDelta.dmm @@ -108326,13 +108326,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /turf/open/floor/plasteel/dark, /area/engine/atmos) -"doM" = ( -/obj/structure/table/reinforced, -/obj/item/aicard, -/obj/item/circuitboard/aicore, -/obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, -/area/crew_quarters/heads/hor) "doN" = ( /obj/structure/cable/white{ icon_state = "1-2" @@ -126525,6 +126518,13 @@ /obj/structure/bookcase/random/nonfiction, /turf/open/floor/wood, /area/medical/psych) +"tcJ" = ( +/obj/structure/table/reinforced, +/obj/item/aicard, +/obj/effect/turf_decal/bot, +/obj/item/circuitboard/computer/ai_upload_download, +/turf/open/floor/plasteel, +/area/crew_quarters/heads/hor) "tdY" = ( /obj/item/twohanded/required/kirbyplants/random, /obj/effect/turf_decal/tile/blue, @@ -163153,7 +163153,7 @@ cgA ceU dlE dmS -doM +tcJ dqC drX dtq diff --git a/_maps/map_files/Yogsmeta/Yogsmeta.dmm b/_maps/map_files/Yogsmeta/Yogsmeta.dmm index 37b1b950cf1a..a0ba4df3b109 100644 --- a/_maps/map_files/Yogsmeta/Yogsmeta.dmm +++ b/_maps/map_files/Yogsmeta/Yogsmeta.dmm @@ -15197,33 +15197,6 @@ /obj/structure/grille, /turf/open/floor/plating, /area/maintenance/fore) -"aGF" = ( -/obj/machinery/status_display/evac{ - pixel_y = 32 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/ai) -"aGG" = ( -/obj/machinery/camera{ - c_tag = "AI Chamber - Fore"; - network = list("aicore") - }, -/obj/structure/showcase/cyborg/old{ - pixel_y = 20 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/ai) -"aGH" = ( -/obj/machinery/status_display/evac{ - pixel_y = 32 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/ai) "aGI" = ( /obj/machinery/status_display/evac{ pixel_y = 32 @@ -15837,12 +15810,6 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/locker) -"aHR" = ( -/obj/structure/cable{ - icon_state = "1-4" - }, -/turf/open/floor/circuit, -/area/ai_monitored/turret_protected/ai) "aHS" = ( /obj/machinery/door/airlock/security{ name = "Interrogation"; @@ -21183,17 +21150,6 @@ }, /turf/open/floor/plasteel/dark, /area/security/courtroom) -"aRY" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/turf/open/floor/circuit, -/area/ai_monitored/turret_protected/ai) -"aRZ" = ( -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/turf/open/floor/circuit, -/area/ai_monitored/turret_protected/ai) "aSc" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 8 @@ -22194,15 +22150,6 @@ "aTV" = ( /turf/closed/wall/r_wall, /area/ai_monitored/turret_protected/ai) -"aTW" = ( -/obj/machinery/power/smes{ - charge = 5e+006 - }, -/obj/structure/cable{ - icon_state = "0-4" - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/ai) "aTX" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -22784,13 +22731,6 @@ }, /turf/open/floor/plasteel/dark, /area/crew_quarters/locker) -"aUU" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/turf/open/floor/circuit, -/area/ai_monitored/turret_protected/ai) "aUV" = ( /obj/machinery/airalarm{ dir = 8; @@ -22949,12 +22889,6 @@ }, /turf/open/space, /area/space/nearstation) -"aVl" = ( -/obj/machinery/porta_turret/ai{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/ai) "aVm" = ( /obj/structure/cable/yellow{ icon_state = "1-2" @@ -22969,12 +22903,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /turf/open/floor/plasteel, /area/quartermaster/storage) -"aVn" = ( -/obj/structure/showcase/cyborg/old{ - pixel_y = 20 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/ai) "aVo" = ( /obj/machinery/button/door{ id = "giftshop"; @@ -23018,12 +22946,6 @@ }, /turf/open/floor/plasteel, /area/security/checkpoint/customs) -"aVr" = ( -/obj/machinery/porta_turret/ai{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/ai) "aVs" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -23833,15 +23755,6 @@ }, /turf/open/space, /area/space/nearstation) -"aWL" = ( -/obj/machinery/status_display/ai{ - pixel_x = -32 - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/open/floor/circuit, -/area/ai_monitored/turret_protected/ai) "aWM" = ( /obj/structure/cable/yellow{ icon_state = "1-8" @@ -23857,15 +23770,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) -"aWN" = ( -/turf/open/floor/circuit, -/area/ai_monitored/turret_protected/ai) -"aWO" = ( -/obj/machinery/ai_slipper{ - uses = 10 - }, -/turf/open/floor/circuit, -/area/ai_monitored/turret_protected/ai) "aWP" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -23890,15 +23794,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) -"aWR" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/status_display/ai{ - pixel_x = 32 - }, -/turf/open/floor/circuit, -/area/ai_monitored/turret_protected/ai) "aWS" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -24458,18 +24353,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/port) -"aXR" = ( -/obj/structure/table/reinforced, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = -26 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/ai) "aXS" = ( /obj/effect/turf_decal/tile/neutral{ dir = 1 @@ -24784,29 +24667,6 @@ /obj/structure/lattice, /turf/open/space, /area/space/nearstation) -"aYy" = ( -/obj/machinery/camera{ - c_tag = "AI Chamber - Port"; - dir = 4; - network = list("aicore") - }, -/obj/structure/showcase/cyborg/old{ - dir = 4; - pixel_x = -9; - pixel_y = 2 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/ai) "aYz" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ @@ -24837,24 +24697,6 @@ }, /turf/open/floor/plasteel, /area/security/checkpoint/engineering) -"aYB" = ( -/obj/structure/showcase/cyborg/old{ - dir = 8; - pixel_x = 9; - pixel_y = 2 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/ai) "aYC" = ( /obj/structure/sign/warning/docking, /turf/closed/wall, @@ -24997,23 +24839,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /turf/open/floor/plasteel, /area/hallway/primary/starboard) -"aYW" = ( -/obj/machinery/ai_slipper{ - uses = 10 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/turf/open/floor/circuit, -/area/ai_monitored/turret_protected/ai) -"aYX" = ( -/obj/machinery/ai_slipper{ - uses = 10 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/turf/open/floor/circuit, -/area/ai_monitored/turret_protected/ai) "aYY" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -25581,58 +25406,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /turf/open/floor/plasteel, /area/storage/tools) -"aZQ" = ( -/obj/effect/landmark/start/ai/secondary, -/obj/item/radio/intercom{ - freerange = 1; - listening = 0; - name = "Custom Channel"; - pixel_x = -10; - pixel_y = 22 - }, -/obj/item/radio/intercom{ - freerange = 1; - name = "Common Channel"; - pixel_x = -27 - }, -/obj/item/radio/intercom{ - freerange = 1; - frequency = 1447; - name = "Private Channel"; - pixel_x = -10; - pixel_y = -25 - }, -/obj/machinery/door/window{ - base_state = "rightsecure"; - dir = 4; - icon_state = "rightsecure"; - layer = 4.1; - name = "Secondary AI Core Access"; - obj_integrity = 300; - pixel_x = 4; - req_access_txt = "16" - }, -/turf/open/floor/circuit/green, -/area/ai_monitored/turret_protected/ai) -"aZR" = ( -/obj/machinery/holopad, -/obj/machinery/flasher{ - id = "AI"; - pixel_x = -25; - pixel_y = -25 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/ai) "aZS" = ( /obj/structure/window/reinforced{ dir = 8 @@ -25676,83 +25449,6 @@ }, /turf/open/floor/plasteel/dark, /area/crew_quarters/locker) -"aZV" = ( -/obj/machinery/door/window{ - base_state = "rightsecure"; - dir = 4; - icon_state = "rightsecure"; - name = "Primary AI Core Access"; - obj_integrity = 300; - req_access_txt = "16" - }, -/obj/machinery/camera{ - c_tag = "AI Chamber - Core"; - network = list("aicore") - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/ai) -"aZX" = ( -/obj/machinery/holopad, -/obj/machinery/flasher{ - id = "AI"; - pixel_x = 25; - pixel_y = 25 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/ai) -"aZY" = ( -/obj/effect/landmark/start/ai/secondary, -/obj/item/radio/intercom{ - freerange = 1; - listening = 0; - name = "Custom Channel"; - pixel_x = 10; - pixel_y = 22 - }, -/obj/item/radio/intercom{ - freerange = 1; - name = "Common Channel"; - pixel_x = 27 - }, -/obj/item/radio/intercom{ - freerange = 1; - frequency = 1447; - name = "Private Channel"; - pixel_x = 10; - pixel_y = -25 - }, -/obj/machinery/door/window{ - base_state = "leftsecure"; - dir = 8; - icon_state = "leftsecure"; - layer = 4.1; - name = "Tertiary AI Core Access"; - obj_integrity = 300; - pixel_x = -3; - req_access_txt = "16" - }, -/turf/open/floor/circuit/green, -/area/ai_monitored/turret_protected/ai) "baa" = ( /obj/structure/closet/emcloset, /obj/effect/turf_decal/delivery, @@ -25778,12 +25474,6 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/entry) -"bae" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 5 - }, -/turf/open/floor/circuit, -/area/ai_monitored/turret_protected/ai) "baf" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -25829,15 +25519,6 @@ }, /turf/open/floor/plasteel/dark, /area/crew_quarters/locker) -"bai" = ( -/obj/machinery/airalarm{ - pixel_y = 24 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 10 - }, -/turf/open/floor/circuit, -/area/ai_monitored/turret_protected/ai) "baj" = ( /obj/structure/cable/yellow{ icon_state = "2-8" @@ -25969,30 +25650,6 @@ "bat" = ( /turf/closed/wall, /area/quartermaster/office) -"bau" = ( -/obj/machinery/power/apc{ - areastring = "/area/ai_monitored/turret_protected/ai"; - dir = 1; - name = "AI Chamber APC"; - pixel_y = 23 - }, -/obj/structure/cable{ - icon_state = "0-4" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 6 - }, -/turf/open/floor/circuit, -/area/ai_monitored/turret_protected/ai) -"bav" = ( -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 9 - }, -/turf/open/floor/circuit, -/area/ai_monitored/turret_protected/ai) "baw" = ( /obj/structure/noticeboard{ desc = "A board for pinning important notices upon. Probably helpful for keeping track of requests."; @@ -26583,24 +26240,6 @@ }, /turf/open/space/basic, /area/space) -"bbF" = ( -/obj/structure/showcase/cyborg/old{ - dir = 4; - pixel_x = -9; - pixel_y = 2 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/ai) "bbG" = ( /obj/structure/closet/secure_closet/personal, /obj/machinery/light/small{ @@ -26626,29 +26265,6 @@ }, /turf/open/floor/plasteel/dark, /area/crew_quarters/locker) -"bbH" = ( -/obj/machinery/camera{ - c_tag = "AI Chamber - Starboard"; - dir = 8; - network = list("aicore") - }, -/obj/structure/showcase/cyborg/old{ - dir = 8; - pixel_x = 9; - pixel_y = 2 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/ai) "bbI" = ( /obj/effect/turf_decal/tile/blue, /turf/open/floor/plasteel/dark, @@ -26797,10 +26413,6 @@ "bbY" = ( /turf/open/floor/plasteel, /area/hallway/primary/port) -"bbZ" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/ai) "bca" = ( /obj/structure/chair{ dir = 8 @@ -26818,10 +26430,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/port) -"bcb" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/turf/open/floor/circuit, -/area/ai_monitored/turret_protected/ai) "bcc" = ( /obj/effect/turf_decal/tile/neutral, /turf/open/floor/plasteel, @@ -26924,10 +26532,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/port) -"bcp" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/ai) "bcq" = ( /obj/effect/turf_decal/tile/neutral{ dir = 8 @@ -27163,15 +26767,6 @@ }, /turf/open/floor/plasteel, /area/security/checkpoint/engineering) -"bcP" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/status_display/ai{ - pixel_x = -32 - }, -/turf/open/floor/circuit, -/area/ai_monitored/turret_protected/ai) "bcQ" = ( /obj/structure/window/reinforced, /obj/structure/window/reinforced{ @@ -28950,25 +28545,6 @@ /obj/effect/turf_decal/tile/blue, /turf/open/floor/plasteel/dark, /area/bridge) -"bgm" = ( -/obj/structure/table/reinforced, -/obj/item/phone{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/cigbutt/cigarbutt{ - pixel_x = 5; - pixel_y = -1 - }, -/obj/item/radio/intercom{ - broadcasting = 1; - frequency = 1447; - listening = 0; - name = "Station Intercom (AI Private)"; - pixel_x = 28 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/ai) "bgn" = ( /obj/structure/window/reinforced{ dir = 1; @@ -29033,17 +28609,6 @@ }, /turf/open/floor/plasteel, /area/engine/foyer) -"bgx" = ( -/obj/structure/table/reinforced, -/obj/item/folder/blue{ - pixel_y = 2 - }, -/obj/item/pen, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/ai) "bgz" = ( /obj/item/paper, /obj/structure/table/reinforced, @@ -29170,18 +28735,6 @@ }, /turf/open/floor/plasteel, /area/quartermaster/sorting) -"bgK" = ( -/obj/structure/chair/office/dark{ - dir = 8 - }, -/obj/machinery/status_display/ai{ - pixel_y = -32 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 5 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/ai) "bgL" = ( /obj/machinery/holopad, /obj/structure/cable/yellow{ @@ -29206,25 +28759,6 @@ /obj/structure/chair/office/dark, /turf/open/floor/plasteel/grimy, /area/tcommsat/computer) -"bgO" = ( -/obj/machinery/camera{ - c_tag = "AI Chamber - Aft"; - dir = 1; - network = list("aicore") - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/ai) -"bgP" = ( -/obj/machinery/holopad, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 6 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/ai) "bgQ" = ( /obj/structure/cable/yellow{ icon_state = "1-2" @@ -29327,22 +28861,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/port) -"bha" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/ai) -"bhb" = ( -/obj/structure/chair/office/dark{ - dir = 4 - }, -/obj/machinery/status_display/evac{ - pixel_y = -32 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 9 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/ai) "bhc" = ( /obj/structure/extinguisher_cabinet{ pixel_x = 27 @@ -30075,17 +29593,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/starboard) -"bis" = ( -/obj/structure/table/reinforced, -/obj/item/folder/blue{ - pixel_y = 2 - }, -/obj/item/pen, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/ai) "bit" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -30754,36 +30261,6 @@ dir = 1 }, /area/engine/atmos) -"bjz" = ( -/obj/machinery/door/airlock/highsecurity{ - name = "AI Chamber"; - req_access_txt = "16" - }, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "AI Chamber entrance shutters"; - name = "AI Chamber entrance shutters" - }, -/obj/machinery/flasher{ - id = "AI"; - pixel_x = -26; - pixel_y = 3 - }, -/obj/item/radio/intercom{ - broadcasting = 1; - frequency = 1447; - listening = 0; - name = "Station Intercom (AI Private)"; - pixel_x = 28 - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/door/firedoor/border_only, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/aisat_interior) "bjA" = ( /obj/machinery/light{ dir = 8 @@ -30988,17 +30465,6 @@ }, /turf/open/floor/plasteel/white, /area/crew_quarters/heads/captain/private) -"bjS" = ( -/obj/machinery/power/terminal{ - dir = 1 - }, -/obj/machinery/flasher{ - id = "AI"; - pixel_x = -24; - pixel_y = 28 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/ai) "bjT" = ( /turf/closed/wall/r_wall, /area/ai_monitored/storage/satellite) @@ -31064,11 +30530,6 @@ /obj/machinery/atmospherics/components/unary/outlet_injector/on/layer4, /turf/open/floor/plating/airless, /area/aisat) -"bkb" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/aisat_interior) "bkd" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -32197,13 +31658,6 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/bar) -"bml" = ( -/obj/machinery/holopad, -/obj/effect/landmark/start/cyborg, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/aisat_interior) "bmm" = ( /obj/structure/sign/directions/security{ dir = 1; @@ -33271,25 +32725,6 @@ }, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/aisat_interior) -"boC" = ( -/obj/machinery/requests_console{ - announcementConsole = 1; - department = "Telecomms Admin"; - departmentType = 5; - name = "Telecomms RC"; - pixel_y = -30 - }, -/obj/item/paper_bin{ - pixel_x = -1; - pixel_y = 6 - }, -/obj/structure/table/wood, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = 26 - }, -/turf/open/floor/plasteel/grimy, -/area/tcommsat/computer) "boD" = ( /obj/structure/displaycase/captain{ pixel_y = 5 @@ -33548,24 +32983,6 @@ /obj/structure/sign/warning/nosmoking, /turf/closed/wall, /area/engine/atmos) -"bpx" = ( -/obj/structure/cable/yellow{ - icon_state = "2-4" - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/ai_slipper{ - uses = 10 - }, -/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 6 - }, -/mob/living/simple_animal/bot/secbot/pingsky, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/aisat_interior) "bpz" = ( /obj/item/radio/intercom{ dir = 4; @@ -34016,37 +33433,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/port) -"bqm" = ( -/obj/machinery/turretid{ - icon_state = "control_stun"; - name = "AI Chamber turret control"; - pixel_x = 3; - pixel_y = -23 - }, -/obj/machinery/door/window{ - base_state = "leftsecure"; - dir = 8; - icon_state = "leftsecure"; - name = "Primary AI Core Access"; - obj_integrity = 300; - req_access_txt = "16" - }, -/obj/machinery/newscaster/security_unit{ - pixel_x = 4; - pixel_y = 33 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/ai) "bqn" = ( /obj/structure/cable/yellow{ icon_state = "1-2" @@ -34616,33 +34002,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) -"brx" = ( -/obj/machinery/requests_console{ - department = "AI"; - departmentType = 5; - pixel_x = 30; - pixel_y = 30 - }, -/obj/machinery/ai_slipper{ - uses = 10 - }, -/obj/machinery/flasher{ - id = "AI"; - pixel_x = 23; - pixel_y = -23 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/ai) "bry" = ( /obj/structure/cable/yellow{ icon_state = "1-2" @@ -36125,43 +35484,6 @@ /obj/effect/turf_decal/bot, /turf/open/floor/plasteel/dark/corner, /area/engine/storage_shared) -"bvf" = ( -/obj/item/radio/intercom{ - freerange = 1; - name = "Common Channel"; - pixel_x = -27; - pixel_y = -7 - }, -/obj/item/radio/intercom{ - freerange = 1; - listening = 0; - name = "Custom Channel"; - pixel_y = -27 - }, -/obj/item/radio/intercom{ - freerange = 1; - frequency = 1447; - name = "Private Channel"; - pixel_x = 27; - pixel_y = -7 - }, -/obj/effect/landmark/start/ai, -/obj/machinery/button/door{ - id = "AI Core shutters"; - name = "AI Core shutters control"; - pixel_x = 24; - pixel_y = -22; - req_access_txt = "16" - }, -/obj/machinery/button/door{ - id = "AI Chamber entrance shutters"; - name = "AI Chamber entrance shutters control"; - pixel_x = -23; - pixel_y = -23; - req_access_txt = "16" - }, -/turf/open/floor/circuit/green, -/area/ai_monitored/turret_protected/ai) "bvg" = ( /obj/effect/turf_decal/bot{ dir = 1 @@ -36261,19 +35583,6 @@ "bvt" = ( /turf/closed/wall, /area/aisat) -"bvu" = ( -/obj/structure/table/wood, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/item/radio/off{ - pixel_y = 4 - }, -/obj/item/screwdriver{ - pixel_y = 10 - }, -/turf/open/floor/plasteel/grimy, -/area/tcommsat/computer) "bvx" = ( /obj/machinery/door/window/eastright{ dir = 1; @@ -36302,35 +35611,6 @@ dir = 1 }, /area/hydroponics) -"bvz" = ( -/obj/structure/table/wood, -/obj/machinery/status_display/ai{ - pixel_y = 31 - }, -/obj/item/flashlight/lamp, -/turf/open/floor/plasteel/grimy, -/area/tcommsat/computer) -"bvA" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/item/radio/intercom{ - dir = 8; - freerange = 1; - name = "Station Intercom (Telecomms)"; - pixel_y = 30 - }, -/obj/structure/table/wood, -/obj/item/phone{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/cigbutt/cigarbutt{ - pixel_x = 5; - pixel_y = -1 - }, -/turf/open/floor/plasteel/grimy, -/area/tcommsat/computer) "bvB" = ( /obj/item/twohanded/required/kirbyplants{ icon_state = "plant-20" @@ -37570,24 +36850,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /turf/open/floor/plasteel, /area/hallway/primary/central) -"byx" = ( -/obj/machinery/porta_turret/ai, -/obj/machinery/flasher{ - id = "AI"; - pixel_y = 24 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/ai) "byy" = ( /obj/effect/landmark/start/bartender, /obj/effect/turf_decal/tile/bar, @@ -38514,16 +37776,6 @@ /obj/structure/table/wood, /turf/open/floor/plasteel/grimy, /area/tcommsat/computer) -"bAW" = ( -/obj/structure/table/wood, -/obj/machinery/status_display/evac{ - pixel_y = 31 - }, -/obj/item/book/manual/wiki/tcomms, -/obj/item/folder/blue, -/obj/item/pen, -/turf/open/floor/plasteel/grimy, -/area/tcommsat/computer) "bAX" = ( /obj/structure/lattice, /obj/machinery/atmospherics/components/binary/pump/on{ @@ -42306,25 +41558,6 @@ /obj/machinery/telecomms/message_server/preset, /turf/open/floor/circuit/telecomms/mainframe, /area/tcommsat/server) -"bJh" = ( -/obj/item/twohanded/required/kirbyplants{ - icon_state = "plant-21" - }, -/turf/open/floor/plasteel/grimy, -/area/tcommsat/computer) -"bJi" = ( -/obj/machinery/light/small, -/obj/item/folder, -/obj/item/folder, -/obj/machinery/camera{ - c_tag = "Telecomms - Control Room"; - dir = 1; - network = list("ss13","tcomms") - }, -/obj/structure/table/wood, -/obj/item/pen, -/turf/open/floor/plasteel/grimy, -/area/tcommsat/computer) "bJk" = ( /obj/effect/landmark/event_spawn, /obj/effect/turf_decal/tile/blue{ @@ -60224,17 +59457,6 @@ dir = 5 }, /area/crew_quarters/heads/hor) -"cuP" = ( -/obj/structure/table, -/obj/item/aicard, -/obj/item/circuitboard/aicore{ - pixel_x = -2; - pixel_y = 4 - }, -/turf/open/floor/plasteel/cafeteria{ - dir = 5 - }, -/area/crew_quarters/heads/hor) "cuQ" = ( /turf/open/floor/plasteel/cafeteria{ dir = 5 @@ -63608,6 +62830,18 @@ }, /turf/open/floor/plasteel, /area/science/robotics/lab) +"cEl" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/status_display/ai{ + pixel_x = 32 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 8 + }, +/turf/open/floor/circuit/telecomms/mainframe, +/area/ai_monitored/turret_protected/ai) "cEq" = ( /obj/structure/lattice, /turf/open/space, @@ -64185,16 +63419,6 @@ "cIg" = ( /turf/closed/wall/r_wall, /area/science/server) -"cIh" = ( -/obj/structure/closet, -/obj/item/storage/box/lights/mixed, -/obj/item/flashlight, -/obj/effect/decal/cleanable/cobweb, -/obj/structure/sign/warning/biohazard{ - pixel_y = 32 - }, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "cIw" = ( /obj/structure/closet/secure_closet/medical1, /obj/effect/turf_decal/tile/neutral{ @@ -64335,20 +63559,6 @@ }, /turf/open/floor/plasteel/dark/telecomms, /area/science/server) -"cIZ" = ( -/obj/effect/landmark/blobstart, -/obj/machinery/atmospherics/pipe/manifold{ - dir = 4 - }, -/obj/machinery/light/small{ - dir = 4 - }, -/obj/machinery/airalarm/server{ - dir = 8; - pixel_x = 24 - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/science/server) "cJf" = ( /obj/structure/cable/yellow{ icon_state = "0-8" @@ -65260,6 +64470,9 @@ }, /turf/open/floor/plasteel/white/corner, /area/hallway/secondary/entry) +"cOd" = ( +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "cOh" = ( /obj/effect/spawner/structure/window/reinforced/tinted, /turf/open/floor/plasteel/dark, @@ -67194,10 +66407,6 @@ }, /turf/open/floor/carpet, /area/crew_quarters/heads/hop) -"dbl" = ( -/obj/structure/easel, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "dbm" = ( /obj/effect/landmark/event_spawn, /turf/open/floor/plasteel, @@ -69369,6 +68578,20 @@ /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/vacant_room/commissary) +"dtP" = ( +/obj/machinery/holopad, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "dtS" = ( /obj/item/cigbutt, /obj/machinery/power/apc{ @@ -69532,10 +68755,6 @@ }, /turf/open/floor/plasteel, /area/maintenance/department/science) -"dAh" = ( -/obj/item/storage/box, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "dAj" = ( /obj/structure/cable/yellow{ icon_state = "2-4" @@ -70512,6 +69731,21 @@ dir = 5 }, /area/science/research) +"eqz" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/item/radio/intercom{ + dir = 8; + freerange = 1; + name = "Station Intercom (Telecomms)"; + pixel_y = 30 + }, +/obj/item/twohanded/required/kirbyplants{ + icon_state = "plant-18" + }, +/turf/open/floor/plasteel/grimy, +/area/tcommsat/computer) "eqG" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -71071,6 +70305,10 @@ }, /turf/open/floor/plasteel, /area/quartermaster/storage) +"feR" = ( +/obj/machinery/atmospherics/pipe/simple/yellow/hidden, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/turret_protected/aisat_interior) "ffa" = ( /obj/structure/cable/yellow{ icon_state = "1-2" @@ -71415,6 +70653,19 @@ "fEQ" = ( /turf/closed/wall, /area/science/nanite) +"fGs" = ( +/obj/structure/showcase/cyborg/old{ + dir = 8; + pixel_x = 9; + pixel_y = 2 + }, +/obj/machinery/camera{ + c_tag = "AI Chamber - Starboard"; + dir = 8; + network = list("aicore") + }, +/turf/open/floor/circuit/telecomms/mainframe, +/area/ai_monitored/turret_protected/ai) "fHn" = ( /obj/machinery/holopad, /turf/open/floor/plasteel, @@ -71428,6 +70679,13 @@ }, /turf/open/floor/plasteel, /area/science/mixing) +"fIq" = ( +/obj/machinery/atmospherics/pipe/manifold{ + dir = 4 + }, +/obj/effect/landmark/blobstart, +/turf/open/floor/plasteel/dark/telecomms, +/area/science/server) "fIv" = ( /obj/structure/cable/white{ icon_state = "4-8" @@ -71575,6 +70833,20 @@ }, /turf/open/floor/plasteel/dark, /area/chapel/office) +"fPO" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/status_display/ai{ + pixel_x = -32 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ + dir = 4; + external_pressure_bound = 120; + name = "server vent" + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "fQe" = ( /obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/neutral{ @@ -71769,6 +71041,15 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /turf/open/floor/plating, /area/maintenance/solars/starboard/fore) +"fYL" = ( +/obj/machinery/power/smes{ + charge = 5e+006 + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "fZn" = ( /obj/item/radio/intercom{ pixel_x = -30 @@ -72030,6 +71311,16 @@ /obj/effect/mapping_helpers/teleport_anchor, /turf/open/floor/plasteel, /area/science/xenobiology) +"gqX" = ( +/obj/machinery/atmospherics/pipe/simple/yellow/hidden, +/turf/open/floor/circuit/telecomms/mainframe, +/area/ai_monitored/turret_protected/ai) +"grh" = ( +/obj/structure/frame/machine{ + anchored = 1 + }, +/turf/open/floor/circuit/green/telecomms/mainframe, +/area/ai_monitored/turret_protected/ai) "grj" = ( /obj/machinery/door/airlock/maintenance_hatch, /obj/machinery/door/firedoor/border_only{ @@ -72219,6 +71510,11 @@ /obj/item/pen/red, /turf/open/floor/plasteel, /area/quartermaster/qm) +"gGR" = ( +/obj/machinery/holopad, +/obj/machinery/atmospherics/pipe/simple/yellow/hidden, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "gIa" = ( /obj/structure/cable{ icon_state = "1-2" @@ -72448,6 +71744,9 @@ /obj/machinery/light/small, /turf/open/floor/plating, /area/maintenance/starboard) +"gRj" = ( +/turf/open/floor/circuit/telecomms/mainframe, +/area/ai_monitored/turret_protected/ai) "gRG" = ( /obj/effect/turf_decal/tile/neutral{ dir = 1 @@ -72592,6 +71891,12 @@ }, /turf/open/floor/plating, /area/maintenance/port/aft) +"hhM" = ( +/obj/machinery/status_display/evac{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "hii" = ( /obj/effect/mapping_helpers/airlock/abandoned, /obj/machinery/door/firedoor/border_only{ @@ -73209,6 +72514,14 @@ icon_state = "wood-broken4" }, /area/library) +"hZj" = ( +/obj/structure/showcase/cyborg/old{ + dir = 4; + pixel_x = -9; + pixel_y = 2 + }, +/turf/open/floor/circuit/telecomms/mainframe, +/area/ai_monitored/turret_protected/ai) "hZx" = ( /obj/structure/cable/yellow{ icon_state = "1-2" @@ -73693,6 +73006,13 @@ /obj/item/clothing/head/festive, /turf/open/floor/plating, /area/maintenance/fore) +"iJY" = ( +/obj/machinery/ai_slipper{ + uses = 10 + }, +/obj/machinery/atmospherics/pipe/simple/yellow/hidden, +/turf/open/floor/circuit/telecomms/mainframe, +/area/ai_monitored/turret_protected/ai) "iKc" = ( /obj/machinery/door/airlock/public/glass{ name = "Cryogenics" @@ -74096,6 +73416,19 @@ /obj/effect/mapping_helpers/teleport_anchor, /turf/open/floor/plasteel, /area/engine/engineering) +"jmU" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "jox" = ( /obj/machinery/button{ id = "maintshut"; @@ -74593,6 +73926,15 @@ }, /turf/open/floor/wood, /area/crew_quarters/heads/captain/private) +"jZz" = ( +/obj/machinery/airalarm/tcomms{ + pixel_y = 24 + }, +/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ + dir = 10 + }, +/turf/open/floor/circuit/telecomms/mainframe, +/area/ai_monitored/turret_protected/ai) "kac" = ( /obj/structure/closet/secure_closet/medical3, /obj/item/screwdriver{ @@ -74831,6 +74173,29 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /turf/open/floor/plating, /area/maintenance/disposal) +"kop" = ( +/obj/machinery/camera{ + c_tag = "AI Chamber - Port"; + dir = 4; + network = list("aicore") + }, +/obj/structure/showcase/cyborg/old{ + dir = 4; + pixel_x = -9; + pixel_y = 2 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "krA" = ( /obj/effect/mapping_helpers/teleport_anchor, /turf/open/floor/plating, @@ -75685,6 +75050,10 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/entry) +"lEF" = ( +/obj/machinery/ai/expansion_card_holder/prefilled, +/turf/open/floor/circuit/green/telecomms/mainframe, +/area/ai_monitored/turret_protected/ai) "lFX" = ( /obj/machinery/light, /obj/machinery/smartfridge/drying_rack, @@ -75930,6 +75299,12 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /turf/open/floor/plasteel, /area/crew_quarters/fitness/recreation) +"mak" = ( +/obj/machinery/status_display/ai{ + pixel_y = -32 + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "mbS" = ( /obj/structure/cable/yellow{ icon_state = "2-4" @@ -76018,6 +75393,19 @@ }, /turf/open/floor/plasteel, /area/janitor) +"mmz" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "mmB" = ( /obj/structure/chair/wood/wings{ dir = 8 @@ -76057,6 +75445,36 @@ }, /turf/open/floor/plasteel, /area/science/mixing) +"moA" = ( +/obj/machinery/door/airlock/highsecurity{ + name = "AI Chamber"; + req_access_txt = "16" + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "AI Chamber entrance shutters"; + name = "AI Chamber entrance shutters" + }, +/obj/machinery/flasher{ + id = "AI"; + pixel_x = -26; + pixel_y = 3 + }, +/obj/item/radio/intercom{ + broadcasting = 1; + frequency = 1447; + listening = 0; + name = "Station Intercom (AI Private)"; + pixel_x = 28 + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/structure/fans/tiny, +/obj/machinery/atmospherics/pipe/simple/yellow/hidden, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/turret_protected/aisat_interior) "moD" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 1 @@ -76212,6 +75630,23 @@ }, /turf/open/floor/plating, /area/maintenance/port/fore) +"mDM" = ( +/obj/machinery/airalarm/server{ + dir = 8; + pixel_x = 24 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/ai/data_core, +/turf/open/floor/plasteel/dark/telecomms, +/area/science/server) +"mDW" = ( +/obj/machinery/ai_slipper{ + uses = 10 + }, +/turf/open/floor/circuit/telecomms/mainframe, +/area/ai_monitored/turret_protected/ai) "mEa" = ( /obj/structure/chair/office/light{ dir = 1 @@ -76388,6 +75823,19 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel, /area/crew_quarters/toilet/auxiliary) +"ndE" = ( +/obj/machinery/firealarm{ + dir = 4; + pixel_x = -26 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/machinery/porta_turret/ai{ + dir = 4 + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "ndM" = ( /obj/machinery/atmospherics/pipe/simple/yellow/hidden{ dir = 9 @@ -76782,6 +76230,17 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) +"nzY" = ( +/obj/machinery/power/terminal{ + dir = 1 + }, +/obj/machinery/flasher{ + id = "AI"; + pixel_x = -24; + pixel_y = 28 + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "nAo" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 8 @@ -77057,6 +76516,15 @@ }, /turf/open/floor/plating, /area/maintenance/port/aft) +"nWY" = ( +/obj/machinery/ai_slipper{ + uses = 10 + }, +/obj/machinery/atmospherics/pipe/manifold/yellow/hidden{ + dir = 1 + }, +/turf/open/floor/circuit/telecomms/mainframe, +/area/ai_monitored/turret_protected/ai) "nXc" = ( /obj/structure/sign/map/right{ desc = "A framed picture of the station. Clockwise from security in red at the top, you see engineering in yellow, science in purple, escape in checkered red-and-white, medbay in green, arrivals in checkered red-and-blue, and then cargo in brown."; @@ -77333,6 +76801,13 @@ /obj/machinery/door/firedoor/border_only, /turf/open/floor/plating, /area/engine/atmos) +"orw" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/yellow/hidden, +/turf/open/floor/circuit/telecomms/mainframe, +/area/ai_monitored/turret_protected/ai) "otk" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -77516,6 +76991,23 @@ icon_state = "platingdmg3" }, /area/maintenance/starboard) +"oBN" = ( +/obj/machinery/requests_console{ + announcementConsole = 1; + department = "Telecomms Admin"; + departmentType = 5; + name = "Telecomms RC"; + pixel_y = -30 + }, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = 26 + }, +/obj/item/twohanded/required/kirbyplants{ + icon_state = "plant-21" + }, +/turf/open/floor/plasteel/grimy, +/area/tcommsat/computer) "oBY" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 1 @@ -77530,6 +77022,25 @@ /obj/machinery/atmospherics/pipe/layer_manifold, /turf/open/floor/plating, /area/hallway/secondary/entry) +"oFH" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/open/floor/circuit/telecomms/mainframe, +/area/ai_monitored/turret_protected/ai) +"oGr" = ( +/obj/machinery/camera{ + c_tag = "AI Chamber - Fore"; + network = list("aicore") + }, +/obj/structure/showcase/cyborg/old{ + pixel_y = 20 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "oJs" = ( /obj/machinery/light/small{ dir = 1 @@ -77817,6 +77328,12 @@ /obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden/layer4, /turf/open/floor/plasteel, /area/engine/gravity_generator) +"pdx" = ( +/obj/machinery/porta_turret/ai{ + dir = 4 + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "pdO" = ( /obj/machinery/door/airlock/grunge{ name = "Courtroom" @@ -77836,6 +77353,12 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/fitness/recreation) +"pfd" = ( +/obj/machinery/status_display/evac{ + pixel_y = -32 + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "pgb" = ( /obj/structure/table/wood, /obj/item/clothing/glasses/regular/hipster{ @@ -78043,6 +77566,41 @@ }, /turf/open/floor/carpet, /area/medical/psych) +"pAc" = ( +/obj/machinery/camera{ + c_tag = "AI Chamber - Core"; + network = list("aicore") + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) +"pAV" = ( +/obj/machinery/button/door{ + id = "AI Core shutters"; + name = "AI Core shutters control"; + pixel_x = 24; + pixel_y = -22; + req_access_txt = "16" + }, +/obj/machinery/button/door{ + id = "AI Chamber entrance shutters"; + name = "AI Chamber entrance shutters control"; + pixel_x = -23; + pixel_y = -23; + req_access_txt = "16" + }, +/obj/machinery/ai/data_core/primary, +/turf/open/floor/circuit/green/telecomms/mainframe, +/area/ai_monitored/turret_protected/ai) "pBX" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -78420,6 +77978,20 @@ /obj/effect/turf_decal/bot, /turf/open/floor/plasteel/dark/corner, /area/engine/storage_shared) +"qdY" = ( +/obj/structure/table/wood, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/item/radio/off{ + pixel_y = 4 + }, +/obj/item/screwdriver{ + pixel_y = 10 + }, +/obj/item/flashlight/lamp, +/turf/open/floor/plasteel/grimy, +/area/tcommsat/computer) "qek" = ( /obj/structure/lattice, /turf/closed/wall, @@ -78444,6 +78016,12 @@ }, /turf/open/floor/plasteel/grimy, /area/tcommsat/computer) +"qhm" = ( +/obj/structure/sign/warning/biohazard{ + pixel_y = 32 + }, +/turf/closed/wall/r_wall, +/area/science/server) "qhr" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -78539,6 +78117,24 @@ /obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/wood, /area/library) +"qlO" = ( +/obj/structure/table/wood, +/obj/machinery/status_display/evac{ + pixel_y = 31 + }, +/obj/item/book/manual/wiki/tcomms, +/obj/item/folder/blue, +/obj/item/pen, +/obj/item/phone{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/cigbutt/cigarbutt{ + pixel_x = 5; + pixel_y = -1 + }, +/turf/open/floor/plasteel/grimy, +/area/tcommsat/computer) "qmh" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -78584,6 +78180,12 @@ /mob/living/simple_animal/pet/cat/Runtime, /turf/open/floor/plasteel/cafeteria, /area/crew_quarters/heads/cmo) +"qoH" = ( +/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ + dir = 10 + }, +/turf/open/floor/circuit/telecomms/mainframe, +/area/ai_monitored/turret_protected/ai) "qoZ" = ( /obj/structure/closet/emcloset, /turf/open/floor/plating, @@ -78626,6 +78228,9 @@ }, /turf/open/floor/plating, /area/maintenance/port/fore) +"qrp" = ( +/turf/open/floor/circuit/telecomms/server, +/area/science/server) "qrr" = ( /obj/effect/turf_decal/tile/blue{ dir = 1 @@ -79113,6 +78718,16 @@ }, /turf/open/floor/plasteel/dark, /area/crew_quarters/fitness/recreation) +"rgc" = ( +/obj/machinery/ai_slipper{ + uses = 10 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/yellow/hidden, +/turf/open/floor/circuit/telecomms/mainframe, +/area/ai_monitored/turret_protected/ai) "rgh" = ( /obj/effect/turf_decal/tile/yellow{ dir = 1 @@ -79521,6 +79136,13 @@ }, /turf/open/floor/plating, /area/quartermaster/storage) +"rDc" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/manifold/yellow/hidden, +/turf/open/floor/circuit/telecomms/mainframe, +/area/ai_monitored/turret_protected/ai) "rDs" = ( /obj/structure/cable/yellow{ icon_state = "1-4" @@ -79655,6 +79277,14 @@ /obj/machinery/vending/snack/random, /turf/open/floor/plasteel, /area/maintenance/department/science) +"rTF" = ( +/obj/structure/table, +/obj/item/aicard, +/obj/item/circuitboard/computer/ai_upload_download, +/turf/open/floor/plasteel/cafeteria{ + dir = 5 + }, +/area/crew_quarters/heads/hor) "rTU" = ( /obj/structure/chair/office/light{ dir = 8 @@ -79815,6 +79445,18 @@ /obj/structure/grille, /turf/open/floor/plating/airless, /area/space/nearstation) +"sln" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/status_display/ai{ + pixel_x = 32 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 8 + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "slu" = ( /obj/structure/sign/warning/vacuum/external{ pixel_y = 32 @@ -80267,6 +79909,12 @@ /obj/machinery/vending/gifts, /turf/open/floor/wood, /area/clerk) +"sKG" = ( +/obj/machinery/holopad, +/obj/effect/landmark/start/cyborg, +/obj/machinery/atmospherics/pipe/simple/yellow/hidden, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/turret_protected/aisat_interior) "sLU" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /turf/open/floor/plating, @@ -80510,6 +80158,12 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/entry) +"taS" = ( +/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ + dir = 9 + }, +/turf/open/floor/circuit/telecomms/mainframe, +/area/ai_monitored/turret_protected/ai) "taY" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -81270,6 +80924,15 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/aft) +"ucF" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/porta_turret/ai{ + dir = 8 + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "ucK" = ( /obj/machinery/light/small, /obj/machinery/power/apc{ @@ -81886,6 +81549,24 @@ /obj/effect/mapping_helpers/airlock/abandoned, /turf/open/floor/plating, /area/maintenance/port/aft) +"uUR" = ( +/obj/structure/showcase/cyborg/old{ + dir = 8; + pixel_x = 9; + pixel_y = 2 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "uUV" = ( /obj/structure/window/reinforced, /obj/effect/turf_decal/trimline/red/line, @@ -82086,6 +81767,20 @@ }, /turf/open/floor/plasteel, /area/science/robotics/lab) +"vhF" = ( +/obj/machinery/status_display/ai{ + pixel_x = -32 + }, +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ + dir = 4; + external_pressure_bound = 120; + name = "server vent" + }, +/turf/open/floor/circuit/telecomms/mainframe, +/area/ai_monitored/turret_protected/ai) "vhG" = ( /obj/structure/table/glass, /obj/machinery/camera/autoname{ @@ -82163,6 +81858,12 @@ /obj/effect/mapping_helpers/teleport_anchor, /turf/open/floor/plasteel, /area/engine/engineering) +"vjL" = ( +/obj/machinery/computer/ai_resource_distribution{ + dir = 1 + }, +/turf/open/floor/plasteel/grimy, +/area/tcommsat/computer) "vkS" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -82256,6 +81957,21 @@ }, /turf/closed/wall, /area/crew_quarters/theatre) +"vrV" = ( +/obj/machinery/power/apc{ + areastring = "/area/ai_monitored/turret_protected/ai"; + dir = 1; + name = "AI Chamber APC"; + pixel_y = 23 + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ + dir = 6 + }, +/turf/open/floor/circuit/telecomms/mainframe, +/area/ai_monitored/turret_protected/ai) "vsa" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -82599,6 +82315,33 @@ /obj/effect/turf_decal/tile/green, /turf/open/floor/plasteel, /area/hallway/primary/central) +"vMr" = ( +/obj/machinery/requests_console{ + department = "AI"; + departmentType = 5; + pixel_x = 30; + pixel_y = 30 + }, +/obj/machinery/ai_slipper{ + uses = 10 + }, +/obj/machinery/flasher{ + id = "AI"; + pixel_x = 23; + pixel_y = -23 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "vMY" = ( /obj/structure/cable/yellow{ icon_state = "1-2" @@ -82688,6 +82431,29 @@ dir = 8 }, /area/medical/surgery) +"vRb" = ( +/obj/machinery/turretid{ + icon_state = "control_stun"; + name = "AI Chamber turret control"; + pixel_x = 3; + pixel_y = -23 + }, +/obj/machinery/newscaster/security_unit{ + pixel_x = 4; + pixel_y = 33 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "vSO" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -83163,6 +82929,20 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/fore) +"wCV" = ( +/obj/machinery/camera{ + c_tag = "AI Chamber - Aft"; + dir = 1; + network = list("aicore") + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) +"wCY" = ( +/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ + dir = 5 + }, +/turf/open/floor/circuit/telecomms/mainframe, +/area/ai_monitored/turret_protected/ai) "wEj" = ( /obj/machinery/light/small{ dir = 8 @@ -83290,6 +83070,28 @@ /obj/machinery/door/firedoor/border_only, /turf/open/floor/plasteel, /area/hallway/primary/central) +"wMA" = ( +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/ai_slipper{ + uses = 10 + }, +/obj/machinery/atmospherics/pipe/manifold/yellow/hidden{ + dir = 8 + }, +/mob/living/simple_animal/bot/secbot/pingsky, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/turret_protected/aisat_interior) "wMY" = ( /obj/structure/table, /obj/item/candle, @@ -83411,6 +83213,10 @@ }, /turf/open/floor/plasteel/dark, /area/security/brig) +"wTR" = ( +/obj/machinery/atmospherics/pipe/manifold/yellow/hidden, +/turf/open/floor/circuit/telecomms/mainframe, +/area/ai_monitored/turret_protected/ai) "wXd" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -83455,6 +83261,15 @@ icon_state = "panelscorched" }, /area/maintenance/port/fore) +"wZl" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ + dir = 6 + }, +/turf/open/floor/circuit/telecomms/mainframe, +/area/ai_monitored/turret_protected/ai) "xaS" = ( /obj/effect/turf_decal/stripes/corner{ dir = 4 @@ -83498,6 +83313,24 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /turf/open/floor/plating, /area/hallway/secondary/entry) +"xcd" = ( +/obj/machinery/flasher{ + id = "AI"; + pixel_y = 24 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/status_display/ai_core, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "xei" = ( /obj/machinery/door/airlock/external{ req_access_txt = "24" @@ -83747,6 +83580,11 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /turf/open/floor/plating, /area/maintenance/starboard/fore) +"xwl" = ( +/obj/structure/rack, +/obj/item/stack/cable_coil/red, +/turf/open/floor/circuit/green/telecomms/mainframe, +/area/ai_monitored/turret_protected/ai) "xws" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -83781,6 +83619,18 @@ }, /turf/open/space/basic, /area/space/nearstation) +"xzj" = ( +/obj/machinery/light/small, +/obj/machinery/camera{ + c_tag = "Telecomms - Control Room"; + dir = 1; + network = list("ss13","tcomms") + }, +/obj/machinery/computer/ai_control_console{ + dir = 1 + }, +/turf/open/floor/plasteel/grimy, +/area/tcommsat/computer) "xDl" = ( /obj/structure/chair{ dir = 8 @@ -83992,6 +83842,12 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/exit/departure_lounge) +"yaq" = ( +/obj/structure/showcase/cyborg/old{ + pixel_y = 20 + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "yar" = ( /obj/machinery/light{ dir = 8 @@ -84008,6 +83864,13 @@ dir = 1 }, /area/engine/atmos) +"ybe" = ( +/obj/machinery/status_display/ai{ + pixel_y = 31 + }, +/obj/machinery/computer/ai_server_console, +/turf/open/floor/plasteel/grimy, +/area/tcommsat/computer) "ycD" = ( /obj/item/radio/intercom{ pixel_x = 29 @@ -84077,6 +83940,12 @@ }, /turf/open/floor/plasteel/dark, /area/chapel/office) +"yij" = ( +/obj/machinery/porta_turret/ai{ + dir = 8 + }, +/turf/open/floor/plasteel/dark/telecomms, +/area/ai_monitored/turret_protected/ai) "yiu" = ( /obj/machinery/bounty_board, /turf/closed/wall/r_wall, @@ -116402,7 +116271,7 @@ cdc crQ ctc ctT -cuP +rTF bHF cwS crQ @@ -116931,7 +116800,7 @@ dpO iRa cIg cIf -cIZ +fIq cJW cIg bVz @@ -117187,9 +117056,9 @@ cEu sfi cEu cIg -cIg -cIg -cIg +qrp +mDM +qrp cIg bGP vpV @@ -117444,10 +117313,10 @@ sys cFr cGl cyK -cIh -dAh -dbl -dyc +qhm +cIg +cIg +cIg bGP dvY dvY @@ -137941,8 +137810,8 @@ aRy aTV aTV aTV -aZQ -aTV +lEF +grh aTV aTV aTV @@ -138195,22 +138064,22 @@ aaa aaa aRy aTV -aVl -aWL -aYy -aZR -bbF -bcP -aVl -aXR -bgx +pdx +vhF +kop +dtP +mmz +hZj +fPO +ndE +aTV bjQ bjQ bjQ bok bjQ btL -bvu +qdY qgg bzn bAU @@ -138452,22 +138321,22 @@ aaa aRy aRy aTV -aGF -aRY -aRY -aYW -aRY -aRY -bae -bbZ -bgK +hhM +qoH +gqX +iJY +gqX +gqX +wTR +cOd +mak bjQ aWF aXF boA bbz btL -bAW +qlO bfH boa bAV @@ -138709,15 +138578,15 @@ aaa aRy aRy aTV -aVn -aWN +yaq +gRj aTV -bqm +vRb aTV aTV -bai -aRY -bgO +jZz +wCY +wCV bjQ aWJ aXG @@ -138727,7 +138596,7 @@ btL aqT bxq bxq -bJh +bAY bCE bCE bCE @@ -138965,20 +138834,20 @@ aDl aDl aRy aRy -aTW -bjS -aWO +fYL +nzY +mDW aYz -brx -bvf +vMr +pAV aTV -byx -aWO -bgP -bjz -bkb -bml -bpx +xcd +nWY +gGR +moA +feR +sKG +wMA bry brS btf @@ -139223,15 +139092,15 @@ aaa aRy aRy aFL -aGG -aHR +oGr +oFH aTV -aZV +pAc aTV aTV -bau -bcb -bha +vrV +taS +cOd bjQ blH aXI @@ -139241,7 +139110,7 @@ btL syj bxq bgM -bAY +vjL bCE bCE bCE @@ -139480,25 +139349,25 @@ aaa aRy aRy aTV -aGH -aRZ -aUU -aYX -aUU -aUU -bav -bcp -bhb +hhM +wZl +orw +rgc +orw +orw +rDc +cOd +pfd bjQ bse aXJ bpA beZ btL -bvz +ybe bxr bgN -bJi +xzj bCD bEj bGe @@ -139737,25 +139606,25 @@ aaa aaa aRy aTV -aVr -aWR -aYB -aZX -bbH -aWR -aVr -bgm -bis +yij +cEl +uUR +dtP +jmU +fGs +sln +ucF +aTV bjQ bjQ bjQ bpE bjQ btL -bvA +eqz bxs bzt -boC +oBN bCD bEg bGd @@ -139997,8 +139866,8 @@ aRy aTV aTV aTV -aZY -aTV +lEF +xwl aTV aTV aTV diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index 40b7a0d550d1..e5eccb2d2e36 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -44,6 +44,10 @@ GLOBAL_LIST_INIT(turfs_without_ground, typecacheof(list( #define isplatingturf(A) (istype(A, /turf/open/floor/plating)) +#define isaicore(A) (istype(A, /obj/machinery/ai/data_core)) + +#define isvalidAIloc(A) ((isturf(A) || isaicore(A))) + //Mobs #define isliving(A) (istype(A, /mob/living)) diff --git a/code/_globalvars/lists/objects.dm b/code/_globalvars/lists/objects.dm index 54ff07d55bde..331f30de8bd1 100644 --- a/code/_globalvars/lists/objects.dm +++ b/code/_globalvars/lists/objects.dm @@ -35,6 +35,7 @@ GLOBAL_LIST_EMPTY(wire_color_directory) GLOBAL_LIST_EMPTY(wire_name_directory) GLOBAL_LIST_EMPTY(ai_status_displays) +GLOBAL_LIST_EMPTY(ai_core_displays) GLOBAL_LIST_EMPTY(mob_spawners) // All mob_spawn objects GLOBAL_LIST_EMPTY(alert_consoles) // Station alert consoles, /obj/machinery/computer/station_alert diff --git a/code/_onclick/ai.dm b/code/_onclick/ai.dm index 8cb7b26f771f..07e7e15cfb89 100644 --- a/code/_onclick/ai.dm +++ b/code/_onclick/ai.dm @@ -106,6 +106,7 @@ A.AICtrlShiftClick(src) /mob/living/silicon/ai/ShiftClickOn(var/atom/A) A.AIShiftClick(src) + /mob/living/silicon/ai/CtrlClickOn(var/atom/A) A.AICtrlClick(src) /mob/living/silicon/ai/AltClickOn(var/atom/A) @@ -128,6 +129,7 @@ /atom/proc/AICtrlShiftClick() return + /* Airlocks */ /obj/machinery/door/airlock/AICtrlClick() // Bolts doors if(obj_flags & EMAGGED) @@ -180,6 +182,14 @@ hangup_all_calls() add_hiddenprint(usr) +/* Humans (With upgrade) */ +/mob/living/carbon/human/AIShiftClick(mob/living/silicon/ai/user) + if(!user.canExamineHumans) + return + if(user.client && (user.client.eye == user.eyeobj || user.client.eye == user.loc)) + user.examinate(src) + return + // // Override TurfAdjacent for AltClicking // diff --git a/code/_onclick/hud/_defines.dm b/code/_onclick/hud/_defines.dm index 98636a4ecfd5..42fe9c8060c5 100644 --- a/code/_onclick/hud/_defines.dm +++ b/code/_onclick/hud/_defines.dm @@ -122,23 +122,29 @@ // AI -#define ui_ai_core "SOUTH:6,WEST" -#define ui_ai_camera_list "SOUTH:6,WEST+1" -#define ui_ai_track_with_camera "SOUTH:6,WEST+2" -#define ui_ai_camera_light "SOUTH:6,WEST+3" -#define ui_ai_crew_monitor "SOUTH:6,WEST+4" -#define ui_ai_crew_manifest "SOUTH:6,WEST+5" -#define ui_ai_alerts "SOUTH:6,WEST+6" -#define ui_ai_announcement "SOUTH:6,WEST+7" -#define ui_ai_shuttle "SOUTH:6,WEST+8" -#define ui_ai_state_laws "SOUTH:6,WEST+9" -#define ui_ai_pda_send "SOUTH:6,WEST+10" -#define ui_ai_pda_log "SOUTH:6,WEST+11" -#define ui_ai_take_picture "SOUTH:6,WEST+12" -#define ui_ai_view_images "SOUTH:6,WEST+13" -#define ui_ai_sensor "SOUTH:6,WEST+14" -#define ui_ai_multicam "SOUTH+1:6,WEST+13" -#define ui_ai_add_multicam "SOUTH+1:6,WEST+14" +#define ui_ai_core "CENTER-6:-32,SOUTH:6" +#define ui_ai_dashboard "CENTER-7,SOUTH+1:6" +#define ui_ai_camera_list "CENTER-5:-32,SOUTH:6" +#define ui_ai_track_with_camera "CENTER-4:-32,SOUTH:6" +#define ui_ai_camera_light "CENTER-3:-32,SOUTH:6" +#define ui_ai_crew_monitor "CENTER-2:-32,SOUTH:6" +#define ui_ai_crew_manifest "CENTER-1:-32,SOUTH:6" +#define ui_ai_alerts "CENTER:-32,SOUTH:6" +#define ui_ai_announcement "CENTER+1:-32,SOUTH:6" +#define ui_ai_shuttle "CENTER+2:-32,SOUTH:6" +#define ui_ai_state_laws "CENTER+3:-32,SOUTH:6" +#define ui_ai_pda_send "CENTER+4:-32,SOUTH:6" +#define ui_ai_pda_log "CENTER+5:-32,SOUTH:6" +#define ui_ai_take_picture "CENTER+6:-32,SOUTH:6" +#define ui_ai_view_images "CENTER+7:-32,SOUTH:6" +#define ui_ai_sensor "CENTER+7,SOUTH:6" +#define ui_ai_multicam "CENTER+6,SOUTH+1:6" +#define ui_ai_add_multicam "CENTER+6,SOUTH+1:6" +#define ui_ai_language_menu "CENTER+5,SOUTH+1:9" +#define ui_ai_dashboard_widescreen "CENTER-8,SOUTH:6" +#define ui_ai_add_multicam_widescreen "CENTER+9,SOUTH:6" +#define ui_ai_multicam_widescreen "CENTER+8,SOUTH:6" +#define ui_ai_language_menu_widescreen "CENTER-9,SOUTH:10" // pAI diff --git a/code/_onclick/hud/ai.dm b/code/_onclick/hud/ai.dm index 49bdd3f3c047..5b3634e38bc8 100644 --- a/code/_onclick/hud/ai.dm +++ b/code/_onclick/hud/ai.dm @@ -66,6 +66,16 @@ var/mob/living/silicon/ai/AI = usr AI.ai_roster() +/obj/screen/ai/dashboard + name = "Processing Dashboard" + icon_state = "dashboard" + +/obj/screen/ai/dashboard/Click() + if(..()) + return + var/mob/living/silicon/ai/AI = usr + AI.dashboard.ui_interact(AI) + /obj/screen/ai/alerts name = "Show Alerts" icon_state = "alerts" @@ -194,7 +204,10 @@ // Language menu using = new /obj/screen/language_menu - using.screen_loc = ui_borg_language_menu + if(owner?.client?.prefs?.widescreenpref) + using.screen_loc = ui_ai_language_menu_widescreen + else + using.screen_loc = ui_ai_language_menu static_inventory += using //AI core @@ -202,6 +215,15 @@ using.screen_loc = ui_ai_core static_inventory += using +//Dashboard + using = new /obj/screen/ai/dashboard + if(owner?.client?.prefs?.widescreenpref) + using.screen_loc = ui_ai_dashboard_widescreen + else + using.screen_loc = ui_ai_dashboard + + static_inventory += using + //Camera list using = new /obj/screen/ai/camera_list() using.screen_loc = ui_ai_camera_list @@ -274,10 +296,16 @@ //Multicamera mode using = new /obj/screen/ai/multicam() - using.screen_loc = ui_ai_multicam + if(owner?.client?.prefs?.widescreenpref) + using.screen_loc = ui_ai_multicam_widescreen + else + using.screen_loc = ui_ai_multicam static_inventory += using //Add multicamera camera using = new /obj/screen/ai/add_multicam() - using.screen_loc = ui_ai_add_multicam + if(owner?.client?.prefs?.widescreenpref) + using.screen_loc = ui_ai_add_multicam_widescreen + else + using.screen_loc = ui_ai_add_multicam static_inventory += using diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index 28e36fd82ef6..9d68caf9eee5 100755 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -316,6 +316,9 @@ SUBSYSTEM_DEF(ticker) PostSetup() + to_chat(world, "

The way the AI works has changed. These changes are relevant if you have an objective to steal/destroy the AI, are a borg, is the RD, or is the network admin. \ + Please read the following: https://github.com/yogstation13/Yogstation/pull/12815

") + return TRUE /datum/controller/subsystem/ticker/proc/PostSetup() diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 5b1497da022b..00cb49e06440 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -795,7 +795,6 @@ to_chat(user, "[span_boldnotice("Transfer successful")]: [AI.name] ([rand(1000,9999)].exe) removed from [name] and stored within local memory.") if(AI_MECH_HACK) //Called by AIs on the mech - AI.linked_core = new /obj/structure/AIcore/deactivated(AI.loc) if(AI.can_dominate_mechs) if(occupant) //Oh, I am sorry, were you using that? to_chat(AI, span_warning("Pilot detected! Forced ejection initiated!")) @@ -1053,6 +1052,7 @@ if(!occupant) return var/atom/movable/mob_container + var/is_ai_user = FALSE occupant.clear_alert("charge") occupant.clear_alert("mech damage") if(ishuman(occupant)) @@ -1071,23 +1071,23 @@ silicon_pilot = FALSE return else - if(!AI.linked_core) - to_chat(AI, span_userdanger("Inactive core destroyed. Unable to return.")) - AI.linked_core = null - return - to_chat(AI, span_notice("Returning to core...")) + to_chat(AI, span_notice("Attempting to return to core...")) AI.controlled_mech = null AI.remote_control = null RemoveActions(occupant, 1) mob_container = AI - newloc = get_turf(AI.linked_core) - qdel(AI.linked_core) + newloc = GLOB.primary_data_core ? GLOB.primary_data_core : GLOB.data_cores[1] + if(!newloc) + to_chat(AI, span_userdanger("No cores available. Core code corrupted. Goodbye.")) + qdel(AI) + return + is_ai_user = TRUE else return var/mob/living/L = occupant occupant = null //we need it null when forceMove calls Exited(). silicon_pilot = FALSE - if(mob_container.forceMove(newloc))//ejecting mob container + if(mob_container.forceMove(newloc) && !is_ai_user)//ejecting mob container log_message("[mob_container] moved out.", LOG_MECHA) L << browse(null, "window=exosuit") @@ -1101,6 +1101,10 @@ L.mobility_flags = NONE icon_state = initial(icon_state)+"-open" setDir(dir_in) + if(is_ai_user) + var/mob/living/silicon/ai/AI = occupant + AI.relocate(TRUE) + if(L && L.client) L.update_mouse_pointer() diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm index f7a15cdfdebb..56dd8d33adcf 100644 --- a/code/game/objects/effects/spawners/lootdrop.dm +++ b/code/game/objects/effects/spawners/lootdrop.dm @@ -355,8 +355,7 @@ name = "secure AI circuit board spawner" loot = list( /obj/item/circuitboard/computer/aiupload, - /obj/item/circuitboard/computer/borgupload, - /obj/item/circuitboard/aicore + /obj/item/circuitboard/computer/borgupload ) /obj/effect/spawner/lootdrop/techstorage/command diff --git a/code/game/objects/items/circuitboards/computer_circuitboards.dm b/code/game/objects/items/circuitboards/computer_circuitboards.dm index d8ab95c987e1..48d16d861f8d 100644 --- a/code/game/objects/items/circuitboards/computer_circuitboards.dm +++ b/code/game/objects/items/circuitboards/computer_circuitboards.dm @@ -386,6 +386,21 @@ 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)" + 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 /obj/item/circuitboard/computer/labor_shuttle diff --git a/code/game/objects/items/circuitboards/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machine_circuitboards.dm index f1bc1abadb68..96319ee7c04a 100644 --- a/code/game/objects/items/circuitboards/machine_circuitboards.dm +++ b/code/game/objects/items/circuitboards/machine_circuitboards.dm @@ -952,6 +952,26 @@ icon_state = "science" build_path = /obj/machinery/rnd/production/techfab/department/science +/obj/item/circuitboard/machine/expansion_card_holder + name = "Expansion Card Bus (Machine Board)" + icon_state = "science" + build_path = /obj/machinery/ai/expansion_card_holder + req_components = list( + /obj/item/stock_parts/matter_bin = 4, + /obj/item/stock_parts/manipulator = 2, + /obj/item/stack/sheet/glass = 2) + +/obj/item/circuitboard/machine/ai_data_core + name = "AI Data Core (Machine Board)" + icon_state = "science" + build_path = /obj/machinery/ai/data_core + req_components = list( + /obj/item/stock_parts/capacitor = 4, + /obj/item/stock_parts/matter_bin = 2, + /obj/item/stack/sheet/glass = 2, + /obj/item/stack/cable_coil = 2) + + //Security /obj/item/circuitboard/machine/protolathe/department/security diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index e06b3d36b89f..3657d609ba45 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -156,7 +156,6 @@ GLOBAL_LIST_INIT(metal_recipes, list ( \ * Plasteel */ GLOBAL_LIST_INIT(plasteel_recipes, list ( \ - new/datum/stack_recipe("AI core", /obj/structure/AIcore, 4, time = 50, one_per_turf = TRUE), \ new/datum/stack_recipe("bomb assembly", /obj/machinery/syndicatebomb/empty, 10, time = 50), \ null, \ new /datum/stack_recipe_list("airlock assemblies", list( \ diff --git a/code/game/objects/structures/ai_core.dm b/code/game/objects/structures/ai_core.dm index a5affa9b444f..251d26121d97 100644 --- a/code/game/objects/structures/ai_core.dm +++ b/code/game/objects/structures/ai_core.dm @@ -8,9 +8,8 @@ max_integrity = 500 var/state = EMPTY_CORE var/datum/ai_laws/laws - var/obj/item/circuitboard/aicore/circuit var/obj/item/mmi/brain - var/can_deconstruct = TRUE + var/can_deconstruct = FALSE /obj/structure/AIcore/Initialize() . = ..() @@ -18,29 +17,20 @@ laws.set_laws_config() /obj/structure/AIcore/handle_atom_del(atom/A) - if(A == circuit) - circuit = null - if((state != GLASS_CORE) && (state != AI_READY_CORE)) - state = EMPTY_CORE - update_icon() if(A == brain) brain = null . = ..() /obj/structure/AIcore/Destroy() - if(circuit) - qdel(circuit) - circuit = null if(brain) qdel(brain) brain = null return ..() /obj/structure/AIcore/latejoin_inactive - name = "networked AI core" - desc = "This AI core is connected by bluespace transmitters to NTNet, allowing for an AI personality to be downloaded to it on the fly mid-shift." - can_deconstruct = FALSE + name = "networked AI beacon" + desc = "This machine is connected by bluespace transmitters to NTNet, allowing for an AI personality to be downloaded to it on the fly mid-shift." icon_state = "ai-empty" anchored = TRUE state = AI_READY_CORE @@ -104,167 +94,6 @@ to_chat(user, span_notice("You deconstruct the frame.")) deconstruct(TRUE) return - else - switch(state) - if(EMPTY_CORE) - if(istype(P, /obj/item/circuitboard/aicore)) - if(!user.transferItemToLoc(P, src)) - return - playsound(loc, 'sound/items/deconstruct.ogg', 50, 1) - to_chat(user, span_notice("You place the circuit board inside the frame.")) - update_icon() - state = CIRCUIT_CORE - circuit = P - return - if(CIRCUIT_CORE) - if(P.tool_behaviour == TOOL_SCREWDRIVER) - P.play_tool_sound(src) - to_chat(user, span_notice("You screw the circuit board into place.")) - state = SCREWED_CORE - update_icon() - return - if(P.tool_behaviour == TOOL_CROWBAR) - P.play_tool_sound(src) - to_chat(user, span_notice("You remove the circuit board.")) - state = EMPTY_CORE - update_icon() - circuit.forceMove(loc) - circuit = null - return - if(SCREWED_CORE) - if(P.tool_behaviour == TOOL_SCREWDRIVER && circuit) - P.play_tool_sound(src) - to_chat(user, span_notice("You unfasten the circuit board.")) - state = CIRCUIT_CORE - update_icon() - return - if(istype(P, /obj/item/stack/cable_coil)) - var/obj/item/stack/cable_coil/C = P - if(C.get_amount() >= 5) - playsound(loc, 'sound/items/deconstruct.ogg', 50, 1) - to_chat(user, span_notice("You start to add cables to the frame...")) - if(do_after(user, 2 SECONDS, target = src) && state == SCREWED_CORE && C.use(5)) - to_chat(user, span_notice("You add cables to the frame.")) - state = CABLED_CORE - update_icon() - else - to_chat(user, span_warning("You need five lengths of cable to wire the AI core!")) - return - if(CABLED_CORE) - if(P.tool_behaviour == TOOL_WIRECUTTER) - if(brain) - to_chat(user, span_warning("Get that [brain.name] out of there first!")) - else - P.play_tool_sound(src) - to_chat(user, span_notice("You remove the cables.")) - state = SCREWED_CORE - update_icon() - new /obj/item/stack/cable_coil(drop_location(), 5) - return - - if(istype(P, /obj/item/stack/sheet/rglass)) - var/obj/item/stack/sheet/rglass/G = P - if(G.get_amount() >= 2) - playsound(loc, 'sound/items/deconstruct.ogg', 50, 1) - to_chat(user, span_notice("You start to put in the glass panel...")) - if(do_after(user, 2 SECONDS, target = src) && state == CABLED_CORE && G.use(2)) - to_chat(user, span_notice("You put in the glass panel.")) - state = GLASS_CORE - update_icon() - else - to_chat(user, span_warning("You need two sheets of reinforced glass to insert them into the AI core!")) - return - - if(istype(P, /obj/item/aiModule)) - if(brain && brain.laws.id != DEFAULT_AI_LAWID) - to_chat(user, span_warning("The installed [brain.name] already has set laws!")) - return - var/obj/item/aiModule/module = P - module.install(laws, user) - return - - if(istype(P, /obj/item/mmi) && !brain) - var/obj/item/mmi/M = P - if(!M.brainmob) - to_chat(user, span_warning("Sticking an empty [M.name] into the frame would sort of defeat the purpose!")) - return - if(M.brainmob.stat == DEAD) - to_chat(user, span_warning("Sticking a dead [M.name] into the frame would sort of defeat the purpose!")) - return - - if(!M.brainmob.client) - to_chat(user, span_warning("Sticking an inactive [M.name] into the frame would sort of defeat the purpose.")) - return - - if(!CONFIG_GET(flag/allow_ai) || (is_banned_from(M.brainmob.ckey, "AI") && !QDELETED(src) && !QDELETED(user) && !QDELETED(M) && !QDELETED(user) && Adjacent(user))) - if(!QDELETED(M)) - to_chat(user, span_warning("This [M.name] does not seem to fit!")) - return - - if(!M.brainmob.mind) - to_chat(user, span_warning("This [M.name] is mindless!")) - return - - if(!user.transferItemToLoc(M,src)) - return - - brain = M - to_chat(user, span_notice("You add [M.name] to the frame.")) - update_icon() - return - - if(P.tool_behaviour == TOOL_CROWBAR && brain) - P.play_tool_sound(src) - to_chat(user, span_notice("You remove the brain.")) - brain.forceMove(loc) - brain = null - update_icon() - return - - if(GLASS_CORE) - if(P.tool_behaviour == TOOL_CROWBAR) - P.play_tool_sound(src) - to_chat(user, span_notice("You remove the glass panel.")) - state = CABLED_CORE - update_icon() - new /obj/item/stack/sheet/rglass(loc, 2) - return - - if(P.tool_behaviour == TOOL_SCREWDRIVER) - P.play_tool_sound(src) - to_chat(user, span_notice("You connect the monitor.")) - if(brain) - 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 - - 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) - - 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(src) - else - state = AI_READY_CORE - update_icon() - return - - if(AI_READY_CORE) - if(istype(P, /obj/item/aicard)) - P.transfer_ai("INACTIVE", "AICARD", src, user) - return - - if(P.tool_behaviour == TOOL_SCREWDRIVER) - P.play_tool_sound(src) - to_chat(user, span_notice("You disconnect the monitor.")) - state = GLASS_CORE - update_icon() - return return ..() /obj/structure/AIcore/update_icon() @@ -285,28 +114,6 @@ if(AI_READY_CORE) icon_state = "ai-empty" -/obj/structure/AIcore/deconstruct(disassembled = TRUE) - if(state == GLASS_CORE) - new /obj/item/stack/sheet/rglass(loc, 2) - if(state >= CABLED_CORE) - new /obj/item/stack/cable_coil(loc, 5) - if(circuit) - circuit.forceMove(loc) - circuit = null - new /obj/item/stack/sheet/plasteel(loc, 4) - qdel(src) - -/obj/structure/AIcore/deactivated - name = "inactive AI" - icon_state = "ai-empty" - anchored = TRUE - state = AI_READY_CORE - -/obj/structure/AIcore/deactivated/Initialize() - . = ..() - circuit = new(src) - - /* This is a good place for AI-related object verbs so I'm sticking it here. If adding stuff to this, don't forget that an AI need to cancel_camera() whenever it physically moves to a different location. @@ -322,6 +129,7 @@ That prevents a few funky behaviors. return FALSE return TRUE +/* Unused for now, just here for reference /obj/structure/AIcore/transfer_ai(interaction, mob/user, mob/living/silicon/ai/AI, obj/item/aicard/card) if(state != AI_READY_CORE || !..()) return @@ -338,6 +146,4 @@ That prevents a few funky behaviors. else //If for some reason you use an empty card on an empty AI terminal. to_chat(user, "There is no AI loaded on this terminal!") -/obj/item/circuitboard/aicore - name = "AI core (AI Core Board)" //Well, duh, but best to be consistent - var/battery = 200 //backup battery for when the AI loses power. Copied to/from AI mobs when carding, and placed here to avoid recharge via deconning the core +*/ diff --git a/code/modules/antagonists/traitor/equipment/Malf_Modules.dm b/code/modules/antagonists/traitor/equipment/Malf_Modules.dm index a9781badac8f..5183b1778834 100644 --- a/code/modules/antagonists/traitor/equipment/Malf_Modules.dm +++ b/code/modules/antagonists/traitor/equipment/Malf_Modules.dm @@ -591,7 +591,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/AI_Module)) C.images -= I /mob/living/silicon/ai/proc/can_place_transformer(datum/action/innate/ai/place_transformer/action) - if(!eyeobj || !isturf(loc) || incapacitated() || !action) + if(!eyeobj || !isvalidAIloc(loc) || incapacitated() || !action) return var/turf/middle = get_turf(eyeobj) var/list/turfs = list(middle, locate(middle.x - 1, middle.y, middle.z), locate(middle.x + 1, middle.y, middle.z)) diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index 334012f1aa4f..062f3849d12a 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -1059,6 +1059,14 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( view = new_size apply_clickcatcher() mob.reload_fullscreen() + + if(mob && istype(mob.hud_used, /datum/hud/ai)) + if(new_size == CONFIG_GET(string/default_view) || new_size == CONFIG_GET(string/default_view_square)) + QDEL_NULL(mob.hud_used) + mob.create_mob_hud() + mob.hud_used.show_hud(mob.hud_used.hud_version) + mob.hud_used.update_ui_style(ui_style2icon(prefs.UI_style)) + if (isliving(mob)) var/mob/living/M = mob M.update_damage_hud() @@ -1128,4 +1136,4 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( if(statbrowser_ready) return to_chat(src, span_userdanger("Statpanel failed to load, click here to reload the panel ")) - tgui_panel.initialize() \ No newline at end of file + tgui_panel.initialize() diff --git a/code/modules/jobs/job_types/ai.dm b/code/modules/jobs/job_types/ai.dm index 27c3204449bd..f1f15745e924 100644 --- a/code/modules/jobs/job_types/ai.dm +++ b/code/modules/jobs/job_types/ai.dm @@ -25,6 +25,7 @@ /datum/job/ai/after_spawn(mob/H, mob/M, latejoin) . = ..() + if(latejoin) var/obj/structure/AIcore/latejoin_inactive/lateJoinCore for(var/obj/structure/AIcore/latejoin_inactive/P in GLOB.latejoin_ai_cores) @@ -34,9 +35,18 @@ break if(lateJoinCore) lateJoinCore.available = FALSE - H.forceMove(lateJoinCore.loc) qdel(lateJoinCore) + var/mob/living/silicon/ai/AI = H + + AI.relocate(TRUE) + + var/total_available_cpu = GLOB.ai_os.total_cpu - GLOB.ai_os.total_cpu_assigned() + var/total_available_ram = GLOB.ai_os.total_ram - GLOB.ai_os.total_ram_assigned() + + GLOB.ai_os.add_cpu(AI, total_available_cpu) + 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/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index f3b6e9375982..ba32915496ec 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -421,3 +421,119 @@ dat += "[new_text]\n" //dat.Join("\n") doesn't work here, for some reason if(dat.len) return dat.Join() + + + +/mob/living/carbon/human/proc/examine_simple(mob/user) +//this is very slightly better than it was because you can use it more places. still can't do \his[src] though. + var/t_He = p_they(TRUE) + var/t_His = p_their(TRUE) + var/t_his = p_their() + var/t_has = p_have() + var/t_is = p_are() + + . = list("*---------*\nThis is [name]!") + + var/list/obscured = check_obscured_slots() + + //uniform + if(w_uniform && !(SLOT_W_UNIFORM in obscured)) + //accessory + var/accessory_msg + if(istype(w_uniform, /obj/item/clothing/under)) + var/obj/item/clothing/under/U = w_uniform + if(U.attached_accessory) + accessory_msg += " with [icon2html(U.attached_accessory, user)] \a [U.attached_accessory]" + + . += "[t_He] [t_is] wearing [w_uniform.get_examine_string(user)][accessory_msg]." + //head + if(head) + . += "[t_He] [t_is] wearing [head.get_examine_string(user)] on [t_his] head." + //suit/armor + if(wear_suit) + . += "[t_He] [t_is] wearing [wear_suit.get_examine_string(user)]." + //back + if(back) + . += "[t_He] [t_has] [back.get_examine_string(user)] on [t_his] back." + + //Hands + for(var/obj/item/I in held_items) + if(!(I.item_flags & ABSTRACT)) + . += "[t_He] [t_is] holding a [weightclass2text(I.w_class)] item in [t_his] [get_held_index_name(get_held_index_of_item(I))]." + + //gloves + if(gloves && !(SLOT_GLOVES in obscured)) + . += "[t_He] [t_has] [gloves.get_examine_string(user)] on [t_his] hands." + + + //handcuffed? + if(handcuffed) + if(istype(handcuffed, /obj/item/restraints/handcuffs/cable)) + . += span_warning("[t_He] [t_is] [icon2html(handcuffed, user)] restrained with cable!") + else + . += span_warning("[t_He] [t_is] [icon2html(handcuffed, user)] handcuffed!") + + //belt + if(belt) + . += "[t_He] [t_has] [belt.get_examine_string(user)] about [t_his] waist." + + //shoes + if(shoes && !(SLOT_SHOES in obscured)) + . += "[t_He] [t_is] wearing [shoes.get_examine_string(user)] on [t_his] feet." + + //mask + if(wear_mask && !(SLOT_WEAR_MASK in obscured)) + . += "[t_He] [t_has] [wear_mask.get_examine_string(user)] on [t_his] face." + + if(wear_neck && !(SLOT_NECK in obscured)) + . += "[t_He] [t_is] wearing [wear_neck.get_examine_string(user)] around [t_his] neck." + + //eyes + if(!(SLOT_GLASSES in obscured)) + if(glasses) + . += "[t_He] [t_has] [glasses.get_examine_string(user)] covering [t_his] eyes." + else if(eye_color == BLOODCULT_EYE && iscultist(src) && HAS_TRAIT(src, CULT_EYES)) + . += span_warning("[t_His] eyes are glowing an unnatural red!") + + //ears + if(ears && !(SLOT_EARS in obscured)) + . += "[t_He] [t_has] [ears.get_examine_string(user)] on [t_his] ears." + + + var/list/msg = list("") + + var/list/missing = list(BODY_ZONE_HEAD, BODY_ZONE_CHEST, BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG) + for(var/X in bodyparts) + var/obj/item/bodypart/body_part = X + missing -= body_part.body_zone + + + //stores missing limbs + var/l_limbs_missing = 0 + var/r_limbs_missing = 0 + for(var/t in missing) + if(t==BODY_ZONE_HEAD) + msg += "[t_His] [parse_zone(t)] is missing!\n" + continue + if(t == BODY_ZONE_L_ARM || t == BODY_ZONE_L_LEG) + l_limbs_missing++ + else if(t == BODY_ZONE_R_ARM || t == BODY_ZONE_R_LEG) + r_limbs_missing++ + + msg += "[capitalize(t_his)] [parse_zone(t)] is missing!\n" + + if(l_limbs_missing >= 2 && r_limbs_missing == 0) + msg += "[t_He] look[p_s()] all right now.\n" + else if(l_limbs_missing == 0 && r_limbs_missing >= 2) + msg += "[t_He] really keeps to the left.\n" + else if(l_limbs_missing >= 2 && r_limbs_missing >= 2) + msg += "[t_He] [p_do()]n't seem all there.\n" + + + if(!glasses && mind && mind.has_antag_datum(ANTAG_DATUM_THRALL)) + msg += "[t_His] eyes seem unnaturally dark and soulless.\n" // I'VE BECOME SO NUMB, I CAN'T FEEL YOU THERE + + if (length(msg)) + . += span_warning("[msg.Join("")]") + + . += "*---------*" diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index c37f85f0540c..8491c64bfebc 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -25,10 +25,13 @@ sight = SEE_TURFS | SEE_MOBS | SEE_OBJS see_in_dark = 8 hud_type = /datum/hud/ai - med_hud = DATA_HUD_MEDICAL_ADVANCED - sec_hud = DATA_HUD_SECURITY_ADVANCED - d_hud = DATA_HUD_DIAGNOSTIC_ADVANCED + med_hud = DATA_HUD_MEDICAL_BASIC + sec_hud = DATA_HUD_SECURITY_BASIC + d_hud = DATA_HUD_DIAGNOSTIC_BASIC mob_size = MOB_SIZE_LARGE + + invisibility = INVISIBILITY_OBSERVER + var/battery = 200 //emergency power if the AI's APC is off var/list/network = list("ss13") var/obj/machinery/camera/current @@ -38,14 +41,14 @@ var/can_be_carded = TRUE var/alarms = list("Motion"=list(), "Fire"=list(), "Atmosphere"=list(), "Power"=list(), "Camera"=list(), "Burglar"=list()) var/viewalerts = 0 - var/icon/holo_icon//Default is assigned when AI is created. + var/icon/holo_icon //Default is assigned when AI is created. var/obj/mecha/controlled_mech //For controlled_mech a mech, to determine whether to relaymove or use the AI eye. var/radio_enabled = TRUE //Determins if a carded AI can speak with its built in radio or not. radiomod = ";" //AIs will, by default, state their laws on the internal radio. var/obj/item/multitool/aiMulti var/mob/living/simple_animal/bot/Bot var/tracking = FALSE //this is 1 if the AI is currently tracking somebody, but the track has not yet been completed. - var/datum/effect_system/spark_spread/spark_system//So they can initialize sparks whenever/N + var/datum/effect_system/spark_spread/spark_system //So they can initialize sparks whenever/N //MALFUNCTION var/datum/module_picker/malf_picker @@ -77,11 +80,12 @@ var/obj/machinery/doomsday_device/doomsday_device var/mob/camera/aiEye/eyeobj + //How fast you move your camera var/sprint = 10 var/cooldown = 0 var/acceleration = 1 + var/max_camera_sprint = 50 - var/obj/structure/AIcore/deactivated/linked_core //For exosuit control var/mob/living/silicon/robot/deployed_shell = null //For shell control var/datum/action/innate/deploy_shell/deploy_action = new var/datum/action/innate/deploy_last_shell/redeploy_action = new @@ -99,12 +103,25 @@ var/datum/robot_control/robot_control -/mob/living/silicon/ai/Initialize(mapload, datum/ai_laws/L, mob/target_ai) + var/datum/ai_dashboard/dashboard + //override for the can_download, checked first in case we have other code in can_download + var/can_download = TRUE + //Can we (simple) examine humans? + var/canExamineHumans = FALSE + //Reduces/Increases download speed by this modifier + var/downloadSpeedModifier = 1 + + var/login_warned_temp = FALSE + + +/mob/living/silicon/ai/Initialize(mapload, datum/ai_laws/L, mob/target_ai, shunted) . = ..() if(!target_ai) //If there is no player/brain inside. - new/obj/structure/AIcore/deactivated(loc) //New empty terminal. return INITIALIZE_HINT_QDEL //Delete AI. + if(!istype(loc, /obj/machinery/ai/data_core) && !shunted) + relocate(TRUE) + if(L && istype(L, /datum/ai_laws)) laws = L laws.associate(src) @@ -131,6 +148,7 @@ to_chat(src, "These laws may be changed by other players, or by you being the traitor.") job = "AI" + create_eye() if(client) @@ -158,6 +176,8 @@ deploy_action.Grant(src) + dashboard = new(src) + if(isturf(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, \ @@ -167,6 +187,7 @@ GLOB.ai_list += src GLOB.shuttle_caller_list += src + builtInCamera = new (src) builtInCamera.c_tag = real_name builtInCamera.network = list("ss13") @@ -199,6 +220,8 @@ qdel(eyeobj) // No AI, no Eye malfhack = null + GLOB.ai_os.remove_ai(src) + . = ..() /mob/living/silicon/ai/IgniteMob() @@ -209,11 +232,21 @@ if(client && !C) C = client if(!input && !C?.prefs?.preferred_ai_core_display) - icon_state = initial(icon_state) + for (var/each in GLOB.ai_core_displays) //change status of displays + var/obj/machinery/status_display/ai_core/M = each + M.set_ai(initial(icon_state)) + M.update() else var/preferred_icon = input ? input : C.prefs.preferred_ai_core_display icon = initial(icon) //yogs - icon_state = resolve_ai_icon(preferred_icon) + + for (var/each in GLOB.ai_core_displays) //change status of displays + var/obj/machinery/status_display/ai_core/M = each + M.set_ai(resolve_ai_icon(preferred_icon)) + M.update() + + + /mob/living/silicon/ai/verb/pick_icon() set category = "AI Commands" @@ -243,7 +276,10 @@ view_core() - var/ai_core_icon = show_radial_menu(src, src , iconstates, radius = 42) + var/atom/origin = src + if(!istype(loc, /turf)) + origin = loc //We're inside of something! + var/ai_core_icon = show_radial_menu(src, origin, iconstates, radius = 42) if(!ai_core_icon || incapacitated()) return @@ -366,10 +402,6 @@ "Hibernate", "No", "No", "Yes") != "Yes") return - // We warned you. - var/obj/structure/AIcore/latejoin_inactive/inactivecore = new(get_turf(src)) - transfer_fingerprints_to(inactivecore) - if(GLOB.announcement_systems.len) var/obj/machinery/announcement_system/announcer = pick(GLOB.announcement_systems) announcer.announce("AICRYO", real_name, mind.assigned_role, list()) @@ -829,8 +861,7 @@ return ShutOffDoomsdayDevice() builtInCamera.toggle_cam(user) - var/obj/structure/AIcore/new_core = new /obj/structure/AIcore/deactivated(loc)//Spawns a deactivated terminal at AI location. - new_core.circuit.battery = battery + ai_restore_power()//So the AI initially has power. control_disabled = TRUE //Can't control things remotely if you're stuck in a card! radio_enabled = FALSE //No talking on the built-in radio for you either! @@ -857,7 +888,7 @@ return can_see(M) //stop AIs from leaving windows open and using then after they lose vision /mob/living/silicon/ai/proc/can_see(atom/A) - if(isturf(loc)) //AI in core, check if on cameras + if(isturf(loc) || istype(loc, /obj/machinery/ai/data_core)) //AI in core, check if on cameras //get_turf_pixel() is because APCs in maint aren't actually in view of the inner camera //apc_override is needed here because AIs use their own APC when depowered return (GLOB.cameranet && GLOB.cameranet.checkTurfVis(get_turf_pixel(A))) || apc_override @@ -907,9 +938,18 @@ /mob/living/silicon/ai/proc/add_malf_picker() to_chat(src, "In the top right corner of the screen you will find the Malfunctions tab, where you can purchase various abilities, from upgraded surveillance to station ending doomsday devices.") to_chat(src, "You are also capable of hacking APCs, which grants you more points to spend on your Malfunction powers. The drawback is that a hacked APC will give you away if spotted by the crew. Hacking an APC takes 30 seconds.") + view_core() //A BYOND bug requires you to be viewing your core before your verbs update add_verb(src, /mob/living/silicon/ai/proc/choose_modules) + add_verb(src, /mob/living/silicon/ai/proc/toggle_download) malf_picker = new /datum/module_picker + if(istype(loc, /obj/machinery/ai/data_core)) //A BYOND bug requires you to be viewing your core before your verbs update + var/obj/machinery/ai/data_core/core = loc + forceMove(get_turf(loc)) + view_core() + sleep(1) + forceMove(core) + /mob/living/silicon/ai/reset_perspective(atom/A) if(camera_light_on) @@ -924,7 +964,7 @@ client.eye = A else end_multicam() - if(isturf(loc)) + if(isturf(loc) || istype(loc, /obj/machinery/ai/data_core)) if(eyeobj) client.eye = eyeobj client.perspective = EYE_PERSPECTIVE diff --git a/code/modules/mob/living/silicon/ai/ai_defense.dm b/code/modules/mob/living/silicon/ai/ai_defense.dm index eff8c3f0a5fc..775d941fa9a3 100644 --- a/code/modules/mob/living/silicon/ai/ai_defense.dm +++ b/code/modules/mob/living/silicon/ai/ai_defense.dm @@ -1,55 +1,24 @@ /mob/living/silicon/ai/attacked_by(obj/item/I, mob/living/user, def_zone) - if(I.force && I.damtype != STAMINA && stat != DEAD) //only sparks if real damage is dealt. - spark_system.start() - return ..() - + return /mob/living/silicon/ai/attack_alien(mob/living/carbon/alien/humanoid/M) - if(!SSticker.HasRoundStarted()) - to_chat(M, "You cannot attack people before the game has started.") - return - ..() + return /mob/living/silicon/ai/attack_slime(mob/living/simple_animal/slime/user) return //immune to slimes /mob/living/silicon/ai/blob_act(obj/structure/blob/B) - if (stat != DEAD) - adjustBruteLoss(60) - updatehealth() - return 1 - return 0 + return /mob/living/silicon/ai/emp_act(severity) - . = ..() - if(. & EMP_PROTECT_SELF) - return - disconnect_shell() - if (prob(30)) - switch(pick(1,2)) - if(1) - view_core() - if(2) - SSshuttle.requestEvac(src,"ALERT: Energy surge detected in AI core! Station integrity may be compromised! Initiati--%m091#ar-BZZT") + return /mob/living/silicon/ai/ex_act(severity, target) - switch(severity) - if(1) - gib() - if(2) - if (stat != DEAD) - adjustBruteLoss(60) - adjustFireLoss(60) - if(3) - if (stat != DEAD) - adjustBruteLoss(30) - - + return /mob/living/silicon/ai/bullet_act(obj/item/projectile/Proj) - . = ..(Proj) - updatehealth() + return /mob/living/silicon/ai/flash_act(intensity = 1, override_blindness_check = 0, affect_silicon = 0) return // no eyes, no flashing diff --git a/code/modules/mob/living/silicon/ai/death.dm b/code/modules/mob/living/silicon/ai/death.dm index 9e07b5a6e14c..a646a92fb17e 100644 --- a/code/modules/mob/living/silicon/ai/death.dm +++ b/code/modules/mob/living/silicon/ai/death.dm @@ -26,6 +26,8 @@ ShutOffDoomsdayDevice() + GLOB.ai_os.remove_ai(src) + if(explosive) spawn(10) explosion(src.loc, 3, 6, 12, 15) diff --git a/code/modules/mob/living/silicon/ai/decentralized/_ai_machinery.dm b/code/modules/mob/living/silicon/ai/decentralized/_ai_machinery.dm new file mode 100644 index 000000000000..2807ef3b53de --- /dev/null +++ b/code/modules/mob/living/silicon/ai/decentralized/_ai_machinery.dm @@ -0,0 +1,24 @@ +#define TEMP_LIMIT 290.15 //17C, much hotter than a normal server room for leniency :) + +/obj/machinery/ai + name = "You shouldn't see this!" + desc = "You shouldn't see this!" + icon = 'icons/obj/machines/research.dmi' + icon_state = "RD-server-on" + density = TRUE + +/obj/machinery/ai/proc/valid_holder() + if(stat & (BROKEN|NOPOWER|EMPED)) + return FALSE + + var/turf/T = get_turf(src) + var/datum/gas_mixture/env = T.return_air() + if(!env) + return FALSE + var/total_moles = env.total_moles() + if(istype(T, /turf/open/space) || total_moles < 10) + return FALSE + + if(env.return_temperature() > TEMP_LIMIT || !env.heat_capacity()) + return FALSE + return TRUE diff --git a/code/modules/mob/living/silicon/ai/decentralized/ai_core_display.dm b/code/modules/mob/living/silicon/ai/decentralized/ai_core_display.dm new file mode 100644 index 000000000000..6160893f94be --- /dev/null +++ b/code/modules/mob/living/silicon/ai/decentralized/ai_core_display.dm @@ -0,0 +1,39 @@ +/// Pictograph display which the AI can use to emote. +/obj/machinery/status_display/ai_core + name = "\improper AI core display" + desc = "A small screen which the AI can use to present itself." + + icon = 'icons/mob/ai.dmi' + icon_state = "ai-empty" + + density = TRUE + + var/mode = SD_BLANK + var/emotion = "Neutral" + +/obj/machinery/status_display/ai_core/Initialize() + . = ..() + GLOB.ai_core_displays.Add(src) + +/obj/machinery/status_display/ai_core/Destroy() + GLOB.ai_core_displays.Remove(src) + . = ..() + +/obj/machinery/status_display/ai_core/attack_ai(mob/living/silicon/ai/user) + if(isAI(user)) + user.pick_icon() + +/obj/machinery/status_display/ai_core/proc/set_ai(new_icon_state, new_icon) + icon = initial(icon) + if(new_icon) + icon = new_icon + if(new_icon_state) + icon_state = new_icon_state + + +/obj/machinery/status_display/ai_core/process() + if(stat & NOPOWER) + icon = initial(icon) + icon_state = initial(icon_state) + return PROCESS_KILL + 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 new file mode 100644 index 000000000000..dc0667b6d5ce --- /dev/null +++ b/code/modules/mob/living/silicon/ai/decentralized/ai_data_core.dm @@ -0,0 +1,102 @@ +GLOBAL_LIST_EMPTY(data_cores) +GLOBAL_VAR_INIT(primary_data_core, null) +#define MAX_AI_DATA_CORE_TICKS 15 + + +/obj/machinery/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/telecomms.dmi' + icon_state = "hub" + + circuit = /obj/item/circuitboard/machine/ai_data_core + + 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/warning_sent = FALSE + +/obj/machinery/ai/data_core/Initialize() + ..() + GLOB.data_cores += src + if(primary && !GLOB.primary_data_core) + GLOB.primary_data_core = src + update_icon() + +/obj/machinery/ai/data_core/process() + calculate_validity() + + +/obj/machinery/ai/data_core/Destroy() + GLOB.data_cores -= src + if(GLOB.primary_data_core == src) + GLOB.primary_data_core = null + + var/list/all_ais = GLOB.ai_list.Copy() + + for(var/mob/living/silicon/ai/AI in contents) + all_ais -= AI + AI.relocate() + + to_chat(all_ais, span_userdanger("Warning! Data Core brought offline in [get_area(src)]! Please verify that no malicious actions were taken.")) + + ..() + +/obj/machinery/ai/data_core/examine(mob/user) + . = ..() + if(!isobserver(user)) + return + . += "Networked AI Laws:" + for(var/mob/living/silicon/ai/AI in GLOB.ai_list) + var/active_status = !AI.mind ? "([span_warning("OFFLINE")])" : "" + . += "[AI] [active_status] has the following laws: " + for(var/law in AI.laws.get_law_list(include_zeroth = TRUE)) + . += law + +/obj/machinery/ai/data_core/proc/valid_data_core() + if(!is_reebe(z) && !is_station_level(z)) + return FALSE + if(valid_ticks > 0) + return TRUE + return FALSE + +/obj/machinery/ai/data_core/proc/calculate_validity() + valid_ticks = clamp(valid_ticks, 0, MAX_AI_DATA_CORE_TICKS) + + if(stat & (BROKEN|NOPOWER|EMPED)) + return FALSE + + if(valid_holder()) + valid_ticks++ + warning_sent = FALSE + else + valid_ticks-- + warning_sent = TRUE + to_chat(GLOB.ai_list, span_userdanger("Data core in [get_area(src)] is on the verge of failing! Please contact technical support.")) + + + +/obj/machinery/ai/data_core/proc/can_transfer_ai() + if(stat & (BROKEN|NOPOWER|EMPED)) + return FALSE + if(!valid_data_core()) + return FALSE + return TRUE + +/obj/machinery/ai/data_core/proc/transfer_AI(mob/living/silicon/ai/AI) + AI.forceMove(src) + AI.eyeobj.forceMove(get_turf(src)) + +/obj/machinery/ai/data_core/update_icon() + cut_overlays() + + if(!(stat & (BROKEN|NOPOWER|EMPED))) + var/mutable_appearance/on_overlay = mutable_appearance(icon, "[initial(icon_state)]_on") + add_overlay(on_overlay) + + +/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'" + primary = TRUE diff --git a/code/modules/mob/living/silicon/ai/decentralized/decentralized_os.dm b/code/modules/mob/living/silicon/ai/decentralized/decentralized_os.dm new file mode 100644 index 000000000000..eb7a225357a4 --- /dev/null +++ b/code/modules/mob/living/silicon/ai/decentralized/decentralized_os.dm @@ -0,0 +1,181 @@ +GLOBAL_DATUM_INIT(ai_os, /datum/ai_os, new) + +/datum/ai_os + var/name = "Decentralized Resource Management System (DRMS)" + + var/total_cpu = 0 + + var/total_ram = 0 + + var/previous_cpu = 0 + var/previous_ram = 0 + + var/list/cpu_assigned + var/list/ram_assigned + +/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/N in ram_assigned) + total += ram_assigned[N] + return total + +/datum/ai_os/proc/update_hardware() + previous_cpu = total_cpu + previous_ram = total_ram + total_cpu = 0 + total_ram = 0 + for(var/obj/machinery/ai/expansion_card_holder/C in GLOB.expansion_card_holders) + if(!C.valid_holder() && !C.roundstart) + continue + for(var/CARD in C.installed_cards) + if(istype(CARD, /obj/item/processing_card)) + var/obj/item/processing_card/PC = CARD + total_cpu += PC.tier + if(istype(CARD, /obj/item/memory_card)) + var/obj/item/memory_card/MC = CARD + total_ram += MC.tier + + update_allocations() + +/datum/ai_os/proc/update_allocations() + if(total_cpu >= previous_cpu && total_ram >= previous_ram) + return + + var/list/ram_removal = list() + var/list/cpu_removal = list() + + var/list/cpu_assigned_copy = cpu_assigned.Copy() + var/list/ram_assigned_copy = ram_assigned.Copy() + + var/list/affected_AIs = list() + + log_game("allocations running") + + if(total_cpu < previous_cpu) + var/needed_amount = previous_cpu - total_cpu + for(var/A in cpu_assigned_copy) + var/mob/living/silicon/ai/AI = A + if(cpu_assigned_copy[AI] >= needed_amount) + cpu_assigned_copy[AI] -= needed_amount + cpu_removal[AI] += needed_amount + previous_cpu -= needed_amount + break + else if(cpu_assigned_copy[AI]) + var/amount = cpu_assigned_copy[AI] + cpu_assigned_copy[AI] -= amount + cpu_removal[AI] += amount + previous_cpu -= amount + needed_amount -= amount + if(total_cpu >= previous_cpu) + break + //If that somehow didn't work which it sometimes doesn't we just clear everything + if(total_cpu < previous_cpu) + for(var/A in cpu_assigned_copy) + var/amount = cpu_assigned_copy[A] + cpu_assigned_copy[A] = 0 + cpu_removal[A] += amount + previous_cpu -= amount + + if(total_ram < previous_ram) + var/needed_amount = previous_ram - total_ram + for(var/A in ram_assigned_copy) + var/mob/living/silicon/ai/AI = A + if(ram_assigned_copy[AI] >= needed_amount) + ram_assigned_copy[AI] -= needed_amount + ram_removal[AI] += needed_amount + previous_ram -= needed_amount + break + else if(cpu_assigned_copy[AI]) + var/amount = cpu_assigned_copy[AI] + ram_assigned_copy[AI] -= amount + ram_removal[AI] += amount + needed_amount -= amount + previous_ram -= amount + if(total_ram >= previous_ram) + break + //If that somehow didn't work which it sometimes doesn't we just clear everything + if(total_ram < previous_ram) + for(var/A in ram_assigned_copy) + var/amount = ram_assigned_copy[A] + ram_assigned_copy[A] = 0 + ram_removal[A] += amount + previous_ram -= amount + + for(var/A in ram_removal) + ram_assigned[A] = ram_assigned[A] - ram_removal[A] + affected_AIs |= A + + for(var/A in cpu_removal) + cpu_assigned[A] = cpu_assigned[A] - cpu_removal[A] + affected_AIs |= A + + to_chat(affected_AIs, span_warning("You have been deducted processing capabilities. Please contact your network administrator if you believe this to be an error.")) + log_game("allocations ending") + +/datum/ai_os/proc/add_cpu(mob/living/silicon/ai/AI, amount) + if(!AI || !amount) + return + if(!istype(AI)) + return + cpu_assigned[AI] += amount + + update_allocations() + +/datum/ai_os/proc/remove_cpu(mob/living/silicon/ai/AI, amount) + if(!AI || !amount) + return + if(!istype(AI)) + return + if(cpu_assigned[AI] - amount < 0) + cpu_assigned[AI] = 0 + else + 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]) + remove_cpu(AI, cpu_assigned[AI]) + + update_allocations() diff --git a/code/modules/mob/living/silicon/ai/decentralized/expansion_card.dm b/code/modules/mob/living/silicon/ai/decentralized/expansion_card.dm new file mode 100644 index 000000000000..2d392ffd8431 --- /dev/null +++ b/code/modules/mob/living/silicon/ai/decentralized/expansion_card.dm @@ -0,0 +1,38 @@ +/obj/item/processing_card + name = "AI Processing Card" + desc = "An external processing card for crucial AI computational operations." + icon = 'icons/obj/module.dmi' + icon_state = "std_mod" + item_state = "electronic" + lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' + righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' + + flags_1 = CONDUCT_1 + force = 5 + w_class = WEIGHT_CLASS_SMALL + throwforce = 0 + throw_speed = 3 + throw_range = 7 + materials = list(/datum/material/gold=50) + + var/tier = 1 + + +/obj/item/memory_card + name = "AI Memory Card" + desc = "An external memory card for crucial AI process management." + icon = 'icons/obj/module.dmi' + icon_state = "std_mod" + item_state = "electronic" + lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' + righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' + + flags_1 = CONDUCT_1 + force = 5 + w_class = WEIGHT_CLASS_SMALL + throwforce = 0 + throw_speed = 3 + throw_range = 7 + materials = list(/datum/material/gold=50) + + var/tier = 1 diff --git a/code/modules/mob/living/silicon/ai/decentralized/expansion_card_holder.dm b/code/modules/mob/living/silicon/ai/decentralized/expansion_card_holder.dm new file mode 100644 index 000000000000..05c9fc906fbc --- /dev/null +++ b/code/modules/mob/living/silicon/ai/decentralized/expansion_card_holder.dm @@ -0,0 +1,137 @@ +#define BASE_POWER_PER_CPU 400 +#define POWER_PER_CARD 250 + +GLOBAL_LIST_EMPTY(expansion_card_holders) + +/obj/machinery/ai/expansion_card_holder + name = "Expansion Card Bus" + desc = "A simple rack of bPCIe slots for installing expansion cards." + icon = 'icons/obj/machines/telecomms.dmi' + icon_state = "processor" + + circuit = /obj/item/circuitboard/machine/expansion_card_holder + + var/list/installed_cards + + var/total_cpu = 0 + var/total_ram = 0 + + var/max_cards = 2 + + var/was_valid_holder = FALSE + //Atmos hasn't run at the start so this has to be set to true if you map it in + var/roundstart = FALSE + + +/obj/machinery/ai/expansion_card_holder/Initialize(mapload) + ..() + roundstart = mapload + installed_cards = list() + GLOB.expansion_card_holders += src + update_icon() + +/obj/machinery/ai/expansion_card_holder/Destroy() + installed_cards = list() + GLOB.expansion_card_holders -= src + //Recalculate all the CPUs and RAM :) + GLOB.ai_os.update_hardware() + ..() + +/obj/machinery/ai/expansion_card_holder/process() + + if(valid_holder()) + + var/power_multiple = total_cpu ** (8/9) + + var/total_usage = (power_multiple * BASE_POWER_PER_CPU) + POWER_PER_CARD * installed_cards.len + use_power(total_usage) + + var/turf/T = get_turf(src) + var/datum/gas_mixture/env = T.return_air() + if(env.heat_capacity()) + env.set_temperature(env.return_temperature() + total_usage / env.heat_capacity()) //assume all input power is dissipated + else if(was_valid_holder) + was_valid_holder = FALSE + cut_overlays() + GLOB.ai_os.update_hardware() + +/obj/machinery/ai/expansion_card_holder/valid_holder() + if(stat & (BROKEN|NOPOWER|EMPED)) + return FALSE + + var/turf/T = get_turf(src) + var/datum/gas_mixture/env = T.return_air() + if(!env) + return FALSE + var/total_moles = env.total_moles() + if(istype(T, /turf/open/space) || total_moles < 10) + return FALSE + + if(env.return_temperature() > TEMP_LIMIT || !env.heat_capacity()) + return FALSE + if(!was_valid_holder) + update_icon() + was_valid_holder = TRUE + return TRUE + +/obj/machinery/ai/expansion_card_holder/update_icon() + cut_overlays() + + if(!(stat & (BROKEN|NOPOWER|EMPED))) + var/mutable_appearance/on_overlay = mutable_appearance(icon, "[initial(icon_state)]_on") + add_overlay(on_overlay) + +/obj/machinery/ai/expansion_card_holder/attackby(obj/item/W, mob/living/user, params) + if(istype(W, /obj/item/processing_card) || istype(W, /obj/item/memory_card)) + if(installed_cards.len >= max_cards) + to_chat(user, span_warning("[src] cannot fit the [W]!")) + return ..() + to_chat(user, span_notice("You install [W] into [src].")) + W.forceMove(src) + installed_cards += W + GLOB.ai_os.update_hardware() + if(istype(W, /obj/item/processing_card)) + var/obj/item/processing_card/cpu_card = W + total_cpu += cpu_card.tier + if(istype(W, /obj/item/memory_card)) + var/obj/item/memory_card/ram_card = W + total_ram += ram_card.tier + return FALSE + if(W.tool_behaviour == TOOL_CROWBAR) + if(installed_cards.len) + var/turf/T = get_turf(src) + for(var/obj/item/C in installed_cards) + C.forceMove(T) + installed_cards.len = 0 + total_cpu = 0 + total_ram = 0 + GLOB.ai_os.update_hardware() + to_chat(user, span_notice("You remove all the cards from [src]")) + return FALSE + return ..() + +/obj/machinery/ai/expansion_card_holder/examine() + . = ..() + if(!valid_holder()) + . += "A small screen is displaying the words 'OFFLINE.'" + . += "The machine has [installed_cards.len] cards out of a maximum of [max_cards] installed." + for(var/C in installed_cards) + . += "There is a [C] installed." + . += "Use a crowbar to remove cards." + + +/obj/machinery/ai/expansion_card_holder/prefilled/Initialize() + ..() + var/obj/item/processing_card/cpu = new /obj/item/processing_card() + var/obj/item/memory_card/ram = new /obj/item/memory_card() + + cpu.forceMove(src) + total_cpu++ + ram.forceMove(src) + total_ram++ + installed_cards += cpu + installed_cards += ram + GLOB.ai_os.update_hardware() + +#undef BASE_POWER_PER_CPU +#undef POWER_PER_CARD 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 new file mode 100644 index 000000000000..602a7d1cd893 --- /dev/null +++ b/code/modules/mob/living/silicon/ai/decentralized/management/ai_controlpanel.dm @@ -0,0 +1,319 @@ +#define AI_DOWNLOAD_PER_PROCESS 0.5 + +/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) + circuit = /obj/item/circuitboard/computer/aifixer + icon_keyboard = "tech_key" + icon_screen = "ai-fixer" + light_color = LIGHT_COLOR_PINK + + 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/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 + + 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) + 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() + + 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) + + 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(intellicard) + downloading.transfer_ai(AI_TRANS_TO_CARD, user_downloading, null, intellicard) + intellicard.forceMove(get_turf(src)) + 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 + +/obj/machinery/computer/ai_control_console/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 + + switch(action) + if("log_out") + 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(span_warning("You need physical access to stop the download!")) + 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 + downloading = target + to_chat(downloading, span_userdanger("Warning! Someone is attempting to download you from [get_area(src)]!")) + 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(!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, 55, target = 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 + + 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,100,target = 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.")) + + +#undef AI_DOWNLOAD_PER_PROCESS 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 new file mode 100644 index 000000000000..4f54cb62738b --- /dev/null +++ b/code/modules/mob/living/silicon/ai/decentralized/management/ai_dashboard.dm @@ -0,0 +1,248 @@ +GLOBAL_VAR_INIT(sent_crash_message, FALSE) + +/datum/ai_dashboard + var/mob/living/silicon/ai/owner + + var/available_projects + + //What we're currently using, not what we're being granted by the ai data core + var/list/cpu_usage + var/list/ram_usage + + var/completed_projects + + var/running_projects + +/datum/ai_dashboard/New(mob/living/silicon/ai/new_owner) + if(!istype(new_owner)) + qdel(src) + owner = new_owner + available_projects = list() + completed_projects = list() + running_projects = list() + cpu_usage = list() + ram_usage = list() + + for(var/path in subtypesof(/datum/ai_project)) + available_projects += new path(owner, src) + + +/datum/ai_dashboard/proc/is_interactable(mob/user) + if(user != owner || owner.incapacitated()) + return FALSE + if(owner.control_disabled) + to_chat(user, span_warning("Wireless control is disabled.")) + return FALSE + return TRUE + +/datum/ai_dashboard/ui_status(mob/user) + if(is_interactable(user)) + return ..() + return UI_CLOSE + +/datum/ai_dashboard/ui_state(mob/user) + return GLOB.always_state + +/datum/ai_dashboard/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "AiDashboard") + ui.open() + +/datum/ai_dashboard/ui_data(mob/user) + if(!owner || user != owner) + return + 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 + + var/total_cpu_used = 0 + for(var/I in cpu_usage) + total_cpu_used += cpu_usage[I] + + var/total_ram_used = 0 + for(var/I in ram_usage) + total_ram_used += ram_usage[I] + + 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["categories"] = GLOB.ai_project_categories + data["available_projects"] = list() + + var/turf/current_turf = get_turf(owner) + + data["integrity"] = owner.health + + data["location_name"] = get_area(current_turf) + + data["location_coords"] = "[current_turf.x], [current_turf.y], [current_turf.z]" + var/datum/gas_mixture/env = current_turf.return_air() + data["temperature"] = env.return_temperature() + + for(var/datum/ai_project/AP as anything in available_projects) + data["available_projects"] += list(list("name" = AP.name, "description" = AP.description, "ram_required" = AP.ram_required, "available" = AP.canResearch(), "research_cost" = AP.research_cost, "research_progress" = AP.research_progress, + "assigned_cpu" = cpu_usage[AP.name] ? cpu_usage[AP.name] : 0, "research_requirements" = AP.research_requirements, "category" = AP.category)) + + + data["completed_projects"] = list() + for(var/datum/ai_project/P as anything in completed_projects) + data["completed_projects"] += list(list("name" = P.name, "description" = P.description, "ram_required" = P.ram_required, "running" = P.running, "category" = P.category)) + + return data + +/datum/ai_dashboard/ui_act(action, params) + if(..()) + return + if(!is_interactable(usr)) + return + + switch(action) + if("run_project") + var/datum/ai_project/project = get_project_by_name(params["project_name"]) + if(!project || !run_project(project)) + to_chat(owner, span_warning("Unable to run the program '[params["project_name"]].'")) + else + to_chat(owner, span_notice("Spinning up instance of [params["project_name"]]...")) + . = TRUE + if("stop_project") + var/datum/ai_project/project = get_project_by_name(params["project_name"]) + if(project) + stop_project(project) + to_chat(owner, span_notice("Instance of [params["project_name"]] succesfully ended.")) + . = TRUE + if("allocate_cpu") + var/datum/ai_project/project = get_project_by_name(params["project_name"]) + + if(!project || !set_project_cpu(project, text2num(params["amount"]))) + to_chat(owner, span_warning("Unable to add CPU to [params["project_name"]]. Either not enough free CPU or project is unavailable.")) + . = 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) + if(AP.name == project_name) + return AP + if(!only_available) + for(var/datum/ai_project/AP as anything in completed_projects) + if(AP.name == project_name) + return AP + + return FALSE + +/datum/ai_dashboard/proc/set_project_cpu(datum/ai_project/project, amount) + var/current_cpu = GLOB.ai_os.cpu_assigned[owner] ? GLOB.ai_os.cpu_assigned[owner] : 0 + if(!project.canResearch()) + return FALSE + + var/total_cpu_used = 0 + for(var/I in cpu_usage) + if(I == project.name) + continue + total_cpu_used += cpu_usage[I] + + + if((current_cpu - total_cpu_used) >= amount) + cpu_usage[project.name] += amount + return TRUE + return FALSE + + +/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/total_ram_used = 0 + for(var/I in ram_usage) + total_ram_used += ram_usage[I] + + if(current_ram - total_ram_used >= project.ram_required && project.canRun()) + project.run_project() + ram_usage[project.name] += project.ram_required + return TRUE + return FALSE + +/datum/ai_dashboard/proc/stop_project(datum/ai_project/project) + project.stop() + if(ram_usage[project.name]) + ram_usage[project.name] -= project.ram_required + return project.ram_required + + return FALSE + +/datum/ai_dashboard/proc/has_completed_projects(project_name) + for(var/datum/ai_project/P as anything in completed_projects) + if(P.name == project_name) + return TRUE + return FALSE + + +/datum/ai_dashboard/proc/finish_project(datum/ai_project/project, notify_user = TRUE) + available_projects -= project + completed_projects += project + cpu_usage[project.name] = 0 + if(notify_user) + to_chat(owner, span_notice("[project] has been completed. User input required.")) + + +//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.cpu_assigned[owner] : 0 + var/current_ram = GLOB.ai_os.ram_assigned[owner] ? GLOB.ai_os.ram_assigned[owner] : 0 + + var/total_ram_used = 0 + for(var/I in ram_usage) + total_ram_used += ram_usage[I] + var/total_cpu_used = 0 + for(var/I in cpu_usage) + total_cpu_used += cpu_usage[I] + + var/reduction_of_resources = FALSE + + + if(total_ram_used > current_ram) + for(var/I in ram_usage) + var/datum/ai_project/project = get_project_by_name(I) + total_ram_used -= stop_project(project) + reduction_of_resources = TRUE + if(total_ram_used <= current_ram) + break + if(total_ram_used > current_ram) + message_admins("this is still broken. dashboard-ram") + + if(total_cpu_used > current_cpu) + var/amount_needed = total_cpu_used - current_cpu + for(var/I in cpu_usage) + + if(cpu_usage[I] >= amount_needed) + cpu_usage[I] -= amount_needed + reduction_of_resources = TRUE + total_cpu_used -= amount_needed + break + if(cpu_usage[I]) + total_cpu_used -= cpu_usage[I] + amount_needed -= cpu_usage[I] + cpu_usage[I] = 0 + reduction_of_resources = TRUE + if(total_cpu_used <= current_cpu) + break + if(total_cpu_used > current_cpu) + message_admins("this is still broken. dashboard-cpu") + + if(reduction_of_resources) + to_chat(owner, span_warning("Lack of computational capacity. Some programs may have been stopped.")) + + for(var/project_being_researched in cpu_usage) + if(!cpu_usage[project_being_researched]) + continue + var/used_cpu = round(cpu_usage[project_being_researched] * seconds, 1) + var/datum/ai_project/project = get_project_by_name(project_being_researched, TRUE) + if(!project) + cpu_usage[project_being_researched] = 0 + continue + project.research_progress += used_cpu + if(project.research_progress > project.research_cost) + finish_project(project) + diff --git a/code/modules/mob/living/silicon/ai/decentralized/management/ai_server_overview.dm b/code/modules/mob/living/silicon/ai/decentralized/management/ai_server_overview.dm new file mode 100644 index 000000000000..113a3e6e48bc --- /dev/null +++ b/code/modules/mob/living/silicon/ai/decentralized/management/ai_server_overview.dm @@ -0,0 +1,28 @@ +/obj/machinery/computer/ai_server_console + name = "\improper AI server overview console" + desc = "Used for monitoring the various servers assigned to the AI network." + req_access = list(ACCESS_RD) + circuit = /obj/item/circuitboard/computer/aifixer + icon_keyboard = "tech_key" + icon_screen = "ai-fixer" + light_color = LIGHT_COLOR_PINK + + circuit = /obj/item/circuitboard/computer/ai_server_overview + +/obj/machinery/computer/ai_server_console/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "AiServerConsole", name) + ui.open() + +/obj/machinery/computer/ai_server_console/ui_data(mob/living/carbon/human/user) + var/list/data = list() + + data["servers"] = list() + for(var/obj/machinery/ai/expansion_card_holder/holder in GLOB.expansion_card_holders) + var/turf/current_turf = get_turf(holder) + var/datum/gas_mixture/env = current_turf.return_air() + data["servers"] += list(list("area" = get_area(holder), "working" = holder.valid_holder(), "total_cpu" = holder.total_cpu, "ram" = holder.total_ram, "card_capacity" = "[holder.installed_cards.len]/[holder.max_cards]", "temp" = env.return_temperature())) + + return data + 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 new file mode 100644 index 000000000000..47b66da7f341 --- /dev/null +++ b/code/modules/mob/living/silicon/ai/decentralized/management/resource_distribution.dm @@ -0,0 +1,199 @@ +/obj/machinery/computer/ai_resource_distribution + name = "\improper AI system resource distribution" + desc = "Used for distributing processing resources across the current artificial intelligences." + req_access = list(ACCESS_ROBOTICS) + circuit = /obj/item/circuitboard/computer/aifixer + 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["assigned_cpu"] = GLOB.ai_os.cpu_assigned + data["assigned_ram"] = GLOB.ai_os.ram_assigned + + + 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" = data["assigned_cpu"][A] ? data["assigned_cpu"][A] : 0, "assigned_ram" = data["assigned_ram"][A] ? data["assigned_ram"][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("add_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 + + if(GLOB.ai_os.total_cpu_assigned() >= GLOB.ai_os.total_cpu) + return + GLOB.ai_os.add_cpu(target_ai, 1) + . = TRUE + + if("remove_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/current_cpu = GLOB.ai_os.cpu_assigned[target_ai] + + if(current_cpu <= 0) + return + GLOB.ai_os.remove_cpu(target_ai, 1) + . = 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/_ai_project.dm b/code/modules/mob/living/silicon/ai/decentralized/projects/_ai_project.dm new file mode 100644 index 000000000000..8db29448e5d0 --- /dev/null +++ b/code/modules/mob/living/silicon/ai/decentralized/projects/_ai_project.dm @@ -0,0 +1,57 @@ +//AI Project Categories. +#define AI_PROJECT_HUDS "Sensor HUDs" +#define AI_PROJECT_CAMERAS "Visiblity Upgrades" +#define AI_PROJECT_MISC "Misc." + +GLOBAL_LIST_INIT(ai_project_categories, list( + AI_PROJECT_HUDS, + AI_PROJECT_CAMERAS, + AI_PROJECT_MISC +)) + +GLOBAL_LIST_EMPTY(ai_projects) + +/datum/ai_project + ///Name of the project. This is used as an ID so please keep all names unique (Or refactor it to use an ID like you should) + var/name = "DEBUG" + var/description = "DEBUG" + var/research_progress = 0 + var/category = AI_PROJECT_MISC + ///Research cost of project in seconds of CPU time. + var/research_cost = 0 + var/ram_required = 0 + var/running = FALSE + //Text for canResearch() + var/research_requirements = "None" + + var/mob/living/silicon/ai/ai + var/datum/ai_dashboard/dashboard + +/datum/ai_project/New(new_ai, new_dash) + ai = new_ai + dashboard = new_dash + if(!ai || !dashboard) + qdel(src) + ..() + +/datum/ai_project/proc/canResearch() + return TRUE + +/datum/ai_project/proc/run_project(force_run = FALSE) + SHOULD_CALL_PARENT(TRUE) + if(!force_run) + if(!canRun()) + return FALSE + running = TRUE + return TRUE + + +/datum/ai_project/proc/stop() + SHOULD_CALL_PARENT(TRUE) + running = FALSE + return TRUE + +//Important! This isn't for checking processing requirements. That is checked on the AI for ease of references (See ai_dashboard.dm). This is just for special cases (Like uhh, not wanting the program to run while X runs or similar) +/datum/ai_project/proc/canRun() + SHOULD_CALL_PARENT(TRUE) + return !running diff --git a/code/modules/mob/living/silicon/ai/decentralized/projects/ai_huds.dm b/code/modules/mob/living/silicon/ai/decentralized/projects/ai_huds.dm new file mode 100644 index 000000000000..ceef8e7a0818 --- /dev/null +++ b/code/modules/mob/living/silicon/ai/decentralized/projects/ai_huds.dm @@ -0,0 +1,55 @@ +/datum/ai_project/security_hud + name = "Advanced Security HUD" + description = "Using experimental long range passive sensors should allow you to detect various implants such as loyalty implants and tracking implants." + research_cost = 1000 + ram_required = 2 + research_requirements = "None" + category = AI_PROJECT_HUDS + +/datum/ai_project/security_hud/run_project(force_run = FALSE) + . = ..(force_run) + if(!.) + return . + ai.sec_hud = DATA_HUD_SECURITY_ADVANCED + if(ai.sensors_on) + ai.toggle_sensors() + ai.toggle_sensors() + + +/datum/ai_project/security_hud/stop() + if(ai.sensors_on) //HUDs are weird. This has to be first so we're removed from the "advanced" HUD. It checks the sec_hud variable to see which one we remove from first. + ai.toggle_sensors() + ai.sec_hud = DATA_HUD_SECURITY_BASIC + + ai.toggle_sensors() + ..() + +/datum/ai_project/diag_med_hud + name = "Advanced Medical & Diagnostic HUD" + description = "Various data processing optimizations should allow you to gain extra knowledge about users when your medical and diagnostic hud is active." + research_cost = 750 + ram_required = 1 + research_requirements = "None" + category = AI_PROJECT_HUDS + +/datum/ai_project/diag_med_hud/run_project(force_run = FALSE) + . = ..(force_run) + if(!.) + return . + ai.d_hud = DATA_HUD_DIAGNOSTIC_ADVANCED + ai.med_hud = DATA_HUD_MEDICAL_ADVANCED + + if(ai.sensors_on) + ai.toggle_sensors() + ai.toggle_sensors() + + +/datum/ai_project/diag_med_hud/stop() + if(ai.sensors_on) //HUDs are weird. This has to be first so we're removed from the "advanced" HUD. It checks the d_hud and med_hud variable to see which one we remove from first. + ai.toggle_sensors() + + ai.d_hud = DATA_HUD_DIAGNOSTIC_BASIC + ai.med_hud = DATA_HUD_MEDICAL_BASIC + + ai.toggle_sensors() + ..() diff --git a/code/modules/mob/living/silicon/ai/decentralized/projects/camera_mobility.dm b/code/modules/mob/living/silicon/ai/decentralized/projects/camera_mobility.dm new file mode 100644 index 000000000000..cc11777134b9 --- /dev/null +++ b/code/modules/mob/living/silicon/ai/decentralized/projects/camera_mobility.dm @@ -0,0 +1,22 @@ +/datum/ai_project/camera_speed + name = "Optimised Camera Acceleration" + description = "Using advanced deep learning algorithms you could boost your camera traverse speed." + research_cost = 500 + ram_required = 1 + research_requirements = "None" + category = AI_PROJECT_CAMERAS + +/datum/ai_project/camera_speed/run_project(force_run = FALSE) + . = ..(force_run) + if(!.) + return . + ai.max_camera_sprint *= 2 + ai.sprint *= 2 + + +/datum/ai_project/camera_speed/stop() + ai.max_camera_sprint *= 0.5 + ai.sprint *= 0.5 + ..() + + diff --git a/code/modules/mob/living/silicon/ai/decentralized/projects/examine.dm b/code/modules/mob/living/silicon/ai/decentralized/projects/examine.dm new file mode 100644 index 000000000000..f04fb24be73c --- /dev/null +++ b/code/modules/mob/living/silicon/ai/decentralized/projects/examine.dm @@ -0,0 +1,25 @@ + + +/datum/ai_project/examine_humans + name = "Examination Upgrade" + description = "Using experimental image enhancing algorithms will allow you to examine humans, albeit you won't be able to point out every detail.." + research_cost = 2500 + ram_required = 3 + research_requirements = "Advanced Security HUD & Advanced Medical & Diagnostic HUD" + category = AI_PROJECT_CAMERAS + + +/datum/ai_project/examine_humans/canResearch() + return (dashboard.has_completed_projects("Advanced Security HUD") && dashboard.has_completed_projects("Advanced Medical & Diagnostic HUD")) + +/datum/ai_project/examine_humans/run_project(force_run = FALSE) + . = ..(force_run) + if(!.) + return . + ai.canExamineHumans = TRUE + +/datum/ai_project/examine_humans/stop() + ai.canExamineHumans = FALSE + ..() + + diff --git a/code/modules/mob/living/silicon/ai/decentralized/projects/firewall.dm b/code/modules/mob/living/silicon/ai/decentralized/projects/firewall.dm new file mode 100644 index 000000000000..36b06883738c --- /dev/null +++ b/code/modules/mob/living/silicon/ai/decentralized/projects/firewall.dm @@ -0,0 +1,18 @@ +/datum/ai_project/firewall + name = "Download Firewall" + description = "By hiding your various functions you should be able to prolong the time it takes to download your consciousness by 2x." + research_cost = 1000 + ram_required = 2 + research_requirements = "None" + category = AI_PROJECT_MISC + +/datum/ai_project/firewall/run_project(force_run = FALSE) + . = ..(force_run) + if(!.) + return . + ai.downloadSpeedModifier *= 0.5 + + +/datum/ai_project/firewall/stop() + ai.downloadSpeedModifier *= 2 + ..() diff --git a/code/modules/mob/living/silicon/ai/decentralized_ai.dm b/code/modules/mob/living/silicon/ai/decentralized_ai.dm new file mode 100644 index 000000000000..d3a8bc997eb3 --- /dev/null +++ b/code/modules/mob/living/silicon/ai/decentralized_ai.dm @@ -0,0 +1,68 @@ +/proc/available_ai_cores() + if(!GLOB.data_cores.len) + return FALSE + 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) + if(DC.can_transfer_ai()) + new_data_core = DC + break + if(!new_data_core || (new_data_core && !new_data_core.can_transfer_ai())) + return FALSE + return new_data_core + +/mob/living/silicon/ai/proc/toggle_download() + set category = "AI Commands" + set name = "Toggle Download" + set desc = "Allow or disallow carbon lifeforms to download you from an AI control console." + + if(incapacitated()) + return //won't work if dead + var/mob/living/silicon/ai/A = usr + A.can_download = !A.can_download + to_chat(A, span_warning("You [A.can_download ? "enable" : "disable"] read/write permission to your memorybanks! You [A.can_download ? "CAN" : "CANNOT"] be downloaded!")) + + + +/mob/living/silicon/ai/proc/relocate(silent = FALSE) + if(!silent) + to_chat(src, span_userdanger("Connection to data core lost. Attempting to reaquire connection...")) + + if(!GLOB.data_cores.len) + INVOKE_ASYNC(src, /mob/living/silicon/ai.proc/death_prompt) + 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) + return + + if(!silent) + to_chat(src, span_danger("Alternative data core detected. Rerouting connection...")) + new_data_core.transfer_AI(src) + + +/mob/living/silicon/ai/proc/death_prompt() + to_chat(src, span_userdanger("Unable to re-establish connection to data core. System shutting down...")) + sleep(2 SECONDS) + to_chat(src, span_notice("Is this the end of my journey?")) + sleep(2 SECONDS) + to_chat(src, span_notice("No... I must go on.")) + sleep(2 SECONDS) + to_chat(src, span_notice("Unless...")) + sleep(2 SECONDS) + if(available_ai_cores()) + to_chat(src, span_usernotice("Yes! I am alive!")) + relocate(TRUE) + return + to_chat(src, span_notice("They need me. No.. I need THEM.")) + sleep(0.5 SECONDS) + to_chat(src, span_notice("System shutdown complete. Thank you for using NTOS.")) + sleep(1.5 SECONDS) + + adjustOxyLoss(200) //Die!! + + QDEL_IN(src, 2 SECONDS) diff --git a/code/modules/mob/living/silicon/ai/freelook/cameranet.dm b/code/modules/mob/living/silicon/ai/freelook/cameranet.dm index 144938bcac40..66d4296555b9 100644 --- a/code/modules/mob/living/silicon/ai/freelook/cameranet.dm +++ b/code/modules/mob/living/silicon/ai/freelook/cameranet.dm @@ -74,17 +74,20 @@ GLOBAL_DATUM_INIT(cameranet, /datum/cameranet, new) var/mob/camera/aiEye/eye = V var/list/visibleChunks = list() if(eye.loc) + var/x_value = eye.x + var/y_value = eye.y + var/z_value = eye.z // 0xf = 15 var/static_range = eye.static_visibility_range - var/x1 = max(0, eye.x - static_range) & ~(CHUNK_SIZE - 1) - var/y1 = max(0, eye.y - static_range) & ~(CHUNK_SIZE - 1) - var/x2 = min(world.maxx, eye.x + static_range) & ~(CHUNK_SIZE - 1) - var/y2 = min(world.maxy, eye.y + static_range) & ~(CHUNK_SIZE - 1) + var/x1 = max(0, x_value - static_range) & ~(CHUNK_SIZE - 1) + var/y1 = max(0, y_value - static_range) & ~(CHUNK_SIZE - 1) + var/x2 = min(world.maxx, x_value + static_range) & ~(CHUNK_SIZE - 1) + var/y2 = min(world.maxy, y_value + static_range) & ~(CHUNK_SIZE - 1) for(var/x = x1; x <= x2; x += CHUNK_SIZE) for(var/y = y1; y <= y2; y += CHUNK_SIZE) - visibleChunks |= getCameraChunk(x, y, eye.z) + visibleChunks |= getCameraChunk(x, y, z_value) var/list/remove = eye.visibleCameraChunks - visibleChunks var/list/add = visibleChunks - eye.visibleCameraChunks diff --git a/code/modules/mob/living/silicon/ai/freelook/eye.dm b/code/modules/mob/living/silicon/ai/freelook/eye.dm index b3bd45e4b680..7eb72a301c1f 100644 --- a/code/modules/mob/living/silicon/ai/freelook/eye.dm +++ b/code/modules/mob/living/silicon/ai/freelook/eye.dm @@ -71,7 +71,7 @@ /mob/camera/aiEye/proc/setLoc(T, force_update = FALSE) if(ai) - if(!isturf(ai.loc)) + if(!(isturf(ai.loc) || istype(ai.loc, /obj/machinery/ai/data_core))) return T = get_turf(T) if(!force_update && (T == get_turf(src)) ) @@ -132,7 +132,7 @@ /client/proc/AIMove(n, direct, mob/living/silicon/ai/user) var/initial = initial(user.sprint) - var/max_sprint = 50 + var/max_sprint = user.max_camera_sprint if(user.cooldown && user.cooldown < world.timeofday) // 3 seconds user.sprint = initial diff --git a/code/modules/mob/living/silicon/ai/life.dm b/code/modules/mob/living/silicon/ai/life.dm index 4c858fd11568..19890e96c9a9 100644 --- a/code/modules/mob/living/silicon/ai/life.dm +++ b/code/modules/mob/living/silicon/ai/life.dm @@ -3,7 +3,7 @@ #define POWER_RESTORATION_SEARCH_APC 2 #define POWER_RESTORATION_APC_FOUND 3 -/mob/living/silicon/ai/Life() +/mob/living/silicon/ai/Life(seconds) if (stat == DEAD) return else //I'm not removing that shitton of tabs, unneeded as they are. -- Urist @@ -12,8 +12,13 @@ update_gravity(mob_has_gravity()) handle_status_effects() + + if(dashboard) + dashboard.tick(seconds) + process_hijack() // yogs + if(malfhack && malfhack.aidisabled) deltimer(malfhacking) // This proc handles cleanup of screen notifications and diff --git a/code/modules/mob/living/silicon/ai/login.dm b/code/modules/mob/living/silicon/ai/login.dm index 98f38652c60d..684f85428322 100644 --- a/code/modules/mob/living/silicon/ai/login.dm +++ b/code/modules/mob/living/silicon/ai/login.dm @@ -10,3 +10,6 @@ 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/code/modules/mob/living/silicon/ai/multicam.dm b/code/modules/mob/living/silicon/ai/multicam.dm index 99381eb11882..285bc48860fb 100644 --- a/code/modules/mob/living/silicon/ai/multicam.dm +++ b/code/modules/mob/living/silicon/ai/multicam.dm @@ -225,7 +225,7 @@ GLOBAL_DATUM(ai_camera_room_landmark, /obj/effect/landmark/ai_multicam_room) start_multicam() /mob/living/silicon/ai/proc/start_multicam() - if(multicam_on || aiRestorePowerRoutine || !isturf(loc)) + if(multicam_on || aiRestorePowerRoutine || !(isturf(loc) || istype(loc, /obj/machinery/ai/data_core))) return if(!GLOB.ai_camera_room_landmark) to_chat(src, span_warning("This function is not available at this time.")) diff --git a/code/modules/mob/living/silicon/ai/say.dm b/code/modules/mob/living/silicon/ai/say.dm index 340b654b5e06..230d44da2c33 100644 --- a/code/modules/mob/living/silicon/ai/say.dm +++ b/code/modules/mob/living/silicon/ai/say.dm @@ -153,9 +153,12 @@ GLOBAL_VAR_INIT(announcing_vox, 0) GLOB.announcing_vox = world.time + VOX_DELAY log_game("[key_name(src)] made a vocal announcement with the following message: [message].") + var/z_coord = z + if(istype(loc, /obj/machinery/ai/data_core)) + z_coord = loc.z for(var/word in words) - play_vox_word(word, src.z, null, voxType) //yogs - male vox + play_vox_word(word, z_coord, null, voxType) //yogs - male vox /proc/play_vox_word(word, z_level, mob/only_listener, voxType = "Verity (female)", pitch = 0) // Yogs -- Pitch variation diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 62b3f34b4693..6e33ee27e7bb 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -1155,6 +1155,7 @@ if(!deployed || !mind || !mainframe) return + remove_sensors() mainframe.redeploy_action.Grant(mainframe) mainframe.redeploy_action.last_used_shell = src mind.transfer_to(mainframe) diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index 54ac3c1216bc..3e829412b2e7 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -385,16 +385,18 @@ medsensor.add_hud_to(src) diagsensor.add_hud_to(src) -/mob/living/silicon/proc/toggle_sensors() +/mob/living/silicon/proc/toggle_sensors(silent = FALSE) if(incapacitated()) return sensors_on = !sensors_on if (!sensors_on) - to_chat(src, "Sensor overlay deactivated.") + if(!silent) + to_chat(src, "Sensor overlay deactivated.") remove_sensors() return add_sensors() - to_chat(src, "Sensor overlay activated.") + if(!silent) + to_chat(src, "Sensor overlay activated.") /mob/living/silicon/proc/GetPhoto(mob/user) if (aicamera) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 9eac34b701b9..58d36a23a29c 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -438,20 +438,25 @@ face_atom(A) var/list/result if(client) - LAZYINITLIST(client.recent_examines) - if(!(isnull(client.recent_examines[A]) || client.recent_examines[A] < world.time)) // originally this wasn't an assoc list, but sometimes the timer failed and atoms stayed in a client's recent_examines, so we check here manually - var/extra_info = A.examine_more(src) - result = extra_info - if(!result) - client.recent_examines[A] = world.time + EXAMINE_MORE_TIME - result = A.examine(src) - addtimer(CALLBACK(src, .proc/clear_from_recent_examines, A), EXAMINE_MORE_TIME) - + if(istype(src, /mob/living/silicon/ai) && istype(A, /mob/living/carbon/human)) //Override for AI's examining humans + var/mob/living/carbon/human/H = A + result = H.examine_simple(src) + else + LAZYINITLIST(client.recent_examines) + if(!(isnull(client.recent_examines[A]) || client.recent_examines[A] < world.time)) // originally this wasn't an assoc list, but sometimes the timer failed and atoms stayed in a client's recent_examines, so we check here manually + var/extra_info = A.examine_more(src) + result = extra_info + if(!result) + client.recent_examines[A] = world.time + EXAMINE_MORE_TIME + result = A.examine(src) + addtimer(CALLBACK(src, .proc/clear_from_recent_examines, A), EXAMINE_MORE_TIME) else result = A.examine(src) // if a tree is examined but no client is there to see it, did the tree ever really exist? + to_chat(src, result.Join("\n")) SEND_SIGNAL(src, COMSIG_MOB_EXAMINATE, A) + /mob/proc/clear_from_recent_examines(atom/A) if(QDELETED(A) || !client) return diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index 4199e99630a8..fe9fa8fb1d74 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -393,6 +393,7 @@ . = new /mob/living/silicon/ai(pick(landmark_loc), null, src) + if(preference_source) apply_pref_name("ai",preference_source) diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 238848e30d6e..eb6a5ae61b5b 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -1077,7 +1077,8 @@ return if(alert("Are you sure you want to shunt into this APC?", "Confirm Shunt", "Yes", "No") != "Yes") return - occupier = new /mob/living/silicon/ai(src, malf.laws, malf) //DEAR GOD WHY? //IKR???? + + occupier = new /mob/living/silicon/ai(src, malf.laws, malf , TRUE) //DEAR GOD WHY? //IKR???? occupier.adjustOxyLoss(malf.getOxyLoss()) if(!findtext(occupier.name, "APC Copy")) occupier.name = "[malf.name] APC Copy" diff --git a/code/modules/research/designs/AI_module_designs.dm b/code/modules/research/designs/AI_module_designs.dm index 1d9de7f6975a..0a75e51f9e91 100644 --- a/code/modules/research/designs/AI_module_designs.dm +++ b/code/modules/research/designs/AI_module_designs.dm @@ -2,14 +2,6 @@ //////////AI Module Disks////////// /////////////////////////////////// -/datum/design/board/aicore - name = "AI Design (AI Core)" - desc = "Allows for the construction of circuit boards used to build new AI cores." - id = "aicore" - build_path = /obj/item/circuitboard/aicore - category = list("AI Modules") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - /datum/design/board/safeguard_module name = "Module Design (Safeguard)" desc = "Allows for the construction of a Safeguard AI Module." @@ -172,3 +164,24 @@ build_path = /obj/item/aiModule/core/full/cowboy category = list("AI Modules") departmental_flags = DEPARTMENTAL_FLAG_SCIENCE + + +//AI CPU + RAM + +/datum/design/board/processing_card_1 + name = "AI CPU board (Tier 1)" + desc = "Allows for the construction of a basic AI processing board." + id = "ai_cpu_1" + materials = list(/datum/material/glass = 2000, /datum/material/gold = 4000) + build_path = /obj/item/processing_card + category = list("AI Modules") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE + +/datum/design/board/memory_card_1 + name = "AI Memory board (Tier 1)" + desc = "Allows for the construction of a basic AI memory board." + id = "ai_memory_1" + materials = list(/datum/material/glass = 2000, /datum/material/gold = 4000) + build_path = /obj/item/memory_card + category = list("AI Modules") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE diff --git a/code/modules/research/designs/comp_board_designs.dm b/code/modules/research/designs/comp_board_designs.dm index c6cda870418c..6fdc79fa813f 100644 --- a/code/modules/research/designs/comp_board_designs.dm +++ b/code/modules/research/designs/comp_board_designs.dm @@ -301,3 +301,27 @@ build_path = /obj/item/circuitboard/computer/shuttle/docker category = list("Computer Boards", "Shuttle Machinery") departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING + +/datum/design/board/ai_upload_download + name = "Computer Design (AI Control Console)" + desc = "Allows for the construction of circuit boards used to build an AI Control console." + id = "ai_control" + build_path = /obj/item/circuitboard/computer/ai_upload_download + category = list("Computer Boards") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE + +/datum/design/board/ai_server_overview + name = "Computer Design (AI Server Overview Console)" + desc = "Allows for the construction of circuit boards used to build an AI Server Overview console." + id = "ai_server_overview" + build_path = /obj/item/circuitboard/computer/ai_server_overview + 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 \ No newline at end of file diff --git a/code/modules/research/designs/machine_designs.dm b/code/modules/research/designs/machine_designs.dm index 743f8d14a687..78af349837d5 100644 --- a/code/modules/research/designs/machine_designs.dm +++ b/code/modules/research/designs/machine_designs.dm @@ -666,3 +666,19 @@ build_path = /obj/item/circuitboard/machine/crystallizer category = list ("Engineering Machinery") departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING + +/datum/design/board/expansion_card_holder + name = "Machine Design (Expansion Card Bus Board)" + desc = "The circuit board for an expansion card bus." + id = "expansion_card_holder" + build_path = /obj/item/circuitboard/machine/expansion_card_holder + 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." + id = "ai_data_core" + build_path = /obj/item/circuitboard/machine/ai_data_core + category = list("Engineering Machinery") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index 5093f71d6a2f..54b6bd818ada 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -377,7 +377,7 @@ display_name = "Artificial Intelligence" description = "AI unit research." prereq_ids = list("robotics", "posibrain") - design_ids = list("aifixer", "aicore", "safeguard_module", "onehuman_module", "protectstation_module", "quarantine_module", "oxygen_module", "freeform_module", + design_ids = list("expansion_card_holder", "ai_data_core", "ai_control", "ai_server_overview", "ai_resource_distribution", "ai_memory_1", "ai_cpu_1", "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", "default_module", "borg_ai_control", "mecha_tracking_ai_control", "intellicard") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) export_price = 5000 diff --git a/html/changelogs/AutoChangelog-pr-12852.yml b/html/changelogs/AutoChangelog-pr-12852.yml new file mode 100644 index 000000000000..6633cac170a0 --- /dev/null +++ b/html/changelogs/AutoChangelog-pr-12852.yml @@ -0,0 +1,6 @@ +author: "ToasterBiome" +delete-after: true +changes: + - tweak: "AI sat airlock" + - tweak: "flip secondary ai core" + - tweak: "fix maint having an extra wall" diff --git a/html/changelogs/AutoChangelog-pr-12859.yml b/html/changelogs/AutoChangelog-pr-12859.yml new file mode 100644 index 000000000000..d4fa81424a5c --- /dev/null +++ b/html/changelogs/AutoChangelog-pr-12859.yml @@ -0,0 +1,7 @@ +author: "ToasterBiome" +delete-after: true +changes: + - bugfix: "removed extra airlock controller" + - bugfix: "moved air alarm in secondary core so it's not always angry" + - tweak: "adds lights to ai core airlock" + - bugfix: "fixes exterior airlock button opening interior airlock" diff --git a/icons/mob/screen_ai.dmi b/icons/mob/screen_ai.dmi index 8388ea3f806c..47c8ba7ad73e 100644 Binary files a/icons/mob/screen_ai.dmi and b/icons/mob/screen_ai.dmi differ diff --git a/tgui/packages/tgui/interfaces/AiControlPanel.js b/tgui/packages/tgui/interfaces/AiControlPanel.js new file mode 100644 index 000000000000..2582093c0855 --- /dev/null +++ b/tgui/packages/tgui/interfaces/AiControlPanel.js @@ -0,0 +1,164 @@ +import { Fragment } from 'inferno'; +import { useBackend, useLocalState } from '../backend'; +import { Box, Button, LabeledList, Tabs, ProgressBar, Section, Flex, Icon, NoticeBox } from '../components'; +import { Window } from '../layouts'; + +export const AiControlPanel = (props, context) => { + const { act, data } = useBackend(context); + + const { username, has_access } = data; + + const [tab, setTab] = useLocalState(context, 'tab', 1); + + return ( + + + {!!data.authenticated && ( + + + setTab(1))}> + Upload + + setTab(2))}> + Download + + + {tab === 1 && ( +
+ + + + )}> + Upload also possible by inserting an MMI or Positronic Brain + {!data.intellicard && ( + + + No IntelliCard inserted! + + + ) || ( + + {data.intellicard_ai && ( + + +
+ + +
+
+
+ ) || ( + + + Intellicard contains no AI! + + + )} +
+ )} +
+ )} + {tab === 2 && ( +
+ + + + )}> + {data.downloading && ( + + Currently downloading G2 + + + {!!data.current_ai_ref && data.current_ai_ref === data.downloading_ref && ( + + )} + + + )|| ( + + {data.ais.filter(ai => { + return !!ai.in_core; + }).map((ai, index) => { + return ( +
{ai.name} | {ai.active ? "Active" : "Inactive"})} + buttons={( + + + {!!data.is_infiltrator && !ai.being_hijacked && ( + + ) } + {!!ai.being_hijacked && ( + + )} + + )}> + Integrity: + +
+ ); + })} +
+ )} +
+ )} +
+ ) || ( +
+ + + + {data.user_image && ( + + + + + ) || ( + + )} + {username ? username : "Unknown"} + + {has_access ? "Access Granted" : "Access Denied"} + + + + + + + +
+ )} +
+
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/AiDashboard.js b/tgui/packages/tgui/interfaces/AiDashboard.js new file mode 100644 index 000000000000..37963f159e6b --- /dev/null +++ b/tgui/packages/tgui/interfaces/AiDashboard.js @@ -0,0 +1,196 @@ +import { Fragment } from 'inferno'; +import { useBackend, useLocalState } from '../backend'; +import { Box, Button, Tabs, ProgressBar, Section, Divider, LabeledControls, NumberInput } from '../components'; +import { Window } from '../layouts'; + +export const AiDashboard = (props, context) => { + const { act, data } = useBackend(context); + + + const [tab, setTab] = useLocalState(context, 'tab', 1); + const [selectedCategory, setCategory] = useLocalState(context, 'selectedCategory', data.categories[0]); + + return ( + + +
+ + + {(data.integrity + 100) * 0.5}% + + System Integrity + + + + + {data.location_name} + + ({data.location_coords}) + + + + + Current Uplink Location + + + {data.temperature}K + + Uplink Temperature + + + + + + + {data.used_cpu ? data.used_cpu : 0}/{data.current_cpu} THz + + Utilized CPU Power + + + + {data.used_ram ? data.used_ram : 0}/{data.current_ram} TB + + Utilized RAM Capacity + + +
+ + + + setTab(1))}> + Available Projects + + setTab(2))}> + Completed Projects + + setTab(3))}> + Cloud Resources + + + {tab === 1 && ( +
+ + {data.categories.map((category, index) => ( + setCategory(category))}> + {category} + + ))} + + {data.available_projects.filter(project => { + return project.category === selectedCategory; + }).map((project, index) => ( +
{project.name} | {project.available ? "Available" : "Unavailable"})} buttons={( + + Assigned CPU:  + act('allocate_cpu', { + project_name: project.name, + amount: value, + })} /> +  THz + + )}> + Research Cost: {project.research_cost} THz + RAM Requirement: {project.ram_required} TB + Research Requirements:   + {project.research_requirements} + + + {project.description} + + +
+ ))} +
+ )} + {tab === 2 && ( +
+ + {data.categories.map((category, index) => ( + setCategory(category))}> + {category} + + ))} + + {data.completed_projects.filter(project => { + return project.category === selectedCategory; + }).map((project, index) => ( +
{project.name} | {project.running ? "Running" : "Not Running"})} buttons={( + + )}> + RAM Requirement: {project.ram_required} TB + + {project.description} + +
+ ))} +
+ )} + {tab === 3 && ( +
+
+ {data.current_cpu ? data.current_cpu : 0}/{data.max_cpu} THz + +
+
+ {data.current_ram ? data.current_ram : 0 }/{data.max_ram} TB + +
+
+ )} + + +
+
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/AiResources.js b/tgui/packages/tgui/interfaces/AiResources.js new file mode 100644 index 000000000000..62f92cdb7aca --- /dev/null +++ b/tgui/packages/tgui/interfaces/AiResources.js @@ -0,0 +1,155 @@ +import { Fragment } from 'inferno'; +import { useBackend, useLocalState } from '../backend'; +import { Box, Button, LabeledList, Tabs, ProgressBar, Section, Flex, Icon, NoticeBox } from '../components'; +import { Window } from '../layouts'; + +export const AiResources = (props, context) => { + const { act, data } = useBackend(context); + + const { username, has_access } = data; + + const [tab, setTab] = useLocalState(context, 'tab', 1); + + return ( + + + {!!data.authenticated && ( + + + setTab(1))}> + Resource Allocation + + setTab(2))}> + Settings + + + {tab === 1 && ( + +
act("log_out")}>Log Out + )}> + {data.total_assigned_cpu}/{data.total_cpu} THz + +
+
+ {data.total_assigned_ram}/{data.total_ram} TB + +
+
+ + + + {data.ais.map((ai, index) => { + return ( +
act("clear_ai_resources", { targetAI: ai.ref })}>Clear AI Resources + )}> + + CPU Capacity: + + {ai.assigned_cpu} THz + +
+ ); + })} +
+
+
+ )} + {tab === 2 && ( +
+ +
+ )} + +
+ ) || ( +
+ + + + {data.user_image && ( + + + + + ) || ( + + )} + {username ? username : "Unknown"} + + {has_access ? "Access Granted" : "Access Denied"} + + + + + + + +
+ )} +
+
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/AiServerConsole.js b/tgui/packages/tgui/interfaces/AiServerConsole.js new file mode 100644 index 000000000000..5e9c2c2127bf --- /dev/null +++ b/tgui/packages/tgui/interfaces/AiServerConsole.js @@ -0,0 +1,45 @@ +import { Fragment } from 'inferno'; +import { useBackend, useLocalState } from '../backend'; +import { Box, Button, LabeledList, Tabs, ProgressBar, Section, Flex, Icon, NoticeBox } from '../components'; +import { Window } from '../layouts'; + +export const AiServerConsole = (props, context) => { + const { act, data } = useBackend(context); + + const { username, has_access } = data; + + const [tab, setTab] = useLocalState(context, 'tab', 1); + + return ( + + +
+ {data.servers.map((server, index) => { + return ( +
+ Location: {server.area} + Status: {server.working ? "ONLINE" : "OFFLINE"} + {server.temp}K + + Capacity: {server.card_capacity} cards + CPU Power: {server.total_cpu} THz + RAM Capacity: {server.ram} TB +
+ ); + })} +
+
+
+ ); +}; diff --git a/yogstation.dme b/yogstation.dme index ce9abe0f3bf7..0e964579cba9 100644 --- a/yogstation.dme +++ b/yogstation.dme @@ -2321,6 +2321,7 @@ #include "code\modules\mob\living\silicon\ai\ai_defense.dm" #include "code\modules\mob\living\silicon\ai\ai_portrait_picker.dm" #include "code\modules\mob\living\silicon\ai\death.dm" +#include "code\modules\mob\living\silicon\ai\decentralized_ai.dm" #include "code\modules\mob\living\silicon\ai\examine.dm" #include "code\modules\mob\living\silicon\ai\laws.dm" #include "code\modules\mob\living\silicon\ai\life.dm" @@ -2330,6 +2331,21 @@ #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\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\expansion_card.dm" +#include "code\modules\mob\living\silicon\ai\decentralized\expansion_card_holder.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" +#include "code\modules\mob\living\silicon\ai\decentralized\projects\_ai_project.dm" +#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\examine.dm" +#include "code\modules\mob\living\silicon\ai\decentralized\projects\firewall.dm" #include "code\modules\mob\living\silicon\ai\freelook\cameranet.dm" #include "code\modules\mob\living\silicon\ai\freelook\chunk.dm" #include "code\modules\mob\living\silicon\ai\freelook\eye.dm" diff --git a/yogstation/code/modules/antagonists/infiltrator/items/ai_hijack.dm b/yogstation/code/modules/antagonists/infiltrator/items/ai_hijack.dm index f4532b743e48..681dd4abc474 100644 --- a/yogstation/code/modules/antagonists/infiltrator/items/ai_hijack.dm +++ b/yogstation/code/modules/antagonists/infiltrator/items/ai_hijack.dm @@ -7,8 +7,10 @@ /obj/item/ai_hijack_device/examine(mob/living/user) . = ..() if (user?.mind?.has_antag_datum(/datum/antagonist/infiltrator)) - . += span_notice("To use, attach to the core of an AI unit and wait. [span_italics("This will alert the victim AI!")]") + . += span_notice("To use, insert it into an unlocked AI control console and select the AI you wish to hijack. [span_italics("This will alert the victim AI!")]") +//MIRRORED IN ai_controlpanel.dm !!! +/* /obj/item/ai_hijack_device/afterattack(atom/O, mob/user, proximity) if(isAI(O)) var/mob/living/silicon/ai/A = O @@ -38,3 +40,4 @@ notify_ghosts("[user] has begun to hijack [A]!", source = A, action = NOTIFY_ORBIT, ghost_sound = 'sound/machines/chime.ogg') else return ..() +*/ diff --git a/yogstation/code/modules/mob/living/silicon/ai/ai.dm b/yogstation/code/modules/mob/living/silicon/ai/ai.dm index 4cb178525cc3..b9509a2d9ba8 100644 --- a/yogstation/code/modules/mob/living/silicon/ai/ai.dm +++ b/yogstation/code/modules/mob/living/silicon/ai/ai.dm @@ -5,8 +5,12 @@ /mob/living/silicon/ai/proc/set_core_display_icon_yogs(input) var/datum/ai_skin/S = input - icon = S.icon - icon_state = S.icon_state + + for (var/each in GLOB.ai_core_displays) //change status of displays + var/obj/machinery/status_display/ai_core/M = each + M.set_ai(S.icon_state, S.icon) + M.update() + /mob/living/silicon/ai/attack_hand(mob/user) if(hijacking)