From 465cc3cccb13423c6d8094b35d348b1bca9f3666 Mon Sep 17 00:00:00 2001 From: PowerfulBacon <26465327+PowerfulBacon@users.noreply.github.com> Date: Fri, 30 Aug 2024 19:49:37 +0100 Subject: [PATCH] Squashed commit of the following: commit 18bbae7148b35987dd90e49105d1273784c053e8 Author: PowerfulBacon <26465327+PowerfulBacon@users.noreply.github.com> Date: Fri Aug 30 19:49:01 2024 +0100 Allows disposals to end in delivery office commit 565af663a73daabddf3d6fc6a4e2371c4c696a35 Author: PowerfulBacon <26465327+PowerfulBacon@users.noreply.github.com> Date: Fri Aug 30 19:09:53 2024 +0100 Merges 2 files together commit 195fa7cc9887ab2ea672aebfa008725f8a415732 Author: PowerfulBacon <26465327+PowerfulBacon@users.noreply.github.com> Date: Fri Aug 30 18:58:57 2024 +0100 Adds in mapping helpers for disposals commit 611dd96c91eeaeb6815bbae1d347e5db2b2934a2 Author: ss13-beebot <56381746+ss13-beebot@users.noreply.github.com> Date: Fri Aug 30 00:12:46 2024 +0000 Automatic changelog compile [ci skip] commit 522552aab205cd9e2878cd29d28e023d5bc8e762 Author: ss13-beebot <56381746+ss13-beebot@users.noreply.github.com> Date: Thu Aug 29 18:03:54 2024 +0000 Automatic changelog compile [ci skip] commit 1f5a444a9e512216882fdb71e518ca5262e6f16e Author: ss13-beebot <56381746+ss13-beebot@users.noreply.github.com> Date: Thu Aug 29 12:28:03 2024 -0500 Automatic changelog generation for PR #11366 [ci skip] commit c05a8ee2d98373918a7bb43fb1f834e91eed5df4 Author: Rukofamicom Date: Thu Aug 29 12:18:22 2024 -0500 Gibtonite flashes again (#11366) commit af85a212a6cfe674ea0e5f52269a2d59f7c0fa85 Author: ss13-beebot <56381746+ss13-beebot@users.noreply.github.com> Date: Thu Aug 29 17:03:19 2024 +0000 Automatic changelog compile [ci skip] commit 000ed5cf7649a074a3431397177fc496aa62e058 Author: ss13-beebot <56381746+ss13-beebot@users.noreply.github.com> Date: Thu Aug 29 11:23:27 2024 -0500 Automatic changelog generation for PR #10983 [ci skip] commit fd1e700cc41fb608dc3ec722a534c3dced7d1dab Author: Dejaku51 <40302913+Dejaku51@users.noreply.github.com> Date: Thu Aug 29 18:13:47 2024 +0200 Server framework v2 (#10983) * i don't remember what is happening * much better * just debug stuff * the ideas are coming * that shouldn't be here * it works now! * RnD servers integrated * sparks! * no more "if true return true" * reverse logic * adds ! to comments in stat.dm * clean up after yourself on Destroy() * splits early return * clean up after yourself tcomm monitoring * you too all tcomms machines * adds type holder instead of GetComponents * fix indentation * cmon indentation * HOW?! * oopsie woopsie * removes TODO and adds a comment * packet types and null on destroy * update comment * fixed radstation tcomms area + switches hub with blackbox * rebalances tcomms heat generation * fix echo tcomms cooling * that should stop funny exploit discovered by aramix * cooldown define * remove useless signal * opened machine is under maintenance * return null instead of 0 points * return false * I HATE TESTS commit 79ee7538ea52c517309af9fea10990b47aecd0c4 Author: ss13-beebot <56381746+ss13-beebot@users.noreply.github.com> Date: Thu Aug 29 00:12:28 2024 +0000 Automatic changelog compile [ci skip] commit f4028a7a2025234d4b5d9751544ce8ec240d6051 Author: ss13-beebot <56381746+ss13-beebot@users.noreply.github.com> Date: Wed Aug 28 16:03:51 2024 +0000 Automatic changelog compile [ci skip] commit ded9e053ef45ff46398ef5bee5e3b9ccbf46116a Author: ss13-beebot <56381746+ss13-beebot@users.noreply.github.com> Date: Wed Aug 28 10:18:28 2024 -0500 Automatic changelog generation for PR #11373 [ci skip] commit c95ed70fd70701b573b4da90314df2d6c2c1ffd6 Author: ClownMoff <148357670+ClownMoff@users.noreply.github.com> Date: Wed Aug 28 15:59:25 2024 +0100 Update cigarette.dm (#11373) commit a251e91529fba7328066c1f07572f1393a93bc39 Author: ss13-beebot <56381746+ss13-beebot@users.noreply.github.com> Date: Wed Aug 28 10:08:53 2024 -0500 Automatic changelog generation for PR #11387 [ci skip] commit 61b21cc07df7ed6b0baac6d0458f81c93bd3cbba Author: XeonMations <62395746+XeonMations@users.noreply.github.com> Date: Wed Aug 28 17:58:39 2024 +0300 Fixes simplemobs being able to interact with machinery (#11387) * another PR, another banger * comment moment commit 1cf494144d21689452b455484893fb275f364fb3 Author: Markus Larsson <82539179+MarkusLarsson421@users.noreply.github.com> Date: Tue Aug 27 13:17:12 2024 +0200 Delta Science Doors Fix (#11303) * Silly goose didn't use the "txt" var. * Update DeltaStation2.dmm * Update DeltaStation2.dmm * Update DeltaStation2.dmm commit ceee177c04241c34ddced7884f977e485d30b5a4 Author: PowerfulBacon <26465327+PowerfulBacon@users.noreply.github.com> Date: Tue Aug 27 11:35:01 2024 +0100 Boxstation mapping fixes #11364 (#11368) * Fixes 89,129 * Update BoxStation.dmm * Update BoxStation.dmm * Camera fixes * Adds in an unsorted loop to the boxstation package loop * Fixes direction of the sorting pipe * Fixes boxstation disposal issues * Fixes cameras * Fixes multiple objects stacked on top of each other * Fixes some lights placed on windows * Fixes all boxstation light issues * Update BoxStation.dmm * Fixes some lights placed on windows * Fixes all boxstation light issues commit 8d8f3f8eae4fd759ca8f55c0bb05560b87ba5476 Author: ss13-beebot <56381746+ss13-beebot@users.noreply.github.com> Date: Tue Aug 27 00:12:25 2024 +0000 Automatic changelog compile [ci skip] commit ff2162b9e0cfce9b154d7bbb171ebf7ee3f554a7 Author: ss13-beebot <56381746+ss13-beebot@users.noreply.github.com> Date: Mon Aug 26 18:11:15 2024 -0500 Automatic changelog generation for PR #11385 [ci skip] commit d1c6236fb6a10f503bec1e94d4763a988276558d Author: XeonMations <62395746+XeonMations@users.noreply.github.com> Date: Tue Aug 27 02:01:44 2024 +0300 Fuck ups of the year. (#11385) --- _maps/map_files/BoxStation/BoxStation.dmm | 608 +++++++++++------- .../map_files/Deltastation/DeltaStation2.dmm | 53 +- _maps/map_files/EchoStation/EchoStation.dmm | 4 +- _maps/map_files/RadStation/RadStation.dmm | 240 +++---- .../exploration/exploration_shuttle.dmm | 4 +- beestation.dme | 2 + .../signals_machine/signals_machinery.dm | 2 + code/__DEFINES/networks.dm | 4 + code/__DEFINES/pipe_construction.dm | 157 +++++ code/__DEFINES/stat.dm | 10 +- code/_globalvars/lists/flavor_misc.dm | 117 ---- .../subsystem/processing/servers.dm | 4 + code/controllers/subsystem/research.dm | 12 +- code/datums/components/ntnet_interface.dm | 2 +- code/datums/components/server.dm | 72 +++ code/game/machinery/_machinery.dm | 4 +- .../telecomms/computers/telemonitor.dm | 177 ++--- .../telecomms/machine_interactions.dm | 1 + .../telecomms/machines/broadcaster.dm | 4 +- code/game/machinery/telecomms/machines/bus.dm | 3 +- code/game/machinery/telecomms/machines/hub.dm | 3 +- .../telecomms/machines/message_server.dm | 2 +- .../machinery/telecomms/machines/processor.dm | 3 +- .../machinery/telecomms/machines/receiver.dm | 3 +- .../machinery/telecomms/machines/relay.dm | 3 +- .../machinery/telecomms/machines/server.dm | 3 +- .../machinery/telecomms/telecomunications.dm | 62 +- code/modules/mob/dead/observer/observer.dm | 2 +- code/modules/power/power.dm | 3 +- code/modules/research/server.dm | 146 ++--- code/modules/vending/cigarette.dm | 1 + html/changelog.html | 87 +-- html/changelogs/.all_changelog.yml | 17 + icons/turf/smoothrocks.dmi | Bin 3876 -> 3872 bytes tgui/packages/tgui/interfaces/Telemonitor.tsx | 79 +++ 35 files changed, 1086 insertions(+), 808 deletions(-) create mode 100644 code/controllers/subsystem/processing/servers.dm create mode 100644 code/datums/components/server.dm create mode 100644 tgui/packages/tgui/interfaces/Telemonitor.tsx diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm index b42aad1f36026..7a73b04e23595 100644 --- a/_maps/map_files/BoxStation/BoxStation.dmm +++ b/_maps/map_files/BoxStation/BoxStation.dmm @@ -4326,8 +4326,8 @@ /turf/open/floor/iron/freezer, /area/crew_quarters/toilet/locker) "aYf" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/structure/disposalpipe/junction/flip{ + dir = 8 }, /turf/open/floor/plating, /area/maintenance/port) @@ -4847,6 +4847,9 @@ /obj/item/clothing/head/soft/rainbow, /obj/item/clothing/shoes/sneakers/rainbow, /obj/item/clothing/under/color/rainbow, +/obj/structure/disposalpipe/segment{ + dir = 1 + }, /turf/open/floor/plating, /area/maintenance/port) "bee" = ( @@ -4926,6 +4929,24 @@ /obj/machinery/light, /turf/open/floor/iron, /area/hallway/primary/starboard) +"beF" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/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" + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/turf/open/floor/plating, +/area/maintenance/fore) "beM" = ( /obj/structure/chair{ dir = 1 @@ -5182,7 +5203,9 @@ /turf/open/floor/iron, /area/quartermaster/office) "bgB" = ( -/obj/structure/disposalpipe/segment, +/obj/structure/disposalpipe/sorting/unsorted/flip{ + dir = 1 + }, /turf/closed/wall, /area/quartermaster/sorting) "bgF" = ( @@ -5218,9 +5241,6 @@ /area/engine/gravity_generator) "bgZ" = ( /obj/machinery/stasis, -/obj/machinery/light{ - dir = 1 - }, /obj/effect/turf_decal/tile/blue{ dir = 4 }, @@ -5231,6 +5251,9 @@ /obj/effect/turf_decal/tile/blue{ dir = 4 }, +/obj/machinery/light{ + dir = 1 + }, /turf/open/floor/iron/white, /area/medical/sleeper) "bhh" = ( @@ -6517,12 +6540,10 @@ "bqR" = ( /obj/structure/table/glass, /obj/item/storage/backpack/duffelbag/med/surgery, -/obj/machinery/light{ - dir = 8 - }, /obj/effect/turf_decal/tile/blue{ dir = 8 }, +/obj/machinery/light/small/directional/south, /turf/open/floor/iron/white, /area/medical/sleeper) "bqS" = ( @@ -8042,6 +8063,9 @@ dir = 4 }, /obj/effect/turf_decal/stripes/corner, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, /turf/open/floor/iron, /area/science/mixing) "bHv" = ( @@ -8108,7 +8132,6 @@ dir = 1 }, /obj/item/kirbyplants/random, -/obj/machinery/camera/directional/north, /turf/open/floor/iron, /area/hallway/secondary/entry) "bIm" = ( @@ -8538,7 +8561,7 @@ dir = 4 }, /obj/machinery/camera/preset/toxins{ - dir = 8 + dir = 4 }, /turf/open/floor/plating{ initial_gas_mix = "o2=0.01;n2=0.01;TEMP=293.15"; @@ -10595,17 +10618,6 @@ }, /turf/open/floor/iron, /area/engine/atmos) -"bWU" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 4 - }, -/turf/open/floor/iron/dark/side{ - dir = 4 - }, -/area/engine/atmos) "bWX" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable/yellow{ @@ -11674,9 +11686,6 @@ /turf/open/floor/engine/co2, /area/engine/atmos) "ccE" = ( -/obj/structure/disposalpipe/segment{ - dir = 5 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 5 }, @@ -11978,9 +11987,6 @@ /turf/open/floor/iron/white, /area/science/robotics/lab) "ceB" = ( -/obj/machinery/light{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/cyan/visible{ dir = 6 }, @@ -12009,9 +12015,6 @@ /turf/open/floor/iron/dark, /area/hallway/secondary/command) "ceI" = ( -/obj/structure/disposalpipe/segment{ - dir = 10 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 10 }, @@ -12654,7 +12657,6 @@ /turf/open/floor/iron, /area/hallway/primary/central) "cjA" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /turf/open/floor/iron/white, @@ -13308,6 +13310,10 @@ /obj/machinery/atmospherics/pipe/simple/cyan/visible{ dir = 4 }, +/obj/machinery/power/apc/auto_name/directional/south{ + areastring = "/area/engine/supermatter" + }, +/obj/structure/cable/yellow, /turf/open/floor/engine, /area/engine/engineering) "cqj" = ( @@ -15547,6 +15553,9 @@ /obj/machinery/atmospherics/pipe/manifold/cyan/visible{ dir = 1 }, +/obj/machinery/camera/autoname/directional/north{ + network = list("ss13","engine") + }, /turf/open/floor/engine, /area/engine/engineering) "cFR" = ( @@ -16185,6 +16194,21 @@ }, /turf/open/floor/iron/dark, /area/ai_monitored/storage/eva) +"cLh" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/turf/open/floor/engine, +/area/engine/engineering) "cLp" = ( /obj/structure/railing{ dir = 8 @@ -16206,6 +16230,9 @@ }, /obj/structure/disposalpipe/segment, /obj/effect/spawner/lootdrop/grille_or_trash, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, /turf/open/floor/plating, /area/maintenance/fore/secondary) "cMm" = ( @@ -16771,9 +16798,7 @@ /turf/open/floor/engine, /area/science/explab) "cWC" = ( -/obj/machinery/airalarm/directional/east{ - pixel_x = 24 - }, +/obj/machinery/airalarm/directional/east, /obj/effect/turf_decal/tile/yellow/half/contrasted, /obj/structure/closet/secure_closet/engineering_personal, /turf/open/floor/iron, @@ -17367,12 +17392,6 @@ /obj/machinery/status_display/evac{ pixel_x = 32 }, -/obj/machinery/status_display/evac{ - pixel_x = 32 - }, -/obj/machinery/status_display/evac{ - pixel_x = 32 - }, /turf/open/floor/iron/cafeteria_red, /area/crew_quarters/bar) "dmK" = ( @@ -17740,12 +17759,17 @@ name = "Dormitories Maintenance"; req_access_txt = "12" }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, /turf/open/floor/plating, /area/maintenance/fore/secondary) "dvS" = ( /obj/machinery/atmospherics/pipe/simple/yellow/visible{ dir = 4 }, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable/yellow, /turf/open/floor/plating, /area/maintenance/aft) "dvV" = ( @@ -19414,9 +19438,6 @@ /turf/open/floor/iron/dark, /area/ai_monitored/turret_protected/aisat/hallway) "ede" = ( -/obj/machinery/light{ - dir = 4 - }, /obj/effect/turf_decal/tile/blue/opposingcorners{ dir = 1 }, @@ -19654,6 +19675,7 @@ /obj/effect/turf_decal/tile/brown/anticorner/contrasted{ dir = 1 }, +/obj/machinery/light/small/directional/north, /turf/open/floor/iron, /area/quartermaster/qm) "eiC" = ( @@ -20175,9 +20197,6 @@ "etZ" = ( /obj/structure/table/glass, /obj/item/storage/belt/medical, -/obj/machinery/light{ - dir = 8 - }, /obj/item/storage/box/medipens, /obj/effect/turf_decal/tile/blue{ dir = 8 @@ -20969,6 +20988,24 @@ }, /turf/open/floor/iron, /area/engine/engineering) +"eKr" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/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 = "2-4" + }, +/turf/open/floor/plating, +/area/maintenance/aft) "eLa" = ( /obj/machinery/door/poddoor/preopen{ id = "bridgeentrance"; @@ -21078,6 +21115,9 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 8 }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, /turf/open/floor/plating, /area/maintenance/fore/secondary) "eMZ" = ( @@ -21761,6 +21801,21 @@ }, /turf/open/floor/iron, /area/security/courtroom) +"faE" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/plating, +/area/maintenance/port) "fbS" = ( /obj/structure/table, /obj/item/storage/box/chemimp{ @@ -21990,6 +22045,9 @@ /obj/structure/cable/yellow{ icon_state = "2-4" }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, /turf/open/floor/iron, /area/crew_quarters/dorms) "fhv" = ( @@ -22144,9 +22202,6 @@ /turf/open/floor/iron/grid/steel, /area/gateway) "fkv" = ( -/obj/structure/disposalpipe/segment{ - dir = 5 - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 1 @@ -22154,6 +22209,9 @@ /obj/structure/cable/yellow{ icon_state = "1-2" }, +/obj/structure/disposalpipe/junction{ + dir = 1 + }, /turf/open/floor/plating, /area/maintenance/port) "fkM" = ( @@ -22421,7 +22479,6 @@ /area/library) "fsG" = ( /obj/structure/bed/roller, -/obj/structure/bed/roller, /obj/machinery/light, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 9 @@ -22785,6 +22842,7 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 4 }, +/obj/machinery/light/small/directional/north, /turf/open/floor/iron/freezer, /area/crew_quarters/toilet) "fBh" = ( @@ -23519,11 +23577,11 @@ /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ - dir = 8 +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 }, /obj/structure/disposalpipe/segment{ - dir = 6 + dir = 4 }, /turf/open/floor/iron, /area/crew_quarters/fitness) @@ -23682,7 +23740,6 @@ /turf/open/floor/iron, /area/science/storage) "fUY" = ( -/obj/machinery/light/small, /obj/machinery/advanced_airlock_controller{ pixel_y = 24 }, @@ -23692,6 +23749,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 8 }, +/obj/machinery/light/small/directional/north, /turf/open/floor/catwalk_floor, /area/hallway/secondary/exit) "fVk" = ( @@ -24383,12 +24441,10 @@ /area/maintenance/starboard/aft) "gkL" = ( /obj/machinery/washing_machine, -/obj/machinery/light/small{ - dir = 4 - }, /obj/effect/turf_decal/stripes/line{ dir = 5 }, +/obj/machinery/light/small/directional/west, /turf/open/floor/iron/freezer, /area/crew_quarters/toilet) "gkT" = ( @@ -24559,6 +24615,12 @@ }, /turf/open/floor/prison, /area/security/prison) +"goV" = ( +/obj/machinery/camera/directional/north{ + network = list("ss13","rd") + }, +/turf/open/floor/engine, +/area/science/explab) "goW" = ( /obj/machinery/airalarm/directional/north, /turf/open/floor/plating, @@ -24801,6 +24863,18 @@ }, /turf/open/floor/carpet, /area/hallway/secondary/entry) +"gtR" = ( +/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 = "2-8" + }, +/turf/open/floor/plating, +/area/maintenance/fore/secondary) "gui" = ( /obj/structure/cable/yellow{ icon_state = "1-2" @@ -25137,11 +25211,7 @@ dir = 4; pixel_x = -24 }, -/obj/structure/sink{ - dir = 8; - pixel_x = -12; - pixel_y = 2 - }, +/obj/effect/turf_decal/loading_area, /turf/open/floor/iron/white, /area/medical/virology) "gCm" = ( @@ -25272,6 +25342,9 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 8 }, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, /turf/open/floor/iron, /area/science/mixing) "gEs" = ( @@ -25688,6 +25761,18 @@ "gQd" = ( /turf/closed/wall, /area/quartermaster/exploration_dock) +"gQG" = ( +/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/plating, +/area/maintenance/fore/secondary) "gQJ" = ( /obj/machinery/power/solar{ id = "portsolar"; @@ -25978,6 +26063,9 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 8 }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, /turf/open/floor/iron, /area/science/mixing) "gZG" = ( @@ -26586,6 +26674,12 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 9 }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, /turf/open/floor/iron, /area/crew_quarters/dorms) "hnD" = ( @@ -27979,6 +28073,9 @@ dir = 8 }, /obj/effect/decal/cleanable/dirt, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, /turf/open/floor/plating, /area/maintenance/fore/secondary) "hRX" = ( @@ -29091,9 +29188,6 @@ /turf/open/floor/plating, /area/maintenance/starboard/fore) "imi" = ( -/obj/machinery/light/small{ - dir = 1 - }, /obj/machinery/advanced_airlock_controller{ dir = 1; pixel_y = -24 @@ -29104,6 +29198,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 8 }, +/obj/machinery/light/small/directional/south, /turf/open/floor/catwalk_floor, /area/hallway/secondary/exit) "imn" = ( @@ -30497,6 +30592,9 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, /turf/open/floor/plating, /area/maintenance/fore/secondary) "iRw" = ( @@ -30659,8 +30757,26 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted{ dir = 4 }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, /turf/open/floor/iron, /area/crew_quarters/dorms) +"iVk" = ( +/obj/structure/disposalpipe/segment{ + dir = 1 + }, +/obj/structure/barricade/wooden/crude, +/obj/machinery/door/airlock/maintenance{ + id_tag = "commissarydoor"; + req_one_access_txt = "12;63;48;50" + }, +/obj/effect/mapping_helpers/airlock/abandoned, +/turf/open/floor/plating, +/area/maintenance/port) "iVN" = ( /obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 1 @@ -31373,6 +31489,12 @@ }, /turf/open/floor/iron, /area/crew_quarters/dorms) +"jlW" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/open/floor/plating, +/area/maintenance/aft) "jmC" = ( /obj/structure/table, /obj/item/crowbar/large, @@ -31477,9 +31599,6 @@ pixel_x = -5; pixel_y = 30 }, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 10 }, @@ -31584,16 +31703,6 @@ }, /turf/open/floor/wood, /area/crew_quarters/heads/captain) -"jsS" = ( -/obj/structure/chair, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/open/floor/iron, -/area/hallway/secondary/exit) "jsT" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -31725,12 +31834,10 @@ /obj/structure/cable/yellow{ icon_state = "1-8" }, -/obj/structure/disposalpipe/sorting/mail{ - sortType = 24 - }, /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ dir = 4 }, +/obj/structure/disposalpipe/junction, /turf/open/floor/iron/white/side{ dir = 4 }, @@ -32529,6 +32636,9 @@ /obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ dir = 4 }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, /turf/open/floor/iron, /area/crew_quarters/dorms) "jMr" = ( @@ -32755,6 +32865,9 @@ /area/engine/atmos) "jRJ" = ( /obj/machinery/vending/boozeomat, +/obj/machinery/light{ + dir = 4 + }, /turf/open/floor/iron/cafeteria_red, /area/crew_quarters/bar) "jSj" = ( @@ -32940,9 +33053,6 @@ /turf/open/floor/plating, /area/ai_monitored/turret_protected/aisat/hallway) "jVS" = ( -/obj/machinery/light{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 9 }, @@ -34177,6 +34287,12 @@ }, /turf/open/floor/iron/dark/telecomms, /area/science/server) +"kzn" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/plating, +/area/maintenance/port) "kzD" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/machinery/door/firedoor, @@ -35021,9 +35137,6 @@ /obj/effect/turf_decal/tile/blue/opposingcorners{ dir = 1 }, -/obj/machinery/light{ - dir = 1 - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, @@ -35244,6 +35357,9 @@ /area/chapel/office) "kUw" = ( /obj/machinery/atmospherics/pipe/simple/cyan/visible, +/obj/machinery/light{ + dir = 4 + }, /turf/open/floor/iron/dark/side{ dir = 4 }, @@ -35348,12 +35464,7 @@ /turf/open/floor/iron/white, /area/medical/genetics) "kWa" = ( -/obj/structure/disposaloutlet, /obj/structure/disposalpipe/segment, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 5 }, @@ -36118,6 +36229,9 @@ }, /obj/structure/disposalpipe/segment, /obj/effect/decal/cleanable/dirt, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, /turf/open/floor/plating, /area/maintenance/fore/secondary) "lnP" = ( @@ -36327,6 +36441,9 @@ name = "Security Junction"; sortType = 7 }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, /turf/open/floor/plating, /area/maintenance/fore/secondary) "lrg" = ( @@ -36456,6 +36573,10 @@ pixel_x = 24; req_access_txt = "39" }, +/obj/structure/sink{ + dir = 4; + pixel_x = 11 + }, /turf/open/floor/iron/white, /area/medical/virology) "lvx" = ( @@ -36986,12 +37107,6 @@ }, /turf/open/floor/iron, /area/hallway/primary/aft) -"lFf" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/open/floor/iron/cafeteria_red, -/area/crew_quarters/bar) "lFJ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 8 @@ -39064,12 +39179,6 @@ }, /turf/closed/wall, /area/maintenance/starboard/aft) -"mHc" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "mHx" = ( /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating, @@ -39577,6 +39686,13 @@ }, /turf/open/floor/iron, /area/medical/genetics) +"mUT" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/machinery/camera/directional/south, +/turf/open/floor/iron/white/corner, +/area/hallway/secondary/entry) "mUU" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 8 @@ -40147,6 +40263,9 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 1 }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, /turf/open/floor/iron, /area/hallway/primary/fore) "nfd" = ( @@ -40512,7 +40631,6 @@ pixel_x = -22; pixel_y = 1 }, -/obj/effect/turf_decal/loading_area, /obj/machinery/airalarm/directional/west{ pixel_x = -32 }, @@ -40824,6 +40942,9 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ dir = 4 }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, /turf/open/floor/iron, /area/crew_quarters/dorms) "nuK" = ( @@ -41568,8 +41689,7 @@ /turf/open/floor/wood, /area/library) "nJp" = ( -/obj/machinery/camera/autoname/directional/east, -/obj/effect/turf_decal/tile/dark_blue/half/contrasted, +/obj/machinery/camera/directional/east, /turf/open/floor/iron, /area/hallway/primary/central) "nJq" = ( @@ -41622,6 +41742,7 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{ dir = 8 }, +/obj/machinery/light/directional/west, /turf/open/floor/iron/dark/side{ dir = 8 }, @@ -41903,6 +42024,9 @@ dir = 6 }, /obj/structure/disposalpipe/segment, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, /turf/open/floor/plating, /area/maintenance/fore/secondary) "nQy" = ( @@ -42287,6 +42411,9 @@ pixel_x = -4; pixel_y = -3 }, +/obj/machinery/light{ + dir = 8 + }, /turf/open/floor/iron/white, /area/medical/sleeper) "nYz" = ( @@ -44074,6 +44201,9 @@ dir = 8 }, /obj/effect/decal/cleanable/dirt, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, /turf/open/floor/plating, /area/maintenance/fore/secondary) "oPg" = ( @@ -45254,6 +45384,9 @@ /obj/structure/cable/yellow{ icon_state = "1-4" }, +/obj/structure/disposalpipe/segment{ + dir = 1 + }, /turf/open/floor/plating, /area/maintenance/port) "prA" = ( @@ -45407,7 +45540,6 @@ pixel_y = -24 }, /obj/structure/cable/yellow, -/obj/machinery/light, /obj/structure/table/glass, /obj/item/reagent_containers/glass/beaker/cryoxadone, /obj/item/reagent_containers/glass/beaker/cryoxadone{ @@ -45947,6 +46079,9 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ dir = 4 }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, /turf/open/floor/iron, /area/hallway/primary/fore) "pEC" = ( @@ -46316,9 +46451,6 @@ /obj/machinery/airalarm/directional/north{ pixel_y = 23 }, -/obj/machinery/light{ - dir = 1 - }, /obj/effect/turf_decal/tile/blue{ dir = 4 }, @@ -46647,8 +46779,8 @@ /turf/open/floor/iron, /area/security/brig) "pVb" = ( -/obj/structure/disposalpipe/junction/yjunction{ - dir = 4 +/obj/structure/disposalpipe/segment{ + dir = 6 }, /turf/closed/wall, /area/quartermaster/sorting) @@ -46728,6 +46860,9 @@ /obj/effect/turf_decal/stripes/closeup{ dir = 1 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/iron, /area/crew_quarters/dorms) "pWy" = ( @@ -47214,6 +47349,9 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ dir = 8 }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, /turf/open/floor/iron, /area/crew_quarters/dorms) "qkq" = ( @@ -47467,9 +47605,6 @@ id = "quarantineshutters"; name = "isolation shutters" }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /turf/open/floor/iron/white, /area/medical/virology) "qqM" = ( @@ -47849,9 +47984,6 @@ /obj/machinery/computer/cargo{ dir = 4 }, -/obj/machinery/light{ - dir = 8 - }, /obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 1 }, @@ -48664,9 +48796,6 @@ /turf/open/floor/iron, /area/security/brig) "qSx" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ dir = 1 }, @@ -49172,9 +49301,6 @@ /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /turf/open/floor/iron, /area/crew_quarters/fitness) "rcC" = ( @@ -49915,6 +50041,7 @@ /obj/effect/turf_decal/tile/blue{ dir = 4 }, +/obj/machinery/camera/autoname/directional/north, /turf/open/floor/iron/white/corner{ dir = 1 }, @@ -50772,6 +50899,9 @@ dir = 1 }, /obj/structure/disposalpipe/segment, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, /turf/open/floor/plating, /area/maintenance/fore/secondary) "rHU" = ( @@ -51140,9 +51270,12 @@ /turf/open/floor/catwalk_floor/iron, /area/engine/gravity_generator) "rPX" = ( -/obj/structure/disposalpipe/segment, -/turf/closed/wall, -/area/maintenance/port) +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/turf/open/floor/plating, +/area/maintenance/fore) "rQp" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/closet/firecloset, @@ -51261,12 +51394,13 @@ /turf/open/floor/iron, /area/science/explab) "rRQ" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 +/obj/effect/turf_decal/tile/brown{ + dir = 8 }, -/obj/machinery/camera/directional/north, +/obj/structure/disposalpipe/segment, +/obj/machinery/camera/autoname/directional/west, /turf/open/floor/iron, -/area/hallway/primary/port) +/area/hallway/primary/central) "rRU" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -51382,6 +51516,8 @@ dir = 8 }, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk, /turf/open/floor/iron, /area/science/mixing) "rUj" = ( @@ -51484,6 +51620,9 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ dir = 1 }, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, /turf/open/floor/iron, /area/crew_quarters/dorms) "rWK" = ( @@ -54025,7 +54164,6 @@ /obj/effect/turf_decal/stripes/line{ dir = 5 }, -/obj/machinery/camera/autoname/directional/east, /turf/open/floor/iron/dark/side{ dir = 4 }, @@ -54552,15 +54690,6 @@ }, /turf/open/floor/iron/cafeteria, /area/crew_quarters/kitchen) -"thV" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/medical/sleeper) "thW" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ @@ -54585,6 +54714,12 @@ }, /turf/open/floor/iron/white, /area/medical/chemistry) +"tiP" = ( +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/turf/open/floor/plating, +/area/maintenance/fore/secondary) "tjb" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable/yellow{ @@ -55371,7 +55506,12 @@ dir = 1 }, /obj/effect/turf_decal/tile/neutral/anticorner/contrasted, -/turf/open/floor/iron, +/obj/machinery/disposal/bin, +/obj/effect/turf_decal/delivery, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/turf/open/floor/iron/dark, /area/crew_quarters/dorms) "tAf" = ( /obj/machinery/light/small, @@ -55493,9 +55633,6 @@ /obj/machinery/atmospherics/pipe/simple/cyan/visible{ dir = 4 }, -/obj/machinery/camera/autoname/directional/north{ - network = list("ss13","engine") - }, /turf/open/floor/iron/dark, /area/engine/engineering) "tCh" = ( @@ -55613,12 +55750,6 @@ pixel_x = -31 }, /obj/item/clothing/head/utility/hardhat/cakehat, -/obj/machinery/computer/security/telescreen/entertainment{ - pixel_x = -31 - }, -/obj/machinery/computer/security/telescreen/entertainment{ - pixel_x = -31 - }, /turf/open/floor/iron/cafeteria_red, /area/crew_quarters/bar) "tEr" = ( @@ -56597,7 +56728,6 @@ /turf/open/floor/iron, /area/engine/engineering) "tYh" = ( -/obj/machinery/light, /obj/machinery/atmospherics/components/binary/pump/on{ dir = 1; name = "N2 Outlet Pump" @@ -56664,6 +56794,9 @@ /obj/machinery/light_switch{ pixel_x = -28 }, +/obj/machinery/light{ + dir = 8 + }, /turf/open/floor/iron/white, /area/medical/sleeper) "tZA" = ( @@ -56719,12 +56852,12 @@ /turf/open/floor/iron/dark, /area/science/nanite) "ubL" = ( -/obj/machinery/camera/autoname/directional/east, -/obj/machinery/camera/autoname/directional/east, -/turf/open/floor/iron/white/side{ - dir = 9 +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/area/science/research) +/obj/machinery/camera/directional/south, +/turf/open/floor/iron, +/area/hallway/primary/port) "ubO" = ( /obj/structure/cable/yellow{ icon_state = "1-2" @@ -56755,12 +56888,10 @@ /turf/open/floor/wood, /area/security/detectives_office) "ucv" = ( -/obj/effect/turf_decal/delivery, -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk{ - dir = 1 +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 8 }, -/turf/open/floor/iron/dark, +/turf/open/floor/iron, /area/crew_quarters/fitness) "ucP" = ( /obj/effect/turf_decal/tile/blue{ @@ -56969,6 +57100,9 @@ dir = 1 }, /obj/effect/turf_decal/stripes/closeup, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, /turf/open/floor/iron, /area/crew_quarters/dorms) "ugE" = ( @@ -57949,9 +58083,6 @@ /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, /obj/machinery/light/small{ dir = 1 }, @@ -58151,6 +58282,9 @@ /obj/structure/sign/departments/minsky/engineering/atmospherics{ pixel_y = -32 }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, /turf/open/floor/plating, /area/maintenance/fore/secondary) "uJd" = ( @@ -59372,6 +59506,9 @@ dir = 8 }, /obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, /turf/open/floor/iron, /area/science/mixing) "vmB" = ( @@ -59746,6 +59883,13 @@ /obj/machinery/airalarm/directional/east, /turf/open/floor/iron/dark, /area/hydroponics) +"vvL" = ( +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/machinery/power/apc/auto_name/directional/east, +/turf/open/floor/plating, +/area/maintenance/fore/secondary) "vvN" = ( /obj/structure/tank_dispenser/oxygen, /obj/effect/turf_decal/tile/neutral/fourcorners/contrasted, @@ -60681,11 +60825,13 @@ /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 1 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/disposalpipe/sorting/mail/flip{ + sortType = 24 + }, /turf/open/floor/iron, /area/science/mixing) "vTj" = ( @@ -60739,15 +60885,14 @@ /turf/open/floor/iron/cafeteria_red, /area/crew_quarters/bar) "vTI" = ( -/obj/machinery/camera/directional/north, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 8 +/obj/effect/turf_decal/tile/blue{ + dir = 4 }, -/obj/effect/turf_decal/trimline/dark_blue/filled/line{ +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/iron/white/corner{ dir = 1 }, -/turf/open/floor/iron/dark, -/area/hallway/primary/central) +/area/hallway/secondary/entry) "vUe" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ @@ -61011,7 +61156,7 @@ /obj/structure/disposalpipe/segment{ dir = 5 }, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ +/obj/effect/turf_decal/tile/neutral/half/contrasted{ dir = 8 }, /turf/open/floor/iron, @@ -61765,6 +61910,9 @@ /obj/structure/cable/yellow{ icon_state = "4-8" }, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, /turf/open/floor/iron, /area/crew_quarters/dorms) "wph" = ( @@ -61871,9 +62019,6 @@ /turf/open/floor/plating, /area/maintenance/port) "wrE" = ( -/obj/machinery/light{ - dir = 4 - }, /obj/effect/turf_decal/tile/green/anticorner/contrasted{ dir = 4 }, @@ -61909,7 +62054,6 @@ "wti" = ( /obj/effect/turf_decal/stripes/line, /obj/item/kirbyplants/random, -/obj/machinery/camera/autoname/directional/south, /turf/open/floor/iron, /area/hallway/secondary/entry) "wts" = ( @@ -62050,6 +62194,12 @@ }, /turf/open/floor/iron, /area/crew_quarters/dorms) +"wvP" = ( +/obj/structure/disposalpipe/segment{ + dir = 1 + }, +/turf/open/floor/plating, +/area/maintenance/port) "wvY" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ dir = 4 @@ -63124,9 +63274,10 @@ /turf/open/floor/iron/white, /area/medical/medbay/central) "wXL" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 1 +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable/yellow{ + icon_state = "0-8" }, /turf/open/floor/iron, /area/crew_quarters/dorms) @@ -63665,12 +63816,6 @@ /obj/structure/flora/grass/jungle/b, /turf/open/floor/grass, /area/hallway/secondary/command) -"xkV" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/turf/closed/wall, -/area/maintenance/starboard/aft) "xli" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 8 @@ -63930,9 +64075,6 @@ /obj/effect/turf_decal/stripes/red/line{ dir = 4 }, -/obj/machinery/camera/directional/north{ - network = list("ss13","rd") - }, /turf/open/floor/iron, /area/science/explab) "xpk" = ( @@ -65496,9 +65638,6 @@ /turf/open/floor/iron/freezer, /area/security/prison) "xWg" = ( -/obj/structure/disposalpipe/segment{ - dir = 5 - }, /obj/machinery/light{ dir = 8 }, @@ -65508,6 +65647,11 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 5 }, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/structure/disposaloutlet, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/iron/white, /area/medical/virology) "xWV" = ( @@ -78033,7 +78177,7 @@ aaa asE aPt jdt -aRY +mUT arB arB arB @@ -78041,7 +78185,7 @@ tAH rQX rQX arB -awZ +vTI tlO azB rQX @@ -85740,7 +85884,7 @@ aBR aBR aLJ aLE -aOl +ubL aPA aQW aQW @@ -86252,7 +86396,7 @@ aBa aBa aaf aKt -rRQ +aLN bDe aOl aPF @@ -88064,10 +88208,10 @@ cCF elS fkv prx -aSg -aPz +wvP +iVk bdW -aSg +kzn aZE bgz biT @@ -88320,9 +88464,9 @@ aWB cCj aSg aYf -dZN -dfx -rPX +faE +aSg +aPz pVb bgB bhX @@ -90637,7 +90781,7 @@ gMk gMk bbV qnI -qnI +rRQ qnI efv qnI @@ -91151,7 +91295,7 @@ nbZ nbZ sEj aYl -nJp +aYl aYl aYl sEj @@ -92150,9 +92294,9 @@ kOu mpK jTP ajo -aqR -aqR -gfW +rPX +mkJ +beF ayE aaa aaa @@ -95574,7 +95718,7 @@ cfz cgR ccw mhm -xxT +cLh cqi cMD cAP @@ -97030,10 +97174,10 @@ qSy arf twX rWw -wXL -wXL +rOm +rOm nuF -wXL +rOm qkk nuF fhu @@ -97543,7 +97687,7 @@ ixa jaD hDg jMo -vGi +wXL oax kcC vGi @@ -98338,7 +98482,7 @@ dgB aaa aaa dgB -vTI +cAx sAB urY aZV @@ -99367,7 +99511,7 @@ aRt aJq aJq aJq -aJq +nJp aJq qVS aJq @@ -99588,7 +99732,7 @@ anF dwH ahn eMP -riU +gQG ahn anF anF @@ -99845,7 +99989,7 @@ anF anF eTS anF -riU +gQG xEr anF anF @@ -100102,7 +100246,7 @@ anF anF ahn vUB -riU +gQG ahn anF anF @@ -100616,8 +100760,8 @@ gXs gXs ahn gEO -riU -anF +gtR +tiP anF jdh fBN @@ -100874,7 +101018,7 @@ aaa ahn tkF riU -anF +vvL anF ahn ahJ @@ -100950,7 +101094,7 @@ bSM bTV bUT fUA -bWU +fYS sYl bYT bZK @@ -101178,7 +101322,7 @@ aNl blh ueA blh -thV +blh oiT blh blh @@ -102961,7 +103105,7 @@ kYi ixC aOO kAz -lFf +fRF wRy fRF fRF @@ -103789,8 +103933,8 @@ bNd bNd bNd bNd -kOf -bAw +eKr +jlW dvS cfj rAw @@ -106360,7 +106504,7 @@ nZo ouW dPe bNd -mHc +cOe cOe ahO iBQ @@ -112508,7 +112652,7 @@ bBD tRP bBD bBD -ubL +vZt bBD bBD xiZ @@ -112778,7 +112922,7 @@ xLe tIE fQv tIA -sei +goV sei sei hNK @@ -114578,7 +114722,7 @@ kdn sei hNK cNW -xkV +cNW cNW cNW cNW @@ -116065,7 +116209,7 @@ aaa aaa aaf aNa -jsS +aOd aPq aPq ffm diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index 5438d4cc34303..c5a3ea36ef506 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -1932,8 +1932,6 @@ "anB" = ( /obj/structure/table/reinforced, /obj/machinery/recharger, -/obj/structure/cable/yellow, -/obj/machinery/power/apc/auto_name/directional/south, /turf/open/floor/iron/white, /area/science/misc_lab/range) "anD" = ( @@ -26344,7 +26342,7 @@ icon_state = "4-8" }, /turf/open/floor/iron, -/area/hallway/primary/aft) +/area/maintenance/aft) "dbu" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance/two, @@ -28282,9 +28280,6 @@ /area/science/misc_lab/range) "drC" = ( /obj/effect/turf_decal/delivery, -/obj/structure/cable/yellow{ - icon_state = "2-4" - }, /turf/open/floor/iron/white, /area/science/misc_lab/range) "drP" = ( @@ -29063,9 +29058,8 @@ /turf/closed/wall, /area/crew_quarters/heads/hor) "dxX" = ( -/obj/structure/cable/white, /obj/structure/cable/yellow{ - icon_state = "1-4" + icon_state = "0-4" }, /obj/effect/spawner/structure/window/reinforced/tinted, /turf/open/floor/plating, @@ -32005,7 +31999,7 @@ dir = 1 }, /turf/open/floor/plating, -/area/maintenance/department/medical/morgue) +/area/maintenance/aft) "dTY" = ( /obj/structure/sign/warning/nosmoking, /turf/closed/wall, @@ -33506,7 +33500,7 @@ }, /obj/machinery/door/airlock/research/glass{ name = "Shuttle dock"; - req_one_access = "47" + req_one_access_txt = "47" }, /turf/open/floor/iron, /area/science/shuttledock) @@ -38547,7 +38541,7 @@ req_access_txt = "5" }, /turf/open/floor/iron/white, -/area/medical/surgery) +/area/maintenance/starboard/aft) "fOK" = ( /obj/machinery/door/airlock/public/glass{ name = "Holodeck Access" @@ -47575,10 +47569,6 @@ /obj/structure/cable/yellow{ icon_state = "2-4" }, -/obj/machinery/door/airlock/command{ - name = "Research Director's Quarters"; - req_access_txt = "30" - }, /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -47964,7 +47954,7 @@ name = "isolation shutters" }, /turf/open/floor/iron, -/area/medical/virology) +/area/maintenance/aft) "iXX" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -52854,6 +52844,10 @@ /turf/open/floor/iron, /area/quartermaster/office) "kFK" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, /turf/open/floor/iron/white, /area/science/misc_lab/range) "kFO" = ( @@ -72913,13 +72907,13 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, -/obj/machinery/door/airlock/research/glass{ - name = "Research Testing Range"; - req_one_access = "47" - }, /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/machinery/door/airlock/research{ + req_one_access_txt = "47"; + name = "Research Testing Range" + }, /turf/open/floor/iron, /area/science/misc_lab/range) "rqS" = ( @@ -76375,15 +76369,15 @@ /turf/open/floor/iron, /area/hallway/primary/starboard) "syU" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ dir = 4 }, /obj/structure/disposalpipe/segment{ dir = 6 }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, /turf/open/floor/iron/white, /area/science/misc_lab/range) "syZ" = ( @@ -81188,7 +81182,7 @@ name = "isolation shutters" }, /turf/open/floor/iron, -/area/medical/surgery) +/area/maintenance/starboard/aft) "uit" = ( /obj/structure/cable/yellow{ icon_state = "1-2" @@ -81833,15 +81827,6 @@ }, /turf/open/floor/iron, /area/hallway/primary/central) -"utb" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ - dir = 8 - }, -/turf/open/floor/iron/smooth, -/area/tcommsat/server) "utc" = ( /obj/item/beacon, /obj/effect/turf_decal/tile/neutral/fourcorners/contrasted, @@ -133211,7 +133196,7 @@ bUI bXa cSI cSI -utb +mUm ceA vCq dzh diff --git a/_maps/map_files/EchoStation/EchoStation.dmm b/_maps/map_files/EchoStation/EchoStation.dmm index bcbb03c320ea0..8874fbae515d0 100644 --- a/_maps/map_files/EchoStation/EchoStation.dmm +++ b/_maps/map_files/EchoStation/EchoStation.dmm @@ -3628,13 +3628,13 @@ /turf/open/floor/plating, /area/storage/tech) "brs" = ( -/obj/machinery/telecomms/hub/preset, /obj/effect/turf_decal/stripes/line{ dir = 6 }, /obj/machinery/airalarm/directional/north, /obj/machinery/firealarm/directional/west, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/obj/machinery/blackbox_recorder, /turf/open/floor/circuit/telecomms/mainframe{ initial_gas_mix = "o2=22;n2=82;TEMP=293.15" }, @@ -30465,10 +30465,10 @@ /area/hydroponics) "oOM" = ( /obj/structure/cable, -/obj/machinery/blackbox_recorder, /obj/effect/turf_decal/stripes/line{ dir = 1 }, +/obj/machinery/telecomms/hub/preset, /turf/open/floor/circuit/green/telecomms/mainframe, /area/tcommsat/server) "oOS" = ( diff --git a/_maps/map_files/RadStation/RadStation.dmm b/_maps/map_files/RadStation/RadStation.dmm index e868e2ba67069..0860f3be74112 100644 --- a/_maps/map_files/RadStation/RadStation.dmm +++ b/_maps/map_files/RadStation/RadStation.dmm @@ -7033,6 +7033,15 @@ /obj/machinery/meter, /turf/open/floor/iron/tech, /area/engine/engine_room) +"cqV" = ( +/obj/machinery/firealarm/directional/south, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/dark/telecomms{ + initial_gas_mix = "o2=22;n2=82;TEMP=293.15" + }, +/area/tcommsat/computer) "cqW" = ( /obj/machinery/light{ dir = 4 @@ -14195,6 +14204,18 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, /turf/open/floor/iron/white, /area/science/research) +"eAA" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/thermomachine/freezer/on{ + dir = 8; + initialize_directions = 8 + }, +/turf/open/floor/circuit/telecomms/mainframe{ + initial_gas_mix = "o2=22;n2=82;TEMP=293.15" + }, +/area/tcommsat/computer) "eAC" = ( /turf/closed/wall, /area/security/checkpoint/medical) @@ -34417,20 +34438,6 @@ dir = 8 }, /area/hallway/primary/central) -"kYm" = ( -/obj/item/radio/intercom{ - pixel_y = -35 - }, -/obj/machinery/atmospherics/components/unary/portables_connector{ - dir = 1 - }, -/obj/machinery/airalarm/directional/south, -/obj/machinery/portable_atmospherics/canister/plasma, -/obj/effect/mapping_helpers/atmos_auto_connect, -/turf/open/floor/iron/dark/telecomms{ - initial_gas_mix = "o2=22;n2=82;TEMP=293.15" - }, -/area/engine/gravity_generator) "kYr" = ( /obj/structure/sign/warning/nosmoking, /turf/closed/wall, @@ -36083,18 +36090,6 @@ dir = 1 }, /area/science/research) -"lxG" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/atmospherics/components/unary/thermomachine/freezer/on{ - dir = 8; - initialize_directions = 8 - }, -/turf/open/floor/circuit/telecomms/mainframe{ - initial_gas_mix = "o2=22;n2=82;TEMP=293.15" - }, -/area/engine/gravity_generator) "lyc" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -43941,6 +43936,16 @@ }, /turf/open/floor/iron, /area/quartermaster/sorting) +"nTp" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/telecomms/hub/preset, +/turf/open/floor/circuit/green/telecomms/mainframe, +/area/tcommsat/server) "nTI" = ( /obj/structure/chair/wood/wings, /turf/open/floor/carpet/green, @@ -44165,28 +44170,6 @@ "nXU" = ( /turf/closed/wall, /area/hallway/secondary/exit/departure_lounge) -"nXV" = ( -/obj/machinery/status_display/evac{ - pixel_y = 32 - }, -/obj/structure/table/reinforced, -/obj/effect/spawner/lootdrop/aimodule_harmful, -/obj/effect/spawner/lootdrop/aimodule_harmful, -/obj/effect/spawner/lootdrop/aimodule_harmful, -/obj/structure/window/reinforced/spawner/east{ - dir = 8 - }, -/obj/machinery/door/window/brigdoor/northright{ - dir = 2; - name = "Security Boards"; - req_access_txt = "16" - }, -/obj/effect/turf_decal/stripes/line, -/obj/machinery/camera/autoname/directional/east{ - network = list("aiupload") - }, -/turf/open/floor/circuit, -/area/ai_monitored/turret_protected/ai_upload) "nYc" = ( /obj/structure/cable/yellow{ icon_state = "1-2" @@ -48451,6 +48434,28 @@ /obj/machinery/advanced_airlock_controller/directional/north, /turf/open/floor/iron, /area/hallway/secondary/entry) +"plH" = ( +/obj/machinery/status_display/evac{ + pixel_y = 32 + }, +/obj/structure/table/reinforced, +/obj/effect/spawner/lootdrop/aimodule_harmful, +/obj/effect/spawner/lootdrop/aimodule_harmful, +/obj/effect/spawner/lootdrop/aimodule_harmful, +/obj/structure/window/reinforced/spawner/east{ + dir = 8 + }, +/obj/machinery/door/window/brigdoor/northright{ + dir = 2; + name = "Security Boards"; + req_access_txt = "16" + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/camera/autoname/directional/east{ + network = list("aiupload") + }, +/turf/open/floor/circuit, +/area/ai_monitored/turret_protected/ai_upload) "plT" = ( /obj/machinery/airalarm/directional/west, /obj/effect/turf_decal/tile/blue/half/contrasted{ @@ -48874,6 +48879,15 @@ }, /turf/open/floor/iron/tech, /area/engine/atmos) +"psP" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/blackbox_recorder, +/turf/open/floor/circuit/telecomms/mainframe{ + initial_gas_mix = "o2=22;n2=82;TEMP=293.15" + }, +/area/tcommsat/computer) "psU" = ( /obj/effect/turf_decal/bot, /obj/machinery/light{ @@ -49390,15 +49404,6 @@ dir = 1 }, /area/hallway/primary/central) -"pBi" = ( -/obj/machinery/firealarm/directional/south, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 1 - }, -/turf/open/floor/iron/dark/telecomms{ - initial_gas_mix = "o2=22;n2=82;TEMP=293.15" - }, -/area/engine/gravity_generator) "pBt" = ( /obj/structure/table/reinforced, /obj/effect/turf_decal/stripes/line{ @@ -51580,6 +51585,20 @@ /obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/plating, /area/vacant_room/commissary/commissary1) +"qjt" = ( +/obj/item/radio/intercom{ + pixel_y = -35 + }, +/obj/machinery/atmospherics/components/unary/portables_connector{ + dir = 1 + }, +/obj/machinery/airalarm/directional/south, +/obj/machinery/portable_atmospherics/canister/plasma, +/obj/effect/mapping_helpers/atmos_auto_connect, +/turf/open/floor/iron/dark/telecomms{ + initial_gas_mix = "o2=22;n2=82;TEMP=293.15" + }, +/area/tcommsat/computer) "qjH" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/curtain/directional{ @@ -52409,32 +52428,25 @@ }, /turf/open/floor/plating, /area/maintenance/solars/starboard/fore) -"qvV" = ( -/obj/machinery/power/apc/auto_name/directional/south, -/obj/machinery/light_switch/tcomms{ - pixel_x = 12; - pixel_y = -21 - }, -/obj/machinery/light_switch{ - name = "Control Room light switch"; - pixel_x = -10; - pixel_y = -21 +"qwL" = ( +/obj/structure/sign/poster/random, +/turf/closed/wall, +/area/gateway) +"qwX" = ( +/obj/structure/extinguisher_cabinet{ + pixel_y = -33 }, -/obj/machinery/light, /obj/structure/cable{ - icon_state = "0-4" + icon_state = "1-8" }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/general/hidden{ + dir = 5 }, +/obj/machinery/space_heater, /turf/open/floor/iron/dark/telecomms{ initial_gas_mix = "o2=22;n2=82;TEMP=293.15" }, -/area/engine/gravity_generator) -"qwL" = ( -/obj/structure/sign/poster/random, -/turf/closed/wall, -/area/gateway) +/area/tcommsat/computer) "qwZ" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/effect/landmark/blobstart, @@ -70281,15 +70293,6 @@ "wfM" = ( /turf/open/floor/plating, /area/maintenance/port/aft) -"wfO" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/telecomms/hub/preset, -/turf/open/floor/circuit/telecomms/mainframe{ - initial_gas_mix = "o2=22;n2=82;TEMP=293.15" - }, -/area/tcommsat/computer) "wfX" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/guideline/guideline_half_edge/blue{ @@ -70663,6 +70666,28 @@ /obj/structure/table/wood, /turf/open/floor/carpet/green, /area/hallway/secondary/exit/departure_lounge) +"wmK" = ( +/obj/machinery/power/apc/auto_name/directional/south, +/obj/machinery/light_switch/tcomms{ + pixel_x = 12; + pixel_y = -21 + }, +/obj/machinery/light_switch{ + name = "Control Room light switch"; + pixel_x = -10; + pixel_y = -21 + }, +/obj/machinery/light, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/dark/telecomms{ + initial_gas_mix = "o2=22;n2=82;TEMP=293.15" + }, +/area/tcommsat/computer) "wng" = ( /obj/machinery/door/firedoor, /obj/structure/cable/yellow{ @@ -74009,16 +74034,6 @@ }, /turf/open/floor/iron, /area/hallway/primary/aft) -"xtz" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/blackbox_recorder, -/turf/open/floor/circuit/green/telecomms/mainframe, -/area/tcommsat/server) "xtE" = ( /obj/effect/turf_decal/tile/dark_green/fourcorners/contrasted, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ @@ -75339,21 +75354,6 @@ }, /turf/open/floor/engine, /area/security/nuke_storage) -"xMj" = ( -/obj/structure/extinguisher_cabinet{ - pixel_y = -33 - }, -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/general/hidden{ - dir = 5 - }, -/obj/machinery/space_heater, -/turf/open/floor/iron/dark/telecomms{ - initial_gas_mix = "o2=22;n2=82;TEMP=293.15" - }, -/area/engine/gravity_generator) "xMx" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/cable{ @@ -110049,7 +110049,7 @@ eyz mTR uTv uTv -nXV +plH cLD ogV buw @@ -110088,7 +110088,7 @@ cMI iST iST tHK -ebF +iST ebF ebF ebF @@ -110345,7 +110345,7 @@ eSO qgB jeN ief -kYm +qjt ebF aSY cSN @@ -110602,7 +110602,7 @@ xCR cSZ oaZ jHW -pBi +cqV ebF iUV eId @@ -110859,7 +110859,7 @@ pYb iwO ghe kAi -qvV +wmK ebF oVd bsT @@ -111116,7 +111116,7 @@ rEu qVF omg aWq -xMj +qwX ebF bsT sYx @@ -111369,11 +111369,11 @@ uSx rEW cJD kPu -xtz +nTp hoG oDI -wfO -lxG +psP +eAA ebF tqN bHa @@ -111630,7 +111630,7 @@ cMI iST iST iST -ebF +iST ebF ebF ebF diff --git a/_maps/shuttles/exploration/exploration_shuttle.dmm b/_maps/shuttles/exploration/exploration_shuttle.dmm index c2e4fd1e84e45..b67dca8a646f0 100644 --- a/_maps/shuttles/exploration/exploration_shuttle.dmm +++ b/_maps/shuttles/exploration/exploration_shuttle.dmm @@ -258,13 +258,11 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/exploration) "F" = ( -/obj/machinery/camera/preset{ - dir = 6 - }, /obj/machinery/newscaster{ pixel_x = 32; pixel_y = 1 }, +/obj/machinery/camera/autoname/directional/east, /turf/open/floor/mineral/titanium, /area/shuttle/exploration) "G" = ( diff --git a/beestation.dme b/beestation.dme index c6c6f0b4fa411..ca9463d697356 100644 --- a/beestation.dme +++ b/beestation.dme @@ -511,6 +511,7 @@ #include "code\controllers\subsystem\processing\processing.dm" #include "code\controllers\subsystem\processing\projectiles.dm" #include "code\controllers\subsystem\processing\quirks.dm" +#include "code\controllers\subsystem\processing\servers.dm" #include "code\controllers\subsystem\processing\singulo.dm" #include "code\controllers\subsystem\processing\station.dm" #include "code\controllers\subsystem\processing\wet_floors.dm" @@ -680,6 +681,7 @@ #include "code\datums\components\remote_materials.dm" #include "code\datums\components\riding.dm" #include "code\datums\components\rotation.dm" +#include "code\datums\components\server.dm" #include "code\datums\components\seclight_attachable.dm" #include "code\datums\components\shell.dm" #include "code\datums\components\shielded.dm" diff --git a/code/__DEFINES/dcs/signals/signals_obj/signals_machine/signals_machinery.dm b/code/__DEFINES/dcs/signals/signals_obj/signals_machine/signals_machinery.dm index 0ee2c981e4acd..21102eba3950d 100644 --- a/code/__DEFINES/dcs/signals/signals_obj/signals_machine/signals_machinery.dm +++ b/code/__DEFINES/dcs/signals/signals_obj/signals_machine/signals_machinery.dm @@ -16,6 +16,8 @@ #define COMSIG_MACHINERY_POWER_RESTORED "machinery_power_restored" ///from /obj/machinery/set_occupant(atom/movable/O): (new_occupant) #define COMSIG_MACHINERY_SET_OCCUPANT "machinery_set_occupant" +///from /obj/machinery/proc/use_power(): (power_used) +#define COMSIG_MACHINERY_POWER_USED "machinery_power_used" // /obj/machinery/atmospherics/components/unary/cryo_cell signals diff --git a/code/__DEFINES/networks.dm b/code/__DEFINES/networks.dm index c938cdbfb0f9b..31eecf7b0690d 100644 --- a/code/__DEFINES/networks.dm +++ b/code/__DEFINES/networks.dm @@ -49,6 +49,7 @@ #define __NETWORK_CARGO "CARGO" #define __NETWORK_BOTS "BOTS" #define __NETWORK_COMPUTER "COMPUTER" +#define __NETWORK_SERVER "SERVER" #define __NETWORK_CARDS "CARDS" #define __NETWORK_CIRCUITS "CIRCUITS" @@ -132,3 +133,6 @@ #define NETWORK_ERROR_BAD_NETWORK "network_error_bad_network" #define NETWORK_ERROR_BAD_RECEIVER_ID "network_error_bad_receiver_id" #define NETWORK_ERROR_UNAUTHORIZED "network_error_bad_unauthorized" + +// Packet types +#define PACKET_TYPE_PING "ping" diff --git a/code/__DEFINES/pipe_construction.dm b/code/__DEFINES/pipe_construction.dm index 41b21e5989189..609e3d8328f0f 100644 --- a/code/__DEFINES/pipe_construction.dm +++ b/code/__DEFINES/pipe_construction.dm @@ -30,3 +30,160 @@ #define STATION_TUBE_OPENING 1 #define STATION_TUBE_CLOSED 2 #define STATION_TUBE_CLOSING 3 + +// Reference list for disposal sort junctions. Set the sortType variable on disposal sort junctions to +// the index of the sort department that you want. For example, sortType set to 2 will reroute all packages +// tagged for the Cargo Bay. + +/* List of sortType codes for mapping reference +0 Waste +1 Disposals - All unwrapped items and untagged parcels get picked up by a junction with this sortType. Usually leads to the recycler. +2 Cargo Bay +3 QM Office +4 Engineering +5 CE Office +6 Atmospherics +7 Security +8 HoS Office +9 Medbay +10 CMO Office +11 Chemistry +12 Research +13 RD Office +14 Robotics +15 HoP Office +16 Library +17 Chapel +18 Theatre +19 Bar +20 Kitchen +21 Hydroponics +22 Janitor +23 Genetics +24 Testing Range +25 Toxins +26 Dormitories +27 Virology +28 Xenobiology +29 Law Office +30 Detective's Office +*/ + +//The whole system for the sorttype var is determined based on the order of this list, +//disposals must always be 1, since anything that's untagged will automatically go to disposals, or sorttype = 1 --Superxpdude + +//If you don't want to fuck up disposals, add to this list, and don't change the order. +//If you insist on changing the order, you'll have to change every sort junction to reflect the new order. --Pete + +GLOBAL_LIST_INIT(TAGGERLOCATIONS, list( + "Disposals", + "Cargo Bay", + "QM Office", + "Engineering", + "CE Office", + "Atmospherics", + "Security", + "HoS Office", + "Medbay", + "CMO Office", + "Chemistry", + "Research", + "RD Office", + "Robotics", + "HoP Office", + "Library", + "Chapel", + "Theatre", + "Bar", + "Kitchen", + "Hydroponics", + "Janitor Closet", + "Genetics", + "Testing Range", + "Toxins", + "Dormitories", + "Virology", + "Xenobiology", + "Law Office", + "Detective's Office", +)) + +#define MAPPING_HELPER_SORT(name, sort_code) /obj/structure/disposalpipe/sorting/mail/destination/##name {\ + sortType = sort_code;\ +}\ +/obj/structure/disposalpipe/sorting/mail/destination/##name/flip {\ + flip_type = /obj/structure/disposalpipe/sorting/mail;\ + icon_state = "pipe-j2s";\ + initialize_dirs = DISP_DIR_LEFT | DISP_DIR_FLIP;\ +} + +MAPPING_HELPER_SORT(disposals, 1) +MAPPING_HELPER_SORT(cargo_bay, 2) +MAPPING_HELPER_SORT(qm_office, 3) +MAPPING_HELPER_SORT(engineering, 4) +MAPPING_HELPER_SORT(ce_office, 5) +MAPPING_HELPER_SORT(atmospherics, 6) +MAPPING_HELPER_SORT(security, 7) +MAPPING_HELPER_SORT(hos_office, 8) +MAPPING_HELPER_SORT(medbay, 9) +MAPPING_HELPER_SORT(cmo_office, 10) +MAPPING_HELPER_SORT(chemistry, 11) +MAPPING_HELPER_SORT(research, 12) +MAPPING_HELPER_SORT(rd_office, 13) +MAPPING_HELPER_SORT(robotics, 14) +MAPPING_HELPER_SORT(hop_office, 15) +MAPPING_HELPER_SORT(library, 16) +MAPPING_HELPER_SORT(chapel, 17) +MAPPING_HELPER_SORT(threatre, 18) +MAPPING_HELPER_SORT(bar, 19) +MAPPING_HELPER_SORT(kitchen, 20) +MAPPING_HELPER_SORT(hydroponics, 21) +MAPPING_HELPER_SORT(janitor_closet, 22) +MAPPING_HELPER_SORT(genetics, 23) +MAPPING_HELPER_SORT(testing_range, 24) +MAPPING_HELPER_SORT(toxins, 25) +MAPPING_HELPER_SORT(dormitories, 26) +MAPPING_HELPER_SORT(virology, 27) +MAPPING_HELPER_SORT(xenobiology, 28) +MAPPING_HELPER_SORT(law_office, 29) +MAPPING_HELPER_SORT(detective_office, 30) + +#undef MAPPING_HELPER_SORT + +#if defined(UNIT_TESTS) || defined(SPACEMAN_DMM) + +GLOBAL_LIST_INIT(tagger_destination_areas, list( + "Disposals" = list(/area/maintenance/disposal, /area/quartermaster/sorting), + "Cargo Bay" = list(/area/quartermaster), + "QM Office" = list(/area/quartermaster/qm, /area/quartermaster/qm_bedroom), + "Engineering" = list(/area/engine, /area/engineering), + "CE Office" = list(/area/crew_quarters/heads/chief), + "Atmospherics" = list(/area/engine/atmos, /area/engine/atmospherics_engine), + "Security" = list(/area/security), + "HoS Office" = list(/area/crew_quarters/heads/hos), + "Medbay" = list(/area/medical), + "CMO Office" = list(/area/crew_quarters/heads/cmo), + "Chemistry" = list(/area/medical/chemistry, /area/medical/apothecary), + "Research" = list(/area/science), + "RD Office" = list(/area/crew_quarters/heads/hor), + "Robotics" = list(/area/science/robotics), + "HoP Office" = list(/area/crew_quarters/heads/hop), + "Library" = list(/area/library), + "Chapel" = list(/area/chapel), + "Theatre" = list(/area/crew_quarters/theatre), + "Bar" = list(/area/crew_quarters/bar), + "Kitchen" = list(/area/crew_quarters/kitchen), + "Hydroponics" = list(/area/hydroponics), + "Janitor Closet" = list(/area/janitor), + "Genetics" = list(/area/medical/genetics), + "Testing Range" = list(/area/science/misc_lab, /area/science/test_area, /area/science/mixing), + "Toxins" = list(/area/science/misc_lab, /area/science/test_area, /area/science/mixing), + "Dormitories" = list(/area/crew_quarters/dorms, /area/commons/dorms), + "Virology" = list(/area/medical/virology), + "Xenobiology" = list(/area/science/xenobiology), + "Law Office" = list(/area/lawoffice), + "Detective's Office" = list(/area/security/detectives_office), +)) + +#endif + diff --git a/code/__DEFINES/stat.dm b/code/__DEFINES/stat.dm index 889c183b21e92..199191d4e68ae 100644 --- a/code/__DEFINES/stat.dm +++ b/code/__DEFINES/stat.dm @@ -13,10 +13,12 @@ #define MAX_SATIETY 600 // bitflags for machine stat variable -#define BROKEN (1<<0) -#define NOPOWER (1<<1) -#define MAINT (1<<2) // under maintaince -#define EMPED (1<<3) // temporary broken by EMP pulse +#define BROKEN (1<<0) +#define NOPOWER (1<<1) +#define MAINT (1<<2) //! under maintenance +#define EMPED (1<<3) //! temporary broken by EMP pulse +#define OVERHEATED (1<<4) //! overheated +#define TURNED_OFF (1<<5) //! turned off //ai power requirement defines #define POWER_REQ_ALL 1 diff --git a/code/_globalvars/lists/flavor_misc.dm b/code/_globalvars/lists/flavor_misc.dm index 5299a7fec827c..ad4f498bb79f4 100644 --- a/code/_globalvars/lists/flavor_misc.dm +++ b/code/_globalvars/lists/flavor_misc.dm @@ -234,123 +234,6 @@ GLOBAL_LIST_INIT(scarySounds, list( 'sound/weapons/thudswoosh.ogg', )) - -// Reference list for disposal sort junctions. Set the sortType variable on disposal sort junctions to -// the index of the sort department that you want. For example, sortType set to 2 will reroute all packages -// tagged for the Cargo Bay. - -/* List of sortType codes for mapping reference -0 Waste -1 Disposals - All unwrapped items and untagged parcels get picked up by a junction with this sortType. Usually leads to the recycler. -2 Cargo Bay -3 QM Office -4 Engineering -5 CE Office -6 Atmospherics -7 Security -8 HoS Office -9 Medbay -10 CMO Office -11 Chemistry -12 Research -13 RD Office -14 Robotics -15 HoP Office -16 Library -17 Chapel -18 Theatre -19 Bar -20 Kitchen -21 Hydroponics -22 Janitor -23 Genetics -24 Testing Range -25 Toxins -26 Dormitories -27 Virology -28 Xenobiology -29 Law Office -30 Detective's Office -*/ - -//The whole system for the sorttype var is determined based on the order of this list, -//disposals must always be 1, since anything that's untagged will automatically go to disposals, or sorttype = 1 --Superxpdude - -//If you don't want to fuck up disposals, add to this list, and don't change the order. -//If you insist on changing the order, you'll have to change every sort junction to reflect the new order. --Pete - -GLOBAL_LIST_INIT(TAGGERLOCATIONS, list( - "Disposals", - "Cargo Bay", - "QM Office", - "Engineering", - "CE Office", - "Atmospherics", - "Security", - "HoS Office", - "Medbay", - "CMO Office", - "Chemistry", - "Research", - "RD Office", - "Robotics", - "HoP Office", - "Library", - "Chapel", - "Theatre", - "Bar", - "Kitchen", - "Hydroponics", - "Janitor Closet", - "Genetics", - "Testing Range", - "Toxins", - "Dormitories", - "Virology", - "Xenobiology", - "Law Office", - "Detective's Office", -)) - -#if defined(UNIT_TESTS) || defined(SPACEMAN_DMM) - -GLOBAL_LIST_INIT(tagger_destination_areas, list( - // Disposals is special because it is for anything that doesn't have a tag, so we - // send it to either of these locations - "Disposals" = list(/area/maintenance/disposal, /area/quartermaster/sorting), - "Cargo Bay" = list(/area/quartermaster), - "QM Office" = list(/area/quartermaster/qm, /area/quartermaster/qm_bedroom), - "Engineering" = list(/area/engine, /area/engineering), - "CE Office" = list(/area/crew_quarters/heads/chief), - "Atmospherics" = list(/area/engine/atmos, /area/engine/atmospherics_engine), - "Security" = list(/area/security), - "HoS Office" = list(/area/crew_quarters/heads/hos), - "Medbay" = list(/area/medical), - "CMO Office" = list(/area/crew_quarters/heads/cmo), - "Chemistry" = list(/area/medical/chemistry, /area/medical/apothecary), - "Research" = list(/area/science), - "RD Office" = list(/area/crew_quarters/heads/hor), - "Robotics" = list(/area/science/robotics), - "HoP Office" = list(/area/crew_quarters/heads/hop), - "Library" = list(/area/library), - "Chapel" = list(/area/chapel), - "Theatre" = list(/area/crew_quarters/theatre), - "Bar" = list(/area/crew_quarters/bar), - "Kitchen" = list(/area/crew_quarters/kitchen), - "Hydroponics" = list(/area/hydroponics), - "Janitor Closet" = list(/area/janitor), - "Genetics" = list(/area/medical/genetics), - "Testing Range" = list(/area/science/misc_lab, /area/science/test_area, /area/science/mixing), - "Toxins" = list(/area/science/misc_lab, /area/science/test_area, /area/science/mixing), - "Dormitories" = list(/area/crew_quarters/dorms, /area/commons/dorms), - "Virology" = list(/area/medical/virology), - "Xenobiology" = list(/area/science/xenobiology), - "Law Office" = list(/area/lawoffice), - "Detective's Office" = list(/area/security/detectives_office), -)) - -#endif - GLOBAL_LIST_INIT(station_prefixes, world.file2list("strings/station_prefixes.txt") + "") GLOBAL_LIST_INIT(station_names, world.file2list("strings/station_names.txt") + "") diff --git a/code/controllers/subsystem/processing/servers.dm b/code/controllers/subsystem/processing/servers.dm new file mode 100644 index 0000000000000..8e47f663e45dd --- /dev/null +++ b/code/controllers/subsystem/processing/servers.dm @@ -0,0 +1,4 @@ +PROCESSING_SUBSYSTEM_DEF(servers) + name = "Servers" + wait = 0.2 SECONDS + stat_tag = "SP" diff --git a/code/controllers/subsystem/research.dm b/code/controllers/subsystem/research.dm index bc208fcf8f4ae..e39e83a0b1c04 100644 --- a/code/controllers/subsystem/research.dm +++ b/code/controllers/subsystem/research.dm @@ -63,9 +63,10 @@ SUBSYSTEM_DEF(research) bitcoins[i] = bitcoins[i]? bitcoins[i] + result[i] : result[i] else for(var/obj/machinery/rnd/server/miner in servers) - if(miner.working) - bitcoins = single_server_income.Copy() - break //Just need one to work. + if(miner.machine_stat) + continue + bitcoins = single_server_income.Copy() + break //Just need one to work. if (!isnull(last_income)) var/income_time_difference = world.time - last_income science_tech.last_bitcoins = bitcoins // Doesn't take tick drift into account @@ -77,8 +78,9 @@ SUBSYSTEM_DEF(research) /datum/controller/subsystem/research/proc/calculate_server_coefficient() //Diminishing returns. var/list/obj/machinery/rnd/server/active = new() for(var/obj/machinery/rnd/server/miner in servers) - if(miner.working) - active.Add(miner) + if(miner.machine_stat) + continue + active.Add(miner) var/amt = active.len if(!amt) return 0 diff --git a/code/datums/components/ntnet_interface.dm b/code/datums/components/ntnet_interface.dm index 784eae9e12ece..671bffe09e0ab 100644 --- a/code/datums/components/ntnet_interface.dm +++ b/code/datums/components/ntnet_interface.dm @@ -8,7 +8,7 @@ * Arguments: * * packet_data - Either a list() or a /datum/netdata. If its netdata, the other args are ignored * * target_id - Target hardware id or network_id for this packet. If we are a network id, then its - broadcasted to that network. + * * broadcasted to that network. * * passkey - Authentication for the packet. If the target doesn't authenticate the packet is dropped */ /datum/proc/ntnet_send(packet_data, target_id = null, passkey = null) diff --git a/code/datums/components/server.dm b/code/datums/components/server.dm new file mode 100644 index 0000000000000..ae8cb5a501a8f --- /dev/null +++ b/code/datums/components/server.dm @@ -0,0 +1,72 @@ +#define SPARK_COOLDOWN_TIME 10 SECONDS + +// Server component +// will generate a heat based on the power usage of the machine +// use only with /obj/machinery + + + +/datum/component/server + + var/efficiency = 1 // 0 to 1 range + + var/temperature = T20C // current temperature + var/warning_temp = T0C + 50 // 50C + var/overheated_temp = T0C + 100 // 100C - temperature at which the server stops working + var/heat_capacity = 2500 // Used for auxmos heat transfer + + var/heat_generation = 0 // heat generated by the machine + + // if it sparks when overheated + var/sparks = TRUE + COOLDOWN_DECLARE(spark_cooldown) + +/datum/component/server/Initialize() + if(!ismachinery(parent)) // currently only compatible with machinery + return COMPONENT_INCOMPATIBLE + RegisterSignal(parent, COMSIG_MACHINERY_POWER_USED, PROC_REF(ParentPowerUsed)) + START_PROCESSING(SSservers, src) + +/datum/component/server/Destroy(force, silent) + . = ..() + UnregisterSignal(parent, COMSIG_MACHINERY_POWER_USED) + STOP_PROCESSING(SSservers, src) + +/datum/component/server/proc/ParentPowerUsed(source, amount, chan) + heat_generation += amount * 1000 + +// server is overheated and doesn't work +/datum/component/server/proc/overheated(is_overheated) + if(is_overheated && sparks && COOLDOWN_FINISHED(src, spark_cooldown)) + do_sparks(5, FALSE, parent) + COOLDOWN_START(src, spark_cooldown, SPARK_COOLDOWN_TIME) + + +/datum/component/server/process(delta_time) + var/obj/machinery/parent_machine = parent + if(!calculate_temperature()) + return + if(temperature > overheated_temp) + if(!(parent_machine.machine_stat & OVERHEATED)) + overheated(TRUE) + parent_machine.set_machine_stat(parent_machine.machine_stat | OVERHEATED) + return + efficiency = 0 + else + if(parent_machine.machine_stat & OVERHEATED) + overheated(FALSE) + parent_machine.set_machine_stat(parent_machine.machine_stat & ~OVERHEATED) + var/efficiency_change = ((temperature - T20C) / (overheated_temp - T20C)) + efficiency = clamp(1 - efficiency_change, 0, 1) + temperature += heat_generation / heat_capacity + heat_generation = 0 + +/datum/component/server/proc/calculate_temperature() + var/turf/turf = get_turf(parent) + if(!turf) + return FALSE + var/datum/gas_mixture/environment = turf.return_air() + + temperature = environment.temperature_share(null, OPEN_HEAT_TRANSFER_COEFFICIENT, temperature, heat_capacity) + +#undef SPARK_COOLDOWN_TIME diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm index 7e6497177ac85..c8de830c096ed 100644 --- a/code/game/machinery/_machinery.dm +++ b/code/game/machinery/_machinery.dm @@ -360,7 +360,7 @@ Class Procs: /obj/machinery/can_interact(mob/user) var/silicon = issilicon(user) var/admin_ghost = IsAdminGhost(user) - var/living = isliving(user) + var/living = ishuman(user) // /mob/living/carbon/HUMANS, not /mob/living. if((machine_stat & (NOPOWER|BROKEN)) && !(interaction_flags_machine & INTERACT_MACHINE_OFFLINE)) // Check if the machine is broken, and if we can still interact with it if so return FALSE @@ -588,10 +588,12 @@ Class Procs: if(!panel_open) panel_open = TRUE icon_state = icon_state_open + set_machine_stat(machine_stat & MAINT) to_chat(user, "You open the maintenance hatch of [src].") else panel_open = FALSE icon_state = icon_state_closed + set_machine_stat(machine_stat & ~MAINT) to_chat(user, "You close the maintenance hatch of [src].") return 1 return 0 diff --git a/code/game/machinery/telecomms/computers/telemonitor.dm b/code/game/machinery/telecomms/computers/telemonitor.dm index 048bd813e8bcb..c249c6b615127 100644 --- a/code/game/machinery/telecomms/computers/telemonitor.dm +++ b/code/game/machinery/telecomms/computers/telemonitor.dm @@ -1,7 +1,6 @@ /* - Telecomms monitor tracks the overall trafficing of a telecommunications network - and displays a heirarchy of linked machines. + Telecommunications Monitoring Console displays the status of the telecommunications network it's connected to. */ @@ -9,118 +8,80 @@ name = "telecommunications monitoring console" icon_screen = "comm_monitor" desc = "Monitors the details of the telecommunications network it's synced with." - - var/screen = 0 // the screen number: - var/list/machinelist = list() // the machines located by the computer - var/obj/machinery/telecomms/SelectedMachine - + circuit = /obj/item/circuitboard/computer/comm_monitor + network_id = __NETWORK_SERVER // if its connected to the default one we will ignore it var/network = "NULL" // the network to probe + var/list/servers = list() // the servers in the network - var/temp = "" // temporary feedback messages - circuit = /obj/item/circuitboard/computer/comm_monitor -/obj/machinery/computer/telecomms/monitor/ui_interact(mob/user) +/obj/machinery/computer/telecomms/monitor/Initialize(mapload) . = ..() - var/dat = "Telecommunications Monitor
Telecommunications Monitor
" - - switch(screen) - - - // --- Main Menu --- - - if(0) - dat += "
[temp]

" - dat += "
Current Network: [network]
" - if(machinelist.len) - dat += "
Detected Network Entities:" - dat += "
\[Flush Buffer\]" - else - dat += "\[Probe Network\]" - - - // --- Viewing Machine --- - - if(1) - dat += "
[temp]
" - dat += "
\[Main Menu\]
" - dat += "
Current Network: [network]
" - dat += "Selected Network Entity: [SelectedMachine.name] ([SelectedMachine.id])
" - dat += "Linked Entities:
    " - for(var/obj/machinery/telecomms/T in SelectedMachine.links) - if(!T.hide) - dat += "
  1. [REF(T.id)] [T.name] ([T.id])
  2. " - dat += "
" - - - - user << browse(dat, "window=comm_monitor;size=575x400") - onclose(user, "server_control") - - temp = "" - return - - -/obj/machinery/computer/telecomms/monitor/Topic(href, href_list) - if(..()) - return - - - add_fingerprint(usr) - usr.set_machine(src) - - if(href_list["viewmachine"]) - screen = 1 - for(var/obj/machinery/telecomms/T in machinelist) - if(T.id == href_list["viewmachine"]) - SelectedMachine = T - break - - if(href_list["operation"]) - switch(href_list["operation"]) - - if("release") - machinelist = list() - screen = 0 - - if("mainmenu") - screen = 0 - - if("probe") - if(machinelist.len > 0) - temp = "- FAILED: CANNOT PROBE WHEN BUFFER FULL -" - - else - for(var/obj/machinery/telecomms/T in urange(25, src)) - if(T.network == network) - machinelist.Add(T) + update_network() + RegisterSignal(src, COMSIG_COMPONENT_NTNET_RECEIVE, PROC_REF(ntnet_receive)) - if(!machinelist.len) - temp = "- FAILED: UNABLE TO LOCATE NETWORK ENTITIES IN \[[network]\] -" - else - temp = "- [machinelist.len] ENTITIES LOCATED & BUFFERED -" - - screen = 0 - - - if(href_list["network"]) - - var/newnet = stripped_input(usr, "Which network do you want to view?", "Comm Monitor", network) - if(newnet && (get_dist(usr, src) <= 1 || issilicon(usr))) - if(length(newnet) > 15) - temp = "- FAILED: NETWORK TAG STRING TOO LENGHTLY -" +/obj/machinery/computer/telecomms/monitor/Destroy() + . = ..() + UnregisterSignal(src, COMSIG_COMPONENT_NTNET_RECEIVE) - else - network = newnet - screen = 0 - machinelist = list() - temp = "- NEW NETWORK TAG SET IN ADDRESS \[[network]\] -" - updateUsrDialog() - return +/obj/machinery/computer/telecomms/monitor/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "Telemonitor") + ui.set_autoupdate(TRUE) + ui.open() -/obj/machinery/computer/telecomms/monitor/attackby() +/obj/machinery/computer/telecomms/monitor/ui_act(action, params) . = ..() - updateUsrDialog() + if(.) + return + if(action == "change_network") + network = params["network_name"] + update_network() + return TRUE + if(action == "delete_server") + servers -= params["server_id"] + +/obj/machinery/computer/telecomms/monitor/ui_data(mob/user) + var/list/data = list() + data["network_id"] = network + data["current_time"] = world.time + data["servers"] = servers + + return data + +/obj/machinery/computer/telecomms/monitor/process() + get_server_status() + +/obj/machinery/computer/telecomms/monitor/proc/get_server_status() + if(network_id == __NETWORK_SERVER) + return + var/data = list() + data["type"] = PACKET_TYPE_PING + ntnet_send(data, network_id) + +/obj/machinery/computer/telecomms/monitor/proc/ntnet_receive(datum/source, datum/netdata/data) + if(islist(data.receiver_id)) + return // if its broadcasting we don't want that packet, its probably our ping + servers[data.sender_id] = data.data + servers[data.sender_id]["last_update"] = world.time + servers[data.sender_id]["sender_id"] = data.sender_id + +/obj/machinery/computer/telecomms/monitor/proc/update_network() + servers = list() + if(!network || network == "NULL") + return + var/new_network_id = NETWORK_NAME_COMBINE(__NETWORK_SERVER, network) // should result in something like SERVER.TCOMMSAT + var/area/A = get_area(src) + if(A) + if(!A.network_root_id) + log_telecomms("Area '[A.name]([REF(A)])' has no network network_root_id, force assigning in object [src]([REF(src)])") + SSnetworks.lookup_area_root_id(A) + new_network_id = NETWORK_NAME_COMBINE(A.network_root_id, new_network_id) // should result in something like SS13.SERVER.TCOMMSAT + else + log_telecomms("Created [src]([REF(src)] in nullspace, assuming network to be in station") + new_network_id = NETWORK_NAME_COMBINE(STATION_NETWORK_ROOT, new_network_id) // should result in something like SS13.SERVER.TCOMMSAT + new_network_id = simple_network_name_fix(new_network_id) // make sure the network name is valid + var/datum/ntnet/new_network = SSnetworks.create_network_simple(new_network_id) + new_network.move_interface(GetComponent(/datum/component/ntnet_interface), new_network_id, network_id) + network_id = new_network_id diff --git a/code/game/machinery/telecomms/machine_interactions.dm b/code/game/machinery/telecomms/machine_interactions.dm index 25ca9b563a6e8..5667bebb77478 100644 --- a/code/game/machinery/telecomms/machine_interactions.dm +++ b/code/game/machinery/telecomms/machine_interactions.dm @@ -116,6 +116,7 @@ network = params["value"] links = list() log_game("[key_name(usr)] has changed the network for [src] at [AREACOORD(src)] to [network].") + update_network() . = TRUE if("tempfreq") if(params["value"]) diff --git a/code/game/machinery/telecomms/machines/broadcaster.dm b/code/game/machinery/telecomms/machines/broadcaster.dm index 7ae10d4ffbbae..87ac18365802a 100644 --- a/code/game/machinery/telecomms/machines/broadcaster.dm +++ b/code/game/machinery/telecomms/machines/broadcaster.dm @@ -15,7 +15,8 @@ GLOBAL_VAR_INIT(message_delay, 0) // To make sure restarting the recentmessages telecomms_type = /obj/machinery/telecomms/broadcaster density = TRUE use_power = IDLE_POWER_USE - idle_power_usage = 25 + idle_power_usage = 5 + active_power_usage = 20 circuit = /obj/item/circuitboard/machine/telecomms/broadcaster /obj/machinery/telecomms/broadcaster/receive_information(datum/signal/subspace/signal, obj/machinery/telecomms/machine_from) @@ -46,6 +47,7 @@ GLOBAL_VAR_INIT(message_delay, 0) // To make sure restarting the recentmessages sleep(signal.data["slow"]) // simulate the network lag if necessary signal.broadcast() + use_power(active_power_usage) if(!GLOB.message_delay) GLOB.message_delay = 1 diff --git a/code/game/machinery/telecomms/machines/bus.dm b/code/game/machinery/telecomms/machines/bus.dm index 6846d57098455..f960969eaa841 100644 --- a/code/game/machinery/telecomms/machines/bus.dm +++ b/code/game/machinery/telecomms/machines/bus.dm @@ -15,7 +15,8 @@ telecomms_type = /obj/machinery/telecomms/bus density = TRUE use_power = IDLE_POWER_USE - idle_power_usage = 50 + idle_power_usage = 10 + active_power_usage = 50 netspeed = 40 circuit = /obj/item/circuitboard/machine/telecomms/bus var/change_frequency = 0 diff --git a/code/game/machinery/telecomms/machines/hub.dm b/code/game/machinery/telecomms/machines/hub.dm index d8c9b3f478041..7b97ff04b8e7f 100644 --- a/code/game/machinery/telecomms/machines/hub.dm +++ b/code/game/machinery/telecomms/machines/hub.dm @@ -15,7 +15,8 @@ telecomms_type = /obj/machinery/telecomms/hub density = TRUE use_power = IDLE_POWER_USE - idle_power_usage = 80 + idle_power_usage = 10 + active_power_usage = 40 long_range_link = TRUE netspeed = 40 circuit = /obj/item/circuitboard/machine/telecomms/hub diff --git a/code/game/machinery/telecomms/machines/message_server.dm b/code/game/machinery/telecomms/machines/message_server.dm index a1c489fe4467b..8879663f62add 100644 --- a/code/game/machinery/telecomms/machines/message_server.dm +++ b/code/game/machinery/telecomms/machines/message_server.dm @@ -77,7 +77,7 @@ density = TRUE use_power = IDLE_POWER_USE idle_power_usage = 10 - active_power_usage = 100 + active_power_usage = 40 circuit = /obj/item/circuitboard/machine/telecomms/message_server var/list/datum/data_tablet_msg/modular_msgs = list() diff --git a/code/game/machinery/telecomms/machines/processor.dm b/code/game/machinery/telecomms/machines/processor.dm index 5c6a3f92a9eba..ab5c3c175f7fc 100644 --- a/code/game/machinery/telecomms/machines/processor.dm +++ b/code/game/machinery/telecomms/machines/processor.dm @@ -13,7 +13,8 @@ telecomms_type = /obj/machinery/telecomms/processor density = TRUE use_power = IDLE_POWER_USE - idle_power_usage = 30 + idle_power_usage = 10 + active_power_usage = 30 circuit = /obj/item/circuitboard/machine/telecomms/processor var/process_mode = 1 // 1 = Uncompress Signals, 0 = Compress Signals diff --git a/code/game/machinery/telecomms/machines/receiver.dm b/code/game/machinery/telecomms/machines/receiver.dm index 1f0a2ec4753fe..89e1c31cd883a 100644 --- a/code/game/machinery/telecomms/machines/receiver.dm +++ b/code/game/machinery/telecomms/machines/receiver.dm @@ -13,7 +13,8 @@ telecomms_type = /obj/machinery/telecomms/receiver density = TRUE use_power = IDLE_POWER_USE - idle_power_usage = 30 + idle_power_usage = 5 + active_power_usage = 20 circuit = /obj/item/circuitboard/machine/telecomms/receiver /obj/machinery/telecomms/receiver/receive_signal(datum/signal/subspace/signal) diff --git a/code/game/machinery/telecomms/machines/relay.dm b/code/game/machinery/telecomms/machines/relay.dm index 27652e4af2e2a..2d06dd11f8240 100644 --- a/code/game/machinery/telecomms/machines/relay.dm +++ b/code/game/machinery/telecomms/machines/relay.dm @@ -12,8 +12,7 @@ desc = "A mighty piece of hardware used to send massive amounts of data far away." telecomms_type = /obj/machinery/telecomms/relay density = TRUE - use_power = IDLE_POWER_USE - idle_power_usage = 30 + use_power = NO_POWER_USE // made only so they don't overheat in whatever places they usually are in (exploration shuttle, small rooms in multi-z maps etc.) netspeed = 5 long_range_link = 1 circuit = /obj/item/circuitboard/machine/telecomms/relay diff --git a/code/game/machinery/telecomms/machines/server.dm b/code/game/machinery/telecomms/machines/server.dm index a90f707e6a7be..a967533160486 100644 --- a/code/game/machinery/telecomms/machines/server.dm +++ b/code/game/machinery/telecomms/machines/server.dm @@ -12,7 +12,8 @@ telecomms_type = /obj/machinery/telecomms/server density = TRUE use_power = IDLE_POWER_USE - idle_power_usage = 15 + idle_power_usage = 5 + active_power_usage = 10 circuit = /obj/item/circuitboard/machine/telecomms/server var/list/log_entries = list() var/totaltraffic = 0 // gigabytes (if > 1024, divide by 1024 -> terrabytes) diff --git a/code/game/machinery/telecomms/telecomunications.dm b/code/game/machinery/telecomms/telecomunications.dm index 183c75955b45d..62fc15fd0d93f 100644 --- a/code/game/machinery/telecomms/telecomunications.dm +++ b/code/game/machinery/telecomms/telecomunications.dm @@ -18,7 +18,8 @@ GLOBAL_LIST_EMPTY(telecomms_list) icon = 'icons/obj/machines/telecomms.dmi' critical_machine = TRUE light_color = LIGHT_COLOR_CYAN - /// list of machines this machine is linked to + network_id = __NETWORK_SERVER + /// /// list of machines this machine is linked to var/list/links = list() /** * associative lazylist list of the telecomms_type of linked telecomms machines and a list of said machines. @@ -49,6 +50,8 @@ GLOBAL_LIST_EMPTY(telecomms_list) /// Is it a hidden machine? var/hide = FALSE + var/datum/component/server/server_component + /// relay signal to all linked machinery that are of type [filter]. If signal has been sent [amount] times, stop sending /obj/machinery/telecomms/proc/relay_information(datum/signal/subspace/signal, filter, copysig, amount = 20) @@ -59,12 +62,16 @@ GLOBAL_LIST_EMPTY(telecomms_list) CRASH("null or non /obj/machinery/telecomms typepath given as the filter argument! given typepath: [filter]") var/send_count = 0 - // Apply some lag based on traffic rates var/netlag = round(traffic / 50) if(netlag > signal.data["slow"]) signal.data["slow"] = netlag + // Aply some lag from throttling + var/efficiency = get_efficiency() + var/throttling = (10 - 10 * efficiency) + signal.data["slow"] += throttling + // Loop through all linked machines and send the signal or copy. for(var/obj/machinery/telecomms/filtered_machine in links_by_telecomms_type?[filter]) @@ -86,7 +93,7 @@ GLOBAL_LIST_EMPTY(telecomms_list) if(send_count > 0 && is_freq_listening(signal)) traffic++ - + use_power(active_power_usage) return send_count /obj/machinery/telecomms/proc/relay_direct_information(datum/signal/signal, obj/machinery/telecomms/machine) @@ -103,6 +110,9 @@ GLOBAL_LIST_EMPTY(telecomms_list) /obj/machinery/telecomms/Initialize(mapload) . = ..() + server_component = AddComponent(/datum/component/server) // they generate heat + update_network() // we try to connect to NTnet + RegisterSignal(src, COMSIG_COMPONENT_NTNET_RECEIVE, PROC_REF(ntnet_receive)) GLOB.telecomms_list += src if(mapload && autolinkers.len) return INITIALIZE_HINT_LATELOAD @@ -114,12 +124,23 @@ GLOBAL_LIST_EMPTY(telecomms_list) add_automatic_link(telecomms_machine) /obj/machinery/telecomms/Destroy() + UnregisterSignal(src, COMSIG_COMPONENT_NTNET_RECEIVE) + server_component = null GLOB.telecomms_list -= src for(var/obj/machinery/telecomms/comm in GLOB.telecomms_list) remove_link(comm) links = list() return ..() +/obj/machinery/telecomms/proc/get_temperature() + return server_component.temperature + +/obj/machinery/telecomms/proc/get_efficiency() + return server_component.efficiency + +/obj/machinery/telecomms/proc/get_overheat_temperature() + return server_component.overheated_temp + // Used in auto linking /obj/machinery/telecomms/proc/add_automatic_link(obj/machinery/telecomms/T) var/turf/position = get_turf(src) @@ -136,6 +157,39 @@ GLOBAL_LIST_EMPTY(telecomms_list) add_new_link(T) return +/obj/machinery/telecomms/proc/update_network() + var/area/A = get_area(src) + if(!network || network == "NULL" || !A) + return + var/new_network_id = NETWORK_NAME_COMBINE(__NETWORK_SERVER, network) // should result in something like SERVER.TCOMMSAT + if(!A.network_root_id) + log_telecomms("Area '[A.name]([REF(A)])' has no network network_root_id, force assigning in object [src]([REF(src)])") + SSnetworks.lookup_area_root_id(A) + new_network_id = NETWORK_NAME_COMBINE(A.network_root_id, new_network_id) // should result in something like SS13.SERVER.TCOMMSAT + else + log_telecomms("Created [src]([REF(src)] in nullspace, assuming network to be in station") + new_network_id = NETWORK_NAME_COMBINE(STATION_NETWORK_ROOT, new_network_id) // should result in something like SS13.SERVER.TCOMMSAT + new_network_id = simple_network_name_fix(new_network_id) // make sure the network name is valid + var/datum/ntnet/new_network = SSnetworks.create_network_simple(new_network_id) + new_network.move_interface(GetComponent(/datum/component/ntnet_interface), new_network_id, network_id) + network_id = new_network_id + +/obj/machinery/telecomms/proc/ntnet_receive(datum/source, datum/netdata/data) + + //Check radio signal jamming + if(is_jammed(JAMMER_PROTECTION_WIRELESS) || machine_stat & (BROKEN|NOPOWER|MAINT|EMPED)) + return + + switch(data.data["type"]) + if(PACKET_TYPE_PING) // we respond to the ping with our status + var/list/send_data = list() + send_data["name"] = name + send_data["temperature"] = get_temperature() + send_data["overheat_temperature"] = get_overheat_temperature() + send_data["efficiency"] = get_efficiency() + send_data["overheated"] = (machine_stat & OVERHEATED) + + ntnet_send(send_data, data["sender_id"]) /obj/machinery/telecomms/update_icon() if(on) @@ -153,7 +207,7 @@ GLOBAL_LIST_EMPTY(telecomms_list) var/newState = on if(toggled) - if(machine_stat & (BROKEN|NOPOWER|EMPED)) // if powered, on. if not powered, off. if too damaged, off + if(machine_stat & (BROKEN|NOPOWER|EMPED|OVERHEATED)) // if powered, on. if not powered, off. if too damaged, off newState = FALSE else newState = TRUE diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 713ff44cf5ad7..c970ae658ff1f 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -453,7 +453,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp // This is the ghost's follow verb with an argument /mob/dead/observer/check_orbitable(atom/movable/target_original) var/atom/movable/target = target_original.get_orbitable() - if (!istype(target) || target_original.orbit_datum?.parent == target_original) + if (!istype(target) || orbiting?.parent == target_original) return var/icon/I = icon(target.icon,target.icon_state,target.dir) diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm index 687f9da811192..9e728db502056 100644 --- a/code/modules/power/power.dm +++ b/code/modules/power/power.dm @@ -78,7 +78,7 @@ return TRUE if(!loc) return FALSE - if(machine_stat & EMPED) + if(machine_stat & (EMPED|OVERHEATED)) return FALSE var/area/A = get_area(src) // make sure it's in an area if(!A) @@ -94,6 +94,7 @@ return if(chan == -1) chan = power_channel + SEND_SIGNAL(src, COMSIG_MACHINERY_POWER_USED, amount, chan) A.use_power(amount, chan) /obj/machinery/proc/addStaticPower(value, powerchannel) diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm index 2ea70ed407f99..0645cd91e86c3 100644 --- a/code/modules/research/server.dm +++ b/code/modules/research/server.dm @@ -3,11 +3,12 @@ desc = "A computer system running a deep neural network that processes arbitrary information to produce data useable in the development of new technologies. In layman's terms, it makes research points." icon = 'icons/obj/machines/research.dmi' icon_state = "RD-server-on" + circuit = /obj/item/circuitboard/machine/rdserver + + idle_power_usage = 5 // having servers online uses a little bit of power + active_power_usage = 50 // mining uses a lot of power + var/datum/techweb/stored_research - //Code for point mining here. - var/overheated = FALSE - var/working = TRUE - var/research_disabled = FALSE var/server_id = 0 var/heat_gen = 1 // some notes on this number @@ -17,24 +18,12 @@ // 7.40./2 = 3.70 (note, all these values are rounded). This is howw this number was found. var/base_mining_income = 3.70 - // Heating is weird. Since the servers are stored in a room that sucks air in one vent, into a pipe network, to a - // T1 freezer, then out another vent at standard presure, the rooms temps could vary as wieldy as 100K. The T1 freezer - // has 10000 heat power at the start, so each of the servers produce that but only heat a quarter of the turf - // This allows the servers to rapidly heat up in under 5 min to the shut off point and make it annoying to cool back - // down, giving time for RD to fire the guy who shut off the cooler - - var/heating_power = 10000 // Changed the value from 40000. Just enough for a T1 freezer to keep up with 2 of them - var/heating_effecency = 0.25 - var/temp_tolerance_low = T0C - var/temp_tolerance_high = T20C - var/temp_tolerance_damage = T0C + 200 // Most CPUS get up to 200C they start breaking. TODO: Start doing damage to the server? - var/temp_penalty_coefficient = 0.5 //1 = -1 points per degree above high tolerance. 0.5 = -0.5 points per degree above high tolerance. - var/current_temp = -1 req_access = list(ACCESS_RD_SERVER) //ONLY THE R&D, AND WHO HAVE THE ACCESS TO CAN CHANGE SERVER SETTINGS. + var/datum/component/server/server_component /obj/machinery/rnd/server/Initialize(mapload) . = ..() - + server_component = AddComponent(/datum/component/server) server_id = 0 while(server_id == 0) var/test_id = rand(1,65535) @@ -47,10 +36,9 @@ name += " [uppertext(num2hex(server_id, -1))]" //gives us a random four-digit hex number as part of the name. Y'know, for fluff. SSresearch.servers |= src stored_research = SSresearch.science_tech - // The +10 is so the sparks work - RefreshParts() /obj/machinery/rnd/server/Destroy() + server_component = null SSresearch.servers -= src return ..() @@ -58,7 +46,7 @@ var/tot_rating = 0 for(var/obj/item/stock_parts/SP in src) tot_rating += SP.rating - heat_gen = initial(src.heat_gen) / max(1, tot_rating) + active_power_usage = initial(src.active_power_usage) / max(1, tot_rating) /obj/machinery/rnd/server/update_icon() if (panel_open) @@ -67,95 +55,37 @@ if (machine_stat & EMPED || machine_stat & NOPOWER) icon_state = "RD-server-off" return - if (research_disabled || overheated) + if (machine_stat & (TURNED_OFF|OVERHEATED)) icon_state = "RD-server-halt" return icon_state = "RD-server-on" -/obj/machinery/rnd/server/power_change() - . = ..() - refresh_working() - return - -/obj/machinery/rnd/server/process() - if(!working) - current_temp = -1 - return - var/turf/L = get_turf(src) - var/datum/gas_mixture/env - if(istype(L)) - env = L.return_air() - // This is from the RD server code. It works well enough but I need to move over the - // sspace heater code so we can caculate power used per tick as well and making this both - // exothermic and an endothermic component - if(env) - var/perc = max((get_env_temp() - temp_tolerance_high), 0) * temp_penalty_coefficient / base_mining_income - - env.adjust_heat(heating_power * perc * heat_gen) - air_update_turf() - src.air_update_turf() - else - current_temp = env ? env.return_temperature() : -1 - -/obj/machinery/rnd/server/proc/get_env_temp() - // if we are on and ran though one tick - if(working && current_temp >= 0) - return current_temp - else - // otherwise we get the temp from the turf - var/turf/L = get_turf(src) - var/datum/gas_mixture/env - if(istype(L)) - env = L.return_air() - return env ? env.return_temperature() : T20C // env might be null at round start. This stops runtimes - -/obj/machinery/rnd/server/proc/refresh_working() - var/current_temp = get_env_temp() - - // Once we go over the damage temp, the breaker is flipped - // Power is still going to the server - if(!overheated && current_temp >= temp_tolerance_damage) - investigate_log("[src] overheated!", INVESTIGATE_RESEARCH) // Do we need this? - overheated = TRUE - - // If we are over heated, the server will not restart till - // eveything is at a safe temp - if(overheated && current_temp <= temp_tolerance_low) - overheated = FALSE - - // If we are overheateed, start shooting out sparks - // don't shoot them if we have no power - if(overheated && !(machine_stat & NOPOWER) && prob(40)) - do_sparks(5, FALSE, src) - - if(overheated || research_disabled || machine_stat & EMPED || machine_stat & NOPOWER) - working = FALSE - else - working = TRUE - - update_icon() - -/obj/machinery/rnd/server/emp_act() - . = ..() - refresh_working() - -/obj/machinery/rnd/server/emp_reset() - ..() - refresh_working() /obj/machinery/rnd/server/proc/toggle_disable() - research_disabled = !research_disabled - refresh_working() + set_machine_stat(machine_stat ^ TURNED_OFF) /obj/machinery/rnd/server/proc/mine() - // Cheap way to refresh if we are operational or not. mine() is run on the tech web - // subprocess. This saves us having to run our own subprocess - refresh_working() - if(working) - var/penalty = max((get_env_temp() - temp_tolerance_high), 0) * temp_penalty_coefficient - return list(TECHWEB_POINT_TYPE_GENERIC = max(base_mining_income - penalty, 0)) - else - return list(TECHWEB_POINT_TYPE_GENERIC = 0) + use_power(active_power_usage, power_channel) + var/efficiency = get_efficiency() + if(!powered() || efficiency <= 0 && machine_stat) + return null + return list(TECHWEB_POINT_TYPE_GENERIC = max(base_mining_income * efficiency, 0)) + +/obj/machinery/rnd/server/proc/get_temperature() + return server_component.temperature + +/obj/machinery/rnd/server/proc/get_overheat_temperature() + return server_component.overheated_temp + +/obj/machinery/rnd/server/proc/get_warning_temperature() + return server_component.warning_temp + +/obj/machinery/rnd/server/proc/get_efficiency() + return server_component.efficiency + +/obj/machinery/rnd/server/on_set_machine_stat(old_value) + . = ..() + update_appearance() /obj/machinery/computer/rdservercontrol name = "R&D Server Controller" @@ -182,11 +112,11 @@ servers += list(list( "name" = S.name, "server_id" = S.server_id, - "temperature" = S.get_env_temp(), - "temperature_warning" = S.temp_tolerance_high, - "temperature_max" = S.temp_tolerance_damage, - "enabled" = !S.research_disabled, - "overheated" = S.overheated, + "temperature" = S.get_temperature(), + "temperature_warning" = S.get_warning_temperature(), + "temperature_max" = S.get_overheat_temperature(), + "enabled" = !(S.machine_stat & TURNED_OFF), // displays state of the power button as you can turn on/off servers using this console + "overheated" = (S.machine_stat & OVERHEATED), )) data["servers"] = servers @@ -222,7 +152,7 @@ if(S.server_id == test_id) S.toggle_disable() - investigate_log("[S.name] was turned [S.research_disabled ? "off" : "on"] by [key_name(usr)]", INVESTIGATE_RESEARCH) + investigate_log("[S.name] was turned [(S.machine_stat & TURNED_OFF) ? "off" : "on"] by [key_name(usr)]", INVESTIGATE_RESEARCH) . = TRUE break diff --git a/code/modules/vending/cigarette.dm b/code/modules/vending/cigarette.dm index 11cb5dc2bc990..bdcbddde25053 100644 --- a/code/modules/vending/cigarette.dm +++ b/code/modules/vending/cigarette.dm @@ -9,6 +9,7 @@ /obj/item/storage/fancy/cigarettes/cigpack_robust = 3, /obj/item/storage/fancy/cigarettes/cigpack_carp = 3, /obj/item/storage/fancy/cigarettes/cigpack_midori = 3, + /obj/item/storage/fancy/cigarettes/dromedaryco = 3, /obj/item/storage/box/matches = 10, /obj/item/lighter/greyscale = 4, /obj/item/storage/fancy/rollingpapers = 5) diff --git a/html/changelog.html b/html/changelog.html index 32c74b2c044f9..b66404b089a28 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -56,6 +56,35 @@ -->
+

29 August 2024

+

Dejaku51 updated:

+ +

Rukofamicom updated:

+ + +

28 August 2024

+

ClownMoff updated:

+ +

XeonMations updated:

+ + +

27 August 2024

+

XeonMations updated:

+ +

26 August 2024

XeonMations updated:

GoonStation 13 Development Team diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index c8592ac6f633b..76967c19aae8c 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -44022,3 +44022,20 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. XeonMations: - bugfix: Fixed a few mobs having floating animations. - bugfix: Ghosts can no longer become stuck in the orbit animation. +2024-08-27: + XeonMations: + - bugfix: Ghosts can now orbit the same person another ghost is orbiting. +2024-08-28: + ClownMoff: + - rscadd: Adds the Dromedaire Co cigarettes to the vendor + XeonMations: + - bugfix: Fixed simplemobs being able to interact with machinery via CTRL, ALT clicks. +2024-08-29: + Dejaku51: + - rscadd: thermal mechanics for tcomms + - bugfix: thermal mechanics for RnD servers + - bugfix: upgrading RnD servers + - tweak: upgrading RnD servers now makes it use less power and produce less heat + Rukofamicom: + - bugfix: Gibtonite flashes again, so miners can better time the deactivation of + it with a scanner. diff --git a/icons/turf/smoothrocks.dmi b/icons/turf/smoothrocks.dmi index 0948aaaaa3b8d2d68b267125a0f337296ea59f1f..17bbf513ce744f21a1dfd1f2cb8fa97bdd010bd5 100644 GIT binary patch delta 280 zcmV+z0q6dt9-tnOf&n6tgC&2V7u2fifxbc&T9;U~u@qZHygdo!SP-9bS+6G6WM_7i zxqM!&H(R-U*@#ORa!kEkNc&KW>LVUXHyy^h3-PTh*F!FC31d0S=afn}r2TuouVyJw#9jErY<_iXMBBct$c)8%HuDns!w$}Hq>Vca;# z-$DM+Y^s3?Rl|s?+4pK1fly!lk7SsTyLEgmsgEV>+I@+aaQiJccEhRtoZ5Fkç e{;#W)n9J36`Tb+{1>^^Z#{CL4Dwwme0dozN366UJ delta 284 zcmV+%0ptFl9;6txGK07{yi*Z%;xwRu!LeS+6G6WM_7i zxqMl!)*HEaU5j%Va!kE^miD0*)mPk?ZaR#07vg(YE{9y&62@|tPbrmdNV|`GU(ZCf zk3$~&N>qoTJ%vks6|E3jBeX$ii_i|C9}(Ik^bV?rpwKQRfghWlv&8%!nkpe zzk~dt*;E4)s)i9&v+vb30-?V8AIUHwx2yP8QXfm$w!0F~;rd%{?1p3eJ+<%t9#I`r i`n-8%>~CGF#9S^ni{A@htRIy0$#_GfR|B)H0doz38-(2e diff --git a/tgui/packages/tgui/interfaces/Telemonitor.tsx b/tgui/packages/tgui/interfaces/Telemonitor.tsx new file mode 100644 index 0000000000000..9c034a2d325ae --- /dev/null +++ b/tgui/packages/tgui/interfaces/Telemonitor.tsx @@ -0,0 +1,79 @@ +import { useBackend } from '../backend'; +import { Input, Section, Stack, ProgressBar, Button, Flex } from '../components'; +import { Window } from '../layouts'; +type Tdata = { + network_id: string; + current_time: number; // world.time during ui_update + servers: { + name: string; // name of the server + sender_id: string; // hardware id of the server + temperature: number; // Kelvins + overheat_temperature: number; // Kelvins + efficiency: number; // 0-1 range + last_update: number; // world.time of last update + overheated: boolean; // true/false + }[]; +}; +export const Telemonitor = (props, context) => { + const { act, data } = useBackend(context); + const isOnline = function (server) { + return Math.floor((data.current_time - server.last_update) / 10) < 10; + }; + return ( + + +
+ Network to monitor: +
+ + act('change_network', { + network_name: value, + }) + } + /> +
+ {data.servers.length === 0 ? ( + + + Searching for servers + . + . + . + + + ) : ( + + {Object.values(data.servers).map((server) => ( + +
+ {isOnline(server) ? (server.overheated ? 'OVERHEATED' : 'ONLINE') : 'OFFLINE'} + + }> + Efficiency:{' '} + + Temperature: {Math.round(server.temperature)}K +
+
+ ))} +
+ )} +
+
+ ); +};