diff --git a/_maps/map_files/Birdshot/birdshot.dmm b/_maps/map_files/Birdshot/birdshot.dmm
index 0a770985080d5..9de921e10feb6 100644
--- a/_maps/map_files/Birdshot/birdshot.dmm
+++ b/_maps/map_files/Birdshot/birdshot.dmm
@@ -2661,7 +2661,7 @@
dir = 1
},
/turf/open/floor/iron,
-/area/station/holodeck/rec_center)
+/area/station/commons/fitness/recreation/entertainment)
"baP" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -4949,7 +4949,7 @@
dir = 4
},
/turf/open/floor/iron,
-/area/station/holodeck/rec_center)
+/area/station/commons/fitness/recreation/entertainment)
"bWs" = (
/obj/effect/turf_decal/stripes/line{
dir = 6
@@ -7555,7 +7555,7 @@
/obj/structure/chair/stool/bar/directional/south,
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron,
-/area/station/holodeck/rec_center)
+/area/station/commons/fitness/recreation/entertainment)
"cUH" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
dir = 1
@@ -7763,11 +7763,10 @@
dir = 4
},
/obj/effect/turf_decal/tile/neutral/opposingcorners,
-/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron,
-/area/station/holodeck/rec_center)
+/area/station/commons/fitness/recreation/entertainment)
"cYt" = (
/obj/structure/cable,
/turf/open/floor/plating,
@@ -8400,7 +8399,7 @@
/obj/structure/chair/stool/bar/directional/south,
/obj/effect/landmark/start/hangover,
/turf/open/floor/iron,
-/area/station/holodeck/rec_center)
+/area/station/commons/fitness/recreation/entertainment)
"diI" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/effect/turf_decal/tile/neutral,
@@ -12629,7 +12628,7 @@
/obj/machinery/airalarm/directional/east,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron,
-/area/station/holodeck/rec_center)
+/area/station/commons/fitness/recreation/entertainment)
"eOY" = (
/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{
dir = 4
@@ -16692,7 +16691,7 @@
},
/obj/effect/turf_decal/tile/neutral/opposingcorners,
/turf/open/floor/iron,
-/area/station/holodeck/rec_center)
+/area/station/commons/fitness/recreation/entertainment)
"gjE" = (
/obj/structure/cable,
/obj/effect/decal/cleanable/dirt/dust,
@@ -21001,7 +21000,7 @@
/obj/effect/decal/cleanable/dirt,
/obj/effect/landmark/start/hangover,
/turf/open/floor/iron,
-/area/station/holodeck/rec_center)
+/area/station/commons/fitness/recreation/entertainment)
"hED" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment,
@@ -22215,7 +22214,7 @@
dir = 4
},
/turf/open/floor/iron,
-/area/station/holodeck/rec_center)
+/area/station/commons/fitness/recreation/entertainment)
"ibI" = (
/obj/effect/turf_decal/siding/white/corner{
dir = 8
@@ -28260,7 +28259,7 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/camera/autoname/directional/east,
/turf/open/floor/iron,
-/area/station/holodeck/rec_center)
+/area/station/commons/fitness/recreation/entertainment)
"jTD" = (
/obj/machinery/atmospherics/components/trinary/filter/atmos/o2{
dir = 8
@@ -32344,6 +32343,15 @@
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/plating/rust,
/area/station/maintenance/department/engine/atmos)
+"ljc" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/plating,
+/area/station/maintenance/starboard/fore)
"ljg" = (
/obj/effect/turf_decal/weather/snow/corner{
dir = 1
@@ -38208,10 +38216,6 @@
},
/turf/open/floor/iron,
/area/station/security)
-"ngd" = (
-/obj/effect/turf_decal/tile/neutral/opposingcorners,
-/turf/open/floor/iron,
-/area/station/holodeck/rec_center)
"ngq" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment{
@@ -39118,7 +39122,7 @@
},
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron,
-/area/station/holodeck/rec_center)
+/area/station/commons/fitness/recreation/entertainment)
"nuY" = (
/obj/structure/broken_flooring/pile/directional/east,
/obj/structure/alien/weeds/node,
@@ -45899,9 +45903,6 @@
},
/turf/open/floor/wood/parquet,
/area/station/service/library)
-"pOT" = (
-/turf/closed/wall,
-/area/station/holodeck/rec_center)
"pOX" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
dir = 1
@@ -46147,11 +46148,10 @@
name = "Maintenance"
},
/obj/effect/mapping_helpers/airlock/access/any/service/maintenance,
-/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/plating,
-/area/station/holodeck/rec_center)
+/area/station/commons/fitness/recreation/entertainment)
"pTq" = (
/obj/machinery/door/airlock/maintenance{
name = "Crematorium Maintenance"
@@ -46177,7 +46177,7 @@
/obj/effect/spawner/random/entertainment/arcade,
/obj/effect/decal/cleanable/cobweb/cobweb2,
/turf/open/floor/iron,
-/area/station/holodeck/rec_center)
+/area/station/commons/fitness/recreation/entertainment)
"pTZ" = (
/obj/effect/turf_decal/siding/wideplating/dark{
dir = 8
@@ -46497,7 +46497,6 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
-/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/plating,
@@ -52948,7 +52947,7 @@
/obj/effect/turf_decal/tile/neutral/opposingcorners,
/obj/structure/chair/stool/bar/directional/north,
/turf/open/floor/iron,
-/area/station/holodeck/rec_center)
+/area/station/commons/fitness/recreation/entertainment)
"sjl" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -53636,7 +53635,7 @@
},
/obj/effect/landmark/start/hangover,
/turf/open/floor/iron,
-/area/station/holodeck/rec_center)
+/area/station/commons/fitness/recreation/entertainment)
"sul" = (
/obj/effect/turf_decal/siding{
dir = 1
@@ -56207,11 +56206,9 @@
"tlJ" = (
/obj/effect/turf_decal/tile/neutral/opposingcorners,
/obj/item/kirbyplants/random,
-/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/power/apc/auto_name/directional/east,
/turf/open/floor/iron,
-/area/station/holodeck/rec_center)
+/area/station/commons/fitness/recreation/entertainment)
"tlX" = (
/obj/structure/cable,
/obj/effect/turf_decal/tile/blue/fourcorners,
@@ -59975,7 +59972,7 @@
/obj/effect/turf_decal/tile/neutral/opposingcorners,
/obj/effect/spawner/random/entertainment/arcade,
/turf/open/floor/iron,
-/area/station/holodeck/rec_center)
+/area/station/commons/fitness/recreation/entertainment)
"uwB" = (
/obj/effect/turf_decal/tile/dark_red/half/contrasted{
dir = 4
@@ -112298,13 +112295,13 @@ cvk
nFW
uvG
siN
-ngd
+jpp
nuV
sue
-ngd
+jpp
cUB
baO
-pOT
+pzd
gMz
rem
rQA
@@ -112557,11 +112554,11 @@ pTA
hEw
bWp
gjn
-ngd
+jpp
ibF
diG
baO
-pOT
+pzd
ycQ
rem
nvB
@@ -112810,13 +112807,13 @@ eav
eav
nFW
nFW
-pOT
-pOT
+pzd
+pzd
tlJ
cYp
jTC
eOX
-pOT
+pzd
xQJ
xQJ
xQJ
@@ -113068,12 +113065,12 @@ tLj
wOp
fsq
iRl
-pOT
-pOT
+pzd
+pzd
pTk
-pOT
-pOT
-pOT
+pzd
+pzd
+pzd
xqs
xMO
xQJ
@@ -113327,7 +113324,7 @@ fLg
tHi
tfc
wOp
-mTc
+ljc
xQJ
ejn
vJx
@@ -113584,7 +113581,7 @@ pot
rUq
lyq
wOp
-mTc
+ljc
xQJ
mbV
vJx
diff --git a/_maps/map_files/IceBoxStation/IceBoxStation.dmm b/_maps/map_files/IceBoxStation/IceBoxStation.dmm
index 31478a156f20b..3737277c465ff 100644
--- a/_maps/map_files/IceBoxStation/IceBoxStation.dmm
+++ b/_maps/map_files/IceBoxStation/IceBoxStation.dmm
@@ -964,7 +964,7 @@
/obj/structure/cable,
/obj/effect/turf_decal/tile/neutral/fourcorners,
/obj/machinery/light/small/directional/north,
-/obj/machinery/computer/security/telescreen/engine/directional/north,
+/obj/machinery/incident_display/delam/directional/north,
/turf/open/floor/iron/dark,
/area/station/engineering/engine_smes)
"apS" = (
@@ -15758,6 +15758,7 @@
/obj/item/analyzer,
/obj/item/pipe_dispenser,
/obj/item/flashlight,
+/obj/machinery/incident_display/delam/directional/north,
/turf/open/floor/engine,
/area/station/engineering/supermatter/room)
"eEm" = (
@@ -29665,7 +29666,7 @@
},
/obj/machinery/holopad,
/obj/effect/landmark/start/depsec/medical,
-/obj/machinery/computer/security/telescreen/cmo/directional/east,
+/obj/machinery/computer/security/telescreen/med_sec/directional/east,
/turf/open/floor/iron/dark/smooth_large,
/area/station/security/checkpoint/medical)
"iTJ" = (
@@ -41854,7 +41855,6 @@
/obj/effect/turf_decal/tile/blue/half/contrasted{
dir = 1
},
-/obj/machinery/incident_display/bridge/directional/north,
/turf/open/floor/iron,
/area/station/hallway/primary/central)
"mDw" = (
@@ -58115,6 +58115,7 @@
/obj/item/stock_parts/power_store/cell/high/empty,
/obj/machinery/cell_charger,
/obj/effect/turf_decal/tile/brown/fourcorners,
+/obj/item/radio/intercom/directional/west,
/turf/open/floor/iron/dark,
/area/station/engineering/lobby)
"rlS" = (
@@ -63820,7 +63821,7 @@
/turf/open/floor/iron/white,
/area/station/medical/chemistry)
"sSS" = (
-/obj/item/radio/intercom/directional/north,
+/obj/machinery/incident_display/delam/directional/north,
/turf/open/floor/iron/dark,
/area/station/engineering/lobby)
"sTe" = (
@@ -67390,7 +67391,6 @@
/obj/machinery/modular_computer/preset/civilian{
dir = 8
},
-/obj/structure/sign/poster/official/build/directional/north,
/turf/open/floor/iron/dark,
/area/station/engineering/lobby)
"tZR" = (
@@ -74289,8 +74289,8 @@
/area/station/medical/virology)
"wiM" = (
/obj/machinery/computer/station_alert,
-/obj/item/radio/intercom/directional/north,
/obj/effect/turf_decal/tile/neutral/fourcorners,
+/obj/machinery/computer/security/telescreen/engine/directional/north,
/turf/open/floor/iron/dark,
/area/station/engineering/engine_smes)
"wiO" = (
@@ -79384,9 +79384,14 @@
/turf/open/floor/iron/dark,
/area/station/medical/morgue)
"xFM" = (
-/obj/machinery/incident_display/delam,
-/turf/closed/wall/r_wall,
-/area/station/engineering/supermatter/room)
+/obj/effect/turf_decal/bot{
+ dir = 1
+ },
+/obj/machinery/suit_storage_unit/engine,
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/obj/item/radio/intercom/directional/west,
+/turf/open/floor/iron/dark/textured,
+/area/station/engineering/engine_smes)
"xFT" = (
/obj/effect/turf_decal/trimline/green/filled/corner,
/obj/effect/turf_decal/trimline/blue/filled/warning/corner,
@@ -240599,7 +240604,7 @@ gTK
gTK
myX
sSJ
-xFM
+gka
eEh
fab
eDC
@@ -240852,7 +240857,7 @@ mNY
wiM
tMD
ehJ
-rpF
+xFM
twt
tXB
sSJ
diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm
index 83eb9c4b5e81d..efec99c47fc04 100644
--- a/_maps/map_files/MetaStation/MetaStation.dmm
+++ b/_maps/map_files/MetaStation/MetaStation.dmm
@@ -10596,9 +10596,7 @@
},
/obj/effect/turf_decal/tile/red/fourcorners,
/obj/machinery/light/small/directional/west,
-/obj/machinery/computer/security/telescreen/cmo/directional/west{
- name = "Medbay Monitor"
- },
+/obj/machinery/computer/security/telescreen/med_sec/directional/west,
/turf/open/floor/iron/dark,
/area/station/security/checkpoint/medical)
"dQO" = (
diff --git a/_maps/map_files/Mining/Lavaland.dmm b/_maps/map_files/Mining/Lavaland.dmm
index 7f0a84010e9f0..01234def93289 100644
--- a/_maps/map_files/Mining/Lavaland.dmm
+++ b/_maps/map_files/Mining/Lavaland.dmm
@@ -3896,11 +3896,11 @@
/area/mine/lounge)
"uT" = (
/obj/structure/lattice/catwalk,
-/obj/machinery/atmospherics/components/unary/passive_vent/layer2{
+/obj/machinery/atmospherics/components/unary/outlet_injector/layer2{
dir = 1
},
/turf/open/misc/asteroid/basalt/lava_land_surface,
-/area/lavaland/surface/outdoors)
+/area/mine/maintenance/service)
"uU" = (
/turf/closed/mineral/random/labormineral/volcanic,
/area/lavaland/surface/outdoors)
diff --git a/_maps/map_files/tramstation/tramstation.dmm b/_maps/map_files/tramstation/tramstation.dmm
index f168e52c6886d..b4d767bd2ddb8 100644
--- a/_maps/map_files/tramstation/tramstation.dmm
+++ b/_maps/map_files/tramstation/tramstation.dmm
@@ -8220,6 +8220,7 @@
},
/obj/machinery/vending/modularpc,
/obj/structure/table,
+/obj/machinery/light/small/directional/north,
/turf/open/floor/iron,
/area/station/commons/storage/primary)
"bNI" = (
@@ -9748,6 +9749,7 @@
pixel_y = 11
},
/obj/item/stock_parts/power_store/cell/high,
+/obj/machinery/light/small/directional/south,
/turf/open/floor/iron,
/area/station/commons/storage/primary)
"cpl" = (
@@ -16419,6 +16421,7 @@
},
/obj/structure/sign/clock/directional/east,
/obj/effect/landmark/event_spawn,
+/obj/machinery/light/directional/east,
/turf/open/floor/iron/smooth,
/area/station/commons/storage/primary)
"eHr" = (
diff --git a/_maps/map_files/wawastation/wawastation.dmm b/_maps/map_files/wawastation/wawastation.dmm
index 6cfd1418f7f7f..5673421142ac1 100644
--- a/_maps/map_files/wawastation/wawastation.dmm
+++ b/_maps/map_files/wawastation/wawastation.dmm
@@ -1,4 +1,9 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"aam" = (
+/obj/effect/spawner/structure/window/reinforced/plasma,
+/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible,
+/turf/open/floor/plating,
+/area/station/science/ordnance)
"aas" = (
/obj/structure/chair/office/tactical{
dir = 4
@@ -169,6 +174,12 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/visible,
/turf/open/floor/engine,
/area/station/engineering/supermatter/room)
+"acN" = (
+/obj/structure/table,
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/obj/item/holosign_creator/atmos,
+/turf/open/floor/iron/dark,
+/area/station/science/ordnance)
"acY" = (
/obj/structure/cable,
/obj/structure/railing/corner{
@@ -448,18 +459,6 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/plating,
/area/station/science/xenobiology)
-"agM" = (
-/obj/machinery/door/poddoor/shutters/window/preopen{
- name = "Security Shutters";
- id = "xbprotect";
- dir = 8
- },
-/obj/structure/cable,
-/obj/machinery/door/firedoor,
-/obj/machinery/firealarm/directional/north,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/catwalk_floor/iron_white,
-/area/station/science/xenobiology)
"agO" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/broken_flooring/pile/directional/east,
@@ -594,6 +593,18 @@
},
/turf/open/floor/plating,
/area/station/science/ordnance)
+"aju" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/duct,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden,
+/obj/effect/turf_decal/tile/blue/fourcorners,
+/turf/open/floor/catwalk_floor/iron_white,
+/area/station/medical/treatment_center)
"ajK" = (
/obj/machinery/door/firedoor,
/obj/effect/landmark/navigate_destination/bar,
@@ -1040,23 +1051,6 @@
/obj/item/lighter,
/turf/open/floor/carpet/red,
/area/station/command/heads_quarters/qm)
-"aqz" = (
-/obj/effect/turf_decal/caution/stand_clear/red,
-/obj/effect/turf_decal/stripes/line,
-/obj/machinery/door/poddoor/shutters/window/preopen{
- id = "ordstorage"
- },
-/obj/effect/turf_decal/stripes/corner{
- dir = 1
- },
-/turf/open/floor/iron/white,
-/area/station/science/ordnance/storage)
-"aqG" = (
-/obj/structure/cable,
-/obj/effect/turf_decal/siding/purple/corner,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/turf/open/floor/catwalk_floor/iron_white,
-/area/station/science/xenobiology)
"aqM" = (
/obj/effect/turf_decal/tile/purple/opposingcorners,
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
@@ -1157,18 +1151,6 @@
/obj/structure/closet/firecloset,
/turf/open/floor/iron/white,
/area/station/hallway/secondary/entry)
-"atb" = (
-/obj/machinery/atmospherics/components/unary/portables_connector/visible{
- dir = 1
- },
-/obj/effect/turf_decal/box/red,
-/obj/structure/disposalpipe/segment{
- dir = 6
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/iron/dark,
-/area/station/science/ordnance)
"ath" = (
/obj/machinery/door/window/left/directional/west,
/turf/open/floor/grass,
@@ -1195,6 +1177,10 @@
/obj/machinery/light/small/directional/south,
/turf/open/floor/plating,
/area/station/maintenance/aft/upper)
+"atT" = (
+/obj/effect/decal/cleanable/dirt/dust,
+/turf/open/floor/iron/white,
+/area/station/maintenance/department/medical)
"atX" = (
/obj/effect/spawner/random/structure/closet_maintenance,
/turf/open/floor/plating,
@@ -1374,6 +1360,10 @@
/obj/structure/sign/chalkboard_menu,
/turf/closed/wall,
/area/station/service/cafeteria)
+"awy" = (
+/obj/structure/cable,
+/turf/open/floor/catwalk_floor/iron_white,
+/area/station/science/xenobiology)
"awB" = (
/obj/effect/turf_decal/tile/neutral/fourcorners,
/obj/structure/table,
@@ -1854,6 +1844,17 @@
},
/turf/open/floor/circuit,
/area/station/cargo/bitrunning/den)
+"aEL" = (
+/obj/machinery/airalarm/directional/east,
+/obj/structure/table/reinforced,
+/obj/item/stack/sheet/iron/fifty,
+/obj/item/storage/toolbox/mechanical,
+/obj/item/clothing/head/utility/welding,
+/obj/effect/turf_decal/siding/purple{
+ dir = 8
+ },
+/turf/open/floor/iron,
+/area/station/science/robotics/mechbay)
"aEP" = (
/obj/effect/mapping_helpers/airlock/access/all/command/captain,
/obj/machinery/door/airlock/command{
@@ -1874,6 +1875,15 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/wood/tile,
/area/station/service/bar)
+"aFb" = (
+/obj/machinery/power/apc/auto_name/directional/south,
+/obj/structure/cable,
+/obj/effect/mapping_helpers/apc/cell_5k,
+/obj/effect/mapping_helpers/apc/full_charge,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/catwalk_floor/iron_white,
+/area/station/science/xenobiology)
"aFp" = (
/obj/machinery/light/directional/south,
/obj/structure/dresser,
@@ -2318,6 +2328,14 @@
/obj/machinery/airalarm/directional/north,
/turf/open/floor/iron/dark,
/area/station/security/prison/safe)
+"aMf" = (
+/obj/structure/cable,
+/obj/effect/turf_decal/siding/purple{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/catwalk_floor/iron_white,
+/area/station/science/xenobiology)
"aMx" = (
/obj/structure/cable,
/obj/machinery/camera/autoname/motion/directional/south{
@@ -2394,15 +2412,6 @@
/obj/structure/cable,
/turf/open/floor/iron/white,
/area/station/science/research)
-"aNF" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/turf/open/floor/catwalk_floor/iron_white,
-/area/station/science/lab)
"aNH" = (
/obj/machinery/door/airlock/security/glass{
name = "Security Entry";
@@ -2510,15 +2519,6 @@
/obj/effect/spawner/structure/window/plasma,
/turf/open/floor/engine,
/area/station/medical/chemistry)
-"aPG" = (
-/obj/machinery/door/poddoor/shutters/window/preopen{
- id = "ordstorage"
- },
-/obj/effect/turf_decal/stripes/line,
-/obj/effect/turf_decal/caution/stand_clear/red,
-/obj/structure/cable,
-/turf/open/floor/iron/white,
-/area/station/science/ordnance/storage)
"aPI" = (
/obj/machinery/meter,
/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{
@@ -2850,15 +2850,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/dark,
/area/station/science/ordnance)
-"aXc" = (
-/obj/machinery/power/apc/auto_name/directional/south,
-/obj/structure/cable,
-/obj/effect/mapping_helpers/apc/cell_5k,
-/obj/effect/mapping_helpers/apc/full_charge,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/catwalk_floor/iron_white,
-/area/station/science/xenobiology)
"aXg" = (
/obj/structure/railing{
dir = 10
@@ -3307,17 +3298,6 @@
},
/turf/open/misc/asteroid,
/area/station/maintenance/department/science)
-"bfq" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/machinery/atmospherics/components/unary/portables_connector/visible{
- dir = 1
- },
-/obj/effect/turf_decal/box/red,
-/obj/machinery/light/directional/south,
-/turf/open/floor/iron/dark/smooth_large,
-/area/station/science/ordnance)
"bfD" = (
/obj/effect/landmark/event_spawn,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -3395,6 +3375,10 @@
},
/turf/open/floor/iron,
/area/station/hallway/primary/central)
+"bhq" = (
+/obj/item/radio/intercom/directional/south,
+/turf/open/floor/catwalk_floor/iron_white,
+/area/station/science/ordnance/testlab)
"bhv" = (
/obj/structure/window/reinforced/plasma/spawner/directional/south,
/obj/machinery/power/energy_accumulator/tesla_coil/anchored,
@@ -3624,6 +3608,15 @@
"bmp" = (
/turf/closed/wall,
/area/station/service/theater)
+"bmr" = (
+/obj/machinery/door/poddoor/shutters/window/preopen{
+ id = "ordstorage"
+ },
+/obj/effect/turf_decal/stripes/line,
+/obj/effect/turf_decal/caution/stand_clear/red,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/iron/white,
+/area/station/science/ordnance/storage)
"bmu" = (
/obj/effect/turf_decal/sand/plating,
/obj/effect/spawner/random/structure/crate,
@@ -3769,10 +3762,6 @@
},
/turf/open/floor/iron,
/area/station/security/interrogation)
-"bqs" = (
-/obj/structure/lattice/catwalk,
-/turf/open/openspace/xenobio,
-/area/station/science/xenobiology)
"bqz" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/components/unary/portables_connector/visible/layer2,
@@ -4609,6 +4598,15 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron,
/area/station/hallway/primary/central)
+"bEz" = (
+/obj/structure/closet/crate/science,
+/obj/item/wrench,
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/machinery/firealarm/directional/west,
+/obj/effect/spawner/random/maintenance,
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/iron/dark/smooth_large,
+/area/station/science/ordnance)
"bEW" = (
/obj/structure/table/wood,
/obj/effect/spawner/random/decoration/microwave{
@@ -4873,15 +4871,6 @@
/obj/machinery/door/window/right/directional/west,
/turf/open/floor/grass,
/area/station/service/hydroponics/garden)
-"bIP" = (
-/obj/effect/turf_decal/tile/neutral/opposingcorners{
- dir = 1
- },
-/obj/effect/turf_decal/siding/purple{
- dir = 4
- },
-/turf/open/floor/iron/dark,
-/area/station/command/heads_quarters/rd)
"bJc" = (
/obj/structure/railing/corner,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -5054,6 +5043,21 @@
"bND" = (
/turf/open/floor/iron,
/area/station/engineering/atmos)
+"bNG" = (
+/obj/machinery/door/airlock/research{
+ autoclose = 0;
+ frequency = 1449;
+ id_tag = "xeno_airlock_interior";
+ name = "Xenobiology Lab Internal Airlock"
+ },
+/obj/effect/mapping_helpers/airlock/locked,
+/obj/structure/cable,
+/obj/effect/mapping_helpers/airlock/access/all/science/xenobio,
+/obj/machinery/door/firedoor,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/catwalk_floor/iron_white,
+/area/station/science/xenobiology)
"bNI" = (
/obj/structure/showcase/cyborg/old{
dir = 8;
@@ -5543,6 +5547,12 @@
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/plating,
/area/station/maintenance/department/cargo)
+"bXe" = (
+/obj/structure/cable,
+/obj/machinery/airalarm/directional/north,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/catwalk_floor/iron_white,
+/area/station/science/xenobiology)
"bXx" = (
/obj/machinery/camera/autoname/directional/south,
/obj/machinery/airalarm/directional/south,
@@ -5570,10 +5580,6 @@
},
/turf/open/floor/iron,
/area/station/engineering/atmos)
-"bXM" = (
-/obj/machinery/camera/autoname/directional/west,
-/turf/open/floor/catwalk_floor/iron_white,
-/area/station/science/ordnance/testlab)
"bYa" = (
/obj/structure/filingcabinet/employment,
/turf/open/floor/carpet,
@@ -5704,10 +5710,6 @@
},
/turf/open/floor/iron/white,
/area/station/science/lobby)
-"caH" = (
-/obj/structure/sign/warning/directional/west,
-/turf/closed/wall/rust,
-/area/station/medical/chemistry/minisat)
"caP" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
dir = 1
@@ -6308,6 +6310,16 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/plating,
/area/station/maintenance/department/engine)
+"cnd" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/duct,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden,
+/turf/open/floor/catwalk_floor/iron_white,
+/area/station/medical/treatment_center)
"cnm" = (
/obj/effect/turf_decal/siding/wood/corner{
dir = 4
@@ -6420,12 +6432,6 @@
dir = 4
},
/area/station/hallway/secondary/exit/departure_lounge)
-"cqf" = (
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/obj/effect/mapping_helpers/broken_floor,
-/obj/effect/decal/cleanable/dirt/dust,
-/turf/open/floor/iron/dark,
-/area/station/science/ordnance)
"cqm" = (
/obj/structure/cable,
/obj/machinery/camera/autoname/directional/south{
@@ -6462,12 +6468,6 @@
},
/turf/open/floor/plating,
/area/station/maintenance/disposal)
-"cra" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/turf/open/floor/iron/white,
-/area/station/science/ordnance/testlab)
"crb" = (
/obj/machinery/door/poddoor/shutters/window{
id = "armory";
@@ -6609,25 +6609,6 @@
"csW" = (
/turf/open/floor/carpet/executive,
/area/station/command/heads_quarters/captain/private)
-"ctf" = (
-/obj/effect/mapping_helpers/broken_floor,
-/obj/effect/decal/cleanable/dirt/dust,
-/obj/structure/table,
-/obj/item/reagent_containers/cup/beaker{
- pixel_x = -6;
- pixel_y = 4
- },
-/obj/item/reagent_containers/syringe{
- pixel_x = 16;
- pixel_y = 1
- },
-/obj/item/reagent_containers/syringe{
- pixel_x = 8;
- pixel_y = 10
- },
-/obj/structure/sign/poster/contraband/random/directional/north,
-/turf/open/floor/iron/white,
-/area/station/maintenance/department/medical)
"cti" = (
/obj/effect/turf_decal/stripes/line{
dir = 9
@@ -6881,6 +6862,15 @@
},
/turf/open/floor/iron/dark,
/area/station/science/ordnance)
+"czC" = (
+/obj/effect/turf_decal/bot,
+/obj/machinery/button/door/directional/east{
+ name = "shutter control";
+ id = "ordauxgarage"
+ },
+/obj/structure/closet/firecloset,
+/turf/open/floor/plating,
+/area/station/science/ordnance)
"czD" = (
/obj/item/stack/tile/iron/white,
/obj/effect/decal/cleanable/dirt/dust,
@@ -6928,6 +6918,17 @@
/obj/effect/landmark/start/botanist,
/turf/open/floor/iron,
/area/station/service/hydroponics)
+"cAq" = (
+/obj/structure/cable,
+/obj/machinery/button/door/directional/east{
+ name = "shutter control";
+ id = "xbprotect"
+ },
+/obj/structure/window/reinforced/spawner/directional/south,
+/obj/item/kirbyplants/random,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/catwalk_floor/iron_white,
+/area/station/science/xenobiology)
"cAr" = (
/obj/structure/cable,
/obj/machinery/button/door/directional/north{
@@ -7016,17 +7017,6 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron,
/area/station/cargo/storage)
-"cBB" = (
-/obj/machinery/airalarm/directional/east,
-/obj/structure/table/reinforced,
-/obj/item/stack/sheet/iron/fifty,
-/obj/item/storage/toolbox/mechanical,
-/obj/item/clothing/head/utility/welding,
-/obj/effect/turf_decal/siding/purple{
- dir = 8
- },
-/turf/open/floor/iron,
-/area/station/science/robotics/mechbay)
"cBD" = (
/obj/machinery/door/airlock/grunge{
name = "Prison Forestry"
@@ -7054,6 +7044,19 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron/dark/small,
/area/station/engineering/transit_tube)
+"cCr" = (
+/obj/machinery/light/directional/north,
+/obj/structure/table,
+/obj/item/pen{
+ pixel_x = 9;
+ pixel_y = 4
+ },
+/obj/item/hand_labeler{
+ pixel_y = 10;
+ pixel_x = -13
+ },
+/turf/open/floor/glass/reinforced,
+/area/station/science/xenobiology)
"cCv" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/turf_decal/siding/white{
@@ -7342,12 +7345,6 @@
/obj/effect/spawner/random/maintenance,
/turf/open/floor/plating,
/area/station/maintenance/department/medical)
-"cIk" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 9
- },
-/turf/open/floor/iron/white,
-/area/station/science/ordnance/storage)
"cIx" = (
/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/mix_input{
dir = 4
@@ -7716,15 +7713,6 @@
"cPt" = (
/turf/closed/wall/r_wall,
/area/station/science/lab)
-"cPu" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{
- dir = 8
- },
-/turf/open/floor/iron/dark,
-/area/station/science/ordnance)
"cPx" = (
/obj/structure/table,
/obj/item/hfr_box/corner,
@@ -7803,16 +7791,6 @@
},
/turf/open/floor/engine/vacuum,
/area/station/science/ordnance/burnchamber)
-"cQx" = (
-/obj/structure/table,
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/obj/item/pipe_dispenser{
- pixel_x = 3;
- pixel_y = 7
- },
-/obj/item/pipe_dispenser,
-/turf/open/floor/iron/dark,
-/area/station/science/ordnance)
"cQK" = (
/obj/effect/turf_decal/trimline/blue/filled/line{
dir = 4
@@ -7990,6 +7968,13 @@
/obj/machinery/rnd/production/protolathe/department/science,
/turf/open/floor/iron/white,
/area/station/science/lab)
+"cUf" = (
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment{
+ dir = 5
+ },
+/turf/open/floor/catwalk_floor/iron_white,
+/area/station/science/xenobiology)
"cUk" = (
/obj/structure/disposalpipe/segment,
/turf/open/floor/iron/white,
@@ -8070,6 +8055,15 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/iron,
/area/station/engineering/main)
+"cVs" = (
+/obj/machinery/door/airlock/maintenance_hatch{
+ name = "Xenobiology Maintenance"
+ },
+/obj/effect/mapping_helpers/airlock/access/all/science/xenobio,
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/catwalk_floor/iron_white,
+/area/station/science/xenobiology)
"cVL" = (
/obj/structure/closet/firecloset,
/turf/open/floor/iron/textured,
@@ -8319,6 +8313,12 @@
/obj/effect/turf_decal/sand/plating,
/turf/open/floor/plating/reinforced/airless,
/area/space/nearstation)
+"cZs" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
+ dir = 8
+ },
+/turf/open/floor/iron/dark,
+/area/station/science/ordnance)
"cZE" = (
/turf/open/openspace,
/area/station/command/meeting_room)
@@ -8351,12 +8351,6 @@
},
/turf/open/floor/catwalk_floor/iron_dark,
/area/station/science/robotics/lab)
-"daT" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/light/small/broken/directional/north,
-/obj/machinery/atmospherics/components/tank/oxygen,
-/turf/open/floor/plating,
-/area/station/maintenance/department/science)
"dba" = (
/obj/structure/cable,
/obj/effect/turf_decal/tile/red{
@@ -8423,6 +8417,12 @@
/obj/effect/spawner/random/trash/mess,
/turf/open/floor/iron,
/area/station/maintenance/department/medical/central)
+"dcc" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/iron/white,
+/area/station/science/ordnance/testlab)
"dcf" = (
/obj/structure/table/wood,
/obj/structure/railing{
@@ -8452,10 +8452,6 @@
},
/turf/open/floor/plating,
/area/station/cargo/miningoffice)
-"dci" = (
-/obj/effect/turf_decal/tile/blue/fourcorners,
-/turf/open/floor/catwalk_floor/iron_white,
-/area/station/medical/treatment_center)
"dcl" = (
/obj/effect/turf_decal/sand/plating,
/obj/item/pickaxe,
@@ -8676,16 +8672,6 @@
},
/turf/open/floor/plating,
/area/station/medical/storage)
-"dgR" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/duct,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden,
-/turf/open/floor/catwalk_floor/iron_white,
-/area/station/medical/treatment_center)
"dgS" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -8829,23 +8815,6 @@
/obj/machinery/light/small/dim/directional/west,
/turf/open/misc/asteroid,
/area/station/hallway/secondary/entry)
-"dir" = (
-/obj/machinery/door/airlock/research/glass{
- name = "Chemistry Minisat"
- },
-/obj/effect/mapping_helpers/airlock/access/all/medical/chemistry,
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/effect/turf_decal/trimline/yellow/filled/line,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/effect/mapping_helpers/airlock/unres{
- dir = 8
- },
-/turf/open/floor/iron/white,
-/area/station/medical/chemistry/minisat)
"diz" = (
/obj/structure/cable,
/turf/open/floor/plating,
@@ -9304,6 +9273,13 @@
},
/turf/open/floor/iron,
/area/station/security/interrogation)
+"dpA" = (
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/obj/effect/mapping_helpers/broken_floor,
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/effect/landmark/blobstart,
+/turf/open/floor/iron/dark,
+/area/station/science/ordnance)
"dpH" = (
/obj/effect/turf_decal/tile/neutral/half/contrasted{
color = "#000000"
@@ -9381,21 +9357,6 @@
/obj/machinery/light/directional/north,
/turf/open/floor/iron,
/area/station/cargo/storage)
-"drx" = (
-/obj/machinery/door_buttons/airlock_controller{
- idExterior = "xeno_airlock_exterior";
- idInterior = "xeno_airlock_interior";
- idSelf = "xeno_airlock_control";
- name = "Access Console";
- pixel_x = -25;
- pixel_y = -25;
- req_access = list("xenobiology")
- },
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/catwalk_floor/iron_white,
-/area/station/science/xenobiology)
"drz" = (
/obj/effect/decal/cleanable/dirt/dust,
/obj/machinery/disposal/bin,
@@ -9707,17 +9668,6 @@
/obj/structure/cable,
/turf/open/floor/iron,
/area/station/hallway/primary/central)
-"dxZ" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/pipe/smart/simple/green/visible{
- dir = 6
- },
-/obj/item/flashlight/glowstick/blue{
- start_on = 1;
- light_range = 2
- },
-/turf/open/floor/plating,
-/area/station/maintenance/department/science)
"dyb" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
dir = 1
@@ -9870,6 +9820,12 @@
},
/turf/open/floor/iron,
/area/station/hallway/primary/central)
+"dzL" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/catwalk_floor/iron_white,
+/area/station/science/xenobiology)
"dzN" = (
/obj/effect/turf_decal/tile/neutral{
dir = 1
@@ -10019,6 +9975,12 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
/area/station/science/xenobiology)
+"dBn" = (
+/obj/structure/cable,
+/obj/effect/turf_decal/tile/dark_blue/half/contrasted,
+/obj/machinery/incident_display/bridge/directional/south,
+/turf/open/floor/iron,
+/area/station/command/bridge)
"dBp" = (
/obj/machinery/button/door/directional/west{
req_access = list("atmospherics");
@@ -10298,23 +10260,6 @@
/obj/structure/cable,
/turf/open/floor/carpet/executive,
/area/station/command/heads_quarters/captain/private)
-"dGi" = (
-/obj/machinery/door/poddoor/shutters/window/preopen{
- id = "ordstorage"
- },
-/obj/effect/turf_decal/stripes/line,
-/obj/machinery/button/door/directional/east{
- req_access = list("ordnance");
- name = "Ordnance Storage Shutter Control";
- id = "ordstorage"
- },
-/obj/effect/turf_decal/caution/stand_clear/red,
-/obj/effect/turf_decal/stripes/corner{
- dir = 4
- },
-/obj/structure/cable,
-/turf/open/floor/iron/white,
-/area/station/science/ordnance/storage)
"dGq" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
dir = 8
@@ -10537,14 +10482,6 @@
},
/turf/open/floor/iron,
/area/station/commons/locker)
-"dJr" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
- dir = 1
- },
-/turf/open/floor/iron/white/smooth_half{
- dir = 8
- },
-/area/station/science/xenobiology)
"dJJ" = (
/obj/structure/plasticflaps,
/obj/machinery/navbeacon{
@@ -10797,17 +10734,6 @@
/obj/effect/turf_decal/tile/red/fourcorners,
/turf/open/floor/iron/dark,
/area/station/security/checkpoint/medical)
-"dPh" = (
-/obj/machinery/atmospherics/components/unary/thermomachine/freezer/layer2{
- dir = 1
- },
-/obj/effect/turf_decal/box/red,
-/obj/machinery/light/directional/south,
-/obj/machinery/camera/autoname/directional/west{
- network = list("ss13","rd")
- },
-/turf/open/floor/iron/dark,
-/area/station/science/ordnance)
"dPk" = (
/obj/machinery/button/elevator/directional/east{
id = "cargo"
@@ -11077,7 +11003,7 @@
/obj/effect/turf_decal/stripes/line{
dir = 5
},
-/obj/structure/reagent_dispensers/watertank,
+/obj/structure/reagent_dispensers/watertank/high,
/turf/open/floor/iron/large,
/area/station/engineering/atmos/upper)
"dTA" = (
@@ -11296,6 +11222,16 @@
},
/turf/open/floor/iron/dark,
/area/station/security/lockers)
+"dXH" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/trimline/yellow/filled/corner{
+ dir = 4
+ },
+/obj/effect/turf_decal/trimline/yellow/filled/corner,
+/turf/open/floor/iron/white,
+/area/station/maintenance/department/medical)
"dXN" = (
/obj/machinery/door/airlock/research{
name = "Robotics Lab Storage"
@@ -11369,11 +11305,6 @@
/obj/structure/reagent_dispensers/wall/peppertank/directional/south,
/turf/open/floor/iron/dark,
/area/station/security/checkpoint/science)
-"dYY" = (
-/obj/machinery/portable_atmospherics/canister,
-/obj/structure/sign/poster/official/wtf_is_co2/directional/north,
-/turf/open/floor/iron/white/smooth_large,
-/area/station/science/ordnance/storage)
"dYZ" = (
/obj/effect/spawner/random/maintenance/two,
/obj/effect/spawner/random/clothing/twentyfive_percent_cyborg_mask,
@@ -11427,15 +11358,6 @@
dir = 1
},
/area/station/command/meeting_room)
-"dZQ" = (
-/obj/structure/window/spawner/directional/east,
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/structure/cable,
-/obj/machinery/portable_atmospherics/pump,
-/turf/open/floor/iron/dark/smooth_large,
-/area/station/science/ordnance)
"eam" = (
/obj/structure/chair{
dir = 8
@@ -11463,10 +11385,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/wood,
/area/station/command/heads_quarters/qm)
-"eaL" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden,
-/turf/open/floor/catwalk_floor/iron_white,
-/area/station/medical/treatment_center)
"eaS" = (
/obj/effect/turf_decal/siding/wood{
dir = 6
@@ -11590,6 +11508,15 @@
},
/turf/open/floor/iron,
/area/station/hallway/primary/central)
+"ebU" = (
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/catwalk_floor/iron_white,
+/area/station/science/lab)
"ece" = (
/obj/effect/turf_decal/trimline/yellow/filled/line{
dir = 4
@@ -11730,6 +11657,14 @@
/obj/machinery/light_switch/directional/west,
/turf/open/floor/iron/kitchen,
/area/station/service/kitchen)
+"efF" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/bot,
+/obj/machinery/atmospherics/components/unary/portables_connector/visible{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/station/maintenance/department/science)
"efJ" = (
/obj/machinery/atmospherics/pipe/smart/manifold/purple/visible/layer2{
dir = 1
@@ -11758,6 +11693,15 @@
},
/turf/open/floor/iron/dark,
/area/station/security/courtroom)
+"egt" = (
+/obj/structure/barricade/wooden,
+/obj/effect/decal/cleanable/dirt,
+/obj/item/flashlight/glowstick/blue{
+ start_on = 1;
+ light_range = 2
+ },
+/turf/open/floor/plating,
+/area/station/maintenance/department/science)
"egv" = (
/obj/effect/turf_decal/siding/wood{
dir = 4
@@ -11847,6 +11791,20 @@
},
/turf/open/floor/iron/white/smooth_large,
/area/station/science/xenobiology/hallway)
+"eih" = (
+/obj/structure/table,
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/obj/item/storage/toolbox/mechanical{
+ pixel_x = -2;
+ pixel_y = 8
+ },
+/obj/item/storage/toolbox/mechanical{
+ pixel_x = 3;
+ pixel_y = -2
+ },
+/obj/structure/cable,
+/turf/open/floor/iron/dark,
+/area/station/science/ordnance)
"ein" = (
/obj/effect/turf_decal/tile/red/half/contrasted,
/obj/structure/disposalpipe/segment{
@@ -12243,11 +12201,6 @@
},
/turf/open/floor/iron/white,
/area/station/medical/treatment_center)
-"epB" = (
-/obj/machinery/portable_atmospherics/canister,
-/obj/structure/cable,
-/turf/open/floor/iron/white/smooth_large,
-/area/station/science/ordnance/storage)
"epE" = (
/obj/structure/closet/toolcloset,
/obj/effect/turf_decal/trimline/yellow/filled/line{
@@ -12698,14 +12651,6 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/wood,
/area/station/service/library)
-"exS" = (
-/obj/structure/cable,
-/obj/effect/turf_decal/sand/plating,
-/obj/structure/disposalpipe/segment,
-/obj/machinery/door/airlock/maintenance_hatch,
-/obj/effect/mapping_helpers/airlock/access/any/medical/maintenance,
-/turf/open/floor/plating,
-/area/station/asteroid)
"exT" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -12742,11 +12687,6 @@
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/plating,
/area/station/security/prison/work)
-"eyx" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/components/tank/oxygen,
-/turf/open/floor/plating,
-/area/station/maintenance/department/science)
"eyN" = (
/obj/structure/table,
/obj/item/grenade/chem_grenade/smart_metal_foam{
@@ -12922,6 +12862,16 @@
/obj/machinery/airalarm/directional/north,
/turf/open/floor/iron/white,
/area/station/security/prison/safe)
+"eBw" = (
+/obj/structure/cable,
+/obj/machinery/airalarm/directional/north,
+/obj/structure/disposalpipe/segment{
+ dir = 10
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/catwalk_floor/iron_white,
+/area/station/science/lab)
"eBD" = (
/obj/item/kirbyplants/random,
/obj/structure/railing/corner{
@@ -13023,15 +12973,6 @@
/obj/structure/marker_beacon/yellow,
/turf/open/space/openspace,
/area/space/nearstation)
-"eCJ" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{
- dir = 8
- },
-/obj/machinery/meter,
-/turf/open/floor/iron/dark,
-/area/station/science/ordnance)
"eCO" = (
/obj/machinery/shower/directional/west,
/obj/effect/turf_decal/stripes/line,
@@ -13125,6 +13066,21 @@
},
/turf/open/floor/iron,
/area/station/hallway/primary/central)
+"eEg" = (
+/obj/machinery/door_buttons/airlock_controller{
+ idExterior = "xeno_airlock_exterior";
+ idInterior = "xeno_airlock_interior";
+ idSelf = "xeno_airlock_control";
+ name = "Access Console";
+ pixel_x = -25;
+ pixel_y = -25;
+ req_access = list("xenobiology")
+ },
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/catwalk_floor/iron_white,
+/area/station/science/xenobiology)
"eEm" = (
/obj/effect/turf_decal/stripes/corner,
/obj/effect/turf_decal/tile/neutral,
@@ -13437,14 +13393,6 @@
"eKR" = (
/turf/closed/wall/r_wall,
/area/station/command/bridge)
-"eLb" = (
-/obj/machinery/door/airlock/command{
- name = "Research Director's Observatory"
- },
-/obj/effect/mapping_helpers/airlock/access/all/science/rd,
-/obj/machinery/door/firedoor,
-/turf/open/floor/plating,
-/area/station/science/ordnance/testlab)
"eLe" = (
/obj/machinery/power/apc/auto_name/directional/east,
/obj/effect/turf_decal/tile/red/half/contrasted{
@@ -13543,15 +13491,6 @@
},
/turf/open/floor/iron/grimy,
/area/station/security/detectives_office)
-"eNt" = (
-/obj/machinery/portable_atmospherics/canister/oxygen,
-/obj/effect/turf_decal/box,
-/obj/machinery/atmospherics/components/unary/portables_connector/visible{
- dir = 8;
- name = "Oxygen Chamber Injection Port"
- },
-/turf/open/floor/iron/white,
-/area/station/science/ordnance/storage)
"eNS" = (
/obj/effect/turf_decal/tile/red/half/contrasted,
/obj/structure/disposalpipe/segment{
@@ -13581,6 +13520,14 @@
/obj/structure/cable,
/turf/open/floor/plating,
/area/station/asteroid)
+"eOA" = (
+/obj/structure/table,
+/obj/effect/spawner/random/trash/crushed_can{
+ pixel_x = 7;
+ pixel_y = 15
+ },
+/turf/open/floor/iron/white,
+/area/station/maintenance/department/medical)
"eOD" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -13810,12 +13757,6 @@
/obj/item/trash/waffles,
/turf/open/floor/iron,
/area/station/hallway/primary/central)
-"eTG" = (
-/obj/machinery/atmospherics/pipe/smart/manifold/purple/visible{
- dir = 1
- },
-/turf/closed/wall/r_wall,
-/area/station/science/ordnance/storage)
"eTZ" = (
/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{
dir = 8
@@ -13828,9 +13769,6 @@
/obj/machinery/portable_atmospherics/canister,
/turf/open/floor/plating,
/area/station/maintenance/department/science)
-"eUB" = (
-/turf/open/floor/catwalk_floor/iron_white,
-/area/station/medical/treatment_center)
"eUD" = (
/obj/effect/turf_decal/plaque{
icon_state = "L12"
@@ -15808,11 +15746,6 @@
/obj/effect/landmark/event_spawn,
/turf/open/floor/iron,
/area/station/command/corporate_showroom)
-"fEW" = (
-/obj/effect/spawner/structure/window/reinforced/plasma,
-/obj/structure/cable,
-/turf/open/floor/plating,
-/area/station/command/heads_quarters/rd)
"fFb" = (
/obj/structure/railing{
dir = 1
@@ -16266,13 +16199,6 @@
/obj/machinery/light/dim/directional/east,
/turf/open/floor/iron,
/area/station/commons/storage/tools)
-"fNi" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 9
- },
-/obj/machinery/portable_atmospherics/scrubber/huge/movable,
-/turf/open/floor/iron/dark/smooth_large,
-/area/station/science/ordnance)
"fNk" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
/turf/open/floor/iron/dark,
@@ -16710,14 +16636,6 @@
},
/turf/open/floor/iron/white,
/area/station/science/research)
-"fTO" = (
-/obj/machinery/processor/slime,
-/obj/effect/turf_decal/bot_red,
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/turf/open/floor/iron/white/textured_large,
-/area/station/science/xenobiology)
"fTX" = (
/turf/closed/wall/r_wall,
/area/station/engineering/atmos)
@@ -16806,6 +16724,16 @@
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/plating,
/area/station/maintenance/port/greater)
+"fVO" = (
+/obj/machinery/door/firedoor/heavy,
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/obj/machinery/door/airlock/research{
+ name = "Ordnance Auxiliary Storage"
+ },
+/obj/effect/mapping_helpers/airlock/access/all/science/ordnance,
+/obj/effect/decal/cleanable/dirt/dust,
+/turf/open/floor/iron/dark,
+/area/station/science/ordnance)
"fVU" = (
/obj/effect/turf_decal/stripes/line{
dir = 8
@@ -16852,6 +16780,14 @@
"fXn" = (
/turf/open/floor/wood/parquet,
/area/station/cargo/boutique)
+"fXo" = (
+/obj/effect/turf_decal/sand/plating,
+/obj/structure/disposalpipe/segment{
+ dir = 5
+ },
+/obj/item/pickaxe,
+/turf/open/floor/plating,
+/area/station/asteroid)
"fXt" = (
/obj/effect/spawner/structure/window/reinforced/plasma,
/turf/open/floor/engine,
@@ -16940,16 +16876,6 @@
/obj/machinery/camera/autoname/directional/west,
/turf/open/floor/iron,
/area/station/hallway/primary/starboard)
-"fYW" = (
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/turf/open/floor/iron/dark,
-/area/station/science/ordnance)
"fYX" = (
/obj/machinery/power/solar{
id = "foreport";
@@ -16973,6 +16899,15 @@
"fZe" = (
/turf/closed/wall,
/area/station/security/detectives_office)
+"fZg" = (
+/obj/item/toy/plush/lizard_plushie/green{
+ name = "Hauls-The-Crates"
+ },
+/obj/effect/spawner/random/structure/table_or_rack,
+/obj/effect/decal/cleanable/cobweb/cobweb2,
+/obj/structure/sign/departments/exodrone/directional/east,
+/turf/open/floor/plating,
+/area/station/maintenance/department/cargo)
"fZl" = (
/obj/effect/turf_decal/tile/blue/fourcorners,
/obj/machinery/recharge_station,
@@ -17219,14 +17154,6 @@
/obj/effect/landmark/event_spawn,
/turf/open/floor/glass/reinforced,
/area/station/science/research)
-"gdM" = (
-/obj/structure/cable,
-/obj/effect/turf_decal/siding/purple{
- dir = 1
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/catwalk_floor/iron_white,
-/area/station/science/xenobiology)
"gdP" = (
/obj/structure/lattice,
/obj/machinery/atmospherics/pipe/smart/simple/green/visible{
@@ -17502,6 +17429,14 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron,
/area/station/engineering/atmos/pumproom)
+"giJ" = (
+/obj/structure/cable,
+/obj/machinery/firealarm/directional/east,
+/obj/structure/disposalpipe/segment,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/catwalk_floor/iron_white,
+/area/station/science/lab)
"giK" = (
/obj/effect/turf_decal/tile/brown/half/contrasted{
dir = 1
@@ -17509,17 +17444,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron,
/area/station/cargo/drone_bay)
-"gjo" = (
-/obj/structure/cable,
-/obj/machinery/button/door/directional/east{
- name = "shutter control";
- id = "xbprotect"
- },
-/obj/structure/window/reinforced/spawner/directional/south,
-/obj/item/kirbyplants/random,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/turf/open/floor/catwalk_floor/iron_white,
-/area/station/science/xenobiology)
"gjt" = (
/obj/machinery/pdapainter/medbay,
/obj/effect/turf_decal/trimline/dark_blue/filled/line{
@@ -17687,15 +17611,6 @@
/obj/machinery/digital_clock/directional/north,
/turf/open/floor/iron/white,
/area/station/medical/treatment_center)
-"gmb" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 6
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/catwalk_floor/iron_white,
-/area/station/science/xenobiology)
"gmd" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/machinery/door/poddoor/shutters/preopen{
@@ -17782,16 +17697,6 @@
/obj/effect/spawner/random/structure/crate,
/turf/open/floor/plating,
/area/station/maintenance/department/medical/central)
-"gop" = (
-/obj/effect/landmark/blobstart,
-/obj/structure/closet/crate/science{
- opened = 1;
- icon_state = "scicrateopen"
- },
-/obj/effect/decal/cleanable/dirt/dust,
-/obj/effect/turf_decal/stripes/line,
-/turf/open/floor/iron/dark/smooth_large,
-/area/station/science/ordnance)
"goB" = (
/obj/effect/decal/cleanable/dirt/dust,
/obj/effect/decal/cleanable/blood/tracks,
@@ -18123,10 +18028,6 @@
/obj/machinery/airalarm/directional/north,
/turf/open/floor/iron,
/area/station/cargo/storage)
-"guJ" = (
-/obj/item/radio/intercom/chapel/directional/west,
-/turf/open/floor/catwalk_floor/iron_white,
-/area/station/science/ordnance/testlab)
"guN" = (
/obj/structure/table/glass,
/obj/item/folder/white,
@@ -18150,6 +18051,18 @@
/obj/effect/decal/cleanable/blood/old,
/turf/open/floor/iron/freezer,
/area/station/maintenance/department/medical/central)
+"gvj" = (
+/obj/machinery/door/poddoor/shutters/window/preopen{
+ name = "Security Shutters";
+ id = "xbprotect";
+ dir = 8
+ },
+/obj/structure/cable,
+/obj/machinery/door/firedoor,
+/obj/machinery/firealarm/directional/north,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/catwalk_floor/iron_white,
+/area/station/science/xenobiology)
"gvk" = (
/obj/structure/cable,
/obj/effect/spawner/random/maintenance,
@@ -18460,14 +18373,6 @@
/obj/effect/turf_decal/tile/blue/fourcorners,
/turf/open/floor/iron/white,
/area/station/medical/treatment_center)
-"gzF" = (
-/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/iron/dark,
-/area/station/science/ordnance)
"gzL" = (
/obj/machinery/light/small/directional/south,
/turf/open/floor/plating,
@@ -18505,6 +18410,13 @@
/mob/living/basic/carp/pet/lia,
/turf/open/floor/carpet/red,
/area/station/command/heads_quarters/hos)
+"gAV" = (
+/obj/structure/tank_dispenser,
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/obj/item/radio/intercom/directional/north,
+/obj/machinery/light_switch/directional/east,
+/turf/open/floor/iron/dark,
+/area/station/science/ordnance)
"gAZ" = (
/obj/machinery/atmospherics/components/binary/pump/off{
dir = 8;
@@ -18631,6 +18543,17 @@
/obj/effect/turf_decal/tile/yellow/fourcorners,
/turf/open/floor/iron,
/area/station/engineering/main)
+"gCV" = (
+/obj/structure/cable,
+/obj/machinery/door/airlock/maintenance_hatch{
+ name = "Xenobiology Maintenance"
+ },
+/obj/effect/mapping_helpers/airlock/access/all/science/xenobio,
+/obj/structure/disposalpipe/segment,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/catwalk_floor/iron_white,
+/area/station/science/xenobiology)
"gCY" = (
/obj/structure/cable,
/obj/effect/turf_decal/tile/yellow,
@@ -18964,6 +18887,13 @@
},
/turf/open/floor/iron/dark,
/area/station/maintenance/department/engine)
+"gIM" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/catwalk_floor/iron_white,
+/area/station/science/lab)
"gIO" = (
/obj/structure/table/reinforced/rglass,
/obj/item/poster/random_official,
@@ -19328,6 +19258,10 @@
/obj/effect/landmark/event_spawn,
/turf/open/floor/iron,
/area/station/engineering/lobby)
+"gQL" = (
+/obj/structure/sign/warning/directional/west,
+/turf/closed/wall/rust,
+/area/station/medical/chemistry/minisat)
"gQN" = (
/obj/effect/turf_decal/stripes/line,
/obj/effect/turf_decal/tile/purple/half/contrasted,
@@ -19841,6 +19775,11 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron/dark,
/area/station/security/checkpoint/science)
+"gZF" = (
+/obj/effect/turf_decal/sand/plating,
+/obj/machinery/portable_atmospherics/canister,
+/turf/open/floor/plating,
+/area/station/maintenance/department/science)
"gZI" = (
/obj/structure/dresser,
/obj/machinery/airalarm/directional/west,
@@ -20311,6 +20250,17 @@
/obj/structure/lattice,
/turf/open/misc/asteroid/airless,
/area/space/nearstation)
+"hhd" = (
+/obj/machinery/door/poddoor/shutters{
+ id = "ordauxgarage";
+ dir = 1
+ },
+/obj/effect/turf_decal/sand/plating,
+/obj/effect/turf_decal/stripes/asteroid/end{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/station/science/ordnance)
"hhC" = (
/obj/structure/railing{
dir = 5
@@ -20470,14 +20420,6 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/wood,
/area/station/service/library)
-"hld" = (
-/obj/structure/cable,
-/obj/machinery/firealarm/directional/east,
-/obj/structure/disposalpipe/segment,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/catwalk_floor/iron_white,
-/area/station/science/lab)
"hle" = (
/obj/machinery/light/directional/south,
/obj/structure/table/glass,
@@ -20521,16 +20463,6 @@
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
/turf/open/floor/iron,
/area/station/hallway/primary/central)
-"hmd" = (
-/obj/effect/turf_decal/tile/neutral/opposingcorners{
- dir = 1
- },
-/obj/effect/turf_decal/siding/purple{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/turf/open/floor/iron/dark,
-/area/station/command/heads_quarters/rd)
"hmg" = (
/obj/machinery/requests_console/directional/north{
name = "Bar Requests Console";
@@ -21064,16 +20996,6 @@
},
/turf/open/floor/iron,
/area/station/security)
-"htn" = (
-/obj/machinery/door/airlock/research{
- glass = 1;
- name = "Slime Euthanization Chamber";
- opacity = 0
- },
-/obj/effect/turf_decal/tile/blue/fourcorners,
-/obj/effect/mapping_helpers/airlock/access/all/science/xenobio,
-/turf/open/floor/glass/reinforced,
-/area/station/science/xenobiology)
"htw" = (
/obj/effect/spawner/random/structure/closet_empty/crate,
/obj/effect/spawner/random/maintenance,
@@ -21340,6 +21262,12 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/iron/white,
/area/station/medical/storage)
+"hyL" = (
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment,
+/obj/effect/decal/cleanable/dirt/dust,
+/turf/open/floor/plating,
+/area/station/maintenance/department/medical)
"hyM" = (
/obj/structure/closet,
/obj/item/food/grown/banana,
@@ -21511,16 +21439,6 @@
/obj/structure/cable,
/turf/open/floor/circuit,
/area/station/hallway/primary/central)
-"hCB" = (
-/obj/machinery/door/firedoor/heavy,
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/obj/machinery/door/airlock/research{
- name = "Ordnance Auxiliary Storage"
- },
-/obj/effect/mapping_helpers/airlock/access/all/science/ordnance,
-/obj/effect/decal/cleanable/dirt/dust,
-/turf/open/floor/iron/dark,
-/area/station/science/ordnance)
"hCJ" = (
/obj/structure/railing{
dir = 8
@@ -21633,15 +21551,6 @@
/obj/effect/landmark/start/mime,
/turf/open/floor/carpet,
/area/station/service/theater)
-"hEw" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/turf/open/floor/catwalk_floor/iron_white,
-/area/station/science/lab)
"hED" = (
/turf/closed/wall/r_wall,
/area/station/ai_monitored/security/armory)
@@ -21676,6 +21585,14 @@
/obj/machinery/atmospherics/components/tank/plasma,
/turf/open/misc/asteroid,
/area/station/maintenance/disposal/incinerator)
+"hFz" = (
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/obj/structure/cable,
+/obj/machinery/light/directional/east,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/iron/dark,
+/area/station/science/ordnance)
"hFA" = (
/obj/machinery/light/small/directional/south,
/obj/effect/turf_decal/stripes/asteroid/line{
@@ -21987,6 +21904,19 @@
/obj/structure/cable,
/turf/open/floor/iron/dark,
/area/station/security/execution/education)
+"hMf" = (
+/obj/machinery/door/poddoor/shutters/window/preopen{
+ name = "Security Shutters";
+ id = "xbprotect1";
+ dir = 8
+ },
+/obj/structure/cable,
+/obj/machinery/door/firedoor,
+/obj/machinery/firealarm/directional/south,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/catwalk_floor/iron_white,
+/area/station/science/xenobiology)
"hME" = (
/turf/closed/wall,
/area/station/security/prison/work)
@@ -22020,13 +21950,6 @@
},
/turf/open/floor/iron,
/area/station/commons/storage/art)
-"hNI" = (
-/obj/machinery/light/directional/north,
-/obj/machinery/atmospherics/components/trinary/mixer{
- dir = 4
- },
-/turf/open/floor/iron/dark,
-/area/station/science/ordnance)
"hNN" = (
/obj/effect/turf_decal/trimline/yellow/filled/line{
dir = 8
@@ -22121,15 +22044,6 @@
/obj/machinery/light_switch/directional/north,
/turf/open/floor/iron,
/area/station/service/hydroponics)
-"hPn" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/effect/decal/cleanable/dirt/dust,
-/obj/machinery/light/small/directional/south,
-/obj/machinery/portable_atmospherics/canister,
-/turf/open/floor/iron/dark/smooth_large,
-/area/station/science/ordnance)
"hPp" = (
/obj/structure/table/glass,
/obj/effect/turf_decal/tile/blue/fourcorners,
@@ -22399,6 +22313,9 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/carpet/red,
/area/station/command/heads_quarters/qm)
+"hSB" = (
+/turf/open/floor/catwalk_floor/iron_white,
+/area/station/medical/treatment_center)
"hSC" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/cable,
@@ -22451,10 +22368,6 @@
/obj/structure/extinguisher_cabinet/directional/south,
/turf/open/floor/iron/white,
/area/station/medical/paramedic)
-"hTv" = (
-/obj/structure/railing/corner,
-/turf/open/floor/iron/dark,
-/area/station/science/ordnance)
"hTQ" = (
/obj/machinery/atmospherics/components/unary/passive_vent{
dir = 1;
@@ -22568,6 +22481,15 @@
"hVB" = (
/turf/open/floor/plating,
/area/station/engineering/supermatter/room)
+"hVC" = (
+/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/cable,
+/turf/open/floor/iron/dark,
+/area/station/science/ordnance)
"hVL" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
dir = 8
@@ -22590,11 +22512,6 @@
/obj/machinery/telecomms/hub/preset,
/turf/open/floor/circuit/green/telecomms/mainframe,
/area/station/tcommsat/server)
-"hWl" = (
-/obj/effect/turf_decal/sand/plating,
-/obj/structure/broken_flooring/pile,
-/turf/open/floor/plating,
-/area/station/science/ordnance)
"hWt" = (
/obj/effect/turf_decal/box/corners{
dir = 8
@@ -22719,6 +22636,15 @@
/obj/structure/cable,
/turf/open/floor/iron/textured_large,
/area/station/engineering/storage/tech)
+"hYG" = (
+/obj/machinery/atmospherics/pipe/smart/manifold/yellow/visible{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/cable,
+/turf/open/floor/iron/dark,
+/area/station/science/ordnance)
"hYP" = (
/obj/machinery/modular_computer/preset/id{
dir = 1
@@ -22965,6 +22891,11 @@
/obj/effect/turf_decal/sand/plating,
/turf/open/floor/plating,
/area/station/cargo/miningoffice)
+"ief" = (
+/obj/machinery/airalarm/directional/west,
+/obj/machinery/portable_atmospherics/canister/oxygen,
+/turf/open/floor/iron/white/smooth_large,
+/area/station/science/ordnance/storage)
"iej" = (
/obj/effect/turf_decal/siding/white{
dir = 1
@@ -23032,14 +22963,6 @@
},
/turf/open/floor/iron/white,
/area/station/hallway/secondary/entry)
-"ieU" = (
-/obj/structure/cable,
-/obj/effect/turf_decal/siding/purple/corner{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/catwalk_floor/iron_white,
-/area/station/science/xenobiology)
"ifc" = (
/obj/effect/turf_decal/trimline/yellow/filled/line,
/obj/machinery/firealarm/directional/south,
@@ -23056,6 +22979,18 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/station/medical/storage)
+"ifv" = (
+/obj/machinery/atmospherics/components/trinary/mixer{
+ dir = 4
+ },
+/obj/machinery/camera/autoname/directional/north{
+ network = list("ss13","rd")
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/iron/dark,
+/area/station/science/ordnance)
"ifE" = (
/obj/machinery/vending/medical,
/obj/effect/turf_decal/tile/blue/fourcorners,
@@ -23282,11 +23217,6 @@
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/plating/reinforced,
/area/station/maintenance/port/greater)
-"ikJ" = (
-/obj/effect/turf_decal/stripes/corner,
-/obj/structure/closet/firecloset,
-/turf/open/floor/iron/dark/smooth_large,
-/area/station/science/ordnance)
"ilb" = (
/obj/effect/turf_decal/tile/red/diagonal_edge,
/turf/open/floor/iron/dark,
@@ -23452,18 +23382,6 @@
},
/turf/open/floor/iron/white,
/area/station/medical/treatment_center)
-"ioh" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/duct,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden,
-/obj/effect/turf_decal/tile/blue/fourcorners,
-/turf/open/floor/catwalk_floor/iron_white,
-/area/station/medical/treatment_center)
"iol" = (
/turf/closed/wall/r_wall,
/area/station/service/lawoffice)
@@ -23487,11 +23405,6 @@
},
/turf/open/floor/iron,
/area/station/hallway/secondary/command)
-"ioL" = (
-/obj/item/radio/intercom/directional/east,
-/obj/machinery/portable_atmospherics/canister/oxygen,
-/turf/open/floor/iron/white,
-/area/station/science/ordnance/storage)
"ioP" = (
/obj/structure/cable/multilayer/multiz,
/obj/effect/decal/cleanable/dirt,
@@ -23743,6 +23656,10 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/iron,
/area/station/security/office)
+"isy" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden,
+/turf/open/floor/catwalk_floor/iron_white,
+/area/station/medical/treatment_center)
"isH" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/disposalpipe/segment{
@@ -23869,14 +23786,6 @@
"ivx" = (
/turf/open/floor/glass/reinforced/airless,
/area/station/asteroid)
-"ivy" = (
-/obj/machinery/atmospherics/components/unary/portables_connector/visible{
- dir = 8
- },
-/obj/effect/turf_decal/box/red,
-/obj/item/radio/intercom/directional/south,
-/turf/open/floor/iron/dark,
-/area/station/science/ordnance)
"ivC" = (
/obj/machinery/camera/autoname/directional/north{
network = list("ss13","engine")
@@ -24517,11 +24426,6 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
/area/station/asteroid)
-"iHV" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/structure/cable,
-/turf/open/floor/iron/dark,
-/area/station/command/heads_quarters/rd)
"iHY" = (
/obj/structure/sign/warning/explosives/directional/east,
/obj/effect/turf_decal/siding/purple/corner{
@@ -24860,21 +24764,6 @@
/obj/structure/sign/poster/official/random/directional/east,
/turf/open/floor/iron,
/area/station/hallway/primary/starboard)
-"iOk" = (
-/obj/machinery/door/airlock/research{
- autoclose = 0;
- frequency = 1449;
- id_tag = "xeno_airlock_interior";
- name = "Xenobiology Lab Internal Airlock"
- },
-/obj/effect/mapping_helpers/airlock/locked,
-/obj/structure/cable,
-/obj/effect/mapping_helpers/airlock/access/all/science/xenobio,
-/obj/machinery/door/firedoor,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/catwalk_floor/iron_white,
-/area/station/science/xenobiology)
"iOE" = (
/obj/item/pickaxe/mini,
/turf/open/misc/asteroid,
@@ -24907,6 +24796,17 @@
/obj/machinery/firealarm/directional/north,
/turf/open/floor/carpet/executive,
/area/station/command/corporate_showroom)
+"iPf" = (
+/obj/structure/cable,
+/obj/machinery/button/door/directional/east{
+ name = "shutter control";
+ id = "xbprotect1"
+ },
+/obj/structure/window/reinforced/spawner/directional/north,
+/obj/item/kirbyplants/random,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/catwalk_floor/iron_white,
+/area/station/science/xenobiology)
"iPm" = (
/obj/structure/rack,
/obj/effect/turf_decal/trimline/yellow/filled/line,
@@ -24967,16 +24867,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/dark,
/area/station/command/corporate_showroom)
-"iQo" = (
-/obj/structure/table,
-/obj/machinery/reagentgrinder{
- pixel_y = 8
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/turf/open/floor/iron/white/textured_large,
-/area/station/science/xenobiology)
"iQt" = (
/obj/effect/decal/cleanable/dirt/dust,
/obj/effect/spawner/random/trash/food_packaging,
@@ -25019,6 +24909,14 @@
/obj/item/newspaper,
/turf/open/floor/iron/dark,
/area/station/ai_monitored/turret_protected/aisat/foyer)
+"iRy" = (
+/obj/machinery/door/airlock/command{
+ name = "Research Director's Observatory"
+ },
+/obj/effect/mapping_helpers/airlock/access/all/science/rd,
+/obj/machinery/door/firedoor,
+/turf/open/floor/plating,
+/area/station/command/heads_quarters/rd)
"iRB" = (
/obj/effect/turf_decal/tile/dark_blue/half/contrasted{
dir = 1
@@ -25270,12 +25168,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron/white,
/area/station/medical/chemistry/minisat)
-"iXB" = (
-/obj/structure/cable,
-/obj/effect/turf_decal/siding/purple,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/turf/open/floor/catwalk_floor/iron_white,
-/area/station/science/xenobiology)
"iXR" = (
/obj/structure/cable,
/turf/open/floor/plating,
@@ -25590,13 +25482,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron,
/area/station/cargo/storage)
-"jej" = (
-/obj/structure/cable,
-/obj/effect/turf_decal/siding/purple{
- dir = 1
- },
-/turf/open/floor/catwalk_floor/iron_white,
-/area/station/science/xenobiology)
"jer" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
/obj/effect/landmark/event_spawn,
@@ -25621,15 +25506,6 @@
/obj/effect/turf_decal/delivery,
/turf/open/floor/iron/dark,
/area/station/ai_monitored/command/storage/eva)
-"jeV" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/effect/turf_decal/trimline/yellow/filled/corner{
- dir = 8
- },
-/turf/open/floor/iron/white,
-/area/station/medical/chemistry)
"jeY" = (
/obj/structure/railing/corner{
dir = 1
@@ -25661,6 +25537,16 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron/dark,
/area/station/engineering/atmospherics_engine)
+"jfq" = (
+/obj/structure/table,
+/obj/effect/turf_decal/trimline/yellow/filled/line{
+ dir = 5
+ },
+/obj/machinery/camera/autoname/directional/north{
+ network = list("ss13","medbay")
+ },
+/turf/open/floor/iron/white,
+/area/station/medical/chemistry)
"jfr" = (
/obj/effect/spawner/random/trash/garbage{
spawn_loot_count = 3;
@@ -25858,14 +25744,6 @@
/obj/docking_port/stationary/syndicate,
/turf/open/space/openspace,
/area/space)
-"jiP" = (
-/obj/effect/turf_decal/sand/plating,
-/obj/structure/disposalpipe/segment{
- dir = 5
- },
-/obj/item/pickaxe,
-/turf/open/floor/plating,
-/area/station/asteroid)
"jjp" = (
/obj/item/reagent_containers/cup/bottle/fake_gbs,
/turf/closed/mineral/random/stationside/asteroid/porus{
@@ -26414,6 +26292,12 @@
/obj/structure/reagent_dispensers/watertank,
/turf/open/floor/plating,
/area/station/maintenance/port/lesser)
+"jsf" = (
+/obj/structure/sign/warning/chem_diamond/directional/south,
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/effect/spawner/random/structure/girder,
+/turf/open/floor/plating,
+/area/station/maintenance/department/medical)
"jsn" = (
/obj/effect/turf_decal/stripes/corner,
/obj/effect/decal/cleanable/dirt/dust,
@@ -26458,14 +26342,6 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
/area/station/maintenance/disposal)
-"jtp" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/effect/decal/cleanable/dirt/dust,
-/obj/machinery/portable_atmospherics/canister,
-/turf/open/floor/iron/dark/smooth_large,
-/area/station/science/ordnance)
"jtv" = (
/obj/structure/chair/plastic,
/obj/effect/decal/cleanable/dirt/dust,
@@ -26559,15 +26435,6 @@
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
/turf/open/floor/iron,
/area/station/engineering/atmos/upper)
-"jvp" = (
-/obj/structure/window/spawner/directional/east,
-/obj/machinery/power/apc/auto_name/directional/south{
- areastring = "/area/station/science/ordnance/burnchamber"
- },
-/obj/structure/cable,
-/obj/machinery/portable_atmospherics/pump,
-/turf/open/floor/iron/dark/smooth_large,
-/area/station/science/ordnance)
"jvt" = (
/obj/structure/closet/secure_closet/chemical,
/obj/effect/turf_decal/stripes/line{
@@ -27042,6 +26909,12 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/wood,
/area/station/medical/psychology)
+"jCP" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/catwalk_floor/iron_white,
+/area/station/hallway/secondary/entry)
"jCT" = (
/obj/structure/cable,
/obj/effect/turf_decal/siding/purple{
@@ -27189,17 +27062,6 @@
},
/turf/open/floor/engine,
/area/station/medical/chemistry)
-"jEw" = (
-/obj/effect/mapping_helpers/broken_floor,
-/obj/structure/closet/crate/science{
- opened = 1;
- icon_state = "scicrateopen"
- },
-/obj/item/tank,
-/obj/effect/decal/cleanable/dirt/dust,
-/obj/effect/turf_decal/stripes/line,
-/turf/open/floor/iron/dark/smooth_large,
-/area/station/science/ordnance)
"jED" = (
/obj/machinery/camera/autoname/directional/east,
/turf/open/floor/iron/freezer,
@@ -27638,6 +27500,13 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron,
/area/station/cargo/warehouse/upper)
+"jLY" = (
+/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{
+ dir = 1
+ },
+/obj/machinery/meter,
+/turf/open/floor/iron/dark,
+/area/station/science/ordnance)
"jMa" = (
/obj/machinery/light/dim/directional/south,
/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{
@@ -28325,6 +28194,12 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron,
/area/station/maintenance/department/cargo)
+"jZv" = (
+/obj/machinery/power/apc/auto_name/directional/west,
+/obj/structure/cable,
+/obj/machinery/portable_atmospherics/canister/oxygen,
+/turf/open/floor/iron/white/smooth_large,
+/area/station/science/ordnance/storage)
"jZx" = (
/obj/structure/closet/emcloset,
/turf/open/floor/iron/textured,
@@ -28429,9 +28304,6 @@
},
/turf/open/floor/iron,
/area/station/security/breakroom)
-"kbc" = (
-/turf/open/floor/iron/dark,
-/area/station/command/heads_quarters/rd)
"kbg" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron,
@@ -28679,19 +28551,6 @@
/obj/effect/turf_decal/tile/blue/opposingcorners,
/turf/open/floor/iron,
/area/station/service/hydroponics)
-"keb" = (
-/obj/machinery/door/firedoor,
-/obj/machinery/door/airlock/research/glass{
- name = "Secure Pen"
- },
-/obj/effect/mapping_helpers/airlock/access/all/science/xenobio,
-/obj/structure/cable,
-/obj/machinery/door/poddoor/preopen{
- id = "Xenolab";
- name = "Test Chamber Blast Door"
- },
-/turf/open/floor/catwalk_floor/iron_white,
-/area/station/science/xenobiology)
"ked" = (
/obj/structure/cable,
/turf/open/floor/wood,
@@ -29561,10 +29420,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron,
/area/station/engineering/atmos)
-"krO" = (
-/obj/structure/cable,
-/turf/open/floor/catwalk_floor/iron_white,
-/area/station/science/xenobiology)
"krP" = (
/turf/closed/wall/r_wall,
/area/station/command/teleporter)
@@ -29688,6 +29543,14 @@
},
/turf/open/floor/iron,
/area/station/engineering/main)
+"ktI" = (
+/obj/machinery/light/dim/directional/east,
+/obj/effect/turf_decal/tile/dark_blue/half/contrasted{
+ dir = 4
+ },
+/obj/structure/fireaxecabinet/directional/east,
+/turf/open/floor/iron,
+/area/station/command/bridge)
"ktL" = (
/turf/open/floor/iron,
/area/station/engineering/atmos/upper)
@@ -29732,6 +29595,10 @@
},
/turf/open/floor/plating,
/area/station/science/genetics)
+"kvd" = (
+/obj/structure/lattice/catwalk,
+/turf/open/openspace/xenobio,
+/area/station/science/xenobiology)
"kvj" = (
/obj/machinery/light/directional/north,
/obj/structure/table,
@@ -29765,6 +29632,10 @@
/obj/item/reagent_containers/cup/rag,
/turf/open/floor/plating,
/area/station/maintenance/central/greater)
+"kvW" = (
+/obj/effect/turf_decal/tile/blue/fourcorners,
+/turf/open/floor/catwalk_floor/iron_white,
+/area/station/medical/treatment_center)
"kvX" = (
/obj/effect/turf_decal/sand/plating,
/obj/effect/spawner/random/trash/mess,
@@ -30058,14 +29929,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/plating,
/area/station/maintenance/port/lesser)
-"kAI" = (
-/obj/machinery/door/airlock/maintenance_hatch,
-/obj/effect/mapping_helpers/airlock/access/all/science/ordnance,
-/obj/machinery/atmospherics/pipe/smart/simple/green/visible{
- dir = 1
- },
-/turf/open/floor/plating,
-/area/station/science/ordnance/testlab)
"kAW" = (
/obj/effect/mapping_helpers/broken_floor,
/obj/effect/decal/cleanable/dirt/dust,
@@ -30168,16 +30031,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/dark,
/area/station/service/chapel/funeral)
-"kCh" = (
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/structure/disposalpipe/segment{
- dir = 9
- },
-/turf/open/floor/iron/dark,
-/area/station/science/ordnance)
"kCn" = (
/obj/effect/turf_decal/trimline/yellow/filled/line{
dir = 1
@@ -30333,16 +30186,6 @@
},
/turf/open/floor/iron/freezer,
/area/station/commons/toilet/restrooms)
-"kEM" = (
-/obj/effect/turf_decal/box/corners{
- dir = 4
- },
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/turf/open/floor/iron/dark,
-/area/station/science/ordnance)
"kFi" = (
/obj/effect/turf_decal/tile/neutral{
dir = 8
@@ -30609,6 +30452,15 @@
/obj/effect/spawner/random/decoration/statue,
/turf/open/floor/plating/airless,
/area/space/nearstation)
+"kJW" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/disposalpipe/segment{
+ dir = 9
+ },
+/turf/open/floor/plating,
+/area/station/maintenance/department/medical)
"kKc" = (
/obj/structure/cable,
/obj/effect/turf_decal/trimline/blue/filled/line{
@@ -30692,6 +30544,16 @@
luminosity = 2
},
/area/station/science/ordnance/bomb)
+"kMl" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/atmospherics/components/unary/portables_connector/visible{
+ dir = 1
+ },
+/obj/effect/turf_decal/box/red,
+/turf/open/floor/iron/dark,
+/area/station/science/ordnance)
"kMr" = (
/obj/structure/transport/linear/public,
/obj/machinery/elevator_control_panel/directional/north{
@@ -31000,16 +30862,6 @@
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/iron,
/area/station/construction/mining/aux_base)
-"kSc" = (
-/obj/structure/table,
-/obj/effect/turf_decal/trimline/yellow/filled/line{
- dir = 5
- },
-/obj/machinery/camera/autoname/directional/north{
- network = list("ss13","medbay")
- },
-/turf/open/floor/iron/white,
-/area/station/medical/chemistry)
"kSm" = (
/obj/machinery/computer/libraryconsole/bookmanagement,
/obj/structure/table,
@@ -31223,15 +31075,6 @@
"kUX" = (
/turf/closed/wall/r_wall,
/area/station/engineering/atmospherics_engine)
-"kVh" = (
-/obj/structure/closet/crate/freezer,
-/obj/item/food/icecreamsandwich,
-/obj/effect/turf_decal/trimline/yellow/filled/line{
- dir = 9
- },
-/obj/structure/sign/departments/chemistry/directional/west,
-/turf/open/floor/iron/white,
-/area/station/medical/chemistry)
"kVF" = (
/obj/effect/turf_decal/siding/wood{
dir = 4
@@ -31411,20 +31254,6 @@
/obj/structure/sign/poster/official/random/directional/west,
/turf/open/floor/iron,
/area/station/hallway/primary/central)
-"kZf" = (
-/obj/structure/table/reinforced,
-/obj/item/stack/sheet/plasteel{
- amount = 15
- },
-/obj/item/assembly/prox_sensor{
- pixel_x = 5;
- pixel_y = 7
- },
-/obj/structure/fireaxecabinet/mechremoval/directional/east,
-/obj/item/stack/sheet/glass/fifty,
-/obj/item/stack/sheet/iron/fifty,
-/turf/open/floor/iron/dark/textured,
-/area/station/science/robotics/lab)
"kZg" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -31483,6 +31312,16 @@
/obj/machinery/door/firedoor,
/turf/open/floor/iron,
/area/station/service/hydroponics)
+"kZW" = (
+/obj/machinery/door/airlock/research{
+ glass = 1;
+ name = "Slime Euthanization Chamber";
+ opacity = 0
+ },
+/obj/effect/turf_decal/tile/blue/fourcorners,
+/obj/effect/mapping_helpers/airlock/access/all/science/xenobio,
+/turf/open/floor/glass/reinforced,
+/area/station/science/xenobiology)
"laf" = (
/obj/effect/spawner/random/structure/chair_comfy{
dir = 4
@@ -31519,6 +31358,11 @@
/obj/effect/landmark/start/lawyer,
/turf/open/floor/iron/dark,
/area/station/security/office)
+"laD" = (
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/obj/effect/decal/cleanable/dirt/dust,
+/turf/open/floor/iron/dark,
+/area/station/science/ordnance)
"laF" = (
/obj/structure/closet{
name = "evidence closet 1"
@@ -31605,21 +31449,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/dark,
/area/station/science/ordnance)
-"lcj" = (
-/obj/item/stack/sheet/glass,
-/obj/item/stack/sheet/iron/fifty,
-/obj/item/clothing/glasses/welding,
-/obj/item/disk/tech_disk{
- pixel_y = 6
- },
-/obj/item/reagent_containers/dropper,
-/obj/structure/table,
-/obj/machinery/requests_console/auto_name/directional/north,
-/obj/effect/mapping_helpers/requests_console/supplies,
-/obj/effect/mapping_helpers/requests_console/ore_update,
-/obj/effect/mapping_helpers/requests_console/assistance,
-/turf/open/floor/iron/white,
-/area/station/science/lab)
"lcv" = (
/obj/machinery/camera/autoname/directional/south,
/turf/open/floor/glass/reinforced,
@@ -31636,6 +31465,23 @@
/obj/effect/decal/cleanable/cobweb/cobweb2,
/turf/open/floor/plating,
/area/station/science/xenobiology)
+"ldf" = (
+/obj/machinery/door/airlock/research/glass{
+ name = "Chemistry Minisat"
+ },
+/obj/effect/mapping_helpers/airlock/access/all/medical/chemistry,
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/effect/turf_decal/trimline/yellow/filled/line,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/mapping_helpers/airlock/unres{
+ dir = 8
+ },
+/turf/open/floor/iron/white,
+/area/station/medical/chemistry/minisat)
"ldo" = (
/obj/effect/turf_decal/sand/plating,
/obj/effect/turf_decal/stripes/asteroid/line{
@@ -31677,12 +31523,6 @@
},
/turf/open/floor/iron,
/area/station/engineering/atmos/pumproom)
-"leZ" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/catwalk_floor/iron_white,
-/area/station/hallway/secondary/entry)
"lfd" = (
/obj/machinery/door/airlock/external/glass,
/obj/effect/mapping_helpers/airlock/access/all/engineering/external,
@@ -32409,10 +32249,6 @@
/obj/effect/mapping_helpers/broken_floor,
/turf/open/floor/plating,
/area/station/maintenance/department/medical/central)
-"luh" = (
-/obj/machinery/light/small/directional/north,
-/turf/open/floor/engine/o2,
-/area/station/science/ordnance)
"luq" = (
/obj/effect/turf_decal/stripes{
dir = 4
@@ -32796,6 +32632,12 @@
},
/turf/open/floor/iron/white/textured_large,
/area/station/maintenance/department/medical/central)
+"lAt" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/catwalk_floor/iron_white,
+/area/station/science/xenobiology)
"lAy" = (
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/iron,
@@ -32856,11 +32698,6 @@
/obj/structure/chair/sofa/bench/left,
/turf/open/floor/iron/white/textured_large,
/area/station/science/research)
-"lBZ" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/turf/open/floor/catwalk_floor/iron_white,
-/area/station/science/xenobiology)
"lCk" = (
/obj/effect/turf_decal/siding/dark_blue{
dir = 1
@@ -32920,18 +32757,6 @@
/obj/effect/spawner/random/maintenance/two,
/turf/open/floor/iron,
/area/station/maintenance/central/greater)
-"lCS" = (
-/obj/structure/table,
-/obj/item/paper_bin{
- pixel_x = -5;
- pixel_y = 6
- },
-/obj/item/pen{
- pixel_x = 9;
- pixel_y = 4
- },
-/turf/open/floor/glass/reinforced,
-/area/station/science/xenobiology)
"lCY" = (
/obj/effect/spawner/random/maintenance/two,
/obj/effect/spawner/random/structure/closet_empty/crate,
@@ -33081,14 +32906,6 @@
"lFG" = (
/turf/open/floor/glass,
/area/station/command/meeting_room)
-"lFI" = (
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/obj/item/radio/intercom/directional/north,
-/obj/machinery/light_switch/directional/east,
-/obj/machinery/disposal/bin,
-/obj/structure/disposalpipe/trunk,
-/turf/open/floor/iron/dark,
-/area/station/science/ordnance)
"lFJ" = (
/obj/effect/decal/cleanable/blood/old,
/obj/item/flashlight/flare/candle,
@@ -33290,6 +33107,17 @@
/obj/machinery/vending/boozeomat/all_access,
/turf/open/floor/plating,
/area/station/maintenance/central/greater)
+"lJo" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/duct,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden,
+/turf/open/floor/catwalk_floor/iron_white,
+/area/station/medical/treatment_center)
"lJq" = (
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
@@ -33444,6 +33272,16 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/carpet/blue,
/area/station/command/heads_quarters/cmo)
+"lMC" = (
+/obj/machinery/meter,
+/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/cable,
+/turf/open/floor/iron/dark,
+/area/station/science/ordnance)
"lMI" = (
/obj/effect/spawner/random/structure/closet_maintenance,
/turf/open/floor/plating,
@@ -33850,13 +33688,6 @@
/obj/effect/mapping_helpers/broken_floor,
/turf/open/floor/plating,
/area/station/maintenance/department/bridge)
-"lUy" = (
-/obj/structure/cable,
-/obj/effect/landmark/navigate_destination/dockarrival,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/catwalk_floor/iron_white,
-/area/station/hallway/secondary/entry)
"lUF" = (
/obj/structure/transport/linear/public,
/obj/machinery/elevator_control_panel{
@@ -34391,6 +34222,16 @@
/obj/machinery/light/dim/directional/south,
/turf/open/floor/wood,
/area/station/service/library)
+"mfw" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/trimline/yellow/filled/line,
+/obj/effect/turf_decal/trimline/yellow/filled/corner{
+ dir = 1
+ },
+/turf/open/floor/iron/white,
+/area/station/medical/chemistry)
"mfA" = (
/obj/machinery/exoscanner,
/obj/effect/turf_decal/siding/wideplating_new/dark/end{
@@ -34402,6 +34243,13 @@
/obj/effect/baseturf_helper/reinforced_plating/ceiling,
/turf/open/floor/iron/dark,
/area/station/science/ordnance)
+"mfP" = (
+/obj/machinery/atmospherics/components/tank/air/layer4,
+/obj/effect/turf_decal/tile/green/half/contrasted{
+ dir = 1
+ },
+/turf/open/floor/iron/white,
+/area/station/medical/virology)
"mgn" = (
/obj/docking_port/stationary{
dir = 8;
@@ -34584,15 +34432,20 @@
},
/turf/open/floor/engine/vacuum,
/area/station/science/ordnance/burnchamber)
-"miR" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/structure/disposalpipe/segment{
- dir = 9
+"miU" = (
+/obj/structure/table/reinforced,
+/obj/item/stack/sheet/plasteel{
+ amount = 15
},
-/turf/open/floor/plating,
-/area/station/maintenance/department/medical)
+/obj/item/assembly/prox_sensor{
+ pixel_x = 5;
+ pixel_y = 7
+ },
+/obj/structure/fireaxecabinet/mechremoval/directional/east,
+/obj/item/stack/sheet/glass/fifty,
+/obj/item/stack/sheet/iron/fifty,
+/turf/open/floor/iron/dark/textured,
+/area/station/science/robotics/lab)
"miV" = (
/obj/effect/spawner/random/trash/mess,
/turf/open/floor/plating,
@@ -34647,6 +34500,24 @@
/obj/effect/landmark/blobstart,
/turf/open/floor/iron,
/area/station/engineering/atmos)
+"mjU" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/disposalpipe/segment,
+/obj/machinery/door/airlock/maintenance_hatch,
+/obj/effect/mapping_helpers/airlock/access/any/medical/maintenance,
+/obj/effect/mapping_helpers/airlock/unres{
+ dir = 1
+ },
+/turf/open/floor/plating,
+/area/station/maintenance/department/medical)
+"mjY" = (
+/obj/structure/cable,
+/obj/effect/turf_decal/siding/purple,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/catwalk_floor/iron_white,
+/area/station/science/xenobiology)
"mjZ" = (
/obj/machinery/atmospherics/components/binary/pump,
/turf/open/floor/iron,
@@ -34702,6 +34573,11 @@
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
/turf/open/floor/iron,
/area/station/command/gateway)
+"mkV" = (
+/obj/machinery/power/apc/auto_name/directional/west,
+/obj/structure/cable,
+/turf/open/floor/iron/white,
+/area/station/science/ordnance/testlab)
"mkX" = (
/obj/structure/lattice/catwalk,
/obj/structure/railing{
@@ -35011,20 +34887,15 @@
/obj/effect/spawner/random/structure/steam_vent,
/turf/open/floor/plating,
/area/station/maintenance/central/greater)
-"mqb" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/turf/open/floor/iron/dark,
-/area/station/science/ordnance)
-"mqn" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 5
+"mqc" = (
+/obj/structure/closet/crate/freezer,
+/obj/item/food/icecreamsandwich,
+/obj/effect/turf_decal/trimline/yellow/filled/line{
+ dir = 9
},
-/obj/structure/cable,
+/obj/structure/sign/departments/chemistry/directional/west,
/turf/open/floor/iron/white,
-/area/station/science/ordnance/storage)
+/area/station/medical/chemistry)
"mqz" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/power/apc/auto_name/directional/east,
@@ -35589,6 +35460,15 @@
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/plating,
/area/station/maintenance/department/engine)
+"mAC" = (
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/obj/machinery/camera/autoname/directional/north{
+ network = list("ss13","rd")
+ },
+/obj/machinery/disposal/bin,
+/obj/structure/disposalpipe/trunk,
+/turf/open/floor/iron/dark,
+/area/station/science/ordnance)
"mAF" = (
/obj/effect/turf_decal/sand/plating,
/obj/effect/mapping_helpers/airlock/access/all/engineering/general,
@@ -36069,6 +35949,15 @@
/obj/machinery/atmospherics/pipe/layer_manifold/yellow/visible,
/turf/open/floor/plating,
/area/station/engineering/atmos)
+"mJD" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/trimline/yellow/filled/corner{
+ dir = 8
+ },
+/turf/open/floor/iron/white,
+/area/station/medical/chemistry)
"mJG" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment{
@@ -36246,6 +36135,14 @@
/obj/effect/spawner/random/trash/food_packaging,
/turf/open/floor/iron,
/area/station/hallway/primary/central)
+"mMe" = (
+/obj/structure/cable,
+/obj/effect/turf_decal/siding/purple/corner{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/catwalk_floor/iron_white,
+/area/station/science/xenobiology)
"mMp" = (
/obj/machinery/door/airlock/highsecurity,
/obj/effect/mapping_helpers/airlock/autoname,
@@ -36487,17 +36384,6 @@
/obj/effect/landmark/event_spawn,
/turf/open/floor/wood,
/area/station/commons/lounge)
-"mRC" = (
-/obj/structure/cable,
-/obj/machinery/door/airlock/maintenance_hatch{
- name = "Xenobiology Maintenance"
- },
-/obj/effect/mapping_helpers/airlock/access/all/science/xenobio,
-/obj/structure/disposalpipe/segment,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/catwalk_floor/iron_white,
-/area/station/science/xenobiology)
"mRI" = (
/obj/effect/mob_spawn/corpse/human/clown,
/turf/open/misc/asteroid,
@@ -36506,6 +36392,16 @@
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/iron,
/area/station/engineering/main)
+"mSe" = (
+/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{
+ dir = 10
+ },
+/obj/structure/railing/corner,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/cable,
+/turf/open/floor/iron/dark,
+/area/station/science/ordnance)
"mSf" = (
/obj/machinery/mass_driver{
dir = 1;
@@ -36521,14 +36417,6 @@
/obj/item/clothing/head/fedora,
/turf/open/floor/wood,
/area/station/commons/lounge)
-"mSG" = (
-/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{
- dir = 1
- },
-/obj/machinery/meter,
-/obj/structure/cable,
-/turf/open/floor/iron/dark,
-/area/station/science/ordnance)
"mSK" = (
/turf/open/floor/iron/white,
/area/station/commons/fitness/recreation)
@@ -36544,6 +36432,18 @@
},
/turf/open/floor/engine,
/area/station/science/explab)
+"mTg" = (
+/obj/effect/turf_decal/caution/stand_clear/red,
+/obj/effect/turf_decal/stripes/line,
+/obj/machinery/door/poddoor/shutters/window/preopen{
+ id = "ordstorage"
+ },
+/obj/structure/cable,
+/obj/effect/turf_decal/stripes/corner{
+ dir = 1
+ },
+/turf/open/floor/iron/white,
+/area/station/science/ordnance/storage)
"mTs" = (
/obj/machinery/holopad,
/obj/effect/landmark/event_spawn,
@@ -36599,6 +36499,18 @@
"mUs" = (
/turf/open/floor/iron/white,
/area/station/medical/storage)
+"mUA" = (
+/obj/machinery/light/small/dim/directional/west,
+/obj/effect/mapping_helpers/broken_floor,
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/effect/turf_decal/trimline/yellow/filled/corner{
+ dir = 8
+ },
+/obj/structure/chair{
+ dir = 4
+ },
+/turf/open/floor/iron/white,
+/area/station/maintenance/department/medical)
"mUC" = (
/obj/effect/turf_decal/trimline/yellow/filled/line{
dir = 1
@@ -36807,19 +36719,6 @@
},
/turf/open/floor/carpet/red,
/area/station/command/heads_quarters/qm)
-"mYh" = (
-/obj/machinery/door/poddoor/shutters/window/preopen{
- name = "Security Shutters";
- id = "xbprotect1";
- dir = 8
- },
-/obj/structure/cable,
-/obj/machinery/door/firedoor,
-/obj/machinery/firealarm/directional/south,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/catwalk_floor/iron_white,
-/area/station/science/xenobiology)
"mYs" = (
/obj/machinery/door/airlock/public/glass{
name = "Gateway Chamber"
@@ -37148,6 +37047,11 @@
},
/turf/closed/wall,
/area/station/service/bar)
+"ndE" = (
+/obj/machinery/door/airlock/maintenance_hatch,
+/obj/effect/mapping_helpers/airlock/access/all/science/ordnance,
+/turf/open/floor/plating,
+/area/station/science/ordnance/testlab)
"ndI" = (
/obj/structure/table,
/obj/item/hand_labeler,
@@ -37193,6 +37097,20 @@
/obj/machinery/digital_clock/directional/west,
/turf/open/floor/iron/white,
/area/station/medical/paramedic)
+"neb" = (
+/obj/structure/table,
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/obj/item/pipe_dispenser{
+ pixel_x = 3;
+ pixel_y = 7
+ },
+/obj/item/pipe_dispenser,
+/obj/machinery/power/apc/auto_name/directional/south{
+ areastring = "/area/station/science/ordnance/burnchamber"
+ },
+/obj/structure/cable,
+/turf/open/floor/iron/dark,
+/area/station/science/ordnance)
"nee" = (
/turf/open/floor/iron/dark/corner{
dir = 4
@@ -37636,12 +37554,6 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/iron/white,
/area/station/medical/medbay/central)
-"nlx" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment,
-/obj/effect/decal/cleanable/dirt/dust,
-/turf/open/floor/plating,
-/area/station/maintenance/department/medical)
"nlI" = (
/obj/effect/landmark/start/depsec/engineering,
/obj/effect/turf_decal/trimline/red/filled/line{
@@ -37915,6 +37827,12 @@
},
/turf/open/floor/iron/white,
/area/station/security/medical)
+"nqi" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/iron/dark,
+/area/station/science/ordnance)
"nql" = (
/obj/effect/turf_decal/tile/red{
dir = 1
@@ -38473,6 +38391,9 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron/dark,
/area/station/ai_monitored/turret_protected/aisat/foyer)
+"nCm" = (
+/turf/open/openspace/xenobio,
+/area/station/science/xenobiology)
"nCo" = (
/obj/machinery/atmospherics/pipe/smart/simple/dark/visible,
/obj/structure/cable,
@@ -38656,13 +38577,6 @@
/obj/structure/cable,
/turf/open/floor/plating,
/area/station/security/detectives_office)
-"nGb" = (
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/obj/structure/table,
-/obj/item/holosign_creator/atmos,
-/obj/machinery/light/directional/east,
-/turf/open/floor/iron/dark,
-/area/station/science/ordnance)
"nGd" = (
/obj/effect/turf_decal/tile/red/half/contrasted{
dir = 4
@@ -38690,6 +38604,16 @@
},
/turf/open/floor/iron,
/area/station/security/prison)
+"nGV" = (
+/obj/machinery/atmospherics/pipe/smart/manifold/purple/visible{
+ dir = 8
+ },
+/obj/structure/disposalpipe/trunk/multiz{
+ dir = 1
+ },
+/obj/item/radio/intercom/directional/west,
+/turf/open/floor/iron/dark,
+/area/station/science/ordnance)
"nHj" = (
/obj/structure/cable,
/turf/open/floor/catwalk_floor/iron,
@@ -38735,17 +38659,6 @@
/obj/machinery/camera/autoname/directional/south,
/turf/open/floor/iron,
/area/station/hallway/primary/fore)
-"nIa" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/duct,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden,
-/turf/open/floor/catwalk_floor/iron_white,
-/area/station/medical/treatment_center)
"nIb" = (
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/plating,
@@ -38794,6 +38707,14 @@
},
/turf/open/floor/wood/parquet,
/area/station/cargo/boutique)
+"nJD" = (
+/obj/structure/cable,
+/obj/effect/turf_decal/sand/plating,
+/obj/structure/disposalpipe/segment,
+/obj/machinery/door/airlock/maintenance_hatch,
+/obj/effect/mapping_helpers/airlock/access/any/medical/maintenance,
+/turf/open/floor/plating,
+/area/station/asteroid)
"nJF" = (
/obj/structure/table/reinforced,
/obj/machinery/door/window/left/directional/east{
@@ -39074,13 +38995,6 @@
/obj/effect/landmark/event_spawn,
/turf/open/floor/engine,
/area/station/engineering/atmospherics_engine)
-"nNF" = (
-/obj/machinery/power/apc/auto_name/directional/west,
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/iron/white,
-/area/station/science/ordnance/testlab)
"nNK" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
dir = 1
@@ -39287,13 +39201,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron,
/area/station/hallway/primary/central)
-"nTZ" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
- dir = 8
- },
-/turf/open/floor/iron/dark,
-/area/station/science/ordnance)
"nUi" = (
/obj/structure/table/reinforced/rglass,
/obj/item/clipboard,
@@ -39307,17 +39214,6 @@
/obj/item/emergency_bed,
/turf/open/floor/iron/white,
/area/station/maintenance/aft/upper)
-"nUN" = (
-/obj/machinery/camera/autoname/directional/north{
- network = list("ss13","rd")
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/atmospherics/components/trinary/mixer{
- dir = 4
- },
-/turf/open/floor/iron/dark,
-/area/station/science/ordnance)
"nUS" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
@@ -39340,6 +39236,16 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron/dark,
/area/station/science/xenobiology)
+"nVm" = (
+/obj/machinery/computer/camera_advanced/xenobio{
+ dir = 1
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/item/storage/box/monkeycubes,
+/turf/open/floor/iron/white/textured_large,
+/area/station/science/xenobiology)
"nVp" = (
/obj/effect/turf_decal/tile/red/half/contrasted{
dir = 8
@@ -39533,6 +39439,13 @@
dir = 8
},
/area/station/engineering/atmos/storage/gas)
+"nZW" = (
+/obj/structure/barricade/wooden,
+/obj/machinery/atmospherics/components/binary/pump/on/green/visible{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/station/maintenance/department/science)
"nZY" = (
/obj/effect/mapping_helpers/broken_floor,
/obj/structure/reagent_dispensers/watertank,
@@ -39546,6 +39459,26 @@
/obj/machinery/digital_clock/directional/south,
/turf/open/floor/iron/dark/textured,
/area/station/science/robotics/lab)
+"oag" = (
+/obj/structure/table,
+/obj/item/paper_bin{
+ pixel_x = -4;
+ pixel_y = 6
+ },
+/obj/item/pen{
+ pixel_x = -4;
+ pixel_y = 5
+ },
+/obj/item/storage/box/beakers{
+ pixel_x = 24;
+ pixel_y = 6
+ },
+/obj/item/storage/box/syringes{
+ pixel_x = 11;
+ pixel_y = 4
+ },
+/turf/open/floor/glass/reinforced,
+/area/station/science/xenobiology)
"oas" = (
/obj/structure/table,
/obj/item/phone{
@@ -39557,16 +39490,6 @@
},
/turf/open/floor/iron,
/area/station/engineering/atmos/upper)
-"oaz" = (
-/obj/machinery/light/directional/north,
-/obj/structure/table,
-/obj/item/hand_labeler{
- pixel_y = 10;
- pixel_x = -13
- },
-/obj/item/folder,
-/turf/open/floor/glass/reinforced,
-/area/station/science/xenobiology)
"oaF" = (
/obj/effect/spawner/structure/window/hollow/reinforced/middle{
dir = 4
@@ -39833,6 +39756,17 @@
/obj/machinery/firealarm/directional/east,
/turf/open/floor/glass,
/area/station/command/meeting_room)
+"ofG" = (
+/obj/machinery/atmospherics/components/unary/thermomachine/freezer/layer2{
+ dir = 1
+ },
+/obj/effect/turf_decal/box/red,
+/obj/machinery/light/directional/south,
+/obj/machinery/camera/autoname/directional/west{
+ network = list("ss13","rd")
+ },
+/turf/open/floor/iron/dark,
+/area/station/science/ordnance)
"ofL" = (
/obj/effect/spawner/random/structure/crate,
/obj/effect/turf_decal/stripes/line,
@@ -39912,6 +39846,19 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/plating,
/area/station/security/prison/work)
+"oia" = (
+/obj/machinery/door/firedoor,
+/obj/machinery/door/airlock/research/glass{
+ name = "Secure Pen"
+ },
+/obj/effect/mapping_helpers/airlock/access/all/science/xenobio,
+/obj/structure/cable,
+/obj/machinery/door/poddoor/preopen{
+ id = "Xenolab";
+ name = "Test Chamber Blast Door"
+ },
+/turf/open/floor/catwalk_floor/iron_white,
+/area/station/science/xenobiology)
"oix" = (
/turf/open/floor/iron/white,
/area/station/science/ordnance/testlab)
@@ -39948,6 +39895,11 @@
},
/turf/open/floor/iron/textured,
/area/station/cargo/drone_bay)
+"ojS" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden,
+/obj/effect/turf_decal/tile/blue/fourcorners,
+/turf/open/floor/catwalk_floor/iron_white,
+/area/station/medical/treatment_center)
"oka" = (
/obj/effect/turf_decal/siding/purple{
dir = 1
@@ -39970,6 +39922,22 @@
},
/turf/open/floor/wood,
/area/station/service/lawoffice)
+"okf" = (
+/obj/machinery/light/directional/south,
+/obj/structure/table,
+/obj/item/clothing/mask/gas{
+ pixel_x = 8
+ },
+/obj/item/clothing/mask/gas{
+ pixel_y = 5;
+ pixel_x = 16
+ },
+/obj/item/clothing/mask/gas{
+ pixel_x = 12;
+ pixel_y = 2
+ },
+/turf/open/floor/glass/reinforced,
+/area/station/science/xenobiology)
"okg" = (
/obj/machinery/holopad,
/obj/effect/landmark/event_spawn,
@@ -40067,16 +40035,6 @@
},
/turf/open/floor/iron,
/area/station/engineering/atmos)
-"olY" = (
-/obj/machinery/portable_atmospherics/canister/oxygen,
-/obj/machinery/airalarm/directional/north,
-/obj/effect/turf_decal/box,
-/obj/machinery/atmospherics/components/unary/portables_connector/visible{
- dir = 8;
- name = "Oxygen Chamber Injection Port"
- },
-/turf/open/floor/iron/white/smooth_large,
-/area/station/science/ordnance/storage)
"omv" = (
/obj/structure/rack,
/obj/effect/spawner/random/clothing/backpack,
@@ -40372,9 +40330,6 @@
/obj/structure/cable,
/turf/open/floor/plating,
/area/station/maintenance/department/cargo)
-"orY" = (
-/turf/open/openspace/xenobio,
-/area/station/science/xenobiology)
"osd" = (
/obj/structure/cable,
/obj/effect/turf_decal/trimline/blue/filled/line{
@@ -40439,11 +40394,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/catwalk_floor/iron_dark,
/area/station/ai_monitored/turret_protected/aisat_interior)
-"osT" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden,
-/obj/effect/turf_decal/tile/blue/fourcorners,
-/turf/open/floor/catwalk_floor/iron_white,
-/area/station/medical/treatment_center)
"osX" = (
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
@@ -40464,6 +40414,13 @@
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/plating,
/area/station/maintenance/department/bridge)
+"otJ" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/obj/structure/cable,
+/turf/open/floor/iron/white,
+/area/station/science/ordnance/storage)
"otY" = (
/obj/effect/decal/cleanable/dirt/dust,
/obj/effect/spawner/random/structure/closet_empty/crate,
@@ -40689,26 +40646,6 @@
/obj/effect/mapping_helpers/broken_floor,
/turf/open/floor/wood/tile,
/area/station/service/bar)
-"oxW" = (
-/obj/machinery/door/airlock/research{
- name = "Ordnance Lab"
- },
-/obj/effect/mapping_helpers/airlock/access/all/science/ordnance,
-/obj/structure/cable,
-/obj/machinery/door/firedoor/heavy,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/turf/open/floor/catwalk_floor/iron_white,
-/area/station/science/ordnance)
-"oyd" = (
-/obj/effect/turf_decal/bot,
-/obj/machinery/button/door/directional/east{
- name = "shutter control";
- id = "ordauxgarage"
- },
-/obj/structure/tank_dispenser,
-/turf/open/floor/plating,
-/area/station/science/ordnance)
"oyq" = (
/obj/machinery/light/cold/directional/west,
/obj/effect/turf_decal/tile/neutral/fourcorners,
@@ -41067,6 +41004,15 @@
/obj/effect/spawner/random/maintenance,
/turf/open/floor/plating,
/area/station/maintenance/port/greater)
+"oEP" = (
+/obj/structure/window/spawner/directional/east,
+/obj/machinery/portable_atmospherics/pump,
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/iron/dark/smooth_large,
+/area/station/science/ordnance)
"oEZ" = (
/obj/machinery/atmospherics/pipe/bridge_pipe/yellow/visible,
/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible{
@@ -41579,12 +41525,6 @@
/obj/machinery/camera/autoname/directional/south,
/turf/open/floor/iron/dark,
/area/station/command/bridge)
-"oOP" = (
-/obj/structure/cable,
-/obj/effect/turf_decal/tile/dark_blue/half/contrasted,
-/obj/machinery/incident_display/bridge/directional/south,
-/turf/open/floor/iron,
-/area/station/command/bridge)
"oOR" = (
/obj/structure/hedge,
/obj/effect/turf_decal/siding/green{
@@ -41864,14 +41804,6 @@
/obj/structure/chair/sofa/bench/right,
/turf/open/floor/iron,
/area/station/hallway/primary/central)
-"oTP" = (
-/obj/effect/turf_decal/stripes/corner{
- dir = 1
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/portable_atmospherics/scrubber,
-/turf/open/floor/iron/dark/smooth_large,
-/area/station/science/ordnance)
"oTW" = (
/obj/structure/closet/secure_closet/quartermaster,
/obj/machinery/light/small/directional/east,
@@ -42008,6 +41940,11 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/circuit/green,
/area/station/ai_monitored/turret_protected/ai_upload)
+"oVS" = (
+/obj/structure/cable,
+/obj/effect/turf_decal/siding/purple,
+/turf/open/floor/catwalk_floor/iron_white,
+/area/station/science/xenobiology)
"oVV" = (
/obj/machinery/camera/directional/east{
c_tag = "Xenobiology Lab - Secure Pen";
@@ -42598,11 +42535,6 @@
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/iron,
/area/station/security/detectives_office)
-"pgI" = (
-/obj/structure/barricade/wooden,
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plating,
-/area/station/maintenance/department/science)
"pgJ" = (
/obj/structure/table/reinforced,
/obj/effect/turf_decal/tile/red/fourcorners,
@@ -42745,17 +42677,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron,
/area/station/cargo/storage)
-"piH" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/duct,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden,
-/obj/effect/turf_decal/tile/blue/fourcorners,
-/turf/open/floor/catwalk_floor/iron_white,
-/area/station/medical/treatment_center)
"piS" = (
/obj/structure/girder/displaced,
/obj/effect/turf_decal/sand/plating,
@@ -42814,13 +42735,6 @@
dir = 8
},
/area/station/service/theater)
-"pjK" = (
-/obj/machinery/portable_atmospherics/canister/oxygen,
-/obj/machinery/light_switch/directional/east,
-/obj/structure/cable,
-/obj/machinery/power/apc/auto_name/directional/north,
-/turf/open/floor/iron/white/smooth_large,
-/area/station/science/ordnance/storage)
"pjN" = (
/obj/structure/transit_tube/horizontal{
dir = 2
@@ -42985,6 +42899,17 @@
/obj/machinery/firealarm/directional/south,
/turf/open/floor/iron/dark,
/area/station/medical/treatment_center)
+"pmp" = (
+/obj/machinery/door/airlock/research/glass{
+ name = "Chemistry Minisat"
+ },
+/obj/effect/mapping_helpers/airlock/access/all/medical/chemistry,
+/obj/effect/mapping_helpers/airlock/unres{
+ dir = 8
+ },
+/obj/effect/landmark/navigate_destination/chemfactory,
+/turf/open/floor/iron/white,
+/area/station/medical/chemistry/minisat)
"pmC" = (
/obj/effect/turf_decal/tile/neutral,
/turf/open/floor/iron/dark,
@@ -43323,6 +43248,13 @@
},
/turf/open/floor/engine,
/area/station/engineering/supermatter/room)
+"psQ" = (
+/obj/effect/mapping_helpers/broken_floor,
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/effect/turf_decal/stripes/line,
+/obj/machinery/portable_atmospherics/pipe_scrubber,
+/turf/open/floor/iron/dark/smooth_large,
+/area/station/science/ordnance)
"psT" = (
/obj/effect/turf_decal/stripes/line{
dir = 8
@@ -43598,16 +43530,6 @@
/obj/effect/decal/cleanable/blood/tracks,
/turf/open/floor/plating/airless,
/area/station/maintenance/department/medical/central)
-"pxU" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/effect/turf_decal/trimline/yellow/filled/corner{
- dir = 4
- },
-/obj/effect/turf_decal/trimline/yellow/filled/corner,
-/turf/open/floor/iron/white,
-/area/station/maintenance/department/medical)
"pxY" = (
/obj/structure/reagent_dispensers/fueltank,
/obj/effect/decal/cleanable/dirt,
@@ -43947,10 +43869,6 @@
},
/turf/open/floor/iron/white/smooth_large,
/area/station/medical/chemistry)
-"pDr" = (
-/obj/effect/decal/cleanable/dirt/dust,
-/turf/open/floor/iron/white,
-/area/station/maintenance/department/medical)
"pDs" = (
/obj/structure/chair,
/obj/machinery/light/small/directional/north,
@@ -44023,16 +43941,6 @@
},
/turf/open/floor/iron/textured,
/area/station/engineering/storage/tech)
-"pEq" = (
-/obj/machinery/atmospherics/pipe/smart/manifold/purple/visible{
- dir = 8
- },
-/obj/structure/disposalpipe/trunk/multiz{
- dir = 1
- },
-/obj/structure/extinguisher_cabinet/directional/west,
-/turf/open/floor/iron/dark,
-/area/station/science/ordnance)
"pEH" = (
/turf/closed/wall/rock/porous,
/area/station/cargo/miningoffice)
@@ -44223,6 +44131,16 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron,
/area/station/cargo/warehouse/upper)
+"pIk" = (
+/obj/structure/closet/crate/science{
+ opened = 1;
+ icon_state = "scicrateopen"
+ },
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/effect/turf_decal/stripes/line,
+/obj/item/tank,
+/turf/open/floor/iron/dark/smooth_large,
+/area/station/science/ordnance)
"pIp" = (
/obj/structure/railing{
dir = 4
@@ -44303,6 +44221,21 @@
},
/turf/open/floor/iron/white,
/area/station/science/lobby)
+"pJU" = (
+/obj/item/stack/sheet/glass,
+/obj/item/stack/sheet/iron/fifty,
+/obj/item/clothing/glasses/welding,
+/obj/item/disk/tech_disk{
+ pixel_y = 6
+ },
+/obj/item/reagent_containers/dropper,
+/obj/structure/table,
+/obj/machinery/requests_console/auto_name/directional/north,
+/obj/effect/mapping_helpers/requests_console/supplies,
+/obj/effect/mapping_helpers/requests_console/ore_update,
+/obj/effect/mapping_helpers/requests_console/assistance,
+/turf/open/floor/iron/white,
+/area/station/science/lab)
"pKb" = (
/obj/effect/spawner/random/trash/cigbutt{
spawn_random_offset = 4;
@@ -45515,12 +45448,6 @@
"qfB" = (
/turf/closed/wall,
/area/station/medical/pharmacy)
-"qfE" = (
-/obj/machinery/air_sensor/oxygen_tank{
- chamber_id = "o2ordance"
- },
-/turf/open/floor/engine/o2,
-/area/station/science/ordnance)
"qfJ" = (
/obj/structure/sign/poster/random/directional/north,
/obj/structure/table/wood/fancy/orange,
@@ -45757,6 +45684,12 @@
/obj/structure/window/spawner/directional/north,
/turf/open/misc/grass,
/area/station/ai_monitored/turret_protected/aisat/foyer)
+"qjs" = (
+/obj/machinery/camera/autoname/directional/south{
+ network = list("ss13","rd")
+ },
+/turf/open/floor/catwalk_floor/iron_white,
+/area/station/science/ordnance/testlab)
"qjw" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron,
@@ -46242,6 +46175,13 @@
/obj/machinery/air_sensor/nitrous_tank,
/turf/open/floor/engine/n2o,
/area/station/engineering/atmos)
+"qsj" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/components/tank/oxygen{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/station/maintenance/department/science)
"qsu" = (
/obj/machinery/light/directional/north,
/obj/machinery/rnd/production/protolathe/department/engineering,
@@ -46723,6 +46663,18 @@
},
/turf/open/floor/carpet,
/area/station/medical/psychology)
+"qDM" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/machinery/atmospherics/components/unary/portables_connector/visible{
+ dir = 1
+ },
+/obj/machinery/portable_atmospherics/canister,
+/obj/effect/turf_decal/box/red,
+/obj/machinery/light/directional/south,
+/turf/open/floor/iron/dark/smooth_large,
+/area/station/science/ordnance)
"qDP" = (
/obj/structure/lattice/catwalk,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -46856,20 +46808,21 @@
/obj/effect/turf_decal/delivery,
/turf/open/floor/iron,
/area/station/ai_monitored/command/storage/eva)
-"qGr" = (
-/obj/machinery/door/poddoor/shutters/window/preopen{
- id = "ordstorage"
- },
-/obj/effect/turf_decal/stripes/line,
-/obj/structure/cable,
-/obj/effect/turf_decal/caution/stand_clear/red,
-/turf/open/floor/iron/white,
-/area/station/science/ordnance/storage)
"qGB" = (
/obj/machinery/ticket_machine/directional/north,
/obj/structure/chair/sofa/bench,
/turf/open/floor/iron/white,
/area/station/medical/exam_room)
+"qGD" = (
+/obj/structure/table,
+/obj/machinery/reagentgrinder{
+ pixel_y = 8
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/iron/white/textured_large,
+/area/station/science/xenobiology)
"qGN" = (
/obj/structure/table/wood,
/obj/effect/spawner/random/entertainment/deck,
@@ -46993,16 +46946,6 @@
/obj/effect/mapping_helpers/burnt_floor,
/turf/open/floor/plating,
/area/station/maintenance/central/greater)
-"qIQ" = (
-/obj/structure/chair/office{
- dir = 8
- },
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 5
- },
-/turf/open/floor/catwalk_floor/iron_white,
-/area/station/science/lab)
"qIS" = (
/obj/machinery/cryo_cell,
/obj/structure/window/reinforced/spawner/directional/west,
@@ -47542,6 +47485,14 @@
/obj/effect/decal/cleanable/glass,
/turf/open/floor/plating,
/area/station/maintenance/department/engine)
+"qUi" = (
+/obj/machinery/processor/slime,
+/obj/effect/turf_decal/bot_red,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/iron/white/textured_large,
+/area/station/science/xenobiology)
"qUl" = (
/obj/effect/turf_decal/tile/neutral,
/obj/structure/table,
@@ -47584,13 +47535,6 @@
dir = 1
},
/area/station/engineering/atmos)
-"qVB" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/structure/disposalpipe/segment,
-/turf/open/floor/iron/dark,
-/area/station/science/ordnance)
"qVD" = (
/obj/structure/railing,
/obj/structure/table,
@@ -47721,14 +47665,11 @@
},
/turf/open/floor/iron,
/area/station/hallway/primary/central)
-"qXg" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+"qXj" = (
+/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/atmospherics/components/binary/valve/digital{
- dir = 8
- },
-/turf/open/floor/iron/dark,
-/area/station/science/ordnance)
+/turf/open/floor/catwalk_floor/iron_white,
+/area/station/science/xenobiology)
"qXm" = (
/turf/open/floor/iron/showroomfloor,
/area/station/engineering/main)
@@ -47745,23 +47686,17 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/white,
/area/station/science/lobby)
-"qXA" = (
-/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{
- dir = 5
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 6
- },
-/obj/machinery/computer/atmos_control/oxygen_tank{
- atmos_chambers = list(o2ordance="Oxygen Supply")
- },
-/turf/open/floor/iron/dark/smooth_large,
-/area/station/science/ordnance)
"qXB" = (
/obj/structure/rack,
/obj/effect/spawner/random/techstorage/security_all,
/turf/open/floor/iron/textured,
/area/station/engineering/storage/tech)
+"qXE" = (
+/obj/machinery/portable_atmospherics/canister/oxygen,
+/obj/structure/sign/poster/official/wtf_is_co2/directional/north,
+/obj/machinery/light_switch/directional/east,
+/turf/open/floor/iron/white/smooth_large,
+/area/station/science/ordnance/storage)
"qXK" = (
/obj/effect/turf_decal/tile/red,
/obj/effect/landmark/event_spawn,
@@ -48086,6 +48021,11 @@
/obj/machinery/firealarm/directional/south,
/turf/open/floor/iron,
/area/station/security/mechbay)
+"rcH" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/item/wrench,
+/turf/open/floor/plating,
+/area/station/maintenance/department/science)
"rcP" = (
/obj/effect/turf_decal/stripes/asteroid/corner,
/turf/open/misc/asteroid,
@@ -48139,11 +48079,6 @@
/obj/machinery/telecomms/processor/preset_one,
/turf/open/floor/circuit/green/telecomms/mainframe,
/area/station/tcommsat/server)
-"rdM" = (
-/obj/effect/spawner/structure/window/reinforced/plasma,
-/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible,
-/turf/open/floor/plating,
-/area/station/science/ordnance)
"rdP" = (
/obj/machinery/chem_dispenser,
/obj/machinery/newscaster/directional/east,
@@ -48275,14 +48210,6 @@
/obj/effect/spawner/random/vending/snackvend,
/turf/open/floor/iron/dark/smooth_large,
/area/station/hallway/primary/central)
-"rfA" = (
-/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{
- dir = 10
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/iron/dark,
-/area/station/science/ordnance)
"rfQ" = (
/obj/effect/turf_decal/tile/brown/half/contrasted{
dir = 1
@@ -48699,18 +48626,6 @@
},
/turf/open/floor/iron/dark,
/area/station/science/ordnance)
-"rkK" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/atmospherics/components/unary/portables_connector/visible{
- dir = 1
- },
-/obj/effect/turf_decal/box/red,
-/turf/open/floor/iron/dark,
-/area/station/science/ordnance)
"rkL" = (
/obj/structure/table,
/obj/structure/window/spawner/directional/east,
@@ -49161,14 +49076,6 @@
/obj/effect/turf_decal/tile/blue/half/contrasted,
/turf/open/floor/iron/white,
/area/station/medical/medbay/lobby)
-"rtq" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 9
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/portable_atmospherics/scrubber,
-/turf/open/floor/iron/dark/smooth_large,
-/area/station/science/ordnance)
"rts" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
dir = 1
@@ -49316,15 +49223,6 @@
/obj/item/piggy_bank/vault,
/turf/open/floor/iron/dark,
/area/station/ai_monitored/command/nuke_storage)
-"rwA" = (
-/obj/machinery/door/poddoor/shutters/window/preopen{
- id = "ordstorage"
- },
-/obj/effect/turf_decal/stripes/line,
-/obj/effect/turf_decal/caution/stand_clear/red,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/turf/open/floor/iron/white,
-/area/station/science/ordnance/storage)
"rwD" = (
/obj/structure/cable,
/obj/effect/turf_decal/siding/wood/corner{
@@ -49657,11 +49555,6 @@
},
/turf/open/floor/engine/n2o,
/area/station/engineering/atmos)
-"rBq" = (
-/obj/structure/cable,
-/obj/effect/turf_decal/siding/purple,
-/turf/open/floor/catwalk_floor/iron_white,
-/area/station/science/xenobiology)
"rBt" = (
/obj/effect/turf_decal/stripes/line{
dir = 1
@@ -49753,6 +49646,17 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/white,
/area/station/medical/treatment_center)
+"rCD" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/duct,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden,
+/obj/effect/turf_decal/tile/blue/fourcorners,
+/turf/open/floor/catwalk_floor/iron_white,
+/area/station/medical/treatment_center)
"rCL" = (
/obj/effect/turf_decal/stripes/line{
dir = 9
@@ -49918,16 +49822,6 @@
/obj/effect/mapping_helpers/airlock/access/all/engineering/external,
/turf/open/floor/plating,
/area/station/cargo/storage)
-"rEV" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/effect/turf_decal/trimline/yellow/filled/line,
-/obj/effect/turf_decal/trimline/yellow/filled/corner{
- dir = 1
- },
-/turf/open/floor/iron/white,
-/area/station/medical/chemistry)
"rFb" = (
/obj/effect/turf_decal/trimline/green/filled/line{
dir = 9
@@ -50162,12 +50056,6 @@
},
/turf/open/floor/iron,
/area/station/engineering/main)
-"rJv" = (
-/obj/structure/sign/warning/chem_diamond/directional/south,
-/obj/effect/decal/cleanable/dirt/dust,
-/obj/effect/spawner/random/structure/girder,
-/turf/open/floor/plating,
-/area/station/maintenance/department/medical)
"rJy" = (
/obj/machinery/portable_atmospherics/canister/air,
/obj/effect/turf_decal/bot,
@@ -50372,6 +50260,12 @@
/obj/item/holosign_creator/robot_seat/restaurant,
/turf/open/floor/iron/kitchen,
/area/station/service/kitchen)
+"rPh" = (
+/obj/effect/turf_decal/sand/plating,
+/obj/machinery/light/small/directional/south,
+/obj/structure/broken_flooring/pile,
+/turf/open/floor/plating,
+/area/station/science/ordnance)
"rPi" = (
/obj/structure/flora/bush/flowers_br/style_random,
/obj/structure/window/spawner/directional/west,
@@ -50415,6 +50309,30 @@
},
/turf/open/floor/iron/textured_large,
/area/station/hallway/primary/central)
+"rPT" = (
+/obj/effect/mapping_helpers/broken_floor,
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/structure/table,
+/obj/item/reagent_containers/cup/beaker{
+ pixel_x = -6;
+ pixel_y = 4
+ },
+/obj/item/reagent_containers/syringe{
+ pixel_x = 16;
+ pixel_y = 1
+ },
+/obj/item/reagent_containers/syringe{
+ pixel_x = 8;
+ pixel_y = 10
+ },
+/obj/structure/sign/poster/contraband/random/directional/north,
+/turf/open/floor/iron/white,
+/area/station/maintenance/department/medical)
+"rPV" = (
+/obj/effect/turf_decal/tile/purple/fourcorners,
+/obj/machinery/light/small/directional/north,
+/turf/open/floor/iron,
+/area/station/science/ordnance)
"rQb" = (
/obj/effect/turf_decal/siding/thinplating_new/end,
/obj/effect/decal/cleanable/dirt/dust,
@@ -50571,14 +50489,6 @@
dir = 1
},
/area/station/engineering/atmos)
-"rSB" = (
-/obj/machinery/atmospherics/pipe/smart/manifold/yellow/visible{
- dir = 1
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/iron/dark,
-/area/station/science/ordnance)
"rSF" = (
/obj/effect/turf_decal/siding,
/obj/structure/table,
@@ -50876,7 +50786,7 @@
/turf/open/floor/iron,
/area/station/cargo/storage)
"rWI" = (
-/obj/structure/reagent_dispensers/watertank,
+/obj/structure/reagent_dispensers/watertank/high,
/obj/effect/turf_decal/bot{
dir = 1
},
@@ -50924,6 +50834,14 @@
/obj/structure/cable,
/turf/open/floor/plating,
/area/station/command/heads_quarters/qm)
+"rXf" = (
+/obj/structure/table,
+/obj/item/paper_bin{
+ pixel_x = -5;
+ pixel_y = 6
+ },
+/turf/open/floor/glass/reinforced,
+/area/station/science/xenobiology)
"rXg" = (
/obj/structure/spirit_board,
/obj/item/storage/box/bodybags{
@@ -51139,6 +51057,14 @@
/obj/machinery/holopad,
/turf/open/floor/iron,
/area/station/service/hydroponics)
+"rZE" = (
+/obj/machinery/portable_atmospherics/pump,
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt/dust,
+/turf/open/floor/iron/dark/smooth_large,
+/area/station/science/ordnance)
"rZJ" = (
/obj/effect/turf_decal/siding/thinplating_new,
/obj/effect/decal/cleanable/dirt/dust,
@@ -51285,6 +51211,12 @@
/obj/structure/lattice/catwalk,
/turf/open/openspace,
/area/station/science/xenobiology)
+"sbS" = (
+/obj/structure/cable,
+/obj/effect/turf_decal/siding/purple/corner,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/catwalk_floor/iron_white,
+/area/station/science/xenobiology)
"sbU" = (
/obj/effect/decal/cleanable/dirt/dust,
/obj/effect/spawner/random/structure/crate,
@@ -51366,6 +51298,12 @@
/obj/structure/cable,
/turf/open/floor/iron,
/area/station/security/execution/transfer)
+"sdB" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/light/small/broken/directional/north,
+/obj/machinery/portable_atmospherics/canister,
+/turf/open/floor/plating,
+/area/station/maintenance/department/science)
"sdW" = (
/obj/structure/railing{
dir = 9
@@ -51640,14 +51578,6 @@
/obj/effect/landmark/blobstart,
/turf/open/floor/iron/dark,
/area/station/security/lockers)
-"siU" = (
-/obj/structure/rack,
-/obj/effect/spawner/random/maintenance,
-/obj/effect/turf_decal/trimline/yellow/filled/corner,
-/obj/effect/decal/cleanable/dirt/dust,
-/obj/machinery/light/small/dim/directional/north,
-/turf/open/floor/iron/white,
-/area/station/maintenance/department/medical)
"siX" = (
/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/visible,
/obj/machinery/meter/monitored/waste_loop,
@@ -51711,6 +51641,12 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron,
/area/station/maintenance/disposal/incinerator)
+"sjT" = (
+/obj/effect/turf_decal/tile/brown/fourcorners,
+/obj/structure/railing,
+/obj/machinery/door/firedoor/border_only,
+/turf/open/floor/iron,
+/area/station/cargo/storage)
"sjW" = (
/obj/machinery/atmospherics/pipe/bridge_pipe/yellow/visible{
dir = 4
@@ -51884,6 +51820,15 @@
/obj/structure/cable,
/turf/open/floor/iron,
/area/station/hallway/primary/starboard)
+"smH" = (
+/obj/machinery/atmospherics/components/binary/valve/digital{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/cable,
+/turf/open/floor/iron/dark,
+/area/station/science/ordnance)
"smM" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -52069,20 +52014,6 @@
/obj/effect/spawner/random/trash/bucket,
/turf/open/floor/plating,
/area/station/maintenance/department/medical/central)
-"spU" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/effect/mapping_helpers/airlock/access/all/medical/chemistry,
-/obj/effect/turf_decal/trimline/yellow/filled/line,
-/obj/effect/turf_decal/trimline/yellow/filled/line{
- dir = 1
- },
-/obj/machinery/door/airlock/research/glass{
- name = "Chemistry Minisat"
- },
-/turf/open/floor/iron/white,
-/area/station/medical/chemistry)
"sqb" = (
/obj/structure/cable,
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
@@ -52280,18 +52211,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron/white,
/area/station/ai_monitored/turret_protected/ai_upload_foyer)
-"stk" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/structure/disposalpipe/segment,
-/obj/machinery/door/airlock/maintenance_hatch,
-/obj/effect/mapping_helpers/airlock/access/any/medical/maintenance,
-/obj/effect/mapping_helpers/airlock/unres{
- dir = 1
- },
-/turf/open/floor/plating,
-/area/station/maintenance/department/medical)
"stp" = (
/obj/structure/railing{
dir = 1
@@ -52355,6 +52274,14 @@
},
/turf/open/floor/engine/xenobio,
/area/station/science/xenobiology)
+"suo" = (
+/obj/machinery/door/poddoor/shutters/window/preopen{
+ id = "ordstorage"
+ },
+/obj/effect/turf_decal/stripes/line,
+/obj/effect/turf_decal/caution/stand_clear/red,
+/turf/open/floor/iron/white,
+/area/station/science/ordnance/storage)
"suq" = (
/obj/effect/landmark/start/station_engineer,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -52444,17 +52371,6 @@
/obj/effect/turf_decal/trimline/blue/filled/line,
/turf/open/floor/iron/white,
/area/station/medical/medbay/central)
-"svE" = (
-/obj/structure/table,
-/obj/item/storage/box/syringes{
- pixel_x = -8;
- pixel_y = 11
- },
-/obj/item/storage/box/beakers{
- pixel_x = 4
- },
-/turf/open/floor/glass/reinforced,
-/area/station/science/xenobiology)
"svK" = (
/obj/structure/cable,
/obj/effect/decal/cleanable/dirt,
@@ -53081,6 +52997,42 @@
},
/turf/open/floor/iron/white/textured_large,
/area/station/science/research)
+"sHo" = (
+/obj/structure/table,
+/obj/item/stack/sheet/iron/fifty{
+ pixel_x = 3;
+ pixel_y = 6
+ },
+/obj/item/construction/plumbing{
+ pixel_x = 34;
+ pixel_y = 6
+ },
+/obj/item/stack/ducts/fifty{
+ pixel_x = 26;
+ pixel_y = 2
+ },
+/obj/item/stack/ducts/fifty{
+ pixel_x = 25;
+ pixel_y = 1
+ },
+/obj/item/stack/ducts/fifty{
+ pixel_x = 24;
+ pixel_y = -1
+ },
+/obj/item/stack/ducts/fifty{
+ pixel_x = 23;
+ pixel_y = -3
+ },
+/obj/item/stack/ducts/fifty{
+ pixel_x = 23;
+ pixel_y = -5
+ },
+/obj/effect/turf_decal/trimline/yellow/filled/line{
+ dir = 1
+ },
+/obj/machinery/light/small/dim/directional/north,
+/turf/open/floor/iron/white,
+/area/station/medical/chemistry)
"sHz" = (
/obj/effect/turf_decal/stripes/line{
dir = 4
@@ -53566,14 +53518,6 @@
},
/turf/open/floor/iron/dark/smooth_large,
/area/station/science/xenobiology)
-"sQU" = (
-/obj/machinery/light/directional/south,
-/obj/structure/table,
-/obj/item/clothing/mask/gas,
-/obj/item/clothing/mask/gas,
-/obj/item/clothing/mask/gas,
-/turf/open/floor/glass/reinforced,
-/area/station/science/xenobiology)
"sRj" = (
/obj/structure/sign/poster/official/random/directional/east,
/obj/effect/turf_decal/siding/purple{
@@ -54017,12 +53961,6 @@
},
/turf/open/floor/iron/white,
/area/station/medical/paramedic)
-"sZr" = (
-/obj/machinery/atmospherics/pipe/smart/simple/purple/visible{
- dir = 5
- },
-/turf/closed/wall/r_wall,
-/area/station/science/ordnance/storage)
"sZs" = (
/obj/effect/landmark/event_spawn,
/obj/effect/turf_decal/siding/wood,
@@ -54581,19 +54519,6 @@
/obj/structure/cable,
/turf/open/floor/plating,
/area/station/maintenance/department/medical/central)
-"tky" = (
-/obj/structure/table,
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/obj/item/storage/toolbox/mechanical{
- pixel_x = -2;
- pixel_y = 8
- },
-/obj/item/storage/toolbox/mechanical{
- pixel_x = 3;
- pixel_y = -2
- },
-/turf/open/floor/iron/dark,
-/area/station/science/ordnance)
"tkD" = (
/obj/effect/turf_decal/trimline/yellow/filled/warning,
/obj/structure/railing,
@@ -54902,13 +54827,11 @@
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/wood,
/area/station/maintenance/central/lesser)
-"tqf" = (
-/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/oxygen_input{
- dir = 4;
- chamber_id = "o2ordance"
- },
-/turf/open/floor/engine/o2,
-/area/station/science/ordnance)
+"tpN" = (
+/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/co2,
+/obj/effect/turf_decal/tile/blue/fourcorners,
+/turf/open/floor/catwalk_floor/iron_white,
+/area/station/medical/treatment_center)
"tqk" = (
/obj/machinery/conveyor{
id = "garbage";
@@ -55062,6 +54985,15 @@
/obj/effect/landmark/start/prisoner,
/turf/open/floor/iron,
/area/station/security/prison)
+"tsm" = (
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment{
+ dir = 6
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/catwalk_floor/iron_white,
+/area/station/science/xenobiology)
"tsq" = (
/obj/structure/chair/sofa/bench/right{
dir = 1
@@ -55192,6 +55124,20 @@
/obj/effect/turf_decal/tile/yellow,
/turf/open/floor/iron,
/area/station/hallway/primary/starboard)
+"tuL" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/mapping_helpers/airlock/access/all/medical/chemistry,
+/obj/effect/turf_decal/trimline/yellow/filled/line,
+/obj/effect/turf_decal/trimline/yellow/filled/line{
+ dir = 1
+ },
+/obj/machinery/door/airlock/research/glass{
+ name = "Chemistry Minisat"
+ },
+/turf/open/floor/iron/white,
+/area/station/medical/chemistry)
"tuR" = (
/obj/machinery/door/firedoor/border_only,
/obj/structure/railing,
@@ -55237,24 +55183,12 @@
},
/turf/open/floor/wood/parquet,
/area/station/service/theater)
-"tvt" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/turf/open/floor/catwalk_floor/iron_white,
-/area/station/science/xenobiology)
"tvB" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
dir = 1
},
/turf/open/floor/iron/dark,
/area/station/science/ordnance)
-"tvQ" = (
-/obj/structure/chair/sofa/bench,
-/obj/effect/landmark/start/prisoner,
-/obj/structure/cable,
-/turf/open/floor/iron,
-/area/station/security/prison)
"twf" = (
/obj/machinery/door/poddoor/shutters/radiation/preopen{
id = "soup";
@@ -55591,14 +55525,6 @@
/obj/machinery/light_switch/directional/south,
/turf/open/floor/iron/textured,
/area/station/cargo/miningoffice)
-"tCz" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/turf/open/floor/catwalk_floor/iron_white,
-/area/station/science/lab)
"tCE" = (
/obj/effect/turf_decal/tile/neutral,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -55702,11 +55628,6 @@
},
/turf/open/floor/iron/dark/airless,
/area/station/science/ordnance)
-"tEm" = (
-/obj/effect/turf_decal/tile/purple/fourcorners,
-/obj/machinery/light/small/directional/north,
-/turf/open/floor/iron,
-/area/station/command/heads_quarters/rd)
"tEn" = (
/obj/structure/cable,
/obj/effect/turf_decal/tile/blue{
@@ -55940,24 +55861,11 @@
dir = 8
},
/area/station/command/meeting_room)
-"tId" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/oxygen_output{
- chamber_id = "o2ordance"
- },
-/turf/open/floor/engine/o2,
-/area/station/science/ordnance)
"tIr" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/cable,
/turf/open/floor/plating,
/area/station/security/warden)
-"tIs" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 5
- },
-/turf/open/floor/catwalk_floor/iron_white,
-/area/station/science/xenobiology)
"tIE" = (
/obj/effect/landmark/secequipment,
/obj/effect/turf_decal/tile/red/anticorner/contrasted{
@@ -56068,10 +55976,6 @@
},
/turf/open/floor/iron,
/area/station/maintenance/solars/starboard/fore)
-"tKD" = (
-/obj/effect/spawner/structure/window/reinforced/plasma,
-/turf/open/floor/plating,
-/area/station/science/ordnance)
"tKX" = (
/obj/structure/table/reinforced,
/obj/item/storage/toolbox/mechanical{
@@ -56426,11 +56330,6 @@
/obj/structure/sign/poster/random/directional/north,
/turf/open/openspace,
/area/station/science/research)
-"tPE" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/catwalk_floor/iron_white,
-/area/station/science/xenobiology)
"tPJ" = (
/obj/machinery/light_switch/directional/west,
/obj/structure/disposalpipe/segment,
@@ -56566,6 +56465,13 @@
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/iron,
/area/station/security/brig/entrance)
+"tRZ" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/obj/machinery/portable_atmospherics/scrubber,
+/turf/open/floor/iron/dark/smooth_large,
+/area/station/science/ordnance)
"tSc" = (
/obj/machinery/light/directional/north,
/turf/open/floor/iron,
@@ -56676,18 +56582,6 @@
},
/turf/open/floor/iron/dark,
/area/station/security/warden)
-"tUr" = (
-/obj/machinery/light/small/dim/directional/west,
-/obj/effect/mapping_helpers/broken_floor,
-/obj/effect/decal/cleanable/dirt/dust,
-/obj/effect/turf_decal/trimline/yellow/filled/corner{
- dir = 8
- },
-/obj/structure/chair{
- dir = 4
- },
-/turf/open/floor/iron/white,
-/area/station/maintenance/department/medical)
"tUD" = (
/obj/structure/cable,
/turf/open/floor/iron/dark/side{
@@ -56980,12 +56874,6 @@
},
/turf/open/floor/iron/white,
/area/station/medical/surgery/theatre)
-"tZR" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/catwalk_floor/iron_white,
-/area/station/science/xenobiology)
"tZW" = (
/obj/machinery/camera/autoname/directional/south,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -57023,6 +56911,17 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/plating,
/area/station/maintenance/department/science)
+"uaw" = (
+/obj/effect/turf_decal/tile/neutral/opposingcorners{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/purple{
+ dir = 4
+ },
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/iron/dark,
+/area/station/command/heads_quarters/rd)
"uay" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/turf_decal/stripes/white/line{
@@ -57593,16 +57492,6 @@
},
/turf/open/floor/plating,
/area/station/medical/pharmacy)
-"uke" = (
-/obj/machinery/computer/camera_advanced/xenobio{
- dir = 1
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/item/storage/box/monkeycubes,
-/turf/open/floor/iron/white/textured_large,
-/area/station/science/xenobiology)
"ukl" = (
/obj/machinery/door/airlock/external{
name = "Solar Maintenance"
@@ -57849,11 +57738,6 @@
/obj/machinery/atmospherics/components/binary/valve,
/turf/open/floor/plating,
/area/station/maintenance/department/medical/central)
-"uoP" = (
-/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/co2,
-/obj/effect/turf_decal/tile/blue/fourcorners,
-/turf/open/floor/catwalk_floor/iron_white,
-/area/station/medical/treatment_center)
"uoY" = (
/obj/structure/cable,
/obj/effect/turf_decal/trimline/purple/filled/arrow_ccw,
@@ -58360,6 +58244,15 @@
},
/turf/open/floor/iron/dark/corner,
/area/station/engineering/atmos)
+"uya" = (
+/obj/effect/turf_decal/box/corners{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/iron/dark,
+/area/station/science/ordnance)
"uyc" = (
/obj/machinery/light/cold/directional/west,
/obj/effect/turf_decal/tile/neutral/fourcorners,
@@ -58566,6 +58459,16 @@
/obj/effect/turf_decal/sand/plating,
/turf/open/floor/plating/airless,
/area/station/asteroid)
+"uBU" = (
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment{
+ dir = 9
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/iron/dark,
+/area/station/science/ordnance)
"uCj" = (
/obj/effect/turf_decal/tile/blue/opposingcorners,
/obj/effect/turf_decal/tile/red/opposingcorners{
@@ -58819,15 +58722,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron,
/area/station/security/prison)
-"uGx" = (
-/obj/item/toy/plush/lizard_plushie/green{
- name = "Hauls-The-Crates"
- },
-/obj/effect/spawner/random/structure/table_or_rack,
-/obj/effect/decal/cleanable/cobweb/cobweb2,
-/obj/structure/sign/departments/exodrone/directional/east,
-/turf/open/floor/plating,
-/area/station/maintenance/department/cargo)
"uGS" = (
/obj/structure/chair/office/tactical{
dir = 8
@@ -58950,9 +58844,7 @@
"uJq" = (
/obj/machinery/computer/records/medical,
/obj/effect/turf_decal/tile/red/fourcorners,
-/obj/machinery/computer/security/telescreen/cmo/directional/north{
- name = "Medbay Monitor"
- },
+/obj/machinery/computer/security/telescreen/med_sec/directional/north,
/turf/open/floor/iron/dark,
/area/station/security/checkpoint/medical)
"uJt" = (
@@ -59042,6 +58934,13 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron,
/area/station/engineering/gravity_generator)
+"uLi" = (
+/obj/structure/cable,
+/obj/effect/landmark/navigate_destination/dockarrival,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/catwalk_floor/iron_white,
+/area/station/hallway/secondary/entry)
"uLj" = (
/obj/machinery/door/poddoor/shutters/window{
id = "gateshutter";
@@ -59690,17 +59589,6 @@
dir = 1
},
/area/station/command/heads_quarters/qm)
-"uWI" = (
-/obj/machinery/door/airlock/research/glass{
- name = "Chemistry Minisat"
- },
-/obj/effect/mapping_helpers/airlock/access/all/medical/chemistry,
-/obj/effect/mapping_helpers/airlock/unres{
- dir = 8
- },
-/obj/effect/landmark/navigate_destination/chemfactory,
-/turf/open/floor/iron/white,
-/area/station/medical/chemistry/minisat)
"uWX" = (
/obj/effect/turf_decal/tile/yellow{
dir = 8
@@ -60095,12 +59983,6 @@
},
/turf/open/floor/iron/large,
/area/station/service/hydroponics/garden)
-"veF" = (
-/obj/effect/turf_decal/tile/brown/fourcorners,
-/obj/structure/railing,
-/obj/machinery/door/firedoor/border_only,
-/turf/open/floor/iron,
-/area/station/cargo/storage)
"veW" = (
/obj/structure/extinguisher_cabinet/directional/north,
/turf/closed/wall,
@@ -60457,10 +60339,6 @@
/obj/machinery/light/directional/south,
/turf/open/openspace,
/area/station/security/warden)
-"vlz" = (
-/obj/structure/cable,
-/turf/open/floor/iron/dark,
-/area/station/science/ordnance)
"vlD" = (
/obj/structure/table/wood,
/obj/machinery/light_switch/directional/north,
@@ -60531,6 +60409,12 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron,
/area/station/construction/mining/aux_base)
+"vmH" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/fluff/broken_canister_frame,
+/obj/structure/sign/poster/random/directional/west,
+/turf/open/floor/plating,
+/area/station/maintenance/department/science)
"vnb" = (
/obj/machinery/door/poddoor/incinerator_atmos_aux,
/turf/open/floor/engine/airless,
@@ -61217,6 +61101,15 @@
dir = 8
},
/area/station/science/xenobiology)
+"vBN" = (
+/obj/structure/window/spawner/directional/east,
+/obj/effect/turf_decal/stripes/corner{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/portable_atmospherics/scrubber,
+/turf/open/floor/iron/dark/smooth_large,
+/area/station/science/ordnance)
"vBV" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -61450,6 +61343,12 @@
},
/turf/open/floor/iron/white,
/area/station/medical/medbay/lobby)
+"vFL" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 5
+ },
+/turf/open/floor/iron/white,
+/area/station/science/ordnance/storage)
"vFM" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -62062,14 +61961,6 @@
"vQB" = (
/turf/closed/wall,
/area/station/cargo/boutique)
-"vQP" = (
-/obj/machinery/light/dim/directional/east,
-/obj/effect/turf_decal/tile/dark_blue/half/contrasted{
- dir = 4
- },
-/obj/structure/fireaxecabinet/directional/east,
-/turf/open/floor/iron,
-/area/station/command/bridge)
"vQT" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -62270,6 +62161,16 @@
},
/turf/open/floor/iron/solarpanel/airless,
/area/station/solars/port)
+"vUk" = (
+/obj/machinery/atmospherics/components/trinary/mixer{
+ dir = 4
+ },
+/obj/machinery/light/directional/north,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/cable,
+/turf/open/floor/iron/dark,
+/area/station/science/ordnance)
"vUn" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -62290,6 +62191,11 @@
},
/turf/open/floor/iron,
/area/station/engineering/atmos/storage/gas)
+"vUJ" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/catwalk_floor/iron_white,
+/area/station/science/xenobiology)
"vUO" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/showroomfloor,
@@ -62513,13 +62419,6 @@
/obj/structure/sign/poster/official/random/directional/north,
/turf/open/floor/iron/dark,
/area/station/commons/locker)
-"vZu" = (
-/obj/machinery/atmospherics/components/tank/air/layer4,
-/obj/effect/turf_decal/tile/green/half/contrasted{
- dir = 1
- },
-/turf/open/floor/iron/white,
-/area/station/medical/virology)
"vZF" = (
/obj/structure/dresser,
/obj/effect/decal/cleanable/dirt,
@@ -62785,12 +62684,6 @@
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/plating,
/area/station/maintenance/department/medical/central)
-"wea" = (
-/obj/structure/cable,
-/obj/machinery/airalarm/directional/north,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/catwalk_floor/iron_white,
-/area/station/science/xenobiology)
"weg" = (
/obj/effect/turf_decal/tile/brown/anticorner/contrasted{
dir = 1
@@ -63161,6 +63054,19 @@
/obj/machinery/light/small/directional/east,
/turf/open/floor/iron/textured_large,
/area/station/service/hydroponics/garden)
+"wlO" = (
+/obj/machinery/atmospherics/components/unary/portables_connector/visible{
+ dir = 1
+ },
+/obj/effect/turf_decal/box/red,
+/obj/structure/disposalpipe/segment{
+ dir = 6
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/cable,
+/turf/open/floor/iron/dark,
+/area/station/science/ordnance)
"wlR" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden,
/turf/open/floor/plating,
@@ -63531,6 +63437,14 @@
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
/turf/open/floor/iron/dark,
/area/station/command/heads_quarters/rd)
+"wtu" = (
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/catwalk_floor/iron_white,
+/area/station/science/lab)
"wtw" = (
/obj/structure/extinguisher_cabinet/directional/south,
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
@@ -63635,6 +63549,12 @@
/obj/effect/mapping_helpers/mail_sorting/service/hydroponics,
/turf/open/floor/wood/tile,
/area/station/service/bar)
+"wvs" = (
+/obj/structure/chair/sofa/bench,
+/obj/effect/landmark/start/prisoner,
+/obj/structure/cable,
+/turf/open/floor/iron,
+/area/station/security/prison)
"wvt" = (
/obj/machinery/door/airlock/maintenance_hatch,
/obj/effect/mapping_helpers/airlock/access/any/supply/maintenance,
@@ -63748,16 +63668,6 @@
},
/turf/open/floor/carpet/executive,
/area/station/command/meeting_room)
-"wxP" = (
-/obj/structure/cable,
-/obj/machinery/airalarm/directional/north,
-/obj/structure/disposalpipe/segment{
- dir = 10
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/catwalk_floor/iron_white,
-/area/station/science/lab)
"wxQ" = (
/obj/machinery/computer/operating{
dir = 8
@@ -64128,6 +64038,16 @@
},
/turf/open/floor/iron/dark,
/area/station/ai_monitored/turret_protected/aisat/teleporter)
+"wDb" = (
+/obj/structure/chair/office{
+ dir = 8
+ },
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment{
+ dir = 5
+ },
+/turf/open/floor/catwalk_floor/iron_white,
+/area/station/science/lab)
"wDe" = (
/obj/effect/turf_decal/siding/white{
dir = 1
@@ -64294,6 +64214,15 @@
/obj/effect/landmark/event_spawn,
/turf/open/floor/iron/dark,
/area/station/command/gateway)
+"wFb" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/catwalk_floor/iron_white,
+/area/station/science/lab)
"wFw" = (
/obj/structure/cable,
/obj/structure/closet/emcloset,
@@ -64500,6 +64429,10 @@
"wKO" = (
/turf/open/floor/glass,
/area/station/maintenance/department/medical)
+"wKR" = (
+/obj/machinery/portable_atmospherics/canister,
+/turf/open/floor/iron/white/smooth_large,
+/area/station/science/ordnance/storage)
"wKT" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/machinery/atmospherics/pipe/smart/simple/green/visible{
@@ -64758,42 +64691,6 @@
/obj/machinery/gravity_generator/main,
/turf/open/floor/iron/dark,
/area/station/engineering/gravity_generator)
-"wOJ" = (
-/obj/structure/table,
-/obj/item/stack/sheet/iron/fifty{
- pixel_x = 3;
- pixel_y = 6
- },
-/obj/item/construction/plumbing{
- pixel_x = 34;
- pixel_y = 6
- },
-/obj/item/stack/ducts/fifty{
- pixel_x = 26;
- pixel_y = 2
- },
-/obj/item/stack/ducts/fifty{
- pixel_x = 25;
- pixel_y = 1
- },
-/obj/item/stack/ducts/fifty{
- pixel_x = 24;
- pixel_y = -1
- },
-/obj/item/stack/ducts/fifty{
- pixel_x = 23;
- pixel_y = -3
- },
-/obj/item/stack/ducts/fifty{
- pixel_x = 23;
- pixel_y = -5
- },
-/obj/effect/turf_decal/trimline/yellow/filled/line{
- dir = 1
- },
-/obj/machinery/light/small/dim/directional/north,
-/turf/open/floor/iron/white,
-/area/station/medical/chemistry)
"wOK" = (
/obj/structure/chair/comfy/brown{
dir = 8;
@@ -64819,15 +64716,6 @@
/obj/effect/landmark/atmospheric_sanity/ignore_area,
/turf/closed/wall/r_wall,
/area/station/ai_monitored/turret_protected/ai_upload_foyer)
-"wPP" = (
-/obj/machinery/door/airlock/maintenance_hatch{
- name = "Xenobiology Maintenance"
- },
-/obj/effect/mapping_helpers/airlock/access/all/science/xenobio,
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment,
-/turf/open/floor/catwalk_floor/iron_white,
-/area/station/science/xenobiology)
"wPU" = (
/obj/machinery/light/small/directional/west,
/turf/open/misc/asteroid,
@@ -64915,6 +64803,13 @@
},
/turf/open/floor/iron,
/area/station/security/brig/entrance)
+"wRL" = (
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/iron/dark,
+/area/station/science/ordnance)
"wRN" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{
@@ -65660,17 +65555,6 @@
"xeS" = (
/turf/open/floor/iron,
/area/station/commons/storage/primary)
-"xeT" = (
-/obj/structure/cable,
-/obj/machinery/button/door/directional/east{
- name = "shutter control";
- id = "xbprotect1"
- },
-/obj/structure/window/reinforced/spawner/directional/north,
-/obj/item/kirbyplants/random,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/catwalk_floor/iron_white,
-/area/station/science/xenobiology)
"xeW" = (
/obj/effect/turf_decal/tile/brown{
dir = 8
@@ -65738,13 +65622,6 @@
/obj/machinery/photobooth,
/turf/open/floor/iron,
/area/station/hallway/secondary/command)
-"xgc" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/structure/disposalpipe/segment,
-/turf/open/floor/catwalk_floor/iron_white,
-/area/station/science/lab)
"xgn" = (
/obj/structure/mannequin/skeleton{
starting_items = list()
@@ -66208,16 +66085,6 @@
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/plating,
/area/station/maintenance/department/cargo)
-"xpb" = (
-/obj/effect/turf_decal/stripes/line,
-/obj/machinery/door/poddoor/shutters/window/preopen{
- id = "ordstorage"
- },
-/obj/effect/turf_decal/caution/stand_clear/red,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/structure/cable,
-/turf/open/floor/iron/white,
-/area/station/science/ordnance/storage)
"xpn" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/turf_decal/stripes/white/line{
@@ -66285,13 +66152,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/white,
/area/station/medical/chemistry/minisat)
-"xqG" = (
-/obj/structure/cable,
-/obj/effect/landmark/event_spawn,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/catwalk_floor/iron_white,
-/area/station/hallway/secondary/entry)
"xqO" = (
/obj/docking_port/stationary/escape_pod{
dir = 8
@@ -66380,14 +66240,6 @@
},
/turf/open/floor/wood,
/area/station/commons/lounge)
-"xrY" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/components/unary/portables_connector/visible{
- dir = 1
- },
-/obj/effect/turf_decal/box/red,
-/turf/open/floor/plating,
-/area/station/maintenance/department/science)
"xsj" = (
/obj/machinery/netpod,
/obj/structure/cable,
@@ -66570,6 +66422,22 @@
/obj/machinery/atmospherics/pipe/bridge_pipe/green/visible,
/turf/open/floor/iron,
/area/station/engineering/atmos)
+"xvo" = (
+/obj/machinery/door/poddoor/shutters/window/preopen{
+ id = "ordstorage"
+ },
+/obj/effect/turf_decal/stripes/line,
+/obj/machinery/button/door/directional/east{
+ req_access = list("ordnance");
+ name = "Ordnance Storage Shutter Control";
+ id = "ordstorage"
+ },
+/obj/effect/turf_decal/caution/stand_clear/red,
+/obj/effect/turf_decal/stripes/corner{
+ dir = 4
+ },
+/turf/open/floor/iron/white,
+/area/station/science/ordnance/storage)
"xvr" = (
/obj/machinery/computer/prisoner/management{
dir = 1
@@ -66700,6 +66568,11 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron,
/area/station/engineering/atmos)
+"xxN" = (
+/obj/machinery/light/small/dim/directional/north,
+/obj/machinery/atmospherics/components/unary/passive_vent,
+/turf/open/floor/engine/o2,
+/area/station/science/ordnance)
"xxO" = (
/obj/structure/window/reinforced/spawner/directional/north,
/obj/structure/flora/bush/fullgrass/style_random,
@@ -66724,6 +66597,15 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/wood,
/area/station/service/library)
+"xxY" = (
+/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{
+ dir = 8
+ },
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/iron/dark,
+/area/station/science/ordnance)
"xyG" = (
/obj/effect/decal/cleanable/dirt/dust,
/obj/machinery/power/apc/auto_name/directional/south,
@@ -66963,6 +66845,13 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron/white,
/area/station/science/explab)
+"xCs" = (
+/obj/structure/cable,
+/obj/effect/turf_decal/siding/purple{
+ dir = 1
+ },
+/turf/open/floor/catwalk_floor/iron_white,
+/area/station/science/xenobiology)
"xCw" = (
/obj/effect/turf_decal/siding/purple,
/obj/structure/chair/sofa/bench,
@@ -67313,6 +67202,15 @@
},
/turf/open/floor/circuit,
/area/station/ai_monitored/turret_protected/ai_upload)
+"xJK" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/machinery/door/poddoor/shutters/window/preopen{
+ id = "ordstorage"
+ },
+/obj/effect/turf_decal/caution/stand_clear/red,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/iron/white,
+/area/station/science/ordnance/storage)
"xJQ" = (
/obj/effect/turf_decal/trimline/blue/filled/line{
dir = 4
@@ -67324,6 +67222,14 @@
},
/turf/open/floor/iron/white,
/area/station/medical/exam_room)
+"xJR" = (
+/obj/machinery/portable_atmospherics/canister,
+/obj/machinery/atmospherics/components/unary/portables_connector/visible{
+ dir = 8
+ },
+/obj/effect/turf_decal/box/red,
+/turf/open/floor/iron/dark,
+/area/station/science/ordnance)
"xJT" = (
/obj/effect/turf_decal/tile/yellow/half/contrasted{
dir = 8
@@ -67548,6 +67454,17 @@
},
/turf/open/floor/wood/tile,
/area/station/service/bar)
+"xOB" = (
+/obj/machinery/door/airlock/research{
+ name = "Ordnance Lab"
+ },
+/obj/effect/mapping_helpers/airlock/access/all/science/ordnance,
+/obj/structure/cable,
+/obj/machinery/door/firedoor/heavy,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/catwalk_floor/iron_white,
+/area/station/science/ordnance)
"xOC" = (
/obj/effect/turf_decal/tile/dark_blue/half/contrasted,
/obj/structure/disposalpipe/segment,
@@ -67726,6 +67643,14 @@
/obj/machinery/door/firedoor,
/turf/open/floor/iron/dark/textured_half,
/area/station/cargo/storage)
+"xSW" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
+ dir = 1
+ },
+/turf/open/floor/iron/white/smooth_half{
+ dir = 8
+ },
+/area/station/science/xenobiology)
"xTa" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/machinery/door/poddoor/preopen{
@@ -68041,6 +67966,12 @@
/obj/machinery/firealarm/directional/west,
/turf/open/floor/iron/dark,
/area/station/service/bar)
+"xYE" = (
+/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{
+ dir = 5
+ },
+/turf/open/floor/iron/dark,
+/area/station/science/ordnance)
"xYG" = (
/obj/effect/turf_decal/trimline/blue/filled/line{
dir = 4
@@ -68133,6 +68064,11 @@
/obj/effect/turf_decal/tile/neutral/fourcorners,
/turf/open/floor/iron/dark,
/area/station/science/ordnance/testlab)
+"yaH" = (
+/obj/item/radio/intercom/directional/east,
+/obj/machinery/portable_atmospherics/canister/oxygen,
+/turf/open/floor/iron/white/smooth_large,
+/area/station/science/ordnance/storage)
"yaM" = (
/obj/effect/turf_decal/siding/wood,
/obj/effect/decal/cleanable/dirt,
@@ -68366,14 +68302,13 @@
},
/turf/open/floor/plating/airless,
/area/space/nearstation)
-"yew" = (
-/obj/structure/table,
-/obj/effect/spawner/random/trash/crushed_can{
- pixel_x = 7;
- pixel_y = 15
- },
-/turf/open/floor/iron/white,
-/area/station/maintenance/department/medical)
+"yeK" = (
+/obj/structure/cable,
+/obj/effect/landmark/event_spawn,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/catwalk_floor/iron_white,
+/area/station/hallway/secondary/entry)
"yeO" = (
/obj/machinery/door/firedoor/border_only{
dir = 8
@@ -68446,6 +68381,14 @@
/obj/structure/cable,
/turf/open/floor/wood,
/area/station/commons/lounge)
+"ygt" = (
+/obj/structure/rack,
+/obj/effect/spawner/random/maintenance,
+/obj/effect/turf_decal/trimline/yellow/filled/corner,
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/machinery/light/small/dim/directional/north,
+/turf/open/floor/iron/white,
+/area/station/maintenance/department/medical)
"ygw" = (
/turf/closed/wall/r_wall,
/area/station/security/detectives_office)
@@ -81771,7 +81714,7 @@ jtd
bPP
gUa
mxq
-uGx
+fZg
bVs
ycz
bVs
@@ -82327,9 +82270,9 @@ phV
kFT
kFT
qIS
-osT
-uoP
-ioh
+ojS
+tpN
+aju
gzw
dKw
amK
@@ -82584,9 +82527,9 @@ hQK
dPg
fvo
jPO
-osT
-dci
-piH
+ojS
+kvW
+rCD
xaC
dKw
dKw
@@ -82841,9 +82784,9 @@ sGt
ltj
fvo
pwn
-eaL
-eUB
-dgR
+isy
+hSB
+cnd
uPg
bui
yit
@@ -83098,9 +83041,9 @@ bhZ
pgJ
fvo
lcM
-eaL
-eaL
-nIa
+isy
+isy
+lJo
crz
bui
yit
@@ -84310,7 +84253,7 @@ hME
hME
tSc
wUe
-tvQ
+wvs
imQ
rhY
tsk
@@ -96658,7 +96601,7 @@ hSi
sRM
kZA
gkQ
-oOP
+dBn
eKR
eKR
juw
@@ -97171,7 +97114,7 @@ jTd
rkz
lrc
eHa
-vQP
+ktI
ita
hOb
cwq
@@ -103874,7 +103817,7 @@ tdk
hkc
swi
dHy
-cBB
+aEL
trL
nMP
xOU
@@ -104122,7 +104065,7 @@ wWY
eZN
cPt
alA
-qIQ
+wDb
irJ
rBI
cPt
@@ -104378,8 +104321,8 @@ vfJ
xbu
gMK
cPt
-lcj
-tCz
+pJU
+wtu
dfr
mKF
cPt
@@ -104399,7 +104342,7 @@ qnQ
xcb
wCO
tld
-kZf
+miU
azv
azv
azv
@@ -104636,7 +104579,7 @@ eIV
gMK
cPt
voQ
-tCz
+wtu
urh
ooy
cPt
@@ -104893,7 +104836,7 @@ gLw
jmY
cPt
kKJ
-hEw
+ebU
xWb
cUe
cPt
@@ -105150,7 +105093,7 @@ rXG
raz
cPt
toV
-hEw
+ebU
irJ
cPt
cPt
@@ -105407,7 +105350,7 @@ oBP
raz
wtr
rrq
-aNF
+wFb
irJ
jRN
jyQ
@@ -105664,9 +105607,9 @@ oBP
vfJ
cPt
cPt
-wxP
-xgc
-hld
+eBw
+gIM
+giJ
ugh
aZs
jDP
@@ -105916,7 +105859,7 @@ fYe
vxX
vxX
vfJ
-xAd
+gZF
oBP
xAd
kHG
@@ -108493,7 +108436,7 @@ foX
aku
ouA
jJe
-gOY
+ilp
gOY
gOY
gOY
@@ -108750,15 +108693,15 @@ foX
aku
aku
ilp
+ilp
gOY
-luh
-tId
-rdM
-qXA
+xxN
+aam
+xYE
boy
gql
abh
-pEq
+nGV
uPL
sSN
nal
@@ -109007,13 +108950,13 @@ rji
foX
ilp
ilp
+jTB
+jTB
+jTB
gOY
-tqf
-qfE
-tKD
-hNI
-atb
-qVB
+vUk
+wlO
+nqi
iOH
fQr
gOY
@@ -109263,14 +109206,14 @@ uOo
aku
aku
ilp
-ilp
jTB
-eTG
-sZr
+jTB
+ief
+jZv
gOY
-nUN
-rkK
-nTZ
+ifv
+kMl
+cZs
urY
czh
uPL
@@ -109521,15 +109464,15 @@ aku
ilp
ilp
jTB
-jTB
-olY
-eNt
-gOY
-rSB
+jGd
+eBH
+otJ
+mTg
+hYG
bwj
-mSG
+jLY
rSh
-ivy
+xJR
gOY
wOn
gOY
@@ -109778,18 +109721,18 @@ aku
ilp
ilp
jTB
-jGd
-eBH
-cIk
-aqz
-qXg
+dkr
+hbH
+naU
+bmr
+smH
lCw
-vlz
+fDz
fDz
fDz
bPc
efJ
-dPh
+ofG
gOY
cxg
cxg
@@ -110035,13 +109978,13 @@ uro
rji
ilp
jTB
-dkr
-hbH
-naU
-rwA
-eCJ
+sqJ
+wiT
+rBt
+suo
+lMC
aMG
-vlz
+fDz
xTs
fDz
fDz
@@ -110292,13 +110235,13 @@ aku
ilp
ilp
jTB
-sqJ
-wiT
-rBt
-aPG
-cPu
-mqb
-vlz
+dEn
+lIn
+tra
+suo
+xxY
+aMG
+fDz
fDz
mfC
fDz
@@ -110549,19 +110492,19 @@ aku
ilp
ilp
jTB
-dEn
-lIn
-tra
-qGr
-gzF
-kEM
+gbV
+jqY
+rus
+xJK
+hVC
+uya
fDz
fDz
fDz
oWy
fDz
dyd
-bfq
+qDM
gOY
cxg
vxX
@@ -110806,11 +110749,11 @@ aku
ilp
ilp
jTB
-gbV
-jqY
-rus
-xpb
-rfA
+wKR
+wKR
+vFL
+xvo
+mSe
nCo
tGW
tGW
@@ -111063,14 +111006,14 @@ aku
ieo
ilp
jTB
-dYY
-epB
-mqn
-dGi
-hTv
+jTB
+qXE
+yaH
+gOY
+aks
tTK
tvB
-fNi
+tRZ
nkM
vxZ
dyS
@@ -111309,7 +111252,7 @@ cLf
cLf
cLf
cLf
-fYe
+vxX
vxX
ilp
pkw
@@ -111319,15 +111262,15 @@ uOo
aku
vfR
ilp
+ilp
+jTB
jTB
jTB
-pjK
-ioL
gOY
-aks
+gOY
tTK
-rtq
-oTP
+oEP
+vBN
xfQ
cAG
xXF
@@ -111576,15 +111519,15 @@ uOo
aku
aku
fbN
-rji
-jTB
-jTB
-jTB
-gOY
+gsW
+gsW
+rZE
+rZE
gOY
-tTK
-dZQ
-jvp
+iJZ
+lcd
+eih
+neb
nkM
vxZ
pZK
@@ -111833,15 +111776,15 @@ uOo
aku
aku
pkw
-gsW
-ikJ
-jtp
-hPn
-gOY
-iJZ
+hhd
+bEz
+laD
+laD
+fVO
+cmn
lcd
-tky
-cQx
+cmn
+acN
efL
cQu
wgI
@@ -112091,12 +112034,12 @@ aku
aku
aku
ajs
-gop
-cqf
-hWl
-hCB
-cmn
-fYW
+pIk
+dpA
+rPh
+gOY
+mAC
+uBU
cut
rcR
efL
@@ -112348,13 +112291,13 @@ aku
aku
aku
vjB
-jEw
+psQ
cmn
-oyd
+czC
gOY
-lFI
-kCh
-nGb
+gAV
+hFz
+wRL
icz
efL
nbS
@@ -112610,8 +112553,8 @@ grm
gsW
gOY
gOY
-oxW
gOY
+xOB
gOY
nkM
nkM
@@ -112866,9 +112809,9 @@ aku
xAd
upd
upd
-kAI
-cra
-nNF
+ndE
+mkV
+dcc
uvx
mna
gXw
@@ -113121,8 +113064,8 @@ aku
aku
vfR
vfJ
-pgI
-vfJ
+upd
+efF
moe
jxe
aaR
@@ -113378,8 +113321,8 @@ tsz
lJq
obA
vfJ
-dxZ
-xrY
+egt
+nZW
moe
tLh
dlE
@@ -113634,9 +113577,9 @@ ouk
uYH
aQm
obA
+vmH
upd
bnb
-upd
moe
rHG
bpW
@@ -113891,9 +113834,9 @@ lJq
jBM
lJq
obA
-daT
-eyx
-eyx
+sdB
+rcH
+qsj
moe
mJU
bpW
@@ -144509,7 +144452,7 @@ vxX
mUQ
kLL
cts
-caH
+gQL
lCA
pux
eYP
@@ -146052,8 +145995,8 @@ vxX
iJm
uKm
eYP
-uWI
-dir
+pmp
+ldf
eYP
fnh
qoN
@@ -146308,7 +146251,7 @@ vxX
vxX
vxX
uKm
-tUr
+mUA
iLo
lYg
oHC
@@ -146565,10 +146508,10 @@ unk
vxX
vxX
oTe
-ctf
-pDr
+rPT
+atT
cMK
-rJv
+jsf
fnh
kGS
fnh
@@ -146820,13 +146763,13 @@ ibx
ibx
unk
hvw
-jiP
+fXo
uKm
-yew
+eOA
jSE
hgS
jHQ
-stk
+mjU
jHQ
bhV
jHQ
@@ -147078,9 +147021,9 @@ ibx
fvF
duU
hmA
-exS
-nlx
-miR
+nJD
+hyL
+kJW
kYT
kYT
kYT
@@ -147315,7 +147258,7 @@ sdc
ilr
gDQ
qWY
-veF
+sjT
oZQ
oZQ
oZQ
@@ -147336,8 +147279,8 @@ unk
ibx
vxX
unk
-siU
-pxU
+ygt
+dXH
kYT
bUZ
vzG
@@ -147594,7 +147537,7 @@ ibx
vxX
bGk
bGk
-spU
+tuL
bGk
rRy
cOb
@@ -147850,8 +147793,8 @@ vxX
taj
vxX
bGk
-kVh
-rEV
+mqc
+mfw
bGk
bGk
ncR
@@ -148107,8 +148050,8 @@ ibx
ibx
vxX
bGk
-wOJ
-jeV
+sHo
+mJD
tGR
hNN
pLA
@@ -148364,7 +148307,7 @@ ibx
vxX
vxX
bGk
-kSc
+jfq
dhj
dhj
xmy
@@ -152492,7 +152435,7 @@ wYY
tSn
xas
xhJ
-vZu
+mfP
xOF
dgS
kzI
@@ -154776,25 +154719,25 @@ wjI
wjI
uXD
cYC
-leZ
-leZ
-leZ
-leZ
-leZ
-leZ
-leZ
-leZ
-leZ
-leZ
-leZ
-leZ
-leZ
-leZ
-leZ
-leZ
-leZ
-leZ
-leZ
+jCP
+jCP
+jCP
+jCP
+jCP
+jCP
+jCP
+jCP
+jCP
+jCP
+jCP
+jCP
+jCP
+jCP
+jCP
+jCP
+jCP
+jCP
+jCP
dFc
uXD
uXD
@@ -155033,7 +154976,7 @@ uXD
uXD
uXD
uGW
-leZ
+jCP
rCL
sTB
kAc
@@ -155051,7 +154994,7 @@ kAc
kAc
sTB
vAo
-leZ
+jCP
sZF
pLP
pLP
@@ -155290,7 +155233,7 @@ aLN
aLN
uXD
jYf
-leZ
+jCP
vVC
sxV
sxV
@@ -155308,7 +155251,7 @@ sxV
sxV
sxV
mJV
-leZ
+jCP
sZF
pLP
pLP
@@ -155547,7 +155490,7 @@ aLN
aLN
ntQ
hPS
-leZ
+jCP
sby
sxV
sxV
@@ -155565,7 +155508,7 @@ sxV
sxV
sxV
hrI
-xqG
+yeK
wDr
uXD
uXD
@@ -155804,7 +155747,7 @@ aLN
aLN
hVN
hPS
-leZ
+jCP
sby
sxV
sxV
@@ -155822,7 +155765,7 @@ sxV
sxV
sxV
hrI
-leZ
+jCP
lGP
rzJ
gMk
@@ -156061,7 +156004,7 @@ aLN
jhc
jYG
hPS
-leZ
+jCP
sby
sxV
sxV
@@ -156079,7 +156022,7 @@ sxV
sxV
idV
hrI
-leZ
+jCP
khL
uXD
uet
@@ -156318,7 +156261,7 @@ aLN
aLN
vzi
hPS
-leZ
+jCP
sby
sxV
sxV
@@ -156336,7 +156279,7 @@ sxV
sxV
sxV
hrI
-leZ
+jCP
lGP
rzJ
gMk
@@ -156575,7 +156518,7 @@ aLN
aLN
uXD
hPS
-leZ
+jCP
sby
sxV
sxV
@@ -156593,7 +156536,7 @@ sxV
sxV
sxV
hrI
-leZ
+jCP
qgy
uXD
uXD
@@ -156832,7 +156775,7 @@ aLN
aLN
uXD
cDl
-leZ
+jCP
vVC
sxV
sxV
@@ -156850,7 +156793,7 @@ sxV
sxV
sxV
mJV
-leZ
+jCP
sZF
pLP
pLP
@@ -157089,7 +157032,7 @@ jJb
jJb
jJb
ata
-leZ
+jCP
hbb
xkO
nhm
@@ -157107,7 +157050,7 @@ nhm
nhm
xkO
lCp
-leZ
+jCP
sZF
pLP
pLP
@@ -157346,25 +157289,25 @@ dRq
bfN
uhi
bOr
-leZ
-leZ
-leZ
-leZ
-leZ
-leZ
-leZ
-leZ
-leZ
-lUy
-leZ
-leZ
-leZ
-leZ
-leZ
-leZ
-leZ
-leZ
-leZ
+jCP
+jCP
+jCP
+jCP
+jCP
+jCP
+jCP
+jCP
+jCP
+uLi
+jCP
+jCP
+jCP
+jCP
+jCP
+jCP
+jCP
+jCP
+jCP
wLu
uXD
uXD
@@ -176604,7 +176547,7 @@ raz
raz
nzk
fpY
-fEW
+clQ
ssg
vtN
ylR
@@ -176860,8 +176803,8 @@ iSz
uba
vfJ
nzk
-fpY
-clQ
+rPV
+wYI
elT
elT
elT
@@ -177117,14 +177060,14 @@ vmk
uba
pBN
nzk
-tEm
-wYI
-kbc
-kbc
-kbc
-kbc
-iHV
-iHV
+hEi
+hEi
+wFI
+mmU
+ibE
+wts
+uaw
+uaw
tcx
qJN
uHQ
@@ -177375,13 +177318,13 @@ wtI
vfJ
vfJ
hEi
-hEi
-wFI
-mmU
-ibE
-wts
-hmd
-bIP
+myW
+myW
+fsZ
+jfB
+sab
+sab
+jzM
iFN
kHf
xkL
@@ -177632,13 +177575,13 @@ bfp
vfJ
mNZ
hEi
-myW
-myW
-fsZ
-jfB
+mlm
+rsI
+gmH
+iVp
sab
sab
-jzM
+sdn
iFN
aXl
fyJ
@@ -177889,13 +177832,13 @@ lVB
vfJ
mNZ
hEi
-mlm
-rsI
+hUH
+dfk
gmH
-iVp
-sab
-sab
-sdn
+rXS
+tOL
+fPv
+iAM
iFN
mZn
oND
@@ -178146,13 +178089,13 @@ mNZ
mNZ
mNZ
hEi
-hUH
-dfk
-gmH
-rXS
-tOL
-fPv
-iAM
+hEi
+hEi
+hEi
+hEi
+hEi
+hEi
+iRy
iFN
rEv
vjQ
@@ -178402,14 +178345,14 @@ mNZ
mNZ
mNZ
mNZ
-kxB
-kxB
-kxB
-kxB
-kxB
-kxB
-moe
-eLb
+mNZ
+mNZ
+ivx
+ivx
+ivx
+ivx
+wkG
+bhq
iFN
iFN
iFN
@@ -178662,11 +178605,11 @@ mNZ
mNZ
mNZ
ivx
+moe
wkG
-jYT
-guJ
-bXM
-rIJ
+wkG
+wkG
+qjs
moe
vxX
vxX
@@ -178921,9 +178864,9 @@ mNZ
gEA
wkG
jYT
-wkG
-wkG
-wkG
+jYT
+jYT
+rIJ
moe
vxX
vxX
@@ -179179,9 +179122,9 @@ ivx
wkG
jYT
wkG
-ivx
-ivx
-ivx
+wkG
+wkG
+moe
vxX
vxX
vxX
@@ -183819,7 +183762,7 @@ gQq
klu
xEs
xEs
-iOk
+bNG
xEs
xEs
qRY
@@ -184076,7 +184019,7 @@ gQq
sbR
gQq
arS
-drx
+eEg
qad
gQq
abm
@@ -184333,7 +184276,7 @@ gQq
sbR
gQq
ibl
-tZR
+dzL
qad
gQq
abm
@@ -184590,7 +184533,7 @@ gQq
sbR
gQq
ibl
-tZR
+dzL
qad
gQq
abm
@@ -184847,7 +184790,7 @@ ubn
gYI
ybO
xgq
-tZR
+dzL
ueJ
ybO
gYI
@@ -185099,17 +185042,17 @@ wBd
rWL
jQS
jQS
-wea
-tPE
-tPE
-tvt
-tvt
-tZR
-tvt
-tvt
-tZR
-tZR
-aXc
+bXe
+qXj
+qXj
+lAt
+lAt
+dzL
+lAt
+lAt
+dzL
+dzL
+aFb
jQS
jQS
geB
@@ -185356,17 +185299,17 @@ wBd
hAL
jQS
ojC
-tPE
+qXj
lKY
lKY
-lBZ
+vUJ
nRj
nem
ciV
-tPE
+qXj
lKY
lKY
-tZR
+dzL
kkD
jQS
cku
@@ -185613,17 +185556,17 @@ jQS
hAL
jQS
qWt
-tPE
+qXj
lKY
hQH
-gjo
+cAq
csf
oIh
pPY
-xeT
+iPf
gCP
lKY
-tZR
+dzL
hLA
jQS
cku
@@ -185870,7 +185813,7 @@ wBd
hAL
jQS
jQS
-agM
+gvj
gMy
gwx
jQS
@@ -185880,7 +185823,7 @@ wmO
jQS
xDf
gtE
-mYh
+hMf
jQS
jQS
cku
@@ -186125,11 +186068,11 @@ oJt
wAT
ezg
agA
-wPP
-tIs
-tPE
+cVs
+cUf
+qXj
lKY
-fTO
+qUi
wmO
ybO
ybO
@@ -186137,9 +186080,9 @@ ybO
wmO
rmi
lKY
-tZR
-gmb
-mRC
+dzL
+tsm
+gCV
awC
vbV
wAT
@@ -186384,9 +186327,9 @@ wBd
rWL
jQS
uVe
-tPE
+qXj
avA
-uke
+nVm
wmO
ybO
ybO
@@ -186394,7 +186337,7 @@ ybO
wmO
xGG
uBm
-lBZ
+vUJ
rWp
jQS
hAL
@@ -186641,9 +186584,9 @@ jQS
hye
jQS
qZX
-tPE
+qXj
lKY
-iQo
+qGD
wmO
ybO
ybO
@@ -186651,7 +186594,7 @@ ybO
wmO
bLI
lKY
-lBZ
+vUJ
gDl
jQS
hye
@@ -186898,17 +186841,17 @@ jQS
jQS
jQS
iXn
-ieU
+mMe
cWL
tMz
jQS
wmO
-htn
+kZW
jgA
jQS
tMz
ybo
-aqG
+sbS
lVq
jQS
jQS
@@ -187153,11 +187096,11 @@ hhX
hhX
fZF
jQS
-lCS
+rXf
jEt
-gdM
+aMf
rdn
-dJr
+xSW
wnA
wnA
wnA
@@ -187165,9 +187108,9 @@ wnA
viT
bUl
cNh
-iXB
+mjY
jEt
-svE
+oag
jQS
fZF
hhX
@@ -187410,21 +187353,21 @@ hhX
hhX
fZF
jQS
-oaz
+cCr
fXW
-jej
-krO
-krO
-krO
-krO
-krO
-krO
-krO
-krO
-krO
-rBq
+xCs
+awy
+awy
+awy
+awy
+awy
+awy
+awy
+awy
+awy
+oVS
mCT
-sQU
+okf
jQS
fZF
hhX
@@ -187674,7 +187617,7 @@ cWc
wnA
wnA
jfD
-krO
+awy
olE
wnA
wnA
@@ -187931,7 +187874,7 @@ jQS
bGL
vBD
rxC
-krO
+awy
jpe
wnA
trg
@@ -188188,7 +188131,7 @@ jQS
tbU
byC
tbU
-keb
+oia
tbU
byC
tbU
@@ -188442,13 +188385,13 @@ hhX
hhX
fZF
jQS
-orY
-orY
-orY
-bqs
-orY
-orY
-orY
+nCm
+nCm
+nCm
+kvd
+nCm
+nCm
+nCm
jQS
fZF
hhX
@@ -188699,13 +188642,13 @@ hhX
hhX
fZF
jQS
-orY
-orY
-orY
-bqs
-orY
-orY
-orY
+nCm
+nCm
+nCm
+kvd
+nCm
+nCm
+nCm
jQS
fZF
hhX
@@ -188956,13 +188899,13 @@ hhX
hhX
fZF
jQS
-orY
-orY
-orY
-orY
-orY
-orY
-orY
+nCm
+nCm
+nCm
+nCm
+nCm
+nCm
+nCm
jQS
fZF
hhX
@@ -189213,13 +189156,13 @@ hhX
hhX
fZF
jQS
-orY
-orY
-orY
-orY
-orY
-orY
-orY
+nCm
+nCm
+nCm
+nCm
+nCm
+nCm
+nCm
jQS
fZF
hhX
@@ -189471,11 +189414,11 @@ hhX
fZF
jQS
jQS
-orY
-orY
-orY
-orY
-orY
+nCm
+nCm
+nCm
+nCm
+nCm
jQS
jQS
fZF
diff --git a/code/__DEFINES/DNA.dm b/code/__DEFINES/DNA.dm
index f6d5d76ee164c..4756b80f02737 100644
--- a/code/__DEFINES/DNA.dm
+++ b/code/__DEFINES/DNA.dm
@@ -60,9 +60,15 @@
#define DNA_MOTH_MARKINGS_BLOCK 13
#define DNA_MUSHROOM_CAPS_BLOCK 14
#define DNA_POD_HAIR_BLOCK 15
-#define DNA_MONKEY_TAIL_BLOCK 16
-#define DNA_FEATURE_BLOCKS 16
+// Hey! Listen up if you're here because you're adding a species feature!
+//
+// You don't need to add a DNA block for EVERY species feature!
+// You ONLY need DNA blocks if you intend to allow players to change it via GENETICS!
+// (Which means having a DNA block for a feature tied to a mob without DNA is entirely pointless.)
+
+/// Total amount of DNA blocks, must be equal to the highest DNA block number
+#define DNA_FEATURE_BLOCKS 15
#define DNA_SEQUENCE_LENGTH 4
#define DNA_MUTATION_BLOCKS 8
diff --git a/code/__DEFINES/dcs/signals/signals_blackmarket.dm b/code/__DEFINES/dcs/signals/signals_market.dm
similarity index 100%
rename from code/__DEFINES/dcs/signals/signals_blackmarket.dm
rename to code/__DEFINES/dcs/signals/signals_market.dm
diff --git a/code/__DEFINES/interaction_flags.dm b/code/__DEFINES/interaction_flags.dm
index 615fe5c4cbda2..fd66cee5bb93e 100644
--- a/code/__DEFINES/interaction_flags.dm
+++ b/code/__DEFINES/interaction_flags.dm
@@ -26,6 +26,8 @@
#define INTERACT_ATOM_MOUSEDROP_IGNORE_USABILITY (1<<12)
/// Bypass all adjacency and other checks for mouse drop
#define INTERACT_ATOM_MOUSEDROP_IGNORE_CHECKS (INTERACT_ATOM_MOUSEDROP_IGNORE_ADJACENT | INTERACT_ATOM_MOUSEDROP_IGNORE_USABILITY)
+/// calls try_interact() on attack_paw() and returns that.
+#define INTERACT_ATOM_ATTACK_PAW (1<<13)
/// attempt pickup on attack_hand for items
#define INTERACT_ITEM_ATTACK_HAND_PICKUP (1<<0)
diff --git a/code/__DEFINES/blackmarket.dm b/code/__DEFINES/market.dm
similarity index 100%
rename from code/__DEFINES/blackmarket.dm
rename to code/__DEFINES/market.dm
diff --git a/code/__DEFINES/tgs.dm b/code/__DEFINES/tgs.dm
index e2c89df90e9bf..17464b44dae81 100644
--- a/code/__DEFINES/tgs.dm
+++ b/code/__DEFINES/tgs.dm
@@ -1,6 +1,6 @@
// tgstation-server DMAPI
-#define TGS_DMAPI_VERSION "7.1.2"
+#define TGS_DMAPI_VERSION "7.1.3"
// All functions and datums outside this document are subject to change with any version and should not be relied on.
diff --git a/code/__HELPERS/matrices.dm b/code/__HELPERS/matrices.dm
index 68b94fc2fe654..8a5534e3827b8 100644
--- a/code/__HELPERS/matrices.dm
+++ b/code/__HELPERS/matrices.dm
@@ -40,8 +40,7 @@
decompose_matrix.rotation = arctan(cossine, sine) * flip_sign
/matrix/proc/TurnTo(old_angle, new_angle)
- . = new_angle - old_angle
- Turn(.) //BYOND handles cases such as -270, 360, 540 etc. DOES NOT HANDLE 180 TURNS WELL, THEY TWEEN AND LOOK LIKE SHIT
+ return Turn(new_angle - old_angle) //BYOND handles cases such as -270, 360, 540 etc. DOES NOT HANDLE 180 TURNS WELL, THEY TWEEN AND LOOK LIKE SHIT
/**
* Shear the transform on either or both axes.
diff --git a/code/_onclick/other_mobs.dm b/code/_onclick/other_mobs.dm
index 0dd8ee0a582f6..2f1465ac4ffe2 100644
--- a/code/_onclick/other_mobs.dm
+++ b/code/_onclick/other_mobs.dm
@@ -200,7 +200,8 @@
/atom/proc/attack_paw(mob/user, list/modifiers)
if(SEND_SIGNAL(src, COMSIG_ATOM_ATTACK_PAW, user, modifiers) & COMPONENT_CANCEL_ATTACK_CHAIN)
return TRUE
- return FALSE
+ if(interaction_flags_atom & INTERACT_ATOM_ATTACK_PAW)
+ . = _try_interact(user)
/*
diff --git a/code/controllers/subsystem/dynamic/dynamic.dm b/code/controllers/subsystem/dynamic/dynamic.dm
index e34b0c7e446c0..66a06c230c646 100644
--- a/code/controllers/subsystem/dynamic/dynamic.dm
+++ b/code/controllers/subsystem/dynamic/dynamic.dm
@@ -999,7 +999,7 @@ SUBSYSTEM_DEF(dynamic)
#define MAXIMUM_DYN_DISTANCE 5
/**
- * Returns the comulative distribution of threat centre and width, and a random location of -0.5 to 0.5
+ * Returns the comulative distribution of threat centre and width, and a random location of -5 to 5
* plus or minus the otherwise unattainable lower and upper percentiles. All multiplied by the maximum
* threat and then rounded to the nearest interval.
* rand() calls without arguments returns a value between 0 and 1, allowing for smaller intervals.
diff --git a/code/controllers/subsystem/dynamic/dynamic_rulesets_midround.dm b/code/controllers/subsystem/dynamic/dynamic_rulesets_midround.dm
index 7d91ca6b565ce..9396728159480 100644
--- a/code/controllers/subsystem/dynamic/dynamic_rulesets_midround.dm
+++ b/code/controllers/subsystem/dynamic/dynamic_rulesets_midround.dm
@@ -964,13 +964,15 @@
cost = 5
minimum_players = 40
repeatable = TRUE
+ signup_item_path = /obj/item/cosmic_skull
ruleset_lazy_templates = list(LAZY_TEMPLATE_KEY_VOIDWALKER_VOID)
/// The space turf we find in acceptable(), cached for ease
var/space_turf
/datum/dynamic_ruleset/midround/from_ghosts/voidwalker/acceptable(population = 0, threat_level = 0)
space_turf = find_space_spawn()
- if(!space_turf)
+ // Space only antag and will die on planetary gravity.
+ if(SSmapping.is_planetary() || !space_turf)
return FALSE
return ..()
diff --git a/code/controllers/subsystem/blackmarket.dm b/code/controllers/subsystem/market.dm
similarity index 68%
rename from code/controllers/subsystem/blackmarket.dm
rename to code/controllers/subsystem/market.dm
index 5c88177583b2f..81d96d331c71d 100644
--- a/code/controllers/subsystem/blackmarket.dm
+++ b/code/controllers/subsystem/market.dm
@@ -1,5 +1,5 @@
-SUBSYSTEM_DEF(blackmarket)
- name = "Blackmarket"
+SUBSYSTEM_DEF(market)
+ name = "Market"
flags = SS_BACKGROUND
init_order = INIT_ORDER_DEFAULT
@@ -18,27 +18,27 @@ SUBSYSTEM_DEF(blackmarket)
/// Currently queued purchases.
var/list/queued_purchases = list()
-/datum/controller/subsystem/blackmarket/Initialize()
+/datum/controller/subsystem/market/Initialize()
for(var/market in subtypesof(/datum/market))
markets[market] += new market
- for(var/datum/market_item/item as anything in subtypesof(/datum/market_item))
- if(!initial(item.item))
- continue
- if(!prob(initial(item.availability_prob)))
- continue
-
- var/datum/market_item/item_instance = new item()
- for(var/potential_market in item_instance.markets)
- if(!markets[potential_market])
- stack_trace("SSblackmarket: Item [item_instance] available in market that does not exist.")
- continue
- // If this fails the market item will just be GC'd
- markets[potential_market].add_item(item_instance)
+ for(var/path in subtypesof(/datum/market_item))
+ initialize_item(path)
return SS_INIT_SUCCESS
-/datum/controller/subsystem/blackmarket/fire(resumed)
+/datum/controller/subsystem/market/proc/initialize_item(datum/market_item/path, list/market_whitelist)
+ if(!path::item || !prob(path::availability_prob))
+ return
+ var/datum/market_item/item_instance = new path()
+ for(var/potential_market in item_instance.markets)
+ if(!markets[potential_market])
+ stack_trace("SSmarket: Item [item_instance] available in market that does not exist.")
+ continue
+ if(isnull(market_whitelist) || (potential_market in market_whitelist))
+ markets[potential_market].add_item(item_instance)
+
+/datum/controller/subsystem/market/fire(resumed)
while(length(queued_purchases))
var/datum/market_purchase/purchase = queued_purchases[1]
queued_purchases.Cut(1,2)
@@ -55,9 +55,9 @@ SUBSYSTEM_DEF(blackmarket)
// The time left of the shortest cooldown amongst all telepads.
var/lowest_timeleft = INFINITY
for(var/obj/machinery/ltsrbt/pad as anything in telepads)
- if(!COOLDOWN_FINISHED(pad, recharge_cooldown))
- var/timeleft = COOLDOWN_TIMELEFT(pad, recharge_cooldown)
- if(timeleft < lowest_timeleft)
+ if(!COOLDOWN_FINISHED(pad, recharge_cooldown) || (pad.machine_stat & NOPOWER))
+ var/timeleft = pad.machine_stat & NOPOWER ? INFINITY - 1 : COOLDOWN_TIMELEFT(pad, recharge_cooldown)
+ if(timeleft <= lowest_timeleft)
lowest_cd_pad = pad
lowest_timeleft = timeleft
continue
@@ -79,7 +79,7 @@ SUBSYSTEM_DEF(blackmarket)
to_chat(buyer, span_notice("[purchase.uplink] flashes a message noting that the order is being teleported to [get_area(targetturf)] in 60 seconds."))
// do_teleport does not want to teleport items from nullspace, so it just forceMoves and does sparks.
- addtimer(CALLBACK(src, TYPE_PROC_REF(/datum/controller/subsystem/blackmarket, fake_teleport), purchase, targetturf), 60 SECONDS)
+ addtimer(CALLBACK(src, TYPE_PROC_REF(/datum/controller/subsystem/market, fake_teleport), purchase, targetturf), 60 SECONDS)
// Get the current location of the uplink if it exists, then throws the item from space at the station from a random direction.
if(SHIPPING_METHOD_LAUNCH)
@@ -106,7 +106,7 @@ SUBSYSTEM_DEF(blackmarket)
break
/// Used to make a teleportation effect as do_teleport does not like moving items from nullspace.
-/datum/controller/subsystem/blackmarket/proc/fake_teleport(datum/market_purchase/purchase, turf/target)
+/datum/controller/subsystem/market/proc/fake_teleport(datum/market_purchase/purchase, turf/target)
// Oopsie, whoopsie, the item is gone. So long, and thanks for all the money.
if(QDELETED(purchase))
return
@@ -119,9 +119,31 @@ SUBSYSTEM_DEF(blackmarket)
qdel(purchase)
/// Used to add /datum/market_purchase to queued_purchases var. Returns TRUE when queued.
-/datum/controller/subsystem/blackmarket/proc/queue_item(datum/market_purchase/purchase)
+/datum/controller/subsystem/market/proc/queue_item(datum/market_purchase/purchase)
if((purchase.method == SHIPPING_METHOD_LTSRBT && !telepads.len) || isnull(purchase.uplink))
qdel(purchase)
return FALSE
queued_purchases += purchase
return TRUE
+
+///A proc that restocks one or more markets, or all if the market_whitelist is null.
+/datum/controller/subsystem/market/proc/restock(list/market_whitelist)
+ var/market_name = "Markets"
+ if(market_whitelist && !islist(market_whitelist))
+ var/datum/market/market_path = market_whitelist
+ market_name = market_path::name
+ market_whitelist = list(market_path)
+
+ var/list/existing_types = list()
+ for(var/path in markets)
+ if(isnull(market_whitelist) || (path in market_whitelist))
+ markets[path].restock(existing_types)
+
+ for(var/datum/market_item/path as anything in (subtypesof(/datum/market_item) - existing_types))
+ if(!path::restockable)
+ continue
+ initialize_item(path, market_whitelist)
+
+ for(var/obj/machinery/ltsrbt/pad as anything in telepads)
+ pad.say("[market_name] restocked!")
+ playsound(src, 'sound/effects/cashregister.ogg', 40, FALSE)
diff --git a/code/controllers/subsystem/polling.dm b/code/controllers/subsystem/polling.dm
index cbbcca59fa6e2..fa219cd3da9f0 100644
--- a/code/controllers/subsystem/polling.dm
+++ b/code/controllers/subsystem/polling.dm
@@ -206,6 +206,12 @@ SUBSYSTEM_DEF(polling)
return
for(var/mob/dead/observer/ghost_player in GLOB.player_list)
candidates += ghost_player
+
+#ifdef TESTING
+ for(var/mob/dude in GLOB.player_list)
+ candidates |= dude
+#endif
+
return poll_candidates(question, role, check_jobban, poll_time, ignore_category, flashwindow, candidates, alert_pic, jump_target, role_name_text, custom_response_messages, start_signed_up, amount_to_pick, chat_text_border_icon, announce_chosen)
/datum/controller/subsystem/polling/proc/poll_ghosts_for_target(
diff --git a/code/controllers/subsystem/sprite_accessories.dm b/code/controllers/subsystem/sprite_accessories.dm
index f381df80df6da..21bafd5330c97 100644
--- a/code/controllers/subsystem/sprite_accessories.dm
+++ b/code/controllers/subsystem/sprite_accessories.dm
@@ -87,23 +87,23 @@ SUBSYSTEM_DEF(accessories) // just 'accessories' for brevity
socks_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/socks)[DEFAULT_SPRITE_LIST]
- lizard_markings_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/lizard_markings)[DEFAULT_SPRITE_LIST]
+ lizard_markings_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/lizard_markings, add_blank = TRUE)[DEFAULT_SPRITE_LIST]
tails_list_human = init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/human, add_blank = TRUE)[DEFAULT_SPRITE_LIST]
- tails_list_lizard = init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/lizard, add_blank = TRUE)[DEFAULT_SPRITE_LIST]
- tails_list_monkey = init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/monkey, add_blank = TRUE)[DEFAULT_SPRITE_LIST]
+ tails_list_lizard = init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/lizard)[DEFAULT_SPRITE_LIST]
+ tails_list_monkey = init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/monkey)[DEFAULT_SPRITE_LIST]
snouts_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/snouts)[DEFAULT_SPRITE_LIST]
- horns_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/horns)[DEFAULT_SPRITE_LIST]
- ears_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/ears)[DEFAULT_SPRITE_LIST]
- wings_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/wings)[DEFAULT_SPRITE_LIST]
+ horns_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/horns, add_blank = TRUE)[DEFAULT_SPRITE_LIST]
+ ears_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/ears, add_blank = TRUE)[DEFAULT_SPRITE_LIST]
+ wings_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/wings, add_blank = TRUE)[DEFAULT_SPRITE_LIST]
wings_open_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/wings_open)[DEFAULT_SPRITE_LIST]
- frills_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/frills)[DEFAULT_SPRITE_LIST]
- spines_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/spines)[DEFAULT_SPRITE_LIST]
- tail_spines_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/tail_spines)[DEFAULT_SPRITE_LIST]
+ frills_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/frills, add_blank = TRUE)[DEFAULT_SPRITE_LIST]
+ spines_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/spines, add_blank = TRUE)[DEFAULT_SPRITE_LIST]
+ tail_spines_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/tail_spines, add_blank = TRUE)[DEFAULT_SPRITE_LIST]
legs_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/legs)[DEFAULT_SPRITE_LIST]
caps_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/caps)[DEFAULT_SPRITE_LIST]
moth_wings_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/moth_wings)[DEFAULT_SPRITE_LIST]
moth_antennae_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/moth_antennae)[DEFAULT_SPRITE_LIST]
- moth_markings_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/moth_markings)[DEFAULT_SPRITE_LIST]
+ moth_markings_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/moth_markings, add_blank = TRUE)[DEFAULT_SPRITE_LIST]
pod_hair_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/pod_hair)[DEFAULT_SPRITE_LIST]
/// This proc just intializes all /datum/sprite_accessory/hair_gradient into an list indexed by gradient-style name
diff --git a/code/datums/bodypart_overlays/mutant_bodypart_overlay.dm b/code/datums/bodypart_overlays/mutant_bodypart_overlay.dm
index 18ce58ffc4deb..3115e3ad62ea2 100644
--- a/code/datums/bodypart_overlays/mutant_bodypart_overlay.dm
+++ b/code/datums/bodypart_overlays/mutant_bodypart_overlay.dm
@@ -28,13 +28,16 @@
sprite_datum = get_random_appearance()
///Grab a random appearance datum (thats not locked)
-/datum/bodypart_overlay/mutant/proc/get_random_appearance()
+/datum/bodypart_overlay/mutant/proc/get_random_appearance() as /datum/sprite_accessory
+ RETURN_TYPE(/datum/sprite_accessory)
var/list/valid_restyles = list()
var/list/feature_list = get_global_feature_list()
for(var/accessory in feature_list)
var/datum/sprite_accessory/accessory_datum = feature_list[accessory]
if(initial(accessory_datum.locked)) //locked is for stuff that shouldn't appear here
continue
+ if(!initial(accessory_datum.natural_spawn))
+ continue
valid_restyles += accessory_datum
return pick(valid_restyles)
diff --git a/code/datums/components/crafting/equipment.dm b/code/datums/components/crafting/equipment.dm
index eeea4205a4d29..75b257156084e 100644
--- a/code/datums/components/crafting/equipment.dm
+++ b/code/datums/components/crafting/equipment.dm
@@ -23,6 +23,17 @@
time = 4 SECONDS
category = CAT_EQUIPMENT
+/datum/crafting_recipe/improvisedshield
+ name = "Moonflower Shield"
+ result = /obj/item/shield/buckler/moonflower
+ reqs = list(
+ /obj/item/seeds/sunflower/moonflower = 3,
+ /obj/item/grown/log/steel = 3,
+ )
+ time = 4 SECONDS
+ category = CAT_EQUIPMENT
+
+
/datum/crafting_recipe/radiogloves
name = "Radio Gloves"
result = /obj/item/clothing/gloves/radio
diff --git a/code/datums/components/crafting/melee_weapon.dm b/code/datums/components/crafting/melee_weapon.dm
index 594ff7aefd387..018d99d870352 100644
--- a/code/datums/components/crafting/melee_weapon.dm
+++ b/code/datums/components/crafting/melee_weapon.dm
@@ -191,3 +191,13 @@
)
time = 10 SECONDS
category = CAT_WEAPON_MELEE
+
+/datum/crafting_recipe/bambostaff
+ name = "Bamboo Bo Staff"
+ result = /obj/item/bambostaff
+ reqs = list(
+ /obj/item/stack/sheet/mineral/bamboo = 4,
+ /obj/item/grown/log/steel = 2,
+ )
+ time = 8 SECONDS
+ category = CAT_WEAPON_MELEE
diff --git a/code/datums/components/crafting/tailoring.dm b/code/datums/components/crafting/tailoring.dm
index 2bcec49aeb504..3c498f74416bd 100644
--- a/code/datums/components/crafting/tailoring.dm
+++ b/code/datums/components/crafting/tailoring.dm
@@ -6,6 +6,61 @@
time = 5 SECONDS
category = CAT_CLOTHING
+/datum/crafting_recipe/durathread_robe
+ name = "Durathread Robe"
+ result = /obj/item/clothing/suit/wizrobe/durathread
+ reqs = list(
+ /obj/item/stack/sheet/durathread = 3,
+ /obj/item/stack/sheet/leather = 6,
+ )
+ time = 5 SECONDS
+ category = CAT_CLOTHING
+
+/datum/crafting_recipe/durathread_robe_fire
+ name = "Durathread Pyromancer Robe"
+ result = /obj/item/clothing/suit/wizrobe/durathread/fire
+ reqs = list(/obj/item/clothing/suit/wizrobe/durathread = 1,
+ /obj/item/grown/novaflower = 1,
+ /obj/item/seeds/chili = 3)
+ time = 2 SECONDS
+ category = CAT_CLOTHING
+
+/datum/crafting_recipe/durathread_robe_ice
+ name = "Durathread Ice-o-mancer Robe"
+ result = /obj/item/clothing/suit/wizrobe/durathread/ice
+ reqs = list(/obj/item/clothing/suit/wizrobe/durathread = 1,
+ /obj/item/seeds/chili/ice = 1,
+ /obj/item/food/grown/herbs = 3)
+ time = 2 SECONDS
+ category = CAT_CLOTHING
+
+/datum/crafting_recipe/durathread_robe_electric
+ name = "Durathread Electromancer Robe"
+ result = /obj/item/clothing/suit/wizrobe/durathread/electric
+ reqs = list(/obj/item/clothing/suit/wizrobe/durathread = 1,
+ /obj/item/food/grown/mushroom/jupitercup = 1,
+ /obj/item/food/grown/sunflower = 3)
+ time = 2 SECONDS
+ category = CAT_CLOTHING
+
+/datum/crafting_recipe/durathread_robe_earth
+ name = "Durathread Geomancer Robe"
+ result = /obj/item/clothing/suit/wizrobe/durathread/earth
+ reqs = list(/obj/item/clothing/suit/wizrobe/durathread = 1,
+ /obj/item/food/grown/cahnroot = 1,
+ /obj/item/food/grown/potato = 3)
+ time = 2 SECONDS
+ category = CAT_CLOTHING
+
+/datum/crafting_recipe/durathread_robe_necro
+ name = "Durathread Necromancer Robe"
+ result = /obj/item/clothing/suit/wizrobe/durathread/necro
+ reqs = list(/obj/item/clothing/suit/wizrobe/durathread = 1,
+ /obj/item/food/grown/cannabis/death = 2,
+ /obj/item/food/grown/mushroom/angel = 2)
+ time = 2 SECONDS
+ category = CAT_CLOTHING
+
/datum/crafting_recipe/durathread_helmet
name = "Durathread Helmet"
result = /obj/item/clothing/head/helmet/durathread
@@ -14,6 +69,62 @@
time = 4 SECONDS
category = CAT_CLOTHING
+/datum/crafting_recipe/watermelon_armour
+ name = "Watermelon Armour"
+ result = /obj/item/clothing/suit/armor/durability/watermelon
+ reqs = list(/obj/item/clothing/head/helmet/durability/watermelon = 3,
+ /obj/item/stack/sheet/durathread = 1)
+ time = 4 SECONDS
+ category = CAT_CLOTHING
+
+/datum/crafting_recipe/watermelon_armour_fr
+ name = "Watermelon Armour"
+ result = /obj/item/clothing/suit/armor/durability/watermelon/fire_resist
+ reqs = list(/obj/item/clothing/head/helmet/durability/watermelon/fire_resist = 3,
+ /obj/item/stack/sheet/durathread = 1)
+ time = 4 SECONDS
+ category = CAT_CLOTHING
+
+/datum/crafting_recipe/holymelon_armour
+ name = "Holymelon Armour"
+ result = /obj/item/clothing/suit/armor/durability/holymelon
+ reqs = list(/obj/item/clothing/head/helmet/durability/holymelon = 3,
+ /obj/item/stack/sheet/durathread = 1)
+ time = 4 SECONDS
+ category = CAT_CLOTHING
+
+/datum/crafting_recipe/holymelonmelon_armour_fr
+ name = "Holymelon Armour"
+ result = /obj/item/clothing/suit/armor/durability/holymelon/fire_resist
+ reqs = list(/obj/item/clothing/head/helmet/durability/holymelon/fire_resist = 3,
+ /obj/item/stack/sheet/durathread = 1)
+ time = 4 SECONDS
+ category = CAT_CLOTHING
+
+/datum/crafting_recipe/barrelmelon_armour
+ name = "Barrelmelon Armour"
+ result = /obj/item/clothing/suit/armor/durability/barrelmelon
+ reqs = list(/obj/item/clothing/head/helmet/durability/barrelmelon = 3,
+ /obj/item/stack/sheet/durathread = 1)
+ time = 4 SECONDS
+ category = CAT_CLOTHING
+
+/datum/crafting_recipe/barrelmelon_armour_fr
+ name = "Barrelmelon Armour"
+ result = /obj/item/clothing/suit/armor/durability/barrelmelon/fire_resist
+ reqs = list(/obj/item/clothing/head/helmet/durability/barrelmelon/fire_resist = 3,
+ /obj/item/stack/sheet/durathread = 1)
+ time = 4 SECONDS
+ category = CAT_CLOTHING
+
+/datum/crafting_recipe/grass_sheath
+ name = "Grass Sabre Sheath"
+ result = /obj/item/storage/belt/grass_sabre
+ reqs = list(/obj/item/food/grown/grass = 4,
+ /obj/item/food/grown/grass/fairy = 2)
+ time = 4 SECONDS
+ category = CAT_CONTAINERS
+
/datum/crafting_recipe/fannypack
name = "Fannypack"
result = /obj/item/storage/belt/fannypack
diff --git a/code/datums/components/crafting/weapon_ammo.dm b/code/datums/components/crafting/weapon_ammo.dm
index 2ba01802e7cdd..9a3448bc803a3 100644
--- a/code/datums/components/crafting/weapon_ammo.dm
+++ b/code/datums/components/crafting/weapon_ammo.dm
@@ -127,6 +127,28 @@
category = CAT_WEAPON_AMMO
crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_MUST_BE_LEARNED
+/datum/crafting_recipe/sticky_arrow
+ name = "Sticky arrow"
+ result = /obj/item/ammo_casing/arrow/sticky
+ reqs = list(
+ /obj/item/ammo_casing/arrow = 1,
+ /obj/item/food/honeycomb = 3,
+ )
+ time = 5 SECONDS
+ category = CAT_WEAPON_AMMO
+ crafting_flags = CRAFT_CHECK_DENSITY
+
+/datum/crafting_recipe/poison_arrow
+ name = "Poison arrow"
+ result = /obj/item/ammo_casing/arrow/poison
+ reqs = list(
+ /obj/item/ammo_casing/arrow = 1,
+ /obj/item/food/grown/berries/poison = 5,
+ )
+ time = 5 SECONDS
+ category = CAT_WEAPON_AMMO
+ crafting_flags = CRAFT_CHECK_DENSITY
+
/datum/crafting_recipe/plastic_arrow
name = "Plastic Arrow"
result = /obj/item/ammo_casing/arrow/plastic
diff --git a/code/datums/components/spirit_holding.dm b/code/datums/components/spirit_holding.dm
index 2f0588c6c22a2..b510fde3523a4 100644
--- a/code/datums/components/spirit_holding.dm
+++ b/code/datums/components/spirit_holding.dm
@@ -7,9 +7,9 @@
///bool on if this component is currently polling for observers to inhabit the item
var/attempting_awakening = FALSE
/// Allows renaming the bound item
- var/allow_renaming
+ var/allow_renaming = TRUE
/// Allows channeling
- var/allow_channeling
+ var/allow_channeling = TRUE
/// Allows exorcism
var/allow_exorcism
///mob contained in the item.
@@ -92,7 +92,7 @@
to_chat(ghost, span_userdanger("The new vessel for your spirit has been destroyed! You remain an unbound ghost."))
return
- bind_the_soule(ghost, awakener)
+ bind_the_soule(ghost.mind, awakener)
attempting_awakening = FALSE
@@ -119,11 +119,13 @@
* Arguments:
* * awakener: user who interacted with the blade
*/
-/datum/component/spirit_holding/proc/custom_name(mob/awakener)
+/datum/component/spirit_holding/proc/custom_name(mob/awakener, iteration = 1)
+ if(iteration > 5)
+ return "indecision" // The spirit of indecision
var/chosen_name = sanitize_name(tgui_input_text(bound_spirit, "What are you named?", "Spectral Nomenclature", max_length = MAX_NAME_LEN))
if(!chosen_name) // with the way that sanitize_name works, it'll actually send the error message to the awakener as well.
- to_chat(awakener, span_warning("Your blade did not select a valid name! Please wait as they try again.")) // more verbose than what sanitize_name might pass in its error message
- return custom_name(awakener)
+ to_chat(awakener, span_warning("Your blade did not select a valid name! Please wait as they try again.")) // more verbose than what sanitize_name might pass in it's error message
+ return custom_name(awakener, iteration++)
return chosen_name
///signal fired from a mob moving inside the parent
diff --git a/code/datums/components/vacuum.dm b/code/datums/components/vacuum.dm
index c471dc13a16bc..0bf7888ff47e3 100644
--- a/code/datums/components/vacuum.dm
+++ b/code/datums/components/vacuum.dm
@@ -53,7 +53,7 @@
if (!isitem(potential_item))
continue
var/obj/item/item = potential_item
- if (vacuum_bag?.attackby(item))
+ if (vacuum_bag.atom_storage.attempt_insert(item))
sucked = TRUE // track that we successfully sucked up something
// if we did indeed suck up something, play a funny noise
diff --git a/code/datums/diseases/advance/symptoms/oxygen.dm b/code/datums/diseases/advance/symptoms/oxygen.dm
index a7ea3bd181a79..79f0646a5c4b3 100644
--- a/code/datums/diseases/advance/symptoms/oxygen.dm
+++ b/code/datums/diseases/advance/symptoms/oxygen.dm
@@ -14,7 +14,7 @@
stage_speed = -3
transmittable = -4
level = 6
- base_message_chance = 5
+ base_message_chance = 3
symptom_delay_min = 1
symptom_delay_max = 1
required_organ = ORGAN_SLOT_LUNGS
@@ -40,6 +40,8 @@
if(4, 5)
infected_mob.losebreath = max(0, infected_mob.losebreath - 4)
infected_mob.adjustOxyLoss(-7)
+ if(prob(base_message_chance))
+ to_chat(infected_mob, span_notice("You realize you haven't been breathing."))
if(regenerate_blood && infected_mob.blood_volume < BLOOD_VOLUME_NORMAL)
infected_mob.blood_volume += 1
else
@@ -54,9 +56,12 @@
var/mob/living/carbon/infected_mob = advanced_disease.affected_mob
if(advanced_disease.stage >= 4)
ADD_TRAIT(infected_mob, TRAIT_NOBREATH, DISEASE_TRAIT)
- to_chat(infected_mob, span_notice(pick("You realize you haven't been breathing.", "You don't feel the need to breathe.")))
+ if(advanced_disease.stage == 4)
+ to_chat(infected_mob, span_notice("You don't feel the need to breathe anymore."))
else
REMOVE_TRAIT(infected_mob, TRAIT_NOBREATH, DISEASE_TRAIT)
+ if(advanced_disease.stage_peaked && advanced_disease.stage == 3)
+ to_chat(infected_mob, span_notice("You feel the need to breathe again."))
return TRUE
/datum/symptom/oxygen/End(datum/disease/advance/advanced_disease)
diff --git a/code/datums/dna.dm b/code/datums/dna.dm
index 1bc504ab1b725..df92d57c59b4c 100644
--- a/code/datums/dna.dm
+++ b/code/datums/dna.dm
@@ -216,8 +216,6 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block())
L[DNA_TAIL_BLOCK] = construct_block(SSaccessories.tails_list_human.Find(features["tail_cat"]), length(SSaccessories.tails_list_human))
if(features["tail_lizard"])
L[DNA_LIZARD_TAIL_BLOCK] = construct_block(SSaccessories.tails_list_lizard.Find(features["tail_lizard"]), length(SSaccessories.tails_list_lizard))
- if(features["tail_monkey"])
- L[DNA_MONKEY_TAIL_BLOCK] = construct_block(SSaccessories.tails_list_monkey.Find(features["tail_monkey"]), length(SSaccessories.tails_list_monkey))
if(features["snout"])
L[DNA_SNOUT_BLOCK] = construct_block(SSaccessories.snouts_list.Find(features["snout"]), length(SSaccessories.snouts_list))
if(features["horns"])
@@ -362,8 +360,6 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block())
set_uni_feature_block(blocknumber, construct_block(SSaccessories.tails_list_human.Find(features["tail_cat"]), length(SSaccessories.tails_list_human)))
if(DNA_LIZARD_TAIL_BLOCK)
set_uni_feature_block(blocknumber, construct_block(SSaccessories.tails_list_lizard.Find(features["tail_lizard"]), length(SSaccessories.tails_list_lizard)))
- if(DNA_MONKEY_TAIL_BLOCK)
- set_uni_feature_block(blocknumber, construct_block(SSaccessories.tails_list_monkey.Find(features["tail_monkey"]), length(SSaccessories.tails_list_monkey)))
if(DNA_SNOUT_BLOCK)
set_uni_feature_block(blocknumber, construct_block(SSaccessories.snouts_list.Find(features["snout"]), length(SSaccessories.snouts_list)))
if(DNA_HORNS_BLOCK)
@@ -669,8 +665,6 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block())
dna.features["tail_cat"] = SSaccessories.tails_list_human[deconstruct_block(get_uni_feature_block(features, DNA_TAIL_BLOCK), length(SSaccessories.tails_list_human))]
if(dna.features["tail_lizard"])
dna.features["tail_lizard"] = SSaccessories.tails_list_lizard[deconstruct_block(get_uni_feature_block(features, DNA_LIZARD_TAIL_BLOCK), length(SSaccessories.tails_list_lizard))]
- if(dna.features["tail_monkey"])
- dna.features["tail_monkey"] = SSaccessories.tails_list_monkey[deconstruct_block(get_uni_feature_block(features, DNA_MONKEY_TAIL_BLOCK), length(SSaccessories.tails_list_monkey))]
if(dna.features["ears"])
dna.features["ears"] = SSaccessories.ears_list[deconstruct_block(get_uni_feature_block(features, DNA_EARS_BLOCK), length(SSaccessories.ears_list))]
if(dna.features["moth_wings"])
diff --git a/code/datums/dog_fashion.dm b/code/datums/dog_fashion.dm
index c2154736cc0f0..7aa7f120e7509 100644
--- a/code/datums/dog_fashion.dm
+++ b/code/datums/dog_fashion.dm
@@ -243,3 +243,18 @@
obj_icon_state = "eyepatch"
emote_hear = list("sighs gruffly.", "groans.")
emote_see = list("considers their own mortality.", "stares bleakly into the middle distance.", "ponders the horrors of warfare.")
+
+/datum/dog_fashion/head/watermelon
+ name = "Watermelon Warrior %REAL_NAME%"
+ desc = "5% safer than normal and ready to take on advantage!"
+ obj_icon_state = "watermelon"
+
+/datum/dog_fashion/head/holymelon
+ name = "Holymelon Paladin %REAL_NAME%"
+ desc = "Extraterrestial powers beware, %NAME% is here to smite you down!"
+ obj_icon_state = "holymelon"
+
+/datum/dog_fashion/head/barrelmelon
+ name = "Barrelmelon Berserk %REAL_NAME%"
+ desc = "Either the sturdiness of the helmet gave %REAL_NAME% a confidence boost, or its bit tight on their head..."
+ obj_icon_state = "barrelmelon"
diff --git a/code/datums/elements/door_pryer.dm b/code/datums/elements/door_pryer.dm
index b7f213b3856f6..9f01e8be2b6ab 100644
--- a/code/datums/elements/door_pryer.dm
+++ b/code/datums/elements/door_pryer.dm
@@ -35,12 +35,13 @@
attacker.balloon_alert(attacker, "busy!")
return COMPONENT_CANCEL_ATTACK_CHAIN
- if (airlock_target.locked || airlock_target.welded || airlock_target.seal)
- if (!attacker.combat_mode)
- airlock_target.balloon_alert(attacker, "it's sealed!")
- return COMPONENT_CANCEL_ATTACK_CHAIN
+ if (attacker.combat_mode)
return // Attack the door
+ if (airlock_target.locked || airlock_target.welded || airlock_target.seal)
+ airlock_target.balloon_alert(attacker, "it's sealed!")
+ return COMPONENT_CANCEL_ATTACK_CHAIN
+
INVOKE_ASYNC(src, PROC_REF(open_door), attacker, airlock_target)
return COMPONENT_CANCEL_ATTACK_CHAIN
diff --git a/code/datums/emotes.dm b/code/datums/emotes.dm
index 331e11afa4893..8d77c6fc6bdbb 100644
--- a/code/datums/emotes.dm
+++ b/code/datums/emotes.dm
@@ -60,6 +60,8 @@
var/can_message_change = FALSE
/// How long is the cooldown on the audio of the emote, if it has one?
var/audio_cooldown = 2 SECONDS
+ /// Does this emote's sound ignore walls?
+ var/sound_wall_ignore = FALSE
/datum/emote/New()
switch(mob_type_allowed_typecache)
@@ -100,7 +102,7 @@
var/tmp_sound = get_sound(user)
if(tmp_sound && should_play_sound(user, intentional) && TIMER_COOLDOWN_FINISHED(user, type))
TIMER_COOLDOWN_START(user, type, audio_cooldown)
- playsound(user, tmp_sound, 50, vary)
+ playsound(source = user,soundin = tmp_sound,vol = 50, vary = vary, ignore_walls = sound_wall_ignore)
var/is_important = emote_type & EMOTE_IMPORTANT
var/is_visual = emote_type & EMOTE_VISIBLE
diff --git a/code/datums/sprite_accessories.dm b/code/datums/sprite_accessories.dm
index eccb2161c73bb..a37926405f9c0 100644
--- a/code/datums/sprite_accessories.dm
+++ b/code/datums/sprite_accessories.dm
@@ -51,7 +51,7 @@
var/natural_spawn = TRUE
/datum/sprite_accessory/blank
- name = "None"
+ name = SPRITE_ACCESSORY_NONE
icon_state = "None"
//////////////////////
@@ -835,7 +835,7 @@
var/gradient_category = GRADIENT_APPLIES_TO_HAIR|GRADIENT_APPLIES_TO_FACIAL_HAIR
/datum/sprite_accessory/gradient/none
- name = "None"
+ name = SPRITE_ACCESSORY_NONE
icon_state = "none"
/datum/sprite_accessory/gradient/full
@@ -1726,10 +1726,6 @@
/datum/sprite_accessory/lizard_markings
icon = 'icons/mob/human/species/lizard/lizard_markings.dmi'
-/datum/sprite_accessory/lizard_markings/none
- name = "None"
- icon_state = "none"
-
/datum/sprite_accessory/lizard_markings/dtiger
name = "Dark Tiger Body"
icon_state = "dtiger"
@@ -1754,6 +1750,11 @@
icon = 'icons/mob/human/species/lizard/lizard_tails.dmi'
spine_key = SPINE_KEY_LIZARD
+/datum/sprite_accessory/tails/lizard/none
+ name = SPRITE_ACCESSORY_NONE
+ icon_state = "none"
+ natural_spawn = FALSE
+
/datum/sprite_accessory/tails/lizard/smooth
name = "Smooth"
icon_state = "smooth"
@@ -1781,6 +1782,13 @@
icon_state = "default"
color_src = HAIR_COLOR
+/datum/sprite_accessory/tails/monkey
+
+/datum/sprite_accessory/tails/monkey/none
+ name = SPRITE_ACCESSORY_NONE
+ icon_state = "none"
+ natural_spawn = FALSE
+
/datum/sprite_accessory/tails/monkey/default
name = "Monkey"
icon = 'icons/mob/human/species/monkey/monkey_tail.dmi'
@@ -1855,10 +1863,6 @@
icon = 'icons/mob/human/species/lizard/lizard_misc.dmi'
em_block = TRUE
-/datum/sprite_accessory/horns/none
- name = "None"
- icon_state = "none"
-
/datum/sprite_accessory/horns/simple
name = "Simple"
icon_state = "simple"
@@ -1883,10 +1887,6 @@
icon = 'icons/mob/human/cat_features.dmi'
em_block = TRUE
-/datum/sprite_accessory/ears/none
- name = "None"
- icon_state = "none"
-
/datum/sprite_accessory/ears/cat
name = "Cat"
icon_state = "cat"
@@ -1921,10 +1921,6 @@
color_src = HAIR_COLOR
locked = TRUE
-/datum/sprite_accessory/wings/none
- name = "None"
- icon_state = "none"
-
/datum/sprite_accessory/wings
icon = 'icons/mob/human/species/wings.dmi'
em_block = TRUE
@@ -2068,10 +2064,6 @@
/datum/sprite_accessory/frills
icon = 'icons/mob/human/species/lizard/lizard_misc.dmi'
-/datum/sprite_accessory/frills/none
- name = "None"
- icon_state = "none"
-
/datum/sprite_accessory/frills/simple
name = "Simple"
icon_state = "simple"
@@ -2092,14 +2084,6 @@
icon = 'icons/mob/human/species/lizard/lizard_spines.dmi'
em_block = TRUE
-/datum/sprite_accessory/spines/none
- name = "None"
- icon_state = "none"
-
-/datum/sprite_accessory/tail_spines/none
- name = "None"
- icon_state = "none"
-
/datum/sprite_accessory/spines/short
name = "Short"
icon_state = "short"
@@ -2360,10 +2344,6 @@
icon = 'icons/mob/human/species/moth/moth_markings.dmi'
color_src = null
-/datum/sprite_accessory/moth_markings/none
- name = "None"
- icon_state = "none"
-
/datum/sprite_accessory/moth_markings/reddish
name = "Reddish"
icon_state = "reddish"
diff --git a/code/game/atom/_atom.dm b/code/game/atom/_atom.dm
index 8b29ba9e048e7..0fc288d06c6ee 100644
--- a/code/game/atom/_atom.dm
+++ b/code/game/atom/_atom.dm
@@ -940,13 +940,18 @@
//We inline a MAPTEXT() here, because there's no good way to statically add to a string like this
new_maptext = "[name][extra_context]"
- INVOKE_ASYNC(src, PROC_REF(set_hover_maptext), client, active_hud, new_maptext)
+ if (length(name) * 10 > active_hud.screentip_text.maptext_width)
+ INVOKE_ASYNC(src, PROC_REF(set_hover_maptext), client, active_hud, new_maptext)
+ return
+
+ active_hud.screentip_text.maptext = new_maptext
+ active_hud.screentip_text.maptext_y = 10 - (extra_lines > 0 ? 11 + 9 * (extra_lines - 1): 0)
/atom/proc/set_hover_maptext(client/client, datum/hud/active_hud, new_maptext)
var/map_height
WXH_TO_HEIGHT(client.MeasureText(new_maptext, null, active_hud.screentip_text.maptext_width), map_height)
active_hud.screentip_text.maptext = new_maptext
- active_hud.screentip_text.maptext_y = 22 - map_height
+ active_hud.screentip_text.maptext_y = 26 - map_height
/**
* This proc is used for telling whether something can pass by this atom in a given direction, for use by the pathfinding system.
diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm
index 423a2a16b55c3..45a75f06133dd 100644
--- a/code/game/machinery/_machinery.dm
+++ b/code/game/machinery/_machinery.dm
@@ -286,6 +286,7 @@
///Early process for machines added to SSmachines.processing_early to prioritize power draw
/obj/machinery/proc/process_early()
+ set waitfor = FALSE
return PROCESS_KILL
/obj/machinery/process()//If you dont use process or power why are you here
@@ -293,9 +294,11 @@
///Late process for machines added to SSmachines.processing_late to gather accurate recordings
/obj/machinery/proc/process_late()
+ set waitfor = FALSE
return PROCESS_KILL
/obj/machinery/proc/process_atmos()//If you dont use process why are you here
+ set waitfor = FALSE
return PROCESS_KILL
///Called when we want to change the value of the machine_stat variable. Holds bitflags.
diff --git a/code/game/machinery/computer/operating_computer.dm b/code/game/machinery/computer/operating_computer.dm
index d67cea367e9a6..43a18c7081f30 100644
--- a/code/game/machinery/computer/operating_computer.dm
+++ b/code/game/machinery/computer/operating_computer.dm
@@ -143,11 +143,13 @@
var/chems_needed = surgery_step.get_chem_list()
var/alternative_step
var/alt_chems_needed = ""
+ var/alt_chems_present = FALSE
if(surgery_step.repeatable)
var/datum/surgery_step/next_step = procedure.get_surgery_next_step()
if(next_step)
alternative_step = capitalize(next_step.name)
alt_chems_needed = next_step.get_chem_list()
+ alt_chems_present = next_step.chem_check(patient)
else
alternative_step = "Finish operation"
data["procedures"] += list(list(
@@ -155,7 +157,9 @@
"next_step" = capitalize(surgery_step.name),
"chems_needed" = chems_needed,
"alternative_step" = alternative_step,
- "alt_chems_needed" = alt_chems_needed
+ "alt_chems_needed" = alt_chems_needed,
+ "chems_present" = surgery_step.chem_check(patient),
+ "alt_chems_present" = alt_chems_present
))
return data
diff --git a/code/game/machinery/computer/telescreen.dm b/code/game/machinery/computer/telescreen.dm
index c421ca0c90308..deca4ec8245e1 100644
--- a/code/game/machinery/computer/telescreen.dm
+++ b/code/game/machinery/computer/telescreen.dm
@@ -185,11 +185,23 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/ce, 32)
frame_type = /obj/item/wallframe/telescreen/cmo
/obj/item/wallframe/telescreen/cmo
- name = "\improper Chief Engineer'stelescreen frame"
+ name = "\improper Chief Medical Officer's telescreen frame"
result_path = /obj/machinery/computer/security/telescreen/cmo
MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/cmo, 32)
+/obj/machinery/computer/security/telescreen/med_sec
+ name = "\improper medical telescreen"
+ desc = "A telescreen with access to the medbay's camera network."
+ network = list(CAMERANET_NETWORK_MEDBAY)
+ frame_type = /obj/item/wallframe/telescreen/med_sec
+
+/obj/item/wallframe/telescreen/med_sec
+ name = "\improper medical telescreen frame"
+ result_path = /obj/machinery/computer/security/telescreen/med_sec
+
+MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/med_sec, 32)
+
/obj/machinery/computer/security/telescreen/vault
name = "vault monitor"
desc = "A telescreen that connects to the vault's camera network."
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index dcb8622f1db3b..7188ba7c8353a 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -1462,9 +1462,9 @@
return
if(!density) //Already open
return ..()
+ if(user.combat_mode)
+ return ..()
if(locked || welded || seal) //Extremely generic, as aliens only understand the basics of how airlocks work.
- if(user.combat_mode)
- return ..()
to_chat(user, span_warning("[src] refuses to budge!"))
return
add_fingerprint(user)
diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm
index dd274b3053169..84df989ba0ea3 100644
--- a/code/game/machinery/doors/firedoor.dm
+++ b/code/game/machinery/doors/firedoor.dm
@@ -431,6 +431,10 @@
ignore_alarms = FALSE
if(!alarm_type || active) // If we have no alarm type, or are already active, go away
return
+ // Do we even care about temperature?
+ for(var/area/place in affecting_areas)
+ if(!place.fire_detect) // If any area is set to disable detection
+ return
// Otherwise, reactivate ourselves
start_activation_process(alarm_type)
diff --git a/code/game/machinery/firealarm.dm b/code/game/machinery/firealarm.dm
index a852ea019c697..3fc4dcf219adb 100644
--- a/code/game/machinery/firealarm.dm
+++ b/code/game/machinery/firealarm.dm
@@ -477,6 +477,9 @@
my_area.fire_detect = !my_area.fire_detect
for(var/obj/machinery/firealarm/fire_panel in my_area.firealarms)
fire_panel.update_icon()
+ // Used to force all the firelocks to update, if the zone is not manually activated
+ if (my_area.fault_status != AREA_FAULT_MANUAL)
+ reset() // Don't send user to prevent double balloon_alert() and the action is already logged in this proc.
if (user)
balloon_alert(user, "thermal sensors [my_area.fire_detect ? "enabled" : "disabled"]")
user.log_message("[ my_area.fire_detect ? "enabled" : "disabled" ] firelock sensors using [src].", LOG_GAME)
diff --git a/code/game/machinery/recycler.dm b/code/game/machinery/recycler.dm
index ce1b82a83b408..8ce9265917d63 100644
--- a/code/game/machinery/recycler.dm
+++ b/code/game/machinery/recycler.dm
@@ -133,33 +133,55 @@
qdel(morsel)
return
- var/list/to_eat = (issilicon(morsel) ? list(morsel) : morsel.get_all_contents()) //eating borg contents leads to many bad things
+ var/list/atom/to_eat = list(morsel)
var/living_detected = FALSE //technically includes silicons as well but eh
var/list/nom = list()
var/list/crunchy_nom = list() //Mobs have to be handled differently so they get a different list instead of checking them multiple times.
+ var/not_eaten = 0
- for(var/thing in to_eat)
- var/obj/as_object = thing
- if(istype(as_object))
- if(as_object.resistance_flags & INDESTRUCTIBLE)
- if(!isturf(as_object.loc) && !isliving(as_object.loc))
- as_object.forceMove(loc) // so you still cant shove it in a locker
- continue
- var/obj/item/bodypart/head/as_head = thing
- var/obj/item/mmi/as_mmi = thing
- if(istype(thing, /obj/item/organ/internal/brain) || (istype(as_head) && locate(/obj/item/organ/internal/brain) in as_head) || (istype(as_mmi) && as_mmi.brain) || istype(thing, /obj/item/dullahan_relay))
- living_detected = TRUE
- if(isitem(as_object))
- var/obj/item/as_item = as_object
- if(as_item.item_flags & ABSTRACT) //also catches organs and bodyparts *stares*
- continue
- nom += thing
- else if(isliving(thing))
+ while (to_eat.len)
+ var/atom/movable/thing = to_eat[1]
+ to_eat -= thing
+
+ if (thing.flags_1 & HOLOGRAM_1)
+ qdel(thing)
+ continue
+
+ if (thing.resistance_flags & INDESTRUCTIBLE)
+ if (!isturf(thing.loc) && !isliving(thing.loc))
+ thing.forceMove(loc)
+ not_eaten += 1
+ continue
+
+ if (isliving(thing))
living_detected = TRUE
crunchy_nom += thing
+ if (!issilicon(thing))
+ to_eat |= thing.contents
+ continue
+
+ if (!isobj(thing))
+ not_eaten += 1
+ continue
+
+ if (isitem(thing))
+ var/obj/item/as_item = thing
+ if (as_item.item_flags & ABSTRACT)
+ not_eaten += 1
+ continue
+
+ if (istype(thing, /obj/item/organ/internal/brain) || istype(thing, /obj/item/dullahan_relay))
+ living_detected = TRUE
+
+ if (istype(thing, /obj/item/mmi))
+ var/obj/item/mmi/mmi = thing
+ if (!isnull(mmi.brain))
+ living_detected = TRUE
+
+ nom += thing
+ to_eat |= thing.contents
- var/not_eaten = to_eat.len - nom.len - crunchy_nom.len
if(living_detected) // First, check if we have any living beings detected.
if(obj_flags & EMAGGED)
for(var/CRUNCH in crunchy_nom) // Eat them and keep going because we don't care about safety.
diff --git a/code/game/machinery/telecomms/broadcasting.dm b/code/game/machinery/telecomms/broadcasting.dm
index 5887c77667506..2c31dcbd98955 100644
--- a/code/game/machinery/telecomms/broadcasting.dm
+++ b/code/game/machinery/telecomms/broadcasting.dm
@@ -78,7 +78,7 @@
datum/language/language, // the language of the message
message, // the text content of the message
spans, // the list of spans applied to the message
- list/message_mods // the list of modification applied to the message. Whispering, singing, ect
+ list/message_mods, // the list of modification applied to the message. Whispering, singing, ect
)
src.source = source
src.frequency = frequency
@@ -92,7 +92,7 @@
"compression" = rand(COMPRESSION_VOCAL_SIGNAL_MIN, COMPRESSION_VOCAL_SIGNAL_MAX),
"language" = lang_instance.name,
"spans" = spans,
- "mods" = message_mods
+ "mods" = message_mods,
)
levels = SSmapping.get_connected_levels(get_turf(source))
diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm
index d515929c197cc..373db4b21f53a 100644
--- a/code/game/objects/items/devices/radio/radio.dm
+++ b/code/game/objects/items/devices/radio/radio.dm
@@ -351,6 +351,12 @@
signal.broadcast()
return
+
+ if(iscarbon(talking_movable))
+ var/mob/living/carbon/talking_carbon = talking_movable
+ if(talking_carbon.client?.prefs.read_preference(/datum/preference/toggle/radio_noise))
+ SEND_SOUND(talking_carbon, 'sound/misc/radio_talk.ogg')
+
// All radios make an attempt to use the subspace system first
signal.send_to_receivers()
@@ -422,6 +428,16 @@
SEND_SIGNAL(src, COMSIG_RADIO_RECEIVE_MESSAGE, data)
flick_overlay_view(overlay_speaker_active, 5 SECONDS)
+ if(iscarbon(loc))
+ var/mob/living/carbon/holder = loc
+ if(!holder.client?.prefs.read_preference(/datum/preference/toggle/radio_noise))
+ return
+
+ var/list/spans = data["spans"]
+ SEND_SOUND(holder, 'sound/misc/radio_receive.ogg')
+ if(SPAN_COMMAND in spans)
+ SEND_SOUND(holder, 'sound/misc/radio_important.ogg')
+
/obj/item/radio/ui_state(mob/user)
return GLOB.inventory_state
diff --git a/code/game/objects/items/food/misc.dm b/code/game/objects/items/food/misc.dm
index 31ac87c0ff690..26852066bae28 100644
--- a/code/game/objects/items/food/misc.dm
+++ b/code/game/objects/items/food/misc.dm
@@ -16,6 +16,87 @@
juice_typepath = /datum/reagent/consumable/watermelonjuice
w_class = WEIGHT_CLASS_SMALL
+/obj/item/food/watermelonmush
+ name = "watermelon mush"
+ desc = "A plop of watery goodness."
+ icon = 'icons/obj/service/hydroponics/harvest.dmi'
+ icon_state = "watermelonpulp"
+ food_reagents = list(
+ /datum/reagent/water = 2,
+ /datum/reagent/consumable/nutriment/vitamin = 0.1,
+ /datum/reagent/consumable/nutriment = 0.5,
+ )
+ tastes = list("watermelon" = 1)
+ foodtypes = FRUIT
+ food_flags = FOOD_FINGER_FOOD
+ juice_typepath = /datum/reagent/consumable/watermelonjuice
+ w_class = WEIGHT_CLASS_SMALL
+
+/obj/item/food/holymelonslice
+ name = "holymelon slice"
+ desc = "A slice of holy goodness."
+ icon = 'icons/obj/service/hydroponics/harvest.dmi'
+ icon_state = "holymelonslice"
+ food_reagents = list(
+ /datum/reagent/water/holywater = 0.5,
+ /datum/reagent/consumable/nutriment/vitamin = 0.2,
+ /datum/reagent/consumable/nutriment = 1,
+ )
+ tastes = list("holymelon" = 1)
+ foodtypes = FRUIT
+ food_flags = FOOD_FINGER_FOOD
+ juice_typepath = /datum/reagent/water/holywater
+ w_class = WEIGHT_CLASS_SMALL
+
+/obj/item/food/holymelonmush
+ name = "holymelon mush"
+ desc = "A plop of holy goodness."
+ icon = 'icons/obj/service/hydroponics/harvest.dmi'
+ icon_state = "holymelonpulp"
+ food_reagents = list(
+ /datum/reagent/water/holywater = 1,
+ /datum/reagent/consumable/nutriment/vitamin = 0.1,
+ /datum/reagent/consumable/nutriment = 0.5,
+ )
+ tastes = list("holymelon" = 1)
+ foodtypes = FRUIT
+ food_flags = FOOD_FINGER_FOOD
+ juice_typepath = /datum/reagent/water/holywater
+ w_class = WEIGHT_CLASS_SMALL
+
+/obj/item/food/barrelmelonslice
+ name = "barrelmelon slice"
+ desc = "A slice of beery goodness."
+ icon = 'icons/obj/service/hydroponics/harvest.dmi'
+ icon_state = "barrelmelonslice"
+ food_reagents = list(
+ /datum/reagent/consumable/ethanol/beer = 1,
+ /datum/reagent/consumable/nutriment/vitamin = 0.2,
+ /datum/reagent/consumable/nutriment = 1,
+ )
+ tastes = list("beer" = 1)
+ foodtypes = FRUIT
+ food_flags = FOOD_FINGER_FOOD
+ juice_typepath = /datum/reagent/consumable/ethanol/beer
+ w_class = WEIGHT_CLASS_SMALL
+
+/obj/item/food/barrelmelonmush
+ name = "barrelmelon mush"
+ desc = "A plop of beery goodness."
+ icon = 'icons/obj/service/hydroponics/harvest.dmi'
+ icon_state = "barrelmelonpulp"
+ food_reagents = list(
+ /datum/reagent/consumable/ethanol/beer = 2,
+ /datum/reagent/consumable/nutriment/vitamin = 0.1,
+ /datum/reagent/consumable/nutriment = 0.5,
+ )
+ tastes = list("beer" = 1)
+ foodtypes = FRUIT
+ food_flags = FOOD_FINGER_FOOD
+ juice_typepath = /datum/reagent/consumable/ethanol/beer
+ w_class = WEIGHT_CLASS_SMALL
+
+
/obj/item/food/appleslice
name = "apple slice"
desc = "The perfect after-school snack."
diff --git a/code/game/objects/items/knives.dm b/code/game/objects/items/knives.dm
index 1a16b08eb866b..4e6795c182b24 100644
--- a/code/game/objects/items/knives.dm
+++ b/code/game/objects/items/knives.dm
@@ -166,6 +166,19 @@
force = 15
throwforce = 15
+/obj/item/knife/combat/root
+ name = "cahn'root dagger"
+ icon = 'icons/obj/weapons/stabby.dmi'
+ icon_state = "rootdagger"
+ worn_icon_state = "root_dagger"
+ lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
+ righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi'
+ inhand_icon_state = "rootshiv"
+ embed_type = /datum/embed_data/combat_knife/weak
+ desc = "A root dagger, deceptively sharp. Perfect to hide and stab someone with, or make a couple and throw them at enemies."
+ force = 15
+ throwforce = 15
+
/obj/item/knife/combat/bone
name = "bone dagger"
inhand_icon_state = "bone_dagger"
@@ -279,3 +292,18 @@
/obj/item/knife/shiv/carrot/suicide_act(mob/living/carbon/user)
user.visible_message(span_suicide("[user] forcefully drives \the [src] into [user.p_their()] eye! It looks like [user.p_theyre()] trying to commit suicide!"))
return BRUTELOSS
+
+/obj/item/knife/shiv/parsnip
+ name = "parsnip shiv"
+ icon_state = "parsnipshiv"
+ inhand_icon_state = "parsnipshiv"
+ desc = "Truly putting 'snip' in the 'parsnip', and it's not sub-par either!"
+ custom_materials = null
+
+/obj/item/knife/shiv/root
+ name = "cahn'root shiv"
+ icon_state = "rootshiv"
+ inhand_icon_state = "rootshiv"
+ desc = "A root sharpened into a shiv. A root source of someone's stab wounds soon, most likely."
+ custom_materials = null
+
diff --git a/code/game/objects/items/melee/misc.dm b/code/game/objects/items/melee/misc.dm
index 80b1e66b2e3e9..0337698106c38 100644
--- a/code/game/objects/items/melee/misc.dm
+++ b/code/game/objects/items/melee/misc.dm
@@ -164,6 +164,47 @@
user.death(FALSE)
REMOVE_TRAIT(src, TRAIT_NODROP, SABRE_SUICIDE_TRAIT)
+
+/obj/item/melee/parsnip_sabre
+ name = "parsnip sabre"
+ desc = "An elegant weapon, if weird weapon. Suprisingly sharp for being made from a parsnip."
+ icon = 'icons/obj/weapons/sword.dmi'
+ icon_state = "parsnip_sabre"
+ inhand_icon_state = "parsnip_sabre"
+ lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
+ righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi'
+ force = 15
+ throwforce = 10
+ demolition_mod = 0.3
+ w_class = WEIGHT_CLASS_BULKY
+ block_chance = 40
+ armour_penetration = 40
+ sharpness = SHARP_EDGED
+ attack_verb_continuous = list("slashes", "cuts")
+ attack_verb_simple = list("slash", "cut")
+ block_sound = 'sound/weapons/parry.ogg'
+ hitsound = 'sound/weapons/rapierhit.ogg'
+ custom_materials = null
+ wound_bonus = 5
+ bare_wound_bonus = 15
+
+/obj/item/melee/sabre/Initialize(mapload)
+ . = ..()
+ AddComponent(/datum/component/jousting)
+
+/obj/item/melee/parsnip_sabre/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK, damage_type = BRUTE)
+ if(attack_type == PROJECTILE_ATTACK || attack_type == LEAP_ATTACK)
+ final_block_chance = 0 //Don't bring a sword to a gunfight, and also you aren't going to really block someone full body tackling you with a sword
+ return ..()
+
+/obj/item/melee/parsnip_sabre/on_exit_storage(datum/storage/container)
+ . = ..()
+ playsound(container.parent, 'sound/items/unsheath.ogg', 25, TRUE)
+
+/obj/item/melee/parsnip_sabre/on_enter_storage(datum/storage/container)
+ . = ..()
+ playsound(container.parent, 'sound/items/sheath.ogg', 25, TRUE)
+
/obj/item/melee/beesword
name = "The Stinger"
desc = "Taken from a giant bee and folded over one thousand times in pure honey. Can sting through anything."
diff --git a/code/game/objects/items/nitrium_crystals.dm b/code/game/objects/items/nitrium_crystals.dm
deleted file mode 100644
index 828f437ade2fd..0000000000000
--- a/code/game/objects/items/nitrium_crystals.dm
+++ /dev/null
@@ -1,18 +0,0 @@
-/obj/item/nitrium_crystal
- desc = "A weird brown crystal, it smokes when broken"
- name = "nitrium crystal"
- icon = 'icons/obj/pipes_n_cables/atmos.dmi'
- icon_state = "nitrium_crystal"
- var/cloud_size = 1
-
-/obj/item/nitrium_crystal/attack_self(mob/user)
- . = ..()
- var/datum/effect_system/fluid_spread/smoke/chem/smoke = new
- var/turf/location = get_turf(src)
- create_reagents(5)
- reagents.add_reagent(/datum/reagent/nitrium_low_metabolization, 3)
- reagents.add_reagent(/datum/reagent/nitrium_high_metabolization, 2)
- smoke.attach(location)
- smoke.set_up(cloud_size, holder = src, location = location, carry = reagents, silent = TRUE)
- smoke.start()
- qdel(src)
diff --git a/code/game/objects/items/robot/items/storage.dm b/code/game/objects/items/robot/items/storage.dm
index 2d91128adb68d..3e030a9bd8f23 100644
--- a/code/game/objects/items/robot/items/storage.dm
+++ b/code/game/objects/items/robot/items/storage.dm
@@ -41,6 +41,11 @@
stored.forceMove(get_turf(usr))
return
+/obj/item/borg/apparatus/get_proxy_attacker_for(atom/target, mob/user)
+ if(stored) // Use the stored item if available
+ return stored
+ return ..()
+
/**
* Attack_self will pass for the stored item.
*/
@@ -57,10 +62,6 @@
return CLICK_ACTION_SUCCESS
/obj/item/borg/apparatus/pre_attack(atom/atom, mob/living/user, params)
- if(stored)
- stored.melee_attack_chain(user, atom, params)
- return TRUE
-
if(istype(atom.loc, /mob/living/silicon/robot) || istype(atom.loc, /obj/item/robot_model) || HAS_TRAIT(atom, TRAIT_NODROP))
return ..() // Borgs should not be grabbing their own modules
@@ -132,7 +133,6 @@
else
. += "Nothing."
- . += span_notice(" Right-clicking will splash the beaker on the ground.")
. += span_notice(" Alt-click will drop the currently stored beaker. ")
/obj/item/borg/apparatus/beaker/update_overlays()
@@ -151,15 +151,6 @@
arm.pixel_y = arm.pixel_y - 5
. += arm
-/// Secondary attack spills the content of the beaker.
-/obj/item/borg/apparatus/beaker/pre_attack_secondary(atom/target, mob/living/silicon/robot/user)
- var/obj/item/reagent_containers/stored_beaker = stored
- if(!stored_beaker)
- return ..()
- stored_beaker.SplashReagents(drop_location(user))
- loc.visible_message(span_notice("[user] spills the contents of [stored_beaker] all over the ground."))
- return ..()
-
/obj/item/borg/apparatus/beaker/extra
name = "secondary beaker storage apparatus"
desc = "A supplementary beaker storage apparatus."
diff --git a/code/game/objects/items/shields.dm b/code/game/objects/items/shields.dm
index 1553f0e9c8f29..520541e12dc73 100644
--- a/code/game/objects/items/shields.dm
+++ b/code/game/objects/items/shields.dm
@@ -99,6 +99,15 @@
max_integrity = 55
w_class = WEIGHT_CLASS_NORMAL
+/obj/item/shield/buckler/moonflower
+ name = "moonflower buckler"
+ desc = "A buckler made from a steel-cap reinforced moonflower."
+ icon_state = "moonflower_buckler"
+ inhand_icon_state = "moonflower_buckler"
+ block_chance = 40
+ max_integrity = 40
+ w_class = WEIGHT_CLASS_NORMAL
+
/obj/item/shield/kite
name = "kite shield"
desc = "Protect your internal organs with this almond shaped shield."
diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm
index 1bf97712ec566..3c09dc3926eec 100644
--- a/code/game/objects/items/storage/belt.dm
+++ b/code/game/objects/items/storage/belt.dm
@@ -855,6 +855,50 @@
new /obj/item/melee/sabre(src)
update_appearance()
+/obj/item/storage/belt/grass_sabre
+ name = "sabre sheath"
+ desc = "An simple grass sheath designed to hold a sabre of... some sorts. Actual metal one might be too sharp, though..."
+ icon_state = "grass_sheath"
+ inhand_icon_state = "grass_sheath"
+ worn_icon_state = "grass_sheath"
+ w_class = WEIGHT_CLASS_BULKY
+ interaction_flags_click = parent_type::interaction_flags_click | NEED_DEXTERITY | NEED_HANDS
+
+/obj/item/storage/belt/grass_sabre/Initialize(mapload)
+ . = ..()
+ AddElement(/datum/element/update_icon_updates_onmob)
+
+ atom_storage.max_slots = 1
+ atom_storage.rustle_sound = FALSE
+ atom_storage.max_specific_storage = WEIGHT_CLASS_BULKY
+ atom_storage.set_holdable(/obj/item/melee/sabre)
+ atom_storage.click_alt_open = FALSE
+
+/obj/item/storage/belt/grass_sabre/examine(mob/user)
+ . = ..()
+ if(length(contents))
+ . += span_notice("Alt-click it to quickly draw the blade.")
+
+/obj/item/storage/belt/grass_sabre/click_alt(mob/user)
+ if(length(contents))
+ var/obj/item/I = contents[1]
+ user.visible_message(span_notice("[user] takes [I] out of [src]."), span_notice("You take [I] out of [src]."))
+ user.put_in_hands(I)
+ update_appearance()
+ else
+ balloon_alert(user, "it's empty!")
+ return CLICK_ACTION_SUCCESS
+
+/obj/item/storage/belt/grass_sabre/update_icon_state()
+ icon_state = initial(inhand_icon_state)
+ inhand_icon_state = initial(inhand_icon_state)
+ worn_icon_state = initial(worn_icon_state)
+ if(contents.len)
+ icon_state += "-sabre"
+ inhand_icon_state += "-sabre"
+ worn_icon_state += "-sabre"
+ return ..()
+
/obj/item/storage/belt/plant
name = "botanical belt"
desc = "A sturdy leather belt used to hold most hydroponics supplies."
diff --git a/code/game/objects/items/storage/boxes/job_boxes.dm b/code/game/objects/items/storage/boxes/job_boxes.dm
index ea9189cc5f2b0..ddfb51d913b9c 100644
--- a/code/game/objects/items/storage/boxes/job_boxes.dm
+++ b/code/game/objects/items/storage/boxes/job_boxes.dm
@@ -43,7 +43,7 @@
if(HAS_TRAIT(SSstation, STATION_TRAIT_RADIOACTIVE_NEBULA))
new /obj/item/storage/pill_bottle/potassiodide(src)
- if(SSmapping.is_planetary() && LAZYLEN(SSmapping.multiz_levels))
+ if(LAZYLEN(SSmapping.multiz_levels))
new /obj/item/climbing_hook/emergency(src)
/obj/item/storage/box/survival/radio/PopulateContents()
diff --git a/code/game/objects/items/storage/medkit.dm b/code/game/objects/items/storage/medkit.dm
index c3c97c790fdf3..bee7fdd524f3d 100644
--- a/code/game/objects/items/storage/medkit.dm
+++ b/code/game/objects/items/storage/medkit.dm
@@ -18,6 +18,9 @@
righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
throw_speed = 3
throw_range = 7
+ drop_sound = 'sound/items/medkit_drop.ogg'
+ pickup_sound = 'sound/items/medkit_pick_up.ogg'
+ sound_vary = TRUE
var/empty = FALSE
/// Defines damage type of the medkit. General ones stay null. Used for medibot healing bonuses
var/damagetype_healed
@@ -79,6 +82,8 @@
/obj/item/storage/medkit/Initialize(mapload)
. = ..()
atom_storage.max_specific_storage = WEIGHT_CLASS_SMALL
+ atom_storage.open_sound = 'sound/items/medkit_open.ogg'
+ atom_storage.open_sound_vary = TRUE
/obj/item/storage/medkit/regular
icon_state = "medkit"
diff --git a/code/game/objects/items/tanks/tanks.dm b/code/game/objects/items/tanks/tanks.dm
index ee1f314c92add..d89794f420917 100644
--- a/code/game/objects/items/tanks/tanks.dm
+++ b/code/game/objects/items/tanks/tanks.dm
@@ -22,6 +22,9 @@
slot_flags = ITEM_SLOT_BACK
worn_icon = 'icons/mob/clothing/back.dmi' //since these can also get thrown into suit storage slots. if something goes on the belt, set this to null.
hitsound = 'sound/weapons/smash.ogg'
+ pickup_sound = 'sound/items/gas_tank_pick_up.ogg'
+ drop_sound = 'sound/items/gas_tank_drop.ogg'
+ sound_vary = TRUE
pressure_resistance = ONE_ATMOSPHERE * 5
force = 5
throwforce = 10
diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm
index fbe11fe933d1b..cd8247af3dfbe 100644
--- a/code/game/objects/items/weaponry.dm
+++ b/code/game/objects/items/weaponry.dm
@@ -505,6 +505,36 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
user.visible_message(span_suicide("[user] is strangling [user.p_them()]self with [src]'s cord! It looks like [user.p_theyre()] trying to commit suicide!"))
return OXYLOSS
+/obj/item/bambostaff
+ name = "Bamboo Staff"
+ desc = "A long bamboo-made staff with steel-capped ends. It is rumoured that initiates of Spider Clan train with such before getting to learn how to use a katana."
+ force = 10
+ block_chance = 45
+ block_sound = 'sound/weapons/genhit.ogg'
+ slot_flags = ITEM_SLOT_BACK
+ w_class = WEIGHT_CLASS_BULKY
+ hitsound = SFX_SWING_HIT
+ attack_verb_continuous = list("smashes", "slams", "whacks", "thwacks")
+ attack_verb_simple = list("smash", "slam", "whack", "thwack")
+ icon = 'icons/obj/weapons/staff.dmi'
+ icon_state = "bambostaff0"
+ inhand_icon_state = "bambostaff0"
+ worn_icon_state = "bambostaff0"
+ lefthand_file = 'icons/mob/inhands/weapons/staves_lefthand.dmi'
+ righthand_file = 'icons/mob/inhands/weapons/staves_righthand.dmi'
+
+/obj/item/nullrod/bostaff/Initialize(mapload)
+ . = ..()
+ AddComponent(/datum/component/two_handed, \
+ force_unwielded = 10, \
+ force_wielded = 14, \
+ icon_wielded = "[base_icon_state]1", \
+ )
+
+/obj/item/nullrod/bostaff/update_icon_state()
+ icon_state = "[base_icon_state]0"
+ return ..()
+
/obj/item/cane
name = "cane"
desc = "A cane used by a true gentleman. Or a clown."
diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm
index 72c974b00252d..895660fafa44c 100644
--- a/code/game/objects/structures/tables_racks.dm
+++ b/code/game/objects/structures/tables_racks.dm
@@ -316,9 +316,11 @@
return NONE
if(!user.transferItemToLoc(tool, drop_location(), silent = FALSE))
return ITEM_INTERACT_BLOCKING
- //Clamp it so that the icon never moves more than 16 pixels in either direction (thus leaving the table turf)
- tool.pixel_x = clamp(text2num(LAZYACCESS(modifiers, ICON_X)) - 16, -(world.icon_size/2), world.icon_size/2)
- tool.pixel_y = clamp(text2num(LAZYACCESS(modifiers, ICON_Y)) - 16, -(world.icon_size/2), world.icon_size/2)
+ // Items are centered by default, but we move them if click ICON_X and ICON_Y are available
+ if(LAZYACCESS(modifiers, ICON_X) && LAZYACCESS(modifiers, ICON_Y))
+ // Clamp it so that the icon never moves more than 16 pixels in either direction (thus leaving the table turf)
+ tool.pixel_x = clamp(text2num(LAZYACCESS(modifiers, ICON_X)) - 16, -(world.icon_size*0.5), world.icon_size*0.5)
+ tool.pixel_y = clamp(text2num(LAZYACCESS(modifiers, ICON_Y)) - 16, -(world.icon_size*0.5), world.icon_size*0.5)
AfterPutItemOnTable(tool, user)
return ITEM_INTERACT_SUCCESS
diff --git a/code/modules/antagonists/spy/spy_bounty.dm b/code/modules/antagonists/spy/spy_bounty.dm
index 28984ce2272bd..01a1a1baf7b9a 100644
--- a/code/modules/antagonists/spy/spy_bounty.dm
+++ b/code/modules/antagonists/spy/spy_bounty.dm
@@ -186,7 +186,7 @@
var/datum/market_item/stolen_good/new_item = new(thing, item_price)
- return SSblackmarket.markets[/datum/market/blackmarket].add_item(new_item)
+ return SSmarket.markets[/datum/market/blackmarket].add_item(new_item)
/// Steal an item
/datum/spy_bounty/objective_item
diff --git a/code/modules/antagonists/voidwalker/voidwalker_status_effects.dm b/code/modules/antagonists/voidwalker/voidwalker_status_effects.dm
index 6dc9cdc35ca7b..7934e757077af 100644
--- a/code/modules/antagonists/voidwalker/voidwalker_status_effects.dm
+++ b/code/modules/antagonists/voidwalker/voidwalker_status_effects.dm
@@ -21,11 +21,16 @@
/datum/status_effect/planet_allergy
id = "planet_allergy"
duration = INFINITE
- alert_type = /atom/movable/screen/alert/veryhighgravity
+ alert_type = /atom/movable/screen/alert/status_effect/veryhighgravity
/datum/status_effect/planet_allergy/tick()
owner.adjustBruteLoss(1)
+/atom/movable/screen/alert/status_effect/veryhighgravity
+ name = "Crushing Gravity"
+ desc = "You're getting crushed by high gravity, picking up items and movement will be slowed. You'll also accumulate brute damage!"
+ icon_state = "paralysis"
+
/datum/status_effect/void_eatered
duration = 10 SECONDS
remove_on_fullheal = TRUE
diff --git a/code/modules/antagonists/voidwalker/voidwalker_void_eater.dm b/code/modules/antagonists/voidwalker/voidwalker_void_eater.dm
index db638c2b94818..9df3eabab3d21 100644
--- a/code/modules/antagonists/voidwalker/voidwalker_void_eater.dm
+++ b/code/modules/antagonists/voidwalker/voidwalker_void_eater.dm
@@ -31,7 +31,7 @@
AddComponent(/datum/component/temporary_glass_shatterer)
-/obj/item/void_eater/pickup(mob/user)
+/obj/item/void_eater/equipped(mob/user)
. = ..()
RegisterSignal(user, COMSIG_VOIDWALKER_SUCCESFUL_KIDNAP, PROC_REF(refresh))
diff --git a/code/modules/antagonists/wizard/grand_ritual/grand_rune.dm b/code/modules/antagonists/wizard/grand_ritual/grand_rune.dm
index 79364a80a198a..15900a6ac0b0a 100644
--- a/code/modules/antagonists/wizard/grand_ritual/grand_rune.dm
+++ b/code/modules/antagonists/wizard/grand_ritual/grand_rune.dm
@@ -19,7 +19,7 @@
pixel_y = 16
pixel_z = -48
anchored = TRUE
- interaction_flags_atom = INTERACT_ATOM_ATTACK_HAND
+ interaction_flags_atom = INTERACT_ATOM_ATTACK_HAND | INTERACT_ATOM_ATTACK_PAW
resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF
layer = SIGIL_LAYER
/// How many prior grand rituals have been completed?
diff --git a/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer_items.dm b/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer_items.dm
index 95b548998a194..26cb395113519 100644
--- a/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer_items.dm
+++ b/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer_items.dm
@@ -38,3 +38,22 @@
if(uses <= 0)
qdel(src)
return ITEM_INTERACT_SUCCESS
+
+/obj/item/nitrium_crystal
+ desc = "A weird brown crystal, it smokes when broken"
+ name = "nitrium crystal"
+ icon = 'icons/obj/pipes_n_cables/atmos.dmi'
+ icon_state = "nitrium_crystal"
+ var/cloud_size = 1
+
+/obj/item/nitrium_crystal/attack_self(mob/user)
+ . = ..()
+ var/datum/effect_system/fluid_spread/smoke/chem/smoke = new
+ var/turf/location = get_turf(src)
+ create_reagents(5)
+ reagents.add_reagent(/datum/reagent/nitrium_low_metabolization, 3)
+ reagents.add_reagent(/datum/reagent/nitrium_high_metabolization, 2)
+ smoke.attach(location)
+ smoke.set_up(cloud_size, holder = src, location = location, carry = reagents, silent = TRUE)
+ smoke.start()
+ qdel(src)
diff --git a/code/modules/cargo/bounties/assistant.dm b/code/modules/cargo/bounties/assistant.dm
index d4ef4b6a148e0..23e578c2ed2db 100644
--- a/code/modules/cargo/bounties/assistant.dm
+++ b/code/modules/cargo/bounties/assistant.dm
@@ -213,7 +213,7 @@
/datum/bounty/item/assistant/fish
name = "Fish"
description = "We need fish to populate our aquariums with. Fishes that are dead or bought from cargo will only be paid half as much."
- reward = CARGO_CRATE_VALUE * 9
+ reward = CARGO_CRATE_VALUE * 9.5
required_count = 4
wanted_types = list(/obj/item/fish = TRUE, /obj/item/storage/fish_case = TRUE)
///the penalty for shipping dead/bought fish, which can subtract up to half the reward in total.
@@ -249,7 +249,7 @@
///A subtype of the fish bounty that requires fish with a specific fluid type
/datum/bounty/item/assistant/fish/fluid
- reward = CARGO_CRATE_VALUE * 11
+ reward = CARGO_CRATE_VALUE * 12
///The required fluid type of the fish for it to be shipped
var/fluid_type
@@ -261,42 +261,3 @@
/datum/bounty/item/assistant/fish/fluid/can_ship_fish(obj/item/fish/fishie)
return compatible_fluid_type(fishie.required_fluid_type, fluid_type)
-
-///A subtype of the fish bounty that requires specific fish types. The higher their rarity, the better the pay.
-/datum/bounty/item/assistant/fish/specific
- description = "Our prestigious fish collection is currently lacking a few specific species. Fishes that are dead or bought from cargo will only be paid half as much."
- reward = CARGO_CRATE_VALUE * 16
- required_count = 3
- wanted_types = list(/obj/item/storage/fish_case = TRUE)
-
-/datum/bounty/item/assistant/fish/specific/New()
- var/static/list/choosable_fishes
- if(isnull(choosable_fishes))
- choosable_fishes = list()
- for(var/obj/item/fish/prototype as anything in subtypesof(/obj/item/fish))
- if(initial(prototype.experisci_scannable) && initial(prototype.show_in_catalog))
- choosable_fishes += prototype
-
- var/list/fishes_copylist = choosable_fishes.Copy()
- ///Used to calculate the extra reward
- var/total_rarity = 0
- var/list/name_list = list()
- var/num_paths = rand(2,3)
- for(var/i in 1 to num_paths)
- var/obj/item/fish/chosen_path = pick_n_take(fishes_copylist)
- wanted_types[chosen_path] = TRUE
- name_list += initial(chosen_path.name)
- total_rarity += initial(chosen_path.random_case_rarity) / num_paths
- name = english_list(name_list)
-
- switch(total_rarity)
- if(FISH_RARITY_NOPE to FISH_RARITY_GOOD_LUCK_FINDING_THIS)
- reward += CARGO_CRATE_VALUE * 14
- if(FISH_RARITY_GOOD_LUCK_FINDING_THIS to FISH_RARITY_VERY_RARE)
- reward += CARGO_CRATE_VALUE * 6.5
- if(FISH_RARITY_VERY_RARE to FISH_RARITY_RARE)
- reward += CARGO_CRATE_VALUE * 3
- if(FISH_RARITY_RARE to FISH_RARITY_BASIC-1)
- reward += CARGO_CRATE_VALUE * 1
-
- ..()
diff --git a/code/modules/cargo/exports/fish.dm b/code/modules/cargo/exports/fish.dm
new file mode 100644
index 0000000000000..3860dff904b19
--- /dev/null
+++ b/code/modules/cargo/exports/fish.dm
@@ -0,0 +1,13 @@
+/datum/export/fish
+ cost = 30
+ unit_name = "fish"
+ export_types = list(/obj/item/fish)
+
+/datum/export/fish/get_cost(obj/item/fish/fish, apply_elastic)
+ var/elastic_cost = ..()
+ var/elastic_percent = elastic_cost / init_cost
+ var/size_weight_exponentation = (fish.size * fish.weight * 0.01)^0.85
+ var/new_cost = elastic_cost + size_weight_exponentation * elastic_percent
+ if(HAS_TRAIT(fish, TRAIT_FISH_FROM_CASE)) //Avoid printing money by simply ordering fish and sending it back.
+ new_cost *= 0.05
+ return round(new_cost)
diff --git a/code/modules/cargo/goodies.dm b/code/modules/cargo/goodies.dm
index e09c3e2bc958d..4751b45aae89b 100644
--- a/code/modules/cargo/goodies.dm
+++ b/code/modules/cargo/goodies.dm
@@ -311,7 +311,7 @@
/datum/supply_pack/goody/climbing_hook
name = "Climbing Hook Single-Pack"
- desc = "A less cheap imported climbing hook. Absolutely no use outside of planetary stations."
+ desc = "A less cheap imported climbing hook. Absolutely no use outside of multi-floor stations."
cost = PAYCHECK_CREW * 5
contains = list(/obj/item/climbing_hook)
diff --git a/code/modules/cargo/markets/_market.dm b/code/modules/cargo/markets/_market.dm
index 0a93469411cdb..4696d3007a7ae 100644
--- a/code/modules/cargo/markets/_market.dm
+++ b/code/modules/cargo/markets/_market.dm
@@ -6,7 +6,7 @@
var/list/shipping
// Automatic vars, do not touch these.
- /// Items available from this market, populated by SSblackmarket on initialization. Automatically assigned, so don't manually adjust.
+ /// Items available from this market, populated by SSmarket on initialization. Automatically assigned, so don't manually adjust.
var/list/available_items = list()
/// Item categories available from this market, only items which are in these categories can be gotten from this market. Automatically assigned, so don't manually adjust.
var/list/categories = list()
@@ -73,6 +73,20 @@
return FALSE
+/**
+ * A proc that restocks only the EXISTING items of this market.
+ * If you want to selectively restock markets, call SSmarket.restock(market_or_list_of_markets) instead.
+ */
+/datum/market/proc/restock(list/existing_items)
+ for(var/category in available_items)
+ var/category_list = available_items[category]
+ for(var/identifier in category_list)
+ var/datum/market_item/item = category_list[identifier]
+ existing_items |= item.type
+ if(!item.restockable || item.stock >= item.stock_max || !prob(item.availability_prob))
+ continue
+ item.stock += rand(1, item.stock_max - item.stock)
+
/datum/market/blackmarket
name = "Black Market"
shipping = list(
diff --git a/code/modules/cargo/markets/market_item.dm b/code/modules/cargo/markets/market_item.dm
index 5e3ce4efb6c07..d7a4dd4c0eef3 100644
--- a/code/modules/cargo/markets/market_item.dm
+++ b/code/modules/cargo/markets/market_item.dm
@@ -5,7 +5,7 @@
var/desc
/// The category this item belongs to, should be already declared in the market that this item is accessible in.
var/category
- /// "/datum/market"s that this item should be in, used by SSblackmarket on init.
+ /// "/datum/market"s that this item should be in, used by SSmarket on init.
var/list/markets = list(/datum/market/blackmarket)
/// Price for the item, if not set creates a price according to the *_min and *_max vars.
@@ -27,7 +27,7 @@
var/stock_min = 1
/// Maximum amount that there should be of this item in the market if generated randomly.
var/stock_max = 0
- /// Probability for this item to be available. Used by SSblackmarket on init.
+ /// Probability for this item to be available. Used by SSmarket on init.
var/availability_prob
///The identifier for the market item, generated on runtime and used to access them in the market categories.
@@ -36,6 +36,9 @@
///If set, these will override the shipment methods set by the market
var/list/shipping_override
+ /// Can this item be restocked
+ var/restockable = TRUE
+
/datum/market_item/New()
if(isnull(price))
price = rand(price_min, price_max)
@@ -82,7 +85,7 @@
CRASH("Invalid item type for market item [item || "null"]")
/**
- * Buys the item and makes SSblackmarket handle it.
+ * Buys the item and makes SSmarket handle it.
*
* @param uplink The uplink that is buying the item.
* @param buyer The mob that is buying the item.
@@ -102,8 +105,8 @@
// Alright, the item has been purchased.
var/datum/market_purchase/purchase = new(src, uplink, shipping_method, legal_status)
- // SSblackmarket takes care of the shipping.
- if(SSblackmarket.queue_item(purchase))
+ // SSmarket takes care of the shipping.
+ if(SSmarket.queue_item(purchase))
stock--
buyer.log_message("has succesfully purchased [name] using [shipping_method] for shipping.", LOG_ECON)
return TRUE
@@ -139,7 +142,7 @@
/datum/market_purchase/Destroy()
entry = null
uplink = null
- SSblackmarket.queued_purchases -= src
+ SSmarket.queued_purchases -= src
return ..()
/datum/market_purchase/proc/on_instance_del(datum/source)
diff --git a/code/modules/cargo/markets/market_items/hostages.dm b/code/modules/cargo/markets/market_items/hostages.dm
index ed5b1f10a7fcf..702cea907bdeb 100644
--- a/code/modules/cargo/markets/market_items/hostages.dm
+++ b/code/modules/cargo/markets/market_items/hostages.dm
@@ -5,6 +5,7 @@
stock = 1
availability_prob = 100
shipping_override = list(SHIPPING_METHOD_LTSRBT = 0, SHIPPING_METHOD_SUPPLYPOD = 350)
+ restockable = FALSE
/// temporary reference to the 4 in 7 chances of signaler and electropack.
var/obj/item/assembly/signaler/signaler
diff --git a/code/modules/cargo/markets/market_items/stolen_goods.dm b/code/modules/cargo/markets/market_items/stolen_goods.dm
index 02a72f05d26d1..cb1932673e0e3 100644
--- a/code/modules/cargo/markets/market_items/stolen_goods.dm
+++ b/code/modules/cargo/markets/market_items/stolen_goods.dm
@@ -4,6 +4,7 @@
abstract_path = /datum/market_item/stolen_good
stock = 1
availability_prob = 100
+ restockable = FALSE
/datum/market_item/stolen_good/New(atom/movable/thing, thing_price)
..()
diff --git a/code/modules/cargo/markets/market_items/tools.dm b/code/modules/cargo/markets/market_items/tools.dm
index 963d7fbaeb075..0c9969756d30f 100644
--- a/code/modules/cargo/markets/market_items/tools.dm
+++ b/code/modules/cargo/markets/market_items/tools.dm
@@ -11,7 +11,7 @@
stock_min = 2
stock_max = 4
price_min = CARGO_CRATE_VALUE * 2.5
- price_max = CARGO_CRATE_VALUE * 3.75
+ price_max = CARGO_CRATE_VALUE * 3.25
availability_prob = 100
/datum/market_item/tool/caravan_wrench
diff --git a/code/modules/cargo/markets/market_telepad.dm b/code/modules/cargo/markets/market_telepad.dm
index 7c5b509a9421d..799395f30d125 100644
--- a/code/modules/cargo/markets/market_telepad.dm
+++ b/code/modules/cargo/markets/market_telepad.dm
@@ -1,3 +1,5 @@
+#define DEFAULT_RESTOCK_COST 675
+
/obj/item/circuitboard/machine/ltsrbt
name = "LTSRBT (Machine Board)"
icon_state = "bluespacearray"
@@ -13,7 +15,8 @@
name = "Long-To-Short-Range-Bluespace-Transceiver"
desc = "The LTSRBT is a compact teleportation machine for receiving and sending items outside the station and inside the station.\nUsing teleportation frequencies stolen from NT it is near undetectable.\nEssential for any illegal market operations on NT stations.\n"
icon = 'icons/obj/machines/telecomms.dmi'
- icon_state = "exonet_node"
+ icon_state = "exonet_node_idle"
+ base_icon_state = "exonet_node"
circuit = /obj/item/circuitboard/machine/ltsrbt
density = TRUE
@@ -35,18 +38,42 @@
var/datum/market_purchase/transmitting
/// Queue for purchases that the machine should receive and send.
var/list/datum/market_purchase/queue = list()
+ /**
+ * Attacking the machinery with enough credits will restock the markets, allowing for more/better items.
+ * The cost doubles each time this is done.
+ */
+ var/static/restock_cost = DEFAULT_RESTOCK_COST
/obj/machinery/ltsrbt/Initialize(mapload)
. = ..()
- SSblackmarket.telepads += src
+ register_context()
+ SSmarket.telepads += src
/obj/machinery/ltsrbt/Destroy()
- SSblackmarket.telepads -= src
+ SSmarket.telepads -= src
// Bye bye orders.
- if(length(SSblackmarket.telepads))
+ if(length(SSmarket.telepads))
for(var/datum/market_purchase/P in queue)
- SSblackmarket.queue_item(P)
+ SSmarket.queue_item(P)
+ . = ..()
+
+/obj/machinery/ltsrbt/add_context(atom/source, list/context, obj/item/held_item, mob/user)
+ if(held_item && held_item.get_item_credit_value())
+ context[SCREENTIP_CONTEXT_LMB] = "Restock"
+ return CONTEXTUAL_SCREENTIP_SET
+ return NONE
+
+/obj/machinery/ltsrbt/examine(mob/user)
. = ..()
+ if(machine_stat & NOPOWER)
+ . += span_info("A display reads: \"Current market restock price: [EXAMINE_HINT("[restock_cost] cr")]\".")
+
+/obj/machinery/ltsrbt/update_icon_state()
+ . = ..()
+ if(machine_stat & NOPOWER)
+ icon_state = "[base_icon_state]_off"
+ else
+ icon_state = "[base_icon_state][(receiving || length(queue)) ? "" : "_idle"]"
/obj/machinery/ltsrbt/RefreshParts()
. = ..()
@@ -67,6 +94,7 @@
/obj/machinery/ltsrbt/proc/add_to_queue(datum/market_purchase/purchase)
if(!recharge_cooldown && !receiving && !transmitting)
receiving = purchase
+ update_appearance(UPDATE_ICON_STATE)
else
queue += purchase
@@ -80,6 +108,8 @@
if(transmitting == purchase)
transmitting = null
+ update_appearance(UPDATE_ICON_STATE)
+
/obj/machinery/ltsrbt/process(seconds_per_tick)
if(machine_stat & NOPOWER)
return
@@ -113,3 +143,32 @@
if(length(queue))
receiving = pick_n_take(queue)
+
+/obj/machinery/ltsrbt/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
+ var/creds_value = tool.get_item_credit_value()
+ if(!creds_value)
+ return NONE
+
+ . = ITEM_INTERACT_SUCCESS
+
+ if(machine_stat & NOPOWER)
+ return
+
+ if(creds_value < restock_cost)
+ say("Insufficient credits!")
+ playsound(src, 'sound/machines/buzz-sigh.ogg', 40, FALSE)
+ return
+
+ if(istype(tool, /obj/item/holochip))
+ var/obj/item/holochip/chip = tool
+ chip.spend(restock_cost)
+ else
+ qdel(tool)
+ if(creds_value != restock_cost)
+ var/obj/item/holochip/change = new(creds_value - restock_cost)
+ user.put_in_hands(change)
+
+ SSmarket.restock()
+ restock_cost *= 2
+
+#undef DEFAULT_RESTOCK_COST
diff --git a/code/modules/cargo/markets/market_uplink.dm b/code/modules/cargo/markets/market_uplink.dm
index d13f59937b66c..a324a2f0409be 100644
--- a/code/modules/cargo/markets/market_uplink.dm
+++ b/code/modules/cargo/markets/market_uplink.dm
@@ -20,7 +20,7 @@
/obj/item/market_uplink/Initialize(mapload)
. = ..()
- // We don't want to go through this at mapload because the SSblackmarket isn't initialized yet.
+ // We don't want to go through this at mapload because the SSmarket isn't initialized yet.
if(mapload)
return
@@ -30,7 +30,7 @@
/obj/item/market_uplink/proc/update_viewing_category()
if(accessible_markets.len)
viewing_market = accessible_markets[1]
- var/list/categories = SSblackmarket.markets[viewing_market].categories
+ var/list/categories = SSmarket.markets[viewing_market].categories
if(categories?.len)
viewing_category = categories[1]
@@ -45,7 +45,7 @@
/obj/item/market_uplink/ui_data(mob/user)
var/list/data = list()
- var/datum/market/market = viewing_market ? SSblackmarket.markets[viewing_market] : null
+ var/datum/market/market = viewing_market ? SSmarket.markets[viewing_market] : null
var/obj/item/card/id/id_card
if(isliving(user))
var/mob/living/livin = user
@@ -86,11 +86,11 @@
/obj/item/market_uplink/ui_static_data(mob/user)
var/list/data = list()
- data["delivery_method_description"] = SSblackmarket.shipping_method_descriptions
- data["ltsrbt_built"] = SSblackmarket.telepads.len
+ data["delivery_method_description"] = SSmarket.shipping_method_descriptions
+ data["ltsrbt_built"] = SSmarket.telepads.len
data["markets"] = list()
for(var/M in accessible_markets)
- var/datum/market/BM = SSblackmarket.markets[M]
+ var/datum/market/BM = SSmarket.markets[M]
data["markets"] += list(list(
"id" = M,
"name" = BM.name
@@ -107,7 +107,7 @@
return
if(isnull(viewing_market))
return
- if(!(params["category"] in SSblackmarket.markets[viewing_market].categories))
+ if(!(params["category"] in SSmarket.markets[viewing_market].categories))
return
viewing_category = params["category"]
. = TRUE
@@ -120,7 +120,7 @@
viewing_market = market
- var/list/categories = SSblackmarket.markets[viewing_market].categories
+ var/list/categories = SSmarket.markets[viewing_market].categories
if(categories?.len)
viewing_category = categories[1]
else
@@ -142,7 +142,7 @@
if(isnull(selected_item))
buying = FALSE
return
- var/datum/market/market = SSblackmarket.markets[viewing_market]
+ var/datum/market/market = SSmarket.markets[viewing_market]
market.purchase(selected_item, viewing_category, params["method"], src, usr)
buying = FALSE
diff --git a/code/modules/cargo/packs/imports.dm b/code/modules/cargo/packs/imports.dm
index f270b1da11f39..98fc4d650212c 100644
--- a/code/modules/cargo/packs/imports.dm
+++ b/code/modules/cargo/packs/imports.dm
@@ -318,3 +318,20 @@
)
crate_name = "floortile camouflauge crate"
crate_type = /obj/structure/closet/crate/secure/weapon
+
+/**
+ * The Long To Short Range Bluespace Teleporter, used to deliver (black) market purchases more effiiently
+ * It can also be used to restock it, if you hit it with enough credits.
+ */
+/datum/supply_pack/imports/blackmarket_telepad
+ name = "Black Market LTSRBT"
+ desc = "Need a faster and better way of transporting your illegal goods from and to the \
+ station? Fear not, the Long-To-Short-Range-Bluespace-Transceiver (LTSRBT for short) \
+ is here to help. Contains a LTSRBT circuit, two bluespace crystals, and one ansible."
+ cost = CARGO_CRATE_VALUE * 10
+ contraband = TRUE
+ contains = list(
+ /obj/item/circuitboard/machine/ltsrbt,
+ /obj/item/stack/ore/bluespace_crystal/artificial = 2,
+ /obj/item/stock_parts/subspace/ansible,
+ )
diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm
index e3f74e47c497d..ac3d6af179622 100644
--- a/code/modules/client/client_procs.dm
+++ b/code/modules/client/client_procs.dm
@@ -1206,6 +1206,7 @@ GLOBAL_LIST_INIT(blacklisted_builds, list(
winset(usr, "mainwindow", "can-resize=true")
winset(usr, "mainwindow", "is-maximized=false")
winset(usr, "mainwindow", "on-size=attempt_auto_fit_viewport")
+ attempt_auto_fit_viewport()
/client/verb/toggle_status_bar()
set name = "Toggle Status Bar"
diff --git a/code/modules/client/preferences/sounds.dm b/code/modules/client/preferences/sounds.dm
index f1778405665ad..4a0298132c268 100644
--- a/code/modules/client/preferences/sounds.dm
+++ b/code/modules/client/preferences/sounds.dm
@@ -116,3 +116,9 @@
category = PREFERENCE_CATEGORY_GAME_PREFERENCES
savefile_key = "sound_elevator"
savefile_identifier = PREFERENCE_PLAYER
+
+/// Controls hearing radio noise
+/datum/preference/toggle/radio_noise
+ category = PREFERENCE_CATEGORY_GAME_PREFERENCES
+ savefile_key = "sound_radio_noise"
+ savefile_identifier = PREFERENCE_PLAYER
diff --git a/code/modules/clothing/head/hat.dm b/code/modules/clothing/head/hat.dm
index 13285257c6553..4d19d2b3658a2 100644
--- a/code/modules/clothing/head/hat.dm
+++ b/code/modules/clothing/head/hat.dm
@@ -210,6 +210,19 @@
name = "rice hat"
desc = "Welcome to the rice fields, motherfucker."
icon_state = "rice_hat"
+ var/reversed = FALSE
+ ///Sprite while worn normaly.
+ var/frontsprite = "rice_hat"
+ ///Sprite while worn in reverse
+ var/reversesprite = "rice_hat_kim"
+
+/obj/item/clothing/head/costume/rice_hat/attack_self(mob/user)
+ if(reversed)
+ icon_state = frontsprite
+ to_chat(user, span_notice("You raise the hat."))
+ else
+ icon_state = reversesprite
+ to_chat(user, span_notice("You lower the hat."))
/obj/item/clothing/head/costume/lizard
name = "lizardskin cloche hat"
diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm
index 6892133451038..76c230ca504d2 100644
--- a/code/modules/clothing/head/helmet.dm
+++ b/code/modules/clothing/head/helmet.dm
@@ -568,3 +568,106 @@
fire = 50
acid = 50
wound = 30
+
+/obj/item/clothing/head/helmet/durability/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK, damage_type = BRUTE)
+ take_damage(1, BRUTE, 0, 0)
+
+/obj/item/clothing/head/helmet/durability/watermelon
+ name = "Watermelon Helmet"
+ desc = "A helmet cut out from a watermelon. Might take a few hits, but don't expect it whitstand much."
+ icon_state = "watermelon"
+ inhand_icon_state = "watermelon"
+ flags_inv = HIDEEARS
+ dog_fashion = /datum/dog_fashion/head/watermelon
+ armor_type = /datum/armor/helmet_watermelon
+ max_integrity = 15
+
+/obj/item/clothing/head/helmet/durability/watermelon/fire_resist
+ resistance_flags = FIRE_PROOF
+ armor_type = /datum/armor/helmet_watermelon_fr
+
+/datum/armor/helmet_watermelon
+ melee = 15
+ bullet = 10
+ energy = 10
+ bomb = 10
+ fire = 0
+ acid = 25
+ wound = 5
+
+/datum/armor/helmet_watermelon_fr
+ melee = 15
+ bullet = 10
+ energy = 10
+ bomb = 10
+ fire = 15
+ acid = 30
+ wound = 5
+
+/obj/item/clothing/head/helmet/durability/holymelon
+ name = "Holymelon Helmet"
+ desc = "A helmet from a hollowed out holymelon. Might take a few hits, but don't expect it whitstand much."
+ icon_state = "holymelon"
+ inhand_icon_state = "holymelon"
+ flags_inv = HIDEEARS
+ dog_fashion = /datum/dog_fashion/head/holymelon
+ armor_type = /datum/armor/helmet_watermelon
+ max_integrity = 15
+ var/decayed = FALSE
+
+/obj/item/clothing/head/helmet/durability/holymelon/fire_resist
+ resistance_flags = FIRE_PROOF
+ armor_type = /datum/armor/helmet_watermelon_fr
+
+/obj/item/clothing/head/helmet/durability/holymelon/Initialize(mapload)
+ . = ..()
+ if(decayed)
+ decay()
+ return
+
+ AddComponent(
+ /datum/component/anti_magic, \
+ antimagic_flags = MAGIC_RESISTANCE_HOLY, \
+ inventory_flags = ITEM_SLOT_OCLOTHING, \
+ charges = 1, \
+ drain_antimagic = CALLBACK(src, PROC_REF(drain_antimagic)), \
+ expiration = CALLBACK(src, PROC_REF(decay)) \
+ )
+
+/obj/item/clothing/head/helmet/durability/holymelon/proc/drain_antimagic(mob/user)
+ to_chat(user, span_warning("[src] looses a bit of its shimmer and glossiness..."))
+
+/obj/item/clothing/head/helmet/durability/holymelon/proc/decay()
+ take_damage(8, BRUTE, 0, 0)
+
+/obj/item/clothing/head/helmet/durability/barrelmelon
+ name = "Barrelmelon Helmet"
+ desc = "A helmet from hollowed out barrelmelon. As sturdy as if made from actual wood, though its rigid structure makes it break up quicker."
+ icon_state = "barrelmelon"
+ inhand_icon_state = "barrelmelon"
+ flags_inv = HIDEEARS
+ dog_fashion = /datum/dog_fashion/head/barrelmelon
+ armor_type = /datum/armor/helmet_barrelmelon
+ max_integrity = 10
+
+/obj/item/clothing/head/helmet/durability/barrelmelon/fire_resist
+ resistance_flags = FIRE_PROOF
+ armor_type = /datum/armor/helmet_barrelmelon_fr
+
+/datum/armor/helmet_barrelmelon
+ melee = 25
+ bullet = 20
+ energy = 15
+ bomb = 10
+ fire = 0
+ acid = 35
+ wound = 10
+
+/datum/armor/helmet_barrelmelon_fr
+ melee = 25
+ bullet = 20
+ energy = 15
+ bomb = 10
+ fire = 20
+ acid = 40
+ wound = 10
diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm
index 5036b939b8e4a..3c7fa506b208d 100644
--- a/code/modules/clothing/suits/armor.dm
+++ b/code/modules/clothing/suits/armor.dm
@@ -714,3 +714,113 @@
fire = 50
acid = 50
wound = 30
+
+/obj/item/clothing/suit/armor/durability/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK, damage_type = BRUTE)
+ take_damage(1, BRUTE, 0, 0)
+
+/obj/item/clothing/suit/armor/durability/watermelon
+ name = "watermelon"
+ desc = "An armour, made from watermelons. Propably won't take too many hits, but at least it looks serious... As serious as worn watermelon can be."
+ icon_state = "watermelon"
+ inhand_icon_state = null
+ body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
+ armor_type = /datum/armor/watermelon
+ strip_delay = 60
+ equip_delay_other = 40
+ clothing_traits = list(TRAIT_BRAWLING_KNOCKDOWN_BLOCKED)
+ max_integrity = 15
+
+/obj/item/clothing/suit/armor/durability/watermelon/fire_resist
+ resistance_flags = FIRE_PROOF
+ armor_type = /datum/armor/watermelon_fr
+
+/datum/armor/watermelon
+ melee = 15
+ bullet = 10
+ energy = 10
+ bomb = 10
+ fire = 0
+ acid = 25
+ wound = 5
+
+/datum/armor/watermelon_fr
+ melee = 15
+ bullet = 10
+ energy = 10
+ bomb = 10
+ fire = 15
+ acid = 30
+ wound = 5
+
+/obj/item/clothing/suit/armor/durability/holymelon
+ name = "holymelon"
+ desc = "An armour, made from holymelons. Inspires you to go on some sort of a crusade... Perhaps spreading spinach to children?"
+ icon_state = "holymelon"
+ inhand_icon_state = null
+ body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
+ armor_type = /datum/armor/watermelon
+ strip_delay = 60
+ equip_delay_other = 40
+ clothing_traits = list(TRAIT_BRAWLING_KNOCKDOWN_BLOCKED)
+ max_integrity = 15
+ var/decayed = FALSE
+
+/obj/item/clothing/suit/armor/durability/holymelon/fire_resist
+ resistance_flags = FIRE_PROOF
+ armor_type = /datum/armor/watermelon_fr
+
+/obj/item/clothing/suit/armor/durability/holymelon/Initialize(mapload)
+ . = ..()
+ if(decayed)
+ decay()
+ return
+
+ AddComponent(
+ /datum/component/anti_magic, \
+ antimagic_flags = MAGIC_RESISTANCE_HOLY, \
+ inventory_flags = ITEM_SLOT_OCLOTHING, \
+ charges = 1, \
+ drain_antimagic = CALLBACK(src, PROC_REF(drain_antimagic)), \
+ expiration = CALLBACK(src, PROC_REF(decay)) \
+ )
+
+/obj/item/clothing/suit/armor/durability/holymelon/proc/drain_antimagic(mob/user)
+ to_chat(user, span_warning("[src] looses a bit of its shimmer and glossiness..."))
+
+/obj/item/clothing/suit/armor/durability/holymelon/proc/decay()
+ take_damage(8, BRUTE, 0, 0)
+
+
+/obj/item/clothing/suit/armor/durability/barrelmelon
+ name = "barrelmelon"
+ desc = "An armour, made from barrelmelons. Reeks of ale, inspiring to courageous deeds. Or, perhaps, a bar brawl."
+ icon_state = "barrelmelon"
+ inhand_icon_state = null
+ body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
+ armor_type = /datum/armor/barrelmelon
+ strip_delay = 60
+ equip_delay_other = 40
+ clothing_traits = list(TRAIT_BRAWLING_KNOCKDOWN_BLOCKED)
+ max_integrity = 10
+
+/obj/item/clothing/suit/armor/durability/barrelmelon/fire_resist
+ resistance_flags = FIRE_PROOF
+ armor_type = /datum/armor/barrelmelon_fr
+
+/datum/armor/barrelmelon
+ melee = 25
+ bullet = 20
+ energy = 15
+ bomb = 10
+ fire = 0
+ acid = 35
+ wound = 10
+
+/datum/armor/barrelmelon_fr
+ melee = 25
+ bullet = 20
+ energy = 15
+ bomb = 10
+ fire = 20
+ acid = 40
+ wound = 10
diff --git a/code/modules/clothing/suits/wiz_robe.dm b/code/modules/clothing/suits/wiz_robe.dm
index eb1ccb3c51092..38bb028fa1edd 100644
--- a/code/modules/clothing/suits/wiz_robe.dm
+++ b/code/modules/clothing/suits/wiz_robe.dm
@@ -49,6 +49,17 @@
resistance_flags = FLAMMABLE
dog_fashion = /datum/dog_fashion/head/blue_wizard
+/obj/item/clothing/head/wizard/chanterelle
+ name = "chanterelle hat"
+ desc = "An oversized chanterelle with hollow out space to fit a head in. Kinda looks like wizard's hat."
+ icon_state = "chanterelle"
+ inhand_icon_state = "chanterellehat"
+ armor_type = /datum/armor/none
+ resistance_flags = FLAMMABLE
+
+/obj/item/clothing/head/wizard/chanterelle/fr
+ resistance_flags = FIRE_PROOF
+
/obj/item/clothing/head/wizard/marisa
name = "witch hat"
desc = "Strange-looking hat-wear. Makes you want to cast fireballs."
@@ -205,6 +216,48 @@
actions_types = list(/datum/action/item_action/stickmen)
+/obj/item/clothing/suit/wizrobe/durathread
+ name = "durathread robe"
+ desc = "A rather dull durathread robe; not quite as protective as a proper piece of armour, but much stylish."
+ icon_state = "durathread-fake"
+ inhand_icon_state = null
+ armor_type = /datum/armor/robe_durathread
+
+/datum/armor/robe_durathread
+ melee = 15
+ bullet = 5
+ laser = 25
+ energy = 30
+ bomb = 10
+ fire = 30
+ acid = 40
+
+/obj/item/clothing/suit/wizrobe/durathread/fire
+ name = "pyromancer robe"
+ desc = "A rather dull durathread robe; not quite as protective as an woven armour, but much stylish."
+ icon_state = "durathread-fire"
+
+/obj/item/clothing/suit/wizrobe/durathread/ice
+ name = "pyromancer robe"
+ desc = "A rather dull durathread robe; not quite as protective as an woven armour, but much stylish."
+ icon_state = "durathread-ice"
+
+/obj/item/clothing/suit/wizrobe/durathread/electric
+ name = "electromancer robe"
+ desc = "Doesn't actually conduit or isolate from electricity. Though it does have some durability on account of being made from durathread."
+ icon_state = "durathread-electric"
+
+/obj/item/clothing/suit/wizrobe/durathread/earth
+ name = "geomancer robe"
+ desc = "A rather dull durathread robe; not quite as protective as an woven armour, but much stylish."
+ icon_state = "durathread-earth"
+
+/obj/item/clothing/suit/wizrobe/durathread/necro
+ name = "necromancer robe"
+ desc = "A rather dull durathread robe; not quite as protective as an woven armour, but much stylish."
+ icon_state = "durathread-necro"
+
+
/obj/item/clothing/suit/wizrobe/paper/ui_action_click(mob/user, action)
stickmen()
diff --git a/code/modules/events/disease_outbreak.dm b/code/modules/events/disease_outbreak.dm
index 8fcc05f345bfc..3856bf550b4a3 100644
--- a/code/modules/events/disease_outbreak.dm
+++ b/code/modules/events/disease_outbreak.dm
@@ -102,7 +102,7 @@
var/list/afflicted = list()
/datum/round_event/disease_outbreak/announce(fake)
- if(isnull(illness_type))
+ if(!illness_type)
var/list/virus_candidates = list(
/datum/disease/anxiety,
/datum/disease/beesease,
diff --git a/code/modules/events/supermatter_surge.dm b/code/modules/events/supermatter_surge.dm
index 6c790c84f8d7e..c7fb6f969d82b 100644
--- a/code/modules/events/supermatter_surge.dm
+++ b/code/modules/events/supermatter_surge.dm
@@ -91,7 +91,8 @@
end_when = rand(SURGE_DURATION_MIN, SURGE_DURATION_MAX)
/datum/round_event/supermatter_surge/announce(fake)
- priority_announce("The Crystal Integrity Monitoring System has detected unusual atmospheric properties in the supermatter chamber, energy output from the supermatter crystal has increased significantly. Engineering intervention is required to stabilize the engine.", "Class [surge_class] Supermatter Surge Alert", 'sound/machines/engine_alert3.ogg')
+ var/class_to_announce = fake ? pick(1, 2, 3, 4) : surge_class
+ priority_announce("The Crystal Integrity Monitoring System has detected unusual atmospheric properties in the supermatter chamber, energy output from the supermatter crystal has increased significantly. Engineering intervention is required to stabilize the engine.", "Class [class_to_announce] Supermatter Surge Alert", 'sound/machines/engine_alert3.ogg')
/datum/round_event/supermatter_surge/start()
engine.bullet_energy = surge_class + SURGE_BULLET_ENERGY_ADDITION
@@ -99,7 +100,6 @@
sm_gas.heat_power_generation = (surge_class * SURGE_POWER_GENERATION_MODIFIER) - 1
sm_gas.heat_modifier = (surge_class * SURGE_HEAT_MODIFIER) - 1
-
/datum/round_event/supermatter_surge/end()
engine.bullet_energy = initial(engine.bullet_energy)
sm_gas.powerloss_inhibition = initial(sm_gas.powerloss_inhibition)
diff --git a/code/modules/fishing/fish/fish_evolution.dm b/code/modules/fishing/fish/fish_evolution.dm
index c04ef2c30796d..e6e2f1d9570ac 100644
--- a/code/modules/fishing/fish/fish_evolution.dm
+++ b/code/modules/fishing/fish/fish_evolution.dm
@@ -88,7 +88,7 @@ GLOBAL_LIST_INIT(fish_evolutions, init_subtypes_w_path_keys(/datum/fish_evolutio
conditions_note = "The fish (and its mate) need to be unusually big both in size and weight."
/datum/fish_evolution/mastodon/check_conditions(obj/item/fish/source, obj/item/fish/mate, obj/structure/aquarium/aquarium)
- if((source.size < 144 || source.weight < 4000) || (mate && (mate.size < 144 || mate.weight < 4000)))
+ if((source.size < 120 || source.weight < 3000) || (mate && (mate.size < 120 || mate.weight < 3000)))
return FALSE
return ..()
diff --git a/code/modules/fishing/fish/fish_types.dm b/code/modules/fishing/fish/fish_types.dm
index 0dbcb3e97ecd9..91c7bba5f3d9e 100644
--- a/code/modules/fishing/fish/fish_types.dm
+++ b/code/modules/fishing/fish/fish_types.dm
@@ -402,7 +402,7 @@
sprite_height = 5
stable_population = 12
average_size = 110
- average_weight = 10000
+ average_weight = 6000
random_case_rarity = FISH_RARITY_GOOD_LUCK_FINDING_THIS
required_temperature_min = MIN_AQUARIUM_TEMP+10
required_temperature_max = MIN_AQUARIUM_TEMP+30
diff --git a/code/modules/food_and_drinks/machinery/processor.dm b/code/modules/food_and_drinks/machinery/processor.dm
index 21d49808beda1..383a7c34e2756 100644
--- a/code/modules/food_and_drinks/machinery/processor.dm
+++ b/code/modules/food_and_drinks/machinery/processor.dm
@@ -159,7 +159,9 @@
var/duration = (total_time / rating_speed)
INVOKE_ASYNC(src, TYPE_PROC_REF(/atom, Shake), 1, 0, duration)
- sleep(duration)
+ addtimer(CALLBACK(src, PROC_REF(complete_processing)), duration)
+
+/obj/machinery/processor/proc/complete_processing()
for(var/atom/movable/content_item in processor_contents)
var/datum/food_processor_process/recipe = PROCESSOR_SELECT_RECIPE(content_item)
if (!recipe)
diff --git a/code/modules/hydroponics/grown/melon.dm b/code/modules/hydroponics/grown/melon.dm
index 0e59231141fc4..5dbb70135974f 100644
--- a/code/modules/hydroponics/grown/melon.dm
+++ b/code/modules/hydroponics/grown/melon.dm
@@ -27,6 +27,7 @@
name = "watermelon"
desc = "It's full of watery goodness."
icon_state = "watermelon"
+ inhand_icon_state = "watermelon"
bite_consumption_mod = 2
w_class = WEIGHT_CLASS_NORMAL
foodtypes = FRUIT
@@ -39,6 +40,38 @@
/obj/item/food/grown/watermelon/make_dryable()
return //No drying
+/obj/item/food/grown/watermelon/attackby(obj/item/I, mob/user, params)
+ if(!istype(I, /obj/item/kitchen/spoon))
+ return ..()
+
+ var/melon_pulp_count = 1
+ if(seed)
+ melon_pulp_count += round(seed.potency / 25)
+
+ user.balloon_alert(user, "scooped out [melon_pulp_count] pulp(s)")
+ for(var/i in 1 to melon_pulp_count)
+ new /obj/item/food/watermelonmush(user.loc)
+
+ /// The piece of armour melon turns into; either chetsplate or helmet
+ var/obj/item/clothing/melon_armour
+ /// Chance for the armour to be a chestplate instead of the helmet
+ var/melon_chestplate_chance = (max(0, seed.potency - 50) / 50)
+ if (prob(melon_chestplate_chance))
+ if(seed.resistance_flags & FIRE_PROOF)
+ melon_armour = new /obj/item/clothing/suit/armor/durability/watermelon/fire_resist
+ else
+ melon_armour = new /obj/item/clothing/suit/armor/durability/watermelon
+ to_chat(user, span_notice("You hollow the melon into a helmet with [I]."))
+ else
+ if(seed.resistance_flags & FIRE_PROOF)
+ melon_armour = new /obj/item/clothing/head/helmet/durability/watermelon/fire_resist
+ else
+ melon_armour = new /obj/item/clothing/head/helmet/durability/watermelon
+ to_chat(user, span_notice("You hollow the melon into a chestplate with [I]."))
+ remove_item_from_storage(user)
+ qdel(src)
+ user.put_in_hands(melon_armour)
+
// Holymelon
/obj/item/seeds/watermelon/holy
name = "pack of holymelon seeds"
@@ -66,6 +99,9 @@
wine_power = 70 //Water to wine, baby.
wine_flavor = "divinity"
+/obj/item/food/grown/holymelon/make_processable()
+ AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/holymelonslice, 5, 20, screentip_verb = "Slice")
+
/obj/item/food/grown/holymelon/make_dryable()
return //No drying
@@ -73,6 +109,39 @@
. = ..()
AddComponent(/datum/component/edible, check_liked = CALLBACK(src, PROC_REF(check_holyness)))
+
+/obj/item/food/grown/holymelon/attackby(obj/item/I, mob/user, params)
+ if(!istype(I, /obj/item/kitchen/spoon))
+ return ..()
+
+ var/holymelon_pulp_count = 1
+ if(seed)
+ holymelon_pulp_count += round(seed.potency / 25)
+
+ user.balloon_alert(user, "scooped out [holymelon_pulp_count] pulp(s)")
+ for(var/i in 1 to holymelon_pulp_count)
+ new /obj/item/food/holymelonmush(user.loc)
+
+ /// The piece of armour holymelon turns into; either chetsplate or helmet
+ var/obj/item/clothing/holymelon_armour
+ /// Chance for the armour to be a chestplate instead of the helmet
+ var/holymelon_chestplate_chance = (max(0, seed.potency - 50) / 50)
+ if (prob(holymelon_chestplate_chance))
+ if(seed.resistance_flags & FIRE_PROOF)
+ holymelon_armour = new /obj/item/clothing/suit/armor/durability/holymelon/fire_resist
+ else
+ holymelon_armour = new /obj/item/clothing/suit/armor/durability/holymelon
+ to_chat(user, span_notice("You hollow the holymelon into a helmet with [I]."))
+ else
+ if(seed.resistance_flags & FIRE_PROOF)
+ holymelon_armour = new /obj/item/clothing/head/helmet/durability/holymelon/fire_resist
+ else
+ holymelon_armour = new /obj/item/clothing/head/helmet/durability/holymelon
+ to_chat(user, span_notice("You hollow the holymelon into a chestplate with [I]."))
+ remove_item_from_storage(user)
+ qdel(src)
+ user.put_in_hands(holymelon_armour)
+
/*
* Callback to be used with the edible component.
* Checks whether or not the person eating the holymelon
@@ -108,4 +177,41 @@
name = "barrelmelon"
desc = "The nutriments within this melon have been compressed and fermented into rich alcohol."
icon_state = "barrelmelon"
+ inhand_icon_state = "barrelmelon"
distill_reagent = /datum/reagent/medicine/antihol //You can call it a integer overflow.
+
+/obj/item/food/grown/barrelmelon/make_processable()
+ AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/barrelmelonslice, 5, 20, screentip_verb = "Chop")
+
+/obj/item/food/grown/barrelmelon/attackby(obj/item/I, mob/user, params)
+ if(!istype(I, /obj/item/kitchen/spoon))
+ return ..()
+
+ var/barrelmelon_pulp_count = 1
+ if(seed)
+ barrelmelon_pulp_count += round(seed.potency / 25)
+
+ user.balloon_alert(user, "scooped out [barrelmelon_pulp_count] pulp(s)")
+ for(var/i in 1 to barrelmelon_pulp_count)
+ new /obj/item/food/barrelmelonmush(user.loc)
+
+ /// The piece of armour barrelmelon turns into; either chetsplate or helmet
+ var/obj/item/clothing/barrelmelon_armour
+ /// Chance for the armour to be a chestplate instead of the helmet
+ var/barrelmelon_chestplate_chance = (max(0, seed.potency - 50) / 50)
+ if (prob(barrelmelon_chestplate_chance))
+ if(seed.resistance_flags & FIRE_PROOF)
+ barrelmelon_armour = new /obj/item/clothing/suit/armor/durability/barrelmelon/fire_resist
+ else
+ barrelmelon_armour = new /obj/item/clothing/suit/armor/durability/barrelmelon
+ to_chat(user, span_notice("You hollow the barrelmelon into a helmet with [I]."))
+ else
+ if(seed.resistance_flags & FIRE_PROOF)
+ barrelmelon_armour = new /obj/item/clothing/head/helmet/durability/barrelmelon/fire_resist
+ else
+ barrelmelon_armour = new /obj/item/clothing/head/helmet/durability/barrelmelon
+ to_chat(user, span_notice("You hollow the barrelmelon into a chestplate with [I]."))
+
+ remove_item_from_storage(user)
+ qdel(src)
+ user.put_in_hands(barrelmelon_armour)
diff --git a/code/modules/hydroponics/grown/mushrooms.dm b/code/modules/hydroponics/grown/mushrooms.dm
index bfc50f0c483b3..c72ce44ef9d6e 100644
--- a/code/modules/hydroponics/grown/mushrooms.dm
+++ b/code/modules/hydroponics/grown/mushrooms.dm
@@ -197,6 +197,20 @@
desc = "Cantharellus Cibarius: These jolly yellow little shrooms sure look tasty!"
icon_state = "chanterelle"
+/obj/item/food/grown/mushroom/chanterelle/attackby(obj/item/I, mob/user, params)
+ if(!istype(I, /obj/item/kitchen/spoon))
+ return ..()
+ if(seed.potency < 95)
+ return ..()
+
+ to_chat(user, span_notice("You hollow up the chanterelle with [I]."))
+ remove_item_from_storage(user)
+ qdel(src)
+ if(seed.resistance_flags & FIRE_PROOF)
+ user.put_in_hands(new /obj/item/clothing/head/wizard/chanterelle/fr())
+ else
+ user.put_in_hands(new /obj/item/clothing/head/wizard/chanterelle())
+
//Jupiter Cup
/obj/item/seeds/chanter/jupitercup
name = "pack of jupiter cup mycelium"
diff --git a/code/modules/hydroponics/grown/root.dm b/code/modules/hydroponics/grown/root.dm
index c272b1e448462..128a246d0ba92 100644
--- a/code/modules/hydroponics/grown/root.dm
+++ b/code/modules/hydroponics/grown/root.dm
@@ -12,7 +12,7 @@
instability = 15
growthstages = 3
growing_icon = 'icons/obj/service/hydroponics/growing_vegetables.dmi'
- mutatelist = list(/obj/item/seeds/carrot/parsnip)
+ mutatelist = list(/obj/item/seeds/carrot/parsnip, /obj/item/seeds/carrot/cahnroot)
reagents_add = list(/datum/reagent/medicine/oculine = 0.1, /datum/reagent/consumable/nutriment/vitamin = 0.04, /datum/reagent/consumable/nutriment = 0.05)
/obj/item/food/grown/carrot
@@ -26,21 +26,23 @@
wine_power = 30
/obj/item/food/grown/carrot/attackby(obj/item/I, mob/user, params)
- if(I.get_sharpness())
- var/carrot_blade
- var/carrot_sword_chance = (max(0, seed.potency - 50) / 50)
- if (prob(carrot_sword_chance))
- carrot_blade = new /obj/item/claymore/carrot
- to_chat(user, span_notice("You sharpen the carrot into a sword with [I]."))
- else
- carrot_blade = new /obj/item/knife/shiv/carrot
- to_chat(user, span_notice("You sharpen the carrot into a shiv with [I]."))
- remove_item_from_storage(user)
- qdel(src)
- user.put_in_hands(carrot_blade)
- else
+ if(!I.get_sharpness())
return ..()
+ /// The blade carrot will turn into once sharpened
+ var/obj/item/carrot_blade
+ /// Chance for it to become a sword rather than a shiv
+ var/carrot_sword_chance = (max(0, seed.potency - 50) / 50)
+ if (prob(carrot_sword_chance))
+ carrot_blade = new /obj/item/claymore/carrot
+ to_chat(user, span_notice("You sharpen the carrot into a sword with [I]."))
+ else
+ carrot_blade = new /obj/item/knife/shiv/carrot
+ to_chat(user, span_notice("You sharpen the carrot into a shiv with [I]."))
+ remove_item_from_storage(user)
+ qdel(src)
+ user.put_in_hands(carrot_blade)
+
// Parsnip
/obj/item/seeds/carrot/parsnip
name = "pack of parsnip seeds"
@@ -62,6 +64,69 @@
juice_typepath = /datum/reagent/consumable/parsnipjuice
wine_power = 35
+/obj/item/food/grown/parsnip/attackby(obj/item/I, mob/user, params)
+ if(!I.get_sharpness())
+ return ..()
+
+ /// The blade parsnip will turn into once sharpened
+ var/obj/item/parsnip_blade
+ /// Chance for it to become a sabre rather than a shiv
+ var/parsnip_sabre_chance = (max(0, seed.potency - 50) / 50)
+ if (prob(parsnip_sabre_chance))
+ parsnip_blade = new /obj/item/melee/parsnip_sabre
+ to_chat(user, span_notice("You sharpen the parsnip into a sabre with [I]."))
+ else
+ parsnip_blade = new /obj/item/knife/shiv/parsnip
+ to_chat(user, span_notice("You sharpen the parsnip into a shiv with [I]."))
+ remove_item_from_storage(user)
+ qdel(src)
+ user.put_in_hands(parsnip_blade)
+
+
+// Cahn'root
+/obj/item/seeds/carrot/cahnroot
+ name = "pack of cahn'root seeds"
+ desc = "These seeds grow into cahn'roots."
+ icon_state = "seed-cahn'root"
+ species = "cahn'root"
+ plantname = "Cahn'root"
+ product = /obj/item/food/grown/cahnroot
+ genes = list(/datum/plant_gene/trait/plant_type/weed_hardy)
+ endurance = 50
+ instability = 10
+ icon_dead = "cahn'root-dead"
+ mutatelist = null
+ reagents_add = list(/datum/reagent/consumable/nutriment/vitamin = 0.05, /datum/reagent/consumable/nutriment = 0.05, /datum/reagent/cellulose = 0.01, /datum/reagent/consumable/sugar = 0.01)
+ rarity = 10
+ graft_gene = /datum/plant_gene/trait/plant_type/weed_hardy
+
+/obj/item/food/grown/cahnroot
+ seed = /obj/item/seeds/carrot/cahnroot
+ name = "cahn'root"
+ desc = "Heavily modified version of terran carrot, originally made to survive the scarciest of environments by an enterprising scientist of Moth Flotilla, Cahn'Mang."
+ icon_state = "cahn'root"
+ foodtypes = VEGETABLES
+ juice_typepath = null
+ tastes = list("sweet dirt" = 1)
+ distill_reagent = /datum/reagent/consumable/rootbeer
+
+/obj/item/food/grown/cahnroot/attackby(obj/item/I, mob/user, params)
+ if(!I.get_sharpness())
+ return ..()
+
+ /// The blade cahn'root will turn into once sharpened
+ var/obj/item/knife/root_blade
+ /// Chance for it to become a dagger rather than a shiv
+ var/root_dagger_chance = (max(0, seed.potency - 25) / 50)
+ if (prob(root_dagger_chance))
+ root_blade = new /obj/item/knife/combat/root
+ to_chat(user, span_notice("You sharpen the cahn'root into a dagger with [I]."))
+ else
+ root_blade = new /obj/item/knife/shiv/root
+ to_chat(user, span_notice("You sharpen the cahn'root into a shiv with [I]."))
+ remove_item_from_storage(user)
+ qdel(src)
+ user.put_in_hands(root_blade)
// White-Beet
/obj/item/seeds/whitebeet
diff --git a/code/modules/jobs/job_types/chaplain/chaplain_nullrod.dm b/code/modules/jobs/job_types/chaplain/chaplain_nullrod.dm
index df658d71dddc2..7cc067ed0a2d6 100644
--- a/code/modules/jobs/job_types/chaplain/chaplain_nullrod.dm
+++ b/code/modules/jobs/job_types/chaplain/chaplain_nullrod.dm
@@ -564,7 +564,7 @@
/obj/item/nullrod/bostaff
name = "monk's staff"
desc = "A long, tall staff made of polished wood. Traditionally used in ancient old-Earth martial arts, it is now used to harass the clown."
- force = 15
+ force = 14
block_chance = 40
block_sound = 'sound/weapons/genhit.ogg'
slot_flags = ITEM_SLOT_BACK
@@ -578,7 +578,20 @@
worn_icon_state = "bostaff0"
lefthand_file = 'icons/mob/inhands/weapons/staves_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/staves_righthand.dmi'
- menu_description = "A staff which provides a medium-low chance of blocking incoming melee attacks and deals a little less damage. Can be worn on the back."
+ menu_description = "A staff which provides a medium-low chance of blocking incoming melee attacks and deals less damage, unless dual-wielded. Can be worn on the back."
+
+/obj/item/nullrod/bostaff/Initialize(mapload)
+ . = ..()
+ AddComponent(/datum/component/two_handed, \
+ force_unwielded = 14, \
+ force_wielded = 18, \
+ icon_wielded = "[base_icon_state]1", \
+ )
+
+/obj/item/nullrod/bostaff/update_icon_state()
+ icon_state = "[base_icon_state]0"
+ return ..()
+
// Arrhythmic Knife - Lets your walk without rhythm by varying your walk speed. Can't be put away.
diff --git a/code/modules/mafia/roles/roles.dm b/code/modules/mafia/roles/roles.dm
index ab1a1cc0e454b..4cfd7662d843e 100644
--- a/code/modules/mafia/roles/roles.dm
+++ b/code/modules/mafia/roles/roles.dm
@@ -189,6 +189,6 @@
team_span = "comradio"
the = FALSE
result += span_notice("The [span_bold("[name]")] is aligned with [the ? "the " : ""][team_desc]")
- result += "\"[desc]\""
+ result += "\"[initial(desc)]\""
result += span_notice("[name] wins when they [win_condition]")
to_chat(clueless, result.Join(""))
diff --git a/code/modules/mob/living/carbon/human/_species.dm b/code/modules/mob/living/carbon/human/_species.dm
index 1e514ad13cedb..bb3bf8f5c36b9 100644
--- a/code/modules/mob/living/carbon/human/_species.dm
+++ b/code/modules/mob/living/carbon/human/_species.dm
@@ -744,7 +744,7 @@ GLOBAL_LIST_EMPTY(features_by_species)
sample_overlay = new overlay_path()
organs_to_randomize[overlay_path] = sample_overlay
- new_features["[sample_overlay.feature_key]"] = pick(sample_overlay.get_global_feature_list())
+ new_features["[sample_overlay.feature_key]"] = sample_overlay.get_random_appearance().name
return new_features
diff --git a/code/modules/mob/living/emote.dm b/code/modules/mob/living/emote.dm
index 418b07ebf2669..b007da827da14 100644
--- a/code/modules/mob/living/emote.dm
+++ b/code/modules/mob/living/emote.dm
@@ -352,6 +352,7 @@
message_mime = "acts out a scream!"
emote_type = EMOTE_VISIBLE | EMOTE_AUDIBLE
mob_type_blacklist_typecache = list(/mob/living/brain, /mob/living/carbon/human)
+ sound_wall_ignore = TRUE
/datum/emote/living/scream/run_emote(mob/user, params, type_override, intentional = FALSE)
if(!intentional && HAS_TRAIT(user, TRAIT_ANALGESIA))
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index 2873dab1a71bc..a7531439573e5 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -2663,7 +2663,7 @@ GLOBAL_LIST_EMPTY(fire_appearances)
///The price should be high enough that the contractor can't just buy 'em back with their cut alone.
var/datum/market_item/hostage/market_item = new(src, black_market_price || ransom_price)
- SSblackmarket.markets[/datum/market/blackmarket].add_item(market_item)
+ SSmarket.markets[/datum/market/blackmarket].add_item(market_item)
if(mind)
ADD_TRAIT(mind, TRAIT_HAS_BEEN_KIDNAPPED, TRAIT_GENERIC)
diff --git a/code/modules/mob/living/silicon/robot/robot_model.dm b/code/modules/mob/living/silicon/robot/robot_model.dm
index c20efda747bfd..015f23182dca3 100644
--- a/code/modules/mob/living/silicon/robot/robot_model.dm
+++ b/code/modules/mob/living/silicon/robot/robot_model.dm
@@ -233,6 +233,7 @@
if(!new_model.be_transformed_to(src, forced))
qdel(new_model)
return
+ cyborg.drop_all_held_items()
cyborg.model = new_model
cyborg.update_module_innate()
new_model.rebuild_modules()
diff --git a/code/modules/mob/living/sneeze.dm b/code/modules/mob/living/sneeze.dm
index b2cf76c25a6b0..4c38027fda0d8 100644
--- a/code/modules/mob/living/sneeze.dm
+++ b/code/modules/mob/living/sneeze.dm
@@ -57,6 +57,7 @@
spread = 40
damage_type = BRUTE
damage = 0
+ hitsound = null
/// Call this when we hit something
var/datum/callback/sneezie_callback
diff --git a/code/modules/mod/modules/modules_general.dm b/code/modules/mod/modules/modules_general.dm
index 815cfb0a144bc..18c89600573cf 100644
--- a/code/modules/mod/modules/modules_general.dm
+++ b/code/modules/mod/modules/modules_general.dm
@@ -174,9 +174,6 @@
required_slots = list(ITEM_SLOT_BACK)
/obj/item/mod/module/jump_jet/on_use()
- . = ..()
- if (!.)
- return FALSE
if (DOING_INTERACTION(mod.wearer, mod.wearer))
balloon_alert(mod.wearer, "busy!")
return
diff --git a/code/modules/mod/modules/modules_security.dm b/code/modules/mod/modules/modules_security.dm
index 19150b8a4cd67..703cf197dc76d 100644
--- a/code/modules/mod/modules/modules_security.dm
+++ b/code/modules/mod/modules/modules_security.dm
@@ -269,7 +269,7 @@
dispense_type = /obj/item/grenade/mirage
/obj/item/mod/module/dispenser/mirage/on_use()
- var/obj/item/grenade/mirage/grenade = .
+ var/obj/item/grenade/mirage/grenade = ..()
grenade.arm_grenade(mod.wearer)
/obj/item/grenade/mirage
diff --git a/code/modules/projectiles/guns/ballistic/bows/bow_arrows.dm b/code/modules/projectiles/guns/ballistic/bows/bow_arrows.dm
index 92c4f19e9b333..d7a24c9deba47 100644
--- a/code/modules/projectiles/guns/ballistic/bows/bow_arrows.dm
+++ b/code/modules/projectiles/guns/ballistic/bows/bow_arrows.dm
@@ -45,6 +45,60 @@
jostle_pain_mult = 3
rip_time = 1 SECONDS
+/// sticky arrows
+/obj/item/ammo_casing/arrow/sticky
+ name = "sticky arrow"
+ desc = "A sticky arrow. Not sharp-ended, but ripping it off yourself once hit would be rather difficult and painful."
+ icon_state = "sticky_arrow"
+ inhand_icon_state = "sticky_arrow"
+ base_icon_state = "sticky_arrow"
+ projectile_type = /obj/projectile/bullet/arrow/sticky
+
+///sticky arrow projectile
+/obj/projectile/bullet/arrow/sticky
+ name = "sticky arrow"
+ desc = "Quite the sticky situation..."
+ icon_state = "sticky_arrow_projectile"
+ damage = 30
+ speed = 0.75
+ range = 20
+ embed_type = /datum/embed_data/arrow/sticky
+
+/datum/embed_data/arrow/sticky
+ embed_chance = 99
+ fall_chance = 0
+ jostle_chance = 1
+ ignore_throwspeed_threshold = TRUE
+ pain_stam_pct = 0.7
+ pain_mult = 3
+ jostle_pain_mult = 3
+ rip_time = 8 SECONDS
+
+/// poison arrows
+/obj/item/ammo_casing/arrow/poison
+ name = "poisonous arrow"
+ desc = "A poisonous arrow."
+ icon_state = "poison_arrow"
+ inhand_icon_state = "poison_arrow"
+ base_icon_state = "poison_arrow"
+ projectile_type = /obj/projectile/bullet/arrow/poison
+
+/// poison arrow projctile
+/obj/projectile/bullet/arrow/poison
+ name = "poisonous arrow"
+ desc = "Better to not get hit with this!"
+ icon_state = "poison_arrow_projectile"
+ damage = 40
+ embed_type = /datum/embed_data/arrow
+
+/obj/projectile/bullet/arrow/poison/on_hit(atom/target, blocked, pierce_hit)
+ . = ..()
+ if(!ishuman(target))
+ return
+
+ target.reagents?.add_reagent(/datum/reagent/toxin/cyanide, 8)
+ target.reagents?.add_reagent(/datum/reagent/toxin/staminatoxin, 1)
+
/// holy arrows
/obj/item/ammo_casing/arrow/holy
name = "holy arrow"
diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm
index 5833a95c56766..c501f15db90e6 100644
--- a/code/modules/projectiles/projectile.dm
+++ b/code/modules/projectiles/projectile.dm
@@ -85,7 +85,8 @@
/// `speed` a modest value like 1 and set this to a low value like 0.2.
var/pixel_speed_multiplier = 1
- var/Angle = 0
+ /// The current angle of the projectile. Initially null, so if the arg is missing from [/fire()], we can calculate it from firer and target as fallback.
+ var/Angle
var/original_angle = 0 //Angle at firing
var/nondirectional_sprite = FALSE //Set TRUE to prevent projectiles from having their sprites rotated based on firing angle
var/spread = 0 //amount (in degrees) of projectile spread
@@ -761,21 +762,19 @@
process_hit(get_turf(direct_target), direct_target)
if(QDELETED(src))
return
+ var/turf/starting = get_turf(src)
if(isnum(angle))
set_angle(angle)
- if(spread)
- set_angle(Angle + ((rand() - 0.5) * spread))
- var/turf/starting = get_turf(src)
- if(isnull(Angle)) //Try to resolve through offsets if there's no angle set.
+ else if(isnull(Angle)) //Try to resolve through offsets if there's no angle set.
if(isnull(xo) || isnull(yo))
stack_trace("WARNING: Projectile [type] deleted due to being unable to resolve a target after angle was null!")
qdel(src)
return
var/turf/target = locate(clamp(starting + xo, 1, world.maxx), clamp(starting + yo, 1, world.maxy), starting.z)
set_angle(get_angle(src, target))
+ if(spread)
+ set_angle(Angle + (rand() - 0.5) * spread)
original_angle = Angle
- if(!nondirectional_sprite)
- transform = transform.Turn(Angle)
trajectory_ignore_forcemove = TRUE
forceMove(starting)
trajectory_ignore_forcemove = FALSE
diff --git a/code/modules/research/xenobiology/crossbreeding/consuming.dm b/code/modules/research/xenobiology/crossbreeding/consuming.dm
index 5a23d30671f54..be8bba7ec66fa 100644
--- a/code/modules/research/xenobiology/crossbreeding/consuming.dm
+++ b/code/modules/research/xenobiology/crossbreeding/consuming.dm
@@ -226,30 +226,40 @@ Consuming extracts:
icon_state = "bluespace"
taste = "sugar and starlight"
-/obj/item/slime_cookie/bluespace/do_effect(mob/living/M, mob/user)
- var/list/L = get_area_turfs(get_area(get_turf(M)))
+/obj/item/slime_cookie/bluespace/do_effect(mob/living/eater, mob/user)
+ var/area/eater_area = get_area(eater)
+ if (eater_area.area_flags & NOTELEPORT)
+ fail_effect(eater)
+ return
+
+ var/list/area_turfs = get_area_turfs(get_area(get_turf(eater)))
var/turf/target
- while (L.len && !target)
- var/I = rand(1, L.len)
- var/turf/T = L[I]
- if (is_centcom_level(T.z))
- L.Cut(I,I+1)
+
+ while (length(area_turfs))
+ var/turf/check_turf = pick_n_take(area_turfs)
+ if (is_centcom_level(check_turf.z))
+ continue // Probably already filtered out by NOTELEPORT but let's just be careful
+ if (check_turf.is_blocked_turf())
continue
- if(!T.density)
- var/clear = TRUE
- for(var/obj/O in T)
- if(O.density)
- clear = FALSE
- break
- if(clear)
- target = T
- if (!target)
- L.Cut(I,I+1)
-
- if(target)
- do_teleport(M, target, 0, asoundin = 'sound/effects/phasein.ogg', channel = TELEPORT_CHANNEL_BLUESPACE)
- new /obj/effect/particle_effect/sparks(get_turf(M))
- playsound(get_turf(M), SFX_SPARKS, 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
+ target = check_turf
+ break
+
+ if (isnull(target))
+ fail_effect(eater)
+ return
+ if (!do_teleport(eater, target, 0, asoundin = 'sound/effects/phasein.ogg', channel = TELEPORT_CHANNEL_BLUESPACE))
+ fail_effect(eater)
+ return
+ new /obj/effect/particle_effect/sparks(target)
+ playsound(target, SFX_SPARKS, 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
+
+/obj/item/slime_cookie/bluespace/proc/fail_effect(mob/living/eater)
+ eater.visible_message(
+ message = span_warning("[eater] briefly vanishes... then slams forcefully into the ground"),
+ self_message = span_warning("You briefly vanish... and are returned forcefully to the ground.")
+ )
+ eater.Knockdown(0.1 SECONDS)
+ new /obj/effect/particle_effect/sparks(get_turf(eater))
/obj/item/slimecross/consuming/sepia
colour = SLIME_TYPE_SEPIA
diff --git a/code/modules/surgery/amputation.dm b/code/modules/surgery/amputation.dm
index 49793c1ad2de2..16045a760324c 100644
--- a/code/modules/surgery/amputation.dm
+++ b/code/modules/surgery/amputation.dm
@@ -27,6 +27,13 @@
/datum/surgery_step/sever_limb/mechanic, //The benefit of being robotic; people can pull you apart in an instant! Wait, that's not a benefit...
)
+/datum/surgery/amputation/peg
+ name = "Detach"
+ requires_bodypart_type = BODYTYPE_PEG
+ steps = list(
+ /datum/surgery_step/sever_limb/peg, //Easy come, easy go
+ )
+
/datum/surgery/amputation/can_start(mob/user, mob/living/patient)
if(HAS_TRAIT(patient, TRAIT_NODISMEMBER))
return FALSE
@@ -62,6 +69,19 @@
preop_sound = 'sound/items/ratchet.ogg'
preop_sound = 'sound/machines/doorclick.ogg'
+/datum/surgery_step/sever_limb/peg
+ name = "detach limb (circular saw)"
+ implements = list(
+ TOOL_SAW = 100,
+ /obj/item/shovel/serrated = 100,
+ /obj/item/fireaxe = 90,
+ /obj/item/hatchet = 75,
+ TOOL_SCALPEL = 25,
+ )
+ time = 30
+ preop_sound = 'sound/surgery/saw.ogg'
+ success_sound = 'sound/items/wood_drop.ogg'
+
/datum/surgery_step/sever_limb/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(
user,
diff --git a/code/modules/surgery/organs/external/tails.dm b/code/modules/surgery/organs/external/tails.dm
index e4cd3f50a4997..1a52bbe56cd5b 100644
--- a/code/modules/surgery/organs/external/tails.dm
+++ b/code/modules/surgery/organs/external/tails.dm
@@ -175,7 +175,7 @@
bodypart_overlay = /datum/bodypart_overlay/mutant/tail/monkey
- dna_block = DNA_MONKEY_TAIL_BLOCK
+ dna_block = null
///Monkey tail bodypart overlay
/datum/bodypart_overlay/mutant/tail/monkey
diff --git a/code/modules/surgery/organs/internal/heart/_heart.dm b/code/modules/surgery/organs/internal/heart/_heart.dm
index f3899cb994648..b0fac316ad3e3 100644
--- a/code/modules/surgery/organs/internal/heart/_heart.dm
+++ b/code/modules/surgery/organs/internal/heart/_heart.dm
@@ -165,13 +165,23 @@
icon_state = "heart-c-on"
base_icon_state = "heart-c"
organ_flags = ORGAN_ROBOTIC
- maxHealth = STANDARD_ORGAN_THRESHOLD*0.75 //This also hits defib timer, so a bit higher than its less important counterparts
+ maxHealth = STANDARD_ORGAN_THRESHOLD * 0.75 //This also hits defib timer, so a bit higher than its less important counterparts
failing_desc = "seems to be broken."
- var/dose_available = FALSE
- var/rid = /datum/reagent/medicine/epinephrine
- var/ramount = 10
- var/emp_vulnerability = 80 //Chance of permanent effects if emp-ed.
+ /// Whether or not we have a stabilization available. This prevents our owner from entering softcrit for an amount of time.
+ var/stabilization_available = FALSE
+
+ /// How long our stabilization lasts for.
+ var/stabilization_duration = 10 SECONDS
+
+ /// Whether our heart suppresses bleeders and restores blood automatically.
+ var/bleed_prevention = FALSE
+
+ /// The probability that our blood replication causes toxin damage.
+ var/toxification_probability = 20
+
+ /// Chance of permanent effects if emp-ed.
+ var/emp_vulnerability = 80
/obj/item/organ/internal/heart/cybernetic/emp_act(severity)
. = ..()
@@ -197,35 +207,63 @@
/obj/item/organ/internal/heart/cybernetic/on_life(seconds_per_tick, times_fired)
. = ..()
- if(dose_available && owner.health <= owner.crit_threshold && !owner.reagents.has_reagent(rid))
- used_dose()
-/obj/item/organ/internal/heart/cybernetic/proc/used_dose()
- owner.reagents.add_reagent(rid, ramount)
- dose_available = FALSE
+ if(organ_flags & ORGAN_EMP)
+ return
+
+ if(stabilization_available && owner.health <= owner.crit_threshold)
+ stabilize_heart()
+
+ if(bleed_prevention && ishuman(owner) && owner.blood_volume < BLOOD_VOLUME_NORMAL)
+ var/mob/living/carbon/human/wounded_owner = owner
+ wounded_owner.blood_volume += 2 * seconds_per_tick
+ if(toxification_probability && prob(toxification_probability))
+ wounded_owner.adjustToxLoss(1 * seconds_per_tick, updating_health = FALSE)
+
+ var/datum/wound/bloodiest_wound
+
+ for(var/datum/wound/iter_wound as anything in wounded_owner.all_wounds)
+ if(iter_wound.blood_flow && iter_wound.blood_flow > bloodiest_wound?.blood_flow)
+ bloodiest_wound = iter_wound
+
+ if(bloodiest_wound)
+ bloodiest_wound.adjust_blood_flow(-1 * seconds_per_tick)
+
+/obj/item/organ/internal/heart/cybernetic/proc/stabilize_heart()
+ ADD_TRAIT(owner, TRAIT_NOSOFTCRIT, ORGAN_TRAIT)
+ stabilization_available = FALSE
+
+ addtimer(TRAIT_CALLBACK_REMOVE(owner, TRAIT_NOSOFTCRIT, ORGAN_TRAIT), stabilization_duration)
+
+ addtimer(VARSET_CALLBACK(src, stabilization_available, TRUE), 5 MINUTES, TIMER_DELETE_ME)
+
+// Largely a sanity check
+/obj/item/organ/internal/heart/cybernetic/on_mob_remove(mob/living/carbon/heart_owner, special = FALSE)
+ . = ..()
+ if(HAS_TRAIT_FROM(heart_owner, TRAIT_NOSOFTCRIT, ORGAN_TRAIT))
+ REMOVE_TRAIT(heart_owner, TRAIT_NOSOFTCRIT, ORGAN_TRAIT)
/obj/item/organ/internal/heart/cybernetic/tier2
name = "cybernetic heart"
- desc = "An electronic device designed to mimic the functions of an organic human heart. Also holds an emergency dose of epinephrine, used automatically after facing severe trauma."
+ desc = "An electronic device designed to mimic the functions of an organic human heart. In case of lacerations or haemorrhaging, the heart rapidly begins self-replicating \
+ artificial blood. However, this can cause toxins to build up in the bloodstream to the imperfect replication process."
icon_state = "heart-c-u-on"
base_icon_state = "heart-c-u"
maxHealth = 1.5 * STANDARD_ORGAN_THRESHOLD
- dose_available = TRUE
+ bleed_prevention = TRUE
emp_vulnerability = 40
/obj/item/organ/internal/heart/cybernetic/tier3
name = "upgraded cybernetic heart"
- desc = "An electronic device designed to mimic the functions of an organic human heart. Also holds an emergency dose of epinephrine, used automatically after facing severe trauma. This upgraded model can regenerate its dose after use."
+ desc = "An electronic device designed to mimic the functions of an organic human heart. In case of physical trauma, the heart has temporary failsafes to maintain patient stability \
+ and mobility for a brief moment. In addition, the heart is able to safely self-replicate blood without risk of toxin buildup."
icon_state = "heart-c-u2-on"
base_icon_state = "heart-c-u2"
maxHealth = 2 * STANDARD_ORGAN_THRESHOLD
- dose_available = TRUE
+ stabilization_available = TRUE
+ toxification_probability = 0
emp_vulnerability = 20
-/obj/item/organ/internal/heart/cybernetic/tier3/used_dose()
- . = ..()
- addtimer(VARSET_CALLBACK(src, dose_available, TRUE), 5 MINUTES)
-
/obj/item/organ/internal/heart/cybernetic/surplus
name = "surplus prosthetic heart"
desc = "A fragile mockery of a human heart that resembles a water pump more than an actual heart. \
diff --git a/code/modules/surgery/organs/internal/heart/heart_anomalock.dm b/code/modules/surgery/organs/internal/heart/heart_anomalock.dm
index e9da6197ed273..5cdb27942358b 100644
--- a/code/modules/surgery/organs/internal/heart/heart_anomalock.dm
+++ b/code/modules/surgery/organs/internal/heart/heart_anomalock.dm
@@ -7,6 +7,8 @@
name = "Voltaic Combat Cyberheart"
desc = "A cutting-edge cyberheart, originally designed for Nanotrasen killsquad usage but later declassified for normal research. Voltaic technology allows the heart to keep the body upright in dire circumstances, alongside redirecting anomalous flux energy to fully shield the user from shocks and electro-magnetic pulses. Requires a refined Flux core as a power source."
icon_state = "anomalock_heart"
+ bleed_prevention = TRUE
+ toxification_probability = 0
COOLDOWN_DECLARE(survival_cooldown)
///Cooldown for the activation of the organ
diff --git a/code/modules/surgery/surgery_step.dm b/code/modules/surgery/surgery_step.dm
index 350bd60fbd176..336e76b4d70c2 100644
--- a/code/modules/surgery/surgery_step.dm
+++ b/code/modules/surgery/surgery_step.dm
@@ -96,6 +96,12 @@
var/fail_prob = 0//100 - fail_prob = success_prob
var/advance = FALSE
+ if(!chem_check(target))
+ user.balloon_alert(user, "missing [LOWER_TEXT(get_chem_list())]!")
+ to_chat(user, span_warning("[target] is missing the [LOWER_TEXT(get_chem_list())] required to perform this surgery step!"))
+ surgery.step_in_progress = FALSE
+ return FALSE
+
if(preop(user, target, target_zone, tool, surgery) == SURGERY_STEP_FAIL)
update_surgery_mood(target, SURGERY_STATE_FAILURE)
surgery.step_in_progress = FALSE
@@ -134,9 +140,7 @@
if(do_after(user, modded_time, target = target, interaction_key = user.has_status_effect(/datum/status_effect/hippocratic_oath) ? target : DOAFTER_SOURCE_SURGERY)) //If we have the hippocratic oath, we can perform one surgery on each target, otherwise we can only do one surgery in total.
- var/chem_check_result = chem_check(target)
- if((prob(100-fail_prob) || (iscyborg(user) && !silicons_obey_prob)) && chem_check_result && !try_to_fail)
-
+ if((prob(100-fail_prob) || (iscyborg(user) && !silicons_obey_prob)) && !try_to_fail)
if(success(user, target, target_zone, tool, surgery))
update_surgery_mood(target, SURGERY_STATE_SUCCESS)
play_success_sound(user, target, target_zone, tool, surgery)
@@ -146,8 +150,6 @@
play_failure_sound(user, target, target_zone, tool, surgery)
update_surgery_mood(target, SURGERY_STATE_FAILURE)
advance = TRUE
- if(chem_check_result)
- return .(user, target, target_zone, tool, surgery, try_to_fail) //automatically re-attempt if failed for reason other than lack of required chemical
if(advance && !repeatable)
surgery.status++
if(surgery.status > surgery.steps.len)
diff --git a/code/modules/tgs/v5/api.dm b/code/modules/tgs/v5/api.dm
index 95b8edd3ee5c2..05d0dee25b3c2 100644
--- a/code/modules/tgs/v5/api.dm
+++ b/code/modules/tgs/v5/api.dm
@@ -50,7 +50,9 @@
version = null // we want this to be the TGS version, not the interop version
// sleep once to prevent an issue where world.Export on the first tick can hang indefinitely
+ TGS_DEBUG_LOG("Starting Export bug prevention sleep tick. time:[world.time] sleep_offline:[world.sleep_offline]")
sleep(world.tick_lag)
+ TGS_DEBUG_LOG("Export bug prevention sleep complete")
var/list/bridge_response = Bridge(DMAPI5_BRIDGE_COMMAND_STARTUP, list(DMAPI5_BRIDGE_PARAMETER_MINIMUM_SECURITY_LEVEL = minimum_required_security_level, DMAPI5_BRIDGE_PARAMETER_VERSION = api_version.raw_parameter, DMAPI5_PARAMETER_CUSTOM_COMMANDS = ListCustomCommands(), DMAPI5_PARAMETER_TOPIC_PORT = GetTopicPort()))
if(!istype(bridge_response))
diff --git a/code/modules/transport/elevator/elev_controller.dm b/code/modules/transport/elevator/elev_controller.dm
index aae79cfe0f14b..870211ecb56d9 100644
--- a/code/modules/transport/elevator/elev_controller.dm
+++ b/code/modules/transport/elevator/elev_controller.dm
@@ -122,7 +122,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/button/elevator, 32)
return FALSE
// We can't call an elevator that's moving. You may say "you totally can do that", but that's not modelled
- if(lift.controls_locked == LIFT_PLATFORM_LOCKED)
+ if(lift.controller_status & CONTROLS_LOCKED)
loc.balloon_alert(activator, "elevator is moving!")
return FALSE
diff --git a/code/modules/transport/elevator/elev_panel.dm b/code/modules/transport/elevator/elev_panel.dm
index 76b95922dfe66..0b5e99bdbb059 100644
--- a/code/modules/transport/elevator/elev_panel.dm
+++ b/code/modules/transport/elevator/elev_panel.dm
@@ -276,7 +276,7 @@
var/datum/transport_controller/linear/lift = lift_weakref?.resolve()
if(lift)
data["lift_exists"] = TRUE
- data["currently_moving"] = lift.controls_locked == LIFT_PLATFORM_LOCKED
+ data["currently_moving"] = lift.controller_status & CONTROLS_LOCKED
data["currently_moving_to_floor"] = last_move_target
data["current_floor"] = lift.transport_modules[1].z
@@ -319,7 +319,7 @@
return TRUE // Something is inaccurate, update UI
var/datum/transport_controller/linear/lift = lift_weakref?.resolve()
- if(!lift || lift.controls_locked == LIFT_PLATFORM_LOCKED)
+ if(!lift || lift.controller_status & CONTROLS_LOCKED)
return TRUE // We shouldn't be moving anything, update UI
INVOKE_ASYNC(lift, TYPE_PROC_REF(/datum/transport_controller/linear, move_to_zlevel), desired_z, CALLBACK(src, PROC_REF(check_panel)), usr)
diff --git a/code/modules/transport/linear_controller.dm b/code/modules/transport/linear_controller.dm
index 80c161c32918d..1b3ffd30c148f 100644
--- a/code/modules/transport/linear_controller.dm
+++ b/code/modules/transport/linear_controller.dm
@@ -1,3 +1,6 @@
+/// If anyone changes the hydraulic sound effect I sure hope they update this...
+#define HYDRAULIC_SFX_DURATION (2 SECONDS)
+
///coordinate and control movement across linked transport_controllers. allows moving large single multitile platforms and many 1 tile platforms.
///also is capable of linking platforms across linked z levels
/datum/transport_controller/linear
@@ -10,6 +13,7 @@
/obj/machinery/power/supermatter_crystal,
/obj/structure/holosign,
/obj/machinery/field,
+ /obj/structure/fluff/tram_rail,
)
///whether the lift handled by this transport_controller datum is multitile as opposed to nxm platforms per z level
@@ -32,9 +36,6 @@
///bitfield of various transport states
var/controller_status = NONE
- ///if true, the platform cannot be manually moved.
- var/controls_locked = FALSE
-
/// probability of being thrown hard during an emergency stop
var/throw_chance = 17.5
@@ -343,10 +344,8 @@
// Get the lowest or highest platform according to which direction we're moving
var/obj/structure/transport/linear/prime_lift = return_closest_platform_to_z(direction == UP ? world.maxz : 0)
- // If anyone changes the hydraulic sound effect I sure hope they update this variable...
- var/hydraulic_sfx_duration = 2 SECONDS
// ...because we use the duration of the sound effect to make it last for roughly the duration of the lift travel
- playsound(prime_lift, 'sound/mecha/hydraulic.ogg', 25, vary = TRUE, frequency = clamp(hydraulic_sfx_duration / lift_move_duration, 0.33, 3))
+ playsound(prime_lift, 'sound/mecha/hydraulic.ogg', 25, vary = TRUE, frequency = clamp(HYDRAULIC_SFX_DURATION / lift_move_duration, 0.33, 3))
// Move the platform after a timer
addtimer(CALLBACK(src, PROC_REF(move_lift_vertically), direction, user), lift_move_duration, TIMER_UNIQUE)
@@ -465,6 +464,7 @@
// Close all lift doors
update_lift_doors(action = CYCLE_CLOSED)
+ sleep(1.1 SECONDS)
// Approach the desired z-level one step at a time
for(var/i in 1 to z_difference)
if(!Check_lift_move(direction))
@@ -482,7 +482,7 @@
if(QDELETED(src) || QDELETED(prime_lift))
return
- addtimer(CALLBACK(src, PROC_REF(open_lift_doors_callback)), 2 SECONDS)
+ update_lift_doors(get_zs_we_are_on(), action = CYCLE_OPEN)
SEND_SIGNAL(src, COMSIG_LIFT_SET_DIRECTION, 0)
controls_lock(FALSE)
return TRUE
@@ -636,3 +636,5 @@
lift_to_reset.reset_contents(consider_anything_past, foreign_objects, foreign_non_player_mobs, consider_player_mobs)
return TRUE
+
+#undef HYDRAULIC_SFX_DURATION
diff --git a/code/modules/transport/transport_module.dm b/code/modules/transport/transport_module.dm
index 104601f2f6ca3..af8f4199438db 100644
--- a/code/modules/transport/transport_module.dm
+++ b/code/modules/transport/transport_module.dm
@@ -378,19 +378,19 @@
for(var/obj/structure/victim_structure in dest_turf.contents)
if(QDELING(victim_structure))
continue
- if(!is_type_in_typecache(victim_structure, transport_controller_datum.ignored_smashthroughs) && victim_structure.layer >= LOW_OBJ_LAYER)
-
- if(victim_structure.anchored && initial(victim_structure.anchored) == TRUE)
- visible_message(span_danger("[src] smashes through [victim_structure]!"))
- victim_structure.deconstruct(FALSE)
-
- else
- if(!throw_target)
- throw_target = get_edge_target_turf(src, turn(travel_direction, pick(45, -45)))
- visible_message(span_danger("[src] violently rams [victim_structure] out of the way!"))
- victim_structure.anchored = FALSE
- victim_structure.take_damage(rand(20, 25) * collision_lethality)
- victim_structure.throw_at(throw_target, 200 * collision_lethality, 4 * collision_lethality)
+ if(!is_type_in_typecache(victim_structure, transport_controller_datum.ignored_smashthroughs))
+ if((victim_structure.plane == FLOOR_PLANE && victim_structure.layer > TRAM_RAIL_LAYER) || (victim_structure.plane == GAME_PLANE && victim_structure.layer > LOW_OBJ_LAYER) )
+ if(victim_structure.anchored && initial(victim_structure.anchored) == TRUE)
+ visible_message(span_danger("[src] smashes through [victim_structure]!"))
+ victim_structure.deconstruct(FALSE)
+
+ else
+ if(!throw_target)
+ throw_target = get_edge_target_turf(src, turn(travel_direction, pick(45, -45)))
+ visible_message(span_danger("[src] violently rams [victim_structure] out of the way!"))
+ victim_structure.anchored = FALSE
+ victim_structure.take_damage(rand(20, 25) * collision_lethality)
+ victim_structure.throw_at(throw_target, 200 * collision_lethality, 4 * collision_lethality)
for(var/obj/machinery/victim_machine in dest_turf.contents)
if(QDELING(victim_machine))
diff --git a/code/modules/unit_tests/_unit_tests.dm b/code/modules/unit_tests/_unit_tests.dm
index 911887cc8b900..a42c25dc94ee1 100644
--- a/code/modules/unit_tests/_unit_tests.dm
+++ b/code/modules/unit_tests/_unit_tests.dm
@@ -102,7 +102,6 @@
#include "bespoke_id.dm"
#include "binary_insert.dm"
#include "bitrunning.dm"
-#include "blackmarket.dm"
#include "blindness.dm"
#include "bloody_footprints.dm"
#include "breath.dm"
@@ -183,6 +182,7 @@
#include "mapload_space_verification.dm"
#include "mapping.dm"
#include "mapping_nearstation_test.dm"
+#include "market.dm"
#include "mecha_damage.dm"
#include "medical_wounds.dm"
#include "merge_type.dm"
diff --git a/code/modules/unit_tests/blackmarket.dm b/code/modules/unit_tests/blackmarket.dm
deleted file mode 100644
index 984e2ea815503..0000000000000
--- a/code/modules/unit_tests/blackmarket.dm
+++ /dev/null
@@ -1,23 +0,0 @@
-/// Ensures black market items have acceptable variable values.
-/datum/unit_test/blackmarket
-
-/datum/unit_test/blackmarket/Run()
- for(var/datum/market_item/prototype as anything in subtypesof(/datum/market_item))
- if(prototype::abstract_path == prototype) //skip abstract paths
- continue
- if(!prototype::category)
- TEST_FAIL("[prototype] doesn't have a set category (or the abstract path var isn't correctly set)")
- continue
- if(!prototype::item)
- TEST_FAIL("[prototype] doesn't have a set item (or the abstract path var isn't correctly set)")
- continue
- if(isnull(prototype::price) && prototype::price_max <= prototype::price_min)
- TEST_FAIL("[prototype] doesn't have a correctly set random price (price_max should be higher than price_min)")
- if(isnull(prototype::stock) && prototype::stock_max < prototype::stock_min)
- TEST_FAIL("[prototype] doesn't have a correctly set random stock (stock_max shouldn't be lower than stock_min)")
- if(!isnum(prototype::availability_prob))
- TEST_FAIL("[prototype] doesn't have a set availability_prob (must be a number)")
- if(!prototype::name)
- TEST_FAIL("[prototype] doesn't have a set name")
- if(!prototype::desc)
- TEST_FAIL("[prototype] doesn't have a set desc")
diff --git a/code/modules/unit_tests/market.dm b/code/modules/unit_tests/market.dm
new file mode 100644
index 0000000000000..022f277d879c0
--- /dev/null
+++ b/code/modules/unit_tests/market.dm
@@ -0,0 +1,59 @@
+#define CATEGORY_CODERBUS "Coderbus"
+/// Ensures market items have acceptable variable values and restocking works.
+/datum/unit_test/market
+
+/datum/unit_test/market/Run()
+ for(var/datum/market_item/prototype as anything in subtypesof(/datum/market_item))
+ if(prototype::abstract_path == prototype) //skip abstract paths
+ continue
+ if(!prototype::category)
+ TEST_FAIL("[prototype] doesn't have a set category (or the abstract path var isn't correctly set)")
+ continue
+ if(!prototype::item)
+ TEST_FAIL("[prototype] doesn't have a set item (or the abstract path var isn't correctly set)")
+ continue
+ if(isnull(prototype::price) && prototype::price_max <= prototype::price_min)
+ TEST_FAIL("[prototype] doesn't have a correctly set random price (price_max should be higher than price_min)")
+ if(isnull(prototype::stock) && prototype::stock_max < prototype::stock_min)
+ TEST_FAIL("[prototype] doesn't have a correctly set random stock (stock_max shouldn't be lower than stock_min)")
+ if(!isnum(prototype::availability_prob))
+ TEST_FAIL("[prototype] doesn't have a set availability_prob (must be a number)")
+ if(!prototype::name)
+ TEST_FAIL("[prototype] doesn't have a set name")
+ if(!prototype::desc)
+ TEST_FAIL("[prototype] doesn't have a set desc")
+
+
+ var/datum/market/unit_test/market = SSmarket.markets[/datum/market/unit_test]
+ TEST_ASSERT(market, "Couldn't find the unit test market")
+ var/list/category_items = market.available_items[CATEGORY_CODERBUS]
+ var/datum/market_item/unit_test/item = category_items[category_items[1]]
+ TEST_ASSERT(item, "Couldn't find the unit test market item")
+ TEST_ASSERT_EQUAL(item.stock, 1, "The unit test market item is incorrectly stocked. Only one should be in stock")
+
+ var/mob/living/user = allocate(/mob/living)
+ var/obj/item/holochip/chip = allocate(/obj/item/holochip, run_loc_floor_bottom_left, INFINITY)
+ var/obj/machinery/ltsrbt/pad = allocate(/obj/machinery/ltsrbt)
+
+ pad.item_interaction(user, chip)
+
+ TEST_ASSERT_EQUAL(item, category_items[category_items[1]], "The unit test market item has been replaced during restock")
+ TEST_ASSERT_EQUAL(item.stock, 2, "The unit test market item is incorrectly stocked after restock. There should be two in stock")
+
+/datum/market/unit_test
+ name = "Unit Test Market"
+ shipping = list(SHIPPING_METHOD_TELEPORT = 0)
+
+/datum/market_item/unit_test
+ name = "Your Own Special Singularity"
+ desc = "ALL HAIL LORD SINGULOTH!!!"
+ category = CATEGORY_CODERBUS
+ markets = list(/datum/market/unit_test)
+ item = /obj/singularity
+ price = 42069
+ stock_min = 1
+ stock = 1
+ stock_max = 2
+ availability_prob = 100
+
+#undef CATEGORY_CODERBUS
diff --git a/code/modules/uplink/uplink_devices.dm b/code/modules/uplink/uplink_devices.dm
index 596ea9e1ffad4..3c31ddf647f88 100644
--- a/code/modules/uplink/uplink_devices.dm
+++ b/code/modules/uplink/uplink_devices.dm
@@ -48,7 +48,7 @@
hidden_uplink.uplink_handler.debug_mode = TRUE
/obj/item/uplink/nuclear
- uplink_flag = UPLINK_ALL_SYNDIE_OPS
+ uplink_flag = UPLINK_NUKE_OPS
/obj/item/uplink/nuclear/debug
name = "debug nuclear uplink"
diff --git a/code/modules/vehicles/mecha/combat/justice.dm b/code/modules/vehicles/mecha/combat/justice.dm
index e99632394a1b7..00b0543dbd865 100644
--- a/code/modules/vehicles/mecha/combat/justice.dm
+++ b/code/modules/vehicles/mecha/combat/justice.dm
@@ -170,10 +170,10 @@
. = ..()
RegisterSignal(chassis, COMSIG_MECH_SAFETIES_TOGGLE, PROC_REF(on_toggle_safety))
-/// update button icon when toggle safety.
+/// update button icon when toggle safety and turns invisibility off.
/datum/action/vehicle/sealed/mecha/invisibility/proc/on_toggle_safety()
SIGNAL_HANDLER
-
+ invisibility_off()
build_all_button_icons(UPDATE_BUTTON_STATUS)
/datum/action/vehicle/sealed/mecha/invisibility/Trigger(trigger_flags)
diff --git a/code/modules/vehicles/pimpin_ride.dm b/code/modules/vehicles/pimpin_ride.dm
index 7ef79cb89cf04..441a1263a3ea0 100644
--- a/code/modules/vehicles/pimpin_ride.dm
+++ b/code/modules/vehicles/pimpin_ride.dm
@@ -64,7 +64,7 @@
installed_upgrade = null
update_appearance()
else if(trash_bag && (!is_key(I) || is_key(inserted_key))) // don't put a key in the trash when we need it
- trash_bag.attackby(I, user)
+ trash_bag.atom_storage.attempt_insert(I, user)
else
return ..()
diff --git a/html/changelogs/AutoChangeLog-pr-85012.yml b/html/changelogs/AutoChangeLog-pr-85012.yml
deleted file mode 100644
index a8877141f7c30..0000000000000
--- a/html/changelogs/AutoChangeLog-pr-85012.yml
+++ /dev/null
@@ -1,6 +0,0 @@
-author: "necromanceranne"
-delete-after: True
-changes:
- - balance: "Strong-arm implants go on cooldown when activated, but deal more overall lethal damage on a single blow."
- - balance: "The strong-arm implant does additional damage to fauna and some other dangerous mobs."
- - qol: "You can pair toolset arm implants with the strong-arm implants."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-85168.yml b/html/changelogs/AutoChangeLog-pr-85168.yml
deleted file mode 100644
index 165c7e68c2424..0000000000000
--- a/html/changelogs/AutoChangeLog-pr-85168.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "necromanceranne"
-delete-after: True
-changes:
- - bugfix: "Restores some of the items accidentally lost in the autodrobe."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-85195.yml b/html/changelogs/AutoChangeLog-pr-85195.yml
deleted file mode 100644
index c1715fb80fbcd..0000000000000
--- a/html/changelogs/AutoChangeLog-pr-85195.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Vekter"
-delete-after: True
-changes:
- - spellcheck: "Reworded Voidwalker's objectives to be more descriptive of their actual goals as opposed to just fluff."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-85200.yml b/html/changelogs/AutoChangeLog-pr-85200.yml
deleted file mode 100644
index 1248e405a4c5f..0000000000000
--- a/html/changelogs/AutoChangeLog-pr-85200.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Ghommie"
-delete-after: True
-changes:
- - bugfix: "Fixed fishing."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-85202.yml b/html/changelogs/AutoChangeLog-pr-85202.yml
deleted file mode 100644
index 4cd96dc720ba5..0000000000000
--- a/html/changelogs/AutoChangeLog-pr-85202.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "MTandi"
-delete-after: True
-changes:
- - bugfix: "Borgs and AI can now use research queue"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-85251.yml b/html/changelogs/AutoChangeLog-pr-85251.yml
new file mode 100644
index 0000000000000..b40f87748a9d1
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-85251.yml
@@ -0,0 +1,4 @@
+author: "SmArtKar"
+delete-after: True
+changes:
+ - bugfix: "Recyclers no longer recycle contents of indestructible items"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-85302.yml b/html/changelogs/AutoChangeLog-pr-85302.yml
new file mode 100644
index 0000000000000..3797ee383bcb6
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-85302.yml
@@ -0,0 +1,4 @@
+author: "SmArtKar"
+delete-after: True
+changes:
+ - qol: "If you have auto fit viewport enabled, it will trigger upon entering or exiting fullscreen"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-85305.yml b/html/changelogs/AutoChangeLog-pr-85305.yml
new file mode 100644
index 0000000000000..14da28c2ee27d
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-85305.yml
@@ -0,0 +1,5 @@
+author: "Time-Green"
+delete-after: True
+changes:
+ - bugfix: "Fixes void eater not refreshing"
+ - bugfix: "Fixes planetary gravity not killing voidwalkers and voideds"
\ No newline at end of file
diff --git a/html/changelogs/archive/2024-07.yml b/html/changelogs/archive/2024-07.yml
index fdb3f22db3818..55c4a30a517d8 100644
--- a/html/changelogs/archive/2024-07.yml
+++ b/html/changelogs/archive/2024-07.yml
@@ -1275,3 +1275,136 @@
nikothedude:
- bugfix: Alexander no longer causes harddels
- bugfix: Removed a theoretical infinite block exploit from alexander
+2024-07-25:
+ Ghommie:
+ - bugfix: Fixed fishing.
+ MTandi:
+ - bugfix: Borgs and AI can now use research queue
+ Vekter:
+ - spellcheck: Reworded Voidwalker's objectives to be more descriptive of their actual
+ goals as opposed to just fluff.
+ necromanceranne:
+ - balance: Strong-arm implants go on cooldown when activated, but deal more overall
+ lethal damage on a single blow.
+ - balance: The strong-arm implant does additional damage to fauna and some other
+ dangerous mobs.
+ - qol: You can pair toolset arm implants with the strong-arm implants.
+ - balance: Quality cybernetic hearts combat bleeds and restore blood, rather than
+ inject you with epinephrine when you enter crit. This can result in mild toxin
+ buildup, however.
+ - balance: Upgraded cybernetic hearts give an extremely brief amount of action when
+ you enter softcrit (but not hardcrit).
+ - bugfix: Restores some of the items accidentally lost in the autodrobe.
+2024-07-26:
+ LT3:
+ - bugfix: Fixed elevator panel allowing conflicting inputs
+ - bugfix: Fixed elevator sound being out of sync with movement
+ SmArtKar:
+ - bugfix: Xenomorphs and door pryer basic mobs can now attack airlocks in combat
+ mode
+ - bugfix: Borgs now unequip their equipment upon module change like they should
+ YesterdaysPromise:
+ - rscadd: All the melons are now sliceable, and have inhands, instead of just watermelon
+ and holymelon respectively.
+ - rscadd: You can now hollow out melons of all kinds with a spoon to make helmets
+ or chestplates, based on the potency! If you are unlucky, you can tie up three
+ helmets into a chestplate with durathread using the crafting menu.
+ - rscadd: You can now make a bo staff out of bamboo and steelcap logs.
+ - rscadd: You can now make a moonflower buckler out of moonflowers and steelcap
+ logs.
+ - rscadd: You can also hollow out chantarelle to make mock-up wizard hat.
+ - rscadd: Parsnips, as mutation of carrots, become equaly able to be sharpaned,
+ turning into shivs, or with potency and luck, sabres.
+ - rscadd: You can now craft a durathread robe, and customize it into different variants
+ using specific plants in crafting menu.
+ - rscadd: Carrots gain a new possible mutation; cahn'root, brewable into root beer
+ and sharpanable into shivs or daggers!
+ - rscadd: Rice hat, made from bamboo, now has an alternative style, allowing you
+ to wear it in reverse and be much cooler.
+ - rscadd: Two new arrow variants appear in the crafting menu; sticky and poisonous
+ ones! If you want to make arrows at all though, remember to order bow-maker's
+ crate at cargo.
+2024-07-27:
+ 00-Steven:
+ - bugfix: Fixes borgs not being able to place apparatus-held items on tables. As
+ a side-effect, they can now combat mode right click splash containers as normal
+ instead of having their own right-click floor splash.
+ Ghommie:
+ - bugfix: Centcom technicians have been trained to recognize cargo-bought fish.
+ You will no longer be able to trick the economy system by buying fish and sending
+ it right back. Also nerfed fish selling price very slightly.
+ - bugfix: Fixes projectiles facing north if ricocheting, deflected or homing
+ - rscdel: Removed a janky fish bounty
+ - rscadd: introduced exporting fish through cargo.
+ - balance: reduced the average weight of the jumpercable. Conversely, eased up the
+ requirements for the bone fish evolution.
+ Ical92:
+ - bugfix: Tram's Tool Storage now has proper lighting
+ Jacquerel:
+ - balance: If a bluespace cookie fails to teleport you then you will trip over.
+ LT3:
+ - bugfix: Fixed delam counter stuck in window near Ice Box bridge
+ - bugfix: Fixed disease outbreak announcement sometimes missing the disease name
+ - bugfix: False supermatter surge announcements are now identical to real ones
+ - bugfix: Tram will no longer eat its own rails as it travels
+ MTandi:
+ - bugfix: Janicart inserts items into the attached trash bag again (manual and vacuumed)
+ Melbert:
+ - qol: All randomly spawned monkeys (and lizardpeople) will spawn with tails. You
+ can still select to be tailless.
+ - code_imp: Cleaned up some code relating to species features (like tails, markings,
+ etc). Report any oddities
+ SmArtKar:
+ - image: Updated gas flow meter sprites
+ Thlumyn:
+ - bugfix: self-resp viruses don't spam messages as often
+ afonamos2:
+ - bugfix: Firelocks will once again respect fire alarm's thermal sensors being disabled.
+ carlarctg:
+ - bugfix: Fixed possessed blades being broken
+ - code_imp: If testing is enabled everyone is polled in ghost polls.
+ mc-oofert:
+ - bugfix: wawastation ordnance no longer has a light fixture on a window and looks
+ objectively slightly better
+ - bugfix: wawastation engineering water tanks are now highcap
+2024-07-28:
+ 00-Steven:
+ - bugfix: Clicking on a table in the lootpanel with an item in-hand tries to place
+ it in the center again.
+ Axidyuwu:
+ - bugfix: now Justice invisibility turns off in non combat mode as it supposed to
+ Deadgebert:
+ - bugfix: peg limbs can now be amputated
+ DrDiasyl aka DrTuxedo:
+ - sound: Hearing and talking into the radio now produces a sound. Heads get a special
+ sound.
+ Helg2:
+ - rscadd: Emergency climbing hooks now spawn in emergency boxes on all of the multi-z
+ level stations.
+ JohnFulpWillard:
+ - bugfix: '[Mafia] The show_help button no longer shows you who the Obsessed''s
+ target is.'
+ LT3:
+ - bugfix: Players now receive a notification when trying to perform surgery steps
+ that involve chemicals
+ Rhials:
+ - bugfix: Monkey wizards can now interact with grand ritual runes.
+ - bugfix: Clown Ops gear has been returned to being available only to clown ops.
+ Whoops!
+ SmArtKar:
+ - bugfix: People with tooltips enabled no longer lag the server when they move their
+ mouse. Oops.
+ - bugfix: Mirage grenade dispensers and ionic jump jets now work
+ StrangeWeirdKitten:
+ - bugfix: Voidwalker should not run on planetary maps.
+ grungussuss:
+ - bugfix: Med sec telescreens are no longer the same item as the CMO telescreen.
+ - spellcheck: correcte name for the CMO telescreen mount
+ - bugfix: birdshot holodeck's lighting has been fixed.
+ - sound: medkits now have sounds
+ - sound: gas tanks now have sound
+ - sound: the default metal sound has been changed
+ - bugfix: lavaland no longer has roundstart atmos processing because of a passive
+ vent
+ - sound: only the scream emote can be heard through walls
+ - sound: the sneeze projectile no longer makes a sound when making contact.
diff --git a/icons/mob/clothing/back.dmi b/icons/mob/clothing/back.dmi
index 0f07c3fe0803f..a96beb1cfa936 100644
Binary files a/icons/mob/clothing/back.dmi and b/icons/mob/clothing/back.dmi differ
diff --git a/icons/mob/clothing/belt.dmi b/icons/mob/clothing/belt.dmi
index a2d318adfb7d1..4f844c4fa320f 100644
Binary files a/icons/mob/clothing/belt.dmi and b/icons/mob/clothing/belt.dmi differ
diff --git a/icons/mob/clothing/belt_mirror.dmi b/icons/mob/clothing/belt_mirror.dmi
index 9594f6227730f..1138dffc8bd31 100644
Binary files a/icons/mob/clothing/belt_mirror.dmi and b/icons/mob/clothing/belt_mirror.dmi differ
diff --git a/icons/mob/clothing/head/costume.dmi b/icons/mob/clothing/head/costume.dmi
index 1de2281271f80..09c11ca0acba3 100644
Binary files a/icons/mob/clothing/head/costume.dmi and b/icons/mob/clothing/head/costume.dmi differ
diff --git a/icons/mob/clothing/head/helmet.dmi b/icons/mob/clothing/head/helmet.dmi
index 116f0256a6276..579f4c53f0f97 100644
Binary files a/icons/mob/clothing/head/helmet.dmi and b/icons/mob/clothing/head/helmet.dmi differ
diff --git a/icons/mob/clothing/head/wizard.dmi b/icons/mob/clothing/head/wizard.dmi
index 785ed63ca5bde..cafde2136f740 100644
Binary files a/icons/mob/clothing/head/wizard.dmi and b/icons/mob/clothing/head/wizard.dmi differ
diff --git a/icons/mob/clothing/mask.dmi b/icons/mob/clothing/mask.dmi
index 5f577c7e255d9..0dad7a30d0b23 100644
Binary files a/icons/mob/clothing/mask.dmi and b/icons/mob/clothing/mask.dmi differ
diff --git a/icons/mob/clothing/suits/armor.dmi b/icons/mob/clothing/suits/armor.dmi
index eb7a525e4b78f..ea80204c2cdcc 100644
Binary files a/icons/mob/clothing/suits/armor.dmi and b/icons/mob/clothing/suits/armor.dmi differ
diff --git a/icons/mob/clothing/suits/wizard.dmi b/icons/mob/clothing/suits/wizard.dmi
index 454bc1f3cf1e6..9e8c8224130c0 100644
Binary files a/icons/mob/clothing/suits/wizard.dmi and b/icons/mob/clothing/suits/wizard.dmi differ
diff --git a/icons/mob/inhands/clothing/hats_lefthand.dmi b/icons/mob/inhands/clothing/hats_lefthand.dmi
index 4fa05fa6cd691..6ad1f8886c99e 100644
Binary files a/icons/mob/inhands/clothing/hats_lefthand.dmi and b/icons/mob/inhands/clothing/hats_lefthand.dmi differ
diff --git a/icons/mob/inhands/clothing/hats_righthand.dmi b/icons/mob/inhands/clothing/hats_righthand.dmi
index dfb0b71ef4bdc..3aba15568ef88 100644
Binary files a/icons/mob/inhands/clothing/hats_righthand.dmi and b/icons/mob/inhands/clothing/hats_righthand.dmi differ
diff --git a/icons/mob/inhands/equipment/belt_lefthand.dmi b/icons/mob/inhands/equipment/belt_lefthand.dmi
index 9f306a2777d2f..d5c4f7c4424b5 100644
Binary files a/icons/mob/inhands/equipment/belt_lefthand.dmi and b/icons/mob/inhands/equipment/belt_lefthand.dmi differ
diff --git a/icons/mob/inhands/equipment/belt_righthand.dmi b/icons/mob/inhands/equipment/belt_righthand.dmi
index 7b519f7cf69ea..0e0c7b817eed4 100644
Binary files a/icons/mob/inhands/equipment/belt_righthand.dmi and b/icons/mob/inhands/equipment/belt_righthand.dmi differ
diff --git a/icons/mob/inhands/equipment/shields_lefthand.dmi b/icons/mob/inhands/equipment/shields_lefthand.dmi
index 1aa27021b9ede..a19d5f46245e1 100644
Binary files a/icons/mob/inhands/equipment/shields_lefthand.dmi and b/icons/mob/inhands/equipment/shields_lefthand.dmi differ
diff --git a/icons/mob/inhands/equipment/shields_righthand.dmi b/icons/mob/inhands/equipment/shields_righthand.dmi
index 4227ba00792b4..b4d080345c536 100644
Binary files a/icons/mob/inhands/equipment/shields_righthand.dmi and b/icons/mob/inhands/equipment/shields_righthand.dmi differ
diff --git a/icons/mob/inhands/items/food_lefthand.dmi b/icons/mob/inhands/items/food_lefthand.dmi
index 8e2b19c4dd42a..5dabacf53dbf6 100644
Binary files a/icons/mob/inhands/items/food_lefthand.dmi and b/icons/mob/inhands/items/food_lefthand.dmi differ
diff --git a/icons/mob/inhands/items/food_righthand.dmi b/icons/mob/inhands/items/food_righthand.dmi
index 12063ad38a8f9..7cd6569508c8e 100644
Binary files a/icons/mob/inhands/items/food_righthand.dmi and b/icons/mob/inhands/items/food_righthand.dmi differ
diff --git a/icons/mob/inhands/items_lefthand.dmi b/icons/mob/inhands/items_lefthand.dmi
index 86bd5020f4f32..86396dcaa8c67 100644
Binary files a/icons/mob/inhands/items_lefthand.dmi and b/icons/mob/inhands/items_lefthand.dmi differ
diff --git a/icons/mob/inhands/items_righthand.dmi b/icons/mob/inhands/items_righthand.dmi
index a6de8b974644c..2cbe944aecc52 100644
Binary files a/icons/mob/inhands/items_righthand.dmi and b/icons/mob/inhands/items_righthand.dmi differ
diff --git a/icons/mob/inhands/weapons/staves_lefthand.dmi b/icons/mob/inhands/weapons/staves_lefthand.dmi
index 5e4eb552f2a5c..917b46ae8938a 100644
Binary files a/icons/mob/inhands/weapons/staves_lefthand.dmi and b/icons/mob/inhands/weapons/staves_lefthand.dmi differ
diff --git a/icons/mob/inhands/weapons/staves_righthand.dmi b/icons/mob/inhands/weapons/staves_righthand.dmi
index 9de32d8cd9533..da1765fe800c6 100644
Binary files a/icons/mob/inhands/weapons/staves_righthand.dmi and b/icons/mob/inhands/weapons/staves_righthand.dmi differ
diff --git a/icons/mob/inhands/weapons/swords_lefthand.dmi b/icons/mob/inhands/weapons/swords_lefthand.dmi
index b9552c754c082..82c98f057c0ec 100644
Binary files a/icons/mob/inhands/weapons/swords_lefthand.dmi and b/icons/mob/inhands/weapons/swords_lefthand.dmi differ
diff --git a/icons/mob/inhands/weapons/swords_righthand.dmi b/icons/mob/inhands/weapons/swords_righthand.dmi
index f132e997658cb..3f6e471e83e2f 100644
Binary files a/icons/mob/inhands/weapons/swords_righthand.dmi and b/icons/mob/inhands/weapons/swords_righthand.dmi differ
diff --git a/icons/mob/simple/corgi_head.dmi b/icons/mob/simple/corgi_head.dmi
index 2e14a3ed0bb5d..c07f1227a3de1 100644
Binary files a/icons/mob/simple/corgi_head.dmi and b/icons/mob/simple/corgi_head.dmi differ
diff --git a/icons/obj/clothing/belts.dmi b/icons/obj/clothing/belts.dmi
index 5ccdf2c186f89..14ed534744f6e 100644
Binary files a/icons/obj/clothing/belts.dmi and b/icons/obj/clothing/belts.dmi differ
diff --git a/icons/obj/clothing/head/helmet.dmi b/icons/obj/clothing/head/helmet.dmi
index fe52d505e439d..cc54b2bf92934 100644
Binary files a/icons/obj/clothing/head/helmet.dmi and b/icons/obj/clothing/head/helmet.dmi differ
diff --git a/icons/obj/clothing/head/wizard.dmi b/icons/obj/clothing/head/wizard.dmi
index 29595f02fc2ad..82ea73b68babd 100644
Binary files a/icons/obj/clothing/head/wizard.dmi and b/icons/obj/clothing/head/wizard.dmi differ
diff --git a/icons/obj/clothing/suits/armor.dmi b/icons/obj/clothing/suits/armor.dmi
index 0484cf060d033..b1763f5453ffe 100644
Binary files a/icons/obj/clothing/suits/armor.dmi and b/icons/obj/clothing/suits/armor.dmi differ
diff --git a/icons/obj/clothing/suits/wizard.dmi b/icons/obj/clothing/suits/wizard.dmi
index fcfa748d3b317..94fc99b01b47d 100644
Binary files a/icons/obj/clothing/suits/wizard.dmi and b/icons/obj/clothing/suits/wizard.dmi differ
diff --git a/icons/obj/food/meat.dmi b/icons/obj/food/meat.dmi
index 66761ee20298d..bf0b1df4f4cd2 100644
Binary files a/icons/obj/food/meat.dmi and b/icons/obj/food/meat.dmi differ
diff --git a/icons/obj/machines/telecomms.dmi b/icons/obj/machines/telecomms.dmi
index 1af082171ac16..f1380268c29cf 100644
Binary files a/icons/obj/machines/telecomms.dmi and b/icons/obj/machines/telecomms.dmi differ
diff --git a/icons/obj/pipes_n_cables/meter.dmi b/icons/obj/pipes_n_cables/meter.dmi
index 2aed35e065f49..0535fda8010bd 100644
Binary files a/icons/obj/pipes_n_cables/meter.dmi and b/icons/obj/pipes_n_cables/meter.dmi differ
diff --git a/icons/obj/service/hydroponics/growing_vegetables.dmi b/icons/obj/service/hydroponics/growing_vegetables.dmi
index 30f02e862e037..37ddd825a829d 100644
Binary files a/icons/obj/service/hydroponics/growing_vegetables.dmi and b/icons/obj/service/hydroponics/growing_vegetables.dmi differ
diff --git a/icons/obj/service/hydroponics/harvest.dmi b/icons/obj/service/hydroponics/harvest.dmi
index b15a34105dec2..dd3cd5865deeb 100644
Binary files a/icons/obj/service/hydroponics/harvest.dmi and b/icons/obj/service/hydroponics/harvest.dmi differ
diff --git a/icons/obj/service/hydroponics/seeds.dmi b/icons/obj/service/hydroponics/seeds.dmi
index 4de1a757e1fbc..c18c361b0ec0a 100644
Binary files a/icons/obj/service/hydroponics/seeds.dmi and b/icons/obj/service/hydroponics/seeds.dmi differ
diff --git a/icons/obj/weapons/bows/arrows.dmi b/icons/obj/weapons/bows/arrows.dmi
index 956a82dd9bf1f..b19c20187ebfa 100644
Binary files a/icons/obj/weapons/bows/arrows.dmi and b/icons/obj/weapons/bows/arrows.dmi differ
diff --git a/icons/obj/weapons/bows/bows.dmi b/icons/obj/weapons/bows/bows.dmi
index 4de9d4fca35ab..57d4237104266 100644
Binary files a/icons/obj/weapons/bows/bows.dmi and b/icons/obj/weapons/bows/bows.dmi differ
diff --git a/icons/obj/weapons/shields.dmi b/icons/obj/weapons/shields.dmi
index 99e9b06aa4000..eec85e9bea1ac 100644
Binary files a/icons/obj/weapons/shields.dmi and b/icons/obj/weapons/shields.dmi differ
diff --git a/icons/obj/weapons/stabby.dmi b/icons/obj/weapons/stabby.dmi
index 24d4e0aef31eb..be125b5f31d59 100644
Binary files a/icons/obj/weapons/stabby.dmi and b/icons/obj/weapons/stabby.dmi differ
diff --git a/icons/obj/weapons/staff.dmi b/icons/obj/weapons/staff.dmi
index 2d1460cf7e982..45c20ae17e5da 100644
Binary files a/icons/obj/weapons/staff.dmi and b/icons/obj/weapons/staff.dmi differ
diff --git a/icons/obj/weapons/sword.dmi b/icons/obj/weapons/sword.dmi
index d9a443cfc2699..9464c7b474585 100644
Binary files a/icons/obj/weapons/sword.dmi and b/icons/obj/weapons/sword.dmi differ
diff --git a/sound/items/attributions.txt b/sound/items/attributions.txt
index 31b573c105893..592b1855aaebc 100644
--- a/sound/items/attributions.txt
+++ b/sound/items/attributions.txt
@@ -5,7 +5,7 @@ cig_snuff.ogg
lighter_on.ogg
lighter_off.ogg
zippo_onn.ogg
-zippo_off.ogg
+zippo_off.ogg
} - Taken from https://github.com/BeeStation/BeeStation-Hornet/pull/29
pen_click.ogg from https://freesound.org/people/LexzachGames/sounds/431492/ , license: CC0
@@ -13,7 +13,7 @@ pen_click.ogg from https://freesound.org/people/LexzachGames/sounds/431492/ , li
night_vision_on.ogg by Syna-Max -- https://freesound.org/s/60345/ -- License: Attribution NonCommercial 4.0
{
-metal_drop.ogg - https://freesound.org/people/13FPanská_Tolar_David/sounds/378682/ , License: CC0
+metal_drop.ogg - https://freesound.org/people/Robinhood76/sounds/85418/ , License: CC BY-NC 4.0
metal_pick_up.ogg - https://freesound.org/people/Hotlavaman/sounds/108673/ , License: CC0
glass_drop.ogg - https://freesound.org/people/Hotlavaman/sounds/108673/ , License: CC0
glass_pick_up.ogg - https://freesound.org/people/tcrocker68/sounds/235602/ , License: CC0
@@ -22,4 +22,16 @@ wood_drop.ogg - https://freesound.org/people/cjosephwalker/sounds/94859/ , Licen
irod_rod_pick_up.ogg - https://freesound.org/people/lostphosphene/sounds/258265/ , License: CC BY 4.0
plastic_pick_up.ogg - https://freesound.org/people/Jessica190091/sounds/491304/ , License: CC BY 4.0
plastic_drop.ogg - https://freesound.org/people/martian/sounds/338854/ , License: CC0
-} - edited by sadboysuss
\ No newline at end of file
+} - edited by sadboysuss
+
+{
+ medkit_open.ogg - https://freesound.org/people/Jandre160108/sounds/365866/ , License: CC BY-NC 4.0
+ medkit_drop.ogg - https://freesound.org/people/Jandre160108/sounds/365866/ , License: CC BY-NC 4.0
+ medkit_pick_up.ogg - https://freesound.org/people/blouhond/sounds/440710/ , License: CC BY 4.0
+} - edited by sadboysuss
+
+{
+gas_tank_drop.ogg
+gas_tank_pick_up.ogg
+} - https://freesound.org/people/Globofonia/sounds/698346/ , License CC0
+edited by grungussuss
diff --git a/sound/items/gas_tank_drop.ogg b/sound/items/gas_tank_drop.ogg
new file mode 100644
index 0000000000000..e102cb4fe8aad
Binary files /dev/null and b/sound/items/gas_tank_drop.ogg differ
diff --git a/sound/items/gas_tank_pick_up.ogg b/sound/items/gas_tank_pick_up.ogg
new file mode 100644
index 0000000000000..41c83645da609
Binary files /dev/null and b/sound/items/gas_tank_pick_up.ogg differ
diff --git a/sound/items/medkit_drop.ogg b/sound/items/medkit_drop.ogg
new file mode 100644
index 0000000000000..227d4a8beb220
Binary files /dev/null and b/sound/items/medkit_drop.ogg differ
diff --git a/sound/items/medkit_open.ogg b/sound/items/medkit_open.ogg
new file mode 100644
index 0000000000000..63307783d2f77
Binary files /dev/null and b/sound/items/medkit_open.ogg differ
diff --git a/sound/items/medkit_pick_up.ogg b/sound/items/medkit_pick_up.ogg
new file mode 100644
index 0000000000000..e13c6848e44df
Binary files /dev/null and b/sound/items/medkit_pick_up.ogg differ
diff --git a/sound/items/metal_drop.ogg b/sound/items/metal_drop.ogg
index 48460e8cd37bf..46488dca29fd3 100644
Binary files a/sound/items/metal_drop.ogg and b/sound/items/metal_drop.ogg differ
diff --git a/sound/misc/license.txt b/sound/misc/license.txt
index 69ef29928202c..761a031d19081 100644
--- a/sound/misc/license.txt
+++ b/sound/misc/license.txt
@@ -5,4 +5,13 @@ knuckles.ogg by CGEffex. Shortened and cut.
https://freesound.org/people/CGEffex/sounds/93981/
airraid.ogg by Jwade722. Shortened and cut.
-https://freesound.org/people/Jwade722/sounds/534550/
\ No newline at end of file
+https://freesound.org/people/Jwade722/sounds/534550/
+
+radio_talk.ogg by cs2975871. Shortened and cut.
+https://freesound.org/people/cs2975871/sounds/514185/
+
+radio_important.ogg by morganpurkis.
+https://freesound.org/people/morganpurkis/sounds/392972/
+
+radio_receive.ogg by JovianSounds. Shortened and cut.
+https://freesound.org/people/JovianSounds/sounds/524205/
\ No newline at end of file
diff --git a/sound/misc/radio_important.ogg b/sound/misc/radio_important.ogg
new file mode 100644
index 0000000000000..bb6f769d6129b
Binary files /dev/null and b/sound/misc/radio_important.ogg differ
diff --git a/sound/misc/radio_receive.ogg b/sound/misc/radio_receive.ogg
new file mode 100644
index 0000000000000..6b2ee1ba4ef08
Binary files /dev/null and b/sound/misc/radio_receive.ogg differ
diff --git a/sound/misc/radio_talk.ogg b/sound/misc/radio_talk.ogg
new file mode 100644
index 0000000000000..50d14c897a0ef
Binary files /dev/null and b/sound/misc/radio_talk.ogg differ
diff --git a/tgstation.dme b/tgstation.dme
index 70d324b1e6898..366b2dd043ce2 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -51,7 +51,6 @@
#include "code\__DEFINES\basic_mobs.dm"
#include "code\__DEFINES\basketball.dm"
#include "code\__DEFINES\bitrunning.dm"
-#include "code\__DEFINES\blackmarket.dm"
#include "code\__DEFINES\blend_modes.dm"
#include "code\__DEFINES\blob_defines.dm"
#include "code\__DEFINES\blood.dm"
@@ -139,6 +138,7 @@
#include "code\__DEFINES\map_switch.dm"
#include "code\__DEFINES\mapping.dm"
#include "code\__DEFINES\maps.dm"
+#include "code\__DEFINES\market.dm"
#include "code\__DEFINES\maths.dm"
#include "code\__DEFINES\matrices.dm"
#include "code\__DEFINES\MC.dm"
@@ -301,7 +301,6 @@
#include "code\__DEFINES\dcs\signals\signals_backpack.dm"
#include "code\__DEFINES\dcs\signals\signals_beam.dm"
#include "code\__DEFINES\dcs\signals\signals_bitrunning.dm"
-#include "code\__DEFINES\dcs\signals\signals_blackmarket.dm"
#include "code\__DEFINES\dcs\signals\signals_blob.dm"
#include "code\__DEFINES\dcs\signals\signals_bot.dm"
#include "code\__DEFINES\dcs\signals\signals_camera.dm"
@@ -331,6 +330,7 @@
#include "code\__DEFINES\dcs\signals\signals_leash.dm"
#include "code\__DEFINES\dcs\signals\signals_lift.dm"
#include "code\__DEFINES\dcs\signals\signals_light_eater.dm"
+#include "code\__DEFINES\dcs\signals\signals_market.dm"
#include "code\__DEFINES\dcs\signals\signals_material_container.dm"
#include "code\__DEFINES\dcs\signals\signals_medical.dm"
#include "code\__DEFINES\dcs\signals\signals_mind.dm"
@@ -632,7 +632,6 @@
#include "code\controllers\subsystem\ban_cache.dm"
#include "code\controllers\subsystem\bitrunning.dm"
#include "code\controllers\subsystem\blackbox.dm"
-#include "code\controllers\subsystem\blackmarket.dm"
#include "code\controllers\subsystem\chat.dm"
#include "code\controllers\subsystem\circuit_component.dm"
#include "code\controllers\subsystem\dbcore.dm"
@@ -657,6 +656,7 @@
#include "code\controllers\subsystem\lua.dm"
#include "code\controllers\subsystem\machines.dm"
#include "code\controllers\subsystem\mapping.dm"
+#include "code\controllers\subsystem\market.dm"
#include "code\controllers\subsystem\materials.dm"
#include "code\controllers\subsystem\minor_mapping.dm"
#include "code\controllers\subsystem\mobs.dm"
@@ -2354,7 +2354,6 @@
#include "code\game\objects\items\maintenance_loot.dm"
#include "code\game\objects\items\manuals.dm"
#include "code\game\objects\items\mop.dm"
-#include "code\game\objects\items\nitrium_crystals.dm"
#include "code\game\objects\items\paint.dm"
#include "code\game\objects\items\paiwire.dm"
#include "code\game\objects\items\pet_carrier.dm"
@@ -3666,6 +3665,7 @@
#include "code\modules\cargo\exports\anomaly.dm"
#include "code\modules\cargo\exports\antiques.dm"
#include "code\modules\cargo\exports\civilain_bounty.dm"
+#include "code\modules\cargo\exports\fish.dm"
#include "code\modules\cargo\exports\food_and_drink.dm"
#include "code\modules\cargo\exports\gear.dm"
#include "code\modules\cargo\exports\large_objects.dm"
diff --git a/tgui/packages/tgui/interfaces/OperatingComputer.jsx b/tgui/packages/tgui/interfaces/OperatingComputer.jsx
index 990fddcadd96e..8a87840e89a02 100644
--- a/tgui/packages/tgui/interfaces/OperatingComputer.jsx
+++ b/tgui/packages/tgui/interfaces/OperatingComputer.jsx
@@ -103,28 +103,24 @@ const PatientStateView = (props) => {
{procedure.next_step}
- {procedure.chems_needed && (
- <>
-
-
- Required Chemicals:
-
- {procedure.chems_needed}
- >
- )}
+ {procedure.chems_needed && (
+
+
+ {procedure.chems_needed}
+
+
+ )}
{procedure.alternative_step && (
{procedure.alternative_step}
- {procedure.alt_chems_needed && (
- <>
-
-
- Required Chemicals:
-
- {procedure.alt_chems_needed}
- >
- )}
+
+ )}
+ {procedure.alt_chems_needed && (
+
+
+ {procedure.alt_chems_needed}
+
)}
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/sounds.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/sounds.tsx
index 6f0f81237e495..f190f6c238762 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/sounds.tsx
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/sounds.tsx
@@ -108,3 +108,11 @@ export const sound_achievement: FeatureChoiced = {
`,
component: FeatureDropdownInput,
};
+
+export const sound_radio_noise: FeatureToggle = {
+ name: 'Enable radio noise',
+ category: 'SOUND',
+ description:
+ 'When enabled, hear sounds of talking and hearing radio chatter.',
+ component: CheckboxInput,
+};