diff --git a/_maps/map_files/CatwalkStation/CatwalkStation_2023.dmm b/_maps/map_files/CatwalkStation/CatwalkStation_2023.dmm index 2b43ae43fb3..168d97dfb35 100644 --- a/_maps/map_files/CatwalkStation/CatwalkStation_2023.dmm +++ b/_maps/map_files/CatwalkStation/CatwalkStation_2023.dmm @@ -6147,10 +6147,7 @@ "bCC" = ( /obj/machinery/status_display/evac/directional/north, /obj/structure/table/wood, -/obj/machinery/fax{ - fax_name = "Captain's Office"; - name = "Captain's Fax Machine" - }, +/obj/machinery/fax/heads/captain, /turf/open/floor/wood/large, /area/station/command/heads_quarters/captain/private) "bCH" = ( @@ -18908,11 +18905,8 @@ dir = 8 }, /obj/structure/table, -/obj/machinery/fax{ - fax_name = "Quartermaster's Office"; - name = "Quartermaster's Fax Machine" - }, /obj/machinery/firealarm/directional/west, +/obj/machinery/fax/heads/qm, /turf/open/floor/wood/parquet, /area/station/command/heads_quarters/qm) "eYe" = ( @@ -24244,13 +24238,10 @@ /area/station/service/janitor) "gqc" = ( /obj/structure/table/reinforced/rglass, -/obj/machinery/fax{ - fax_name = "Chief Engineer's Office"; - name = "Chief Engineer's Fax Machine" - }, /obj/effect/turf_decal/siding/yellow/end{ dir = 8 }, +/obj/machinery/fax/heads/ce, /turf/open/floor/engine, /area/station/command/heads_quarters/ce) "gqj" = ( @@ -29012,12 +29003,9 @@ /turf/open/floor/wood, /area/station/command/corporate_showroom) "hIg" = ( -/obj/machinery/fax{ - fax_name = "Head of Personnel's Office"; - name = "Head of Personnel's Fax Machine" - }, /obj/structure/table/wood, /obj/machinery/newscaster/directional/east, +/obj/machinery/fax/heads/hop, /turf/open/floor/wood/tile, /area/station/command/heads_quarters/hop) "hIj" = ( @@ -63250,10 +63238,7 @@ /area/station/commons/fitness/recreation) "qPq" = ( /obj/structure/table, -/obj/machinery/fax{ - fax_name = "Head of Security's Office"; - name = "Head of Security's Fax Machine" - }, +/obj/machinery/fax/heads/hos, /turf/open/floor/wood, /area/station/command/heads_quarters/hos) "qPs" = ( @@ -69362,10 +69347,7 @@ /obj/effect/turf_decal/trimline/dark_blue/filled/line{ dir = 1 }, -/obj/machinery/fax{ - fax_name = "Chief Medical Officer's Office"; - name = "Chief Medical Officer's Fax Machine" - }, +/obj/machinery/fax/heads/cmo, /turf/open/floor/holofloor/dark, /area/station/command/heads_quarters/cmo) "syb" = ( @@ -83445,11 +83427,8 @@ /area/station/engineering/atmos/office) "wha" = ( /obj/structure/cable, -/obj/machinery/fax{ - fax_name = "Research Director's Office"; - name = "Research Director's Fax Machine" - }, /obj/structure/table, +/obj/machinery/fax/heads/rd, /turf/open/floor/wood, /area/station/command/heads_quarters/rd) "whi" = ( diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index 6b9115f4b99..6031abb9832 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -12832,12 +12832,9 @@ "deW" = ( /obj/machinery/computer/security/telescreen/entertainment/directional/north, /obj/structure/table, -/obj/machinery/fax{ - fax_name = "Chief Medical Officer's Office"; - name = "Chief Medical Officer's Fax Machine" - }, /obj/effect/turf_decal/tile/blue/opposingcorners, /obj/machinery/light/cold/directional/north, +/obj/machinery/fax/heads/cmo, /turf/open/floor/iron/white, /area/station/command/heads_quarters/cmo) "deX" = ( @@ -14882,13 +14879,10 @@ /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/table/reinforced, -/obj/machinery/fax{ - fax_name = "Research Director's Office"; - name = "Research Director's Fax Machine" - }, /obj/effect/turf_decal/tile/purple{ dir = 8 }, +/obj/machinery/fax/heads/rd, /turf/open/floor/iron/white, /area/station/command/heads_quarters/rd) "dGs" = ( @@ -16747,11 +16741,8 @@ "edS" = ( /obj/machinery/firealarm/directional/south, /obj/structure/table/reinforced, -/obj/machinery/fax{ - fax_name = "Chief Engineer's Office"; - name = "Chief Engineer's Fax Machine" - }, /obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/fax/heads/ce, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/ce) "edW" = ( @@ -28965,13 +28956,10 @@ /area/space/nearstation) "haq" = ( /obj/structure/table, -/obj/machinery/fax{ - fax_name = "Quartermaster's Office"; - name = "Quartermaster's Fax Machine" - }, /obj/effect/turf_decal/tile/brown/anticorner/contrasted{ dir = 1 }, +/obj/machinery/fax/heads/qm, /turf/open/floor/iron, /area/station/command/heads_quarters/qm) "haw" = ( @@ -38301,12 +38289,9 @@ /area/station/service/library/lounge) "jst" = ( /obj/structure/table/wood, -/obj/machinery/fax{ - fax_name = "Head of Security's Office"; - name = "Head of Security's Fax Machine" - }, /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/structure/sign/nanotrasen/directional/north, +/obj/machinery/fax/heads/hos, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hos) "jsL" = ( @@ -44901,10 +44886,7 @@ "lbt" = ( /obj/structure/table/wood, /obj/machinery/newscaster/directional/east, -/obj/machinery/fax{ - fax_name = "Head of Personnel's Office"; - name = "Head of Personnel's Fax Machine" - }, +/obj/machinery/fax/heads/hop, /turf/open/floor/wood, /area/station/command/heads_quarters/hop) "lbu" = ( @@ -74913,11 +74895,8 @@ /area/station/security/checkpoint/medical/medsci) "swj" = ( /obj/structure/table/wood, -/obj/machinery/fax{ - fax_name = "Captain's Office"; - name = "Captain's Fax Machine" - }, /obj/structure/sign/nanotrasen/directional/west, +/obj/machinery/fax/heads/captain, /turf/open/floor/wood, /area/station/command/heads_quarters/captain) "swn" = ( diff --git a/_maps/map_files/IceBoxStation/IceBoxStation.dmm b/_maps/map_files/IceBoxStation/IceBoxStation.dmm index a31a47131c1..93372524aa3 100644 --- a/_maps/map_files/IceBoxStation/IceBoxStation.dmm +++ b/_maps/map_files/IceBoxStation/IceBoxStation.dmm @@ -865,10 +865,7 @@ "anP" = ( /obj/structure/table, /obj/machinery/light_switch/directional/north, -/obj/machinery/fax{ - fax_name = "Research Director's Office"; - name = "Research Director's Fax Machine" - }, +/obj/machinery/fax/heads/rd, /turf/open/floor/iron/white/side{ dir = 1 }, @@ -1958,12 +1955,9 @@ "aBi" = ( /obj/effect/turf_decal/trimline/blue/filled/line, /obj/structure/table/glass, -/obj/machinery/fax{ - fax_name = "Chief Medical Officer's Office"; - name = "Chief Medical Officer's Fax Machine" - }, /obj/machinery/light/cold/directional/south, /obj/machinery/firealarm/directional/south, +/obj/machinery/fax/heads/cmo, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/cmo) "aBE" = ( @@ -5590,10 +5584,7 @@ /area/station/service/chapel) "bAT" = ( /obj/structure/table/reinforced, -/obj/machinery/fax{ - fax_name = "Chief Engineer's Office"; - name = "Chief Engineer's Fax Machine" - }, +/obj/machinery/fax/heads/ce, /turf/open/floor/iron, /area/station/command/heads_quarters/ce) "bAX" = ( @@ -17424,10 +17415,7 @@ /area/station/service/hydroponics) "eUn" = ( /obj/structure/table/wood, -/obj/machinery/fax{ - fax_name = "Head of Security's Office"; - name = "Head of Security's Fax Machine" - }, +/obj/machinery/fax/heads/hos, /turf/open/floor/wood/large, /area/station/command/heads_quarters/hos) "eUx" = ( @@ -60778,13 +60766,10 @@ /area/icemoon/underground/explored) "rdf" = ( /obj/structure/table/wood, -/obj/machinery/fax{ - fax_name = "Captain's Office"; - name = "Captain's Fax Machine" - }, /obj/effect/turf_decal/siding/wood{ dir = 8 }, +/obj/machinery/fax/heads/captain, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/captain) "rdg" = ( @@ -77884,10 +77869,7 @@ dir = 4 }, /obj/structure/table, -/obj/machinery/fax{ - fax_name = "Head of Personnel's Office"; - name = "Head of Personnel's Fax Machine" - }, +/obj/machinery/fax/heads/hop, /turf/open/floor/iron, /area/station/command/heads_quarters/hop) "vYq" = ( @@ -81692,13 +81674,10 @@ /obj/machinery/power/apc/auto_name/directional/west, /obj/structure/cable, /obj/structure/table, -/obj/machinery/fax{ - fax_name = "Quartermaster's Office"; - name = "Quartermaster's Fax Machine" - }, /obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 8 }, +/obj/machinery/fax/heads/qm, /turf/open/floor/iron, /area/station/command/heads_quarters/qm) "xen" = ( diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index 316f1b0f0f2..611118b44a2 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -8540,13 +8540,10 @@ /area/station/maintenance/port/aft) "cYc" = ( /obj/structure/table/reinforced, -/obj/machinery/fax{ - fax_name = "Chief Engineer's Office"; - name = "Chief Engineer's Fax Machine" - }, /obj/effect/turf_decal/tile/neutral/half/contrasted{ dir = 4 }, +/obj/machinery/fax/heads/ce, /turf/open/floor/iron, /area/station/command/heads_quarters/ce) "cYx" = ( @@ -22558,10 +22555,6 @@ dir = 1 }, /obj/structure/table/wood, -/obj/machinery/fax{ - fax_name = "Quartermaster"; - name = "Quartermaster's Fax Machine" - }, /obj/structure/disposalpipe/segment{ dir = 8 }, @@ -22573,6 +22566,7 @@ /obj/effect/mapping_helpers/requests_console/assistance, /obj/effect/mapping_helpers/requests_console/information, /obj/effect/mapping_helpers/requests_console/ore_update, +/obj/machinery/fax/heads/qm, /turf/open/floor/wood/large, /area/station/command/heads_quarters/qm) "hQu" = ( @@ -23730,10 +23724,7 @@ /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/table/wood, -/obj/machinery/fax{ - fax_name = "Head of Personnel's Office"; - name = "Head of Personnel's Fax Machine" - }, +/obj/machinery/fax/heads/hop, /turf/open/floor/carpet, /area/station/command/heads_quarters/hop) "iiL" = ( @@ -27716,11 +27707,8 @@ /area/station/medical/chemistry) "jxv" = ( /obj/structure/table/wood, -/obj/machinery/fax{ - fax_name = "Captain's Office"; - name = "Captain's Fax Machine" - }, /obj/structure/window/reinforced/spawner/directional/south, +/obj/machinery/fax/heads/captain, /turf/open/floor/wood, /area/station/command/heads_quarters/captain/private) "jxM" = ( @@ -47634,10 +47622,7 @@ /obj/machinery/power/apc/auto_name/directional/east, /obj/structure/table/wood, /obj/structure/cable, -/obj/machinery/fax{ - fax_name = "Head of Security's Office"; - name = "Head of Security's Fax Machine" - }, +/obj/machinery/fax/heads/hos, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hos) "qmi" = ( @@ -62039,13 +62024,10 @@ "vgZ" = ( /obj/structure/table/glass, /obj/structure/cable, -/obj/machinery/fax{ - fax_name = "Chief Medical Officer's Office"; - name = "Chief Medical Officer's Fax Machine" - }, /obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 1 }, +/obj/machinery/fax/heads/cmo, /turf/open/floor/iron/white, /area/station/command/heads_quarters/cmo) "vhb" = ( @@ -70099,13 +70081,10 @@ /obj/machinery/power/apc/auto_name/directional/west, /obj/structure/cable, /obj/structure/table, -/obj/machinery/fax{ - fax_name = "Research Director's Office"; - name = "Research Director's Fax Machine" - }, /obj/effect/turf_decal/tile/neutral/opposingcorners{ dir = 1 }, +/obj/machinery/fax/heads/rd, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/rd) "xPx" = ( diff --git a/_maps/map_files/NebulaStation/NebulaStation.dmm b/_maps/map_files/NebulaStation/NebulaStation.dmm index 4237d32c715..0760f2c0f9a 100644 --- a/_maps/map_files/NebulaStation/NebulaStation.dmm +++ b/_maps/map_files/NebulaStation/NebulaStation.dmm @@ -15557,10 +15557,7 @@ /area/station/service/library/printer) "cqG" = ( /obj/structure/table/reinforced/rglass, -/obj/machinery/fax{ - fax_name = "Research Director's Office"; - name = "Research Director's Fax Machine" - }, +/obj/machinery/fax/heads/rd, /turf/open/floor/carpet/purple, /area/station/command/heads_quarters/rd) "cqH" = ( @@ -19865,12 +19862,9 @@ /turf/open/floor/iron/dark, /area/station/engineering/atmos) "cXo" = ( -/obj/machinery/fax{ - fax_name = "Chief Engineer's Office"; - name = "Chief Engineer's Fax Machine" - }, /obj/item/disk/computer/engineering, /obj/structure/table/reinforced/rglass, +/obj/machinery/fax/heads/ce, /turf/open/floor/carpet/orange, /area/station/command/heads_quarters/ce) "cXs" = ( @@ -22743,11 +22737,8 @@ }, /obj/effect/turf_decal/siding/wood, /obj/structure/table/wood, -/obj/machinery/fax{ - fax_name = "Detective's Office"; - name = "Detective's Fax Machine" - }, /obj/structure/detectiveboard/directional/north, +/obj/machinery/fax/heads/hos, /turf/open/floor/wood/large, /area/station/security/detectives_office) "dsq" = ( @@ -67552,10 +67543,7 @@ /obj/item/folder/blue, /obj/item/clothing/neck/stethoscope, /obj/item/clothing/glasses/hud/health, -/obj/machinery/fax{ - fax_name = "Chief Medical Officer's Office"; - name = "Chief Medical Officer's Fax Machine" - }, +/obj/machinery/fax/heads/cmo, /turf/open/floor/carpet/blue, /area/station/command/heads_quarters/cmo) "jWn" = ( @@ -68761,10 +68749,7 @@ /area/station/hallway/secondary/service) "kfr" = ( /obj/structure/table/reinforced/rglass, -/obj/machinery/fax{ - fax_name = "Captain's Office"; - name = "Captain's Fax Machine" - }, +/obj/machinery/fax/heads/captain, /turf/open/floor/carpet/royalblue, /area/station/command/heads_quarters/captain) "kfu" = ( @@ -74259,10 +74244,7 @@ /area/station/engineering/break_room) "kRR" = ( /obj/structure/table/reinforced/rglass, -/obj/machinery/fax{ - fax_name = "Head of Personnel's Office"; - name = "Head of Personnel's Fax Machine" - }, +/obj/machinery/fax/heads/hop, /turf/open/floor/carpet/royalblue, /area/station/command/heads_quarters/hop) "kSl" = ( @@ -111360,11 +111342,8 @@ /area/station/command/heads_quarters/hop) "quR" = ( /obj/structure/table/reinforced/rglass, -/obj/machinery/fax{ - fax_name = "Quartermaster's Office"; - name = "Quartermaster's Fax Machine" - }, /obj/item/paperwork/cargo, +/obj/machinery/fax/heads/qm, /turf/open/floor/carpet, /area/station/command/heads_quarters/qm) "quT" = ( diff --git a/_maps/map_files/tramstation/tramstation.dmm b/_maps/map_files/tramstation/tramstation.dmm index 7e9d064585a..acaaaec1f6f 100644 --- a/_maps/map_files/tramstation/tramstation.dmm +++ b/_maps/map_files/tramstation/tramstation.dmm @@ -5541,11 +5541,8 @@ /area/station/science/xenobiology) "aPm" = ( /obj/structure/table/glass, -/obj/machinery/fax{ - name = "Chief Medical Officer's Fax Machine"; - fax_name = "Chief Medical Officer's Office" - }, /obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/fax/heads/cmo, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/cmo) "aPs" = ( @@ -31137,10 +31134,6 @@ /area/station/science/ordnance/storage) "jXF" = ( /obj/structure/table, -/obj/machinery/fax{ - name = "Research Director's Fax Machine"; - fax_name = "Research Director's Office" - }, /obj/machinery/button/door/directional/south{ name = "Science Lockdown Toggle"; pixel_x = -6; @@ -31167,6 +31160,7 @@ id = "misclab"; req_access = list("xenobiology") }, +/obj/machinery/fax/heads/rd, /turf/open/floor/iron/cafeteria, /area/station/command/heads_quarters/rd) "jXG" = ( @@ -55621,10 +55615,7 @@ /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 1 }, -/obj/machinery/fax{ - name = "Chief Engineer's Fax Machine"; - fax_name = "Chief Engineer's Office" - }, +/obj/machinery/fax/heads/ce, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/ce) "suR" = ( @@ -58017,10 +58008,7 @@ "toY" = ( /obj/structure/table/wood, /obj/structure/reagent_dispensers/wall/peppertank/directional/east, -/obj/machinery/fax{ - name = "Head of Security's Fax Machine"; - fax_name = "Head of Security's Office" - }, +/obj/machinery/fax/heads/hos, /turf/open/floor/carpet, /area/station/command/heads_quarters/hos) "tpm" = ( @@ -67340,10 +67328,7 @@ dir = 8 }, /obj/structure/sign/calendar/directional/west, -/obj/machinery/fax{ - name = "Quartermaster's Fax Machine"; - fax_name = "Quartermaster's Office" - }, +/obj/machinery/fax/heads/qm, /turf/open/floor/iron, /area/station/command/heads_quarters/qm) "wuE" = ( @@ -68259,10 +68244,7 @@ /obj/structure/window/reinforced/spawner/directional/south, /obj/structure/table/wood, /obj/item/radio/intercom/directional/east, -/obj/machinery/fax{ - name = "Captain's Fax Machine"; - fax_name = "Captain's Office" - }, +/obj/machinery/fax/heads/captain, /turf/open/floor/wood, /area/station/command/heads_quarters/captain) "wKm" = ( @@ -70871,11 +70853,8 @@ "xNl" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/structure/table/wood, -/obj/machinery/fax{ - name = "Head of Personnel's Fax Machine"; - fax_name = "Head of Personnel's Office" - }, /obj/machinery/light/warm/directional/north, +/obj/machinery/fax/heads/hop, /turf/open/floor/carpet, /area/station/command/heads_quarters/hop) "xNm" = ( diff --git a/_maps/map_files/wawastation/wawastation.dmm b/_maps/map_files/wawastation/wawastation.dmm index a723bb3f2a8..bcc10a68c16 100644 --- a/_maps/map_files/wawastation/wawastation.dmm +++ b/_maps/map_files/wawastation/wawastation.dmm @@ -29571,14 +29571,11 @@ /turf/open/floor/plating, /area/station/maintenance/department/cargo) "kki" = ( -/obj/machinery/fax{ - fax_name = "Quartermaster's Office"; - name = "Quartermaster's Fax Machine" - }, /obj/effect/turf_decal/siding/wood{ dir = 6 }, /obj/structure/table/wood/fancy/orange, +/obj/machinery/fax/heads/qm, /turf/open/floor/wood, /area/station/command/heads_quarters/qm) "kkA" = ( @@ -30294,11 +30291,8 @@ /area/station/science/genetics) "kvk" = ( /obj/structure/table, -/obj/machinery/fax{ - fax_name = "Chief Medical Officer's Office"; - name = "Chief Medical Officer's Fax Machine" - }, /obj/machinery/light_switch/directional/north, +/obj/machinery/fax/heads/cmo, /turf/open/floor/iron/dark/textured, /area/station/command/heads_quarters/cmo) "kvo" = ( @@ -44652,16 +44646,13 @@ name = "shutter control"; pixel_x = -8 }, -/obj/machinery/fax{ - fax_name = "Captain's Office"; - name = "Captain's Fax Machine" - }, /obj/structure/table/reinforced, /obj/machinery/keycard_auth/wall_mounted/directional/south{ pixel_x = 8; pixel_y = -24 }, /obj/machinery/status_display/ai/directional/east, +/obj/machinery/fax/heads/captain, /turf/open/floor/carpet/royalblue, /area/station/command/heads_quarters/captain/private) "pvy" = ( @@ -54205,10 +54196,6 @@ /obj/effect/turf_decal/tile/neutral/opposingcorners{ dir = 1 }, -/obj/machinery/fax{ - fax_name = "Research Director's Office"; - name = "Research Director's Fax Machine" - }, /obj/structure/table, /obj/machinery/camera/autoname/directional/south{ network = list("ss13","rd") @@ -54217,6 +54204,7 @@ /obj/machinery/light_switch/directional/south{ pixel_x = 8 }, +/obj/machinery/fax/heads/rd, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/rd) "sAO" = ( @@ -62013,10 +62001,7 @@ "vlD" = ( /obj/structure/table/wood, /obj/machinery/light_switch/directional/north, -/obj/machinery/fax{ - fax_name = "Head of Personnel's Office"; - name = "Head of Personnel's Fax Machine" - }, +/obj/machinery/fax/heads/hop, /turf/open/floor/carpet/green, /area/station/command/heads_quarters/hop) "vlJ" = ( @@ -62090,16 +62075,13 @@ /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) "vno" = ( -/obj/machinery/fax{ - fax_name = "Chief Engineer's Office"; - name = "Chief Engineer's Fax Machine" - }, /obj/structure/table/reinforced, /obj/machinery/light/directional/east, /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 5 }, /obj/structure/cable, +/obj/machinery/fax/heads/ce, /turf/open/floor/iron, /area/station/command/heads_quarters/ce) "vnr" = ( @@ -65330,16 +65312,13 @@ /turf/open/floor/plating, /area/station/maintenance/central/greater) "wum" = ( -/obj/machinery/fax{ - fax_name = "Head of Security's Office"; - name = "Head of Security's Fax Machine" - }, /obj/structure/table/wood/fancy/red, /obj/structure/secure_safe/hos{ pixel_x = 36; pixel_y = 28 }, /obj/machinery/airalarm/directional/north, +/obj/machinery/fax/heads/hos, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hos) "wun" = ( diff --git a/code/__DEFINES/dcs/signals/signals_fax.dm b/code/__DEFINES/dcs/signals/signals_fax.dm new file mode 100644 index 00000000000..3cb78d60775 --- /dev/null +++ b/code/__DEFINES/dcs/signals/signals_fax.dm @@ -0,0 +1 @@ +#define COMSIG_FAX_MESSAGE_RECEIVED "fax_message_received" diff --git a/code/modules/modular_computers/computers/item/role_tablet_presets.dm b/code/modules/modular_computers/computers/item/role_tablet_presets.dm index 2f655ac1d0c..47e10bf5372 100644 --- a/code/modules/modular_computers/computers/item/role_tablet_presets.dm +++ b/code/modules/modular_computers/computers/item/role_tablet_presets.dm @@ -7,11 +7,15 @@ greyscale_config = /datum/greyscale_config/tablet/head greyscale_colors = "#67A364#a92323" max_capacity = parent_type::max_capacity * 2 + /// Fax type for a relevant head's tp connect their PDA to (for use with fax notification app) + var/fax_type = null + var/static/list/datum/computer_file/head_programs = list( /datum/computer_file/program/status, /datum/computer_file/program/science, /datum/computer_file/program/robocontrol, /datum/computer_file/program/budgetorders, + /datum/computer_file/program/faxbond, ) /obj/item/modular_computer/pda/heads/Initialize(mapload) @@ -20,12 +24,19 @@ var/datum/computer_file/program/program_type = new programs store_file(program_type) + if (ispath(fax_type, /obj/machinery/fax)) + var/datum/computer_file/program/faxbond/fax_notifier = locate() in stored_files + var/list/faxes_list = SSmachines.get_machines_by_type(fax_type) + var/obj/machinery/fax/heads_fax = length(faxes_list) ? pick(faxes_list) : null //there really shouldnt be more than one + fax_notifier.connect_fax(heads_fax) + /obj/item/modular_computer/pda/heads/captain name = "captain PDA" icon_state = "/obj/item/modular_computer/pda/heads/captain" greyscale_config = /datum/greyscale_config/tablet/captain greyscale_colors = "#2C7CB2#FF0000#FFFFFF#FFD55B" inserted_item = /obj/item/pen/fountain/captain + fax_type = /obj/machinery/fax/heads/captain /obj/item/modular_computer/pda/heads/captain/Initialize(mapload) . = ..() @@ -42,6 +53,7 @@ icon_state = "/obj/item/modular_computer/pda/heads/hop" greyscale_config = /datum/greyscale_config/tablet/stripe_thick/head greyscale_colors = "#374f7e#a52f29#a52f29" + fax_type = /obj/machinery/fax/heads/hop starting_programs = list( /datum/computer_file/program/records/security, /datum/computer_file/program/job_management, @@ -53,6 +65,7 @@ greyscale_config = /datum/greyscale_config/tablet/head greyscale_colors = "#EA3232#0000CC" inserted_item = /obj/item/pen/red/security + fax_type = /obj/machinery/fax/heads/hos starting_programs = list( /datum/computer_file/program/records/security, ) @@ -62,6 +75,7 @@ icon_state = "/obj/item/modular_computer/pda/heads/ce" greyscale_config = /datum/greyscale_config/tablet/stripe_thick/head greyscale_colors = "#D99A2E#69DBF3#FAFAFA" + fax_type = /obj/machinery/fax/heads/ce starting_programs = list( /datum/computer_file/program/atmosscan, /datum/computer_file/program/alarm_monitor, @@ -73,6 +87,7 @@ icon_state = "/obj/item/modular_computer/pda/heads/cmo" greyscale_config = /datum/greyscale_config/tablet/stripe_thick/head greyscale_colors = "#FAFAFA#000099#3F96CC" + fax_type = /obj/machinery/fax/heads/cmo starting_programs = list( /datum/computer_file/program/maintenance/phys_scanner, /datum/computer_file/program/records/medical, @@ -84,6 +99,7 @@ greyscale_config = /datum/greyscale_config/tablet/stripe_thick/head greyscale_colors = "#FAFAFA#000099#B347BC" inserted_item = /obj/item/pen/fountain + fax_type = /obj/machinery/fax/heads/rd starting_programs = list( /datum/computer_file/program/borg_monitor, /datum/computer_file/program/scipaper_program, @@ -97,6 +113,7 @@ greyscale_colors = "#c4b787#18191e#8b4c31" inserted_item = /obj/item/pen/survival stored_paper = 20 + fax_type = /obj/machinery/fax/heads/qm starting_programs = list( /datum/computer_file/program/shipping, /datum/computer_file/program/restock_tracker, diff --git a/code/modules/modular_computers/file_system/programs/faxnotif.dm b/code/modules/modular_computers/file_system/programs/faxnotif.dm new file mode 100644 index 00000000000..5cadc4b4d1f --- /dev/null +++ b/code/modules/modular_computers/file_system/programs/faxnotif.dm @@ -0,0 +1,119 @@ +/datum/computer_file/program/faxbond + filename = "faxbond" + filedesc = "FaxBond" + can_run_on_flags = PROGRAM_PDA + downloader_category = PROGRAM_CATEGORY_DEVICE + program_open_overlay = "generic" + extended_desc = "A lightweight piece of software designed to decrease fax response time. \ + Will send a notification as soon as one of connected faxes receives a message. \ + Recommended by 9 out of 10 CentCom officers." + size = 1 + tgui_id = "NtosFaxBond" + program_icon = "fa-fax" + /// All relevant info of every connected fax, including weak ref for cleaning after ourself + name, area name and muted bool + var/list/connected_faxes = list() + +/** + * Proc for subscribing to faxes. Registers needed signal and updates fax related vars for program. Includes type checking. + * Arguments: + * * target - [/datum/computer_file/program/proc/tap] proc target, can be anything + */ +/datum/computer_file/program/faxbond/proc/connect_fax(obj/machinery/fax/target) + if(!istype(target)) + return FALSE + + var/our_id = target.fax_id + + if(!connected_faxes[our_id]) + RegisterSignal(target, COMSIG_FAX_MESSAGE_RECEIVED, PROC_REF(on_fax_message_received)) + + var/list/fax_info = list() + var/area/our_area = get_area(target) + fax_info["ref"] = WEAKREF(target) + fax_info["name"] = target.fax_name + fax_info["area_name"] = our_area.name + fax_info["muted"] = FALSE + connected_faxes[our_id] += fax_info + + return TRUE + +/** + * Disconnects a fax given its ID (if it was connected before), removing it from a list and unregistering relevant signal + * Arguments: + * * fax_id - fax id to disconnect from our PDA + */ +/datum/computer_file/program/faxbond/proc/disconnect_fax(fax_id) + if(!connected_faxes[fax_id]) + return + + var/list/fax_info = connected_faxes[fax_id] + var/datum/weakref/fax_ref = fax_info["ref"] + var/obj/machinery/fax/our_fax = fax_ref.resolve() + if (our_fax) + UnregisterSignal(our_fax, COMSIG_FAX_MESSAGE_RECEIVED) + + connected_faxes -= fax_id + + +/** + * Signal handler for [COMSIG_FAX_MESSAGE_RECEIVED]. + * Arguments: + * * receiver - [/obj/machinery/fax] that received a message + * * message_source - name of a sender + */ +/datum/computer_file/program/faxbond/proc/on_fax_message_received(obj/machinery/fax/receiver, message_source) + SIGNAL_HANDLER + + var/id = receiver.fax_id + var/list/fax_info = connected_faxes[id] + + if (fax_info["muted"]) + return + + var/datum/computer_file/program/messenger/messenger = locate() in computer.stored_files + var/datum/signal/subspace/messaging/tablet_message/signal = new(receiver, list( + "fakename" = "Fax Notificator", + "fakejob" = "PDA Program", + "message" = "Your fax [receiver.fax_name] has received a new message from [message_source]", + "targets" = list(messenger), + "automated" = TRUE + )) + INVOKE_ASYNC(signal, TYPE_PROC_REF(/datum/signal/subspace, send_to_receivers)) + +/datum/computer_file/program/faxbond/Destroy() + . = ..() + for(var/fax in connected_faxes) + disconnect_fax(fax) + +/datum/computer_file/program/faxbond/tap(atom/tapped_atom, mob/living/user, list/modifiers) + return connect_fax(tapped_atom) + +/datum/computer_file/program/faxbond/ui_data(mob/user) + var/list/data = list() + + data["faxes_info"] = list() + for(var/fax_id in connected_faxes) + var/list/fax_info = connected_faxes[fax_id] + var/list/fax_data = list( + "id" = fax_id, + "name" = fax_info["name"], + "location" = fax_info["area_name"], + "muted" = fax_info["muted"], + ) + data["faxes_info"] += list(fax_data) + return data + +/datum/computer_file/program/faxbond/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() + if(.) + return + switch(action) + if("unsubscribe") + disconnect_fax(params["id"]) + return TRUE + if("mute") + var/list/fax_info = connected_faxes[params["id"]] + if (!fax_info) + return FALSE + fax_info["muted"] = !fax_info["muted"] + return TRUE diff --git a/code/modules/paperwork/fax.dm b/code/modules/paperwork/fax.dm index 1761a7fe69f..5336edcdcc2 100644 --- a/code/modules/paperwork/fax.dm +++ b/code/modules/paperwork/fax.dm @@ -70,6 +70,41 @@ GLOBAL_VAR_INIT(fax_autoprinting, FALSE) fax_name = "[current_area.name]" return ..() +/obj/machinery/fax/heads + abstract_type = /obj/machinery/fax/heads + +/obj/machinery/fax/heads/Initialize(mapload) + . = ..() + REGISTER_REQUIRED_MAP_ITEM(1, 1) + +/obj/machinery/fax/heads/captain + name = "Captain's Fax Machine" + fax_name = "Captain's Office" + +/obj/machinery/fax/heads/hop + name = "Head of Personnel's Fax Machine" + fax_name = "Head of Personnel's Office" + +/obj/machinery/fax/heads/hos + name = "Head of Security's Fax Machine" + fax_name = "Head of Security's Office" + +/obj/machinery/fax/heads/cmo + name = "Chief Medical Officer's Fax Machine" + fax_name = "Chief Medical Officer's Office" + +/obj/machinery/fax/heads/rd + name = "Research Director's Fax Machine" + fax_name = "Research Director's Office" + +/obj/machinery/fax/heads/ce + name = "Chief Engineer's Fax Machine" + fax_name = "Chief Engineer's Office" + +/obj/machinery/fax/heads/qm + name = "Quartermaster's Fax Machine" + fax_name = "Quartermaster's Office" + /obj/machinery/fax/admin/syndicate name = "Syndicate Fax Machine" @@ -401,6 +436,7 @@ GLOBAL_VAR_INIT(fax_autoprinting, FALSE) say("Received correspondence from [sender_name].") history_add("Receive", sender_name) addtimer(CALLBACK(src, PROC_REF(vend_item), loaded), 1.9 SECONDS) + SEND_SIGNAL(src, COMSIG_FAX_MESSAGE_RECEIVED, sender_name) /** * Procedure for animating an object entering or leaving the fax machine. diff --git a/code/modules/unit_tests/required_map_items.dm b/code/modules/unit_tests/required_map_items.dm index 4d65d7651e1..33ec9469ed0 100644 --- a/code/modules/unit_tests/required_map_items.dm +++ b/code/modules/unit_tests/required_map_items.dm @@ -16,6 +16,7 @@ /datum/unit_test/maptest_required_map_items/proc/setup_expected_types() expected_types += subtypesof(/obj/item/stamp/head) expected_types += subtypesof(/obj/machinery/modular_computer/preset/cargochat) + expected_types += subtypesof(/obj/machinery/fax/heads) expected_types += /mob/living/basic/parrot/poly expected_types += /mob/living/basic/pet/dog/corgi/ian diff --git a/tgstation.dme b/tgstation.dme index eeb8daccf82..dbf5c85039a 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -338,6 +338,7 @@ #include "code\__DEFINES\dcs\signals\signals_cytology.dm" #include "code\__DEFINES\dcs\signals\signals_datum.dm" #include "code\__DEFINES\dcs\signals\signals_event.dm" +#include "code\__DEFINES\dcs\signals\signals_fax.dm" #include "code\__DEFINES\dcs\signals\signals_fish.dm" #include "code\__DEFINES\dcs\signals\signals_food.dm" #include "code\__DEFINES\dcs\signals\signals_gib.dm" @@ -5858,6 +5859,7 @@ #include "code\modules\modular_computers\file_system\programs\crewmanifest.dm" #include "code\modules\modular_computers\file_system\programs\dept_order.dm" #include "code\modules\modular_computers\file_system\programs\emojipedia.dm" +#include "code\modules\modular_computers\file_system\programs\faxnotif.dm" #include "code\modules\modular_computers\file_system\programs\file_browser.dm" #include "code\modules\modular_computers\file_system\programs\frontier.dm" #include "code\modules\modular_computers\file_system\programs\jobmanagement.dm" diff --git a/tgui/packages/tgui/interfaces/NtosFaxBond.tsx b/tgui/packages/tgui/interfaces/NtosFaxBond.tsx new file mode 100644 index 00000000000..447400e656d --- /dev/null +++ b/tgui/packages/tgui/interfaces/NtosFaxBond.tsx @@ -0,0 +1,85 @@ +import { Button, NoticeBox, Section, Stack, Table } from 'tgui-core/components'; +import type { BooleanLike } from 'tgui-core/react'; +import { useBackend } from '../backend'; +import { NtosWindow } from '../layouts'; + +type FaxInfoList = { + id: string; + name: string; + location: string; + muted: BooleanLike; +}; + +type Data = { + faxes_info: FaxInfoList[]; +}; + +export const NtosFaxBond = (props) => { + return ( + + + + + + ); +}; + +export const NtosFaxBondContent = (props) => { + const { act, data } = useBackend(); + const { faxes_info = [] } = data; + return ( + <> + + Scan any fax to be notified when it receives a message. + + {!!faxes_info.length && ( +
+ + + ID + Name + Location + + + {faxes_info.map((fax) => ( + + + {fax.id} + + + {fax.name} + + + {fax.location} + + + +
+
+ )} + + ); +};