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, +};