[MDB Ignore] Combines Cargobus consoles with Dept. Order Consoles, freeing all departments of 1 whole tile of space (#82210)

## About The Pull Request

- Departmental orders are now an NTOS app
   - To download, they require `ACCESS_COMMAND`.
   - To use, they require one access from the department.
- This means you cannot order things from not-your-department unless you
have an ID.
- When newly downloading the app, it will prompt a head of staff to
insert an ID, to determine which department to be linked to.

- Changes chat room overlay from the kind that AI uploads use to a new
icon.

- Minor refactors to department order in general. 


![image](https://github.com/tgstation/tgstation/assets/51863163/605c2499-e5e9-4f91-aa2a-aa8af8b05a9f)


![image-1](https://github.com/tgstation/tgstation/assets/51863163/089d3fe1-787c-4f5a-bc3d-edb9611dfbb2)

## Why It's Good For The Game

These two computers are surprising waste spacers for two things which
are tied together.
So why not combine them?

The lesser used cargobus chat is still there, and departmental orders
are front and center.

This gives mappers a ton more leeway when mapping departments out and is
overall less clutter.

## Changelog

🆑 Melbert
qol: Cargobus chat console and Departmental Order console are now
combined into one.
qol: Mod PCs active on the "chat client" apps no longer look like AI
uploads (and now have their own sprite)
refactor: Departmental order consoles were refactored a bit, report any
oddities.
/🆑
This commit is contained in:
MrMelbert
2024-03-27 11:00:47 -05:00
committed by GitHub
parent 5b81d5bc3c
commit a73b77b3bb
19 changed files with 12522 additions and 12497 deletions
+214 -214
View File
@@ -2392,16 +2392,6 @@
/obj/machinery/light/small/directional/west,
/turf/open/floor/grass,
/area/station/service/chapel)
"aWC" = (
/obj/machinery/computer/department_orders/engineering{
dir = 8
},
/obj/effect/turf_decal/stripes/line{
dir = 8
},
/obj/machinery/light/small/directional/east,
/turf/open/floor/plating,
/area/station/engineering/break_room)
"aXI" = (
/turf/closed/wall/r_wall,
/area/station/science/lobby)
@@ -3054,6 +3044,11 @@
/obj/structure/closet/crate/miningcar,
/turf/open/floor/iron,
/area/station/hallway/secondary/dock)
"blA" = (
/obj/effect/turf_decal/tile/neutral/fourcorners,
/obj/structure/table/reinforced,
/turf/open/floor/iron/dark,
/area/station/medical/medbay/central)
"blG" = (
/obj/effect/turf_decal/box/white{
color = "#52B4E9"
@@ -5050,6 +5045,22 @@
/obj/effect/mapping_helpers/broken_floor,
/turf/open/floor/plating,
/area/station/maintenance/starboard/central)
"bWw" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/effect/turf_decal/tile/dark_red/half/contrasted{
dir = 8
},
/obj/machinery/computer/security/telescreen/interrogation{
dir = 8;
name = "isolation room monitor";
network = list("isolation");
pixel_x = 30
},
/obj/machinery/photobooth/security,
/turf/open/floor/iron,
/area/station/security/execution/transfer)
"bWJ" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -5426,11 +5437,6 @@
/obj/effect/mapping_helpers/airlock/access/any/service/maintenance,
/turf/open/floor/plating,
/area/station/maintenance/central/greater)
"ceK" = (
/obj/effect/turf_decal/tile/neutral/fourcorners,
/obj/structure/bed/medical/emergency,
/turf/open/floor/iron/dark,
/area/station/medical/medbay/central)
"ceZ" = (
/obj/structure/cable,
/turf/open/floor/plating,
@@ -12932,15 +12938,6 @@
/obj/machinery/firealarm/directional/east,
/turf/open/floor/circuit/red,
/area/station/ai_monitored/turret_protected/ai)
"eNV" = (
/obj/machinery/modular_computer/preset/cargochat/engineering{
dir = 8
},
/obj/effect/turf_decal/stripes/line{
dir = 8
},
/turf/open/floor/plating,
/area/station/engineering/break_room)
"eOo" = (
/obj/machinery/atmospherics/pipe/smart/simple/supply/visible{
dir = 9
@@ -16583,15 +16580,6 @@
/obj/effect/spawner/random/structure/girder,
/turf/open/floor/plating,
/area/station/ai_monitored/turret_protected/aisat/maint)
"gcf" = (
/obj/effect/turf_decal/tile/neutral/fourcorners,
/obj/machinery/computer/department_orders/medical{
dir = 1
},
/obj/item/radio/intercom/directional/south,
/obj/machinery/camera/autoname/directional/south,
/turf/open/floor/iron/dark,
/area/station/medical/medbay/central)
"gcm" = (
/obj/effect/spawner/random/structure/crate,
/turf/open/floor/plating/rust,
@@ -21100,28 +21088,6 @@
},
/turf/open/floor/iron,
/area/station/hallway/primary/fore)
"hBv" = (
/obj/structure/disposalpipe/segment{
dir = 4
},
/obj/structure/table/reinforced,
/obj/machinery/door/poddoor/preopen{
id = "hop";
name = "Privacy Shutters"
},
/obj/machinery/door/firedoor,
/obj/machinery/door/window/brigdoor/right/directional/east{
name = "Head of Personnel's Desk";
req_access = list("hop")
},
/obj/machinery/door/window/left/directional/west{
name = "Reception Window"
},
/obj/structure/desk_bell{
pixel_x = 7
},
/turf/open/floor/iron/textured_large,
/area/station/command/heads_quarters/hop)
"hBA" = (
/obj/structure/cable,
/obj/effect/spawner/structure/window,
@@ -21427,6 +21393,14 @@
},
/turf/open/floor/engine,
/area/station/maintenance/disposal/incinerator)
"hIS" = (
/obj/structure/disposalpipe/segment{
dir = 4
},
/obj/effect/decal/cleanable/dirt,
/obj/effect/turf_decal/delivery,
/turf/open/floor/iron/half,
/area/station/hallway/primary/central/fore)
"hJd" = (
/obj/structure/cable,
/obj/effect/decal/cleanable/dirt,
@@ -22370,12 +22344,6 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron/dark,
/area/station/medical/medbay/aft)
"ibq" = (
/obj/machinery/bluespace_vendor/directional/north,
/obj/machinery/light/small/directional/west,
/obj/machinery/photobooth,
/turf/open/floor/iron/textured_large,
/area/station/hallway/primary/central/fore)
"ibv" = (
/obj/item/kirbyplants/random,
/turf/open/floor/iron,
@@ -22724,6 +22692,12 @@
},
/turf/open/floor/iron,
/area/station/hallway/secondary/dock)
"iid" = (
/obj/machinery/bluespace_vendor/directional/north,
/obj/machinery/light/small/directional/west,
/obj/machinery/photobooth,
/turf/open/floor/iron/textured_large,
/area/station/hallway/primary/central/fore)
"iio" = (
/obj/effect/turf_decal/tile/neutral/fourcorners,
/obj/effect/turf_decal/stripes/line{
@@ -25223,19 +25197,6 @@
/obj/structure/alien/weeds,
/turf/open/floor/plating,
/area/station/maintenance/starboard/greater)
"jco" = (
/obj/effect/turf_decal/stripes/corner{
dir = 8
},
/obj/machinery/rnd/production/circuit_imprinter,
/obj/machinery/camera{
c_tag = "Engineering - Foyer - Starboard";
dir = 9
},
/obj/effect/decal/cleanable/cobweb/cobweb2,
/obj/machinery/airalarm/directional/east,
/turf/open/floor/plating,
/area/station/engineering/break_room)
"jct" = (
/obj/structure/cable,
/obj/machinery/door/airlock/external{
@@ -26247,38 +26208,6 @@
/obj/machinery/light/cold/directional/north,
/turf/open/floor/iron/white/small,
/area/station/medical/storage)
"jxV" = (
/obj/effect/turf_decal/tile/blue,
/obj/machinery/modular_computer/preset/id,
/obj/machinery/button/ticket_machine{
pixel_x = 9;
pixel_y = 23
},
/obj/machinery/button/door/directional/south{
id = "hop";
name = "Privacy Shutters Control";
pixel_x = -2;
pixel_y = 23;
req_access = list("hop")
},
/obj/machinery/button/door/directional/south{
id = "hopqueue";
name = "Queue Shutters Control";
pixel_x = -13;
pixel_y = 23;
req_access = list("hop")
},
/obj/machinery/button/flasher{
id = "hopflash";
pixel_x = -24;
pixel_y = 6
},
/obj/machinery/button/photobooth{
pixel_y = -6;
pixel_x = -24
},
/turf/open/floor/iron/dark/textured_corner,
/area/station/command/heads_quarters/hop)
"jxZ" = (
/obj/effect/turf_decal/siding/blue{
dir = 6
@@ -26479,17 +26408,6 @@
},
/turf/open/floor/iron/dark/small,
/area/station/ai_monitored/security/armory)
"jBx" = (
/obj/structure/disposalpipe/segment{
dir = 4
},
/obj/effect/turf_decal/siding/white{
dir = 8
},
/obj/structure/tank_holder/extinguisher,
/obj/machinery/camera/autoname/directional/north,
/turf/open/floor/iron/dark,
/area/station/medical/medbay/central)
"jBD" = (
/obj/structure/table/wood,
/obj/effect/mapping_helpers/broken_floor,
@@ -30761,6 +30679,19 @@
},
/turf/open/floor/iron,
/area/station/security/brig/entrance)
"lbV" = (
/obj/structure/table,
/obj/effect/turf_decal/bot,
/obj/machinery/light/small/directional/north,
/obj/item/pen{
pixel_x = 11
},
/obj/item/paper_bin{
pixel_x = -7;
pixel_y = 6
},
/turf/open/floor/iron/kitchen/small,
/area/station/hallway/secondary/service)
"lbW" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment{
@@ -32601,6 +32532,16 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron,
/area/station/cargo/storage)
"lGc" = (
/obj/structure/disposalpipe/segment{
dir = 4
},
/obj/effect/turf_decal/siding/white{
dir = 8
},
/obj/machinery/camera/autoname/directional/north,
/turf/open/floor/iron/dark,
/area/station/medical/medbay/central)
"lGe" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -36398,6 +36339,11 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron/dark/small,
/area/station/ai_monitored/security/armory)
"mVx" = (
/obj/effect/turf_decal/tile/neutral/fourcorners,
/obj/structure/tank_holder/extinguisher,
/turf/open/floor/iron/dark,
/area/station/medical/medbay/central)
"mVC" = (
/obj/machinery/door/airlock/external{
name = "Departure Lounge Airlock"
@@ -39333,14 +39279,6 @@
/obj/machinery/light/small/directional/south,
/turf/open/floor/iron/dark,
/area/station/cargo/office)
"nZg" = (
/obj/structure/disposalpipe/segment{
dir = 4
},
/obj/effect/decal/cleanable/dirt,
/obj/effect/turf_decal/delivery,
/turf/open/floor/iron/half,
/area/station/hallway/primary/central/fore)
"nZh" = (
/obj/structure/table,
/obj/item/stock_parts/scanning_module{
@@ -42849,6 +42787,11 @@
/obj/machinery/computer/security/telescreen/entertainment/directional/west,
/turf/open/floor/iron,
/area/station/hallway/primary/aft)
"pnh" = (
/obj/structure/disposalpipe/segment,
/obj/effect/mapping_helpers/broken_floor,
/turf/open/floor/iron/kitchen/small,
/area/station/hallway/secondary/service)
"pnn" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment{
@@ -42868,6 +42811,22 @@
/obj/machinery/firealarm/directional/south,
/turf/open/floor/plating,
/area/station/maintenance/starboard/greater)
"pnG" = (
/obj/effect/turf_decal/tile/neutral/fourcorners,
/obj/structure/window/spawner/directional/west,
/obj/machinery/camera/directional/south,
/obj/effect/decal/cleanable/dirt,
/obj/structure/table/reinforced,
/obj/item/paper_bin{
pixel_x = 5;
pixel_y = 8
},
/obj/item/pen{
pixel_x = 6;
pixel_y = 8
},
/turf/open/floor/iron/dark,
/area/station/medical/medbay/central)
"pnM" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
/turf/open/floor/iron/dark,
@@ -43201,6 +43160,38 @@
},
/turf/open/floor/iron/white/textured_large,
/area/station/medical/medbay/lobby)
"psO" = (
/obj/effect/turf_decal/tile/blue,
/obj/machinery/modular_computer/preset/id,
/obj/machinery/button/ticket_machine{
pixel_x = 9;
pixel_y = 23
},
/obj/machinery/button/door/directional/south{
id = "hop";
name = "Privacy Shutters Control";
pixel_x = -2;
pixel_y = 23;
req_access = list("hop")
},
/obj/machinery/button/door/directional/south{
id = "hopqueue";
name = "Queue Shutters Control";
pixel_x = -13;
pixel_y = 23;
req_access = list("hop")
},
/obj/machinery/button/flasher{
id = "hopflash";
pixel_x = -24;
pixel_y = 6
},
/obj/machinery/button/photobooth{
pixel_y = -6;
pixel_x = -24
},
/turf/open/floor/iron/dark/textured_corner,
/area/station/command/heads_quarters/hop)
"psP" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -43383,6 +43374,18 @@
dir = 4
},
/area/station/science/research)
"pvP" = (
/obj/effect/turf_decal/tile/dark_red{
dir = 1
},
/obj/effect/turf_decal/siding/wideplating/dark/corner{
dir = 8
},
/obj/machinery/modular_computer/preset/cargochat/security{
dir = 1
},
/turf/open/floor/iron,
/area/station/security/brig/entrance)
"pvR" = (
/obj/structure/table/wood,
/obj/machinery/light_switch/directional/south,
@@ -44140,6 +44143,28 @@
"pHJ" = (
/turf/open/floor/plating/rust,
/area/station/maintenance/starboard/greater)
"pHL" = (
/obj/structure/disposalpipe/segment{
dir = 4
},
/obj/structure/table/reinforced,
/obj/machinery/door/poddoor/preopen{
id = "hop";
name = "Privacy Shutters"
},
/obj/machinery/door/firedoor,
/obj/machinery/door/window/brigdoor/right/directional/east{
name = "Head of Personnel's Desk";
req_access = list("hop")
},
/obj/machinery/door/window/left/directional/west{
name = "Reception Window"
},
/obj/structure/desk_bell{
pixel_x = 7
},
/turf/open/floor/iron/textured_large,
/area/station/command/heads_quarters/hop)
"pHM" = (
/obj/effect/turf_decal/trimline/white/warning{
dir = 4
@@ -51916,12 +51941,6 @@
/obj/machinery/light_switch/directional/north,
/turf/open/floor/iron/dark,
/area/station/science/genetics)
"sbt" = (
/obj/structure/table,
/obj/effect/turf_decal/bot,
/obj/machinery/light/small/directional/north,
/turf/open/floor/iron/kitchen/small,
/area/station/hallway/secondary/service)
"sbx" = (
/obj/structure/chair/sofa/bench/right{
dir = 8
@@ -53407,14 +53426,6 @@
/obj/structure/flora/bush/flowers_yw/style_random,
/turf/open/misc/sandy_dirt,
/area/station/medical/medbay/lobby)
"syE" = (
/obj/effect/turf_decal/tile/neutral/fourcorners,
/obj/structure/window/spawner/directional/west,
/obj/machinery/vending/medical,
/obj/machinery/camera/directional/south,
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron/dark,
/area/station/medical/medbay/central)
"syG" = (
/obj/effect/spawner/xmastree,
/turf/open/floor/grass,
@@ -53666,15 +53677,6 @@
},
/turf/open/floor/iron/dark,
/area/station/science/ordnance/testlab)
"sDD" = (
/obj/structure/disposalpipe/segment,
/obj/effect/mapping_helpers/broken_floor,
/obj/machinery/modular_computer/preset/cargochat/service{
dir = 4
},
/obj/effect/turf_decal/delivery,
/turf/open/floor/iron/kitchen/small,
/area/station/hallway/secondary/service)
"sDT" = (
/obj/machinery/firealarm/directional/north,
/obj/structure/cable,
@@ -56097,13 +56099,6 @@
"tuZ" = (
/turf/closed/wall,
/area/station/security/brig/entrance)
"tvg" = (
/obj/effect/turf_decal/tile/neutral/fourcorners,
/obj/machinery/modular_computer/preset/cargochat/medical{
dir = 1
},
/turf/open/floor/iron/dark,
/area/station/medical/medbay/central)
"tvM" = (
/obj/structure/flora/bush/fullgrass/style_random,
/obj/structure/flora/bush/flowers_br/style_random,
@@ -56813,6 +56808,13 @@
},
/turf/open/floor/iron,
/area/station/hallway/primary/port)
"tGm" = (
/obj/effect/turf_decal/stripes/line{
dir = 8
},
/obj/machinery/rnd/production/circuit_imprinter,
/turf/open/floor/plating,
/area/station/engineering/break_room)
"tGp" = (
/obj/machinery/light/small/directional/south,
/turf/open/floor/engine,
@@ -61463,12 +61465,6 @@
/obj/effect/spawner/structure/window/reinforced/tinted,
/turf/open/floor/plating,
/area/station/science/server)
"viC" = (
/obj/machinery/computer/department_orders/science{
dir = 1
},
/turf/open/floor/iron/white,
/area/station/science/research)
"viK" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -64235,6 +64231,16 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/plating,
/area/station/maintenance/central/greater)
"vYf" = (
/obj/effect/turf_decal/stripes/line{
dir = 8
},
/obj/machinery/light/small/directional/east,
/obj/machinery/modular_computer/preset/cargochat/engineering{
dir = 8
},
/turf/open/floor/plating,
/area/station/engineering/break_room)
"vYg" = (
/obj/effect/turf_decal/stripes/corner{
dir = 1
@@ -64971,13 +64977,6 @@
},
/turf/open/floor/iron/cafeteria,
/area/station/service/cafeteria)
"wkl" = (
/obj/effect/mapping_helpers/broken_floor,
/obj/machinery/computer/department_orders/service,
/obj/effect/turf_decal/delivery,
/obj/structure/sign/poster/official/random/directional/north,
/turf/open/floor/iron/kitchen/small,
/area/station/hallway/secondary/service)
"wkm" = (
/obj/effect/turf_decal/tile/blue,
/obj/effect/decal/cleanable/dirt,
@@ -65028,6 +65027,13 @@
/obj/structure/flora/bush/flowers_pp/style_random,
/turf/open/floor/grass,
/area/station/service/chapel)
"wlS" = (
/obj/effect/mapping_helpers/broken_floor,
/obj/effect/turf_decal/delivery,
/obj/structure/sign/poster/official/random/directional/north,
/obj/machinery/modular_computer/preset/cargochat/service,
/turf/open/floor/iron/kitchen/small,
/area/station/hallway/secondary/service)
"wme" = (
/obj/effect/spawner/random/structure/crate,
/turf/open/floor/plating,
@@ -65084,6 +65090,15 @@
/obj/machinery/holopad,
/turf/open/floor/iron/showroomfloor,
/area/station/medical/surgery/theatre)
"wmP" = (
/obj/effect/turf_decal/tile/neutral/fourcorners,
/obj/item/radio/intercom/directional/south,
/obj/machinery/camera/autoname/directional/south,
/obj/machinery/modular_computer/preset/cargochat/medical{
dir = 1
},
/turf/open/floor/iron/dark,
/area/station/medical/medbay/central)
"wmS" = (
/obj/structure/cable,
/obj/effect/turf_decal/siding/red/corner{
@@ -65637,22 +65652,6 @@
"wuM" = (
/turf/closed/wall,
/area/station/command/heads_quarters/qm)
"wvg" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/effect/turf_decal/tile/dark_red/half/contrasted{
dir = 8
},
/obj/machinery/computer/security/telescreen/interrogation{
dir = 8;
name = "isolation room monitor";
network = list("isolation");
pixel_x = 30
},
/obj/machinery/photobooth/security,
/turf/open/floor/iron,
/area/station/security/execution/transfer)
"wvn" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -70886,18 +70885,6 @@
"xQJ" = (
/turf/closed/wall,
/area/station/service/abandoned_gambling_den/gaming)
"xQK" = (
/obj/effect/turf_decal/tile/dark_red{
dir = 1
},
/obj/effect/turf_decal/siding/wideplating/dark/corner{
dir = 8
},
/obj/machinery/computer/department_orders/security{
dir = 1
},
/turf/open/floor/iron,
/area/station/security/brig/entrance)
"xQN" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
@@ -72436,6 +72423,19 @@
},
/turf/open/floor/iron/dark,
/area/station/command/heads_quarters/rd)
"ykX" = (
/obj/effect/turf_decal/stripes/corner{
dir = 8
},
/obj/machinery/camera{
c_tag = "Engineering - Foyer - Starboard";
dir = 9
},
/obj/effect/decal/cleanable/cobweb/cobweb2,
/obj/machinery/airalarm/directional/east,
/obj/structure/table/reinforced/titaniumglass,
/turf/open/floor/plating,
/area/station/engineering/break_room)
"ykY" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/light/small/directional/east,
@@ -89350,7 +89350,7 @@ oTH
mhk
xHB
pOK
sDD
pnh
iEX
yfC
aws
@@ -89439,7 +89439,7 @@ ohR
eoz
eoz
tTW
wvg
bWw
tMS
xIj
vfN
@@ -89605,7 +89605,7 @@ rkR
mhk
mhk
mhk
sbt
lbV
uAV
tDT
fDp
@@ -89862,7 +89862,7 @@ rlz
rHD
qVR
wCR
wkl
wlS
tDP
qbC
lsJ
@@ -91939,7 +91939,7 @@ cmT
vJV
qBN
iKm
xQK
pvP
vEP
hji
pCF
@@ -92667,8 +92667,8 @@ xoS
hwo
hDC
tsF
ibq
nZg
iid
hIS
yat
wCt
lEa
@@ -92925,7 +92925,7 @@ cmd
qly
uVT
uVT
hBv
pHL
xQw
uVT
jsN
@@ -93181,7 +93181,7 @@ rto
hwp
qlP
uVT
jxV
psO
iri
bah
uVT
@@ -94434,10 +94434,10 @@ gJA
fBz
eLE
vxt
jco
ykX
wJU
aWC
eNV
vYf
tGm
wMm
fiA
wfn
@@ -99931,7 +99931,7 @@ dDB
xSO
wHN
xrC
syE
pnG
sSQ
vYj
sSQ
@@ -100188,7 +100188,7 @@ dDB
xSO
wuj
xrC
tvg
blA
sSQ
vYj
sSQ
@@ -100445,7 +100445,7 @@ blb
tFQ
mXT
mUg
gcf
wmP
sSQ
bbh
sSQ
@@ -100959,7 +100959,7 @@ pqa
tFQ
vLc
xrC
ceK
mVx
sSQ
miA
sSQ
@@ -103527,7 +103527,7 @@ wfr
wfr
vLQ
uSj
jBx
lGc
haq
wYA
dCe
@@ -115576,7 +115576,7 @@ wPK
xfc
vRh
xUV
viC
rpk
uMU
eAn
bZN
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+235 -252
View File
@@ -554,13 +554,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/catwalk_floor,
/area/station/maintenance/floor1/port/fore)
"agJ" = (
/obj/machinery/modular_computer/preset/cargochat/science,
/obj/effect/turf_decal/tile/brown/opposingcorners,
/obj/effect/turf_decal/tile/brown/opposingcorners,
/obj/effect/turf_decal/stripes/white/line,
/turf/open/floor/iron/dark,
/area/station/science/circuits)
"agK" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -940,6 +933,12 @@
},
/turf/open/floor/plating,
/area/station/science/xenobiology)
"alG" = (
/obj/machinery/photocopier,
/turf/open/floor/iron/half{
dir = 1
},
/area/station/engineering/lobby)
"alK" = (
/obj/machinery/modular_computer/preset/id{
dir = 4
@@ -1609,6 +1608,14 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/plating,
/area/station/cargo/miningdock)
"auj" = (
/obj/effect/turf_decal/tile/brown/opposingcorners,
/obj/effect/turf_decal/tile/brown/opposingcorners,
/obj/effect/turf_decal/stripes/white/line,
/obj/machinery/light/cold/no_nightlight/directional/north,
/obj/machinery/module_duplicator,
/turf/open/floor/iron/dark,
/area/station/science/circuits)
"aut" = (
/obj/structure/reagent_dispensers/fueltank,
/obj/effect/turf_decal/delivery/red,
@@ -2413,14 +2420,6 @@
},
/turf/open/floor/iron/dark,
/area/station/science/lab)
"aFI" = (
/obj/machinery/computer/department_orders/medical{
dir = 1
},
/obj/effect/turf_decal/tile/blue/fourcorners,
/obj/machinery/light/cold/directional/south,
/turf/open/floor/iron/white/textured,
/area/station/medical/break_room)
"aFJ" = (
/obj/machinery/button/door/directional/north{
id = "sm_bolt";
@@ -2442,13 +2441,6 @@
},
/turf/open/floor/pod,
/area/station/maintenance/floor4/port/fore)
"aGj" = (
/obj/effect/turf_decal/tile/brown/opposingcorners,
/obj/effect/turf_decal/tile/brown/opposingcorners,
/obj/effect/turf_decal/stripes/white/line,
/obj/machinery/bci_implanter,
/turf/open/floor/iron/dark,
/area/station/science/circuits)
"aGm" = (
/obj/structure/chair/comfy/black{
dir = 4
@@ -2494,13 +2486,6 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
/area/station/maintenance/floor2/port/aft)
"aGG" = (
/obj/structure/table/reinforced,
/obj/item/paper_bin,
/turf/open/floor/iron/half{
dir = 1
},
/area/station/engineering/lobby)
"aGH" = (
/turf/open/floor/plating,
/area/station/maintenance/floor3/starboard/fore)
@@ -4089,6 +4074,13 @@
},
/turf/open/space/openspace,
/area/space/nearstation)
"aZO" = (
/obj/effect/turf_decal/bot,
/obj/machinery/modular_computer/preset/cargochat/service{
dir = 8
},
/turf/open/floor/iron/dark,
/area/station/hallway/secondary/service)
"aZX" = (
/obj/machinery/light/directional/north,
/turf/open/floor/iron/dark/side{
@@ -7135,6 +7127,14 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/iron,
/area/station/hallway/floor3/fore)
"bLE" = (
/obj/effect/turf_decal/tile/blue/fourcorners,
/obj/machinery/light/cold/directional/south,
/obj/machinery/modular_computer/preset/cargochat/medical{
dir = 1
},
/turf/open/floor/iron/white/textured,
/area/station/medical/break_room)
"bMa" = (
/obj/structure/tank_dispenser/oxygen,
/obj/effect/turf_decal/siding/thinplating_new,
@@ -8709,15 +8709,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/white,
/area/station/medical/storage)
"cgv" = (
/obj/structure/disposalpipe/trunk{
dir = 1
},
/obj/machinery/disposal/bin/tagger,
/turf/open/floor/iron/dark/side{
dir = 10
},
/area/station/security/office)
"cgw" = (
/obj/effect/decal/cleanable/oil,
/obj/effect/decal/cleanable/dirt,
@@ -9080,6 +9071,12 @@
},
/turf/open/floor/iron,
/area/station/engineering/atmos/project)
"ckt" = (
/obj/item/kirbyplants/organic/plant10,
/turf/open/floor/iron/dark/side{
dir = 10
},
/area/station/security/office)
"ckv" = (
/obj/structure/cable,
/obj/effect/decal/cleanable/dirt,
@@ -10755,6 +10752,21 @@
/obj/machinery/space_heater,
/turf/open/floor/pod/light,
/area/station/maintenance/floor4/starboard/fore)
"cHA" = (
/obj/item/radio/intercom/directional/east,
/obj/machinery/button/door/directional/south{
id = "secmechbay";
name = "Security Mech Garage Door Controls";
req_access = list("security")
},
/obj/effect/turf_decal/trimline/brown/filled/end{
dir = 8
},
/obj/machinery/modular_computer/preset/cargochat/security{
dir = 8
},
/turf/open/floor/iron,
/area/station/security/office)
"cHE" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -13010,13 +13022,6 @@
"dmU" = (
/turf/open/floor/iron/dark/side,
/area/station/hallway/secondary/entry)
"dmZ" = (
/obj/machinery/modular_computer/preset/cargochat/medical{
dir = 1
},
/obj/effect/turf_decal/tile/blue/fourcorners,
/turf/open/floor/iron/white/textured,
/area/station/medical/break_room)
"dnx" = (
/obj/structure/girder,
/turf/open/floor/plating,
@@ -14530,6 +14535,11 @@
/obj/effect/landmark/start/assistant,
/turf/open/floor/carpet/royalblack,
/area/station/service/kitchen/diner)
"dIf" = (
/obj/machinery/light/directional/south,
/obj/structure/reagent_dispensers/watertank,
/turf/open/floor/iron,
/area/station/hallway/secondary/service)
"dIh" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/spawner/random/structure/table_or_rack,
@@ -14576,6 +14586,11 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/white,
/area/station/science/ordnance/testlab)
"dIK" = (
/obj/effect/turf_decal/tile/blue/fourcorners,
/obj/structure/table/reinforced/rglass,
/turf/open/floor/iron/white/textured,
/area/station/medical/break_room)
"dIO" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -14611,6 +14626,17 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/station/service/bar/atrium)
"dJm" = (
/obj/machinery/firealarm/directional/south,
/obj/machinery/camera/directional/south{
c_tag = "Security - Office Aft"
},
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/structure/cable,
/obj/effect/turf_decal/tile/red/fourcorners,
/turf/open/floor/iron/dark,
/area/station/security/office)
"dJo" = (
/obj/effect/landmark/navigate_destination/gateway,
/obj/effect/turf_decal/tile/blue/half/contrasted{
@@ -14965,11 +14991,6 @@
/obj/structure/frame/machine,
/turf/open/floor/engine,
/area/station/maintenance/floor1/port/aft)
"dNU" = (
/obj/machinery/photobooth,
/obj/effect/turf_decal/delivery,
/turf/open/floor/iron/dark,
/area/station/hallway/floor4/fore)
"dOa" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -16959,14 +16980,6 @@
/obj/structure/cable/layer3,
/turf/open/floor/iron/dark,
/area/station/ai_monitored/turret_protected/aisat)
"enP" = (
/obj/machinery/module_duplicator,
/obj/effect/turf_decal/tile/purple/opposingcorners,
/obj/effect/turf_decal/siding/brown{
dir = 1
},
/turf/open/floor/iron/white,
/area/station/science/circuits)
"enX" = (
/obj/effect/turf_decal/weather/dirt{
dir = 5
@@ -18052,6 +18065,15 @@
},
/turf/open/floor/iron/dark,
/area/station/hallway/floor1/aft)
"eEq" = (
/obj/effect/turf_decal/bot,
/obj/machinery/power/apc/auto_name/directional/east,
/obj/structure/cable,
/obj/machinery/computer/order_console/cook{
dir = 8
},
/turf/open/floor/iron/dark,
/area/station/hallway/secondary/service)
"eEr" = (
/obj/item/radio/intercom/directional/east,
/turf/open/floor/wood,
@@ -21221,6 +21243,13 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/station/service/kitchen)
"fAM" = (
/obj/effect/turf_decal/tile/brown/opposingcorners,
/obj/effect/turf_decal/tile/brown/opposingcorners,
/obj/effect/turf_decal/stripes/white/line,
/obj/machinery/component_printer,
/turf/open/floor/iron/dark,
/area/station/science/circuits)
"fAP" = (
/obj/effect/turf_decal/trimline/purple/filled/corner{
dir = 1
@@ -24371,13 +24400,6 @@
/obj/machinery/door/firedoor,
/turf/open/floor/iron/smooth_large,
/area/station/maintenance/floor2/starboard/aft)
"gqN" = (
/obj/effect/turf_decal/bot,
/obj/machinery/power/apc/auto_name/directional/east,
/obj/structure/cable,
/obj/structure/reagent_dispensers/watertank,
/turf/open/floor/iron/dark,
/area/station/hallway/secondary/service)
"gqO" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -26374,6 +26396,17 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/carpet/green,
/area/station/service/abandoned_gambling_den)
"gRL" = (
/obj/effect/turf_decal/tile/brown{
dir = 4
},
/obj/effect/turf_decal/tile/yellow{
dir = 1
},
/obj/effect/turf_decal/siding/thinplating_new,
/obj/structure/closet/crate/bin,
/turf/open/floor/iron/dark/textured,
/area/station/engineering/lobby)
"gRQ" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/light/broken/directional/west,
@@ -28600,6 +28633,11 @@
/obj/machinery/power/apc/auto_name/directional/north,
/turf/open/floor/wood/large,
/area/station/service/library/lounge)
"hwk" = (
/obj/machinery/photobooth,
/obj/effect/turf_decal/delivery,
/turf/open/floor/iron/dark,
/area/station/hallway/floor4/fore)
"hwr" = (
/obj/structure/railing,
/obj/effect/turf_decal/trimline/red/filled/line,
@@ -29850,20 +29888,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/textured_large,
/area/station/cargo/storage)
"hLW" = (
/obj/effect/turf_decal/tile/red{
dir = 4
},
/obj/effect/turf_decal/tile/red{
dir = 8
},
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/duct,
/obj/structure/disposalpipe/segment,
/turf/open/floor/iron/dark,
/area/station/security/office)
"hLX" = (
/turf/open/floor/iron/white/small,
/area/station/medical/chemistry)
@@ -31287,13 +31311,6 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/iron/dark,
/area/station/security/checkpoint/second)
"ifZ" = (
/obj/structure/rack,
/obj/effect/turf_decal/tile/brown/opposingcorners,
/obj/effect/turf_decal/tile/brown/opposingcorners,
/obj/effect/turf_decal/stripes/white/line,
/turf/open/floor/iron/dark,
/area/station/science/circuits)
"igd" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/cable,
@@ -32771,6 +32788,26 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/pod/light,
/area/station/maintenance/floor1/port/aft)
"izL" = (
/obj/structure/table,
/obj/machinery/button/ticket_machine{
pixel_x = -24;
pixel_y = -6
},
/obj/item/stamp/head/hop{
pixel_x = 8;
pixel_y = 5
},
/obj/item/flashlight/lamp{
pixel_x = -4;
pixel_y = 3
},
/obj/machinery/button/photobooth{
pixel_y = 6;
pixel_x = -24
},
/turf/open/floor/iron/dark,
/area/station/command/heads_quarters/hop)
"izN" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -36954,19 +36991,6 @@
/obj/machinery/portable_atmospherics/canister/carbon_dioxide,
/turf/open/floor/engine/co2,
/area/station/engineering/atmos)
"jEw" = (
/obj/machinery/computer/department_orders/engineering{
department_delivery_areas = list(/area/station/engineering/lobby)
},
/obj/effect/turf_decal/tile/brown{
dir = 4
},
/obj/effect/turf_decal/tile/yellow{
dir = 1
},
/obj/effect/turf_decal/siding/thinplating_new,
/turf/open/floor/iron/dark/textured,
/area/station/engineering/lobby)
"jEO" = (
/obj/effect/spawner/random/structure/crate,
/obj/effect/decal/cleanable/dirt,
@@ -40382,6 +40406,14 @@
/obj/machinery/firealarm/directional/north,
/turf/open/floor/iron/dark,
/area/station/science/cytology)
"kwS" = (
/obj/effect/turf_decal/tile/purple/opposingcorners,
/obj/effect/turf_decal/siding/brown{
dir = 1
},
/obj/structure/table,
/turf/open/floor/iron/white,
/area/station/science/circuits)
"kxf" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -41356,11 +41388,6 @@
},
/turf/open/floor/iron/white,
/area/station/science/lobby)
"kJp" = (
/obj/structure/table,
/obj/effect/turf_decal/tile/purple/opposingcorners,
/turf/open/floor/iron/white,
/area/station/science/circuits)
"kJq" = (
/turf/open/floor/iron/kitchen,
/area/station/service/kitchen/abandoned)
@@ -43552,21 +43579,6 @@
/obj/effect/spawner/random/maintenance/two,
/turf/open/floor/pod/light,
/area/station/maintenance/floor4/starboard/aft)
"lku" = (
/obj/effect/turf_decal/trimline/brown/filled/line{
dir = 10
},
/obj/machinery/computer/department_orders/security{
dir = 8
},
/obj/item/radio/intercom/directional/east,
/obj/machinery/button/door/directional/south{
id = "secmechbay";
name = "Security Mech Garage Door Controls";
req_access = list("security")
},
/turf/open/floor/iron,
/area/station/security/office)
"lkA" = (
/obj/effect/turf_decal/trimline/red/filled/line,
/obj/structure/disposalpipe/segment{
@@ -50785,13 +50797,6 @@
},
/turf/open/floor/plating,
/area/station/medical/abandoned)
"naW" = (
/obj/machinery/computer/department_orders/service{
dir = 8
},
/obj/effect/turf_decal/bot,
/turf/open/floor/iron/dark,
/area/station/hallway/secondary/service)
"nba" = (
/obj/effect/turf_decal/trimline/green/filled/line{
dir = 10
@@ -50879,6 +50884,14 @@
},
/turf/open/floor/iron/white/herringbone,
/area/station/medical/patients_rooms)
"nck" = (
/obj/structure/disposalpipe/segment{
dir = 5
},
/turf/open/floor/iron/dark/side{
dir = 8
},
/area/station/security/office)
"ncl" = (
/obj/structure/dresser,
/turf/open/floor/carpet/red,
@@ -54369,6 +54382,13 @@
},
/turf/open/floor/pod/dark,
/area/station/maintenance/floor3/port)
"nUW" = (
/obj/effect/turf_decal/tile/brown/opposingcorners,
/obj/effect/turf_decal/tile/brown/opposingcorners,
/obj/effect/turf_decal/stripes/white/line,
/obj/structure/table,
/turf/open/floor/iron/dark,
/area/station/science/circuits)
"nVi" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment{
@@ -54430,14 +54450,6 @@
},
/turf/open/floor/iron/dark,
/area/station/service/hydroponics)
"nVN" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/effect/turf_decal/tile/red/diagonal_edge,
/obj/structure/cable,
/obj/machinery/photobooth/security,
/turf/open/floor/iron/dark,
/area/station/security/prison/visit)
"nVP" = (
/obj/structure/cable/multilayer/multiz,
/turf/open/floor/plating,
@@ -57773,11 +57785,6 @@
/obj/machinery/light/dim/directional/west,
/turf/open/floor/wood/large,
/area/station/security/prison/safe)
"oPv" = (
/obj/machinery/component_printer,
/obj/effect/turf_decal/tile/purple/opposingcorners,
/turf/open/floor/iron/white,
/area/station/science/circuits)
"oPA" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/effect/turf_decal/tile/blue/fourcorners,
@@ -65015,6 +65022,10 @@
/obj/machinery/newscaster/directional/north,
/turf/open/floor/wood,
/area/station/medical/psychology)
"qGy" = (
/obj/machinery/airalarm/directional/east,
/turf/open/floor/iron,
/area/station/hallway/secondary/service)
"qGC" = (
/obj/effect/spawner/structure/window/hollow/end{
dir = 8
@@ -68445,11 +68456,6 @@
dir = 8
},
/area/station/hallway/floor1/aft)
"rDw" = (
/turf/open/floor/iron/dark/side{
dir = 4
},
/area/station/security/office)
"rDD" = (
/obj/structure/transit_tube/curved/flipped{
dir = 8
@@ -69186,6 +69192,14 @@
"rPi" = (
/turf/closed/wall,
/area/station/cargo/office)
"rPn" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/effect/turf_decal/tile/red/diagonal_edge,
/obj/structure/cable,
/obj/machinery/photobooth/security,
/turf/open/floor/iron/dark,
/area/station/security/prison/visit)
"rPr" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -69416,6 +69430,23 @@
dir = 4
},
/area/station/engineering/storage/tech)
"rSl" = (
/obj/effect/turf_decal/tile/red{
dir = 4
},
/obj/effect/turf_decal/tile/red{
dir = 8
},
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/duct,
/obj/structure/disposalpipe/segment,
/obj/structure/disposalpipe/segment{
dir = 4
},
/turf/open/floor/iron/dark,
/area/station/security/office)
"rSu" = (
/obj/structure/railing/corner{
dir = 1
@@ -70842,6 +70873,11 @@
dir = 8
},
/area/station/security/courtroom)
"snB" = (
/obj/effect/turf_decal/tile/purple/opposingcorners,
/obj/structure/table,
/turf/open/floor/iron/white,
/area/station/science/circuits)
"snI" = (
/obj/effect/turf_decal/trimline/green/arrow_ccw,
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
@@ -74285,16 +74321,6 @@
/obj/effect/landmark/start/botanist,
/turf/open/floor/iron,
/area/station/service/hydroponics)
"tfk" = (
/obj/machinery/computer/department_orders/science{
department_delivery_areas = list(/area/station/science/lobby,/area/station/science/robotics/lab)
},
/obj/effect/turf_decal/tile/brown/opposingcorners,
/obj/effect/turf_decal/tile/brown/opposingcorners,
/obj/effect/turf_decal/stripes/white/line,
/obj/machinery/light/cold/no_nightlight/directional/north,
/turf/open/floor/iron/dark,
/area/station/science/circuits)
"tfo" = (
/obj/effect/turf_decal/trimline/white/line{
dir = 8
@@ -74728,15 +74754,6 @@
},
/turf/open/floor/circuit,
/area/station/science/xenobiology)
"tlX" = (
/obj/machinery/modular_computer/preset/civilian{
dir = 8
},
/obj/effect/turf_decal/siding/wood{
dir = 4
},
/turf/open/floor/iron/dark/smooth_large,
/area/station/science/lobby)
"tlZ" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
dir = 8
@@ -78100,18 +78117,6 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
/area/station/medical/abandoned)
"ufI" = (
/obj/machinery/firealarm/directional/south,
/obj/machinery/camera/directional/south{
c_tag = "Security - Office Aft"
},
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/structure/cable,
/obj/effect/turf_decal/tile/red/fourcorners,
/obj/item/kirbyplants/organic/plant10,
/turf/open/floor/iron/dark,
/area/station/security/office)
"ufL" = (
/obj/structure/railing/corner{
dir = 1
@@ -78880,26 +78885,6 @@
/obj/machinery/vending/wallmed/directional/west,
/turf/open/floor/iron/white,
/area/station/hallway/floor2/fore)
"uqF" = (
/obj/structure/table,
/obj/machinery/button/ticket_machine{
pixel_x = -24;
pixel_y = -6
},
/obj/item/stamp/head/hop{
pixel_x = 8;
pixel_y = 5
},
/obj/item/flashlight/lamp{
pixel_x = -4;
pixel_y = 3
},
/obj/machinery/button/photobooth{
pixel_y = 6;
pixel_x = -24
},
/turf/open/floor/iron/dark,
/area/station/command/heads_quarters/hop)
"uqT" = (
/obj/effect/turf_decal/trimline/green/filled/line{
dir = 6
@@ -82554,6 +82539,12 @@
/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance,
/turf/open/floor/pod/light,
/area/station/maintenance/floor1/starboard/fore)
"vnq" = (
/obj/effect/turf_decal/tile/purple/opposingcorners,
/obj/item/radio/intercom/directional/south,
/obj/machinery/bci_implanter,
/turf/open/floor/iron/white,
/area/station/science/circuits)
"vnt" = (
/obj/effect/decal/cleanable/blood/old,
/turf/open/floor/plating,
@@ -83132,6 +83123,11 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/carpet/red,
/area/station/service/theater)
"vti" = (
/obj/effect/turf_decal/tile/purple/opposingcorners,
/obj/structure/rack,
/turf/open/floor/iron/white,
/area/station/science/circuits)
"vtj" = (
/obj/structure/table,
/obj/effect/decal/cleanable/dirt,
@@ -83232,13 +83228,6 @@
},
/turf/open/floor/iron/dark,
/area/station/science/ordnance/testlab)
"vuC" = (
/obj/machinery/light/directional/south,
/obj/machinery/computer/order_console/cook{
dir = 4
},
/turf/open/floor/iron,
/area/station/hallway/secondary/service)
"vuD" = (
/obj/effect/turf_decal/trimline/white/filled/line,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -83274,16 +83263,6 @@
},
/turf/open/floor/catwalk_floor,
/area/station/maintenance/floor3/port/fore)
"vuQ" = (
/obj/effect/turf_decal/trimline/brown/filled/line{
dir = 9
},
/obj/machinery/modular_computer/preset/cargochat/security{
dir = 8
},
/obj/machinery/light/directional/east,
/turf/open/floor/iron,
/area/station/security/office)
"vuU" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment{
@@ -83776,13 +83755,6 @@
/obj/effect/decal/cleanable/wrapping,
/turf/open/floor/pod/light,
/area/station/maintenance/floor4/starboard/fore)
"vAP" = (
/obj/machinery/modular_computer/preset/cargochat/service{
dir = 8
},
/obj/machinery/airalarm/directional/east,
/turf/open/floor/iron,
/area/station/hallway/secondary/service)
"vAS" = (
/obj/effect/mapping_helpers/airlock/access/any/supply/mining,
/obj/machinery/door/airlock/multi_tile/public/glass{
@@ -85311,6 +85283,14 @@
},
/turf/open/floor/iron/checker,
/area/station/cargo/miningdock)
"vWs" = (
/obj/machinery/light/directional/east,
/obj/machinery/disposal/bin/tagger,
/obj/structure/disposalpipe/trunk{
dir = 8
},
/turf/open/floor/iron,
/area/station/security/office)
"vWw" = (
/turf/closed/wall/r_wall,
/area/station/security/office)
@@ -85344,6 +85324,15 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/textured_large,
/area/station/hallway/secondary/entry)
"vWK" = (
/obj/effect/turf_decal/siding/wood{
dir = 4
},
/obj/machinery/modular_computer/preset/cargochat/science{
dir = 8
},
/turf/open/floor/iron/dark/smooth_large,
/area/station/science/lobby)
"vWQ" = (
/obj/effect/turf_decal/siding/wood{
dir = 8
@@ -87324,12 +87313,6 @@
"wuL" = (
/turf/closed/wall,
/area/station/commons/dorms/apartment2)
"wuM" = (
/obj/structure/table,
/obj/effect/turf_decal/tile/purple/opposingcorners,
/obj/item/radio/intercom/directional/south,
/turf/open/floor/iron/white,
/area/station/science/circuits)
"wuZ" = (
/obj/structure/rack,
/obj/effect/decal/cleanable/dirt,
@@ -137769,7 +137752,7 @@ wfT
wfT
wRe
wmU
jEw
gRL
nDw
bhp
jPh
@@ -139059,7 +139042,7 @@ fXd
pLJ
eLQ
rBP
aGG
alG
wKT
rBP
uMl
@@ -182213,9 +182196,9 @@ kyM
xWf
xuv
xuv
enP
oPv
kJp
kwS
snB
vti
sxl
naI
lNN
@@ -182469,14 +182452,14 @@ bDr
bDr
ctI
xuv
agJ
nUW
hKm
sSz
sSz
sSz
kik
sSz
wuM
vnq
xuv
jBm
cNm
@@ -182726,7 +182709,7 @@ wwu
bFq
ctI
xuv
tfk
auj
hKm
qgQ
gsn
@@ -182983,7 +182966,7 @@ hrW
gLD
ctI
xuv
aGj
fAM
hKm
qTK
ifA
@@ -183240,7 +183223,7 @@ rua
rua
cwq
xuv
ifZ
nUW
hKm
qTK
qTK
@@ -186076,7 +186059,7 @@ hMV
lIL
fFu
kEF
tlX
vWK
ngk
jFJ
fko
@@ -186353,8 +186336,8 @@ uXA
hLz
enl
ljf
naW
gqN
aZO
eEq
qbr
nNT
bMJ
@@ -189707,7 +189690,7 @@ wVY
sIH
hWV
kpR
aFI
bLE
lcv
aal
ydS
@@ -189964,7 +189947,7 @@ iGY
stS
wzJ
fXb
dmZ
dIK
lcv
cKs
cMh
@@ -250605,7 +250588,7 @@ gBr
sRh
tUG
ris
vuC
dIf
gyr
sng
iHx
@@ -251890,7 +251873,7 @@ wxM
sVv
ogg
wuC
vAP
qGy
gyr
vwc
gMz
@@ -318437,7 +318420,7 @@ nPE
qPv
pJV
iag
uqF
izL
iqy
mKs
ryE
@@ -318698,7 +318681,7 @@ ipn
fpn
uGO
mCJ
dNU
hwk
btT
hIb
uSW
@@ -319234,8 +319217,8 @@ eOy
exp
lnl
uYM
eOy
cgv
nck
ckt
eNj
ftt
eNj
@@ -319491,7 +319474,7 @@ kOc
kQu
nRI
aHo
hLW
rSl
iXK
xOI
cAJ
@@ -319748,7 +319731,7 @@ aQS
vko
mBg
dPf
rDw
mBg
pse
oQu
odH
@@ -320005,8 +319988,8 @@ fQA
fQA
fNA
ebz
vuQ
lku
vWs
cHA
eNj
kcw
hvb
@@ -320261,7 +320244,7 @@ sMB
sMB
aEh
fNA
ufI
dJm
dnU
dnU
aRU
@@ -326689,7 +326672,7 @@ gDx
iIb
ftZ
tBk
nVN
rPn
wKi
akt
rbr
File diff suppressed because it is too large Load Diff
@@ -594,28 +594,3 @@
/obj/item/circuitboard/computer/exodrone_console
name = "Exploration Drone Control Console"
build_path = /obj/machinery/computer/exodrone_control_console
/obj/item/circuitboard/computer/service_orders
name = "Service Order"
greyscale_colors = CIRCUIT_COLOR_SUPPLY
build_path = /obj/machinery/computer/department_orders/service
/obj/item/circuitboard/computer/engineering_orders
name = "Engineering Order"
greyscale_colors = CIRCUIT_COLOR_SUPPLY
build_path = /obj/machinery/computer/department_orders/engineering
/obj/item/circuitboard/computer/science_orders
name = "Science Order"
greyscale_colors = CIRCUIT_COLOR_SUPPLY
build_path = /obj/machinery/computer/department_orders/science
/obj/item/circuitboard/computer/security_orders
name = "Security Order"
greyscale_colors = CIRCUIT_COLOR_SUPPLY
build_path = /obj/machinery/computer/department_orders/security
/obj/item/circuitboard/computer/medical_orders
name = "Medical Order"
greyscale_colors = CIRCUIT_COLOR_SUPPLY
build_path = /obj/machinery/computer/department_orders/medical
-277
View File
@@ -1,277 +0,0 @@
///cooldown for each department, assoc type 2 cooldown. global, so rebuilding the console doesn't refresh the cd
GLOBAL_LIST_INIT(department_order_cooldowns, list(
/obj/machinery/computer/department_orders/service = 0,
/obj/machinery/computer/department_orders/engineering = 0,
/obj/machinery/computer/department_orders/science = 0,
/obj/machinery/computer/department_orders/security = 0,
/obj/machinery/computer/department_orders/medical = 0,
))
/obj/machinery/computer/department_orders
name = "department order console"
desc = "Used to order supplies for a department. Crates ordered this way will be locked until they reach their destination."
icon_screen = "supply"
light_color = COLOR_BRIGHT_ORANGE
///reference to the order we've made UNTIL it gets sent on the supply shuttle. this is so heads can cancel it
var/datum/supply_order/department_order
///access required to override an order - this should be a head of staff for the department
var/override_access
///where this computer expects deliveries to need to go, passed onto orders. it will see if the FIRST one exists, then try a fallback. if no fallbacks it throws an error
var/list/department_delivery_areas = list()
///which groups this computer can order from
var/list/dep_groups = list()
/// If this departmental order console currently is on cooldown.
var/on_cooldown = FALSE
/// Our radio object we use to talk to our department.
var/obj/item/radio/radio
/// The radio key typepath that will be instantiated and inserted into our radio.
var/obj/item/encryptionkey/radio_key_typepath
/// The radio channel we will speak into by default.
var/radio_channel
/obj/machinery/computer/department_orders/Initialize(mapload, obj/item/circuitboard/board)
. = ..()
// All maps should have ONLY ONE of each order console roundstart
REGISTER_REQUIRED_MAP_ITEM(1, 1)
if (radio_channel && radio_key_typepath)
radio = new(src)
radio.keyslot = new radio_key_typepath
radio.subspace_transmission = TRUE
radio.canhear_range = 0
radio.recalculateChannels()
if(mapload) //check for mapping errors
for(var/delivery_area_type in department_delivery_areas)
if(GLOB.areas_by_type[delivery_area_type])
return
//every area fallback didn't exist on this map so throw a mapping error and set some generic area that uuuh please exist okay
log_mapping("[src] has no valid areas to deliver to on this map, add some more fallback areas to its \"department_delivery_areas\" var.")
department_delivery_areas = list(/area/station/hallway/primary/central) //if this doesn't exist like honestly fuck your map man
/obj/machinery/computer/department_orders/Destroy()
QDEL_NULL(radio)
return ..()
/obj/machinery/computer/department_orders/ui_interact(mob/user, datum/tgui/ui)
. = ..()
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
ui = new(user, src, "DepartmentOrders")
ui.open()
/obj/machinery/computer/department_orders/ui_data(mob/user)
var/list/data = list()
var/cooldown = GLOB.department_order_cooldowns[type] - world.time
if(cooldown < 0)
data["time_left"] = 0
else
data["time_left"] = DisplayTimeText(cooldown, 1)
data["can_override"] = department_order ? TRUE : FALSE
return data
/obj/machinery/computer/department_orders/ui_static_data(mob/user)
var/list/data = list()
var/list/supply_data = list() //each item in this needs to be a Category
for(var/pack_key in SSshuttle.supply_packs)
var/datum/supply_pack/pack = SSshuttle.supply_packs[pack_key]
//skip groups we do not offer
if(!(pack.group in dep_groups))
continue
//find which group this belongs to, make the group if it doesn't exist
var/list/target_group
for(var/list/possible_group in supply_data)
if(possible_group["name"] == pack.group)
target_group = possible_group
break
if(!target_group)
target_group = list(
"name" = pack.group,
"packs" = list(),
)
supply_data += list(target_group)
//skip packs we should not show, even if we should show the group
if((pack.hidden && !(obj_flags & EMAGGED)) || (pack.special && !pack.special_enabled) || pack.drop_pod_only || pack.goody)
continue
//finally the pack data itself
target_group["packs"] += list(list(
"name" = pack.name,
"cost" = pack.get_cost(),
"id" = pack.id,
"desc" = pack.desc || pack.name, // If there is a description, use it. Otherwise use the pack's name.
))
data["supplies"] = supply_data
return data
/obj/machinery/computer/department_orders/ui_act(action, list/params)
. = ..()
if(!isliving(usr))
return
var/mob/living/orderer = usr
var/obj/item/card/id/id_card = orderer.get_idcard(hand_first = TRUE)
//needs to come BEFORE preventing actions!
if(action == "override_order")
if(!(override_access in id_card.GetAccess()))
balloon_alert(usr, "requires head of staff access!")
playsound(src, 'sound/machines/buzz-sigh.ogg', 30, TRUE)
return
if(department_order && (department_order in SSshuttle.shopping_list))
GLOB.department_order_cooldowns[type] = 0
SSshuttle.shopping_list -= department_order
department_order = null
UnregisterSignal(SSshuttle, COMSIG_SUPPLY_SHUTTLE_BUY)
return TRUE
if(GLOB.department_order_cooldowns[type] > world.time)
return
if(!check_access(id_card))
balloon_alert(usr, "access denied!")
playsound(src, 'sound/machines/buzz-sigh.ogg', 30, TRUE)
return
. = TRUE
var/id = params["id"]
id = text2path(id) || id
var/datum/supply_pack/pack = SSshuttle.supply_packs[id]
if(!pack)
say("Something went wrong!")
CRASH("requested supply pack id \"[id]\" not found!")
if((pack.hidden && !(obj_flags & EMAGGED)) || (pack.special && !pack.special_enabled) || pack.drop_pod_only || pack.goody)
return
var/name = "*None Provided*"
var/rank = "*None Provided*"
var/ckey = usr.ckey
if(ishuman(usr))
var/mob/living/carbon/human/human_orderer = usr
name = human_orderer.get_authentification_name()
rank = human_orderer.get_assignment(hand_first = TRUE)
else if(HAS_SILICON_ACCESS(usr))
name = usr.real_name
rank = "Silicon"
//already have a signal to finalize the order
var/already_signalled = department_order ? TRUE : FALSE
var/chosen_delivery_area
for(var/delivery_area_type in department_delivery_areas)
if(GLOB.areas_by_type[delivery_area_type])
chosen_delivery_area = delivery_area_type
break
if(SSshuttle.supply.get_order_count(pack) == OVER_ORDER_LIMIT)
playsound(src, 'sound/machines/buzz-sigh.ogg', 50, FALSE)
say("ERROR: No more then [CARGO_MAX_ORDER] of any pack may be ordered at once")
return
department_order = new(
pack = pack,
orderer = name,
orderer_rank = rank,
orderer_ckey = ckey,
reason = "",
paying_account = null,
department_destination = chosen_delivery_area,
coupon = null,
manifest_can_fail = FALSE,
)
SSshuttle.shopping_list += department_order
if(!already_signalled)
RegisterSignal(SSshuttle, COMSIG_SUPPLY_SHUTTLE_BUY, PROC_REF(finalize_department_order))
say("Order processed. Cargo will deliver the crate when it comes in on their shuttle. NOTICE: Heads of staff may override the order.")
calculate_cooldown(pack.cost)
///signal when the supply shuttle begins to spawn orders. we forget the current order preventing it from being overridden (since it's already past the point of no return on undoing the order)
/obj/machinery/computer/department_orders/proc/finalize_department_order(datum/subsystem)
SIGNAL_HANDLER
if(department_order && (department_order in SSshuttle.shopping_list))
department_order = null
UnregisterSignal(subsystem, COMSIG_SUPPLY_SHUTTLE_BUY)
/obj/machinery/computer/department_orders/proc/calculate_cooldown(credits)
//minimum almost the lowest value of a crate
var/min = CARGO_CRATE_VALUE * 1.6
//maximum fairly expensive crate at 3000
var/max = CARGO_CRATE_VALUE * 15
credits = clamp(credits, min, max)
var/time_y = (credits - min)/(max - min) + 1 //convert to between 1 and 2
time_y = 10 MINUTES * time_y
GLOB.department_order_cooldowns[type] = world.time + time_y
/obj/machinery/computer/department_orders/process()
. = ..()
if (!.)
return FALSE
if (GLOB.department_order_cooldowns[type] > world.time)
on_cooldown = TRUE
else if (on_cooldown)
radio?.talk_into(src, "Order cooldown has expired! A new order may now be placed!", radio_channel)
playsound(src, 'sound/machines/ping.ogg', 30, TRUE)
on_cooldown = FALSE
return TRUE
/obj/machinery/computer/department_orders/service
name = "service order console"
circuit = /obj/item/circuitboard/computer/service_orders
department_delivery_areas = list(/area/station/hallway/secondary/service, /area/station/service/bar/atrium)
override_access = ACCESS_HOP
req_one_access = list(ACCESS_SERVICE)
dep_groups = list("Service", "Food & Hydroponics", "Livestock", "Costumes & Toys")
radio_key_typepath = /obj/item/encryptionkey/headset_service
radio_channel = RADIO_CHANNEL_SERVICE
/obj/machinery/computer/department_orders/engineering
name = "engineering order console"
circuit = /obj/item/circuitboard/computer/engineering_orders
department_delivery_areas = list(/area/station/engineering/main)
override_access = ACCESS_CE
req_one_access = REGION_ACCESS_ENGINEERING
dep_groups = list("Engineering", "Engine Construction", "Canisters & Materials")
radio_key_typepath = /obj/item/encryptionkey/headset_eng
radio_channel = RADIO_CHANNEL_ENGINEERING
/obj/machinery/computer/department_orders/science
name = "science order console"
circuit = /obj/item/circuitboard/computer/science_orders
department_delivery_areas = list(/area/station/science/research)
override_access = ACCESS_RD
req_one_access = REGION_ACCESS_RESEARCH
dep_groups = list("Science", "Livestock", "Canisters & Materials")
radio_key_typepath = /obj/item/encryptionkey/headset_sci
radio_channel = RADIO_CHANNEL_SCIENCE
/obj/machinery/computer/department_orders/security
name = "security order console"
circuit = /obj/item/circuitboard/computer/security_orders
department_delivery_areas = list(
/area/station/security/office,
/area/station/security/brig,
/area/station/security/brig/upper,
)
override_access = ACCESS_HOS
req_one_access = REGION_ACCESS_SECURITY
dep_groups = list("Security", "Armory")
radio_key_typepath = /obj/item/encryptionkey/headset_sec
radio_channel = RADIO_CHANNEL_SECURITY
/obj/machinery/computer/department_orders/medical
name = "medical order console"
circuit = /obj/item/circuitboard/computer/medical_orders
department_delivery_areas = list(
/area/station/medical/medbay/central,
/area/station/medical/medbay,
/area/station/medical/treatment_center,
/area/station/medical/storage,
)
override_access = ACCESS_CMO
req_one_access = REGION_ACCESS_MEDBAY
dep_groups = list("Medical")
radio_key_typepath = /obj/item/encryptionkey/headset_med
radio_channel = RADIO_CHANNEL_MEDICAL
+48 -4
View File
@@ -18,7 +18,24 @@
var/list/department_jobs = list()
/// For separatists, what independent name prefix does their nation get named?
var/list/nation_prefixes = list()
/// List of /area types that are considered part of this department's "delivery" area.
/// Acts as a priority system, where first items are picked first.
var/list/department_delivery_areas = list()
/// List of categories in the cargo console that are associated with this department.
var/list/associated_cargo_groups = list()
/// The single access associated with the head of staff of this department.
var/head_of_staff_access
/// A list of generic access flags people in this department generally have.
var/list/department_access = list()
/datum/job_department/New()
. = ..()
for(var/delivery_area_type in department_delivery_areas)
if(GLOB.areas_by_type[delivery_area_type])
return
//every area fallback didn't exist on this map so throw a mapping error and set some generic area that uuuh please exist okay
log_mapping("[type] has no valid areas to deliver to on this map, add some more fallback areas to its \"department_delivery_areas\" var.")
department_delivery_areas = list(/area/station/hallway/primary/central) //if this doesn't exist like honestly fuck your map man
/// Handles adding jobs to the department and setting up the job bitflags.
/datum/job_department/proc/add_job(datum/job/job)
@@ -76,6 +93,14 @@
label_class = "security"
ui_color = "#d46a78"
nation_prefixes = list("Securi", "Beepski", "Shitcuri", "Red", "Stunba", "Flashbango", "Flasha", "Stanfordi")
department_delivery_areas = list(
/area/station/security/office,
/area/station/security/brig,
/area/station/security/brig/upper,
)
associated_cargo_groups = list("Security", "Armory")
head_of_staff_access = ACCESS_HOS
department_access = REGION_ACCESS_SECURITY
/datum/job_department/engineering
department_name = DEPARTMENT_ENGINEERING
@@ -86,7 +111,10 @@
label_class = "engineering"
ui_color = "#dfb567"
nation_prefixes = list("Atomo", "Engino", "Power", "Teleco")
department_delivery_areas = list(/area/station/engineering/main)
associated_cargo_groups = list("Engineering", "Engine Construction", "Canisters & Materials")
head_of_staff_access = ACCESS_CE
department_access = REGION_ACCESS_ENGINEERING
/datum/job_department/medical
department_name = DEPARTMENT_MEDICAL
@@ -97,7 +125,15 @@
label_class = "medical"
ui_color = "#65b2bd"
nation_prefixes = list("Mede", "Healtha", "Recova", "Chemi", "Viro", "Psych")
department_delivery_areas = list(
/area/station/medical/medbay/central,
/area/station/medical/medbay,
/area/station/medical/treatment_center,
/area/station/medical/storage,
)
associated_cargo_groups = list("Medical")
head_of_staff_access = ACCESS_CMO
department_access = REGION_ACCESS_MEDBAY
/datum/job_department/science
department_name = DEPARTMENT_SCIENCE
@@ -108,6 +144,10 @@
label_class = "science"
ui_color = "#c973c9"
nation_prefixes = list("Sci", "Griffa", "Geneti", "Explosi", "Mecha", "Xeno", "Nani", "Cyto")
department_delivery_areas = list(/area/station/science/research)
associated_cargo_groups = list("Science", "Livestock", "Canisters & Materials")
head_of_staff_access = ACCESS_RD
department_access = REGION_ACCESS_RESEARCH
/datum/job_department/cargo
@@ -119,7 +159,8 @@
label_class = "supply"
ui_color = "#cf9c6c"
nation_prefixes = list("Cargo", "Guna", "Suppli", "Mule", "Crate", "Ore", "Mini", "Shaf")
head_of_staff_access = ACCESS_QM
department_access = REGION_ACCESS_SUPPLY
/datum/job_department/service
department_name = DEPARTMENT_SERVICE
@@ -130,7 +171,10 @@
label_class = "service"
ui_color = "#7cc46a"
nation_prefixes = list("Honka", "Boozo", "Fatu", "Danka", "Mimi", "Libra", "Jani", "Religi")
department_delivery_areas = list(/area/station/hallway/secondary/service, /area/station/service/bar/atrium)
associated_cargo_groups = list("Service", "Food & Hydroponics", "Livestock", "Costumes & Toys")
head_of_staff_access = ACCESS_HOP
department_access = list(ACCESS_SERVICE)
/datum/job_department/silicon
department_name = DEPARTMENT_SILICON
@@ -80,42 +80,69 @@
// ===== CARGO CHAT CONSOLES =====
/obj/machinery/modular_computer/preset/cargochat
name = "cargo chatroom console"
desc = "A stationary computer. This one comes preloaded with a chatroom for your cargo requests."
name = "cargo interfacing console"
desc = "A stationary computer that comes pre-loaded with software to interface with the cargo department."
starting_programs = list(
/datum/computer_file/program/chatclient,
)
///Used in Initialize to set the chat client name.
var/console_department
/// What department type is assigned to this console?
var/datum/job_department/department_type
/obj/machinery/modular_computer/preset/cargochat/Initialize(mapload)
add_starting_software()
. = ..()
setup_starting_software()
REGISTER_REQUIRED_MAP_ITEM(1, 1)
if(department_type)
name = "[lowertext(initial(department_type.department_name))] [name]"
cpu.name = name
/obj/machinery/modular_computer/preset/cargochat/proc/add_starting_software()
starting_programs += /datum/computer_file/program/department_order
/obj/machinery/modular_computer/preset/cargochat/proc/setup_starting_software()
if(!department_type)
return
var/datum/computer_file/program/chatclient/chatprogram = cpu.find_file_by_name("ntnrc_client")
chatprogram.username = "[lowertext(console_department)]_department"
cpu.active_program = chatprogram
chatprogram.username = "[lowertext(initial(department_type.department_name))]_department"
cpu.idle_threads += chatprogram
var/datum/computer_file/program/department_order/orderprogram = cpu.find_file_by_name("dept_order")
orderprogram.set_linked_department(department_type)
cpu.active_program = orderprogram
update_appearance(UPDATE_ICON)
/obj/machinery/modular_computer/preset/cargochat/service
console_department = "Service"
department_type = /datum/job_department/service
/obj/machinery/modular_computer/preset/cargochat/engineering
console_department = "Engineering"
department_type = /datum/job_department/engineering
/obj/machinery/modular_computer/preset/cargochat/science
console_department = "Science"
department_type = /datum/job_department/science
/obj/machinery/modular_computer/preset/cargochat/security
console_department = "Security"
department_type = /datum/job_department/security
/obj/machinery/modular_computer/preset/cargochat/medical
console_department = "Medical"
department_type = /datum/job_department/medical
//ONE PER MAP PLEASE, IT MAKES A CARGOBUS FOR EACH ONE OF THESE
/obj/machinery/modular_computer/preset/cargochat/cargo
console_department = "Cargo"
name = "department chatroom console"
desc = "A stationary computer. This one comes preloaded with a chatroom for incoming cargo requests. You may moderate it from this computer."
department_type = /datum/job_department/cargo
name = "departmental interfacing console"
desc = "A stationary computer that comes pre-loaded with software to interface with incoming departmental cargo requests."
/obj/machinery/modular_computer/preset/cargochat/cargo/add_starting_software()
starting_programs += /datum/computer_file/program/bounty_board
starting_programs += /datum/computer_file/program/budgetorders
starting_programs += /datum/computer_file/program/shipping
/obj/machinery/modular_computer/preset/cargochat/cargo/setup_starting_software()
var/datum/computer_file/program/chatclient/chatprogram = cpu.find_file_by_name("ntnrc_client")
cpu.active_program = chatprogram
update_appearance(UPDATE_ICON)
// Rest of the chat program setup is done in LateInit
/obj/machinery/modular_computer/preset/cargochat/cargo/LateInitialize()
. = ..()
@@ -8,6 +8,7 @@
can_run_on_flags = PROGRAM_LAPTOP | PROGRAM_PDA
size = 10
tgui_id = "NtosCargo"
program_icon = FA_ICON_CART_FLATBED
///Are you actually placing orders with it?
var/requestonly = TRUE
///Can the tablet see or buy illegal stuff?
@@ -8,13 +8,13 @@
filename = "ntnrc_client"
filedesc = "Chat Client"
downloader_category = PROGRAM_CATEGORY_DEVICE
program_open_overlay = "command"
extended_desc = "This program allows communication over NTNRC network"
program_open_overlay = "text"
extended_desc = "This program allows communication over NTNRC network."
size = 8
ui_header = "ntnrc_idle.gif"
program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET
tgui_id = "NtosNetChat"
program_icon = "comment-alt"
program_icon = FA_ICON_COMMENT_ALT
alert_able = TRUE
///The user's screen name.
@@ -0,0 +1,274 @@
/datum/computer_file/program/department_order
filename = "dept_order"
filedesc = "Departmental Orders"
can_run_on_flags = PROGRAM_CONSOLE
downloader_category = PROGRAM_CATEGORY_SUPPLY
program_open_overlay = "request"
extended_desc = "Allows for departments to order supplied from Cargo for free, with a cooldown between orders."
size = 10
tgui_id = "NtosDeptOrder"
program_icon = FA_ICON_CART_FLATBED
alert_able = TRUE
// Filled via set_linked_department. Also serves as "who can cancel the order".
download_access = list(ACCESS_COMMAND)
// Anyone can open, not everyone can use.
run_access = list()
/// Filled via set_linked_department. Serves as "who can place orders".
VAR_PRIVATE/list/use_access = list()
/// The department we are linked to, typepath.
VAR_PRIVATE/datum/job_department/linked_department
/// Stores the time when we can next place an order for each department.
VAR_PRIVATE/static/list/department_cooldowns = list(
/datum/job_department/engineering = 0,
/datum/job_department/medical = 0,
/datum/job_department/science = 0,
/datum/job_department/security = 0,
/datum/job_department/service = 0,
)
/// Reference to the order we've made UNTIL it gets sent on the supply shuttle. this is so heads can cancel it
VAR_PRIVATE/datum/supply_order/department_order
/// Our radio object we use to talk to our department.
VAR_PRIVATE/obj/item/radio/radio
/// The radio channel we will speak into by default.
VAR_PRIVATE/radio_channel
/// Maps what department gets what encryption key
/// I could've put this on the job department datum but it felt unnecessary
VAR_PRIVATE/static/list/dept_to_radio = list(
/datum/job_department/engineering = /obj/item/encryptionkey/headset_eng,
/datum/job_department/medical = /obj/item/encryptionkey/headset_med,
/datum/job_department/science = /obj/item/encryptionkey/headset_sci,
/datum/job_department/security = /obj/item/encryptionkey/headset_sec,
/datum/job_department/service = /obj/item/encryptionkey/headset_service,
)
/// Sets the passed department type as the active department for this computer file.
/datum/computer_file/program/department_order/proc/set_linked_department(datum/job_department/department)
linked_department = department
var/datum/job_department/linked_department_real = SSjob.get_department_type(linked_department)
// Heads of staff can download
download_access |= linked_department_real.head_of_staff_access
// Heads of staff + anyone in the dept can run it
use_access |= linked_department_real.head_of_staff_access
use_access |= linked_department_real.department_access
// Also set up the radio
if(dept_to_radio[linked_department])
if(!isnull(radio))
QDEL_NULL(radio)
var/picked_key = dept_to_radio[linked_department] || /obj/item/encryptionkey/headset_cargo
radio = new(computer)
radio.keyslot = new picked_key()
radio.subspace_transmission = TRUE
radio.canhear_range = 0
radio.recalculateChannels()
radio_channel = radio.keyslot.channels[1]
computer.update_static_data_for_all_viewers()
/datum/computer_file/program/department_order/Destroy()
QDEL_NULL(radio)
return ..()
/datum/computer_file/program/department_order/ui_interact(mob/user, datum/tgui/ui)
check_cooldown()
/datum/computer_file/program/department_order/ui_data(mob/user)
var/list/data = list()
data["no_link"] = !linked_department
data["id_inside"] = !!computer.computer_id_slot
data["time_left"] = department_cooldowns[linked_department] ? DisplayTimeText(max(department_cooldowns[linked_department] - world.time, 0), 1) : null
data["can_override"] = !!department_order
return data
/datum/computer_file/program/department_order/ui_static_data(mob/user)
var/datum/job_department/linked_department_real = SSjob.get_department_type(linked_department)
if(isnull(linked_department_real))
return list("supplies" = list())
var/list/data = list()
var/list/supply_data = list()
for(var/group in linked_department_real.associated_cargo_groups)
supply_data[group] = list()
for(var/pack_key in SSshuttle.supply_packs)
var/datum/supply_pack/pack = SSshuttle.supply_packs[pack_key]
if(!islist(supply_data[pack.group]) || !can_see_pack(pack))
continue
UNTYPED_LIST_ADD(supply_data[pack.group], list(
"name" = pack.name,
"cost" = pack.get_cost(),
"id" = pack.id,
"desc" = pack.desc || pack.name, // If there is a description, use it. Otherwise use the pack's name.
))
var/list/supply_data_flattened = list()
for(var/group in supply_data)
UNTYPED_LIST_ADD(supply_data_flattened, list(
"name" = group,
"packs" = supply_data[group],
))
data["supplies"] = supply_data_flattened
return data
/// Checks if we can "see" the passed supply pack
/datum/computer_file/program/department_order/proc/can_see_pack(datum/supply_pack/to_check)
PROTECTED_PROC(TRUE)
if(to_check.hidden && !(computer.obj_flags & EMAGGED))
return FALSE
if(to_check.special && !to_check.special_enabled)
return FALSE
if(to_check.drop_pod_only)
return FALSE
if(to_check.goody)
return FALSE
return TRUE
/// Looks through all possible departments and finds one this ID card "corresponds" to.
/datum/computer_file/program/department_order/proc/find_department_to_link(obj/item/card/id/id_card)
PROTECTED_PROC(TRUE)
if(id_card.type != /obj/item/card/id/advanced/silver)
// I don't want to introduce weird "access order" behavior with Captain's ID / Chameleon ids / etc, so only silver IDs work
return null
var/list/access_to_depts = list()
for(var/datum/job_department/department as anything in department_cooldowns)
access_to_depts[initial(department.head_of_staff_access)] = department
for(var/access_key in id_card.GetAccess())
if(access_to_depts[access_key])
return access_to_depts[access_key]
return null
/datum/computer_file/program/department_order/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state)
. = ..()
if(.)
return .
var/mob/living/orderer = ui.user
if(!istype(orderer))
return .
if(action == "link")
if(!isnull(linked_department))
return TRUE
var/new_dept_type = find_department_to_link(computer.computer_id_slot)
if(isnull(new_dept_type))
computer.physical.balloon_alert(orderer, "no department found!")
playsound(computer, 'sound/machines/buzz-sigh.ogg', 30, TRUE)
else
computer.physical.balloon_alert(orderer, "linked")
playsound(computer, 'sound/machines/ping.ogg', 30, TRUE)
set_linked_department(new_dept_type)
return TRUE
if(isnull(linked_department))
return TRUE
var/obj/item/card/id/id_card = computer.computer_id_slot || orderer.get_idcard(hand_first = TRUE)
var/list/id_card_access = id_card?.GetAccess() || list()
if(length(use_access & id_card_access) <= 0)
computer.physical.balloon_alert(orderer, "access denied!")
playsound(computer, 'sound/machines/buzz-sigh.ogg', 30, TRUE)
return TRUE
if(action == "override_order")
if(isnull(department_order) || !(department_order in SSshuttle.shopping_list))
return TRUE
if(length(download_access & id_card_access) <= 0)
computer.physical.balloon_alert(orderer, "requires head of staff access!")
playsound(computer, 'sound/machines/buzz-sigh.ogg', 30, TRUE)
return TRUE
department_cooldowns[linked_department] = 0
SSshuttle.shopping_list -= department_order
department_order = null
UnregisterSignal(SSshuttle, COMSIG_SUPPLY_SHUTTLE_BUY)
return TRUE
if(department_cooldowns[linked_department] > world.time)
return TRUE
submit_order(orderer, params["id"])
return TRUE
/datum/computer_file/program/department_order/proc/submit_order(mob/living/orderer, id)
id = text2path(id) || id
var/datum/job_department/linked_department_real = SSjob.get_department_type(linked_department)
var/datum/supply_pack/pack = SSshuttle.supply_packs[id]
if(isnull(pack))
computer.physical.say("Something went wrong!")
CRASH("requested supply pack id \"[id]\" not found!")
if(!can_see_pack(pack) || !(pack.group in linked_department_real.associated_cargo_groups))
return
var/name = "*None Provided*"
var/rank = "*None Provided*"
var/ckey = orderer.ckey
if(ishuman(orderer))
var/mob/living/carbon/human/human_orderer = orderer
name = human_orderer.get_authentification_name()
rank = human_orderer.get_assignment(hand_first = TRUE)
else if(HAS_SILICON_ACCESS(orderer))
name = orderer.real_name
rank = "Silicon"
var/already_signalled = !!department_order
var/chosen_delivery_area
for(var/delivery_area_type in linked_department_real.department_delivery_areas)
if(GLOB.areas_by_type[delivery_area_type])
chosen_delivery_area = delivery_area_type
break
if(SSshuttle.supply.get_order_count(pack) == OVER_ORDER_LIMIT)
playsound(computer, 'sound/machines/buzz-sigh.ogg', 50, FALSE)
computer.physical.say("ERROR: No more then [CARGO_MAX_ORDER] of any pack may be ordered at once!")
return
department_order = new(
pack = pack,
orderer = name,
orderer_rank = rank,
orderer_ckey = ckey,
reason = "Departmental Order",
paying_account = null,
department_destination = chosen_delivery_area,
coupon = null,
manifest_can_fail = FALSE,
)
SSshuttle.shopping_list += department_order
if(!already_signalled)
RegisterSignal(SSshuttle, COMSIG_SUPPLY_SHUTTLE_BUY, PROC_REF(finalize_department_order))
computer.physical.say("Order processed. Cargo will deliver the crate when it comes in on their shuttle. NOTICE: Heads of staff may override the order.")
calculate_cooldown(pack.cost)
///signal when the supply shuttle begins to spawn orders. we forget the current order preventing it from being overridden (since it's already past the point of no return on undoing the order)
/datum/computer_file/program/department_order/proc/finalize_department_order(datum/subsystem)
SIGNAL_HANDLER
if(!isnull(department_order) && (department_order in SSshuttle.shopping_list))
department_order = null
UnregisterSignal(subsystem, COMSIG_SUPPLY_SHUTTLE_BUY)
/datum/computer_file/program/department_order/proc/calculate_cooldown(credits)
//minimum almost the lowest value of a crate
var/min = CARGO_CRATE_VALUE * 1.6
//maximum fairly expensive crate at 3000
var/max = CARGO_CRATE_VALUE * 15
credits = clamp(credits, min, max)
var/time_y = (credits - min)/(max - min) + 1 //convert to between 1 and 2
time_y = 10 MINUTES * time_y
department_cooldowns[linked_department] = world.time + time_y
/datum/computer_file/program/department_order/process_tick(seconds_per_tick)
if(!check_cooldown() || alert_silenced || !alert_able)
return
radio?.talk_into(computer, "Order cooldown has expired! A new order may now be placed!", radio_channel)
computer.alert_call(src, "Order cooldown expired!", 'sound/machines/ping.ogg')
/// Checks if the cooldown is up and resets it if so.
/datum/computer_file/program/department_order/proc/check_cooldown()
if(department_cooldowns[linked_department] > 0 && department_cooldowns[linked_department] <= world.time)
department_cooldowns[linked_department] = 0
return TRUE
return FALSE
@@ -9,7 +9,7 @@
filename = "nt_messenger"
filedesc = "Direct Messenger"
downloader_category = PROGRAM_CATEGORY_DEVICE
program_open_overlay = "command"
program_open_overlay = "text"
extended_desc = "This program allows old-school communication with other modular devices."
size = 0
undeletable = TRUE // It comes by default in tablets, can't be downloaded, takes no space and should obviously not be able to be deleted.
@@ -14,7 +14,7 @@
/// More detailed information about each item (mainly, how much of each should exist) is set on a per item basis
/datum/unit_test/required_map_items/proc/setup_expected_types()
expected_types += subtypesof(/obj/item/stamp/head)
expected_types += subtypesof(/obj/machinery/computer/department_orders)
expected_types += subtypesof(/obj/machinery/modular_computer/preset/cargochat)
expected_types += /mob/living/basic/parrot/poly
expected_types += /mob/living/basic/pet/dog/corgi/ian
Binary file not shown.

Before

Width:  |  Height:  |  Size: 131 KiB

After

Width:  |  Height:  |  Size: 134 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 84 KiB

After

Width:  |  Height:  |  Size: 92 KiB

+1 -1
View File
@@ -3525,7 +3525,6 @@
#include "code\modules\cargo\bounty.dm"
#include "code\modules\cargo\centcom_podlauncher.dm"
#include "code\modules\cargo\coupon.dm"
#include "code\modules\cargo\department_order.dm"
#include "code\modules\cargo\exports.dm"
#include "code\modules\cargo\expressconsole.dm"
#include "code\modules\cargo\gondolapod.dm"
@@ -5122,6 +5121,7 @@
#include "code\modules\modular_computers\file_system\programs\cargoship.dm"
#include "code\modules\modular_computers\file_system\programs\coupon.dm"
#include "code\modules\modular_computers\file_system\programs\crewmanifest.dm"
#include "code\modules\modular_computers\file_system\programs\dept_order.dm"
#include "code\modules\modular_computers\file_system\programs\emojipedia.dm"
#include "code\modules\modular_computers\file_system\programs\file_browser.dm"
#include "code\modules\modular_computers\file_system\programs\frontier.dm"
@@ -3,6 +3,7 @@ import { useState } from 'react';
import { useBackend } from '../backend';
import {
Blink,
Box,
Button,
Dimmer,
@@ -13,17 +14,18 @@ import {
Tabs,
Tooltip,
} from '../components';
import { Window } from '../layouts';
import { NtosWindow } from '../layouts';
// 15x crate value
const COST_UPPER_BOUND = 3000;
type typePath = string;
type Pack = {
name: string;
cost: number;
id: string;
desc: string;
goody: string;
cost: number;
id: typePath;
};
type Category = {
@@ -33,8 +35,10 @@ type Category = {
type Info = {
can_override: BooleanLike;
time_left: number;
time_left: string | null;
supplies: Category[];
no_link: BooleanLike;
id_inside: BooleanLike;
};
const CooldownEstimate = (props) => {
@@ -54,45 +58,60 @@ const CooldownEstimate = (props) => {
);
};
export const DepartmentOrders = (props) => {
export const DepartmentOrderContent = (props) => {
const { data } = useBackend<Info>();
const { time_left } = data;
const { no_link, time_left } = data;
if (!data) {
return null;
}
if (no_link) {
return <NoLinkDimmer />;
}
if (time_left) {
return <CooldownDimmer />;
}
return (
<Window title="Department Orders" width={620} height={580}>
<Window.Content>
{(!!time_left && <CooldownDimmer />) || (
<Stack vertical fill>
<Stack.Item grow>
<Stack fill vertical>
<Stack.Item>
<NoticeBox info>
As employees of Nanotrasen, the selection of orders here are
completely free of charge, only incurring a cooldown on the
service. Cheaper items will make you wait for less time
before Nanotrasen allows another purchase, to encourage
tasteful spending.
</NoticeBox>
</Stack.Item>
<Stack.Item grow>
<DepartmentCatalog />
</Stack.Item>
</Stack>
</Stack.Item>
</Stack>
)}
</Window.Content>
</Window>
<Stack vertical fill>
<Stack.Item grow>
<Stack fill vertical>
<Stack.Item>
<NoticeBox info>
As employees of Nanotrasen, the selection of orders here are
completely free of charge, only incurring a cooldown on the
service. Cheaper items will make you wait for less time before
Nanotrasen allows another purchase, to encourage tasteful
spending.
</NoticeBox>
</Stack.Item>
<Stack.Item grow>
<DepartmentCatalog />
</Stack.Item>
</Stack>
</Stack.Item>
</Stack>
);
};
const CooldownDimmer = (props) => {
export const NtosDeptOrder = () => {
return (
<NtosWindow title="Department Orders" width={620} height={580}>
<NtosWindow.Content>
<DepartmentOrderContent />
</NtosWindow.Content>
</NtosWindow>
);
};
const CooldownDimmer = () => {
const { act, data } = useBackend<Info>();
const { can_override, time_left } = data;
return (
<Dimmer>
<Stack vertical>
<Stack.Item textAlign="center">
<Icon color="orange" name="route" size={20} />
<Icon color="bug" name="route" size={20} />
</Stack.Item>
<Stack.Item fontSize="18px" color="orange">
Ready for another order in {time_left}...
@@ -119,7 +138,31 @@ const CooldownDimmer = (props) => {
);
};
const DepartmentCatalog = (props) => {
const NoLinkDimmer = () => {
const { act, data } = useBackend<Info>();
const { id_inside } = data;
return (
<Dimmer>
<Stack vertical>
<Stack.Item textAlign="center">
<Blink>
<Icon color="red" name="exclamation" size={16} opacity={0.8} />
</Blink>
</Stack.Item>
<Stack.Item textAlign="center" fontSize="22px" color="red">
Unlinked!
</Stack.Item>
<Stack.Item textAlign="center" fontSize="14px" color="red">
<Button disabled={!id_inside} onClick={() => act('link')}>
Please insert a silver Head of Staff ID and press to continue.
</Button>
</Stack.Item>
</Stack>
</Dimmer>
);
};
const DepartmentCatalog = () => {
const { act, data } = useBackend<Info>();
const { supplies } = data;
const [tabCategory, setTabCategory] = useState(supplies[0]);