diff --git a/_maps/RandomRuins/JungleRuins/jungle_cavecrew.dmm b/_maps/RandomRuins/JungleRuins/jungle_cavecrew.dmm index cca97a317ce2..afa21c752a75 100644 --- a/_maps/RandomRuins/JungleRuins/jungle_cavecrew.dmm +++ b/_maps/RandomRuins/JungleRuins/jungle_cavecrew.dmm @@ -3119,7 +3119,7 @@ /obj/structure/table/reinforced{ color = "#c1b6a5" }, -/obj/machinery/fax/frontiersmen, +/obj/machinery/fax/ruin, /turf/open/floor/plasteel/tech, /area/ruin/jungle/cavecrew/bridge) "Ls" = ( diff --git a/_maps/RandomRuins/JungleRuins/jungle_syndicate.dmm b/_maps/RandomRuins/JungleRuins/jungle_syndicate.dmm index 018739e20dc4..ebd333289382 100644 --- a/_maps/RandomRuins/JungleRuins/jungle_syndicate.dmm +++ b/_maps/RandomRuins/JungleRuins/jungle_syndicate.dmm @@ -1330,7 +1330,7 @@ "OW" = ( /obj/structure/table/reinforced, /obj/item/trash/syndi_cakes, -/obj/machinery/fax, +/obj/machinery/fax/ruin, /turf/open/floor/plating, /area/ruin/jungle/syndifort/jerry) "Ph" = ( diff --git a/_maps/RandomRuins/SpaceRuins/corporate_mining.dmm b/_maps/RandomRuins/SpaceRuins/corporate_mining.dmm index 6ed5ed67825f..3585b4dcc1e3 100644 --- a/_maps/RandomRuins/SpaceRuins/corporate_mining.dmm +++ b/_maps/RandomRuins/SpaceRuins/corporate_mining.dmm @@ -956,7 +956,7 @@ /area/ruin/space) "xK" = ( /obj/structure/table/wood, -/obj/machinery/fax, +/obj/machinery/fax/ruin, /turf/open/floor/wood, /area/ruin/space/has_grav/corporatemine/crewquarters) "xT" = ( diff --git a/_maps/RandomRuins/WasteRuins/wasteplanet_fortress_of_solitide.dmm b/_maps/RandomRuins/WasteRuins/wasteplanet_fortress_of_solitide.dmm index 66ab48f18a92..e931e0091d26 100644 --- a/_maps/RandomRuins/WasteRuins/wasteplanet_fortress_of_solitide.dmm +++ b/_maps/RandomRuins/WasteRuins/wasteplanet_fortress_of_solitide.dmm @@ -401,7 +401,7 @@ /area/ruin/powered) "dT" = ( /obj/structure/table/wood, -/obj/machinery/fax, +/obj/machinery/fax/ruin, /turf/open/floor/plating, /area/ruin/powered) "dU" = ( diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm index e2b1ff97158c..0eccbd8fc0d0 100644 --- a/_maps/map_files/generic/CentCom.dmm +++ b/_maps/map_files/generic/CentCom.dmm @@ -1096,6 +1096,18 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/control) +"apm" = ( +/obj/structure/rack, +/obj/item/gun/ballistic/automatic/gal/inteq{ + pixel_x = 1; + pixel_y = 4 + }, +/obj/item/gun/ballistic/automatic/gal/inteq{ + pixel_x = -4; + pixel_y = -2 + }, +/turf/open/floor/plasteel, +/area/centcom) "apt" = ( /obj/structure/closet/secure_closet/security, /obj/item/storage/belt/security/full, @@ -3419,6 +3431,17 @@ /obj/machinery/light/directional/west, /turf/open/floor/plating/asteroid, /area/tdome/tdomeadmin) +"aIF" = ( +/obj/structure/table/reinforced, +/obj/item/storage/ration/crayons{ + pixel_x = 9; + pixel_y = 5 + }, +/obj/item/storage/ration/shredded_beef{ + pixel_x = -2 + }, +/turf/open/floor/plasteel, +/area/centcom) "aIH" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/corner/transparent/neutral{ @@ -4560,6 +4583,9 @@ }, /turf/open/floor/plasteel, /area/tdome/arena) +"aPu" = ( +/turf/closed/indestructible/reinforced, +/area/centcom) "aPw" = ( /obj/machinery/door/airlock/centcom{ name = "CentCom Security"; @@ -6202,6 +6228,13 @@ }, /turf/open/floor/plasteel, /area/centcom/control) +"bbf" = ( +/obj/machinery/door/airlock/command{ + dir = 4; + req_access_txt = "109" + }, +/turf/open/floor/plasteel, +/area/centcom) "bbL" = ( /obj/structure/table/wood, /obj/item/folder/red, @@ -6470,6 +6503,13 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/supply) +"bFc" = ( +/obj/structure/table/reinforced, +/obj/item/radio/intercom/wideband/table{ + dir = 4 + }, +/turf/open/floor/mineral/plastitanium, +/area/centcom) "bIh" = ( /obj/structure/chair{ dir = 4 @@ -6484,6 +6524,16 @@ /obj/effect/turf_decal/industrial/warning, /turf/open/floor/plasteel, /area/centcom/control) +"bIJ" = ( +/obj/structure/sign/minutemen{ + pixel_y = -28 + }, +/obj/machinery/light/directional/west, +/obj/machinery/telecomms/relay/preset/minutemen{ + autolinkers = list("relay") + }, +/turf/open/floor/plasteel, +/area/centcom) "bMY" = ( /obj/effect/turf_decal/corner/opaque/green{ dir = 1 @@ -6526,6 +6576,28 @@ }, /turf/open/floor/plasteel, /area/centcom/control) +"bRF" = ( +/obj/structure/table/reinforced, +/obj/structure/sign/poster/minutemen/bard{ + pixel_y = -32 + }, +/obj/item/ammo_box/magazine/p16{ + pixel_x = -5; + pixel_y = 6 + }, +/obj/item/ammo_box/magazine/p16{ + pixel_x = 1; + pixel_y = 2 + }, +/obj/item/ammo_casing{ + pixel_x = 7; + pixel_y = 7 + }, +/obj/item/ammo_casing{ + pixel_x = 11 + }, +/turf/open/floor/plasteel, +/area/centcom) "bRK" = ( /obj/structure/table/reinforced, /obj/item/book/manual/wiki/security_space_law, @@ -6542,6 +6614,26 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/ferry) +"bSy" = ( +/obj/structure/table/wood/fancy/blue, +/obj/structure/sign/solgov_seal{ + pixel_y = 28 + }, +/obj/item/clothing/head/beret/solgov{ + pixel_x = 11; + pixel_y = -1 + }, +/turf/open/floor/carpet/royalblue, +/area/centcom) +"bUH" = ( +/obj/effect/turf_decal/minutemen/corner{ + dir = 1 + }, +/obj/structure/chair/comfy{ + dir = 4 + }, +/turf/open/floor/mineral/plastitanium, +/area/centcom) "bVe" = ( /obj/structure/table/reinforced, /obj/item/restraints/handcuffs/cable/zipties, @@ -6664,6 +6756,21 @@ }, /turf/open/floor/plasteel, /area/centcom/control) +"ciU" = ( +/obj/structure/table/reinforced, +/obj/structure/sign/poster/contraband/gec{ + pixel_x = 32 + }, +/obj/item/paper_bin/construction, +/obj/item/pen, +/turf/open/floor/mineral/plastitanium, +/area/centcom) +"cjo" = ( +/obj/effect/turf_decal/corner/opaque/yellow{ + dir = 5 + }, +/turf/open/floor/plasteel, +/area/centcom) "ckq" = ( /obj/effect/turf_decal/corner/transparent/neutral{ dir = 1 @@ -6813,6 +6920,16 @@ }, /turf/open/floor/plasteel, /area/centcom/ferry) +"cxm" = ( +/obj/effect/turf_decal/corner/opaque/yellow{ + dir = 10 + }, +/obj/effect/turf_decal/steeldecal/steel_decals_central6, +/obj/structure/chair/comfy{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/centcom) "cyx" = ( /obj/effect/turf_decal/corner/transparent/neutral{ dir = 1 @@ -6848,6 +6965,12 @@ }, /turf/open/floor/plasteel/white, /area/tdome/tdomeobserve) +"cCK" = ( +/obj/machinery/telecomms/relay/preset/syndicate{ + autolinkers = list("relay") + }, +/turf/open/floor/mineral/plastitanium, +/area/centcom) "cDe" = ( /obj/effect/turf_decal/corner/transparent/neutral{ dir = 1 @@ -6937,6 +7060,15 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/evac) +"cIS" = ( +/obj/structure/rack, +/obj/item/gun/ballistic/shotgun/bulldog/inteq, +/obj/item/gun/ballistic/shotgun/bulldog/inteq{ + pixel_x = -5; + pixel_y = -5 + }, +/turf/open/floor/plasteel, +/area/centcom) "cKk" = ( /obj/effect/turf_decal/corner/opaque/green{ dir = 8 @@ -6980,6 +7112,15 @@ }, /turf/open/floor/plasteel, /area/syndicate_mothership/control) +"cUG" = ( +/obj/structure/sign/poster/contraband/syndicate_recruitment{ + pixel_x = -32 + }, +/obj/machinery/computer/secure_data/syndie{ + dir = 4 + }, +/turf/open/floor/mineral/plastitanium, +/area/centcom) "cVC" = ( /obj/structure/noticeboard{ dir = 8; @@ -7047,6 +7188,11 @@ }, /turf/open/floor/plasteel/dark, /area/tdome/tdomeobserve) +"cZi" = ( +/turf/open/floor/plating{ + icon_state = "platingdmg2" + }, +/area/centcom) "dhD" = ( /obj/effect/turf_decal/corner/transparent/neutral{ dir = 1 @@ -7115,6 +7261,16 @@ }, /turf/open/floor/plasteel, /area/centcom/supply) +"dom" = ( +/obj/structure/sign/solgov_seal{ + pixel_y = 28 + }, +/obj/structure/table/wood/fancy/blue, +/obj/item/flashlight/lamp/green{ + pixel_y = 3 + }, +/turf/open/floor/carpet/royalblue, +/area/centcom) "dop" = ( /obj/structure/table/reinforced, /obj/item/storage/firstaid/regular, @@ -7185,6 +7341,18 @@ }, /turf/open/floor/plasteel, /area/centcom/evac) +"duw" = ( +/obj/effect/decal/cleanable/blood{ + icon_state = "floor5-old"; + pixel_y = -6; + pixel_x = -3 + }, +/obj/item/restraints/handcuffs/cable/zipties/used{ + pixel_x = -3; + pixel_y = -4 + }, +/turf/open/floor/plasteel/patterned/grid, +/area/centcom) "dvo" = ( /obj/effect/turf_decal/industrial/warning, /turf/open/floor/plasteel/dark, @@ -7205,6 +7373,9 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/control) +"dER" = ( +/turf/open/floor/carpet/royalblue, +/area/centcom) "dGb" = ( /obj/effect/turf_decal/corner/transparent/neutral{ dir = 1 @@ -7270,6 +7441,15 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/control) +"dKW" = ( +/obj/structure/closet/crate/bin, +/obj/structure/sign/minutemen{ + pixel_y = 28 + }, +/obj/machinery/light/directional/east, +/obj/item/reagent_containers/food/snacks/pancakes/blueberry, +/turf/open/floor/plasteel, +/area/centcom) "dMa" = ( /obj/item/radio{ pixel_x = 5; @@ -7582,6 +7762,10 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/control) +"emF" = ( +/obj/effect/turf_decal/corner/opaque/yellow/full, +/turf/open/floor/plasteel, +/area/centcom) "enx" = ( /obj/item/kirbyplants{ icon_state = "plant-21"; @@ -7620,6 +7804,19 @@ }, /turf/open/floor/plasteel/white, /area/centcom/holding) +"eqM" = ( +/obj/effect/turf_decal/solgov/wood/bottom_left, +/obj/effect/turf_decal/siding/wood{ + color = "#543C30" + }, +/turf/open/floor/wood/walnut, +/area/centcom) +"etl" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood/mahogany, +/area/centcom) "etp" = ( /obj/structure/table, /obj/item/paper_bin, @@ -7730,6 +7927,9 @@ }, /turf/open/floor/plasteel, /area/tdome/tdomeobserve) +"eAJ" = ( +/turf/closed/indestructible/wood, +/area/centcom) "eCK" = ( /obj/effect/turf_decal/corner/opaque/red{ dir = 1 @@ -7862,6 +8062,13 @@ heat_capacity = 1e+006 }, /area/tdome/tdomeobserve) +"eLy" = ( +/obj/machinery/door/airlock/hatch{ + dir = 4; + req_access = "109" + }, +/turf/open/floor/plasteel/patterned/grid, +/area/centcom) "eSx" = ( /obj/structure/noticeboard{ dir = 8; @@ -7961,6 +8168,13 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/control) +"eWz" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/catwalk/over, +/turf/open/floor/plating{ + icon_state = "panelscorched" + }, +/area/centcom) "eYx" = ( /obj/item/kirbyplants{ icon_state = "plant-21" @@ -8005,6 +8219,12 @@ }, /turf/open/floor/plasteel, /area/centcom/supply) +"fau" = ( +/obj/effect/decal/cleanable/generic, +/turf/open/floor/plating{ + icon_state = "platingdmg1" + }, +/area/centcom) "fda" = ( /obj/machinery/modular_computer/console/preset/command{ dir = 8 @@ -8242,6 +8462,12 @@ }, /turf/open/floor/plasteel, /area/centcom/supply) +"fKt" = ( +/obj/structure/table/reinforced, +/obj/item/paper_bin, +/obj/item/pen/edagger, +/turf/open/floor/mineral/plastitanium, +/area/centcom) "fLD" = ( /obj/structure/closet/secure_closet/courtroom, /obj/effect/turf_decal/corner/transparent/neutral{ @@ -8385,6 +8611,16 @@ }, /turf/open/floor/plasteel, /area/centcom/control) +"fTU" = ( +/obj/effect/turf_decal/corner/opaque/yellow/three_quarters{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/centcom) +"fUc" = ( +/obj/machinery/door/airlock/security, +/turf/open/floor/mineral/plastitanium/red, +/area/centcom) "fUK" = ( /obj/machinery/light/directional/west, /obj/effect/turf_decal/corner/transparent/bar, @@ -8449,6 +8685,12 @@ }, /turf/open/floor/plasteel, /area/tdome/tdomeobserve) +"gaU" = ( +/obj/effect/turf_decal/minutemen/corner{ + dir = 4 + }, +/turf/open/floor/mineral/plastitanium, +/area/centcom) "gba" = ( /obj/structure/table/reinforced, /obj/machinery/recharger, @@ -8485,6 +8727,12 @@ }, /turf/open/floor/plasteel, /area/centcom/supply) +"gfJ" = ( +/obj/structure/chair/office{ + dir = 1 + }, +/turf/open/floor/carpet/royalblue, +/area/centcom) "ggX" = ( /obj/machinery/pdapainter, /obj/effect/turf_decal/corner/transparent/neutral{ @@ -8596,6 +8844,16 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/control) +"gsx" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/structure/sign/solgov_seal{ + pixel_y = -28 + }, +/obj/structure/closet/crate/bin, +/turf/open/floor/wood/walnut, +/area/centcom) "gwE" = ( /obj/effect/turf_decal/corner/opaque/blue{ dir = 1 @@ -8653,6 +8911,13 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/control) +"gDV" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/catwalk/over, +/turf/open/floor/plating{ + icon_state = "platingdmg3" + }, +/area/centcom) "gFU" = ( /obj/machinery/computer/helm, /obj/effect/turf_decal/industrial/warning{ @@ -8805,6 +9070,12 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/control) +"gTo" = ( +/obj/structure/table/wood/fancy/blue, +/obj/machinery/light/directional/north, +/obj/machinery/fax/admin/solgov, +/turf/open/floor/carpet/royalblue, +/area/centcom) "gUp" = ( /obj/structure/chair{ dir = 1 @@ -8845,6 +9116,20 @@ /obj/machinery/firealarm/directional/west, /turf/open/floor/plasteel, /area/centcom/supply) +"hba" = ( +/obj/structure/table/reinforced, +/obj/item/paper_bin{ + pixel_x = 5 + }, +/obj/item/clothing/head/cowboy/sec/minutemen{ + pixel_y = 8; + pixel_x = -4 + }, +/obj/item/pen/fourcolor{ + pixel_x = 5 + }, +/turf/open/floor/plasteel, +/area/centcom) "hbh" = ( /obj/structure/table/wood, /obj/item/phone{ @@ -9008,6 +9293,9 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/ferry) +"hzJ" = ( +/turf/closed/indestructible/riveted, +/area/centcom) "hzR" = ( /obj/structure/table/wood, /obj/item/folder/red, @@ -9043,6 +9331,12 @@ }, /turf/open/floor/plasteel/dark, /area/tdome/tdomeadmin) +"hBf" = ( +/obj/effect/turf_decal/minutemen/edge{ + dir = 1 + }, +/turf/open/floor/mineral/plastitanium, +/area/centcom) "hDn" = ( /obj/effect/turf_decal/corner/opaque/blue{ dir = 1 @@ -9200,6 +9494,10 @@ /obj/machinery/vending/wardrobe/cent_wardrobe, /turf/open/floor/plasteel/dark, /area/centcom/ferry) +"hYV" = ( +/obj/item/kirbyplants/random, +/turf/open/floor/ship/dirt, +/area/centcom) "hZs" = ( /obj/structure/table/reinforced, /obj/item/folder/red{ @@ -9246,6 +9544,26 @@ /obj/machinery/firealarm/directional/north, /turf/open/floor/plasteel/dark, /area/centcom/supply) +"ibc" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/fluff/paper/stack{ + dir = 5; + pixel_y = 25; + layer = 2.89 + }, +/obj/structure/fluff/paper/stack{ + dir = 4; + pixel_y = -4; + pixel_x = 11 + }, +/obj/structure/fluff/paper/stack{ + dir = 1; + pixel_x = -16; + pixel_y = -2 + }, +/obj/effect/turf_decal/steeldecal/steel_decals_central4, +/turf/open/floor/plasteel/patterned/grid, +/area/centcom) "ieA" = ( /obj/item/kirbyplants{ icon_state = "plant-22" @@ -9302,6 +9620,26 @@ }, /turf/open/floor/plasteel, /area/centcom/control) +"igC" = ( +/obj/structure/sign/minutemen{ + pixel_y = -28 + }, +/obj/structure/table/reinforced, +/obj/item/clothing/head/helmet/bulletproof/minutemen{ + pixel_x = -1; + pixel_y = 8 + }, +/obj/item/clothing/head/helmet/bulletproof/minutemen{ + pixel_x = 3; + pixel_y = 11 + }, +/obj/machinery/light/directional/east, +/obj/item/reagent_containers/food/drinks/bottle/rum{ + pixel_x = -9; + pixel_y = 3 + }, +/turf/open/floor/plasteel, +/area/centcom) "igW" = ( /obj/structure/bed/roller, /obj/machinery/iv_drip, @@ -9431,6 +9769,16 @@ }, /turf/open/floor/plasteel/white, /area/tdome/tdomeobserve) +"iti" = ( +/obj/effect/decal/fakelattice{ + color = "#808080"; + layer = 2.038 + }, +/obj/effect/turf_decal/corner_steel_grid/full, +/turf/open/floor/plasteel/elevatorshaft{ + color = "#808080" + }, +/area/centcom) "iuo" = ( /obj/machinery/computer/auxillary_base{ pixel_y = 32 @@ -9472,6 +9820,14 @@ }, /turf/open/floor/plasteel, /area/centcom/supplypod) +"iwJ" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9; + color = "#543C30" + }, +/obj/machinery/light/directional/west, +/turf/open/floor/wood/walnut, +/area/centcom) "iyp" = ( /obj/effect/turf_decal/corner/opaque/green{ dir = 1 @@ -9521,6 +9877,15 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/control) +"iyJ" = ( +/obj/structure/table/reinforced, +/obj/item/clothing/head/hardhat{ + pixel_x = -5; + pixel_y = 6 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/mineral/plastitanium, +/area/centcom) "izl" = ( /obj/machinery/computer/secure_data{ dir = 1 @@ -9573,6 +9938,9 @@ /obj/machinery/firealarm/directional/east, /turf/open/floor/plasteel/dark, /area/centcom/control) +"iDo" = ( +/turf/open/floor/ship/dirt, +/area/centcom) "iDE" = ( /obj/effect/turf_decal/corner/transparent/bar, /obj/effect/turf_decal/corner/transparent/bar{ @@ -9627,6 +9995,27 @@ }, /turf/open/floor/plasteel, /area/tdome/arena) +"iRP" = ( +/obj/structure/table/glass, +/obj/item/desk_flag{ + pixel_x = -7; + pixel_y = 6; + name = "white flag"; + desc = "Show in case of Minutemen patrols." + }, +/obj/item/radio/intercom/wideband/directional/north, +/turf/open/floor/plasteel/patterned/grid, +/area/centcom) +"iSo" = ( +/obj/machinery/door/airlock/solgov{ + req_access_txt = "109" + }, +/turf/open/floor/wood/walnut, +/area/centcom) +"iWI" = ( +/obj/effect/turf_decal/minutemen/middle, +/turf/open/floor/mineral/plastitanium, +/area/centcom) "iWU" = ( /obj/effect/turf_decal/corner/opaque/brown{ dir = 8 @@ -9650,6 +10039,9 @@ }, /turf/open/floor/plasteel/white, /area/centcom/holding) +"iZr" = ( +/turf/open/floor/mineral/plastitanium, +/area/centcom) "iZH" = ( /obj/machinery/vending/snack, /obj/effect/turf_decal/corner/transparent/neutral{ @@ -9747,6 +10139,14 @@ }, /turf/open/floor/plasteel, /area/centcom/control) +"jja" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9; + color = "#543C30" + }, +/obj/effect/turf_decal/solgov/wood/center_left, +/turf/open/floor/wood/walnut, +/area/centcom) "jjE" = ( /obj/effect/turf_decal/corner/transparent/neutral{ dir = 1 @@ -9760,6 +10160,12 @@ }, /turf/open/floor/plasteel, /area/centcom/supplypod/loading/ert) +"jly" = ( +/obj/machinery/computer/med_data/syndie{ + dir = 1 + }, +/turf/open/floor/mineral/plastitanium/red, +/area/centcom) "jlB" = ( /obj/item/cardboard_cutout{ desc = "They seem to be ignoring you... Typical."; @@ -9870,6 +10276,17 @@ }, /turf/open/floor/plasteel, /area/centcom/control) +"jyy" = ( +/obj/structure/table/wood, +/obj/item/paper_bin/bundlenatural{ + pixel_y = 4 + }, +/obj/item/pen/charcoal{ + pixel_x = -5; + pixel_y = -4 + }, +/turf/open/floor/wood/mahogany, +/area/centcom) "jCA" = ( /obj/effect/turf_decal/industrial/warning{ dir = 5 @@ -9898,6 +10315,26 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/ferry) +"jDt" = ( +/obj/item/shard{ + icon_state = "small"; + pixel_x = 9; + pixel_y = -7 + }, +/obj/item/shard{ + icon_state = "medium"; + pixel_x = -10; + pixel_y = 11 + }, +/obj/machinery/fax/admin/frontiersmen, +/obj/structure/table_frame, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/plasteel/patterned/grid, +/area/centcom) +"jEn" = ( +/obj/effect/turf_decal/siding/wood/corner, +/turf/open/floor/wood/mahogany, +/area/centcom) "jEB" = ( /obj/item/kirbyplants{ icon_state = "plant-22" @@ -9910,6 +10347,14 @@ }, /turf/open/floor/plasteel, /area/centcom/control) +"jFa" = ( +/obj/structure/table/reinforced, +/obj/item/clothing/head/HoS/cybersun{ + pixel_x = 2 + }, +/obj/machinery/light/directional/south, +/turf/open/floor/mineral/plastitanium/red, +/area/centcom) "jGz" = ( /obj/item/clipboard, /obj/item/folder/red, @@ -9966,6 +10411,10 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/supply) +"jPn" = ( +/obj/effect/turf_decal/syndicateemblem/middle/middle, +/turf/open/floor/mineral/plastitanium/red, +/area/centcom) "jPL" = ( /obj/machinery/vending/cola, /obj/effect/turf_decal/corner/transparent/bar, @@ -10196,6 +10645,12 @@ }, /turf/open/floor/plasteel, /area/centcom/control) +"kiC" = ( +/obj/effect/turf_decal/minutemen/edge{ + dir = 8 + }, +/turf/open/floor/mineral/plastitanium, +/area/centcom) "kjt" = ( /obj/machinery/computer/communications{ dir = 8 @@ -10243,12 +10698,27 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/control) +"kkC" = ( +/obj/structure/table/reinforced, +/obj/structure/sign/poster/minutemen/gold{ + pixel_y = 32 + }, +/obj/machinery/fax/admin/minutemen, +/turf/open/floor/plasteel, +/area/centcom) "kkV" = ( /obj/effect/turf_decal/corner/opaque/green{ dir = 4 }, /turf/open/floor/plasteel, /area/tdome/arena_source) +"kmQ" = ( +/obj/effect/turf_decal/syndicateemblem/middle/right, +/obj/structure/chair/office/dark{ + dir = 4 + }, +/turf/open/floor/mineral/plastitanium/red, +/area/centcom) "kqM" = ( /obj/machinery/shower{ dir = 4 @@ -10346,6 +10816,14 @@ /obj/machinery/light/directional/south, /turf/open/floor/plasteel, /area/centcom/control) +"kFX" = ( +/obj/item/clothing/head/intern{ + pixel_x = 7; + pixel_y = 5 + }, +/obj/machinery/light/directional/west, +/turf/open/floor/plasteel/patterned/grid, +/area/centcom) "kHH" = ( /obj/effect/turf_decal/corner/opaque/red{ dir = 1 @@ -10458,6 +10936,10 @@ }, /turf/open/floor/plasteel/grimy, /area/centcom/control) +"kXn" = ( +/obj/effect/turf_decal/syndicateemblem/bottom/left, +/turf/open/floor/mineral/plastitanium/red, +/area/centcom) "laX" = ( /obj/structure/chair/office/light{ dir = 8 @@ -10525,6 +11007,11 @@ }, /turf/open/floor/plasteel/dark, /area/ctf) +"lfi" = ( +/obj/structure/table/wood, +/obj/machinery/fax/admin/roumain, +/turf/open/floor/wood/mahogany, +/area/centcom) "lfw" = ( /obj/structure/table/reinforced, /obj/item/paper_bin, @@ -10542,6 +11029,10 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/control) +"lfK" = ( +/obj/structure/closet/crate/bin, +/turf/open/floor/mineral/plastitanium, +/area/centcom) "lfS" = ( /obj/effect/turf_decal/corner/opaque/green, /turf/open/floor/plasteel, @@ -10659,6 +11150,11 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/ferry) +"lmY" = ( +/turf/open/floor/plating{ + icon_state = "platingdmg3" + }, +/area/centcom) "lnt" = ( /obj/effect/turf_decal/industrial/warning{ dir = 6 @@ -10875,6 +11371,19 @@ }, /turf/open/floor/plasteel/dark, /area/tdome/tdomeobserve) +"lHR" = ( +/obj/item/paper_bin, +/obj/item/clothing/head/beret/sec/frontier/officer{ + pixel_y = 12; + pixel_x = -6 + }, +/obj/item/pen{ + pixel_x = -8; + pixel_y = -3 + }, +/obj/structure/table/glass, +/turf/open/floor/plasteel/patterned/grid, +/area/centcom) "lIm" = ( /obj/structure/table, /obj/item/paper/pamphlet/centcom/visitor_info, @@ -10903,6 +11412,23 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/ferry) +"lJp" = ( +/turf/closed/indestructible/syndicate, +/area/centcom) +"lKP" = ( +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/yellow, +/obj/effect/turf_decal/corner/opaque/yellow{ + dir = 1 + }, +/obj/machinery/light/directional/north, +/obj/machinery/telecomms/relay/preset/inteq{ + autolinkers = list("relay") + }, +/turf/open/floor/plasteel, +/area/centcom) "lMB" = ( /obj/effect/turf_decal/industrial/warning, /turf/open/floor/plasteel, @@ -10933,6 +11459,18 @@ }, /turf/open/floor/plasteel, /area/tdome/arena_source) +"lQr" = ( +/obj/structure/table/reinforced, +/obj/item/flashlight/lamp{ + pixel_x = 8; + pixel_y = 3 + }, +/obj/structure/sign/minutemen{ + pixel_y = 28 + }, +/obj/machinery/light/directional/west, +/turf/open/floor/plasteel, +/area/centcom) "lQv" = ( /obj/effect/turf_decal/corner/opaque/brown, /obj/effect/turf_decal/corner/opaque/brown{ @@ -10995,6 +11533,28 @@ }, /turf/open/floor/plasteel/dark, /area/tdome/tdomeadmin) +"lXI" = ( +/obj/item/ammo_casing/spent{ + pixel_x = -6; + pixel_y = -10 + }, +/obj/item/ammo_casing/spent{ + pixel_x = 9; + pixel_y = -6 + }, +/obj/item/ammo_casing/spent{ + pixel_x = 3 + }, +/turf/open/floor/plasteel/patterned/grid, +/area/centcom) +"lXQ" = ( +/obj/effect/decal/cleanable/blood{ + icon_state = "floor3-old"; + pixel_x = -9; + pixel_y = -11 + }, +/turf/open/floor/plasteel/patterned/grid, +/area/centcom) "lYC" = ( /obj/effect/turf_decal/industrial/warning{ dir = 4 @@ -11004,6 +11564,12 @@ }, /turf/open/floor/plasteel/dark, /area/ctf) +"lYF" = ( +/obj/effect/turf_decal/corner/opaque/yellow{ + dir = 9 + }, +/turf/open/floor/plasteel, +/area/centcom) "mbm" = ( /obj/effect/turf_decal/corner/transparent/neutral{ dir = 1 @@ -11130,6 +11696,22 @@ }, /turf/open/floor/plasteel/dark, /area/ctf) +"moE" = ( +/obj/structure/table/reinforced, +/obj/machinery/computer/secure_data/laptop{ + dir = 4; + pixel_y = 6; + pixel_x = -4 + }, +/turf/open/floor/plasteel, +/area/centcom) +"mpi" = ( +/obj/machinery/door/airlock/hatch{ + dir = 4; + req_access_txt = "109" + }, +/turf/open/floor/plasteel/patterned/grid, +/area/centcom) "mpw" = ( /obj/effect/landmark/prisonwarp, /obj/effect/turf_decal/corner/transparent/neutral{ @@ -11161,6 +11743,15 @@ /obj/machinery/light/directional/west, /turf/open/floor/plasteel, /area/centcom/control) +"msQ" = ( +/obj/structure/table/reinforced, +/obj/structure/sign/poster/contraband/cybersun{ + pixel_y = -32 + }, +/obj/item/paper_bin/carbon, +/obj/item/pen/fountain, +/turf/open/floor/mineral/plastitanium/red, +/area/centcom) "mtq" = ( /obj/effect/turf_decal/corner/transparent/bar, /obj/effect/turf_decal/corner/transparent/bar{ @@ -11222,6 +11813,13 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/ferry) +"myU" = ( +/obj/effect/turf_decal/syndicateemblem/middle/left, +/obj/structure/chair/office/dark{ + dir = 8 + }, +/turf/open/floor/mineral/plastitanium/red, +/area/centcom) "mzM" = ( /obj/structure/fans/tiny, /obj/effect/turf_decal/corner/transparent/neutral{ @@ -11236,6 +11834,12 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/supply) +"mAL" = ( +/obj/structure/table/reinforced, +/obj/machinery/fax/admin/syndicate, +/obj/machinery/light/directional/west, +/turf/open/floor/mineral/plastitanium, +/area/centcom) "mBc" = ( /obj/structure/table/reinforced, /obj/item/stack/packageWrap, @@ -11259,6 +11863,21 @@ }, /turf/open/floor/plasteel/dark, /area/tdome/tdomeadmin) +"mDT" = ( +/obj/effect/decal/fakelattice{ + color = "#808080"; + layer = 2.038 + }, +/obj/effect/turf_decal/corner_steel_grid/diagonal, +/obj/machinery/light/directional/east, +/obj/effect/decal/cleanable/garbage{ + pixel_x = 5; + pixel_y = -5 + }, +/turf/open/floor/plasteel/elevatorshaft{ + color = "#808080" + }, +/area/centcom) "mEC" = ( /obj/structure/sink{ dir = 8; @@ -11293,6 +11912,32 @@ luminosity = 2 }, /area/ctf) +"mGE" = ( +/obj/effect/turf_decal/corner/opaque/yellow{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/centcom) +"mJl" = ( +/obj/effect/turf_decal/syndicateemblem/top/left, +/turf/open/floor/mineral/plastitanium/red, +/area/centcom) +"mJP" = ( +/obj/effect/decal/fakelattice{ + color = "#808080"; + layer = 2.038 + }, +/obj/effect/turf_decal/corner_steel_grid/full{ + dir = 4 + }, +/obj/machinery/light/broken/directional/west, +/turf/open/floor/plasteel/elevatorshaft{ + color = "#808080" + }, +/area/centcom) "mKb" = ( /obj/machinery/button/door/indestructible{ id = "thunderdomegen"; @@ -11365,6 +12010,10 @@ }, /turf/open/floor/plasteel, /area/tdome/arena) +"mPN" = ( +/obj/effect/turf_decal/syndicateemblem/top/right, +/turf/open/floor/mineral/plastitanium/red, +/area/centcom) "mUb" = ( /obj/structure/table/wood, /obj/item/paper_bin, @@ -11409,6 +12058,10 @@ /obj/machinery/firealarm/directional/north, /turf/open/floor/plasteel/dark, /area/centcom/ferry) +"mVC" = ( +/obj/structure/destructible/tribal_torch/lit, +/turf/open/floor/wood/mahogany, +/area/centcom) "mYG" = ( /obj/machinery/airalarm/directional/east, /obj/structure/filingcabinet/filingcabinet, @@ -11442,6 +12095,14 @@ /obj/machinery/newscaster/directional/west, /turf/open/floor/plasteel/dark, /area/centcom/ferry) +"naB" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 5; + color = "#543C30" + }, +/obj/machinery/light/directional/east, +/turf/open/floor/wood/walnut, +/area/centcom) "ncR" = ( /obj/machinery/door/poddoor{ id = "XCCQMLoaddoor2"; @@ -11515,6 +12176,13 @@ }, /turf/open/floor/plasteel, /area/tdome/tdomeobserve) +"njp" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8; + color = "#543C30" + }, +/turf/open/floor/wood/walnut, +/area/centcom) "njY" = ( /obj/machinery/status_display/evac{ pixel_y = 32 @@ -11553,6 +12221,12 @@ }, /turf/open/floor/plasteel, /area/centcom/supplypod/loading/three) +"nos" = ( +/obj/structure/catwalk/over, +/turf/open/floor/plating{ + icon_state = "platingdmg2" + }, +/area/centcom) "noV" = ( /obj/structure/table/reinforced, /obj/item/storage/fancy/donut_box, @@ -11824,6 +12498,41 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/ferry) +"nYl" = ( +/obj/structure/table/wood/fancy/blue, +/obj/item/paper_bin/carbon, +/obj/item/pen/solgov, +/obj/item/pen/fourcolor{ + pixel_x = -9; + pixel_y = -3 + }, +/obj/item/desk_flag/solgov{ + pixel_y = 12; + pixel_x = -8 + }, +/turf/open/floor/carpet/royalblue, +/area/centcom) +"nYZ" = ( +/obj/effect/turf_decal/corner/opaque/yellow{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 8 + }, +/obj/machinery/computer/secure_data, +/obj/machinery/light/directional/north, +/turf/open/floor/plasteel, +/area/centcom) +"oaQ" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4; + color = "#543C30" + }, +/turf/open/floor/wood/walnut, +/area/centcom) "oba" = ( /obj/structure/table/wood, /obj/structure/safe/floor, @@ -11883,6 +12592,24 @@ }, /turf/open/floor/plasteel/dark, /area/tdome/tdomeobserve) +"odH" = ( +/obj/effect/turf_decal/corner/opaque/yellow{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 8 + }, +/obj/structure/rack, +/obj/item/gun/ballistic/automatic/assault/ak47/inteq{ + pixel_y = 3 + }, +/obj/item/gun/ballistic/automatic/assault/ak47/inteq{ + pixel_y = -1; + pixel_x = -5 + }, +/obj/machinery/light/directional/south, +/turf/open/floor/plasteel, +/area/centcom) "odV" = ( /obj/structure/chair/office{ dir = 8 @@ -12028,6 +12755,12 @@ }, /turf/open/floor/plasteel, /area/centcom/control) +"ouD" = ( +/obj/machinery/door/airlock/grunge{ + req_access = "109" + }, +/turf/open/floor/plasteel, +/area/centcom) "ouO" = ( /obj/effect/turf_decal/corner/opaque/green, /turf/open/floor/plasteel, @@ -12160,6 +12893,13 @@ }, /turf/open/floor/plasteel, /area/centcom/supply) +"oHB" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/structure/destructible/tribal_torch/lit, +/turf/open/floor/wood/mahogany, +/area/centcom) "oHU" = ( /obj/machinery/computer/communications{ dir = 8 @@ -12338,6 +13078,16 @@ /obj/effect/turf_decal/corner/opaque/blue, /turf/open/floor/plasteel, /area/centcom/control) +"phf" = ( +/obj/structure/table/wood/fancy/blue, +/obj/structure/sign/poster/solgov/paperwork{ + pixel_y = 32 + }, +/obj/item/radio/intercom/wideband/table{ + dir = 1 + }, +/turf/open/floor/carpet/royalblue, +/area/centcom) "phB" = ( /obj/machinery/light/directional/north, /obj/effect/turf_decal/corner/transparent/neutral{ @@ -12428,6 +13178,10 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/ferry) +"plP" = ( +/obj/effect/turf_decal/corner/opaque/yellow/three_quarters, +/turf/open/floor/plasteel, +/area/centcom) "pmP" = ( /obj/effect/turf_decal/corner/opaque/green, /obj/effect/turf_decal/corner/opaque/green{ @@ -12435,6 +13189,19 @@ }, /turf/open/floor/plasteel, /area/centcom/ferry) +"psm" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 10; + color = "#543C30" + }, +/obj/structure/sign/solgov_seal{ + pixel_y = -28 + }, +/obj/machinery/telecomms/relay/preset/solgov{ + autolinkers = list("relay") + }, +/turf/open/floor/wood/walnut, +/area/centcom) "psp" = ( /obj/structure/chair{ dir = 8 @@ -12496,11 +13263,30 @@ /obj/effect/spawner/xmastree, /turf/open/floor/plasteel, /area/syndicate_mothership/control) +"pvN" = ( +/obj/machinery/light/directional/east, +/obj/machinery/telecomms/relay/preset/frontiersmen{ + autolinkers = list("relay") + }, +/turf/open/floor/plasteel/patterned/grid, +/area/centcom) "pvV" = ( /obj/machinery/igniter/on, /obj/effect/turf_decal/industrial/hatch/yellow, /turf/open/floor/plasteel, /area/tdome/arena_source) +"pvW" = ( +/obj/effect/turf_decal/minutemen/edge, +/turf/open/floor/mineral/plastitanium, +/area/centcom) +"pwr" = ( +/obj/effect/turf_decal/solgov/wood/top_right, +/obj/effect/turf_decal/siding/wood{ + color = "#543C30"; + dir = 1 + }, +/turf/open/floor/wood/walnut, +/area/centcom) "pwJ" = ( /obj/structure/chair/comfy/brown{ color = "#596479" @@ -12724,6 +13510,13 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/control) +"pLM" = ( +/obj/effect/turf_decal/siding/wood{ + color = "#543C30" + }, +/obj/effect/turf_decal/solgov/wood/bottom_right, +/turf/open/floor/wood/walnut, +/area/centcom) "pOL" = ( /obj/effect/turf_decal/industrial/warning{ dir = 9 @@ -12819,6 +13612,12 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/control) +"pTR" = ( +/obj/effect/turf_decal/minutemen/edge{ + dir = 4 + }, +/turf/open/floor/mineral/plastitanium, +/area/centcom) "pVF" = ( /obj/machinery/computer/card/centcom{ dir = 8 @@ -12896,6 +13695,11 @@ /obj/effect/turf_decal/corner/opaque/red, /turf/open/floor/plasteel, /area/tdome/tdomeobserve) +"qju" = ( +/obj/structure/table/wood/fancy/blue, +/obj/item/papercutter, +/turf/open/floor/carpet/royalblue, +/area/centcom) "qkb" = ( /obj/item/kirbyplants{ icon_state = "plant-21" @@ -12913,6 +13717,16 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/ferry) +"qkP" = ( +/obj/effect/turf_decal/solgov/wood/bottom_left{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + color = "#543C30"; + dir = 1 + }, +/turf/open/floor/wood/walnut, +/area/centcom) "qmm" = ( /obj/effect/turf_decal/industrial/warning{ dir = 4 @@ -12927,6 +13741,13 @@ }, /turf/open/floor/plasteel, /area/centcom/control) +"qoL" = ( +/turf/open/floor/wood/mahogany, +/area/centcom) +"qqj" = ( +/obj/machinery/light/directional/north, +/turf/open/floor/mineral/plastitanium/red, +/area/centcom) "qsu" = ( /obj/structure/sink{ dir = 4; @@ -13048,6 +13869,27 @@ }, /turf/open/floor/plasteel/dark, /area/tdome/tdomeobserve) +"qLN" = ( +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/yellow{ + dir = 1 + }, +/obj/structure/table, +/obj/structure/sign/poster/contraband/inteq{ + pixel_y = 32 + }, +/obj/item/desk_flag/trans{ + pixel_x = 12; + pixel_y = 2 + }, +/obj/item/radio/intercom/wideband/table{ + dir = 1; + pixel_x = -1 + }, +/turf/open/floor/plasteel, +/area/centcom) "qNc" = ( /obj/effect/turf_decal/corner/transparent/neutral{ dir = 1 @@ -13064,6 +13906,14 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/ferry) +"qQe" = ( +/obj/machinery/hydroponics/soil, +/turf/open/floor/ship/dirt, +/area/centcom) +"qQA" = ( +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood/mahogany, +/area/centcom) "qSb" = ( /obj/machinery/keycard_auth{ pixel_y = -25 @@ -13094,6 +13944,9 @@ }, /turf/open/floor/plasteel, /area/tdome/tdomeobserve) +"qVq" = ( +/turf/open/floor/plasteel, +/area/centcom) "qXd" = ( /obj/structure/table/wood, /obj/item/taperecorder, @@ -13324,6 +14177,14 @@ /obj/structure/extinguisher_cabinet/directional/east, /turf/open/floor/plasteel/dark, /area/centcom/control) +"rjV" = ( +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/yellow, +/obj/item/kirbyplants/random, +/turf/open/floor/plasteel, +/area/centcom) "rln" = ( /obj/machinery/door/airlock/centcom{ name = "CentCom Supply"; @@ -13347,6 +14208,16 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/ferry) +"rmj" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/fluff/paper/stack, +/obj/item/chair/plastic{ + dir = 1; + pixel_x = -9; + pixel_y = 6 + }, +/turf/open/floor/plasteel/patterned/grid, +/area/centcom) "roJ" = ( /obj/effect/turf_decal/corner/transparent/neutral{ dir = 1 @@ -13451,6 +14322,14 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/control) +"rvC" = ( +/obj/structure/table/reinforced, +/obj/item/radio/headset/minutemen/alt/captain{ + pixel_y = 2; + pixel_x = 1 + }, +/turf/open/floor/plasteel, +/area/centcom) "rvW" = ( /obj/structure/sink{ dir = 4; @@ -13684,6 +14563,16 @@ }, /turf/open/floor/plasteel, /area/tdome/arena_source) +"rUa" = ( +/obj/effect/turf_decal/corner/opaque/yellow{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 8 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/plasteel, +/area/centcom) "rUH" = ( /obj/structure/table/reinforced, /obj/item/reagent_containers/food/snacks/mint, @@ -13967,6 +14856,10 @@ /obj/effect/turf_decal/corner/opaque/blue, /turf/open/floor/plasteel/dark, /area/ctf) +"sMn" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/patterned/grid, +/area/centcom) "sMK" = ( /obj/effect/turf_decal/corner/opaque/brown, /obj/effect/turf_decal/corner/opaque/brown{ @@ -13991,6 +14884,13 @@ }, /turf/open/floor/plasteel/white, /area/centcom/holding) +"sQw" = ( +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/yellow, +/turf/open/floor/plasteel, +/area/centcom) "sRB" = ( /obj/machinery/light/directional/east, /obj/effect/turf_decal/corner/transparent/bar, @@ -14051,6 +14951,12 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/control) +"sVJ" = ( +/obj/effect/turf_decal/corner/opaque/yellow{ + dir = 6 + }, +/turf/open/floor/plasteel, +/area/centcom) "sWb" = ( /obj/item/storage/briefcase{ pixel_x = -3; @@ -14070,6 +14976,22 @@ }, /turf/open/floor/plasteel/dark, /area/tdome/tdomeadmin) +"sZJ" = ( +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/yellow{ + dir = 1 + }, +/obj/structure/table, +/obj/item/clothing/head/helmet/inteq{ + pixel_x = -12; + pixel_y = 7 + }, +/obj/item/paper_bin, +/obj/item/pen, +/turf/open/floor/plasteel, +/area/centcom) "sZS" = ( /obj/effect/turf_decal/industrial/hatch/yellow, /turf/open/floor/plasteel, @@ -14272,12 +15194,44 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/evac) +"ttK" = ( +/obj/effect/decal/fakelattice{ + color = "#808080"; + layer = 2.038 + }, +/obj/effect/turf_decal/corner_steel_grid/full{ + dir = 8 + }, +/obj/item/trash/can{ + pixel_x = -6; + pixel_y = 10 + }, +/turf/open/floor/plasteel/elevatorshaft{ + color = "#808080" + }, +/area/centcom) "tuw" = ( /obj/effect/turf_decal/industrial/loading{ dir = 8 }, /turf/open/floor/plasteel, /area/centcom/supply) +"tvO" = ( +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/yellow, +/obj/structure/rack, +/obj/item/gun/ballistic/automatic/smg/inteq{ + pixel_x = 2 + }, +/obj/item/gun/ballistic/automatic/smg/inteq{ + pixel_x = -1; + pixel_y = -6 + }, +/obj/machinery/light/directional/south, +/turf/open/floor/plasteel, +/area/centcom) "tyg" = ( /obj/effect/turf_decal/corner/opaque/blue{ dir = 1 @@ -14307,6 +15261,25 @@ }, /turf/open/floor/plasteel/dark, /area/tdome/tdomeadmin) +"tAe" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/effect/decal/cleanable/blood{ + icon_state = "floor1-old"; + pixel_y = 10; + pixel_x = -8 + }, +/obj/effect/decal/cleanable/blood{ + icon_state = "floor2-old" + }, +/obj/effect/decal/cleanable/shreds{ + pixel_y = 11; + pixel_x = 4 + }, +/obj/effect/turf_decal/steeldecal/steel_decals_central5, +/turf/open/floor/plasteel/patterned/grid, +/area/centcom) "tAB" = ( /obj/structure/filingcabinet/medical, /obj/effect/turf_decal/corner/transparent/neutral{ @@ -14321,6 +15294,21 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/control) +"tBa" = ( +/obj/structure/table/wood, +/obj/item/book/manual/srmlore{ + pixel_y = 4; + pixel_x = -4 + }, +/obj/item/flashlight/lantern{ + pixel_x = 8; + pixel_y = 13 + }, +/obj/item/book/manual/trickwines_4_brewers{ + pixel_x = -1 + }, +/turf/open/floor/wood/mahogany, +/area/centcom) "tBL" = ( /obj/structure/table/reinforced, /obj/item/storage/fancy/donut_box, @@ -14378,6 +15366,12 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/control) +"tGR" = ( +/obj/effect/turf_decal/minutemen/corner{ + dir = 8 + }, +/turf/open/floor/mineral/plastitanium, +/area/centcom) "tHd" = ( /obj/effect/turf_decal/industrial/warning{ dir = 5 @@ -14410,6 +15404,11 @@ }, /turf/open/floor/plasteel, /area/centcom/evac) +"tOf" = ( +/obj/effect/turf_decal/solgov/wood/center, +/obj/machinery/light/floor, +/turf/open/floor/wood/walnut, +/area/centcom) "tOg" = ( /obj/machinery/computer/prisoner/management{ dir = 1 @@ -14481,6 +15480,10 @@ }, /turf/open/floor/plasteel, /area/tdome/arena_source) +"tUy" = ( +/obj/structure/catwalk/over, +/turf/open/floor/plating, +/area/centcom) "tWM" = ( /obj/structure/table/reinforced, /obj/item/radio{ @@ -14573,6 +15576,34 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/control) +"unc" = ( +/obj/effect/turf_decal/siding/wood{ + color = "#543C30" + }, +/obj/effect/turf_decal/solgov/wood/bottom_center, +/obj/effect/turf_decal/siding/wood{ + color = "#543C30" + }, +/turf/open/floor/wood/walnut, +/area/centcom) +"unP" = ( +/obj/structure/table, +/obj/item/crowbar{ + pixel_y = 8; + pixel_x = -4 + }, +/obj/item/electropack{ + pixel_x = 7; + pixel_y = -2 + }, +/obj/item/kitchen/knife{ + pixel_y = -5; + pixel_x = -5 + }, +/turf/open/floor/plating{ + icon_state = "platingdmg1" + }, +/area/centcom) "uqL" = ( /obj/effect/turf_decal/industrial/warning{ dir = 1 @@ -14586,6 +15617,10 @@ }, /turf/open/floor/plasteel, /area/centcom/control) +"uuY" = ( +/obj/effect/turf_decal/syndicateemblem/bottom/right, +/turf/open/floor/mineral/plastitanium/red, +/area/centcom) "uzX" = ( /obj/structure/table, /obj/item/toy/katana, @@ -14709,6 +15744,9 @@ heat_capacity = 1e+006 }, /area/tdome/tdomeobserve) +"uKW" = ( +/turf/open/floor/mineral/plastitanium/red, +/area/centcom) "uLr" = ( /obj/item/storage/firstaid/toxin, /obj/item/storage/firstaid/o2{ @@ -14751,6 +15789,11 @@ }, /turf/open/floor/plasteel, /area/centcom/supplypod/loading/four) +"uOa" = ( +/obj/effect/turf_decal/syndicateemblem/bottom/middle, +/obj/structure/chair/office/dark, +/turf/open/floor/mineral/plastitanium/red, +/area/centcom) "uRu" = ( /obj/structure/table/wood, /obj/item/paper_bin, @@ -14847,6 +15890,10 @@ }, /turf/open/floor/plasteel, /area/syndicate_mothership/control) +"veN" = ( +/obj/structure/sign/syndicate, +/turf/closed/indestructible/syndicate, +/area/centcom) "veT" = ( /obj/machinery/vending/coffee, /obj/effect/turf_decal/corner/transparent/bar, @@ -15124,6 +16171,10 @@ }, /turf/open/floor/plasteel/dark, /area/ctf) +"vFM" = ( +/obj/machinery/telecomms/hub/preset, +/turf/open/floor/plasteel, +/area/centcom) "vGf" = ( /obj/effect/turf_decal/industrial/warning{ dir = 10 @@ -15133,6 +16184,18 @@ }, /turf/open/floor/plasteel/dark, /area/ctf) +"vIg" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9; + color = "#543C30" + }, +/obj/effect/turf_decal/solgov/wood/top, +/obj/effect/turf_decal/siding/wood{ + color = "#543C30"; + dir = 1 + }, +/turf/open/floor/wood/walnut, +/area/centcom) "vKH" = ( /obj/structure/table, /obj/machinery/reagentgrinder, @@ -15164,6 +16227,12 @@ }, /turf/open/floor/plasteel/dark, /area/tdome/tdomeobserve) +"vQk" = ( +/obj/structure/chair/wood/wings{ + dir = 1 + }, +/turf/open/floor/wood/mahogany, +/area/centcom) "vQM" = ( /obj/structure/table/wood, /obj/machinery/recharger, @@ -15196,6 +16265,13 @@ }, /turf/open/floor/plasteel, /area/centcom/evac) +"wad" = ( +/obj/effect/turf_decal/minutemen/corner, +/obj/structure/chair/comfy{ + dir = 8 + }, +/turf/open/floor/mineral/plastitanium, +/area/centcom) "wbj" = ( /obj/effect/turf_decal/corner/transparent/neutral, /obj/effect/turf_decal/corner/transparent/neutral{ @@ -15255,6 +16331,15 @@ }, /turf/open/floor/circuit/red, /area/ctf) +"weV" = ( +/obj/structure/fluff/paper/stack{ + dir = 6; + pixel_y = 11; + pixel_x = 7 + }, +/obj/structure/catwalk/over, +/turf/open/floor/plating, +/area/centcom) "wfQ" = ( /obj/structure/trap/ctf/red, /obj/effect/turf_decal/corner/opaque/red{ @@ -15399,6 +16484,28 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/ferry) +"wAh" = ( +/obj/machinery/fax/admin/inteq, +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/yellow{ + dir = 1 + }, +/obj/structure/table, +/turf/open/floor/plasteel, +/area/centcom) +"wCp" = ( +/obj/structure/table/wood/fancy/blue, +/obj/item/folder/solgov/red{ + pixel_x = -3 + }, +/obj/item/folder/solgov{ + pixel_y = 5; + pixel_x = 2 + }, +/turf/open/floor/carpet/royalblue, +/area/centcom) "wEF" = ( /obj/effect/turf_decal/corner/opaque/red, /obj/effect/turf_decal/corner/opaque/red{ @@ -15553,6 +16660,7 @@ name = "CentCom Stand"; req_access_txt = "109" }, +/obj/machinery/fax/admin, /turf/open/floor/plasteel/grimy, /area/centcom/control) "xaO" = ( @@ -15680,6 +16788,10 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/control) +"xxi" = ( +/obj/effect/turf_decal/syndicateemblem/top/middle, +/turf/open/floor/mineral/plastitanium/red, +/area/centcom) "xEx" = ( /obj/structure/chair, /obj/effect/turf_decal/industrial/warning{ @@ -15779,6 +16891,10 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/ferry) +"xTt" = ( +/obj/effect/turf_decal/solgov/wood/center_right, +/turf/open/floor/wood/walnut, +/area/centcom) "xWv" = ( /obj/effect/turf_decal/corner/opaque/green{ dir = 1 @@ -15829,6 +16945,13 @@ dir = 1 }, /area/centcom/supply) +"yhk" = ( +/obj/machinery/door/airlock/wood{ + dir = 4; + req_access = "109" + }, +/turf/open/floor/wood/mahogany, +/area/centcom) "yhL" = ( /obj/effect/turf_decal/corner/opaque/red{ dir = 1 @@ -25311,21 +26434,21 @@ aaa aaa aaa aaa +aPu +aPu +aPu +aPu +aPu +aPu +aPu aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +hzJ +hzJ +hzJ +hzJ +bbf +hzJ +hzJ aaa aaa aaa @@ -25568,21 +26691,21 @@ aaa aaa aaa aaa +aPu +bSy +wCp +iwJ +njp +psm +aPu aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +hzJ +lQr +moE +qVq +qVq +bIJ +hzJ aaa aaa aaa @@ -25825,21 +26948,21 @@ aaa aaa aaa aaa +aPu +nYl +dER +qkP +jja +eqM +aPu aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +hzJ +hba +wad +pTR +gaU +vFM +hzJ aaa aaa aaa @@ -26082,21 +27205,21 @@ aaa aaa aaa aaa +aPu +gTo +gfJ +vIg +tOf +unc +iSo aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +hzJ +kkC +pvW +iWI +hBf +rvC +hzJ aaa aaa aaa @@ -26339,21 +27462,21 @@ aaa aaa aaa aaa +aPu +phf +dER +pwr +xTt +pLM +aPu aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +hzJ +qVq +tGR +kiC +bUH +bRF +hzJ aaa aaa aaa @@ -26596,21 +27719,21 @@ aaa aaa aaa aaa +aPu +dom +qju +naB +oaQ +gsx +aPu aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +hzJ +dKW +qVq +qVq +aIF +igC +hzJ aaa aaa aaa @@ -26853,21 +27976,21 @@ aaa aaa aaa aaa +aPu +aPu +aPu +aPu +aPu +aPu +aPu aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +hzJ +hzJ +hzJ +hzJ +hzJ +hzJ +hzJ aaa aaa aaa @@ -27367,21 +28490,21 @@ aaa aaa aaa aaa +lJp +lJp +lJp +lJp +lJp +lJp +lJp aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +hzJ +hzJ +hzJ +mpi +hzJ +hzJ +hzJ aaa aaa aaa @@ -27624,21 +28747,21 @@ aaa aaa aaa aaa +veN +cCK +cUG +mAL +fKt +iZr +veN aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +hzJ +mJP +lmY +tUy +sMn +kFX +hzJ aaa aaa aaa @@ -27881,21 +29004,21 @@ aaa aaa aaa aaa +fUc +uKW +mJl +myU +kXn +msQ +lJp aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +hzJ +lHR +rmj +weV +lXI +tAe +hzJ aaa aaa aaa @@ -28138,21 +29261,21 @@ aaa aaa aaa aaa +lJp +qqj +xxi +jPn +uOa +jFa +lJp aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +hzJ +jDt +ibc +eWz +lXQ +duw +hzJ aaa aaa aaa @@ -28395,21 +29518,21 @@ aaa aaa aaa aaa +fUc +uKW +mPN +kmQ +uuY +jly +lJp aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +hzJ +iRP +fau +gDV +iti +unP +hzJ aaa aaa aaa @@ -28652,21 +29775,21 @@ aaa aaa aaa aaa +veN +lfK +ciU +iyJ +bFc +iZr +veN aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +hzJ +mDT +ttK +nos +cZi +pvN +hzJ aaa aaa aaa @@ -28909,21 +30032,21 @@ aaa aaa aaa aaa +lJp +lJp +lJp +lJp +lJp +lJp +lJp aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +hzJ +hzJ +hzJ +eLy +hzJ +hzJ +hzJ aaa aaa aaa @@ -29423,21 +30546,21 @@ aaa aaa aaa aaa +aPu +aPu +aPu +aPu +aPu +aPu +aPu aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +eAJ +eAJ +eAJ +eAJ +eAJ +eAJ +eAJ aaa aaa aaa @@ -29680,21 +30803,21 @@ aaa aaa aaa aaa +aPu +nYZ +mGE +rUa +mGE +odH +aPu aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +eAJ +mVC +qoL +jEn +etl +oHB +eAJ aaa aaa aaa @@ -29937,21 +31060,21 @@ aaa aaa aaa aaa +aPu +qLN +fTU +emF +sVJ +apm +aPu aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +eAJ +tBa +qoL +qQA +iDo +hYV +eAJ aaa aaa aaa @@ -30194,21 +31317,21 @@ aaa aaa aaa aaa +aPu +wAh +cxm +emF +emF +cjo +ouD aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +eAJ +lfi +vQk +qQA +iDo +qQe +eAJ aaa aaa aaa @@ -30451,21 +31574,21 @@ aaa aaa aaa aaa +aPu +sZJ +plP +emF +lYF +cIS +aPu aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +eAJ +jyy +qoL +qQA +iDo +qQe +eAJ aaa aaa aaa @@ -30708,21 +31831,21 @@ aaa aaa aaa aaa +aPu +lKP +sQw +rjV +sQw +tvO +aPu aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +eAJ +mVC +qoL +qQA +iDo +hYV +eAJ aaa aaa aaa @@ -30965,21 +32088,21 @@ aaa aaa aaa aaa +aPu +aPu +aPu +aPu +aPu +aPu +aPu aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +eAJ +eAJ +eAJ +yhk +eAJ +eAJ +eAJ aaa aaa aaa diff --git a/_maps/outpost/hangar/nt_asteroid_20x20.dmm b/_maps/outpost/hangar/nt_asteroid_20x20.dmm index c3d35afcea10..159af62d17cf 100644 --- a/_maps/outpost/hangar/nt_asteroid_20x20.dmm +++ b/_maps/outpost/hangar/nt_asteroid_20x20.dmm @@ -1037,7 +1037,7 @@ /obj/structure/table/reinforced{ color = "#c1b6a5" }, -/obj/machinery/fax, +/obj/machinery/fax/ruin, /turf/open/floor/plasteel/dark{ planetary_atmos = 1 }, diff --git a/_maps/outpost/hangar/nt_asteroid_40x20.dmm b/_maps/outpost/hangar/nt_asteroid_40x20.dmm index 959b27a5dd98..0d229e5d7af9 100644 --- a/_maps/outpost/hangar/nt_asteroid_40x20.dmm +++ b/_maps/outpost/hangar/nt_asteroid_40x20.dmm @@ -1233,7 +1233,7 @@ /obj/structure/table/reinforced{ color = "#c1b6a5" }, -/obj/machinery/fax, +/obj/machinery/fax/ruin, /obj/effect/turf_decal/techfloor{ dir = 4 }, diff --git a/_maps/outpost/nanotrasen_asteroid.dmm b/_maps/outpost/nanotrasen_asteroid.dmm index 8f5c38ded0ea..d5ccb5e0af68 100644 --- a/_maps/outpost/nanotrasen_asteroid.dmm +++ b/_maps/outpost/nanotrasen_asteroid.dmm @@ -3558,7 +3558,7 @@ /area/outpost/crew/library) "mZ" = ( /obj/structure/table/wood, -/obj/machinery/fax, +/obj/machinery/fax/ruin, /turf/open/floor/plasteel, /area/outpost/crew/canteen) "na" = ( diff --git a/_maps/outpost/nanotrasen_ice.dmm b/_maps/outpost/nanotrasen_ice.dmm index bc92fdbc20c0..04b8040a6275 100644 --- a/_maps/outpost/nanotrasen_ice.dmm +++ b/_maps/outpost/nanotrasen_ice.dmm @@ -7463,7 +7463,7 @@ /area/outpost/security/armory) "XG" = ( /obj/structure/table/reinforced, -/obj/machinery/fax, +/obj/machinery/fax/ruin, /obj/machinery/light/directional/south, /turf/open/floor/plasteel/telecomms_floor, /area/outpost/security) diff --git a/code/__DEFINES/admin.dm b/code/__DEFINES/admin.dm index 1adec75b74ac..44f0893cd9a5 100644 --- a/code/__DEFINES/admin.dm +++ b/code/__DEFINES/admin.dm @@ -67,6 +67,8 @@ #define ADMIN_COORDJMP(src) "[src ? "[COORD(src)] [ADMIN_JMP(src)]" : "nonexistent location"]" #define ADMIN_VERBOSEJMP(src) "[src ? "[AREACOORD(src)] [ADMIN_JMP(src)]" : "nonexistent location"]" #define ADMIN_INDIVIDUALLOG(user) "(LOGS)" +/// Displays "(SHOW)" in the chat, when clicked it tries to show atom(paper). First you need to set the request_state variable to TRUE for the paper. +#define ADMIN_SHOW_PAPER(atom) "(SHOW)" #define ADMIN_PUNISHMENT_BREAK_BONES "Break all bones" #define ADMIN_PUNISHMENT_LIGHTNING "Lightning bolt" diff --git a/code/_globalvars/lists/faxes.dm b/code/_globalvars/lists/faxes.dm deleted file mode 100644 index 5c78629de283..000000000000 --- a/code/_globalvars/lists/faxes.dm +++ /dev/null @@ -1,26 +0,0 @@ -/** - * This defines the list of faxes managed by the server administrators. They are not physically present in - * the game, but are shown in the fax list as existing. - * Lists: - * * additional_faxes_list - A list of "legal" faxes available with authorization. - * * frontier_faxes_list - List of faxes available after hacking. - * - * The list consists of the following elements: - * * fax_name - The name displayed in the fax list. - * * button_color - The color of this fax button in the list of all faxes. - */ -GLOBAL_LIST_INIT(additional_faxes_list, list( - list("fax_name" = "Nanotrasen Central Command", "button_color" = "#46B946"), - list("fax_name" = "Inteq Management Field Command", "button_color" = "#FACE65"), - list("fax_name" = "Colonial Minutemen Headquarters", "button_color" = "#538ACF"), - list("fax_name" = "Saint-Roumain Council of Huntsmen", "button_color" = "#6B443D"), - list("fax_name" = "SolGov Department of Administrative Affairs", "button_color" = "#536380"), - list("fax_name" = "Syndicate Coordination Center", "button_color" = "#B22C20"), - list("fax_name" = "Outpost Administration", "button_color" = "#dddfc9"), -)) - -GLOBAL_LIST_INIT(frontier_faxes_list, list( - list("fax_name" = "Frontiersmen Communications Outpost", "button_color" = "#70654C") -)) - -GLOBAL_LIST_EMPTY(fax_machines) //list of all fax machines diff --git a/code/_globalvars/lists/objects.dm b/code/_globalvars/lists/objects.dm index 82258dfdcd43..ac54c7a39b33 100644 --- a/code/_globalvars/lists/objects.dm +++ b/code/_globalvars/lists/objects.dm @@ -11,6 +11,7 @@ GLOBAL_LIST_EMPTY(wayfindingbeacons) //list of all navigation beacons used GLOBAL_LIST_EMPTY(nuke_list) GLOBAL_LIST_EMPTY(alarmdisplay) //list of all machines or programs that can display station alerts GLOBAL_LIST_EMPTY(singularities) //list of all singularities on the station (actually technically all engines) +GLOBAL_LIST_EMPTY(fax_machines) //list of all fax machines GLOBAL_LIST(chemical_reactions_list) //list of all /datum/chemical_reaction datums. Used during chemical reactions GLOBAL_LIST(chemical_reagents_list) //list of all /datum/reagent datums indexed by reagent id. Used by chemistry stuff diff --git a/code/game/machinery/telecomms/machines/relay.dm b/code/game/machinery/telecomms/machines/relay.dm index 15f96e69022b..773faec875f4 100644 --- a/code/game/machinery/telecomms/machines/relay.dm +++ b/code/game/machinery/telecomms/machines/relay.dm @@ -73,6 +73,36 @@ toggled = FALSE autolinkers = list("r_relay") +/obj/machinery/telecomms/relay/preset/nanotrasen + freq_listening = list(FREQ_COMMAND, FREQ_NANOTRASEN, FREQ_COMMON) + id = "Nanotrasen Relay" + network = "nt_commnet" + +/obj/machinery/telecomms/relay/preset/inteq + freq_listening = list(FREQ_COMMAND, FREQ_INTEQ, FREQ_COMMON) + id = "IRMG Relay" + network = "irmg_commnet" + +/obj/machinery/telecomms/relay/preset/minutemen + freq_listening = list(FREQ_COMMAND, FREQ_MINUTEMEN, FREQ_COMMON) + id = "CMM Relay" + network = "cmm_commnet" + +/obj/machinery/telecomms/relay/preset/solgov + freq_listening = list(FREQ_COMMAND, FREQ_SOLGOV, FREQ_COMMON) + id = "SolGov Relay" + network = "solgov_commnet" + +/obj/machinery/telecomms/relay/preset/syndicate + freq_listening = list(FREQ_COMMAND, FREQ_SYNDICATE, FREQ_COMMON) + id = "Syndicate Relay" + network = "synd_commnet" + +/obj/machinery/telecomms/relay/preset/frontiersmen + freq_listening = list(FREQ_COMMAND, FREQ_PIRATE, FREQ_COMMON) + id = "Frontiersmen Relay" + network = "frontier_commnet" + //Generic preset relay /obj/machinery/telecomms/relay/preset/auto hide = TRUE diff --git a/code/game/objects/items/circuitboards/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machine_circuitboards.dm index 7056c7a38d97..306634a639fc 100644 --- a/code/game/objects/items/circuitboards/machine_circuitboards.dm +++ b/code/game/objects/items/circuitboards/machine_circuitboards.dm @@ -687,7 +687,6 @@ name = "Fax Machine" build_path = /obj/machinery/fax req_components = list( - /obj/item/stock_parts/subspace/crystal = 1, /obj/item/stock_parts/scanning_module = 1, /obj/item/stock_parts/micro_laser = 1, /obj/item/stock_parts/manipulator = 1,) diff --git a/code/game/turfs/closed/_closed.dm b/code/game/turfs/closed/_closed.dm index d179a2930d2f..c7a1d9dd6f29 100644 --- a/code/game/turfs/closed/_closed.dm +++ b/code/game/turfs/closed/_closed.dm @@ -230,7 +230,7 @@ /turf/closed/indestructible/fakedoor name = "CentCom Access" icon = 'icons/obj/doors/airlocks/centcom/centcom.dmi' - icon_state = "fake_door" + icon_state = "fakedoor" /turf/closed/indestructible/rock name = "dense rock" diff --git a/code/modules/admin/admin_fax_panel.dm b/code/modules/admin/admin_fax_panel.dm new file mode 100644 index 000000000000..32f523584a39 --- /dev/null +++ b/code/modules/admin/admin_fax_panel.dm @@ -0,0 +1,145 @@ +/** + * If client have R_ADMIN flag, opens an admin fax panel. + */ +/client/proc/fax_panel() + set name = "Send Fax Message" + set category = "Admin" + + if(!check_rights(R_ADMIN)) + return + + var/datum/fax_panel_interface/ui = new(usr) + ui.ui_interact(usr) + +/// Admin Fax Panel. Tool for sending fax messages faster. +/datum/fax_panel_interface + /// All faxes in from machinery list() + var/available_faxes = list() + /// List with available stamps + var/stamp_list = list() + + /// Paper which admin edit and send. + var/obj/item/paper/fax_paper = new /obj/item/paper(null) + + /// Default name of fax. Used when field with fax name not edited. + var/sending_fax_name = "Secret" + /// Default name of paper. paper - bluh-bluh. Used when field with paper name not edited. + var/default_paper_name = "Standard Report" + +/datum/fax_panel_interface/New() + //Get all faxes, and save them to our list. + for(var/obj/machinery/fax/fax as anything in GLOB.fax_machines) + available_faxes += WEAKREF(fax) + + //Get all stamps + for(var/stamp in subtypesof(/obj/item/stamp)) + var/obj/item/stamp/real_stamp = new stamp() + if(!istype(real_stamp, /obj/item/stamp/chameleon)) + var/stamp_detail = real_stamp.get_writing_implement_details() + stamp_list += list(list(real_stamp.name, real_stamp.icon_state, stamp_detail["stamp_class"])) + + //Give our paper special status, to read everywhere. + fax_paper.request_state = TRUE + +/** + * Return fax if name exists + * Arguments: + * * name - Name of fax what we try to find. + */ +/datum/fax_panel_interface/proc/get_fax_by_name(name) + if(!length(available_faxes)) + return null + + for(var/datum/weakref/weakrefed_fax as anything in available_faxes) + var/obj/machinery/fax/potential_fax = weakrefed_fax.resolve() + if(potential_fax && istype(potential_fax)) + if(potential_fax.fax_name == name) + return potential_fax + return null + +/datum/fax_panel_interface/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "AdminFax") + ui.open() + +/datum/fax_panel_interface/ui_state(mob/user) + return GLOB.admin_state + +/datum/fax_panel_interface/ui_static_data(mob/user) + var/list/data = list() + + data["faxes"] = list() + data["stamps"] = list() + + for(var/stamp in stamp_list) + data["stamps"] += list(stamp[1]) // send only names. + + for(var/datum/weakref/weakrefed_fax as anything in available_faxes) + var/obj/machinery/fax/another_fax = weakrefed_fax.resolve() + if(another_fax && istype(another_fax)) + data["faxes"] += list(another_fax.fax_name) + + return data + +/datum/fax_panel_interface/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + if(..()) + return + + if(!check_rights(R_ADMIN)) + return + + var/obj/machinery/fax/action_fax + + if(params["faxName"]) + action_fax = get_fax_by_name(params["faxName"]) + + switch(action) + + if("follow") + if(!isobserver(usr)) + usr.client?.admin_ghost() + + usr.client?.holder?.admin_follow(action_fax) + + if("preview") // see saved variant + if(!fax_paper) + return + fax_paper.ui_interact(usr) + + if("save") // save paper + if(params["paperName"]) + default_paper_name = params["paperName"] + if(params["fromWho"]) + sending_fax_name = params["fromWho"] + + fax_paper.clear_paper() + var/stamp + var/stamp_class + + for(var/needed_stamp in stamp_list) + if(needed_stamp[1] == params["stamp"]) + stamp = needed_stamp[2] + stamp_class = needed_stamp[3] + break + + fax_paper.name = "paper — [default_paper_name]" + fax_paper.add_raw_text(params["rawText"], advanced_html = TRUE) + + if(stamp) + fax_paper.add_stamp(stamp_class, params["stampX"], params["stampY"], params["stampAngle"], stamp) + + fax_paper.update_static_data(usr) // OK, it's work, and update UI. + + if("send") + //copy + var/obj/item/paper/our_fax = fax_paper.copy(/obj/item/paper) + our_fax.name = fax_paper.name + //send + action_fax.receive(our_fax, sending_fax_name, important = TRUE) + message_admins("[key_name_admin(usr)] has sent a custom fax message to [action_fax.name][ADMIN_FLW(action_fax)][ADMIN_SHOW_PAPER(fax_paper)].") + log_admin("[key_name(usr)] has sent a custom fax message to [action_fax.name]") + + if("createPaper") + var/obj/item/paper/our_paper = fax_paper.copy(/obj/item/paper, usr.loc) + our_paper.name = fax_paper.name diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 929cf33f3315..a853f66963af 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -26,7 +26,9 @@ GLOBAL_PROTECT(admin_verbs_default) /client/proc/resetasaycolor, /client/proc/fix_air, /*resets air in designated radius to its default atmos composition*/ /client/proc/addbunkerbypass, - /client/proc/revokebunkerbypass + /client/proc/revokebunkerbypass, + /client/proc/requests, + /client/proc/fax_panel, /*send a paper to fax*/ ) GLOBAL_LIST_INIT(admin_verbs_admin, world.AVerbsAdmin()) GLOBAL_PROTECT(admin_verbs_admin) @@ -119,7 +121,6 @@ GLOBAL_LIST_INIT(admin_verbs_fun, list( /client/proc/polymorph_all, /client/proc/show_tip, /client/proc/smite, - /client/proc/fax_manager, /client/proc/spawn_ruin, )) GLOBAL_PROTECT(admin_verbs_fun) @@ -283,7 +284,6 @@ GLOBAL_LIST_INIT(admin_verbs_hideable, list( /client/proc/cmd_display_del_log, /client/proc/toggle_combo_hud, /client/proc/debug_huds, - /client/proc/fax_manager )) GLOBAL_PROTECT(admin_verbs_hideable) diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index bb46d7250b0b..b917501d0bb8 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -2218,10 +2218,14 @@ return GLOB.interviews.ui_interact(usr) - else if(href_list["open_fax_manager"]) + else if(href_list["show_paper"]) if(!check_rights(R_ADMIN)) return - usr.client.fax_manager() + + var/obj/item/paper/paper_to_show = locate(href_list["show_paper"]) + if(!istype(paper_to_show)) + return + paper_to_show.ui_interact(usr) /datum/admins/proc/HandleCMode() if(!check_rights(R_ADMIN)) diff --git a/code/modules/admin/verbs/fax_manager.dm b/code/modules/admin/verbs/fax_manager.dm deleted file mode 100644 index 6c6de9d5d100..000000000000 --- a/code/modules/admin/verbs/fax_manager.dm +++ /dev/null @@ -1,9 +0,0 @@ -/client/proc/fax_manager() - set category = "Fun" - set name = "Fax Manager" - set desc = "Open the manager panel to view all requests during the round in progress." - if(!check_rights(R_ADMIN)) - return - - SSblackbox.record_feedback("tally", "admin_verb", 1, "Fax Manager") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - GLOB.fax_manager.ui_interact(usr) diff --git a/code/modules/admin/verbs/pray.dm b/code/modules/admin/verbs/pray.dm index 05dccfc0ca75..c2be9649d7c3 100644 --- a/code/modules/admin/verbs/pray.dm +++ b/code/modules/admin/verbs/pray.dm @@ -44,23 +44,21 @@ deity = "Ashen Hunter" var/msg_tmp = msg + GLOB.requests.pray(usr.client, msg, usr.job == "Chaplain") msg = "[icon2html(cross, GLOB.admins)][prayer_type][deity ? " (to [deity])" : ""]: [ADMIN_FULLMONTY(src)] [ADMIN_SC(src)]: [msg]" for(var/client/C in GLOB.admins) if(C.prefs.chat_toggles & CHAT_PRAYER) to_chat(C, msg, confidential = TRUE) - if(C.prefs.toggles & SOUND_PRAYERS) - if(usr.job == "Chaplain") - SEND_SOUND(C, sound('sound/effects/pray.ogg')) to_chat(usr, "You pray to the gods: \"[msg_tmp]\"", confidential = TRUE) SSredbot.send_discord_message("admin", "Prayer from [src.key]/([src.name]): [msg]") SSblackbox.record_feedback("tally", "admin_verb", 1, "Prayer") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - //log_admin("HELP: [key_name(src)]: [msg]") /// Used by communications consoles to message CentCom /proc/message_centcom(text, mob/sender) var/msg = copytext_char(sanitize(text), 1, MAX_MESSAGE_LEN) + GLOB.requests.message_centcom(sender.client, msg) msg = "CENTCOM:[ADMIN_FULLMONTY(sender)] [ADMIN_CENTCOM_REPLY(sender)]: [msg]" to_chat(GLOB.admins, msg, confidential = TRUE) for(var/obj/machinery/computer/communications/console in GLOB.machines) @@ -69,6 +67,7 @@ /// Used by communications consoles to message the Syndicate /proc/message_syndicate(text, mob/sender) var/msg = copytext_char(sanitize(text), 1, MAX_MESSAGE_LEN) + GLOB.requests.message_syndicate(sender.client, msg) msg = "SYNDICATE:[ADMIN_FULLMONTY(sender)] [ADMIN_SYNDICATE_REPLY(sender)]: [msg]" to_chat(GLOB.admins, msg, confidential = TRUE) for(var/obj/machinery/computer/communications/console in GLOB.machines) @@ -77,6 +76,7 @@ /// Used by communications consoles to request the nuclear launch codes /proc/nuke_request(text, mob/sender) var/msg = copytext_char(sanitize(text), 1, MAX_MESSAGE_LEN) + GLOB.requests.nuke_request(sender.client, msg) msg = "NUKE CODE REQUEST:[ADMIN_FULLMONTY(sender)] [ADMIN_CENTCOM_REPLY(sender)] [ADMIN_SET_SD_CODE]: [msg]" to_chat(GLOB.admins, msg, confidential = TRUE) for(var/obj/machinery/computer/communications/console in GLOB.machines) diff --git a/code/modules/admin/verbs/requests.dm b/code/modules/admin/verbs/requests.dm new file mode 100644 index 000000000000..94aa976dbd1a --- /dev/null +++ b/code/modules/admin/verbs/requests.dm @@ -0,0 +1,7 @@ +/// Verb for opening the requests manager panel +/client/proc/requests() + set name = "Requests Manager" + set desc = "Open the request manager panel to view all requests during this round" + set category = "Admin" + SSblackbox.record_feedback("tally", "admin_verb", 1, "Request Manager") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + GLOB.requests.ui_interact(usr) diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index 06d96d7229cc..8db2e8454828 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -231,6 +231,7 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( GLOB.ahelp_tickets.client_login(src) GLOB.interviews.client_login(src) + GLOB.requests.client_login(src) var/connecting_admin = FALSE //because de-admined admins connecting should be treated like admins. //Admin Authorisation holder = GLOB.admin_datums[ckey] @@ -501,6 +502,7 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( log_access("Logout: [key_name(src)]") GLOB.ahelp_tickets.client_logout(src) GLOB.interviews.client_logout(src) + GLOB.requests.client_logout(src) SSserver_maint.UpdateHubStatus() if(credits) QDEL_LIST(credits) diff --git a/code/modules/paperwork/fax.dm b/code/modules/paperwork/fax.dm index b1696a27fca0..a4881fdfee38 100644 --- a/code/modules/paperwork/fax.dm +++ b/code/modules/paperwork/fax.dm @@ -18,10 +18,6 @@ var/seconds_electrified = MACHINE_NOT_ELECTRIFIED /// If true, the fax machine is jammed and needs cleaning var/jammed = FALSE - /// Determines the possibility of sending papers to the additional faxes. - var/access_additional_faxes = FALSE - /// Defines a list of accesses whose owners can open a connection with the additional faxes. - var/static/access_additional_faxes_required = list(ACCESS_HEADS, ACCESS_LAWYER, ACCESS_SECURITY) /// Necessary to hide syndicate faxes from the general list. Doesn't mean he's EMAGGED! var/frontier_network = FALSE /// True if the fax machine should be visible to other fax machines in general. @@ -53,23 +49,47 @@ /obj/item/holochip, /obj/item/card, ) + /// Internal radio for announcing over comms + var/obj/item/radio/radio + /// Radio channel to speak into + var/radio_channel + /// Cooldown for aformentioned radio, prevents radio spam + COOLDOWN_DECLARE(radio_cooldown) + + /// List with a fake-networks(not a fax actually), for request manager. + var/list/special_networks = list( + list(fax_name = "Nanotrasen Central Command", fax_id = "nanotrasen", color = "green", emag_needed = FALSE), + list(fax_name = "IRMG Mothership", fax_id = "inteq", color = "yellow", emag_needed = FALSE), + list(fax_name = "Solarian Confederation Frontier Affairs", fax_id = "solgov", color = "teal", emag_needed = FALSE), + list(fax_name = "Roumain Council of Huntsmen", fax_id = "roumain", color = "brown", emag_needed = FALSE), + list(fax_name = "Colonial League Leadership", fax_id = "minutemen", color = "blue", emag_needed = FALSE), + list(fax_name = "Syndicate Coalition Coordination Center", fax_id = "syndicate", color = "red", emag_needed = FALSE), + list(fax_name = "Frontiersmen Communications Quartermaster", fax_id = "frontiersmen", color = "black", emag_needed = TRUE) + ) + // should we make our message be important and be recieved in admin faxes + var/admin_fax_id /obj/machinery/fax/Initialize(mapload) . = ..() GLOB.fax_machines += src if(!fax_id) fax_id = SSnetworks.make_address() - if(fax_name == initial(fax_name)) + if(fax_name == initial(fax_name) && !admin_fax_id) fax_name = "[get_area_name(src)] Fax Machine" wires = new /datum/wires/fax(src) -/obj/machinery/fax/hacked - set_obj_flags = "EMAGGED" - allow_exotic_faxes = TRUE - access_additional_faxes = TRUE + radio = new(src) + radio.subspace_transmission = TRUE + radio.canhear_range = 0 + // Override in subtypes // no + radio.on = TRUE -/obj/machinery/fax/frontiersmen - frontier_network = TRUE +/obj/machinery/fax/ruin + visible_to_network = FALSE + +/obj/machinery/fax/ruin/Initialize(mapload) + . = ..() + fax_name = "Unregistered Fax Machine " + fax_id /obj/machinery/fax/Destroy() GLOB.fax_machines -= src @@ -113,6 +133,20 @@ obj_flags |= EMAGGED to_chat(user, "The screen of the [src] flickers!") +/** + * EMP Interaction + */ +/obj/machinery/fax/emp_act(severity) + . = ..() + if(. & EMP_PROTECT_SELF) + return + allow_exotic_faxes = !allow_exotic_faxes + visible_message("[src] [allow_exotic_faxes ? "starts beeping" : "stops beeping"] ominously[allow_exotic_faxes ? "..." : "."]") + +/** + * Unanchor/anchor + */ + /obj/machinery/fax/wrench_act(mob/living/user, obj/item/tool) . = ..() default_unfasten_wrench(user, tool) @@ -161,27 +195,6 @@ return return ..() -// Checks if the card has access to switch "legal" faxes of administrators. -/obj/machinery/fax/proc/access_additional_faxes_check(mob/living/user) - if(isAdminObserver(user)) - return TRUE - - var/obj/item/card/id/used_card = user.get_idcard(TRUE) - if(used_card) - // We check if it makes sense to check access at all. - if(!access_additional_faxes_required || !used_card.access) - return FALSE - - for(var/requested_access in access_additional_faxes_required) - if(requested_access in used_card.access) - return TRUE - return FALSE - -// Switches access to the "legal" administrator's fax list. Access to the "illegal" is switched by hacking. -/obj/machinery/fax/proc/access_additional_faxes_toggle() - access_additional_faxes = !access_additional_faxes - say("Bluespace channel communication [access_additional_faxes ? "opened" : "closed"].") - /** * Attempts to clean out a jammed machine using a passed item. * Returns true if successful. @@ -237,12 +250,6 @@ ui.open() ui.set_autoupdate(TRUE) -/obj/machinery/fax/ui_static_data(mob/user) - var/list/data = list() - data["additional_faxes_list"] = GLOB.additional_faxes_list - data["frontier_faxes_list"] = GLOB.frontier_faxes_list - return data - /obj/machinery/fax/ui_data(mob/user) var/list/data = list() //Record a list of all existing faxes. @@ -264,12 +271,11 @@ data["fax_id"] = fax_id data["fax_name"] = fax_name data["visible"] = visible_to_network - data["access_additional_faxes"] = access_additional_faxes - data["сan_switch_access"] = access_additional_faxes_check(user) // In this case, we don't care if the fax is hacked or in the syndicate's network. The main thing is to check the visibility of other faxes. data["frontier_network"] = (frontier_network || (obj_flags & EMAGGED)) data["has_paper"] = !!loaded_item_ref?.resolve() data["fax_history"] = fax_history + data["special_faxes"] = special_networks return data /obj/machinery/fax/ui_act(action, list/params) @@ -287,8 +293,6 @@ loaded_item_ref = null update_icon() return TRUE - if("access_additional_faxes_toggle") - access_additional_faxes_toggle() if("send") var/obj/item/loaded = loaded_item_ref?.resolve() if(!loaded) @@ -299,17 +303,31 @@ loaded_item_ref = null update_icon() return TRUE - if("send_to_additional_fax") - var/obj/item/loaded = loaded_item_ref?.resolve() - if(!loaded) + if("send_special") + var/obj/item/paper/fax_paper = loaded_item_ref?.resolve() + if(!fax_paper) + return + if(!istype(fax_paper)) + to_chat(usr, icon2html(src.icon, usr) + "ERROR: Failed to send fax.") return - if(istype(loaded, /obj/item/paper)) - if(send_to_additional_faxes(loaded, usr, params["name"], params["color"])) - loaded_item_ref = null - update_icon() - return TRUE - else - say("The destination fax blocks the reception of this item.") + + fax_paper.request_state = TRUE + fax_paper.loc = null + + INVOKE_ASYNC(src, PROC_REF(animate_object_travel), fax_paper, "fax_receive", find_overlay_state(fax_paper, "send")) + history_add("Send", params["name"]) + + GLOB.requests.fax_request(usr.client, "sent a fax message from [fax_name]/[fax_id] to [params["name"]]", fax_paper) + to_chat(GLOB.admins, "[icon2html(src.icon, GLOB.admins)]FAX REQUEST: [ADMIN_FULLMONTY(usr)]: sent a fax message from [fax_name]/[fax_id][ADMIN_FLW(src)] to [html_encode(params["name"])] [ADMIN_SHOW_PAPER(fax_paper)]") + log_fax(fax_paper, params["id"], params["name"]) + loaded_item_ref = null + + for(var/obj/machinery/fax/fax as anything in GLOB.fax_machines) + if(fax.admin_fax_id == params["id"]) + fax.receive(fax_paper, fax_name) + break + update_appearance() + if("history_clear") history_clear() return TRUE @@ -349,40 +367,12 @@ balloon_alert(usr, "destination port jammed") playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, -9) return FALSE - fax.receive(loaded, fax_name) - playback_sending(loaded, fax.fax_name) + fax.receive(loaded, fax_name, important = admin_fax_id) + history_add("Send", fax.fax_name) + INVOKE_ASYNC(src, PROC_REF(animate_object_travel), loaded, "fax_receive", find_overlay_state(loaded, "send")) return TRUE return FALSE -/** - * The procedure for sending a item to virtual admins fax machine. - * - * This procedure is similar to the send procedure except that it sends the item to - * a "virtual" fax to a special administrator list. - * Arguments: - * * loaded - The item to be sent. - * * sender - Reference to the sender's substance. - * * receiver_name - The recipient's fax name, which will be displayed in the administrator's list. - * * receiver_color - The color the receiver_name will be colored in. - */ -/obj/machinery/fax/proc/send_to_additional_faxes(obj/item/loaded, mob/sender, receiver_name, receiver_color) - GLOB.fax_manager.receive_request(sender, src, receiver_name, loaded, receiver_color) - playback_sending(loaded, receiver_name) - log_fax(loaded, "ADDITIONAL", receiver_name) - return TRUE - -/** - * The procedure for playing the animation. - * - * Procedure called to add to the history of sending messages, playing the sending animation. - * Arguments: - * * loaded - Sending item to determine the animation.. - * * receiver_name - Recipient's name to be added to the message history. - */ -/obj/machinery/fax/proc/playback_sending(obj/item/loaded, receiver_name) - history_add("Send", receiver_name) - INVOKE_ASYNC(src, PROC_REF(animate_object_travel), loaded, "fax_receive", find_overlay_state(loaded, "send")) - /** * Procedure for accepting papers from another fax machine. * @@ -391,7 +381,7 @@ * * loaded - The object to be printed. * * sender_name - The sender's name, which will be displayed in the message and recorded in the history of operations. */ -/obj/machinery/fax/proc/receive(obj/item/loaded, sender_name) +/obj/machinery/fax/proc/receive(obj/item/loaded, sender_name, important = FALSE) playsound(src, 'sound/items/poster_being_created.ogg', 20, FALSE) INVOKE_ASYNC(src, PROC_REF(animate_object_travel), loaded, "fax_receive", find_overlay_state(loaded, "receive")) say("Received correspondence from [sender_name].") @@ -504,3 +494,45 @@ do_sparks(5, TRUE, src) var/check_range = TRUE return electrocute_mob(user, get_area(src), src, 0.7, check_range) + +/obj/machinery/fax/frontiersmen + frontier_network = TRUE + visible_to_network = FALSE + +/obj/machinery/fax/admin + name = "Central Command Fax Machine" + fax_name = "Nanotrasen Central Command" + radio_channel = RADIO_CHANNEL_CENTCOM + visible_to_network = FALSE + admin_fax_id = "nanotrasen" + +/obj/machinery/fax/admin/solgov + name = "SolGov Frontier Affairs Fax Machine" + fax_name = "Solarian Confederation Frontier Affairs" + admin_fax_id = "solgov" + +/obj/machinery/fax/admin/syndicate + name = "Syndicate Coordination Fax Machine" + fax_name = "Syndicate Coordination Center" + admin_fax_id = "syndicate" + +/obj/machinery/fax/admin/inteq + name = "IRMG Fax Machine" + fax_name = "IRMG Mothership" + admin_fax_id = "inteq" + +/obj/machinery/fax/admin/minutemen + name = "CLIP HiComm Fax Machine" + fax_name = "Colonial League Leadership" + admin_fax_id = "minutemen" + +/obj/machinery/fax/admin/roumain + name = "Huntsman Council Fax Machine" + fax_name = "Saint-Roumain Council of Huntsmen" + admin_fax_id = "roumain" + +/obj/machinery/fax/admin/frontiersmen + name = "old fax machine" + fax_name = "Frontiersmen Communications Quartermaster" + admin_fax_id = "frontiersmen" + frontier_network = TRUE diff --git a/code/modules/paperwork/fax_manager.dm b/code/modules/paperwork/fax_manager.dm deleted file mode 100644 index 0107e440bec2..000000000000 --- a/code/modules/paperwork/fax_manager.dm +++ /dev/null @@ -1,154 +0,0 @@ -GLOBAL_DATUM_INIT(fax_manager, /datum/fax_manager, new) - -/** - * Fax Request Manager - * - * In its functionality it is similar to the usual Request Manager, but respectively for faxes. - * This manager allows you to send faxes on behalf of certain virtual faxes to all existing faxes, - * as well as receive faxes in their name from the players. - */ -/datum/fax_manager - /// A list that contains faxes from players and other related information. You can view the filling of its fields in the procedure receive_request. - var/list/requests = list() - -/datum/fax_manager/Destroy(force, ...) - QDEL_LIST(requests) - return ..() - -/datum/fax_manager/ui_interact(mob/user, datum/tgui/ui = null) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "FaxManager") - ui.open() - ui.set_autoupdate(TRUE) - -/datum/fax_manager/ui_state(mob/user) - return GLOB.admin_state - -/datum/fax_manager/ui_static_data(mob/user) - var/list/data = list() - //Record additional faxes on a separate list - data["additional_faxes"] = GLOB.additional_faxes_list + GLOB.frontier_faxes_list - return data - -/datum/fax_manager/ui_data(mob/user) - var/list/data = list() - //Record a list of all existing faxes. - for(var/obj/machinery/fax/fax as anything in GLOB.fax_machines) - var/list/fax_data = list() - fax_data["fax_name"] = fax.fax_name - fax_data["fax_id"] = fax.fax_id - fax_data["frontier_network"] = fax.frontier_network - data["faxes"] += list(fax_data) - for(var/list/requested in requests) - var/list/request = list() - request["id_message"] = requested["id_message"] - request["time"] = requested["time"] - var/mob/sender = requested["sender"] - request["sender_name"] = sender.name - request["sender_fax_id"] = requested["sender_fax_id"] - request["sender_fax_name"] = requested["sender_fax_name"] - request["receiver_fax_name"] = requested["receiver_fax_name"] - data["requests"] += list(request) - return data - -/datum/fax_manager/ui_act(action, list/params) - . = ..() - if(.) - return - var/datum/admins/admin_datum = GLOB.admin_datums[usr.ckey] - - switch(action) - if("send") - for(var/obj/machinery/fax/fax as anything in GLOB.fax_machines) - if(fax.fax_id == params["fax_id"]) - var/obj/item/paper/paper = new() - paper.add_raw_text(params["message"]) - paper.update_appearance() - fax.receive(paper, params["fax_name"]) - return TRUE - if("flw_fax") - for(var/obj/machinery/fax/fax as anything in GLOB.fax_machines) - if(fax.fax_id == params["fax_id"]) - admin_datum.admin_follow(fax) - return TRUE - if("read_message") - var/list/request = get_request(params["id_message"]) - var/obj/item/paper/request/paper = request["paper"] - paper.ui_interact(usr) - return TRUE - if("flw") - var/list/request = get_request(params["id_message"]) - admin_datum.admin_follow(request["sender"]) - return TRUE - if("pp") - var/list/request = get_request(params["id_message"]) - usr.client.holder.show_player_panel(request["sender"]) - return TRUE - if("vv") - var/list/request = get_request(params["id_message"]) - usr.client.debug_variables(request["sender"]) - return TRUE - if("sm") - var/list/request = get_request(params["id_message"]) - usr.client.cmd_admin_subtle_message(request["sender"]) - return TRUE - if("logs") - var/list/request = get_request(params["id_message"]) - if(!ismob(request["sender"])) - to_chat(usr, "This can only be used on instances of type /mob.") - return TRUE - show_individual_logging_panel(request["sender"], null, null) - return TRUE - if("smite") - var/list/request = get_request(params["id_message"]) - if(!check_rights(R_FUN)) - to_chat(usr, "Insufficient permissions to smite, you require +FUN") - return TRUE - var/mob/living/carbon/human/H = request["sender"] - if (!H || !istype(H)) - to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human") - return TRUE - usr.client.smite(H) - return TRUE - -/datum/fax_manager/proc/get_request(id_message) - for(var/list/request in requests) - if(request["id_message"] == id_message) - return request - -/datum/fax_manager/proc/receive_request(mob/sender, obj/machinery/fax/sender_fax, receiver_fax_name, obj/item/paper/paper, receiver_color) - var/list/request = list() - var/obj/item/paper/request/message = new() - request["id_message"] = requests.len - request["time"] = game_timestamp() - request["sender"] = sender - request["sender_fax_id"] = sender_fax.fax_id - request["sender_fax_name"] = sender_fax.fax_name - request["receiver_fax_name"] = receiver_fax_name - message.copy_properties(paper) - request["paper"] = message - requests += list(request) - var/msg = "\"[sanitize(receiver_fax_name)]\" fax received a message from \"[sanitize(sender_fax.fax_name)]\" fax SENT BY [ADMIN_FULLMONTY(sender)] (Open Fax Manager)" - for(var/client/C in GLOB.admins) - if(C.prefs.chat_toggles & CHAT_PRAYER) - to_chat(C, msg) - for(var/client/admin in GLOB.admins) - if((admin.prefs.chat_toggles & CHAT_PRAYER) && (admin.prefs.toggles & SOUND_PRAYERS)) - SEND_SOUND(admin, sound('sound/items/poster_being_created.ogg')) - -// A special piece of paper for the administrator that will open the interface no matter what. -/obj/item/paper/request/ui_status() - return UI_INTERACTIVE - -// I'm sure there's a better way to transfer it, I just couldn't find it -/obj/item/paper/request/proc/copy_properties(obj/item/paper/paper) - raw_text_inputs = paper.raw_text_inputs - raw_stamp_data = paper.raw_stamp_data - raw_field_input_data = paper.raw_field_input_data - show_written_words = paper.show_written_words - stamp_cache = paper.stamp_cache - contact_poison = paper.contact_poison - contact_poison_volume = paper.contact_poison_volume - default_raw_text = paper.default_raw_text - input_field_count = paper.input_field_count diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 4080f68c5d74..e30a2bdd9737 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -60,6 +60,9 @@ /// state checking on if it should be shown to a viewer. var/datum/weakref/camera_holder + ///If TRUE, staff can read paper everywhere, but usually from requests panel. + var/request_state = FALSE + /// The (text for the) stamps on the paper. var/list/stamps /// Positioning for the stamp in tgui var/list/stamped /// Overlay info @@ -161,12 +164,13 @@ * * bold - Whether this text should be rendered completely bold. */ -/obj/item/paper/proc/add_raw_text(text, font, color, bold) +/obj/item/paper/proc/add_raw_text(text, font, color, bold, advanced_html) var/new_input_datum = new /datum/paper_input( text, font, color, bold, + advanced_html, ) input_field_count += get_input_field_count(text) @@ -320,7 +324,7 @@ // Are we on fire? Hard to read if so if(resistance_flags & ON_FIRE) return UI_CLOSE - if(camera_holder && can_show_to_mob_through_camera(user)) + if(camera_holder && can_show_to_mob_through_camera(user) || request_state) return UI_UPDATE if(!in_range(user, src) && !isobserver(user)) return UI_CLOSE @@ -373,7 +377,7 @@ return // Handle writing items. - var/writing_stats = attacking_item.get_writing_implement_details() + var/writing_stats = istype(attacking_item) ? attacking_item.get_writing_implement_details() : null if(!writing_stats) ui_interact(user) @@ -576,7 +580,7 @@ // Safe to assume there are writing implement details as user.can_write(...) fails with an invalid writing implement. var/writing_implement_data = holding.get_writing_implement_details() - add_raw_text(paper_input, writing_implement_data["font"], writing_implement_data["color"], writing_implement_data["use_bold"]) + add_raw_text(paper_input, writing_implement_data["font"], writing_implement_data["color"], writing_implement_data["use_bold"], check_rights_for(user?.client, R_FUN)) log_paper("[key_name(user)] wrote to [name]: \"[paper_input]\"") to_chat(user, "You have added to your paper masterpiece!"); @@ -663,15 +667,18 @@ var/colour = "" /// Whether to render the font bold or not. var/bold = FALSE + /// Whether the creator of this input field has the R_FUN permission, thus allowing less sanitization + var/advanced_html = FALSE -/datum/paper_input/New(_raw_text, _font, _colour, _bold) +/datum/paper_input/New(_raw_text, _font, _colour, _bold, _advanced_html) raw_text = _raw_text font = _font colour = _colour bold = _bold + advanced_html = _advanced_html /datum/paper_input/proc/make_copy() - return new /datum/paper_input(raw_text, font, colour, bold); + return new /datum/paper_input(raw_text, font, colour, bold, advanced_html); /datum/paper_input/proc/to_list() return list( @@ -679,6 +686,7 @@ font = font, color = colour, bold = bold, + advanced_html = advanced_html, ) /// A single instance of a saved stamp on paper. diff --git a/code/modules/requests/request.dm b/code/modules/requests/request.dm new file mode 100644 index 000000000000..0ac37f63187e --- /dev/null +++ b/code/modules/requests/request.dm @@ -0,0 +1,37 @@ +/** + * # Request + * + * A representation of an in-game request, such as a prayer. + */ +/datum/request + /// Unique ID of the request + var/id + /// Atomic ID for increment unique request IDs + var/static/atomic_id = 0 + /// The type of request + var/req_type + /// The owner of the request, the player who created it + var/client/owner + /// The ckey of the owner, used for re-binding variables on login + var/owner_ckey + /// The name of the owner, in format /, assigned at time of request creation + var/owner_name + /// The message associated with the request + var/message + /// Just any information, which you can to send with request. For example paper datum. + var/additional_information + /// When the request was created + var/timestamp + +/datum/request/New(client/requestee, type, request, additional_info) + if (!requestee) + qdel(src) + return + id = ++atomic_id + owner = requestee + owner_ckey = owner.ckey + req_type = type + message = request + timestamp = world.time + additional_information = additional_info + owner_name = key_name(requestee, FALSE) diff --git a/code/modules/requests/requests_manager.dm b/code/modules/requests/requests_manager.dm new file mode 100644 index 000000000000..e33da846d4de --- /dev/null +++ b/code/modules/requests/requests_manager.dm @@ -0,0 +1,249 @@ +/// Requests from prayers +#define REQUEST_PRAYER "request_prayer" +/// Requests for Centcom +#define REQUEST_CENTCOM "request_centcom" +/// Requests for the Syndicate +#define REQUEST_SYNDICATE "request_syndicate" +/// Requests for the nuke code +#define REQUEST_NUKE "request_nuke" +/// Requests somebody from fax +#define REQUEST_FAX "request_fax" + +GLOBAL_DATUM_INIT(requests, /datum/request_manager, new) + +/** + * # Request Manager + * + * Handles all player requests (prayers, centcom requests, syndicate requests) + * that occur in the duration of a round. + */ +/datum/request_manager + /// Associative list of ckey -> list of requests + var/list/requests = list() + /// List where requests can be accessed by ID + var/list/requests_by_id = list() + +/datum/request_manager/Destroy(force, ...) + QDEL_LIST(requests) + return ..() + +/** + * Used in the new client pipeline to catch when clients are reconnecting and need to have their + * reference re-assigned to the 'owner' variable of any requests + * + * Arguments: + * * C - The client who is logging in + */ +/datum/request_manager/proc/client_login(client/C) + if (!requests[C.ckey]) + return + for (var/datum/request/request as anything in requests[C.ckey]) + request.owner = C + +/** + * Used in the destroy client pipeline to catch when clients are disconnecting and need to have their + * reference nulled on the 'owner' variable of any requests + * + * Arguments: + * * C - The client who is logging out + */ +/datum/request_manager/proc/client_logout(client/C) + if (!requests[C.ckey]) + return + for (var/datum/request/request as anything in requests[C.ckey]) + request.owner = null + +/** + * Creates a request for a prayer, and notifies admins who have the sound notifications enabled when appropriate + * + * Arguments: + * * C - The client who is praying + * * message - The prayer + * * is_chaplain - Boolean operator describing if the prayer is from a chaplain + */ +/datum/request_manager/proc/pray(client/C, message, is_chaplain) + request_for_client(C, REQUEST_PRAYER, message) + for(var/client/admin in GLOB.admins) + if(is_chaplain && admin.prefs.chat_toggles & CHAT_PRAYER && admin.prefs.toggles & SOUND_PRAYERS) + SEND_SOUND(admin, sound('sound/effects/pray.ogg')) + +/** + * Creates a request for a Centcom message + * + * Arguments: + * * C - The client who is sending the request + * * message - The message + */ +/datum/request_manager/proc/message_centcom(client/C, message) + request_for_client(C, REQUEST_CENTCOM, message) + +/** + * Creates a request for a Syndicate message + * + * Arguments: + * * C - The client who is sending the request + * * message - The message + */ +/datum/request_manager/proc/message_syndicate(client/C, message) + request_for_client(C, REQUEST_SYNDICATE, message) + +/** + * Creates a request for the nuclear self destruct codes + * + * Arguments: + * * C - The client who is sending the request + * * message - The message + */ +/datum/request_manager/proc/nuke_request(client/C, message) + request_for_client(C, REQUEST_NUKE, message) + +/** + * Creates a request for fax answer + * + * Arguments: + * * requester - The client who is sending the request + * * message - Paper with text.. some stamps.. and another things. + */ +/datum/request_manager/proc/fax_request(client/requester, message, additional_info) + request_for_client(requester, REQUEST_FAX, message, additional_info) + +/** + * Creates a request and registers the request with all necessary internal tracking lists + * + * Arguments: + * * C - The client who is sending the request + * * type - The type of request, see defines + * * message - The message + */ +/datum/request_manager/proc/request_for_client(client/C, type, message, additional_info) + var/datum/request/request = new(C, type, message, additional_info) + if (!requests[C.ckey]) + requests[C.ckey] = list() + requests[C.ckey] += request + requests_by_id.len++ + requests_by_id[request.id] = request + +/datum/request_manager/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) + if (!ui) + ui = new(user, src, "RequestManager") + ui.open() + +/datum/request_manager/ui_state(mob/user) + return GLOB.admin_state + +/datum/request_manager/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + if (..()) + return + + // Only admins should be sending actions + if (!check_rights(R_ADMIN)) + to_chat(usr, "You do not have permission to do this, you require +ADMIN") + return + + // Get the request this relates to + var/id = params["id"] != null ? text2num(params["id"]) : null + if (!id) + to_chat(usr, "Failed to find a request ID in your action, please report this") + CRASH("Received an action without a request ID, this shouldn't happen!") + var/datum/request/request = !id ? null : requests_by_id[id] + var/datum/admins/admin_datum = GLOB.admin_datums[usr.ckey] + + switch(action) + if ("pp") + var/mob/M = request.owner?.mob + usr.client.holder.show_player_panel(M) + return TRUE + if ("vv") + var/mob/M = request.owner?.mob + usr.client.debug_variables(M) + return TRUE + if ("sm") + var/mob/M = request.owner?.mob + usr.client.cmd_admin_subtle_message(M) + return TRUE + if ("flw") + var/mob/M = request.owner?.mob + admin_datum.admin_follow(M) + return TRUE + if ("tp") + if(!SSticker.HasRoundStarted()) + to_chat(usr,"The game hasn't started yet!") + return TRUE + var/mob/M = request.owner?.mob + if(!ismob(M)) + var/datum/mind/D = M + if(!istype(D)) + to_chat(usr, "This can only be used on instances of type /mob and /mind") + return TRUE + else + D.traitor_panel() + return TRUE + else + usr.client.holder.show_traitor_panel(M) + return TRUE + if ("logs") + var/mob/M = request.owner?.mob + if(!ismob(M)) + to_chat(usr, "This can only be used on instances of type /mob.") + return TRUE + show_individual_logging_panel(M, null, null) + return TRUE + if ("smite") + if(!check_rights(R_FUN)) + to_chat(usr, "Insufficient permissions to smite, you require +FUN") + return TRUE + var/mob/living/carbon/human/H = request.owner?.mob + if (!H || !istype(H)) + to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human") + return TRUE + usr.client.smite(H) + return TRUE + if ("rply") + if (request.req_type == REQUEST_PRAYER) + to_chat(usr, "Cannot reply to a prayer") + return TRUE + var/mob/M = request.owner?.mob + usr.client.admin_headset_message(M, request.req_type == REQUEST_SYNDICATE ? RADIO_CHANNEL_SYNDICATE : RADIO_CHANNEL_CENTCOM) + return TRUE + if ("setcode") + if (request.req_type != REQUEST_NUKE) + to_chat(usr, "You cannot set the nuke code for a non-nuke-code-request request!") + return TRUE + var/code = random_nukecode() + for(var/obj/machinery/nuclearbomb/selfdestruct/SD in GLOB.nuke_list) + SD.r_code = code + message_admins("[key_name_admin(usr)] has set the self-destruct code to \"[code]\".") + return TRUE + if ("show") + if(request.req_type != REQUEST_FAX) + to_chat(usr, "Request doesn't have a paper to read.") + return TRUE + var/obj/item/paper/request_message = request.additional_information + request_message.ui_interact(usr) + return TRUE + +/datum/request_manager/ui_data(mob/user) + . = list( + "requests" = list() + ) + for (var/ckey in requests) + for (var/datum/request/request as anything in requests[ckey]) + var/list/data = list( + "id" = request.id, + "req_type" = request.req_type, + "owner" = request.owner ? "[REF(request.owner)]" : null, + "owner_ckey" = request.owner_ckey, + "owner_name" = request.owner_name, + "message" = request.message, + "additional_info" = request.additional_information, + "timestamp" = request.timestamp, + "timestamp_str" = station_time_timestamp(wtime = request.timestamp) + ) + .["requests"] += list(data) + +#undef REQUEST_PRAYER +#undef REQUEST_CENTCOM +#undef REQUEST_SYNDICATE +#undef REQUEST_NUKE +#undef REQUEST_FAX diff --git a/shiptest.dme b/shiptest.dme index 23e855ca6200..4f42a582878f 100644 --- a/shiptest.dme +++ b/shiptest.dme @@ -222,7 +222,6 @@ #include "code\_globalvars\lists\achievements.dm" #include "code\_globalvars\lists\admin.dm" #include "code\_globalvars\lists\client.dm" -#include "code\_globalvars\lists\faxes.dm" #include "code\_globalvars\lists\flavor_misc.dm" #include "code\_globalvars\lists\jobs.dm" #include "code\_globalvars\lists\keybindings.dm" @@ -1466,6 +1465,7 @@ #include "code\game\turfs\open\space\space.dm" #include "code\game\turfs\open\space\transit.dm" #include "code\modules\admin\admin.dm" +#include "code\modules\admin\admin_fax_panel.dm" #include "code\modules\admin\admin_follow.dm" #include "code\modules\admin\admin_investigate.dm" #include "code\modules\admin\admin_ranks.dm" @@ -1510,7 +1510,6 @@ #include "code\modules\admin\verbs\deadsay.dm" #include "code\modules\admin\verbs\debug.dm" #include "code\modules\admin\verbs\diagnostics.dm" -#include "code\modules\admin\verbs\fax_manager.dm" #include "code\modules\admin\verbs\fix_air.dm" #include "code\modules\admin\verbs\fps.dm" #include "code\modules\admin\verbs\getlogs.dm" @@ -1531,6 +1530,7 @@ #include "code\modules\admin\verbs\randomverbs.dm" #include "code\modules\admin\verbs\reestablish_db_connection.dm" #include "code\modules\admin\verbs\rejuvenate.dm" +#include "code\modules\admin\verbs\requests.dm" #include "code\modules\admin\verbs\secrets.dm" #include "code\modules\admin\verbs\selectequipment.dm" #include "code\modules\admin\verbs\shuttlepanel.dm" @@ -2863,7 +2863,6 @@ #include "code\modules\paperwork\clipboard.dm" #include "code\modules\paperwork\contract.dm" #include "code\modules\paperwork\fax.dm" -#include "code\modules\paperwork\fax_manager.dm" #include "code\modules\paperwork\filingcabinet.dm" #include "code\modules\paperwork\folders.dm" #include "code\modules\paperwork\handlabeler.dm" @@ -3121,6 +3120,8 @@ #include "code\modules\religion\religion_sects.dm" #include "code\modules\religion\religion_structures.dm" #include "code\modules\religion\rites.dm" +#include "code\modules\requests\request.dm" +#include "code\modules\requests\requests_manager.dm" #include "code\modules\research\bepis.dm" #include "code\modules\research\designs.dm" #include "code\modules\research\destructive_analyzer.dm" diff --git a/tgui/packages/tgui/interfaces/AdminFax.js b/tgui/packages/tgui/interfaces/AdminFax.js new file mode 100644 index 000000000000..8245bc4a9ad3 --- /dev/null +++ b/tgui/packages/tgui/interfaces/AdminFax.js @@ -0,0 +1,263 @@ +import { useBackend, useLocalState } from '../backend'; +import { + Section, + Box, + Dropdown, + Button, + Input, + TextArea, + Divider, + NumberInput, + Tooltip, + Knob, +} from '../components'; +import { Window } from '../layouts'; + +export const AdminFax = (props, context) => { + return ( + + + + + + ); +}; + +export const FaxMainPanel = (props, context) => { + const { act, data } = useBackend(context); + + const [fax, setFax] = useLocalState(context, 'fax', ''); + const [saved, setSaved] = useLocalState(context, 'saved', false); + const [paperName, setPaperName] = useLocalState(context, 'paperName', ''); + const [fromWho, setFromWho] = useLocalState(context, 'fromWho', ''); + const [rawText, setRawText] = useLocalState(context, 'rawText', ''); + const [stamp, setStamp] = useLocalState(context, 'stampType', ''); + const [stampCoordX, setStampCoordX] = useLocalState( + context, + 'stampCoordX', + 0 + ); + const [stampCoordY, setStampCoordY] = useLocalState( + context, + 'stampCoordY', + 0 + ); + const [stampAngle, setStampAngle] = useLocalState(context, 'stampAngle', 0); + if (stamp && data.stamps[0] !== 'None') { + data.stamps.unshift('None'); + } + return ( + <> +
+ + + } + > + + setFax(value)} + /> + +
+
+ act('preview', { + faxName: fax, + }) + } + > + Preview + + } + > + + setPaperName(v)} + /> + + + + + + + setFromWho(v)} + /> + + + + + + +