diff --git a/_maps/RandomRuins/SpaceRuins/dangerous_research.dmm b/_maps/RandomRuins/SpaceRuins/dangerous_research.dmm index 289f1e6f188..737f835832b 100644 --- a/_maps/RandomRuins/SpaceRuins/dangerous_research.dmm +++ b/_maps/RandomRuins/SpaceRuins/dangerous_research.dmm @@ -1601,8 +1601,8 @@ /obj/structure/rack, /obj/effect/decal/cleanable/dirt, /obj/item/storage/toolbox/mechanical, -/obj/item/ammo_box/c38, -/obj/item/ammo_box/c38, +/obj/item/ammo_box/speedloader/c38, +/obj/item/ammo_box/speedloader/c38, /obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ dir = 1 }, @@ -3661,7 +3661,7 @@ /obj/structure/window/reinforced/spawner/directional/south, /obj/effect/spawner/random/contraband/permabrig_weapon, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/item/ammo_box/c38, +/obj/item/ammo_box/speedloader/c38, /obj/effect/turf_decal/tile/dark_red/anticorner, /turf/open/floor/iron/dark, /area/ruin/space/has_grav/dangerous_research) diff --git a/_maps/RandomRuins/SpaceRuins/dragoontomb.dmm b/_maps/RandomRuins/SpaceRuins/dragoontomb.dmm index eb168fbedc7..459e2a312c1 100644 --- a/_maps/RandomRuins/SpaceRuins/dragoontomb.dmm +++ b/_maps/RandomRuins/SpaceRuins/dragoontomb.dmm @@ -28,7 +28,7 @@ /obj/item/clothing/shoes/workboots/mining, /obj/item/clothing/gloves/color/black, /obj/effect/mob_spawn/corpse/human/charredskeleton, -/obj/item/borg/sight/meson, +/obj/item/clothing/glasses/meson, /obj/item/pickaxe/improvised, /turf/open/misc/asteroid/basalt/airless, /area/ruin/unpowered/no_grav) diff --git a/_maps/RandomRuins/SpaceRuins/oldstation.dmm b/_maps/RandomRuins/SpaceRuins/oldstation.dmm index a318ac21998..22deb912f32 100644 --- a/_maps/RandomRuins/SpaceRuins/oldstation.dmm +++ b/_maps/RandomRuins/SpaceRuins/oldstation.dmm @@ -5093,8 +5093,8 @@ /obj/item/spess_knife, /obj/item/clothing/suit/armor/vest/old, /obj/item/gun/ballistic/rifle/boltaction, -/obj/item/ammo_box/strilka310, -/obj/item/ammo_box/strilka310, +/obj/item/ammo_box/speedloader/strilka310, +/obj/item/ammo_box/speedloader/strilka310, /turf/open/floor/plating, /area/ruin/space/ancientstation/delta/hall) "Cc" = ( diff --git a/_maps/RandomZLevels/museum.dmm b/_maps/RandomZLevels/museum.dmm index 29db691e5af..4c7fe9782de 100644 --- a/_maps/RandomZLevels/museum.dmm +++ b/_maps/RandomZLevels/museum.dmm @@ -103,7 +103,7 @@ /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/cobweb, /turf/open/floor/iron/white/small, -/area/awaymission/museum) +/area/awaymission/museum/cafeteria) "aR" = ( /obj/effect/turf_decal/tile/neutral/opposingcorners, /obj/effect/turf_decal/siding/dark_blue{ @@ -264,7 +264,7 @@ /obj/effect/turf_decal/tile/neutral/opposingcorners, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron/dark, -/area/awaymission/museum) +/area/awaymission/museum/cafeteria) "cm" = ( /obj/machinery/door/airlock/grunge, /obj/structure/barricade/wooden/crude, @@ -815,7 +815,7 @@ "gE" = ( /obj/item/clothing/suit/caution, /turf/open/floor/iron/white/small, -/area/awaymission/museum) +/area/awaymission/museum/cafeteria) "gG" = ( /obj/effect/turf_decal/siding/dark_blue/corner{ dir = 4 @@ -952,7 +952,7 @@ dir = 5 }, /turf/open/floor/iron/dark, -/area/awaymission/museum) +/area/awaymission/museum/cafeteria) "hT" = ( /mob/living/basic/statue/mannequin{ name = "Dale Knox"; @@ -983,6 +983,9 @@ }, /turf/open/floor/engine, /area/awaymission/museum) +"ia" = ( +/turf/open/floor/iron/white/small, +/area/awaymission/museum/cafeteria) "il" = ( /obj/structure/table/wood, /obj/item/clothing/suit/costume/judgerobe, @@ -1160,7 +1163,7 @@ name = "Restrooms" }, /turf/open/floor/iron/dark, -/area/awaymission/museum) +/area/awaymission/museum/cafeteria) "jy" = ( /mob/living/basic/statue/mannequin{ name = "Dale Knox"; @@ -1183,7 +1186,7 @@ queue_id = "museum_right_wing" }, /turf/closed/indestructible/reinforced, -/area/awaymission/museum) +/area/awaymission/museum/cafeteria) "jF" = ( /obj/machinery/suit_storage_unit/open, /obj/effect/turf_decal/box, @@ -1315,7 +1318,7 @@ name = "Restrooms" }, /turf/open/floor/iron, -/area/awaymission/museum) +/area/awaymission/museum/cafeteria) "kA" = ( /obj/machinery/conveyor{ dir = 1 @@ -1332,7 +1335,7 @@ id = "museum_cafeteria" }, /turf/open/floor/iron, -/area/awaymission/museum) +/area/awaymission/museum/cafeteria) "kO" = ( /obj/structure/railing{ dir = 8 @@ -1740,7 +1743,7 @@ "nY" = ( /obj/structure/sign/poster/official/no_erp/directional/north, /turf/open/floor/iron/white/small, -/area/awaymission/museum) +/area/awaymission/museum/cafeteria) "nZ" = ( /obj/structure/chair/sofa/bench/left{ dir = 1 @@ -1831,7 +1834,7 @@ queue_id = "museum_cafeteria" }, /turf/closed/indestructible/reinforced, -/area/awaymission/museum) +/area/awaymission/museum/cafeteria) "oQ" = ( /turf/open/floor/holofloor/beach/coast{ dir = 1 @@ -1914,7 +1917,7 @@ id = "museum_cafeteria" }, /turf/open/floor/iron, -/area/awaymission/museum) +/area/awaymission/museum/cafeteria) "pD" = ( /obj/structure/broken_flooring/corner/always_floorplane/directional/west, /obj/effect/decal/cleanable/dirt/dust, @@ -1954,7 +1957,7 @@ dir = 4 }, /turf/open/floor/iron/dark, -/area/awaymission/museum) +/area/awaymission/museum/cafeteria) "pX" = ( /obj/structure/rack, /obj/effect/spawner/random/maintenance/two, @@ -2317,6 +2320,13 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/engine, /area/awaymission/museum) +"sR" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 10 + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum/cafeteria) "sX" = ( /obj/effect/turf_decal/tile/neutral/opposingcorners, /obj/effect/turf_decal/siding/dark_blue{ @@ -2522,7 +2532,7 @@ /obj/structure/tank_holder/extinguisher/anti, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/iron/white/small, -/area/awaymission/museum) +/area/awaymission/museum/cafeteria) "up" = ( /obj/effect/turf_decal/siding/wood{ dir = 4 @@ -2538,7 +2548,7 @@ id_tag = "museum_toilet2" }, /turf/open/floor/iron, -/area/awaymission/museum) +/area/awaymission/museum/cafeteria) "ut" = ( /obj/machinery/light/very_dim/directional/north, /obj/effect/decal/cleanable/dirt/dust, @@ -2546,7 +2556,7 @@ /obj/structure/mop_bucket, /obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/iron/white/small, -/area/awaymission/museum) +/area/awaymission/museum/cafeteria) "uu" = ( /obj/structure/rack, /obj/effect/spawner/random/engineering/material, @@ -2711,7 +2721,7 @@ note_info = "I'VE WORKED HERE FOR 7 YEARS! JUST TO BE REPLACED BY A VENDING MACHINE?! YOU KNOW WHAT? FUCK YOU, I'VE LOCKED DOWN THE CAFETERIA AND WON'T BE COMING OUT 'TILL YOU GIVE ME MY JOB BACK!" }, /turf/open/floor/iron, -/area/awaymission/museum) +/area/awaymission/museum/cafeteria) "wh" = ( /obj/structure/broken_flooring/corner/always_floorplane/directional/west, /obj/structure/lattice, @@ -2723,7 +2733,7 @@ id = "museum_right_wing" }, /turf/open/floor/iron, -/area/awaymission/museum) +/area/awaymission/museum/cafeteria) "wk" = ( /obj/machinery/vending/dinnerware, /turf/open/floor/iron/freezer, @@ -2805,7 +2815,7 @@ }, /obj/effect/turf_decal/tile/neutral/opposingcorners, /turf/open/floor/iron/dark, -/area/awaymission/museum) +/area/awaymission/museum/cafeteria) "wZ" = ( /turf/open/misc/beach/coast{ dir = 1 @@ -3547,7 +3557,7 @@ /obj/structure/mirror/directional/east, /obj/structure/sink/directional/west, /turf/open/floor/iron/white/small, -/area/awaymission/museum) +/area/awaymission/museum/cafeteria) "CI" = ( /obj/effect/turf_decal/caution, /obj/effect/decal/cleanable/dirt/dust, @@ -3973,7 +3983,7 @@ dir = 4 }, /turf/open/floor/iron/dark, -/area/awaymission/museum) +/area/awaymission/museum/cafeteria) "FY" = ( /obj/structure/chair/sofa/bench/left, /turf/open/floor/iron/cafeteria, @@ -4156,7 +4166,7 @@ id = "museum_right_wing" }, /turf/open/floor/iron/dark, -/area/awaymission/museum) +/area/awaymission/museum/cafeteria) "HE" = ( /obj/effect/turf_decal/siding/dark_blue{ dir = 1 @@ -4210,7 +4220,7 @@ }, /obj/machinery/light/small/dim/directional/west, /turf/open/floor/iron/white/small, -/area/awaymission/museum) +/area/awaymission/museum/cafeteria) "HY" = ( /obj/machinery/light/floor, /obj/effect/decal/cleanable/dirt/dust, @@ -4242,7 +4252,7 @@ /area/awaymission/museum) "Ir" = ( /turf/closed/indestructible/fakedoor, -/area/awaymission/museum) +/area/awaymission/museum/cafeteria) "Iu" = ( /turf/open/floor/mineral/titanium/blue, /area/awaymission/museum) @@ -4369,7 +4379,7 @@ id_tag = "museum_toilet1" }, /turf/open/floor/iron, -/area/awaymission/museum) +/area/awaymission/museum/cafeteria) "Js" = ( /obj/effect/turf_decal/tile/neutral/opposingcorners, /obj/effect/turf_decal/siding/dark_blue{ @@ -4493,7 +4503,7 @@ content = list("Instructions; stand upright; remove safety clip; aim noozle at base of fire... the rest is up to you.") }, /turf/open/floor/iron/white/small, -/area/awaymission/museum) +/area/awaymission/museum/cafeteria) "KB" = ( /obj/structure/sign/warning/no_smoking/circle/directional/east, /turf/open/floor/iron/cafeteria, @@ -4623,7 +4633,7 @@ /obj/effect/turf_decal/siding/dark_blue, /obj/effect/turf_decal/tile/neutral/opposingcorners, /turf/open/floor/iron/dark, -/area/awaymission/museum) +/area/awaymission/museum/cafeteria) "Mg" = ( /obj/structure/plaque/static_plaque/golden/commission/tram, /turf/closed/indestructible/reinforced, @@ -4971,6 +4981,12 @@ }, /turf/open/indestructible/plating, /area/awaymission/museum) +"PI" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark, +/area/awaymission/museum/cafeteria) "PK" = ( /obj/machinery/door/poddoor{ id = "gatewayfake" @@ -5291,7 +5307,7 @@ /obj/effect/decal/cleanable/dirt/dust, /obj/structure/fluff/fake_scrubber, /turf/open/floor/iron/white/small, -/area/awaymission/museum) +/area/awaymission/museum/cafeteria) "So" = ( /obj/machinery/shower/directional/east, /turf/open/floor/iron/white/textured_large, @@ -5340,7 +5356,7 @@ late_initialize_pop = 1 }, /turf/open/floor/iron/dark, -/area/awaymission/museum) +/area/awaymission/museum/cafeteria) "SU" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/item/stack/spacecash/c1000, @@ -5491,6 +5507,10 @@ /obj/structure/fluff/fake_scrubber, /turf/open/floor/iron, /area/awaymission/museum) +"Up" = ( +/obj/machinery/light/floor, +/turf/open/floor/iron, +/area/awaymission/museum/cafeteria) "Uq" = ( /obj/effect/smooths_with_walls, /turf/cordon/secret, @@ -5543,7 +5563,7 @@ /obj/structure/sink/directional/west, /obj/effect/decal/cleanable/blood/oil/slippery, /turf/open/floor/iron/white/small, -/area/awaymission/museum) +/area/awaymission/museum/cafeteria) "UI" = ( /obj/effect/turf_decal/tile/green/opposingcorners, /obj/effect/decal/cleanable/dirt/dust, @@ -5878,7 +5898,7 @@ }, /obj/machinery/light/small/dim/directional/west, /turf/open/floor/iron/white/small, -/area/awaymission/museum) +/area/awaymission/museum/cafeteria) "WZ" = ( /obj/structure/chair/sofa/bench{ dir = 1 @@ -6026,7 +6046,7 @@ /obj/effect/decal/cleanable/dirt/dust, /obj/structure/fluff/fake_camera, /turf/open/floor/iron/white/small, -/area/awaymission/museum) +/area/awaymission/museum/cafeteria) "Yr" = ( /obj/effect/turf_decal/tile/neutral/opposingcorners, /obj/structure/table/reinforced, @@ -43388,11 +43408,11 @@ re re re re -FK +Ph HD wi ST -FK +Ph re re re @@ -43637,17 +43657,17 @@ re re re re -FK -FK -FK -FK -FK -FK -FK +Ph +Ph +Ph +Ph +Ph +Ph +Ph re -FK -aa -uY +Ph +PI +ms ci jC re @@ -43894,19 +43914,19 @@ re re re re -FK +Ph aO -FK +Ph WY -FK +Ph HW -FK -FK -FK +Ph +Ph +Ph Mb -TM +Up wV -FK +Ph re re re @@ -44151,19 +44171,19 @@ re re re re -FK +Ph wg -FK +Ph us -FK +Ph Jp -FK +Ph um -FK +Ph Mb -uY +ms wV -FK +Ph re re re @@ -44408,17 +44428,17 @@ re re re re -FK -Gn -Gn -Gn +Ph +ia +ia +ia Sm -Gn +ia Kz -Gn -FK +ia +Ph ju -uY +ms ci Ir re @@ -44665,19 +44685,19 @@ re re re re -FK +Ph nY -Gn -Gn -Gn -Gn -Gn -Gn +ia +ia +ia +ia +ia +ia kx -uY -uY +ms +ms wV -FK +Ph re re re @@ -44922,19 +44942,19 @@ re re re re -FK +Ph ut UH gE CG -Gn +ia CG Yn -FK -RC -TM +Ph +sR +Up FU -FK +Ph re re re @@ -45179,19 +45199,19 @@ re re re re -FK -FK -FK -FK -FK -FK -FK -FK -FK +Ph +Ph +Ph +Ph +Ph +Ph +Ph +Ph +Ph Mb -uY +ms wV -FK +Ph Uq re re @@ -45444,9 +45464,9 @@ re re re re -FK +Ph pN -uY +ms hS oP re @@ -45701,11 +45721,11 @@ re re re re -FK -FK +Ph +Ph pz kL -FK +Ph re re re diff --git a/_maps/RandomZLevels/snowdin.dmm b/_maps/RandomZLevels/snowdin.dmm index 8c4f46d49b9..3bcd5ec4a1c 100644 --- a/_maps/RandomZLevels/snowdin.dmm +++ b/_maps/RandomZLevels/snowdin.dmm @@ -2113,8 +2113,8 @@ /area/awaymission/snowdin/post/hydro) "hZ" = ( /obj/item/gun/ballistic/rifle/boltaction, -/obj/item/ammo_box/strilka310, -/obj/item/ammo_box/strilka310, +/obj/item/ammo_box/speedloader/strilka310, +/obj/item/ammo_box/speedloader/strilka310, /obj/structure/closet/secure_closet{ icon_state = "sec"; name = "security officer's locker"; diff --git a/_maps/map_files/CatwalkStation/CatwalkStation_2023.dmm b/_maps/map_files/CatwalkStation/CatwalkStation_2023.dmm index 8b3fcbe2d90..f6c85f0ddc4 100644 --- a/_maps/map_files/CatwalkStation/CatwalkStation_2023.dmm +++ b/_maps/map_files/CatwalkStation/CatwalkStation_2023.dmm @@ -36029,12 +36029,9 @@ /turf/open/floor/plating, /area/station/engineering/atmos/project) "kpz" = ( -/obj/structure/rack, -/obj/item/aicard, -/obj/item/pai_card, -/obj/item/circuitboard/aicore, /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, +/obj/machinery/modular_computer/preset/research, /turf/open/floor/wood, /area/station/command/heads_quarters/rd) "kpC" = ( @@ -39959,6 +39956,10 @@ /area/station/commons/fitness/recreation) "lAu" = ( /obj/structure/cable, +/obj/structure/rack, +/obj/item/aicard, +/obj/item/pai_card, +/obj/item/circuitboard/aicore, /turf/open/floor/wood, /area/station/command/heads_quarters/rd) "lAE" = ( @@ -82589,7 +82590,7 @@ /turf/open/floor/iron, /area/station/hallway/primary/aft) "xZp" = ( -/obj/machinery/computer/rdconsole, +/obj/machinery/modular_computer/preset/research, /turf/open/floor/carpet, /area/station/command/bridge) "xZG" = ( diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index 5740dabcd25..2190c7772c4 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -15709,10 +15709,10 @@ }, /area/station/hallway/primary/fore) "dRh" = ( -/obj/machinery/telecomms/bus/preset_four, /obj/effect/turf_decal/tile/brown/anticorner/contrasted{ dir = 1 }, +/obj/machinery/telecomms/bus/preset_two, /turf/open/floor/iron/telecomms, /area/station/tcommsat/server) "dRo" = ( @@ -39973,10 +39973,10 @@ /turf/open/floor/iron, /area/station/security/range) "jPC" = ( -/obj/machinery/telecomms/bus/preset_two, /obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ dir = 4 }, +/obj/machinery/telecomms/bus/preset_four, /turf/open/floor/iron/telecomms, /area/station/tcommsat/server) "jPE" = ( @@ -47677,9 +47677,6 @@ /area/station/engineering/atmos/mix) "lKk" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/siding/green/corner{ - dir = 4 - }, /obj/effect/decal/cleanable/dirt, /obj/effect/landmark/event_spawn, /turf/open/floor/iron, diff --git a/_maps/map_files/IceBoxStation/IceBoxStation.dmm b/_maps/map_files/IceBoxStation/IceBoxStation.dmm index da696f331ce..7bee4abe142 100644 --- a/_maps/map_files/IceBoxStation/IceBoxStation.dmm +++ b/_maps/map_files/IceBoxStation/IceBoxStation.dmm @@ -27799,7 +27799,7 @@ /obj/item/reagent_containers/cup/glass/drinkingglass/shotglass, /obj/item/reagent_containers/cup/glass/drinkingglass/shotglass, /obj/item/gun/ballistic/revolver/russian, -/obj/item/ammo_box/a357, +/obj/item/ammo_box/speedloader/c357, /obj/item/reagent_containers/cup/glass/bottle/vodka/badminka, /obj/effect/turf_decal/bot_white/left, /obj/effect/turf_decal/tile/neutral/fourcorners, diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index ecd4982df27..0f440feea26 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -36,6 +36,18 @@ /obj/effect/spawner/random/engineering/atmospherics_portable, /turf/open/floor/plating, /area/station/maintenance/port/greater) +"aas" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/science/xenobiology/hallway) "aaz" = ( /obj/effect/spawner/random/trash/cigbutt, /obj/effect/turf_decal/trimline/yellow/filled/line{ @@ -51,14 +63,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"abc" = ( -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "abI" = ( /obj/structure/chair/stool/directional/south, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -192,6 +196,14 @@ /obj/structure/lattice/catwalk, /turf/open/space/basic, /area/station/solars/port/aft) +"aeh" = ( +/obj/structure/table/wood, +/obj/effect/spawner/random/food_or_drink/booze{ + spawn_random_offset = 1 + }, +/obj/machinery/duct, +/turf/open/floor/wood, +/area/station/maintenance/port/aft) "aej" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -199,6 +211,14 @@ "aeq" = ( /turf/closed/wall/r_wall, /area/station/ai_monitored/security/armory) +"aer" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "aeu" = ( /obj/effect/decal/cleanable/cobweb, /obj/item/kirbyplants/organic/plant20{ @@ -209,14 +229,6 @@ }, /turf/open/floor/iron, /area/station/engineering/main) -"aez" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, -/obj/machinery/duct, -/turf/open/floor/iron/dark/textured, -/area/station/medical/cryo) "afj" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 1 @@ -496,22 +508,27 @@ /obj/machinery/vending/drugs, /turf/open/floor/iron/dark, /area/station/medical/medbay/central) -"ajK" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ +"akb" = ( +/obj/effect/turf_decal/stripes/line{ dir = 8 }, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/junction/flip, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/starboard/greater) +"ake" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ dir = 4 }, -/obj/effect/turf_decal/trimline/blue/filled/mid_joiner{ - dir = 1 - }, +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, -/turf/open/floor/iron/white/smooth_half, -/area/station/medical/cryo) +/turf/open/floor/iron/white, +/area/station/security/prison) "aks" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/neutral{ @@ -914,19 +931,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"ark" = ( -/obj/structure/cable, -/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/effect/turf_decal/tile/green/half/contrasted{ - dir = 4 - }, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/medical/virology) "art" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -1197,16 +1201,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/wood, /area/station/maintenance/port/aft) -"axK" = ( -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/security/prison) "axO" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 4 @@ -1386,16 +1380,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/command/gateway) -"aAQ" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "aAS" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -1420,6 +1404,11 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/plating, /area/station/engineering/supermatter/room) +"aBF" = ( +/obj/structure/cable, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/security/checkpoint/supply) "aBL" = ( /obj/effect/spawner/structure/window, /obj/structure/cable, @@ -1652,10 +1641,6 @@ /obj/effect/spawner/random/bureaucracy/paper, /turf/open/floor/wood, /area/station/commons/dorms) -"aFz" = ( -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/port) "aFI" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -1898,20 +1883,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/main) -"aJm" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/spawner/random/structure/closet_maintenance, -/obj/effect/spawner/random/maintenance/three, -/turf/open/floor/plating, -/area/station/maintenance/starboard/greater) -"aJn" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/maintenance/starboard/greater) "aJv" = ( /obj/structure/sign/warning/fire, /turf/closed/wall/r_wall, @@ -2176,13 +2147,6 @@ /obj/effect/turf_decal/tile/blue, /turf/open/floor/iron/dark, /area/station/command/bridge) -"aNH" = ( -/obj/effect/turf_decal/siding/purple{ - dir = 1 - }, -/obj/machinery/wall_healer/directional/south, -/turf/open/floor/iron/white, -/area/station/science/research) "aNN" = ( /obj/machinery/airalarm/directional/south, /obj/machinery/disposal/bin, @@ -2672,28 +2636,37 @@ }, /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/ai) +"aWS" = ( +/obj/structure/table/reinforced, +/obj/item/book/manual/wiki/engineering_hacking{ + pixel_x = 2; + pixel_y = 3 + }, +/obj/item/book/manual/wiki/engineering_guide{ + pixel_x = -2 + }, +/obj/item/trash/can{ + pixel_x = -8 + }, +/obj/machinery/firealarm/directional/south, +/obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted, +/obj/machinery/wall_healer/directional/east, +/turf/open/floor/iron, +/area/station/engineering/break_room) "aXa" = ( /turf/closed/wall, /area/station/security/prison/mess) -"aXE" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Service Maintenance" - }, -/obj/structure/disposalpipe/segment, -/obj/structure/cable, +"aXA" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "service-passthrough" - }, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 1 - }, -/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/structure/cable, +/obj/effect/turf_decal/tile/red/opposingcorners, /obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/starboard/greater) +/turf/open/floor/iron/white, +/area/station/security/prison/mess) "aXF" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/bed, @@ -2959,6 +2932,20 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"baR" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/duct, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/machinery/wall_healer/directional/north, +/turf/open/floor/iron, +/area/station/hallway/secondary/service) "bbd" = ( /obj/machinery/duct, /obj/effect/turf_decal/trimline/blue/filled/line{ @@ -2975,12 +2962,6 @@ }, /turf/open/floor/iron, /area/station/engineering/break_room) -"bbt" = ( -/obj/structure/girder, -/obj/effect/spawner/random/structure/grille, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "bbT" = ( /obj/structure/closet/crate, /obj/item/stack/cable_coil, @@ -3063,15 +3044,6 @@ /obj/effect/turf_decal/siding, /turf/open/floor/iron, /area/station/science/lab) -"bdy" = ( -/obj/effect/turf_decal/trimline/blue/filled/corner{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/medical/surgery/theatre) "bdE" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/rack, @@ -3155,14 +3127,6 @@ }, /turf/open/floor/engine/plasma, /area/station/engineering/atmos) -"bfg" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/duct, -/turf/open/floor/iron/white/smooth_large, -/area/station/medical/surgery/aft) "bfj" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -3582,6 +3546,12 @@ }, /turf/open/floor/iron, /area/station/command/gateway) +"bmx" = ( +/obj/structure/mirror/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/commons/toilet/auxiliary) "bmB" = ( /obj/machinery/light_switch/directional/south, /obj/effect/turf_decal/tile/red/opposingcorners, @@ -3624,19 +3594,6 @@ /obj/machinery/light_switch/directional/south, /turf/open/floor/iron/white, /area/station/medical/office) -"bns" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Prison Cafeteria" - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor, -/obj/structure/cable, -/obj/effect/turf_decal/tile/red/opposingcorners, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/security/prison/mess) "bnx" = ( /obj/effect/turf_decal/tile/blue{ dir = 1 @@ -3826,6 +3783,13 @@ /obj/effect/turf_decal/tile/purple, /turf/open/floor/iron, /area/station/hallway/primary/central) +"bpM" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/sign/poster/contraband/random/directional/north, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port) "bpY" = ( /obj/machinery/light/small/directional/west, /obj/item/clothing/mask/animal/horsehead, @@ -3854,29 +3818,11 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, /turf/open/floor/iron/dark, /area/station/engineering/atmospherics_engine) -"bqs" = ( -/obj/structure/cable, -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/station/security/checkpoint/supply) "bqC" = ( /obj/structure/table/wood, /obj/item/cigarette/pipe, /turf/open/floor/wood, /area/station/commons/lounge) -"bqJ" = ( -/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 = 4 - }, -/obj/effect/turf_decal/siding/purple/corner{ - dir = 4 - }, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/science/cytology) "bqX" = ( /turf/closed/wall/r_wall, /area/station/medical/chemistry) @@ -3989,42 +3935,19 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/station/service/theater) -"bsE" = ( +"bsV" = ( /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/sorting/mail{ - dir = 4 - }, -/obj/effect/mapping_helpers/mail_sorting/science/xenobiology, -/obj/effect/turf_decal/tile/purple/half/contrasted{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, /obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "bsZ" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/station/maintenance/aft/greater) -"btn" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "btx" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -4175,6 +4098,28 @@ }, /turf/open/floor/iron, /area/station/commons/locker) +"bvg" = ( +/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, +/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/effect/turf_decal/tile/purple/half/contrasted{ + dir = 8 + }, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/science/cytology) "bvJ" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -4183,6 +4128,16 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/science/robotics/lab) +"bvX" = ( +/obj/structure/cable, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "QM Privacy Shutters"; + id = "qmroom"; + dir = 8 + }, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/command/heads_quarters/qm) "bvY" = ( /obj/machinery/power/tracker, /obj/structure/cable, @@ -4207,11 +4162,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/grimy, /area/station/service/chapel/office) -"bwi" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "bwr" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -4261,17 +4211,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/commons/locker) -"bxq" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "bxr" = ( /obj/structure/sign/warning/electric_shock/directional/east, /turf/open/space/basic, @@ -4426,6 +4365,14 @@ /obj/effect/mapping_helpers/airlock/access/all/security/entrance, /turf/open/floor/iron, /area/station/security/brig) +"bAp" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/maintenance/starboard/greater) "bAA" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -4554,12 +4501,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/command) -"bCE" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/duct, -/turf/open/floor/wood, -/area/station/maintenance/port/aft) "bCM" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -4922,16 +4863,6 @@ /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/storage) -"bJg" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "bJk" = ( /obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/blue/filled/line{ @@ -5037,6 +4968,14 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron, /area/station/security/prison/garden) +"bKW" = ( +/obj/machinery/door/window/left/directional/south{ + name = "Permabrig Kitchen" + }, +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/security/prison/mess) "bLd" = ( /turf/closed/wall, /area/station/maintenance/starboard/aft) @@ -5075,6 +5014,15 @@ /obj/structure/window/reinforced/spawner/directional/west, /turf/open/floor/plating/airless, /area/space/nearstation) +"bLV" = ( +/obj/effect/spawner/structure/window, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; + name = "Cargo Lockdown Shutters"; + id = "cargolockdown" + }, +/turf/open/floor/plating, +/area/station/cargo/lobby) "bMa" = ( /obj/structure/disposaloutlet{ dir = 4; @@ -5240,6 +5188,16 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron, /area/station/maintenance/port/aft) +"bOX" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/security/prison) "bPi" = ( /obj/structure/chair/office{ dir = 8 @@ -5347,13 +5305,6 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/iron, /area/station/security/brig) -"bRG" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/commons/toilet/auxiliary) "bRH" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line{ @@ -5574,36 +5525,6 @@ /obj/effect/turf_decal/tile/red/opposingcorners, /turf/open/floor/iron/white, /area/station/security/prison/mess) -"bVK" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/locked, -/obj/machinery/door/airlock/virology{ - autoclose = 0; - frequency = 1449; - id_tag = "virology_airlock_interior"; - name = "Virology Interior Airlock" - }, -/obj/machinery/door_buttons/access_button{ - idDoor = "virology_airlock_interior"; - idSelf = "virology_airlock_control"; - name = "Virology Access Button"; - pixel_x = 8; - pixel_y = -24; - req_access = list("virology") - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/airlock/access/all/medical/virology, -/obj/machinery/door/firedoor, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/medical/virology) "bWe" = ( /obj/structure/table/glass, /obj/structure/reagent_dispensers/wall/virusfood/directional/west, @@ -5865,6 +5786,18 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/cargo/sorting) +"caK" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/landmark/event_spawn, +/obj/effect/turf_decal/trimline/purple, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "caO" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -6033,15 +5966,6 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron, /area/station/hallway/primary/central) -"cfc" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/landmark/generic_maintenance_landmark, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "cfe" = ( /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=8-Central-to-Aft"; @@ -6156,6 +6080,11 @@ }, /turf/closed/wall, /area/station/maintenance/central) +"cig" = ( +/obj/structure/sign/warning/hot_temp/directional/south, +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/plating, +/area/station/maintenance/starboard/greater) "cii" = ( /obj/structure/disposalpipe/segment{ dir = 10 @@ -6345,6 +6274,21 @@ }, /turf/open/floor/iron/white, /area/station/science/ordnance/storage) +"cmp" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light/directional/west, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) +"cmy" = ( +/obj/machinery/door/airlock{ + id_tag = "Toilet1"; + name = "Unit 1" + }, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) "cmB" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -6647,14 +6591,6 @@ }, /turf/open/floor/iron/white/corner, /area/station/hallway/secondary/entry) -"crl" = ( -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 8 - }, -/obj/item/radio/intercom/prison/directional/west, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/security/prison) "crr" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -6672,14 +6608,6 @@ }, /turf/open/floor/iron/cafeteria, /area/station/commons/dorms) -"csb" = ( -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 8 - }, -/obj/machinery/door/firedoor, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/security/prison) "csn" = ( /obj/effect/turf_decal/bot_white/right, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -7011,6 +6939,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/science/robotics/lab) +"cwD" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port) "cwF" = ( /obj/structure/sink/directional/west, /obj/structure/mirror/directional/east, @@ -7264,6 +7199,13 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"czZ" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/machinery/duct, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/surgery/aft) "cAf" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -7520,6 +7462,15 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/commons/storage/primary) +"cFq" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/starboard/greater) "cFr" = ( /obj/structure/table, /obj/machinery/status_display/evac/directional/east, @@ -7628,6 +7579,17 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"cHZ" = ( +/obj/machinery/light/small/directional/south, +/obj/machinery/button/door/directional/south{ + id = "FitnessShower"; + name = "Lock Control"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/commons/fitness/recreation) "cId" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ @@ -7656,6 +7618,20 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"cIE" = ( +/obj/machinery/light/directional/west, +/obj/machinery/piratepad/civilian, +/obj/effect/turf_decal/bot_white, +/obj/effect/turf_decal/tile/brown{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "cIK" = ( /obj/machinery/smartfridge/chemistry/preloaded, /obj/effect/turf_decal/tile/yellow/fourcorners, @@ -7783,6 +7759,11 @@ }, /turf/open/floor/plating/reinforced, /area/station/cargo/storage) +"cKG" = ( +/obj/machinery/light_switch/directional/north, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/security/prison/shower) "cKN" = ( /obj/structure/table/wood, /obj/structure/cable, @@ -7866,6 +7847,16 @@ /obj/machinery/firealarm/directional/east, /turf/open/floor/iron/white/corner, /area/station/hallway/secondary/entry) +"cMr" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/airlock{ + id_tag = "AuxShower"; + name = "Showers" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/commons/toilet/auxiliary) "cMG" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -7920,6 +7911,16 @@ }, /turf/open/floor/iron/white, /area/station/command/heads_quarters/cmo) +"cNl" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/wall_healer/directional/west, +/turf/open/floor/iron, +/area/station/hallway/primary/port) "cNA" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -8020,6 +8021,14 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron/dark, /area/station/security/mechbay) +"cQo" = ( +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 1 + }, +/obj/machinery/light/cold/directional/north, +/obj/structure/reagent_dispensers/plumbed, +/turf/open/floor/iron/white, +/area/station/medical/virology) "cQx" = ( /obj/machinery/computer/atmos_control/nitrous_tank{ dir = 1 @@ -8183,15 +8192,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"cUf" = ( -/obj/effect/turf_decal/trimline/red/filled/corner{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/security/prison) "cUk" = ( /obj/effect/spawner/random/vending/snackvend, /obj/structure/disposalpipe/segment{ @@ -8310,6 +8310,12 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) +"cWx" = ( +/obj/structure/rack, +/obj/item/clothing/gloves/color/fyellow, +/obj/effect/spawner/random/maintenance/two, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "cWy" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 8; @@ -8356,6 +8362,14 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) +"cWX" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Storage Room" + }, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "cXc" = ( /obj/structure/table, /obj/item/food/grown/poppy/lily, @@ -8370,11 +8384,6 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/iron, /area/station/science/robotics/mechbay) -"cXs" = ( -/obj/structure/cable, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/security/prison) "cXw" = ( /obj/machinery/holopad, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -8419,6 +8428,17 @@ }, /turf/open/floor/iron, /area/station/command/heads_quarters/ce) +"cYs" = ( +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) "cYx" = ( /obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 4 @@ -8636,6 +8656,10 @@ /obj/structure/window/spawner/directional/south, /turf/open/floor/iron, /area/station/engineering/atmos) +"dcD" = ( +/obj/structure/reagent_dispensers/plumbed, +/turf/open/floor/plating, +/area/station/maintenance/port) "dcF" = ( /obj/effect/landmark/event_spawn, /obj/effect/decal/cleanable/dirt, @@ -8691,17 +8715,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, /turf/open/floor/plating, /area/station/hallway/secondary/entry) -"ddK" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/department/science/xenobiology) "ddO" = ( /obj/effect/turf_decal/trimline/green/filled/corner, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -9261,6 +9274,19 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/engine, /area/station/engineering/atmospherics_engine) +"dni" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable, +/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/duct, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "dno" = ( /turf/open/floor/iron/white, /area/station/medical/virology) @@ -9297,6 +9323,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"dog" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "dox" = ( /obj/structure/rack, /obj/item/screwdriver{ @@ -9390,6 +9426,17 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"dpR" = ( +/obj/structure/table, +/obj/item/clothing/gloves/latex, +/obj/item/clothing/mask/surgical, +/obj/item/reagent_containers/spray/cleaner, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 9 + }, +/obj/machinery/wall_healer/directional/west, +/turf/open/floor/iron/white, +/area/station/security/medical) "dqc" = ( /obj/machinery/door/airlock/security/glass{ name = "N2O Storage" @@ -9727,15 +9774,6 @@ }, /turf/open/floor/wood/parquet, /area/station/medical/psychology) -"dvz" = ( -/obj/effect/spawner/structure/window, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 1; - name = "Cargo Lockdown Shutters"; - id = "cargolockdown" - }, -/turf/open/floor/plating, -/area/station/cargo/sorting) "dvJ" = ( /obj/structure/tank_dispenser, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -10202,6 +10240,14 @@ /obj/structure/window/spawner/directional/west, /turf/open/floor/grass, /area/station/science/research) +"dGo" = ( +/obj/machinery/firealarm/directional/east, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/landmark/start/hangover, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/commons/toilet/auxiliary) "dGq" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/stairs/left{ @@ -10220,16 +10266,6 @@ /obj/effect/mapping_helpers/airlock/access/all/command/gateway, /turf/open/floor/iron, /area/station/command/gateway) -"dGv" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 5 - }, -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/medical/surgery/theatre) "dGD" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -10267,6 +10303,13 @@ /obj/effect/turf_decal/tile/brown/fourcorners, /turf/open/floor/iron, /area/station/cargo/lobby) +"dHu" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) "dHG" = ( /obj/machinery/atmospherics/components/binary/crystallizer{ dir = 4 @@ -10444,11 +10487,6 @@ /obj/machinery/status_display/ai/directional/south, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai) -"dKO" = ( -/obj/structure/urinal/directional/north, -/obj/structure/cable, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet/restrooms) "dKY" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -10617,16 +10655,6 @@ }, /turf/open/floor/iron, /area/station/security/courtroom) -"dMX" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/spawner/random/trash/garbage{ - spawn_scatter_radius = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "dMY" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/blue/half/contrasted, @@ -10647,11 +10675,6 @@ /obj/machinery/newscaster/directional/east, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"dNC" = ( -/obj/machinery/light/small/dim/directional/west, -/obj/structure/reagent_dispensers/plumbed, -/turf/open/floor/plating, -/area/station/security/prison/safe) "dNX" = ( /obj/effect/turf_decal/tile/red{ dir = 8 @@ -10700,6 +10723,18 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"dOz" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 9 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/medical/cryo) "dOA" = ( /obj/machinery/portable_atmospherics/canister/nitrous_oxide, /obj/effect/turf_decal/siding/purple, @@ -10721,15 +10756,6 @@ }, /turf/open/floor/wood/large, /area/station/commons/lounge) -"dOS" = ( -/obj/structure/filingcabinet/white, -/obj/machinery/camera/directional/south{ - c_tag = "Medbay Psychology Office"; - network = list("ss13","medbay") - }, -/obj/effect/turf_decal/siding/wood, -/turf/open/floor/wood/parquet, -/area/station/medical/psychology) "dOY" = ( /obj/effect/spawner/random/engineering/tank, /turf/open/floor/plating, @@ -10758,13 +10784,6 @@ /obj/effect/turf_decal/stripes/red/line, /turf/open/floor/engine, /area/station/science/cytology) -"dPJ" = ( -/obj/effect/spawner/random/trash/garbage{ - spawn_scatter_radius = 1 - }, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "dPL" = ( /obj/structure/filingcabinet/security{ pixel_x = 4 @@ -10969,11 +10988,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/central) -"dSp" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/engineering/atmospherics_portable, -/turf/open/floor/plating, -/area/station/maintenance/port) "dSt" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ @@ -11120,6 +11134,25 @@ /obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/service/bar) +"dUE" = ( +/obj/structure/table/wood, +/obj/item/flashlight/lamp/green{ + pixel_x = 5; + pixel_y = 14 + }, +/obj/item/folder/white{ + pixel_x = 6; + pixel_y = -1 + }, +/obj/item/paper_bin/carbon{ + pixel_x = -5; + pixel_y = 1 + }, +/obj/item/pen{ + pixel_x = -5 + }, +/turf/open/floor/carpet, +/area/station/medical/psychology) "dVb" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/plating, @@ -11411,18 +11444,6 @@ "dZm" = ( /turf/closed/wall, /area/station/commons/storage/tools) -"dZo" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/shutters/preopen{ - name = "Cargo Lockdown Shutters"; - id = "cargolockdown"; - dir = 8 - }, -/turf/open/floor/plating, -/area/station/security/checkpoint/supply) "dZy" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 4 @@ -11464,6 +11485,12 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) +"eax" = ( +/obj/structure/sign/poster/official/random/directional/south, +/obj/machinery/light/small/directional/west, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/commons/toilet/auxiliary) "eaA" = ( /obj/structure/cable, /obj/effect/turf_decal/siding/thinplating_new{ @@ -11634,6 +11661,16 @@ }, /turf/open/floor/wood, /area/station/maintenance/port/aft) +"ecL" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/maintenance/starboard/greater) "ecO" = ( /turf/open/floor/carpet, /area/station/service/library) @@ -11716,6 +11753,14 @@ }, /turf/open/floor/iron, /area/station/security/warden) +"eeu" = ( +/obj/machinery/door/airlock{ + id_tag = "Toilet4"; + name = "Unit 4" + }, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) "eey" = ( /obj/machinery/firealarm/directional/west, /obj/structure/rack, @@ -11856,20 +11901,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/science/ordnance/testlab) -"egM" = ( -/obj/machinery/light/directional/west, -/obj/machinery/piratepad/civilian, -/obj/effect/turf_decal/bot_white, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "egP" = ( /obj/item/radio/intercom/directional/north, /obj/effect/turf_decal/stripes/line{ @@ -12226,6 +12257,17 @@ }, /turf/open/floor/engine, /area/station/science/xenobiology) +"eln" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) "ely" = ( /obj/structure/table/reinforced, /obj/item/clipboard{ @@ -12322,18 +12364,6 @@ }, /turf/open/floor/carpet, /area/station/command/bridge) -"enf" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/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, -/turf/open/floor/iron, -/area/station/maintenance/starboard/greater) "eni" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/layer_manifold/cyan/hidden{ @@ -12341,6 +12371,13 @@ }, /turf/open/floor/plating, /area/station/hallway/secondary/entry) +"env" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/security/prison) "eny" = ( /obj/structure/table, /obj/machinery/firealarm/directional/south, @@ -12549,13 +12586,6 @@ }, /turf/open/floor/iron, /area/station/engineering/main) -"eri" = ( -/obj/effect/spawner/random/entertainment/arcade, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/delivery, -/obj/machinery/wall_healer/directional/north, -/turf/open/floor/iron/dark, -/area/station/hallway/secondary/exit/departure_lounge) "erl" = ( /obj/structure/rack, /obj/effect/turf_decal/bot{ @@ -13021,13 +13051,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/central) -"exK" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/obj/machinery/wall_healer/directional/north, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "exN" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 @@ -13057,6 +13080,18 @@ /obj/structure/window/reinforced/plasma/spawner/directional/south, /turf/open/floor/engine, /area/station/engineering/supermatter) +"eyK" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/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, +/turf/open/floor/iron, +/area/station/maintenance/starboard/greater) "eyX" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 1 @@ -13167,6 +13202,14 @@ }, /turf/open/floor/iron/white, /area/station/science/ordnance/storage) +"eBY" = ( +/obj/effect/turf_decal/tile/bar, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/structure/sink/kitchen/directional/west, +/turf/open/floor/iron/cafeteria, +/area/station/service/kitchen) "eCg" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -13388,6 +13431,14 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/aisat/exterior) +"eGg" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/aft/greater) "eGm" = ( /obj/machinery/airalarm/directional/west, /obj/machinery/camera/directional/west{ @@ -13437,10 +13488,39 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/secondary/command) +"eHc" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/brown{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "eHf" = ( /obj/effect/spawner/random/vending/colavend, /turf/open/floor/iron, /area/station/hallway/primary/port) +"eHm" = ( +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/aft/greater) +"eHo" = ( +/obj/machinery/light/small/directional/west, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/structure/sign/poster/official/random/directional/west, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/commons/toilet/auxiliary) "eHR" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -13908,17 +13988,6 @@ /obj/effect/spawner/structure/window/reinforced/tinted, /turf/open/floor/plating, /area/station/science/robotics/mechbay) -"ePA" = ( -/obj/machinery/light/small/directional/south, -/obj/machinery/button/door/directional/south{ - id = "FitnessShower"; - name = "Lock Control"; - normaldoorcontrol = 1; - specialfunctions = 4 - }, -/obj/machinery/duct, -/turf/open/floor/iron/freezer, -/area/station/commons/fitness/recreation) "ePN" = ( /obj/structure/chair{ dir = 8 @@ -14099,16 +14168,6 @@ }, /turf/open/floor/wood/large, /area/station/service/theater) -"eSR" = ( -/obj/structure/cable, -/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/duct, -/turf/open/floor/iron/white, -/area/station/medical/virology) "eTg" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -14248,14 +14307,6 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"eVU" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "eVX" = ( /obj/machinery/firealarm/directional/west, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -14397,6 +14448,9 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) +"eYg" = ( +/turf/open/floor/iron/freezer, +/area/station/commons/fitness/recreation) "eYj" = ( /obj/effect/spawner/random/trash/garbage{ spawn_scatter_radius = 1 @@ -14520,6 +14574,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/station/command/heads_quarters/hos) +"fae" = ( +/obj/effect/turf_decal/stripes/corner, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "fag" = ( /obj/item/food/cracker, /obj/item/food/cracker{ @@ -14804,23 +14865,6 @@ initial_gas_mix = "TEMP=2.7" }, /area/space/nearstation) -"ffS" = ( -/obj/structure/cable, -/obj/machinery/door/airlock/virology/glass{ - name = "Virology Lab" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/airlock/access/all/medical/virology, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/medical/virology) "ffU" = ( /obj/effect/turf_decal/siding/purple, /obj/machinery/camera/directional/south{ @@ -14932,14 +14976,6 @@ /obj/effect/spawner/random/maintenance/three, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"fhA" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/structure/disposalpipe/segment, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/maintenance/starboard/greater) "fhB" = ( /obj/machinery/holopad, /obj/structure/cable, @@ -15111,6 +15147,15 @@ "fjD" = ( /turf/closed/wall, /area/station/commons/toilet/auxiliary) +"fjO" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/science/xenobiology/hallway) "fjW" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -15131,18 +15176,6 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/science/research) -"fkk" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/landmark/event_spawn, -/obj/effect/turf_decal/trimline/purple, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "fkl" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, @@ -15624,19 +15657,6 @@ dir = 8 }, /area/station/service/chapel/office) -"frs" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/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, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/science/xenobiology/hallway) "frt" = ( /obj/structure/rack, /obj/item/gun/energy/ionrifle, @@ -15740,6 +15760,11 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"ftL" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/vending/autodrobe, +/turf/open/floor/plating, +/area/station/maintenance/port) "ftM" = ( /obj/structure/sign/warning/pods, /turf/closed/wall, @@ -15849,17 +15874,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) -"fxT" = ( -/obj/machinery/door/airlock/wood{ - doorClose = 'sound/effects/doorcreaky.ogg'; - doorOpen = 'sound/effects/doorcreaky.ogg'; - name = "The Gobetting Barmaid" - }, -/obj/effect/mapping_helpers/airlock/abandoned, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "fxW" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/trimline/yellow/filled/line, @@ -15868,6 +15882,10 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"fyg" = ( +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/security/prison) "fym" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, @@ -15976,17 +15994,6 @@ /obj/effect/turf_decal/tile/red/fourcorners, /turf/open/floor/iron, /area/station/security/checkpoint/engineering) -"fAo" = ( -/obj/machinery/door/airlock/maintenance, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/mapping_helpers/airlock/unres, -/obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, -/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/port) "fAt" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ @@ -16230,17 +16237,6 @@ }, /turf/open/floor/iron/white, /area/station/science/ordnance/testlab) -"fFq" = ( -/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, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/starboard/greater) "fFu" = ( /obj/machinery/door/airlock/maintenance{ name = "Storage Room" @@ -16348,13 +16344,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/disposal/incinerator) -"fGP" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/red/opposingcorners, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/security/prison/mess) "fGR" = ( /obj/machinery/camera/directional/east{ c_tag = "Atmospherics Tank - N2" @@ -16370,21 +16359,22 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron, /area/station/maintenance/starboard/fore) -"fGW" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/starboard/greater) "fHd" = ( /obj/machinery/power/shieldwallgen, /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/command/teleporter) +"fHr" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/sorting/mail/flip{ + dir = 1 + }, +/obj/effect/mapping_helpers/mail_sorting/medbay/virology, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/landmark/firealarm_sanity, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) "fHy" = ( /obj/structure/window/reinforced/spawner/directional/east, /turf/open/floor/plating/airless, @@ -16855,14 +16845,6 @@ }, /turf/open/floor/iron, /area/station/command/teleporter) -"fRG" = ( -/obj/machinery/firealarm/directional/east, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/landmark/start/hangover, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/commons/toilet/auxiliary) "fRS" = ( /obj/structure/cable, /turf/open/floor/iron, @@ -17365,10 +17347,27 @@ /obj/machinery/computer/security/telescreen/cmo/directional/west, /turf/open/floor/iron/white, /area/station/command/heads_quarters/cmo) +"gbz" = ( +/obj/structure/cable, +/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/effect/turf_decal/tile/green/half/contrasted{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/virology) "gbB" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"gbE" = ( +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port) "gbG" = ( /obj/effect/spawner/random/structure/closet_maintenance, /obj/item/storage/box/lights/mixed, @@ -17501,6 +17500,18 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/aisat/exterior) +"geA" = ( +/obj/item/folder/white{ + pixel_x = 4; + pixel_y = -3 + }, +/obj/structure/table/glass, +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 8 + }, +/obj/machinery/wall_healer/directional/west, +/turf/open/floor/iron/dark, +/area/station/command/bridge) "geD" = ( /obj/structure/sign/warning/vacuum/external/directional/north, /obj/machinery/light/small/directional/north, @@ -17697,17 +17708,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/commons/lounge) -"gjt" = ( -/obj/structure/cable, -/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/effect/landmark/firealarm_sanity, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/medical/virology) "gjv" = ( /obj/machinery/door/window/left/directional/west{ name = "Maximum Security Test Chamber"; @@ -18071,21 +18071,6 @@ /obj/structure/chair/wood/wings, /turf/open/floor/carpet, /area/station/service/theater) -"gpv" = ( -/obj/structure/cable, -/obj/machinery/door/airlock{ - name = "Custodial Closet" - }, -/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/effect/mapping_helpers/airlock/access/all/service/janitor, -/obj/effect/landmark/navigate_destination/janitor, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/maintenance/starboard/greater) "gpB" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, @@ -18297,14 +18282,22 @@ "gtb" = ( /turf/open/floor/iron/white, /area/station/medical/pharmacy) -"gtk" = ( -/obj/effect/turf_decal/trimline/red/filled/line{ +"gtd" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 }, -/obj/machinery/airalarm/directional/west, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/filled/mid_joiner{ + dir = 1 + }, /obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/security/prison) +/turf/open/floor/iron/white/smooth_half, +/area/station/medical/cryo) "gtm" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -18318,16 +18311,6 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos/pumproom) -"gtH" = ( -/obj/machinery/door/airlock{ - name = "Prison Showers" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/duct, -/turf/open/floor/iron/freezer, -/area/station/security/prison/shower) "gtR" = ( /obj/effect/turf_decal/tile/blue, /obj/effect/turf_decal/tile/green{ @@ -18354,28 +18337,10 @@ }, /turf/open/floor/iron/dark, /area/station/security/checkpoint/science) -"gub" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/starboard/greater) "guo" = ( /obj/machinery/door/poddoor/incinerator_atmos_main, /turf/open/floor/engine, /area/station/maintenance/disposal/incinerator) -"guq" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/port) "guC" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 8 @@ -18393,21 +18358,6 @@ }, /turf/open/floor/iron/white, /area/station/science/ordnance/testlab) -"guI" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/item/reagent_containers/cup/bucket{ - pixel_x = -6; - pixel_y = 27 - }, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/service/janitor) "guL" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -18482,6 +18432,15 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/iron, /area/station/science/xenobiology) +"gvd" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 10 + }, +/obj/structure/cable, +/obj/structure/sign/eyechart/directional/west, +/turf/open/floor/iron/white, +/area/station/medical/cryo) "gvg" = ( /obj/structure/table/reinforced, /obj/machinery/door/poddoor/shutters{ @@ -18611,6 +18570,15 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/atmos) +"gyl" = ( +/obj/effect/spawner/structure/window, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 1; + name = "Cargo Lockdown Shutters"; + id = "cargolockdown" + }, +/turf/open/floor/plating, +/area/station/cargo/sorting) "gyo" = ( /obj/structure/cable, /obj/machinery/door/airlock/mining{ @@ -18623,6 +18591,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, /turf/open/floor/iron, /area/station/cargo/miningoffice) +"gyz" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/sink/directional/east, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "gyG" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/delivery, @@ -18762,20 +18737,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/virology) -"gAH" = ( -/obj/structure/cable, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/light/floor, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "gAI" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -18818,6 +18779,14 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"gBt" = ( +/obj/machinery/door/airlock{ + id_tag = "Toilet3"; + name = "Unit 3" + }, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) "gBx" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -18982,12 +18951,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/cargo/warehouse) -"gEF" = ( -/obj/structure/rack, -/obj/item/clothing/gloves/color/fyellow, -/obj/effect/spawner/random/maintenance/two, -/turf/open/floor/plating, -/area/station/maintenance/starboard/fore) "gEG" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/access/any/science/maintenance, @@ -19037,6 +19000,15 @@ /obj/structure/table/wood, /turf/open/floor/carpet, /area/station/service/chapel/funeral) +"gEZ" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/decal/cleanable/cobweb, +/turf/open/floor/plating, +/area/station/maintenance/department/science/xenobiology) "gFd" = ( /obj/machinery/power/terminal, /obj/machinery/light/small/directional/east, @@ -19147,6 +19119,14 @@ }, /turf/open/floor/iron, /area/station/security/holding_cell) +"gHq" = ( +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 4 + }, +/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/medical/treatment_center) "gHw" = ( /obj/machinery/atmospherics/components/tank, /obj/effect/turf_decal/siding/purple{ @@ -19178,6 +19158,15 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/maintenance/department/engine) +"gHK" = ( +/obj/structure/cable, +/obj/machinery/button/door/directional/east{ + name = "Cargo Lockdown"; + id = "cargolockdown"; + req_access = list("cargo") + }, +/turf/open/floor/catwalk_floor/iron, +/area/station/cargo/storage) "gHY" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -19215,6 +19204,14 @@ /obj/effect/turf_decal/tile/bar, /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) +"gIt" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/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/medical/treatment_center) "gIB" = ( /obj/structure/light_construct/directional/north, /obj/effect/decal/cleanable/greenglow, @@ -19493,6 +19490,19 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/main) +"gMN" = ( +/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 = 4 + }, +/obj/effect/turf_decal/siding/purple/corner{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/science/cytology) "gMQ" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -19557,6 +19567,12 @@ /obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/iron/dark, /area/station/ai_monitored/aisat/exterior) +"gNR" = ( +/obj/structure/girder, +/obj/effect/spawner/random/structure/grille, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "gNT" = ( /obj/structure/cable, /obj/effect/turf_decal/trimline/blue/filled/line{ @@ -19675,18 +19691,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet, /area/station/command/heads_quarters/captain/private) -"gPY" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/spawner/random/trash/garbage{ - spawn_scatter_radius = 1 - }, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "gQa" = ( /obj/effect/turf_decal/siding/thinplating_new/corner, /obj/effect/turf_decal/trimline/brown/filled/corner, @@ -19747,6 +19751,17 @@ /obj/item/wrench, /turf/open/floor/iron, /area/station/engineering/atmos) +"gSr" = ( +/obj/structure/bed/medical/emergency, +/obj/machinery/camera/directional/west{ + c_tag = "Gateway - Atrium" + }, +/obj/effect/turf_decal/bot{ + dir = 1 + }, +/obj/machinery/wall_healer/directional/west, +/turf/open/floor/iron, +/area/station/command/gateway) "gSu" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, @@ -19775,12 +19790,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/fore) -"gTn" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "gTo" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/security/glass{ @@ -19967,6 +19976,11 @@ /obj/effect/spawner/structure/window/reinforced/plasma, /turf/open/floor/plating, /area/station/engineering/atmos) +"gWr" = ( +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/department/science/xenobiology) "gWv" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -20000,14 +20014,6 @@ /obj/structure/bed/medical/emergency, /turf/open/floor/iron/white, /area/station/security/medical) -"gXd" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/service/janitor) "gXe" = ( /obj/structure/mirror/directional/west, /obj/item/lipstick/black, @@ -20041,6 +20047,15 @@ "gXu" = ( /turf/open/floor/plating, /area/station/engineering/main) +"gXv" = ( +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/surgery/theatre) "gXw" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, /turf/open/floor/circuit/telecomms, @@ -20131,6 +20146,15 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"gYR" = ( +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "gYU" = ( /turf/closed/wall, /area/station/service/chapel/funeral) @@ -20165,6 +20189,17 @@ /obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/iron/white, /area/station/science/lab) +"gZC" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/machinery/light/directional/south, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) "gZM" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/structure/window/reinforced/spawner/directional/north, @@ -20211,12 +20246,6 @@ /obj/item/pen/invisible, /turf/open/floor/engine/cult, /area/station/service/library) -"haE" = ( -/obj/structure/mirror/directional/east, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/commons/toilet/auxiliary) "haP" = ( /obj/structure/chair{ dir = 1 @@ -20332,6 +20361,22 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, /turf/open/floor/iron/white/corner, /area/station/hallway/secondary/entry) +"hcH" = ( +/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 = 4 + }, +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 4 + }, +/obj/effect/turf_decal/siding/purple{ + dir = 1 + }, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/science/cytology) "hcP" = ( /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating, @@ -20458,6 +20503,11 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) +"heY" = ( +/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/medical/treatment_center) "hfa" = ( /obj/machinery/computer/crew, /obj/effect/turf_decal/tile/green/half/contrasted{ @@ -20499,6 +20549,25 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/iron/checker, /area/station/engineering/storage_shared) +"hfJ" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Surgery C Maintenance" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/airlock/access/all/medical/surgery, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/aft/greater) +"hgi" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/starboard/greater) "hgt" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -20694,6 +20763,11 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"hkh" = ( +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/security/prison) "hko" = ( /obj/effect/turf_decal/bot{ dir = 1 @@ -20764,6 +20838,25 @@ }, /turf/open/floor/iron, /area/station/cargo/sorting) +"hlg" = ( +/obj/structure/safe/vault, +/obj/item/storage/briefcase/secure/riches, +/obj/item/storage/backpack/duffelbag/syndie/hitman, +/obj/item/card/id/advanced/silver/reaper, +/obj/item/lazarus_injector, +/obj/item/gun/energy/disabler, +/obj/item/gun/ballistic/revolver/russian, +/obj/item/ammo_box/speedloader/c357, +/obj/item/clothing/neck/stethoscope, +/obj/item/book{ + desc = "An undeniably handy book."; + icon_state = "bookknock"; + name = "\improper A Simpleton's Guide to Safe-cracking with Stethoscopes" + }, +/obj/effect/turf_decal/bot_white/left, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/nuke_storage) "hlj" = ( /obj/structure/table/wood, /obj/machinery/computer/security/wooden_tv{ @@ -20860,6 +20953,16 @@ /obj/structure/cable/multilayer/connected, /turf/open/floor/iron/dark, /area/station/ai_monitored/aisat/exterior) +"hmo" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 5 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/surgery/theatre) "hmq" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/blue, @@ -20874,14 +20977,12 @@ }, /turf/open/floor/iron, /area/station/security/brig) -"hmy" = ( -/obj/machinery/door/window/left/directional/south{ - name = "Permabrig Kitchen" - }, -/obj/effect/turf_decal/tile/red/opposingcorners, +"hmY" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/security/prison/mess) +/turf/open/floor/iron, +/area/station/commons/toilet/auxiliary) "hnn" = ( /obj/machinery/atmospherics/pipe/bridge_pipe/green/visible{ dir = 4 @@ -20931,6 +21032,12 @@ /obj/effect/turf_decal/trimline/brown/filled/line, /turf/open/floor/iron, /area/station/cargo/miningoffice) +"hoh" = ( +/obj/machinery/airalarm/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/commons/toilet/auxiliary) "hor" = ( /obj/machinery/door/airlock/maintenance{ name = "Warehouse Maintenance" @@ -21103,6 +21210,16 @@ dir = 8 }, /area/station/service/chapel/office) +"hsq" = ( +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/service/hydroponics) "hsF" = ( /obj/machinery/door/airlock{ id_tag = "AuxToilet3"; @@ -21280,6 +21397,12 @@ /obj/structure/window/reinforced/spawner/directional/north, /turf/open/floor/plating, /area/station/security/checkpoint/customs) +"hvo" = ( +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) "hvr" = ( /obj/machinery/camera/directional/south{ c_tag = "Central Primary Hallway - Fore - Courtroom" @@ -21448,31 +21571,6 @@ /obj/machinery/status_display/evac/directional/south, /turf/open/floor/iron, /area/station/service/hydroponics) -"hxz" = ( -/obj/item/reagent_containers/spray/plantbgone{ - pixel_y = 3 - }, -/obj/item/reagent_containers/spray/plantbgone{ - pixel_x = 8; - pixel_y = 8 - }, -/obj/item/reagent_containers/spray/plantbgone{ - pixel_x = 13; - pixel_y = 5 - }, -/obj/item/watertank, -/obj/item/grenade/chem_grenade/antiweed, -/obj/structure/table/glass, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/structure/sign/poster/official/random/directional/south, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/service/hydroponics) "hxB" = ( /obj/item/kirbyplants/organic/plant21, /turf/open/floor/iron/grimy, @@ -21549,6 +21647,12 @@ /obj/structure/window/spawner/directional/west, /turf/open/floor/iron/dark, /area/station/engineering/atmos) +"hyI" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port) "hyN" = ( /obj/structure/sign/warning/secure_area, /turf/closed/wall/r_wall, @@ -21639,15 +21743,6 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/commons/locker) -"hAA" = ( -/obj/effect/spawner/structure/window, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 4; - name = "Cargo Lockdown Shutters"; - id = "cargolockdown" - }, -/turf/open/floor/plating, -/area/station/cargo/lobby) "hAF" = ( /obj/machinery/camera/directional/south{ c_tag = "MiniSat Exterior Access"; @@ -21670,14 +21765,6 @@ /obj/structure/table, /turf/open/floor/iron, /area/station/security/prison/visit) -"hAN" = ( -/obj/structure/cable, -/obj/effect/spawner/random/trash/garbage{ - spawn_scatter_radius = 1 - }, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/department/science/xenobiology) "hAW" = ( /obj/machinery/camera/directional/south{ c_tag = "Research Director's Office - Observation Cage"; @@ -21710,6 +21797,16 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) +"hBu" = ( +/obj/machinery/door/airlock{ + name = "Hydroponics Backroom" + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/starboard/greater) "hBB" = ( /obj/machinery/computer/rdconsole{ dir = 8 @@ -21719,12 +21816,6 @@ }, /turf/open/floor/iron/white, /area/station/command/heads_quarters/rd) -"hBC" = ( -/obj/structure/kitchenspike_frame, -/obj/effect/decal/cleanable/blood/old, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "hBD" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/components/unary/airlock_pump{ @@ -22024,17 +22115,6 @@ /obj/structure/fake_stairs/directional/south, /turf/open/floor/iron, /area/station/cargo/storage) -"hIx" = ( -/obj/machinery/holopad, -/obj/effect/turf_decal/box/white{ - color = "#52B4E9" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/landmark/start/medical_doctor, -/obj/effect/landmark/event_spawn, -/obj/machinery/duct, -/turf/open/floor/iron/white/smooth_large, -/area/station/medical/surgery/aft) "hIJ" = ( /obj/structure/cable, /obj/machinery/chem_heater/withbuffer, @@ -22217,6 +22297,13 @@ }, /turf/open/floor/plating, /area/station/maintenance/aft/greater) +"hMf" = ( +/obj/effect/turf_decal/siding/purple{ + dir = 1 + }, +/obj/machinery/wall_healer/directional/south, +/turf/open/floor/iron/white, +/area/station/science/research) "hMn" = ( /obj/effect/turf_decal/trimline/brown/filled/line{ dir = 4 @@ -22345,14 +22432,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) -"hOR" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/spawner/random/trash/soap{ - spawn_scatter_radius = 1 - }, -/obj/machinery/duct, -/turf/open/floor/iron/freezer, -/area/station/security/prison/shower) "hPk" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -22634,10 +22713,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"hSP" = ( -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "hSQ" = ( /obj/structure/bodycontainer/morgue/beeper_off{ dir = 8 @@ -22783,27 +22858,6 @@ /obj/effect/landmark/navigate_destination, /turf/open/floor/iron/white, /area/station/medical/virology) -"hVX" = ( -/obj/structure/toilet{ - pixel_y = 8; - dir = 4 - }, -/obj/machinery/light/small/directional/west, -/obj/machinery/newscaster/directional/south, -/obj/effect/landmark/blobstart, -/obj/effect/landmark/start/hangover, -/obj/machinery/button/door/directional/west{ - id = "Toilet2"; - name = "Lock Control"; - normaldoorcontrol = 1; - specialfunctions = 4 - }, -/obj/effect/spawner/random/trash/graffiti{ - pixel_x = -32; - spawn_loot_chance = 50 - }, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet/restrooms) "hVY" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -22889,6 +22943,20 @@ /obj/effect/turf_decal/tile/red/opposingcorners, /turf/open/floor/iron/white, /area/station/security/prison/mess) +"hXZ" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/sorting/mail{ + dir = 4 + }, +/obj/effect/mapping_helpers/mail_sorting/science/xenobiology, +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 8 + }, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "hYd" = ( /obj/machinery/microwave{ pixel_x = -3; @@ -23671,26 +23739,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) -"ikS" = ( -/obj/item/radio/intercom/directional/east, -/obj/structure/table/wood, -/obj/item/flashlight/lamp/green{ - pixel_x = 5; - pixel_y = 14 - }, -/obj/item/folder/white{ - pixel_x = 6; - pixel_y = -1 - }, -/obj/item/paper_bin/carbon{ - pixel_x = -5; - pixel_y = 1 - }, -/obj/item/pen{ - pixel_x = -5 - }, -/turf/open/floor/carpet, -/area/station/medical/psychology) "ikY" = ( /obj/structure/sign/warning/secure_area/directional/south, /turf/open/floor/plating, @@ -23850,6 +23898,21 @@ /obj/machinery/light/cold/directional/north, /turf/open/floor/iron/white, /area/station/medical/treatment_center) +"inl" = ( +/obj/structure/noticeboard/directional/south, +/obj/structure/table/wood, +/obj/effect/turf_decal/siding/wood, +/obj/machinery/button/curtain{ + pixel_x = -7; + pixel_y = -23; + id = "psychology_curtains"; + name = "psychology curtains button" + }, +/obj/machinery/computer/records/medical/laptop{ + dir = 1 + }, +/turf/open/floor/wood/parquet, +/area/station/medical/psychology) "inw" = ( /obj/machinery/disposal/bin{ desc = "A pneumatic waste disposal unit. This one leads into space!"; @@ -24207,13 +24270,6 @@ /obj/effect/turf_decal/tile/yellow/fourcorners, /turf/open/floor/iron, /area/station/engineering/break_room) -"ita" = ( -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/machinery/wall_healer/directional/west, -/turf/open/floor/iron, -/area/station/hallway/primary/fore) "itg" = ( /obj/effect/landmark/event_spawn, /obj/effect/turf_decal/tile/bar, @@ -24241,17 +24297,6 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/science/research) -"itW" = ( -/obj/effect/decal/cleanable/dirt, -/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, -/turf/open/floor/plating, -/area/station/maintenance/starboard/greater) "itY" = ( /obj/machinery/door/poddoor/preopen{ id = "Engineering"; @@ -24278,11 +24323,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) -"iuB" = ( -/obj/effect/spawner/random/food_or_drink/donkpockets, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "iva" = ( /obj/machinery/door/airlock/maintenance{ name = "Security Maintenance" @@ -24442,6 +24482,17 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/iron/dark, /area/station/ai_monitored/aisat/exterior) +"ixA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/landmark/navigate_destination, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "ixP" = ( /obj/machinery/firealarm/directional/south, /obj/structure/cable, @@ -24498,25 +24549,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) -"iyC" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door_buttons/airlock_controller{ - idExterior = "virology_airlock_exterior"; - idInterior = "virology_airlock_interior"; - idSelf = "virology_airlock_control"; - name = "Virology Access Console"; - pixel_x = 24; - pixel_y = -24; - req_access = list("virology") - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/medical/virology) "iyV" = ( /obj/structure/disposalpipe/segment, /obj/machinery/navbeacon{ @@ -24622,10 +24654,6 @@ /obj/item/radio/intercom/directional/west, /turf/open/floor/wood/large, /area/station/command/heads_quarters/qm) -"izJ" = ( -/obj/structure/reagent_dispensers/plumbed, -/turf/open/floor/plating, -/area/station/maintenance/starboard/greater) "izZ" = ( /obj/machinery/atmospherics/pipe/heat_exchanging/simple{ dir = 4 @@ -24771,6 +24799,14 @@ /obj/structure/table/wood, /turf/open/floor/wood, /area/station/commons/vacant_room/office) +"iBO" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/machinery/airalarm/directional/west, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/security/prison) "iCj" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, /obj/effect/mapping_helpers/airlock/locked, @@ -24808,15 +24844,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/ai) -"iCX" = ( -/obj/structure/cable, -/obj/effect/turf_decal/stripes/line, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "iDe" = ( /obj/structure/table, /obj/item/reagent_containers/cup/glass/drinkingglass, @@ -24993,6 +25020,23 @@ /obj/effect/turf_decal/box, /turf/open/floor/iron/dark/smooth_large, /area/station/cargo/bitrunning/den) +"iGL" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/door/firedoor, +/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, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "XenoPens"; + name = "Xenobiology Lockdown" + }, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/science/xenobiology) "iHc" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -25257,6 +25301,16 @@ /obj/structure/cable, /turf/open/floor/iron/dark/textured_half, /area/station/cargo/bitrunning/den) +"iMa" = ( +/obj/machinery/door/airlock{ + name = "Prison Showers" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/security/prison/shower) "iMd" = ( /obj/structure/bed/medical/emergency{ dir = 4 @@ -25342,14 +25396,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/science/robotics/lab) -"iMQ" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/mob/living/basic/lizard/wags_his_tail, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/service/janitor) "iMR" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -25643,13 +25689,6 @@ /obj/structure/extinguisher_cabinet/directional/east, /turf/open/floor/iron/white, /area/station/science/research) -"iRg" = ( -/obj/structure/chair/stool/directional/west, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/landmark/event_spawn, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "iRh" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 8 @@ -25705,6 +25744,11 @@ /obj/effect/mapping_helpers/airlock/access/any/engineering/tcoms, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat/foyer) +"iSd" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port) "iSh" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/yellow/half/contrasted{ @@ -25760,17 +25804,6 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) -"iTH" = ( -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/machinery/light/directional/south, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "iTO" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -25834,14 +25867,6 @@ "iUv" = ( /turf/closed/wall/r_wall, /area/station/security/prison) -"iUJ" = ( -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 4 - }, -/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/medical/treatment_center) "iVi" = ( /obj/machinery/door/airlock{ id_tag = "Cabin6"; @@ -26184,6 +26209,36 @@ /obj/effect/mapping_helpers/airlock/access/all/science/ordnance, /turf/open/floor/iron/white, /area/station/science/ordnance/office) +"iZI" = ( +/obj/item/reagent_containers/spray/plantbgone{ + pixel_y = 3 + }, +/obj/item/reagent_containers/spray/plantbgone{ + pixel_x = 8; + pixel_y = 8 + }, +/obj/item/reagent_containers/spray/plantbgone{ + pixel_x = 13; + pixel_y = 5 + }, +/obj/item/watertank, +/obj/item/grenade/chem_grenade/antiweed, +/obj/structure/table/glass, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/structure/sign/poster/official/random/directional/south, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/service/hydroponics) +"iZX" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) "jaj" = ( /obj/structure/chair, /obj/structure/cable, @@ -26216,10 +26271,6 @@ /obj/effect/decal/cleanable/blood/oil/slippery, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"jaM" = ( -/obj/structure/reagent_dispensers/plumbed, -/turf/open/floor/plating, -/area/station/maintenance/port) "jaO" = ( /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ dir = 6 @@ -26299,44 +26350,6 @@ /obj/effect/spawner/random/armory/laser_gun, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) -"jcg" = ( -/obj/structure/cable, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/machinery/light/directional/west, -/obj/machinery/button/door/directional/west{ - id = "qmroom"; - name = "Privacy Blast Doors Control"; - pixel_y = -10 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 8 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/machinery/light_switch/directional/west{ - pixel_x = -41; - pixel_y = 5 - }, -/obj/machinery/button/door/directional/west{ - pixel_y = -1; - name = "Cargo Lockdown"; - id = "cargolockdown"; - req_access = list("cargo") - }, -/obj/machinery/button/door/directional/west{ - pixel_y = 8; - name = "Cargo Lobby Lockdown"; - id = "cargolobbylockdown"; - req_access = list("cargo") - }, -/turf/open/floor/wood/large, -/area/station/command/heads_quarters/qm) "jcw" = ( /obj/machinery/atmospherics/components/tank, /turf/open/floor/iron/dark, @@ -26450,6 +26463,19 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/hallway/primary/central) +"jen" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Prison Cafeteria" + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/security/prison/mess) "jew" = ( /obj/effect/turf_decal/stripes/red/line{ dir = 4 @@ -26567,6 +26593,16 @@ /obj/effect/turf_decal/trimline/green/line, /turf/open/floor/iron/dark, /area/station/service/cafeteria) +"jgn" = ( +/obj/structure/filingcabinet/white, +/obj/machinery/camera/directional/south{ + c_tag = "Medbay Psychology Office"; + network = list("ss13","medbay") + }, +/obj/effect/turf_decal/siding/wood, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/wood/parquet, +/area/station/medical/psychology) "jgt" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 1; @@ -26688,6 +26724,17 @@ /obj/machinery/meter, /turf/open/floor/iron/dark, /area/station/engineering/atmos) +"jio" = ( +/obj/machinery/holopad, +/obj/effect/turf_decal/box/white{ + color = "#52B4E9" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/landmark/start/medical_doctor, +/obj/effect/landmark/event_spawn, +/obj/machinery/duct, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/surgery/aft) "jis" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -26718,21 +26765,6 @@ }, /turf/open/floor/iron, /area/station/science/xenobiology) -"jjm" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/holopad, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/purple/fourcorners, -/obj/effect/turf_decal/siding/purple/corner{ - dir = 1 - }, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/science/cytology) "jjn" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/cable, @@ -26892,11 +26924,6 @@ "jlU" = ( /turf/closed/wall/r_wall, /area/station/science/xenobiology) -"jlY" = ( -/obj/structure/urinal/directional/north, -/obj/effect/landmark/start/hangover, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet/restrooms) "jmc" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 @@ -27198,15 +27225,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"jrp" = ( -/obj/structure/cable, -/obj/effect/spawner/random/maintenance, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/sign/poster/contraband/random/directional/east, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "jrI" = ( /obj/machinery/door/poddoor/massdriver_trash, /obj/machinery/atmos_shield_gen/active{ @@ -27284,13 +27302,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark, /area/station/medical/medbay/central) -"jsq" = ( -/obj/structure/toilet{ - pixel_y = 8 - }, -/obj/structure/light_construct/small/directional/south, -/turf/open/floor/plating, -/area/station/maintenance/aft/greater) "jsr" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -27567,6 +27578,17 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/wood, /area/station/service/library) +"jwI" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "jwP" = ( /obj/structure/table, /obj/item/paper_bin, @@ -27619,19 +27641,6 @@ /obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/wood, /area/station/command/heads_quarters/captain/private) -"jxH" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/structure/cable, -/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/duct, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "jxM" = ( /obj/item/radio/intercom/directional/west{ pixel_y = -10 @@ -27759,12 +27768,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"jzw" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "jzD" = ( /obj/machinery/holopad/secure, /turf/open/floor/iron/dark, @@ -27805,6 +27808,12 @@ /obj/structure/cable, /turf/open/floor/carpet, /area/station/service/chapel) +"jAq" = ( +/obj/structure/cable, +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/department/science/xenobiology) "jAs" = ( /obj/structure/window/spawner/directional/east, /obj/structure/window/spawner/directional/north, @@ -27844,6 +27853,15 @@ }, /turf/open/floor/iron/grimy, /area/station/security/detectives_office) +"jAT" = ( +/obj/structure/cable, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "QM Privacy Shutters"; + id = "qmroom" + }, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/command/heads_quarters/qm) "jAV" = ( /obj/machinery/atmospherics/pipe/smart/manifold/dark/visible{ dir = 1 @@ -28046,6 +28064,14 @@ /obj/structure/sign/poster/party_game, /turf/closed/wall, /area/space/nearstation) +"jFw" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/security/prison) "jFy" = ( /obj/effect/landmark/generic_maintenance_landmark, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -28060,6 +28086,14 @@ /obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/treatment_center) +"jFF" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/obj/machinery/duct, +/turf/open/floor/iron/dark/textured, +/area/station/medical/cryo) "jFK" = ( /obj/machinery/washing_machine, /obj/effect/decal/cleanable/dirt, @@ -28162,14 +28196,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/port) -"jGG" = ( -/obj/machinery/holopad, -/obj/effect/turf_decal/box/white{ - color = "#52B4E9" - }, -/obj/machinery/duct, -/turf/open/floor/iron/white/smooth_large, -/area/station/medical/treatment_center) "jGN" = ( /obj/machinery/computer/station_alert/station_only{ dir = 1 @@ -29037,12 +29063,6 @@ }, /turf/open/floor/iron, /area/station/security/brig) -"jVx" = ( -/obj/effect/turf_decal/trimline/blue/filled/corner{ - dir = 1 - }, -/turf/open/floor/iron/white, -/area/station/medical/treatment_center) "jVy" = ( /obj/machinery/portable_atmospherics/pump/lil_pump, /obj/effect/turf_decal/siding/purple{ @@ -29064,16 +29084,6 @@ }, /turf/open/floor/iron/dark, /area/station/service/chapel/office) -"jVY" = ( -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 1; - name = "Cargo Lockdown Shutters"; - id = "cargolockdown" - }, -/obj/structure/cable, -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/station/security/checkpoint/supply) "jVZ" = ( /obj/structure/table/reinforced, /obj/machinery/door/window/right/directional/west{ @@ -29207,6 +29217,22 @@ /obj/machinery/atmospherics/pipe/smart/simple/green/visible, /turf/closed/wall/r_wall, /area/station/engineering/atmos) +"jYw" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/bar{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/service) "jYy" = ( /obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 1 @@ -29577,6 +29603,14 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/aft) +"kge" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/burnt_floor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "kgg" = ( /obj/structure/railing, /obj/structure/railing{ @@ -29612,6 +29646,14 @@ /obj/machinery/door/poddoor/incinerator_ordmix, /turf/open/floor/engine/vacuum, /area/station/science/ordnance/burnchamber) +"kgR" = ( +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/department/science/xenobiology) "kgV" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -29702,6 +29744,11 @@ /obj/machinery/airalarm/directional/west, /turf/open/floor/iron, /area/station/cargo/warehouse) +"kim" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/plating, +/area/station/maintenance/fore) "kir" = ( /obj/structure/disposalpipe/sorting/mail/flip{ dir = 4 @@ -29763,18 +29810,6 @@ /obj/effect/mapping_helpers/mail_sorting/science/rd_office, /turf/open/floor/iron/white, /area/station/science/research) -"kjM" = ( -/obj/effect/spawner/structure/window, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 4; - name = "Cargo Lockdown Shutters"; - id = "cargolockdown" - }, -/turf/open/floor/plating, -/area/station/cargo/lobby) "kjO" = ( /obj/structure/table, /obj/item/restraints/handcuffs/cable/white, @@ -30018,19 +30053,20 @@ /obj/structure/sign/warning/secure_area, /turf/closed/wall/r_wall, /area/station/command/gateway) +"kna" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/item/cigbutt/roach, +/turf/open/floor/iron, +/area/station/maintenance/starboard/greater) "knd" = ( /obj/effect/landmark/start/assistant, /obj/structure/chair/comfy/black, /obj/machinery/light/small/directional/north, /turf/open/floor/wood, /area/station/service/library) -"knf" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/duct, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet/restrooms) "knt" = ( /obj/machinery/mech_bay_recharge_port, /obj/structure/cable, @@ -30286,6 +30322,12 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/command/gateway) +"ksC" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) "ksM" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -30361,6 +30403,16 @@ /obj/effect/turf_decal/trimline/blue/filled/corner, /turf/open/floor/iron/white, /area/station/medical/treatment_center) +"kux" = ( +/obj/structure/cable, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "QM Privacy Shutters"; + id = "qmroom"; + dir = 4 + }, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/command/heads_quarters/qm) "kuD" = ( /obj/structure/lattice, /obj/machinery/atmospherics/components/unary/passive_vent{ @@ -30607,15 +30659,6 @@ /obj/item/toy/figure/cargotech, /turf/open/space/basic, /area/space/nearstation) -"kyL" = ( -/obj/structure/cable, -/obj/machinery/door/poddoor/shutters/preopen{ - name = "QM Privacy Shutters"; - id = "qmroom" - }, -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/station/command/heads_quarters/qm) "kyQ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -30673,6 +30716,16 @@ /obj/effect/mapping_helpers/airlock/access/any/security/general, /turf/open/floor/iron, /area/station/security/courtroom) +"kzE" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/spawner/structure/window, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 1; + name = "Cargo Lockdown Shutters"; + id = "cargolockdown" + }, +/turf/open/floor/plating, +/area/station/cargo/sorting) "kzG" = ( /turf/open/floor/iron/recharge_floor, /area/station/maintenance/port/aft) @@ -30865,17 +30918,6 @@ "kCZ" = ( /turf/closed/wall, /area/station/service/hydroponics) -"kDa" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/firealarm/directional/west, -/obj/machinery/camera/directional/west{ - c_tag = "Medbay Main Hallway - South"; - network = list("ss13","medbay") - }, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "kDb" = ( /obj/structure/chair/office/light{ dir = 1 @@ -31210,16 +31252,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) -"kJE" = ( -/obj/structure/cable, -/obj/machinery/door/poddoor/shutters/preopen{ - name = "QM Privacy Shutters"; - id = "qmroom"; - dir = 4 - }, -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/station/command/heads_quarters/qm) "kJO" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -31238,17 +31270,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) -"kKh" = ( -/obj/effect/turf_decal/trimline/blue/filled/corner{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/blue/filled/corner, -/obj/structure/chair{ - dir = 4 - }, -/obj/structure/sign/poster/official/help_others/directional/south, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "kKk" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -31450,15 +31471,6 @@ /obj/effect/turf_decal/tile/purple, /turf/open/floor/iron, /area/station/hallway/primary/central) -"kMo" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 10 - }, -/obj/structure/cable, -/obj/structure/sign/eyechart/directional/west, -/turf/open/floor/iron/white, -/area/station/medical/cryo) "kMr" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /obj/effect/turf_decal/siding/wood{ @@ -31546,6 +31558,13 @@ /obj/effect/turf_decal/tile/red/fourcorners, /turf/open/floor/iron/dark, /area/station/security/checkpoint/medical) +"kOu" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/security/prison/mess) "kOB" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -31666,29 +31685,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) -"kQA" = ( -/obj/machinery/mineral/ore_redemption{ - dir = 4; - input_dir = 8; - output_dir = 4 - }, -/obj/effect/turf_decal/delivery, -/obj/machinery/door/firedoor, -/obj/machinery/door/window/left/directional/east{ - name = "Ore Redemption Window" - }, -/obj/machinery/door/window/left/directional/west{ - req_access = list("cargo"); - name = "Cargo Security Window" - }, -/obj/effect/turf_decal/tile/brown/fourcorners, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 4; - name = "Cargo Lockdown Shutters"; - id = "cargolockdown" - }, -/turf/open/floor/iron, -/area/station/cargo/lobby) "kQO" = ( /obj/effect/turf_decal/tile/brown/opposingcorners, /mob/living/basic/sloth/citrus, @@ -31743,13 +31739,13 @@ /obj/machinery/announcement_system, /turf/open/floor/iron/grimy, /area/station/tcommsat/computer) -"kRy" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/structure/sink/directional/east, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) +"kRq" = ( +/obj/structure/chair/stool/directional/west, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/landmark/event_spawn, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "kRA" = ( /obj/effect/spawner/random/engineering/atmospherics_portable, /obj/effect/mapping_helpers/broken_floor, @@ -31864,15 +31860,6 @@ /obj/item/pen, /turf/open/floor/iron/dark, /area/station/medical/medbay/central) -"kTZ" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/starboard/greater) "kUb" = ( /obj/machinery/atmospherics/components/unary/thermomachine/heater/on, /obj/effect/turf_decal/tile/neutral/half/contrasted{ @@ -32272,31 +32259,12 @@ /obj/structure/closet/crate, /turf/open/floor/iron, /area/station/cargo/warehouse) -"kZQ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/port) "laa" = ( /obj/machinery/light/directional/east, /turf/open/floor/iron/chapel{ dir = 1 }, /area/station/service/chapel) -"laf" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/spawner/random/trash/garbage{ - spawn_scatter_radius = 1 - }, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/starboard/greater) "lah" = ( /obj/structure/rack, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -32497,6 +32465,14 @@ /obj/machinery/light/directional/south, /turf/open/floor/iron, /area/station/engineering/gravity_generator) +"leI" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/service/janitor) "leP" = ( /obj/machinery/atmospherics/pipe/heat_exchanging/junction{ dir = 4 @@ -32528,11 +32504,6 @@ /obj/structure/cable, /turf/open/floor/iron/textured, /area/station/medical/chem_storage) -"lfm" = ( -/obj/machinery/light_switch/directional/north, -/obj/machinery/duct, -/turf/open/floor/iron/freezer, -/area/station/security/prison/shower) "lfu" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -32544,6 +32515,14 @@ }, /turf/open/floor/iron/white, /area/station/science/research) +"lfU" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/mob/living/basic/lizard/wags_his_tail, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/service/janitor) "lge" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -32639,6 +32618,16 @@ }, /turf/open/floor/wood, /area/station/service/theater) +"lix" = ( +/obj/structure/sign/poster/official/cleanliness/directional/west, +/obj/structure/sink/directional/south, +/obj/effect/turf_decal/tile/green/anticorner/contrasted{ + dir = 1 + }, +/obj/structure/mirror/directional/north, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/white, +/area/station/medical/virology) "liz" = ( /obj/structure/disposalpipe/segment, /obj/machinery/door/firedoor, @@ -32811,21 +32800,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"llx" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 4; - name = "Cargo Lobby Lockdown Shutters"; - id = "cargolobbylockdown" - }, -/turf/open/floor/iron, -/area/station/cargo/lobby) "llC" = ( /obj/effect/landmark/event_spawn, /turf/open/floor/glass/reinforced, @@ -32841,6 +32815,20 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/engineering/break_room) +"lme" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/door/firedoor, +/obj/machinery/computer/cargo/request{ + dir = 1 + }, +/obj/structure/window/spawner/directional/south, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 1; + name = "Cargo Lockdown Shutters"; + id = "cargolockdown" + }, +/turf/open/floor/plating, +/area/station/cargo/sorting) "lmk" = ( /obj/item/radio/intercom/directional/south, /obj/structure/bodycontainer/morgue{ @@ -32856,11 +32844,6 @@ dir = 8 }, /area/station/medical/morgue) -"lmn" = ( -/obj/structure/cable, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/department/science/xenobiology) "lmx" = ( /obj/machinery/light_switch/directional/west, /obj/effect/decal/cleanable/cobweb, @@ -32880,6 +32863,18 @@ }, /turf/open/floor/iron/dark, /area/station/service/chapel) +"lmy" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) +"lmC" = ( +/obj/structure/reagent_dispensers/plumbed, +/turf/open/floor/plating, +/area/station/maintenance/department/science/xenobiology) "lmF" = ( /obj/effect/turf_decal/bot_white/right, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -32899,13 +32894,6 @@ /obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"lmT" = ( -/obj/effect/turf_decal/trimline/red/filled/corner{ - dir = 8 - }, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/security/prison) "lnc" = ( /turf/closed/wall, /area/station/commons/dorms) @@ -32923,14 +32911,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/hallway/primary/fore) -"lnM" = ( -/obj/item/reagent_containers/cup/bucket, -/obj/item/mop, -/obj/item/reagent_containers/cup/bottle/ammonia, -/obj/structure/cable, -/mob/living/basic/mouse/brown/tom, -/turf/open/floor/plating, -/area/station/security/prison/safe) "lnP" = ( /obj/effect/spawner/random/structure/closet_maintenance, /turf/open/floor/plating, @@ -32969,6 +32949,16 @@ }, /turf/open/floor/iron, /area/station/engineering/main) +"loM" = ( +/obj/structure/cable, +/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/duct, +/turf/open/floor/iron/white, +/area/station/medical/virology) "loR" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -33015,22 +33005,6 @@ /obj/machinery/biogenerator, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"lpN" = ( -/obj/machinery/door/airlock/maintenance, -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "viro-passthrough" - }, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 1 - }, -/obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/medical/medbay/central) "lpR" = ( /obj/structure/table, /obj/effect/turf_decal/siding{ @@ -33155,6 +33129,13 @@ }, /turf/open/floor/plating, /area/station/medical/chemistry) +"lsb" = ( +/obj/effect/spawner/random/trash/garbage{ + spawn_scatter_radius = 1 + }, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "lsf" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -33269,16 +33250,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/service) -"ltX" = ( -/obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/service/hydroponics) "lug" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -33360,14 +33331,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/security/medical) -"lvU" = ( -/obj/machinery/door/airlock{ - id_tag = "Toilet4"; - name = "Unit 4" - }, -/obj/machinery/duct, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet/restrooms) "lvZ" = ( /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment, @@ -33832,23 +33795,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) -"lHB" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/door/firedoor, -/obj/machinery/computer/cargo/request{ - dir = 1 - }, -/obj/structure/window/spawner/directional/south, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 1; - name = "Cargo Lockdown Shutters"; - id = "cargolockdown" - }, -/turf/open/floor/plating, -/area/station/cargo/sorting) -"lHH" = ( -/turf/open/floor/iron/freezer, -/area/station/commons/fitness/recreation) "lHK" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/west, @@ -33865,6 +33811,44 @@ /obj/machinery/atmospherics/components/unary/thermomachine/freezer, /turf/open/floor/iron, /area/station/engineering/atmos/pumproom) +"lIA" = ( +/obj/structure/cable, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/light/directional/west, +/obj/machinery/button/door/directional/west{ + id = "qmroom"; + name = "Privacy Blast Doors Control"; + pixel_y = -10 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/machinery/light_switch/directional/west{ + pixel_x = -41; + pixel_y = 5 + }, +/obj/machinery/button/door/directional/west{ + pixel_y = -1; + name = "Cargo Lockdown"; + id = "cargolockdown"; + req_access = list("cargo") + }, +/obj/machinery/button/door/directional/west{ + pixel_y = 8; + name = "Cargo Lobby Lockdown"; + id = "cargolobbylockdown"; + req_access = list("cargo") + }, +/turf/open/floor/wood/large, +/area/station/command/heads_quarters/qm) "lIB" = ( /obj/structure/table/reinforced, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -33876,6 +33860,12 @@ }, /turf/open/floor/iron, /area/station/service/bar) +"lIS" = ( +/obj/structure/kitchenspike_frame, +/obj/effect/decal/cleanable/blood/old, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "lIX" = ( /obj/structure/chair/comfy/brown, /turf/open/floor/engine/cult, @@ -33891,27 +33881,6 @@ }, /turf/open/floor/iron/grimy, /area/station/tcommsat/computer) -"lJm" = ( -/obj/structure/toilet{ - pixel_y = 8; - dir = 4 - }, -/obj/machinery/light/small/directional/west, -/obj/machinery/newscaster/directional/south, -/obj/effect/landmark/start/assistant, -/obj/effect/landmark/start/hangover, -/obj/effect/spawner/random/trash/graffiti{ - pixel_x = -32; - spawn_loot_chance = 50 - }, -/obj/machinery/button/door/directional/west{ - id = "Toilet3"; - name = "Lock Control"; - normaldoorcontrol = 1; - specialfunctions = 4 - }, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet/restrooms) "lJn" = ( /obj/machinery/airalarm/directional/east, /obj/machinery/computer/security/telescreen/entertainment/directional/north, @@ -33976,15 +33945,6 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"lLw" = ( -/obj/machinery/shower/directional/south, -/obj/structure/curtain, -/obj/structure/window/reinforced/tinted/spawner/directional/west, -/obj/machinery/door/window/left/directional/south{ - name = "Shower" - }, -/turf/open/floor/iron/freezer, -/area/station/commons/fitness/recreation) "lLB" = ( /obj/structure/table/glass, /obj/item/wrench, @@ -34115,12 +34075,6 @@ /obj/effect/spawner/random/maintenance/two, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"lNf" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/landmark/event_spawn, -/obj/machinery/duct, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet/restrooms) "lNh" = ( /obj/machinery/door/airlock/security/glass{ name = "Prison Sanitarium" @@ -34410,6 +34364,17 @@ /obj/structure/sign/directions/evac, /turf/closed/wall/r_wall, /area/station/maintenance/department/medical/central) +"lRY" = ( +/obj/effect/decal/cleanable/dirt, +/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, +/turf/open/floor/plating, +/area/station/maintenance/starboard/greater) "lSw" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -34432,6 +34397,21 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/command) +"lTc" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/item/reagent_containers/cup/bucket{ + pixel_x = -6; + pixel_y = 27 + }, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/service/janitor) "lTi" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/camera/directional/south{ @@ -34818,6 +34798,15 @@ }, /turf/open/floor/engine, /area/station/maintenance/disposal/incinerator) +"lZI" = ( +/obj/structure/cable, +/obj/effect/spawner/random/maintenance, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/sign/poster/contraband/random/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "lZM" = ( /obj/structure/table/wood, /obj/item/reagent_containers/cup/glass/shaker, @@ -34933,26 +34922,6 @@ /obj/effect/turf_decal/tile/yellow/half/contrasted, /turf/open/floor/iron, /area/station/commons/storage/tools) -"mbI" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/structure/desk_bell{ - pixel_x = 7 - }, -/obj/machinery/door/window/right/directional/south{ - name = "Cargo Desk"; - req_access = list("shipping") - }, -/obj/item/newspaper{ - pixel_x = -5 - }, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 1; - name = "Cargo Lockdown Shutters"; - id = "cargolockdown" - }, -/turf/open/floor/plating, -/area/station/cargo/sorting) "mbJ" = ( /obj/machinery/portable_atmospherics/pump, /obj/machinery/atmospherics/components/unary/portables_connector/visible{ @@ -35093,6 +35062,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) +"mdA" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/aft/greater) "mdL" = ( /obj/machinery/computer/shuttle/mining{ dir = 1; @@ -35103,6 +35080,17 @@ }, /turf/open/floor/iron, /area/station/cargo/miningoffice) +"mdO" = ( +/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, +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/starboard/greater) "mei" = ( /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, /turf/open/floor/iron, @@ -35142,17 +35130,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/station/command/heads_quarters/hos) -"mfb" = ( -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/security/prison) "mfd" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, @@ -35248,14 +35225,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/storage) -"mhs" = ( -/obj/effect/turf_decal/stripes/line, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/port) "mhA" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/west, @@ -35402,16 +35371,6 @@ /obj/structure/cable/layer3, /turf/open/floor/iron/dark, /area/station/ai_monitored/aisat/exterior) -"mka" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/spawner/structure/window, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 1; - name = "Cargo Lockdown Shutters"; - id = "cargolockdown" - }, -/turf/open/floor/plating, -/area/station/cargo/sorting) "mkr" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 4; @@ -35472,13 +35431,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/fore) -"mma" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/chair/stool/directional/north, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/service/janitor) "mml" = ( /obj/machinery/holopad, /obj/effect/turf_decal/bot_white, @@ -35803,6 +35755,13 @@ }, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) +"mrq" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/machinery/wall_healer/directional/north, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "mru" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/segment{ @@ -35848,15 +35807,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/fore) -"msn" = ( -/obj/structure/cable, -/obj/machinery/button/door/directional/east{ - name = "Cargo Lockdown"; - id = "cargolockdown"; - req_access = list("cargo") - }, -/turf/open/floor/catwalk_floor/iron, -/area/station/cargo/storage) "msp" = ( /obj/machinery/door/airlock/external, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ @@ -35939,6 +35889,15 @@ /obj/structure/cable, /turf/open/floor/carpet, /area/station/command/corporate_showroom) +"mti" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/sign/poster/contraband/random/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "mtj" = ( /obj/machinery/medical_kiosk, /obj/effect/turf_decal/siding/white, @@ -35974,16 +35933,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron, /area/station/commons/dorms) -"mtZ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/sorting/mail, -/obj/effect/mapping_helpers/mail_sorting/medbay/virology, -/obj/effect/turf_decal/tile/green/half/contrasted, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/medical/virology) "mui" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -36089,11 +36038,6 @@ /obj/machinery/light/floor, /turf/open/floor/iron, /area/station/engineering/atmos) -"mvv" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/port) "mvN" = ( /obj/structure/cable, /obj/effect/turf_decal/stripes/line, @@ -36148,14 +36092,6 @@ }, /turf/open/floor/wood, /area/station/command/heads_quarters/hos) -"mwm" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/aft/greater) "mwo" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -36359,6 +36295,17 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) +"mAZ" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/sorting/mail{ + dir = 1 + }, +/obj/effect/mapping_helpers/mail_sorting/medbay/general, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "mBe" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -36511,14 +36458,6 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/commons/dorms) -"mCV" = ( -/obj/structure/cable, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/department/science/xenobiology) "mCZ" = ( /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ dir = 9 @@ -36553,6 +36492,17 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) +"mDv" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/department/science/xenobiology) "mDA" = ( /obj/machinery/atmospherics/pipe/bridge_pipe/scrubbers/visible{ dir = 4 @@ -36614,11 +36564,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) -"mEx" = ( -/obj/structure/reagent_dispensers/plumbed, -/obj/effect/spawner/random/maintenance/three, -/turf/open/floor/plating, -/area/station/maintenance/starboard/greater) "mEG" = ( /obj/structure/closet/secure_closet/security/engine, /obj/machinery/airalarm/directional/east, @@ -36779,6 +36724,26 @@ /obj/effect/spawner/random/engineering/atmospherics_portable, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) +"mGV" = ( +/obj/structure/toilet{ + dir = 1 + }, +/obj/machinery/light/small/directional/east, +/obj/machinery/newscaster/directional/east, +/obj/effect/landmark/start/assistant, +/obj/effect/landmark/start/hangover, +/obj/machinery/button/door/directional/south{ + id = "Toilet4"; + name = "Lock Control"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/obj/effect/spawner/random/trash/graffiti{ + pixel_y = -32; + spawn_loot_chance = 50 + }, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) "mGX" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -36809,16 +36774,6 @@ /obj/item/clothing/gloves/color/yellow, /turf/open/floor/iron, /area/station/engineering/main) -"mHl" = ( -/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 = 6 - }, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/medical/virology) "mHy" = ( /obj/structure/rack, /turf/open/floor/plating, @@ -36986,6 +36941,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/main) +"mLd" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port) "mLp" = ( /obj/effect/landmark/start/quartermaster, /obj/structure/cable, @@ -37301,6 +37264,20 @@ /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating, /area/station/maintenance/fore) +"mQf" = ( +/obj/structure/cable, +/obj/machinery/door/airlock/virology/glass{ + name = "Containment Cells" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/airlock/access/all/medical/virology, +/obj/effect/turf_decal/tile/green/fourcorners, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/virology) "mQi" = ( /obj/machinery/portable_atmospherics/canister/nitrogen, /obj/effect/turf_decal/bot, @@ -37493,6 +37470,15 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/engineering/atmos/storage/gas) +"mSO" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/landmark/generic_maintenance_landmark, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "mSS" = ( /obj/machinery/atmospherics/components/binary/pump/on, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -37523,15 +37509,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"mTg" = ( -/obj/structure/cable, -/obj/machinery/door/airlock/hatch{ - name = "Observation Room" - }, -/obj/effect/mapping_helpers/airlock/access/all/science/xenobio, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/department/science/xenobiology) "mTk" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -37659,19 +37636,6 @@ }, /turf/open/space/basic, /area/space/nearstation) -"mWA" = ( -/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, -/obj/effect/spawner/random/trash/garbage{ - spawn_scatter_radius = 1 - }, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/starboard/greater) "mWU" = ( /turf/open/floor/iron, /area/station/maintenance/space_hut) @@ -37870,6 +37834,11 @@ /obj/machinery/status_display/evac/directional/west, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/eva) +"mZB" = ( +/obj/structure/urinal/directional/north, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) "mZC" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -37981,6 +37950,15 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron, /area/station/service/hydroponics) +"nbQ" = ( +/obj/machinery/shower/directional/south, +/obj/structure/curtain, +/obj/structure/window/reinforced/tinted/spawner/directional/west, +/obj/machinery/door/window/left/directional/south{ + name = "Shower" + }, +/turf/open/floor/iron/freezer, +/area/station/commons/fitness/recreation) "nbS" = ( /obj/structure/table, /obj/effect/turf_decal/tile/red/half/contrasted{ @@ -38193,13 +38171,6 @@ "nfs" = ( /turf/open/floor/engine, /area/station/command/heads_quarters/rd) -"nft" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/machinery/duct, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet/restrooms) "nfy" = ( /obj/structure/table, /obj/item/paper_bin, @@ -38469,6 +38440,18 @@ }, /turf/open/floor/iron, /area/station/security/execution/transfer) +"nlN" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Cargo Lockdown Shutters"; + id = "cargolockdown"; + dir = 8 + }, +/turf/open/floor/plating, +/area/station/security/checkpoint/supply) "nlP" = ( /obj/structure/table, /obj/item/stock_parts/subspace/treatment, @@ -38549,6 +38532,10 @@ /obj/effect/spawner/random/engineering/tracking_beacon, /turf/open/floor/iron, /area/station/maintenance/disposal/incinerator) +"nmX" = ( +/obj/structure/reagent_dispensers/plumbed, +/turf/open/floor/plating, +/area/station/maintenance/starboard/greater) "nmZ" = ( /obj/effect/turf_decal/stripes/white/line, /obj/effect/turf_decal/stripes/white/line{ @@ -38672,6 +38659,27 @@ /obj/structure/lattice/catwalk, /turf/open/space/basic, /area/station/solars/starboard/fore) +"noy" = ( +/obj/structure/toilet{ + pixel_y = 8; + dir = 4 + }, +/obj/machinery/light/small/directional/west, +/obj/machinery/newscaster/directional/south, +/obj/effect/landmark/blobstart, +/obj/effect/landmark/start/hangover, +/obj/machinery/button/door/directional/west{ + id = "Toilet2"; + name = "Lock Control"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/obj/effect/spawner/random/trash/graffiti{ + pixel_x = -32; + spawn_loot_chance = 50 + }, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) "noA" = ( /obj/machinery/portable_atmospherics/canister/air, /obj/machinery/atmospherics/components/unary/portables_connector/visible/layer4{ @@ -38874,6 +38882,12 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) +"nrI" = ( +/obj/structure/urinal/directional/north, +/obj/structure/cable, +/obj/machinery/light/floor, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) "nrM" = ( /obj/effect/turf_decal/siding/wood, /obj/structure/cable, @@ -39060,6 +39074,11 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/external, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"ntG" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "ntM" = ( /obj/machinery/power/solar_control{ id = "foreport"; @@ -39119,6 +39138,26 @@ /obj/effect/turf_decal/stripes/corner, /turf/open/floor/iron/white, /area/station/science/cytology) +"nuk" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/structure/desk_bell{ + pixel_x = 7 + }, +/obj/machinery/door/window/right/directional/south{ + name = "Cargo Desk"; + req_access = list("shipping") + }, +/obj/item/newspaper{ + pixel_x = -5 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 1; + name = "Cargo Lockdown Shutters"; + id = "cargolockdown" + }, +/turf/open/floor/plating, +/area/station/cargo/sorting) "nur" = ( /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, @@ -39266,6 +39305,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/courtroom) +"nwZ" = ( +/obj/machinery/duct, +/obj/structure/falsewall, +/turf/open/floor/plating, +/area/station/maintenance/port) "nxg" = ( /obj/machinery/light/small/dim/directional/south, /obj/machinery/atmospherics/components/binary/pump/on/layer4{ @@ -39563,13 +39607,6 @@ }, /turf/open/floor/iron/dark, /area/station/science/ordnance) -"nCc" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/machinery/duct, -/turf/open/floor/iron/white/smooth_large, -/area/station/medical/surgery/aft) "nCr" = ( /obj/machinery/status_display/ai/directional/east, /turf/open/floor/iron/white, @@ -39625,17 +39662,6 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron, /area/station/security/prison) -"nCL" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "nCQ" = ( /obj/machinery/atmospherics/pipe/bridge_pipe/purple/visible{ dir = 4 @@ -40100,26 +40126,6 @@ /obj/machinery/light/small/dim/directional/south, /turf/open/floor/plating, /area/station/maintenance/port) -"nKO" = ( -/obj/structure/toilet{ - dir = 1 - }, -/obj/machinery/light/small/directional/east, -/obj/machinery/newscaster/directional/east, -/obj/effect/landmark/start/assistant, -/obj/effect/landmark/start/hangover, -/obj/machinery/button/door/directional/south{ - id = "Toilet4"; - name = "Lock Control"; - normaldoorcontrol = 1; - specialfunctions = 4 - }, -/obj/effect/spawner/random/trash/graffiti{ - pixel_y = -32; - spawn_loot_chance = 50 - }, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet/restrooms) "nLq" = ( /obj/machinery/airalarm/directional/south, /turf/open/floor/wood, @@ -40501,26 +40507,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/yellow/visible, /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) -"nTD" = ( -/obj/structure/table/reinforced, -/obj/item/book/manual/wiki/engineering_hacking{ - pixel_x = 2; - pixel_y = 3 - }, -/obj/item/book/manual/wiki/engineering_guide{ - pixel_x = -2 - }, -/obj/item/trash/can{ - pixel_x = -8 - }, -/obj/machinery/firealarm/directional/south, -/obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/hidden{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow/anticorner/contrasted, -/obj/machinery/wall_healer/directional/east, -/turf/open/floor/iron, -/area/station/engineering/break_room) "nTH" = ( /obj/structure/cable, /obj/machinery/computer/crew{ @@ -40604,20 +40590,6 @@ }, /turf/open/floor/iron, /area/station/service/hydroponics/garden) -"nWd" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/duct, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/machinery/wall_healer/directional/north, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "nWk" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/trimline/red/filled/line{ @@ -40650,6 +40622,13 @@ /obj/effect/turf_decal/trimline/blue/filled/warning, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"nWB" = ( +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 4 + }, +/obj/machinery/camera/directional/north, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) "nWS" = ( /obj/structure/window/reinforced/spawner/directional/west, /turf/open/space/basic, @@ -40714,16 +40693,6 @@ /obj/structure/grille/broken, /turf/open/space/basic, /area/space/nearstation) -"nYL" = ( -/obj/machinery/door/airlock/hatch{ - name = "Xenobiology Maintenance" - }, -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/effect/mapping_helpers/airlock/access/all/science/xenobio, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/department/science/xenobiology) "nYU" = ( /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating, @@ -40855,6 +40824,16 @@ }, /turf/open/floor/iron, /area/station/security/checkpoint/customs) +"oay" = ( +/obj/machinery/door/airlock/hatch{ + name = "Xenobiology Maintenance" + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/effect/mapping_helpers/airlock/access/all/science/xenobio, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/department/science/xenobiology) "oaB" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 8 @@ -41212,14 +41191,6 @@ /obj/effect/turf_decal/tile/green/fourcorners, /turf/open/floor/iron/showroomfloor, /area/station/maintenance/starboard/lesser) -"ohY" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/aft/greater) "ohZ" = ( /obj/machinery/suit_storage_unit/rd, /obj/effect/turf_decal/stripes/line{ @@ -41256,11 +41227,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/science/genetics) -"oiz" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/reagent_dispensers/fueltank, -/turf/open/floor/plating, -/area/station/maintenance/fore) "oiI" = ( /obj/machinery/air_sensor/nitrous_tank, /turf/open/floor/engine/n2o, @@ -41272,23 +41238,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, /area/station/maintenance/port/aft) -"oiX" = ( -/obj/machinery/door/airlock/mining{ - name = "Deliveries" - }, -/obj/machinery/door/firedoor, -/obj/structure/cable, -/obj/effect/mapping_helpers/airlock/access/any/supply/shipping, -/obj/effect/turf_decal/tile/brown/opposingcorners, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 1; - name = "Cargo Lockdown Shutters"; - id = "cargolockdown" - }, -/turf/open/floor/iron, -/area/station/cargo/sorting) "ojo" = ( /obj/effect/turf_decal/siding/wood{ dir = 6 @@ -41473,6 +41422,12 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat/foyer) +"omK" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "omV" = ( /obj/effect/spawner/random/structure/grille, /obj/structure/cable, @@ -41490,13 +41445,6 @@ }, /turf/open/floor/iron, /area/station/service/hydroponics) -"onv" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/obj/machinery/light/directional/west, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "onD" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 @@ -41555,14 +41503,6 @@ "oor" = ( /turf/closed/wall, /area/station/security/checkpoint/supply) -"oos" = ( -/obj/machinery/door/airlock{ - id_tag = "Toilet1"; - name = "Unit 1" - }, -/obj/machinery/duct, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet/restrooms) "ooz" = ( /obj/structure/closet/emcloset, /obj/machinery/camera/directional/west{ @@ -42193,12 +42133,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/solars/starboard/fore) -"ozP" = ( -/obj/effect/turf_decal/tile/red/fourcorners, -/obj/structure/closet/secure_closet/security/cargo, +"ozN" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, /obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/security/checkpoint/supply) +/obj/structure/disposalpipe/segment, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "ozX" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -42581,20 +42524,6 @@ /obj/effect/mapping_helpers/airlock/access/all/science/ordnance, /turf/open/floor/plating, /area/station/science/ordnance) -"oGf" = ( -/obj/machinery/door/airlock/maintenance, -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "viro-passthrough" - }, -/obj/effect/mapping_helpers/airlock/unres, -/obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/medical/medbay/central) "oGj" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible, /obj/effect/turf_decal/box, @@ -42767,17 +42696,6 @@ "oIg" = ( /turf/closed/wall/r_wall, /area/station/science/genetics) -"oIC" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/machinery/wall_healer/directional/south, -/turf/open/floor/iron, -/area/station/hallway/secondary/command) "oIG" = ( /obj/structure/lattice/catwalk, /turf/open/space/basic, @@ -42821,6 +42739,14 @@ /obj/effect/spawner/random/structure/closet_maintenance, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) +"oJB" = ( +/obj/structure/table, +/obj/item/toy/plush/slimeplushie{ + name = "Nanners" + }, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/department/science/xenobiology) "oJD" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 4 @@ -42956,11 +42882,6 @@ }, /turf/open/floor/iron, /area/station/security/checkpoint/engineering) -"oMs" = ( -/obj/machinery/duct, -/obj/structure/falsewall, -/turf/open/floor/plating, -/area/station/maintenance/port) "oMx" = ( /obj/effect/mapping_helpers/airlock/access/any/supply/bit_den, /obj/machinery/door/airlock/maintenance{ @@ -43024,6 +42945,14 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/circuit/green, /area/station/ai_monitored/turret_protected/ai_upload) +"oOy" = ( +/obj/effect/landmark/start/botanist, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/service/hydroponics) "oOz" = ( /obj/machinery/status_display/evac/directional/north, /obj/structure/table/wood, @@ -43196,6 +43125,19 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) +"oRL" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/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, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/science/xenobiology/hallway) "oRM" = ( /obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ dir = 4 @@ -43349,14 +43291,6 @@ /obj/machinery/digital_clock/directional/north, /turf/open/floor/iron, /area/station/hallway/secondary/command) -"oUE" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/turf_decal/tile/red/opposingcorners, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/security/prison/mess) "oUK" = ( /obj/structure/table, /obj/item/electronics/apc, @@ -43403,17 +43337,6 @@ }, /turf/open/floor/iron, /area/station/security/courtroom) -"oWa" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/landmark/navigate_destination, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "oWc" = ( /obj/structure/sign/warning/electric_shock, /turf/closed/wall/r_wall, @@ -43479,25 +43402,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/solars/starboard/aft) -"oXK" = ( -/obj/structure/safe/vault, -/obj/item/storage/briefcase/secure/riches, -/obj/item/storage/backpack/duffelbag/syndie/hitman, -/obj/item/card/id/advanced/silver/reaper, -/obj/item/lazarus_injector, -/obj/item/gun/energy/disabler, -/obj/item/gun/ballistic/revolver/russian, -/obj/item/ammo_box/a357, -/obj/item/clothing/neck/stethoscope, -/obj/item/book{ - desc = "An undeniably handy book."; - icon_state = "bookknock"; - name = "\improper A Simpleton's Guide to Safe-cracking with Stethoscopes" - }, -/obj/effect/turf_decal/bot_white/left, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/command/nuke_storage) "oXL" = ( /obj/machinery/disposal/bin, /obj/structure/cable, @@ -43612,11 +43516,6 @@ /obj/structure/window/spawner/directional/south, /turf/open/floor/iron/dark, /area/station/commons/fitness/recreation) -"oZL" = ( -/obj/effect/turf_decal/tile/red/opposingcorners, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/security/prison/mess) "oZN" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, @@ -43630,21 +43529,6 @@ /obj/effect/turf_decal/trimline/blue/filled/mid_joiner, /turf/open/floor/iron/white/smooth_large, /area/station/medical/surgery/theatre) -"oZZ" = ( -/obj/structure/disposalpipe/sorting/mail/flip{ - dir = 2 - }, -/obj/structure/cable, -/obj/effect/turf_decal/stripes/line{ - 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, -/obj/effect/mapping_helpers/mail_sorting/service/janitor_closet, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/maintenance/starboard/greater) "pab" = ( /obj/structure/table, /obj/item/stock_parts/subspace/ansible, @@ -43838,14 +43722,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/service/hydroponics) -"pdx" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/item/cigbutt/roach, -/turf/open/floor/iron, -/area/station/maintenance/starboard/greater) "pdI" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/security/glass{ @@ -43978,6 +43854,13 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) +"pgA" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/burnt_floor, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port) "pgD" = ( /obj/machinery/door/airlock/maintenance{ name = "Chapel Maintenance" @@ -44005,15 +43888,6 @@ }, /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) -"pgM" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "pgU" = ( /obj/structure/chair{ dir = 4 @@ -44089,6 +43963,23 @@ }, /turf/open/floor/iron, /area/station/command/gateway) +"pih" = ( +/obj/machinery/door/airlock/mining{ + name = "Deliveries" + }, +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/any/supply/shipping, +/obj/effect/turf_decal/tile/brown/opposingcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 1; + name = "Cargo Lockdown Shutters"; + id = "cargolockdown" + }, +/turf/open/floor/iron, +/area/station/cargo/sorting) "piv" = ( /obj/effect/turf_decal/stripes/corner{ dir = 4 @@ -44273,6 +44164,14 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) +"plL" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/obj/machinery/wall_healer/directional/west, +/turf/open/floor/iron, +/area/station/commons/fitness/recreation) "pma" = ( /turf/closed/wall/r_wall, /area/station/maintenance/solars/port/fore) @@ -44323,6 +44222,19 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/solars/starboard/aft) +"pmx" = ( +/obj/structure/cable, +/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/effect/turf_decal/tile/green/half/contrasted{ + dir = 8 + }, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/virology) "pmA" = ( /obj/machinery/door/firedoor, /obj/machinery/smartfridge/food, @@ -44385,17 +44297,6 @@ /obj/effect/turf_decal/caution, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"pnx" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/maintenance/starboard/greater) "pnD" = ( /obj/machinery/airalarm/directional/north, /obj/effect/spawner/random/structure/closet_private, @@ -44462,6 +44363,25 @@ /obj/machinery/holopad, /turf/open/floor/iron/white, /area/station/command/heads_quarters/rd) +"poG" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Service Maintenance" + }, +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "service-passthrough" + }, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/starboard/greater) "poJ" = ( /obj/machinery/telecomms/hub/preset, /turf/open/floor/circuit/green/telecomms/mainframe, @@ -44564,14 +44484,6 @@ /obj/machinery/module_duplicator, /turf/open/floor/iron/white, /area/station/science/explab) -"pqz" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Storage Room" - }, -/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "pqH" = ( /obj/structure/window/reinforced/spawner/directional/west, /turf/open/floor/iron/dark, @@ -44748,6 +44660,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"pta" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/landmark/event_spawn, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) "ptd" = ( /obj/structure/sign/warning/vacuum/external/directional/north, /obj/effect/decal/cleanable/dirt/dust, @@ -44780,6 +44698,20 @@ }, /turf/open/floor/iron/white, /area/station/science/research) +"ptP" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/maintenance/starboard/greater) "pua" = ( /obj/machinery/vending/assist, /obj/effect/landmark/navigate_destination, @@ -44949,6 +44881,18 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/closed/wall, /area/station/maintenance/starboard/fore) +"pxK" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; + name = "Cargo Lobby Lockdown Shutters"; + id = "cargolobbylockdown" + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) "pxN" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/delivery, @@ -45029,16 +44973,6 @@ /obj/item/radio/intercom/directional/south, /turf/open/floor/iron/white, /area/station/medical/treatment_center) -"pyX" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/machinery/wall_healer/directional/south, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "pyY" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -45388,6 +45322,27 @@ /obj/structure/cable, /turf/open/floor/circuit/green, /area/station/science/robotics/mechbay) +"pGp" = ( +/obj/structure/toilet{ + pixel_y = 8; + dir = 4 + }, +/obj/machinery/light/small/directional/west, +/obj/machinery/newscaster/directional/south, +/obj/effect/landmark/blobstart, +/obj/effect/landmark/start/hangover, +/obj/machinery/button/door/directional/west{ + id = "Toilet1"; + name = "Lock Control"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/obj/effect/spawner/random/trash/graffiti{ + pixel_x = -32; + spawn_loot_chance = 50 + }, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) "pGu" = ( /obj/structure/cable, /obj/effect/turf_decal/stripes/corner{ @@ -45469,14 +45424,6 @@ }, /turf/open/floor/iron, /area/station/engineering/break_room) -"pHt" = ( -/obj/structure/table, -/obj/item/toy/plush/slimeplushie{ - name = "Nanners" - }, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/department/science/xenobiology) "pHv" = ( /obj/machinery/door/airlock/maintenance{ name = "Surgery Maintenance" @@ -45608,13 +45555,6 @@ /obj/item/radio/intercom/directional/north, /turf/open/floor/iron/dark/textured_large, /area/station/cargo/bitrunning/den) -"pJu" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/duct, -/turf/open/floor/iron/freezer, -/area/station/security/prison/shower) "pJv" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/window/reinforced/spawner/directional/north, @@ -45800,16 +45740,6 @@ /obj/machinery/telecomms/receiver/preset_right, /turf/open/floor/circuit/green/telecomms/mainframe, /area/station/tcommsat/server) -"pNf" = ( -/obj/machinery/door/airlock{ - name = "Hydroponics Backroom" - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/starboard/greater) "pNk" = ( /obj/structure/extinguisher_cabinet/directional/north, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -45934,13 +45864,6 @@ /obj/machinery/firealarm/directional/south, /turf/open/floor/iron, /area/station/hallway/primary/port) -"pON" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/sign/poster/contraband/random/directional/north, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/port) "pPh" = ( /obj/structure/closet/secure_closet/miner, /obj/item/clothing/suit/hooded/wintercoat/miner, @@ -46001,15 +45924,6 @@ /obj/effect/mapping_helpers/airlock/access/all/security/brig, /turf/open/floor/iron, /area/station/security/prison/safe) -"pQj" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "pQr" = ( /obj/effect/spawner/random/trash/garbage, /obj/effect/landmark/generic_maintenance_landmark, @@ -46131,14 +46045,6 @@ /obj/item/reagent_containers/spray/pepper, /turf/open/floor/iron, /area/station/security/execution/transfer) -"pSa" = ( -/obj/effect/turf_decal/trimline/red/filled/corner{ - dir = 1 - }, -/obj/structure/cable, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/security/prison) "pSl" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 5 @@ -46278,6 +46184,26 @@ /obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, /turf/open/floor/iron, /area/station/hallway/secondary/service) +"pUB" = ( +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/locked, +/obj/machinery/door/airlock/research{ + autoclose = 0; + frequency = 1449; + id_tag = "xeno_airlock_interior"; + name = "Xenobiology Lab Internal Airlock" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/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/science/xenobio, +/obj/effect/turf_decal/tile/purple/fourcorners, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/science/xenobiology/hallway) "pUM" = ( /obj/structure/table, /obj/effect/turf_decal/siding/white/corner, @@ -46425,17 +46351,6 @@ /obj/machinery/atmospherics/components/unary/airlock_pump/unbolt_only, /turf/open/floor/plating, /area/station/maintenance/solars/port/fore) -"pWX" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/green/half/contrasted{ - dir = 1 - }, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/medical/virology) "pXh" = ( /obj/item/radio/intercom/directional/south, /turf/open/floor/iron/dark, @@ -46542,10 +46457,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/security/prison) -"pZr" = ( -/obj/machinery/duct, -/turf/open/floor/carpet/green, -/area/station/maintenance/port/aft) "pZG" = ( /obj/machinery/power/solar_control{ id = "forestarboard"; @@ -46766,6 +46677,14 @@ /obj/structure/dresser, /turf/open/floor/carpet, /area/station/commons/dorms) +"qeq" = ( +/obj/machinery/door/airlock{ + name = "Cleaning Closet" + }, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/dark, +/area/station/security/prison/safe) "qer" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -46910,13 +46829,12 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"qgn" = ( +"qgr" = ( /obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/effect/turf_decal/stripes/line{ - dir = 8 +/obj/effect/spawner/random/trash/garbage{ + spawn_scatter_radius = 1 }, -/obj/effect/decal/cleanable/cobweb, +/obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/department/science/xenobiology) "qgt" = ( @@ -47074,15 +46992,6 @@ /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"qiD" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "qiH" = ( /obj/machinery/light/small/directional/west, /obj/machinery/airalarm/directional/west, @@ -47126,6 +47035,22 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/security/execution/transfer) +"qju" = ( +/obj/machinery/door/airlock/maintenance, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "viro-passthrough" + }, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/medical/medbay/central) "qjy" = ( /obj/effect/spawner/random/engineering/tank, /turf/open/floor/plating, @@ -47170,18 +47095,6 @@ /obj/item/reagent_containers/cup/soda_cans/monkey_energy, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"qkq" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/science/xenobiology/hallway) "qkA" = ( /obj/machinery/computer/security, /obj/effect/turf_decal/tile/red/half/contrasted{ @@ -47202,6 +47115,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) +"qkY" = ( +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/security/prison/mess) "qlc" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/tile/blue{ @@ -47318,19 +47236,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/aisat/exterior) -"qmU" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "qnj" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -47384,6 +47289,16 @@ /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/fore) +"qof" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/wall_healer/directional/east, +/turf/open/floor/iron, +/area/station/cargo/storage) "qos" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -47498,6 +47413,14 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"qqJ" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/machinery/door/firedoor, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/security/prison) "qrg" = ( /obj/machinery/light_switch/directional/north, /turf/open/floor/circuit/green{ @@ -47534,6 +47457,13 @@ /obj/machinery/computer/security/telescreen/minisat/directional/south, /turf/open/floor/carpet, /area/station/command/heads_quarters/captain/private) +"qrG" = ( +/obj/effect/spawner/random/entertainment/arcade, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/delivery, +/obj/machinery/wall_healer/directional/north, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit/departure_lounge) "qrO" = ( /obj/machinery/chem_dispenser/drinks{ dir = 1 @@ -47670,6 +47600,11 @@ /obj/structure/table/wood, /turf/open/floor/carpet, /area/station/command/corporate_showroom) +"qts" = ( +/obj/structure/mirror/directional/west, +/obj/structure/sink/directional/east, +/turf/open/floor/iron/freezer, +/area/station/commons/fitness/recreation) "qua" = ( /obj/machinery/atmospherics/pipe/smart/manifold/yellow/visible{ dir = 1 @@ -47717,15 +47652,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/cargo/storage) -"qvC" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "qvJ" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -47809,12 +47735,15 @@ dir = 1 }, /area/station/service/chapel) -"qxr" = ( +"qxj" = ( /obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/duct, /turf/open/floor/plating, -/area/station/maintenance/department/science/xenobiology) +/area/station/maintenance/starboard/greater) "qxt" = ( /obj/effect/turf_decal/bot, /turf/open/floor/engine, @@ -47904,14 +47833,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) -"qzf" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "qzg" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, /obj/machinery/meter/layer4, @@ -48013,26 +47934,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/security/prison) -"qBo" = ( -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/locked, -/obj/machinery/door/airlock/research{ - autoclose = 0; - frequency = 1449; - id_tag = "xeno_airlock_interior"; - name = "Xenobiology Lab Internal Airlock" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/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/science/xenobio, -/obj/effect/turf_decal/tile/purple/fourcorners, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/science/xenobiology/hallway) "qBq" = ( /obj/structure/rack, /obj/effect/landmark/blobstart, @@ -48273,6 +48174,15 @@ /obj/structure/chair/stool/directional/west, /turf/open/floor/iron, /area/station/commons/locker) +"qFV" = ( +/obj/machinery/light/directional/east, +/obj/structure/cable, +/obj/machinery/light_switch/directional/east{ + pixel_y = -2; + pixel_x = 21 + }, +/turf/open/floor/catwalk_floor/iron, +/area/station/cargo/storage) "qGa" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/grunge{ @@ -48352,16 +48262,6 @@ /obj/machinery/computer/security/telescreen/ce/directional/south, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/ce) -"qHp" = ( -/obj/structure/cable, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/wall_healer/directional/east, -/turf/open/floor/iron, -/area/station/cargo/storage) "qHs" = ( /obj/structure/sign/warning/docking, /turf/closed/wall, @@ -48450,6 +48350,13 @@ /obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/iron/dark, /area/station/ai_monitored/aisat/exterior) +"qIR" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port) "qIS" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, @@ -48526,16 +48433,6 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"qKz" = ( -/obj/structure/cable, -/obj/machinery/door/poddoor/shutters/preopen{ - name = "QM Privacy Shutters"; - id = "qmroom"; - dir = 8 - }, -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/station/command/heads_quarters/qm) "qKD" = ( /obj/structure/sign/poster/random/directional/east, /obj/effect/turf_decal/tile/bar, @@ -48814,6 +48711,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/station/command/bridge) +"qNX" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/machinery/wall_healer/directional/south, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "qOk" = ( /obj/structure/table/optable, /obj/item/radio/intercom/directional/south, @@ -48877,13 +48784,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"qOT" = ( -/obj/item/storage/bag/trash, -/obj/machinery/airalarm/directional/west, -/obj/structure/cable, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/security/prison/safe) "qOV" = ( /obj/structure/table, /obj/item/reagent_containers/condiment/saltshaker{ @@ -49609,6 +49509,19 @@ "rac" = ( /turf/closed/wall, /area/station/commons/lounge) +"raf" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/brown{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "rao" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -49799,27 +49712,6 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) -"rdT" = ( -/obj/structure/toilet{ - pixel_y = 8; - dir = 4 - }, -/obj/machinery/light/small/directional/west, -/obj/machinery/newscaster/directional/south, -/obj/effect/landmark/blobstart, -/obj/effect/landmark/start/hangover, -/obj/machinery/button/door/directional/west{ - id = "Toilet1"; - name = "Lock Control"; - normaldoorcontrol = 1; - specialfunctions = 4 - }, -/obj/effect/spawner/random/trash/graffiti{ - pixel_x = -32; - spawn_loot_chance = 50 - }, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet/restrooms) "rea" = ( /obj/effect/turf_decal/stripes/red/line{ dir = 5 @@ -49895,6 +49787,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/lockers) +"rfe" = ( +/obj/effect/turf_decal/tile/brown{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "rff" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -49904,9 +49804,26 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/solars/starboard/fore) +"rfn" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port) "rft" = ( /turf/closed/wall/r_wall, /area/station/security/prison/mess) +"rfA" = ( +/obj/structure/cable, +/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/effect/landmark/firealarm_sanity, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/virology) "rfY" = ( /obj/structure/lattice, /obj/structure/sign/warning/electric_shock/directional/east, @@ -49995,6 +49912,28 @@ /obj/machinery/light/directional/east, /turf/open/floor/iron, /area/station/construction/storage_wing) +"rie" = ( +/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, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/virology) +"rim" = ( +/obj/machinery/door/airlock/maintenance, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "viro-passthrough" + }, +/obj/effect/mapping_helpers/airlock/unres, +/obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/medical/medbay/central) "riq" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 @@ -50085,14 +50024,6 @@ /obj/machinery/recharge_station, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"rkf" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/duct, -/obj/machinery/wall_healer/directional/west, -/turf/open/floor/iron, -/area/station/commons/fitness/recreation) "rkg" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -50380,6 +50311,13 @@ /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/surgery/theatre) +"rpt" = ( +/obj/structure/toilet{ + pixel_y = 8 + }, +/obj/structure/light_construct/small/directional/south, +/turf/open/floor/plating, +/area/station/maintenance/aft/greater) "rpw" = ( /obj/effect/turf_decal/trimline/blue/filled/warning{ dir = 1 @@ -50477,6 +50415,11 @@ /obj/machinery/digital_clock/directional/south, /turf/open/floor/iron, /area/station/service/bar) +"rrF" = ( +/obj/machinery/light/small/directional/south, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/security/prison/shower) "rrL" = ( /obj/effect/turf_decal/delivery, /obj/machinery/door/poddoor/preopen{ @@ -50533,6 +50476,13 @@ /obj/structure/window/reinforced/spawner/directional/west, /turf/open/floor/iron, /area/station/science/xenobiology) +"rsA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/security/prison/shower) "rsD" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -50545,6 +50495,19 @@ dir = 4 }, /area/station/science/lab) +"rsF" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/spawner/random/trash/garbage{ + spawn_scatter_radius = 1 + }, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/starboard/greater) "rsI" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 1 @@ -50879,6 +50842,15 @@ }, /turf/open/floor/iron, /area/station/science/xenobiology) +"rwy" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/security/prison) "rwE" = ( /obj/structure/table, /obj/item/paper_bin{ @@ -51093,19 +51065,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/brig) -"rAa" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Storage Room" - }, -/obj/effect/mapping_helpers/airlock/abandoned, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 1 - }, -/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/port) "rAo" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/reagent_dispensers/watertank, @@ -51330,17 +51289,6 @@ }, /turf/open/floor/wood, /area/station/service/library) -"rFO" = ( -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/bot, -/obj/structure/sink/kitchen/directional/east, -/turf/open/floor/iron/cafeteria, -/area/station/service/kitchen) "rFR" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 4 @@ -51479,6 +51427,14 @@ /obj/effect/spawner/random/structure/grille, /turf/open/floor/plating, /area/station/maintenance/port) +"rHM" = ( +/obj/machinery/door/airlock{ + id_tag = "Toilet2"; + name = "Unit 2" + }, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) "rHZ" = ( /obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible, /obj/machinery/atmospherics/components/binary/valve/digital{ @@ -51912,16 +51868,6 @@ /obj/structure/flora/bush/fullgrass/style_random, /turf/open/floor/grass, /area/station/science/ordnance/office) -"rPB" = ( -/obj/effect/spawner/structure/window, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 1; - name = "Cargo Lockdown Shutters"; - id = "cargolockdown" - }, -/turf/open/floor/plating, -/area/station/cargo/sorting) "rPF" = ( /obj/machinery/shower/directional/south{ name = "emergency shower" @@ -52161,15 +52107,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/security/evidence) -"rTF" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Surgery C Maintenance" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/mapping_helpers/airlock/access/all/medical/surgery, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/aft/greater) "rTL" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -52259,14 +52196,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/solars/starboard/aft) -"rUU" = ( -/obj/effect/turf_decal/tile/green/half/contrasted{ - dir = 1 - }, -/obj/machinery/light/cold/directional/north, -/obj/structure/reagent_dispensers/plumbed, -/turf/open/floor/iron/white, -/area/station/medical/virology) "rVb" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 4 @@ -52322,22 +52251,10 @@ /obj/effect/turf_decal/trimline/purple/filled/warning, /turf/open/floor/iron, /area/station/science/lab) -"rVY" = ( -/obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/port) "rVZ" = ( /obj/structure/cable, /turf/open/floor/grass, /area/station/medical/virology) -"rWf" = ( -/obj/structure/urinal/directional/north, -/obj/structure/cable, -/obj/machinery/light/floor, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet/restrooms) "rWi" = ( /obj/machinery/portable_atmospherics/canister/nitrogen, /turf/open/floor/engine/n2, @@ -52585,6 +52502,14 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"saA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/surgery/theatre) "saB" = ( /obj/machinery/button/door/directional/west{ id = "atmoshfr"; @@ -52623,6 +52548,17 @@ /obj/structure/bookcase/random/religion, /turf/open/floor/wood, /area/station/service/library) +"saO" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/maintenance/starboard/greater) "saU" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -52729,18 +52665,6 @@ }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/rd) -"scw" = ( -/obj/item/folder/white{ - pixel_x = 4; - pixel_y = -3 - }, -/obj/structure/table/glass, -/obj/effect/turf_decal/tile/green/half/contrasted{ - dir = 8 - }, -/obj/machinery/wall_healer/directional/west, -/turf/open/floor/iron/dark, -/area/station/command/bridge) "scB" = ( /obj/structure/chair/office/light, /turf/open/floor/iron/white, @@ -52828,6 +52752,14 @@ /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/department/engine) +"sen" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/surgery/aft) "sey" = ( /obj/structure/sign/departments/court/directional/north, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -52841,6 +52773,13 @@ /obj/structure/sign/directions/evac, /turf/closed/wall/r_wall, /area/station/hallway/primary/aft) +"sff" = ( +/obj/effect/spawner/random/maintenance, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port) "sfg" = ( /obj/structure/cable, /obj/effect/turf_decal/trimline/red/filled/line{ @@ -52926,6 +52865,14 @@ /obj/effect/turf_decal/tile/purple/opposingcorners, /turf/open/floor/iron, /area/station/science/research) +"sgI" = ( +/obj/item/reagent_containers/cup/bucket, +/obj/item/mop, +/obj/item/reagent_containers/cup/bottle/ammonia, +/obj/structure/cable, +/mob/living/basic/mouse/brown/tom, +/turf/open/floor/plating, +/area/station/security/prison/safe) "sgX" = ( /obj/machinery/atmospherics/pipe/smart/simple/green/visible{ dir = 4 @@ -52967,11 +52914,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"shR" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/machinery/wall_healer/directional/east, -/turf/open/floor/iron, -/area/station/hallway/primary/aft) "shV" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/cable, @@ -52982,13 +52924,6 @@ }, /turf/open/floor/iron, /area/station/engineering/main) -"sie" = ( -/obj/effect/turf_decal/stripes/corner, -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "sik" = ( /obj/structure/railing/corner/end{ dir = 4 @@ -53299,12 +53234,6 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) -"soa" = ( -/obj/structure/sign/poster/official/random/directional/south, -/obj/machinery/light/small/directional/west, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/commons/toilet/auxiliary) "sof" = ( /obj/effect/turf_decal/tile/blue{ dir = 8 @@ -53507,20 +53436,6 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/hallway/primary/central) -"stD" = ( -/obj/machinery/door/airlock/medical/glass{ - name = "Primary Treatment Centre" - }, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/airlock/access/all/medical/general, -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron/white, -/area/station/medical/treatment_center) "stI" = ( /obj/effect/turf_decal/delivery, /obj/structure/table, @@ -53686,14 +53601,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/aft/greater) -"swR" = ( -/obj/machinery/door/airlock{ - name = "Cleaning Closet" - }, -/obj/structure/cable, -/obj/machinery/duct, -/turf/open/floor/iron/dark, -/area/station/security/prison/safe) "swV" = ( /obj/effect/turf_decal/trimline/purple/line{ dir = 4 @@ -53703,14 +53610,6 @@ }, /turf/open/floor/iron/white, /area/station/science/research) -"sxf" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 8 - }, -/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/medical/treatment_center) "sxg" = ( /obj/machinery/door/firedoor, /turf/open/floor/iron/white/side, @@ -53737,6 +53636,16 @@ /obj/machinery/computer/security/wooden_tv, /turf/open/floor/wood, /area/station/command/heads_quarters/captain/private) +"sxU" = ( +/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 = 6 + }, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/virology) "sxX" = ( /obj/effect/turf_decal/siding/wood{ dir = 1 @@ -53754,14 +53663,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/security/brig) -"syg" = ( -/obj/structure/table/wood, -/obj/effect/spawner/random/food_or_drink/booze{ - spawn_random_offset = 1 - }, -/obj/machinery/duct, -/turf/open/floor/wood, -/area/station/maintenance/port/aft) "syh" = ( /obj/machinery/door/poddoor/shutters{ id = "maintwarehouse" @@ -53868,24 +53769,6 @@ "szp" = ( /turf/closed/wall, /area/station/commons/fitness/recreation) -"szD" = ( -/obj/machinery/power/apc/auto_name/directional/south, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/structure/cable, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 4; - name = "Cargo Lobby Lockdown Shutters"; - id = "cargolobbylockdown" - }, -/turf/open/floor/iron, -/area/station/cargo/lobby) "szJ" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/landmark/start/janitor, @@ -53982,6 +53865,12 @@ }, /turf/open/floor/iron, /area/station/security/holding_cell) +"sBR" = ( +/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/white, +/area/station/medical/medbay/central) "sBS" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -54266,6 +54155,13 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) +"sFn" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/service/hydroponics) "sFo" = ( /obj/machinery/button/crematorium{ id = "crematoriumChapel"; @@ -54291,18 +54187,6 @@ }, /turf/open/floor/iron, /area/station/service/kitchen) -"sFY" = ( -/obj/effect/turf_decal/trimline/blue/filled/corner{ - dir = 8 - }, -/obj/structure/sign/departments/psychology/directional/west, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "sGm" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -54316,15 +54200,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"sGv" = ( -/obj/machinery/light/directional/east, -/obj/structure/cable, -/obj/machinery/light_switch/directional/east{ - pixel_y = -2; - pixel_x = 21 - }, -/turf/open/floor/catwalk_floor/iron, -/area/station/cargo/storage) "sGw" = ( /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible/layer5{ dir = 9 @@ -54360,12 +54235,29 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/maintenance/solars/port/aft) +"sGM" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/spawner/random/trash/soap{ + spawn_scatter_radius = 1 + }, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/security/prison/shower) "sGP" = ( /obj/effect/landmark/blobstart, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/landmark/event_spawn, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) +"sGR" = ( +/obj/structure/cable, +/obj/machinery/door/airlock/hatch{ + name = "Observation Room" + }, +/obj/effect/mapping_helpers/airlock/access/all/science/xenobio, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/department/science/xenobiology) "sHg" = ( /obj/item/radio/intercom/directional/south, /obj/machinery/camera/directional/south{ @@ -54586,16 +54478,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/grimy, /area/station/service/chapel/office) -"sMo" = ( -/obj/structure/sign/poster/official/cleanliness/directional/west, -/obj/structure/sink/directional/south, -/obj/effect/turf_decal/tile/green/anticorner/contrasted{ - dir = 1 - }, -/obj/structure/mirror/directional/north, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/iron/white, -/area/station/medical/virology) "sMB" = ( /obj/machinery/door/window/brigdoor/security/cell/left/directional/south{ id = "Cell 1"; @@ -54704,6 +54586,20 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/science/genetics) +"sOd" = ( +/obj/machinery/door/airlock/medical/glass{ + name = "Primary Treatment Centre" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/airlock/access/all/medical/general, +/obj/effect/turf_decal/tile/blue/fourcorners, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) "sOi" = ( /obj/structure/table/wood, /obj/item/folder/red, @@ -54746,19 +54642,6 @@ /obj/structure/light_construct/directional/east, /turf/open/floor/wood, /area/station/commons/vacant_room/office) -"sOM" = ( -/obj/structure/cable, -/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/effect/turf_decal/tile/green/half/contrasted{ - dir = 8 - }, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/medical/virology) "sOP" = ( /obj/structure/rack, /obj/item/toy/plush/lizard_plushie/green{ @@ -54798,17 +54681,19 @@ /obj/effect/landmark/navigate_destination, /turf/open/floor/wood, /area/station/command/heads_quarters/hos) -"sPq" = ( -/obj/structure/cable, +"sPk" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Storage Room" + }, +/obj/effect/mapping_helpers/airlock/abandoned, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/stripes/line{ +/obj/effect/mapping_helpers/airlock/unres{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, /obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) +/turf/open/floor/plating, +/area/station/maintenance/port) "sPy" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -55104,13 +54989,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) -"sTA" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/port) "sTK" = ( /obj/item/radio/intercom/directional/south, /obj/effect/turf_decal/tile/blue/half/contrasted, @@ -55298,6 +55176,13 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) +"sWr" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) "sWs" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, @@ -55340,17 +55225,6 @@ "sWV" = ( /turf/closed/wall/r_wall, /area/station/security/detectives_office) -"sWZ" = ( -/obj/structure/cable, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/aft/greater) "sXe" = ( /obj/effect/landmark/start/station_engineer, /obj/machinery/light/directional/west, @@ -55466,13 +55340,21 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/iron, /area/station/science/xenobiology) -"tak" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/mapping_helpers/burnt_floor, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/port) +"sZP" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/tile/brown{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; + name = "Cargo Lobby Lockdown Shutters"; + id = "cargolobbylockdown" + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) "tar" = ( /obj/machinery/medical_kiosk, /obj/effect/turf_decal/tile/blue/half/contrasted, @@ -55486,6 +55368,11 @@ }, /turf/open/floor/iron/solarpanel/airless, /area/station/solars/starboard/fore) +"taB" = ( +/obj/structure/urinal/directional/north, +/obj/structure/cable, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) "taD" = ( /obj/structure/railing/corner/end/flip{ dir = 8 @@ -55568,13 +55455,6 @@ }, /turf/open/floor/iron, /area/station/commons/lounge) -"tbm" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "tbp" = ( /obj/machinery/door/airlock/command/glass{ name = "Server Access" @@ -55802,16 +55682,6 @@ }, /turf/open/floor/iron, /area/station/commons/fitness/recreation) -"tgC" = ( -/obj/structure/noticeboard/directional/south, -/obj/structure/table/wood, -/obj/machinery/computer/records/medical/laptop{ - dir = 1; - pixel_y = 4 - }, -/obj/effect/turf_decal/siding/wood, -/turf/open/floor/wood/parquet, -/area/station/medical/psychology) "tgD" = ( /obj/structure/table/glass, /obj/item/clothing/gloves/latex, @@ -55863,21 +55733,6 @@ dir = 8 }, /area/station/medical/morgue) -"thT" = ( -/obj/structure/cable, -/obj/machinery/camera/directional/east{ - c_tag = "Xenobiology Lab - Central West"; - network = list("ss13","rd","xeno") - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/button/door/directional/east{ - id = "XenoPens"; - name = "Xenobiology Shutters"; - req_access = list("xenobiology") - }, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/science/xenobiology) "thY" = ( /obj/effect/spawner/random/structure/grille, /obj/effect/turf_decal/stripes/line{ @@ -56139,16 +55994,6 @@ dir = 4 }, /area/station/service/chapel) -"tmI" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/airlock{ - id_tag = "AuxShower"; - name = "Showers" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/commons/toilet/auxiliary) "tmK" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -56392,6 +56237,12 @@ /obj/effect/landmark/start/cargo_technician, /turf/open/floor/iron, /area/station/cargo/storage) +"tqr" = ( +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/structure/closet/secure_closet/security/cargo, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/supply) "tqx" = ( /obj/machinery/door/window/left/directional/north{ name = "Mass Driver Control Door"; @@ -56443,6 +56294,18 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/commons/fitness/recreation) +"trC" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/spawner/random/trash/garbage{ + spawn_scatter_radius = 1 + }, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "trE" = ( /obj/structure/window/reinforced/spawner/directional/north, /obj/structure/window/reinforced/spawner/directional/south, @@ -56540,21 +56403,20 @@ /obj/structure/table, /turf/open/floor/iron/dark, /area/station/security/office) -"tti" = ( -/obj/structure/table, -/obj/item/clothing/gloves/latex, -/obj/item/clothing/mask/surgical, -/obj/item/reagent_containers/spray/cleaner, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 9 - }, -/obj/machinery/wall_healer/directional/west, -/turf/open/floor/iron/white, -/area/station/security/medical) "tts" = ( /obj/machinery/atmospherics/pipe/smart/simple/orange/visible, /turf/closed/wall/r_wall, /area/station/engineering/atmos) +"ttD" = ( +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 1; + name = "Cargo Lockdown Shutters"; + id = "cargolockdown" + }, +/obj/structure/cable, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/security/checkpoint/supply) "ttE" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 8 @@ -56615,12 +56477,19 @@ }, /turf/open/floor/iron, /area/station/construction/mining/aux_base) -"tub" = ( +"ttY" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/spawner/random/trash/garbage{ + spawn_scatter_radius = 1 + }, /obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/security/prison/mess) +/turf/open/floor/plating, +/area/station/maintenance/starboard/greater) "tug" = ( /obj/structure/extinguisher_cabinet/directional/west, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -56658,6 +56527,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) +"tuO" = ( +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/department/science/xenobiology) "tvE" = ( /turf/closed/wall/r_wall, /area/station/command/gateway) @@ -56697,22 +56574,6 @@ /obj/effect/spawner/random/structure/grille, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"twu" = ( -/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 = 4 - }, -/obj/effect/turf_decal/tile/purple/half/contrasted{ - dir = 4 - }, -/obj/effect/turf_decal/siding/purple{ - dir = 1 - }, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/science/cytology) "twy" = ( /obj/effect/turf_decal/siding/purple, /turf/open/floor/iron/dark, @@ -56793,14 +56654,6 @@ /obj/machinery/vending/cigarette, /turf/open/floor/iron/dark, /area/station/security/courtroom) -"txP" = ( -/obj/effect/landmark/start/botanist, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/service/hydroponics) "tyj" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -56844,18 +56697,19 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/science/robotics/lab) +"tzr" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port) "tzt" = ( /obj/structure/statue/snow/snowman, /turf/open/floor/fake_snow, /area/station/maintenance/port/aft) -"tzD" = ( -/obj/machinery/door/airlock{ - id_tag = "Toilet3"; - name = "Unit 3" - }, -/obj/machinery/duct, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet/restrooms) "tzE" = ( /obj/structure/cable, /obj/effect/turf_decal/trimline/green/filled/line{ @@ -56952,6 +56806,24 @@ /obj/structure/flora/bush/flowers_br/style_random, /turf/open/floor/grass, /area/station/science/research) +"tAV" = ( +/obj/machinery/power/apc/auto_name/directional/south, +/obj/effect/turf_decal/tile/brown{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; + name = "Cargo Lobby Lockdown Shutters"; + id = "cargolobbylockdown" + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) "tBc" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -57017,6 +56889,14 @@ /obj/machinery/door/firedoor/heavy, /turf/open/floor/iron/dark/textured, /area/station/engineering/atmos) +"tBV" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/item/radio/intercom/prison/directional/west, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/security/prison) "tCC" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 8 @@ -57089,17 +56969,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) -"tDY" = ( -/obj/structure/bed/medical/emergency, -/obj/machinery/camera/directional/west{ - c_tag = "Gateway - Atrium" - }, -/obj/effect/turf_decal/bot{ - dir = 1 - }, -/obj/machinery/wall_healer/directional/west, -/turf/open/floor/iron, -/area/station/command/gateway) "tDZ" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/spawner/random/trash/box, @@ -57144,14 +57013,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/science/research) -"tEy" = ( -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/structure/sink/kitchen/directional/west, -/turf/open/floor/iron/cafeteria, -/area/station/service/kitchen) "tEP" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -57172,6 +57033,16 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"tFI" = ( +/obj/effect/spawner/structure/window, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 1; + name = "Cargo Lockdown Shutters"; + id = "cargolockdown" + }, +/turf/open/floor/plating, +/area/station/cargo/sorting) "tGA" = ( /obj/effect/turf_decal/tile/neutral{ dir = 8 @@ -57465,6 +57336,17 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/commons/locker) +"tKs" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/wall_healer/directional/south, +/turf/open/floor/iron, +/area/station/hallway/secondary/command) "tKu" = ( /obj/machinery/firealarm/directional/west, /obj/structure/disposalpipe/segment, @@ -57495,28 +57377,6 @@ /obj/structure/sign/warning/electric_shock/directional/south, /turf/open/space/basic, /area/space/nearstation) -"tLc" = ( -/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, -/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/effect/turf_decal/tile/purple/half/contrasted{ - dir = 8 - }, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/science/cytology) "tLd" = ( /obj/structure/chair/office{ dir = 8 @@ -57547,6 +57407,12 @@ }, /turf/open/floor/carpet, /area/station/command/heads_quarters/captain/private) +"tLr" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/duct, +/turf/open/floor/wood, +/area/station/maintenance/port/aft) "tLv" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/segment{ @@ -57878,6 +57744,14 @@ /obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/iron/kitchen_coldroom/freezerfloor, /area/station/service/kitchen/coldroom) +"tRt" = ( +/obj/machinery/holopad, +/obj/effect/turf_decal/box/white{ + color = "#52B4E9" + }, +/obj/machinery/duct, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/treatment_center) "tRE" = ( /obj/structure/chair{ dir = 1 @@ -57923,6 +57797,23 @@ "tSw" = ( /turf/closed/wall, /area/station/maintenance/aft/greater) +"tSH" = ( +/obj/structure/cable, +/obj/machinery/door/airlock/virology/glass{ + name = "Virology Lab" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/airlock/access/all/medical/virology, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/virology) "tSP" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -58213,20 +58104,15 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/secondary/command) -"tXk" = ( -/obj/structure/disposalpipe/segment{ - dir = 9 - }, +"tXj" = ( /obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/line{ - dir = 1 +/obj/structure/disposalpipe/segment{ + dir = 10 }, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, -/turf/open/floor/iron, -/area/station/maintenance/starboard/greater) +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "tXq" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, @@ -58332,6 +58218,11 @@ /obj/effect/mapping_helpers/airlock/access/all/security/general, /turf/open/floor/plating, /area/station/security/execution/transfer) +"tYV" = ( +/obj/machinery/light/small/dim/directional/west, +/obj/structure/reagent_dispensers/plumbed, +/turf/open/floor/plating, +/area/station/security/prison/safe) "tYW" = ( /obj/machinery/light/directional/south, /obj/structure/cable, @@ -58365,6 +58256,11 @@ }, /turf/open/floor/iron, /area/station/engineering/main) +"tZA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/wood, +/area/station/maintenance/port/aft) "tZD" = ( /obj/effect/landmark/start/captain, /obj/structure/chair/comfy/brown, @@ -58663,14 +58559,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white/smooth_large, /area/station/medical/surgery/theatre) -"udp" = ( -/obj/structure/cable, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/department/science/xenobiology) "udD" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -58701,13 +58589,6 @@ /obj/effect/turf_decal/tile/purple, /turf/open/floor/iron, /area/station/hallway/primary/central) -"udO" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/service/hydroponics) "udU" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/brown{ @@ -58885,6 +58766,18 @@ }, /turf/open/floor/carpet, /area/station/service/theater) +"uii" = ( +/obj/effect/spawner/structure/window, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; + name = "Cargo Lockdown Shutters"; + id = "cargolockdown" + }, +/turf/open/floor/plating, +/area/station/cargo/lobby) "uiw" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 @@ -58958,14 +58851,6 @@ /obj/structure/mirror/directional/east, /turf/open/floor/iron/freezer, /area/station/commons/toilet/restrooms) -"ujP" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/mapping_helpers/burnt_floor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "ukc" = ( /obj/machinery/portable_atmospherics/canister/air, /obj/machinery/atmospherics/components/unary/portables_connector/visible/layer4{ @@ -59075,6 +58960,17 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, /turf/open/floor/iron, /area/station/cargo/storage) +"ulJ" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 1 + }, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/virology) "ulR" = ( /obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ dir = 1 @@ -59174,14 +59070,6 @@ }, /turf/open/floor/iron, /area/station/security/brig) -"uom" = ( -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 8 - }, -/obj/structure/cable, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/security/prison) "uor" = ( /obj/machinery/door/poddoor{ id = "QMLoaddoor2"; @@ -59336,6 +59224,11 @@ }, /turf/open/floor/iron/white, /area/station/science/explab) +"uqS" = ( +/obj/effect/spawner/random/food_or_drink/donkpockets, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "uqX" = ( /obj/structure/cable, /obj/item/kirbyplants/random, @@ -59656,20 +59549,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"uvP" = ( -/obj/structure/cable, -/obj/machinery/door/airlock/virology/glass{ - name = "Containment Cells" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/airlock/access/all/medical/virology, -/obj/effect/turf_decal/tile/green/fourcorners, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/medical/virology) "uwa" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -59755,10 +59634,6 @@ /obj/machinery/meter, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) -"uxA" = ( -/obj/structure/reagent_dispensers/plumbed, -/turf/open/floor/plating, -/area/station/maintenance/department/science/xenobiology) "uxS" = ( /turf/open/floor/wood, /area/station/maintenance/port/aft) @@ -59775,6 +59650,12 @@ /obj/structure/plasticflaps, /turf/open/floor/plating, /area/station/cargo/sorting) +"uyb" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/red/opposingcorners, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/security/prison/mess) "uyd" = ( /obj/structure/sign/warning/pods/directional/east, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -59889,6 +59770,14 @@ }, /turf/open/space/basic, /area/space/nearstation) +"uzH" = ( +/obj/effect/turf_decal/trimline/red/filled/corner{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/security/prison) "uzJ" = ( /obj/effect/turf_decal/trimline/blue/filled/warning{ dir = 4 @@ -60116,6 +60005,21 @@ }, /turf/open/floor/engine, /area/station/science/explab) +"uDZ" = ( +/obj/structure/cable, +/obj/machinery/door/airlock{ + name = "Custodial Closet" + }, +/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/effect/mapping_helpers/airlock/access/all/service/janitor, +/obj/effect/landmark/navigate_destination/janitor, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/maintenance/starboard/greater) "uEo" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 4 @@ -60219,6 +60123,14 @@ /obj/effect/turf_decal/tile/red/half/contrasted, /turf/open/floor/iron, /area/station/security/checkpoint/customs) +"uFi" = ( +/obj/structure/table/glass, +/obj/effect/turf_decal/tile/green{ + dir = 1 + }, +/obj/item/storage/medkit/regular, +/turf/open/floor/iron/dark, +/area/station/command/bridge) "uFq" = ( /obj/machinery/door/window/left/directional/west{ name = "Mass Driver Door"; @@ -60228,20 +60140,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/science/ordnance/testlab) -"uFr" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/obj/effect/turf_decal/tile/blue/half/contrasted{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/medical/surgery/aft) "uFw" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -60344,11 +60242,6 @@ /obj/effect/spawner/random/techstorage/ai_all, /turf/open/floor/iron/dark, /area/station/engineering/storage/tech) -"uGx" = ( -/obj/machinery/light/small/directional/south, -/obj/machinery/duct, -/turf/open/floor/iron/freezer, -/area/station/security/prison/shower) "uGz" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/binary/pump/on/layer4{ @@ -60473,18 +60366,6 @@ /obj/machinery/light/small/dim/directional/north, /turf/open/floor/plating, /area/station/maintenance/port) -"uIM" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 9 - }, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/white, -/area/station/medical/cryo) "uIP" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -60495,6 +60376,20 @@ /obj/structure/cable, /turf/open/floor/wood, /area/station/command/heads_quarters/captain/private) +"uJd" = ( +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/light/floor, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "uJm" = ( /obj/structure/bookcase{ name = "Forbidden Knowledge" @@ -60721,16 +60616,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/security/execution/transfer) -"uNd" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/maintenance/starboard/greater) "uNl" = ( /obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ dir = 4 @@ -60741,23 +60626,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/department/engine) -"uNs" = ( -/obj/effect/turf_decal/delivery, -/obj/machinery/door/firedoor, -/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, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 8; - id = "XenoPens"; - name = "Xenobiology Lockdown" - }, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/science/xenobiology) "uND" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -60771,15 +60639,6 @@ /obj/machinery/power/apc/auto_name/directional/west, /turf/open/floor/iron, /area/station/service/janitor) -"uNO" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/science/xenobiology/hallway) "uNS" = ( /obj/effect/spawner/random/trash/box, /turf/open/floor/plating, @@ -60878,6 +60737,18 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"uPR" = ( +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/filled/corner, +/obj/structure/chair{ + dir = 4 + }, +/obj/structure/sign/poster/official/help_others/directional/south, +/obj/structure/sign/departments/psychology/directional/west, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) "uQe" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -61057,6 +60928,15 @@ /obj/effect/landmark/start/medical_doctor, /turf/open/floor/iron/dark, /area/station/medical/storage) +"uTv" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/spawner/random/structure/chair_maintenance{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/maintenance/department/science/xenobiology) "uTH" = ( /obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 4 @@ -61529,6 +61409,13 @@ /obj/machinery/light/directional/east, /turf/open/floor/iron, /area/station/engineering/main) +"vaY" = ( +/obj/item/storage/bag/trash, +/obj/machinery/airalarm/directional/west, +/obj/structure/cable, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/security/prison/safe) "vbf" = ( /obj/structure/cable, /obj/effect/turf_decal/stripes/line{ @@ -61681,18 +61568,6 @@ }, /turf/open/floor/iron, /area/station/cargo/lobby) -"vem" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor, -/obj/structure/cable, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 4; - name = "Cargo Lobby Lockdown Shutters"; - id = "cargolobbylockdown" - }, -/turf/open/floor/iron, -/area/station/cargo/lobby) "veo" = ( /obj/structure/weightmachine/weightlifter{ color = "#f5a183"; @@ -61716,14 +61591,6 @@ }, /turf/open/floor/iron/dark, /area/station/command/bridge) -"veS" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/blue/fourcorners, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/medical/surgery/theatre) "vfa" = ( /obj/effect/turf_decal/trimline/blue/filled/corner{ dir = 1 @@ -61786,15 +61653,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) -"vgu" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/machinery/duct, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet/restrooms) "vgv" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 @@ -62118,6 +61976,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) +"vkT" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/chair/stool/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/service/janitor) "vla" = ( /obj/effect/landmark/firealarm_sanity, /turf/open/floor/engine{ @@ -62405,11 +62270,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/central) -"vpR" = ( -/obj/structure/mirror/directional/west, -/obj/structure/sink/directional/east, -/turf/open/floor/iron/freezer, -/area/station/commons/fitness/recreation) "vqj" = ( /obj/machinery/computer/atmos_alert/station_only{ dir = 1 @@ -62509,12 +62369,6 @@ /obj/effect/turf_decal/tile/red/half/contrasted, /turf/open/floor/iron, /area/station/security/checkpoint/customs) -"vsr" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/commons/toilet/auxiliary) "vsG" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ @@ -62848,6 +62702,17 @@ /obj/effect/spawner/random/bureaucracy/paper, /turf/open/floor/plating, /area/station/maintenance/port) +"vxf" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) "vxi" = ( /obj/machinery/light/directional/east, /obj/effect/turf_decal/stripes/line{ @@ -63154,14 +63019,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/gravity_generator) -"vCu" = ( -/obj/machinery/light/small/directional/west, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/structure/sign/poster/official/random/directional/west, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/commons/toilet/auxiliary) "vCC" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -63316,6 +63173,13 @@ /obj/machinery/atmospherics/pipe/smart/simple/supply/hidden, /turf/open/floor/iron, /area/station/engineering/atmos/storage/gas) +"vEO" = ( +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/machinery/wall_healer/directional/west, +/turf/open/floor/iron, +/area/station/hallway/primary/fore) "vET" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -63331,6 +63195,27 @@ /obj/effect/decal/cleanable/cobweb, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"vFa" = ( +/obj/structure/toilet{ + pixel_y = 8; + dir = 4 + }, +/obj/machinery/light/small/directional/west, +/obj/machinery/newscaster/directional/south, +/obj/effect/landmark/start/assistant, +/obj/effect/landmark/start/hangover, +/obj/effect/spawner/random/trash/graffiti{ + pixel_x = -32; + spawn_loot_chance = 50 + }, +/obj/machinery/button/door/directional/west{ + id = "Toilet3"; + name = "Lock Control"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) "vFb" = ( /obj/structure/lattice/catwalk, /obj/item/binoculars, @@ -63579,6 +63464,21 @@ /obj/structure/light_construct/directional/east, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"vJA" = ( +/obj/structure/cable, +/obj/machinery/camera/directional/east{ + c_tag = "Xenobiology Lab - Central West"; + network = list("ss13","rd","xeno") + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/button/door/directional/east{ + id = "XenoPens"; + name = "Xenobiology Shutters"; + req_access = list("xenobiology") + }, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "vJX" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -63678,11 +63578,27 @@ }, /turf/open/floor/iron, /area/station/commons/locker) +"vLE" = ( +/obj/item/kirbyplants, +/obj/effect/turf_decal/tile/blue/half/contrasted, +/obj/machinery/wall_healer/directional/south, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) "vLM" = ( /obj/structure/table/wood/poker, /obj/item/storage/dice, /turf/open/floor/wood, /area/station/commons/lounge) +"vLW" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/spawner/random/trash/garbage{ + spawn_scatter_radius = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "vLX" = ( /obj/item/wrench, /turf/open/floor/iron/dark, @@ -63999,16 +63915,6 @@ /obj/machinery/light/floor, /turf/open/floor/iron, /area/station/commons/locker) -"vRk" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/junction/flip, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/starboard/greater) "vRr" = ( /obj/effect/turf_decal/trimline/brown/corner{ dir = 1 @@ -64117,14 +64023,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/surgery/theatre) -"vSU" = ( -/obj/machinery/door/airlock{ - id_tag = "Toilet2"; - name = "Unit 2" - }, -/obj/machinery/duct, -/turf/open/floor/iron/freezer, -/area/station/commons/toilet/restrooms) "vTf" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible/layer4{ dir = 8 @@ -64249,14 +64147,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/brig) -"vVz" = ( -/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, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/medical/virology) "vVE" = ( /obj/machinery/camera/motion/directional/east{ c_tag = "MiniSat Maintenance"; @@ -64373,23 +64263,23 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/security/courtroom) +"vWO" = ( +/obj/machinery/door/airlock/wood{ + doorClose = 'sound/effects/doorcreaky.ogg'; + doorOpen = 'sound/effects/doorcreaky.ogg'; + name = "The Gobetting Barmaid" + }, +/obj/effect/mapping_helpers/airlock/abandoned, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "vWT" = ( /obj/structure/frame/machine{ anchored = 1 }, /turf/open/floor/circuit/green/off, /area/station/science/research) -"vXg" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/sorting/mail/flip{ - dir = 1 - }, -/obj/effect/mapping_helpers/mail_sorting/medbay/virology, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/landmark/firealarm_sanity, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "vXj" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 9 @@ -64754,6 +64644,22 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) +"wcY" = ( +/obj/effect/turf_decal/trimline/red/filled/corner{ + dir = 8 + }, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/security/prison) +"wcZ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/science/xenobiology) "wde" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 9 @@ -64861,6 +64767,13 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /turf/open/floor/plating, /area/station/maintenance/central) +"weR" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/commons/toilet/auxiliary) "wfm" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -64934,12 +64847,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) -"wfZ" = ( -/obj/machinery/airalarm/directional/east, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/commons/toilet/auxiliary) "wgf" = ( /obj/effect/turf_decal/delivery, /obj/structure/closet/firecloset, @@ -65185,16 +65092,6 @@ /obj/effect/spawner/random/engineering/tracking_beacon, /turf/open/floor/wood, /area/station/service/library) -"wkt" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/machinery/wall_healer/directional/west, -/turf/open/floor/iron, -/area/station/hallway/primary/port) "wkv" = ( /obj/structure/railing{ dir = 8 @@ -65517,19 +65414,20 @@ }, /turf/open/floor/iron/white, /area/station/medical/virology) -"wra" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/sign/poster/contraband/random/directional/west, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "wrc" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/maintenance/department/science/xenobiology) +"wre" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/sorting/mail, +/obj/effect/mapping_helpers/mail_sorting/medbay/virology, +/obj/effect/turf_decal/tile/green/half/contrasted, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/virology) "wrg" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -65700,6 +65598,17 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/security/brig) +"wtc" = ( +/obj/machinery/door/airlock/maintenance, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/airlock/unres, +/obj/effect/mapping_helpers/airlock/access/any/medical/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port) "wto" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -65746,6 +65655,11 @@ /obj/structure/cable, /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/ai_upload) +"wtD" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/wall_healer/directional/east, +/turf/open/floor/iron, +/area/station/hallway/primary/aft) "wtP" = ( /obj/effect/turf_decal/siding{ dir = 4 @@ -65812,6 +65726,21 @@ }, /turf/open/floor/plating, /area/station/maintenance/port) +"wvu" = ( +/obj/structure/disposalpipe/sorting/mail/flip{ + dir = 2 + }, +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + 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, +/obj/effect/mapping_helpers/mail_sorting/service/janitor_closet, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/maintenance/starboard/greater) "wvB" = ( /obj/structure/disposalpipe/segment{ dir = 10 @@ -65920,6 +65849,25 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron, /area/station/commons/fitness/recreation) +"wxE" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door_buttons/airlock_controller{ + idExterior = "virology_airlock_exterior"; + idInterior = "virology_airlock_interior"; + idSelf = "virology_airlock_control"; + name = "Virology Access Console"; + pixel_x = 24; + pixel_y = -24; + req_access = list("virology") + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/virology) "wxF" = ( /obj/structure/cable, /obj/effect/turf_decal/stripes/line{ @@ -66096,17 +66044,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"wAX" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/sorting/mail{ - dir = 1 - }, -/obj/effect/mapping_helpers/mail_sorting/medbay/general, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "wBe" = ( /obj/effect/turf_decal/trimline/red/filled/corner{ dir = 4 @@ -66418,11 +66355,6 @@ /obj/structure/extinguisher_cabinet/directional/west, /turf/open/floor/iron, /area/station/hallway/primary/central) -"wGf" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/vending/autodrobe, -/turf/open/floor/plating, -/area/station/maintenance/port) "wGz" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/light_construct/directional/east, @@ -66463,6 +66395,29 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/commons/dorms) +"wGW" = ( +/obj/machinery/mineral/ore_redemption{ + dir = 4; + input_dir = 8; + output_dir = 4 + }, +/obj/effect/turf_decal/delivery, +/obj/machinery/door/firedoor, +/obj/machinery/door/window/left/directional/east{ + name = "Ore Redemption Window" + }, +/obj/machinery/door/window/left/directional/west{ + req_access = list("cargo"); + name = "Cargo Security Window" + }, +/obj/effect/turf_decal/tile/brown/fourcorners, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; + name = "Cargo Lockdown Shutters"; + id = "cargolockdown" + }, +/turf/open/floor/iron, +/area/station/cargo/lobby) "wHd" = ( /obj/machinery/space_heater, /turf/open/floor/plating, @@ -66524,6 +66479,17 @@ /obj/structure/extinguisher_cabinet/directional/west, /turf/open/floor/iron, /area/station/engineering/atmos) +"wIf" = ( +/obj/effect/turf_decal/tile/bar{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/bot, +/obj/structure/sink/kitchen/directional/east, +/turf/open/floor/iron/cafeteria, +/area/station/service/kitchen) "wIB" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/closed/wall/r_wall, @@ -67314,6 +67280,12 @@ "wYB" = ( /turf/closed/wall, /area/station/hallway/secondary/service) +"wYH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/spawner/random/structure/closet_maintenance, +/obj/effect/spawner/random/maintenance/three, +/turf/open/floor/plating, +/area/station/maintenance/starboard/greater) "wZe" = ( /obj/machinery/door/airlock/public/glass{ name = "Chapel Office" @@ -67331,11 +67303,6 @@ }, /turf/open/floor/grass, /area/station/science/research) -"wZh" = ( -/obj/effect/turf_decal/trimline/blue/filled/line, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/medical/treatment_center) "wZk" = ( /obj/machinery/light_switch/directional/north, /obj/structure/showcase/cyborg/old{ @@ -67343,11 +67310,6 @@ }, /turf/open/floor/iron/grimy, /area/station/tcommsat/computer) -"wZl" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/duct, -/turf/open/floor/wood, -/area/station/maintenance/port/aft) "wZo" = ( /obj/machinery/airalarm/directional/east, /obj/effect/turf_decal/tile/brown/half/contrasted{ @@ -67474,13 +67436,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/cargo/warehouse) -"xcp" = ( -/obj/effect/spawner/random/maintenance, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/port) "xcv" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -67544,11 +67499,6 @@ "xdJ" = ( /turf/closed/wall, /area/station/medical/surgery/aft) -"xdQ" = ( -/obj/structure/sign/warning/hot_temp/directional/south, -/obj/effect/spawner/random/structure/crate, -/turf/open/floor/plating, -/area/station/maintenance/starboard/greater) "xdX" = ( /obj/machinery/door/firedoor, /obj/structure/cable, @@ -67753,11 +67703,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/cargo/storage) -"xgz" = ( -/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/medical/treatment_center) "xgB" = ( /obj/structure/cable, /turf/open/floor/plating, @@ -67833,6 +67778,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) +"xhu" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/station/maintenance/starboard/greater) "xhO" = ( /obj/machinery/camera/directional/north{ c_tag = "Science Robotics Workshop"; @@ -67914,6 +67867,10 @@ }, /turf/open/floor/circuit/green, /area/station/ai_monitored/turret_protected/ai) +"xje" = ( +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "xjg" = ( /mob/living/basic/bot/cleanbot/medbay, /turf/open/floor/iron/white, @@ -67961,11 +67918,9 @@ }, /turf/open/floor/wood/parquet, /area/station/medical/psychology) -"xjK" = ( -/obj/structure/chair/stool/directional/west, -/obj/effect/mapping_helpers/broken_floor, +"xjJ" = ( /obj/machinery/duct, -/turf/open/floor/wood, +/turf/open/floor/carpet/green, /area/station/maintenance/port/aft) "xkj" = ( /obj/effect/spawner/random/maintenance, @@ -68015,10 +67970,6 @@ /obj/structure/cable/layer3, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/satellite) -"xkB" = ( -/obj/machinery/duct, -/turf/open/floor/iron, -/area/station/security/prison) "xkE" = ( /obj/machinery/recharge_station, /obj/effect/landmark/start/hangover, @@ -68064,14 +68015,6 @@ /obj/item/pen/red, /turf/open/floor/wood, /area/station/service/lawoffice) -"xlt" = ( -/obj/structure/table/glass, -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/obj/item/storage/medkit/regular, -/turf/open/floor/iron/dark, -/area/station/command/bridge) "xlv" = ( /obj/machinery/airalarm/directional/south, /obj/machinery/computer/mech_bay_power_console{ @@ -68256,6 +68199,15 @@ "xpo" = ( /turf/open/floor/carpet, /area/station/commons/dorms) +"xps" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, +/obj/machinery/duct, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "xpB" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible/layer2, @@ -68380,10 +68332,27 @@ /obj/effect/landmark/navigate_destination, /turf/open/floor/engine/cult, /area/station/service/library) +"xrl" = ( +/obj/effect/turf_decal/trimline/red/filled/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/security/prison) "xrr" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/maintenance/disposal/incinerator) +"xru" = ( +/obj/effect/spawner/structure/window, +/obj/structure/curtain/cloth/fancy/mechanical{ + name = "Psychology Curtains"; + id = "psychology_curtains" + }, +/turf/open/floor/plating, +/area/station/medical/psychology) "xrv" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 @@ -68392,6 +68361,12 @@ /obj/effect/spawner/random/engineering/tracking_beacon, /turf/open/floor/iron, /area/station/cargo/storage) +"xrx" = ( +/obj/structure/chair/stool/directional/west, +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/duct, +/turf/open/floor/wood, +/area/station/maintenance/port/aft) "xrG" = ( /obj/structure/fireaxecabinet/directional/west, /obj/machinery/camera/directional/west{ @@ -68602,15 +68577,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer4, /turf/closed/wall/r_wall, /area/station/maintenance/aft/lesser) -"xuY" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/spawner/random/structure/chair_maintenance{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/department/science/xenobiology) "xvd" = ( /obj/structure/closet/emcloset, /obj/effect/turf_decal/delivery, @@ -68644,6 +68610,36 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/science/genetics) +"xvQ" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/locked, +/obj/machinery/door/airlock/virology{ + autoclose = 0; + frequency = 1449; + id_tag = "virology_airlock_interior"; + name = "Virology Interior Airlock" + }, +/obj/machinery/door_buttons/access_button{ + idDoor = "virology_airlock_interior"; + idSelf = "virology_airlock_control"; + name = "Virology Access Button"; + pixel_x = 8; + pixel_y = -24; + req_access = list("virology") + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/airlock/access/all/medical/virology, +/obj/machinery/door/firedoor, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/virology) "xvR" = ( /obj/structure/table, /obj/item/paper/guides/jobs/engi/gravity_gen, @@ -68939,12 +68935,6 @@ /obj/structure/window/spawner/directional/south, /turf/open/floor/iron/dark, /area/station/commons/fitness/recreation) -"xAF" = ( -/obj/item/kirbyplants, -/obj/effect/turf_decal/tile/blue/half/contrasted, -/obj/machinery/wall_healer/directional/south, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "xAR" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -69143,13 +69133,6 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/hallway/primary/aft) -"xDA" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/duct, -/turf/open/floor/plating, -/area/station/maintenance/port) "xDD" = ( /obj/effect/turf_decal/stripes/red/line{ dir = 9 @@ -69483,6 +69466,15 @@ /obj/machinery/airalarm/directional/south, /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) +"xKx" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/machinery/duct, +/turf/open/floor/iron/freezer, +/area/station/commons/toilet/restrooms) "xKK" = ( /turf/closed/wall, /area/station/science/research) @@ -69819,6 +69811,21 @@ }, /turf/open/floor/iron/white/smooth_large, /area/station/medical/medbay/lobby) +"xRa" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/holopad, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/purple/fourcorners, +/obj/effect/turf_decal/siding/purple/corner{ + dir = 1 + }, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/science/cytology) "xRc" = ( /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ dir = 10 @@ -69832,6 +69839,11 @@ }, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) +"xRG" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/engineering/atmospherics_portable, +/turf/open/floor/plating, +/area/station/maintenance/port) "xRO" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -69875,15 +69887,6 @@ /obj/machinery/atmospherics/components/unary/airlock_pump/unbolt_only, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"xSn" = ( -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/security/prison) "xSO" = ( /obj/effect/turf_decal/siding/wood{ dir = 1 @@ -70342,6 +70345,20 @@ /obj/machinery/monkey_recycler, /turf/open/floor/iron, /area/station/science/xenobiology) +"yaA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/duct, +/turf/open/floor/iron/white, +/area/station/medical/surgery/aft) "yaD" = ( /obj/structure/table, /obj/item/stack/rods/fifty, @@ -70649,6 +70666,11 @@ /obj/structure/sign/poster/random/directional/north, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"yeQ" = ( +/obj/structure/reagent_dispensers/plumbed, +/obj/effect/spawner/random/maintenance/three, +/turf/open/floor/plating, +/area/station/maintenance/starboard/greater) "yeV" = ( /obj/structure/closet/secure_closet/hos, /obj/item/clothing/shoes/cowboy/black, @@ -70818,13 +70840,6 @@ }, /turf/open/floor/plating, /area/station/cargo/sorting) -"yhO" = ( -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 8 - }, -/obj/machinery/duct, -/turf/open/floor/iron/white, -/area/station/security/prison) "yia" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -84538,7 +84553,7 @@ jUm cXW cXW bLm -pZr +xjJ uxS uxS fgn @@ -84795,7 +84810,7 @@ uke bLm cXW cXW -pZr +xjJ oBA ruz ehn @@ -85044,7 +85059,7 @@ vXH rHE uGz vXH -dSp +xRG tYi giT jUb @@ -85052,7 +85067,7 @@ esd htr htr dSQ -syg +aeh dbm ruz uxS @@ -85309,8 +85324,8 @@ xqn uxS fQZ ehv -xjK -iRg +xrx +kRq uxS ehn uxS @@ -85567,7 +85582,7 @@ fQD uxS uxS qKs -cfc +mSO dqN uxS uxS @@ -85824,7 +85839,7 @@ ruz ehn uxS uxS -bwi +ntG uxS uxS uxS @@ -86081,7 +86096,7 @@ coJ uxS fNI uxS -bCE +tLr wGz uxS uxS @@ -86099,12 +86114,12 @@ jUb aaa xjH aWC -mHl -vVz -vVz -mtZ -uvP -pWX +sxU +rie +rie +wre +mQf +ulJ eYE hcR gqV @@ -86338,7 +86353,7 @@ hWD etv jUb fYq -wZl +tZA jUb dyd jXO @@ -86356,7 +86371,7 @@ jUb aaa xjH ocN -ark +gbz uGq iam kHk @@ -86595,7 +86610,7 @@ jUb jUb jUb jUb -fxT +vWO jUb jUb jUb @@ -86613,7 +86628,7 @@ jUb lMJ xjH xjH -ffS +tSH xjH xjH xjH @@ -86841,18 +86856,18 @@ njE fHV pOa flN -sTA -mhs -fAo -aAQ -ujP -tbm -dMX -qzf -jrp -tbm -wra -tbm +cwD +mLd +wtc +dog +kge +bsV +vLW +aer +lZI +bsV +mti +bsV jUb cBc aFf @@ -86870,7 +86885,7 @@ jUb aaa aaa rKQ -eSR +loM rKQ aaa aaa @@ -87097,15 +87112,15 @@ sOF fkd eDC pOa -jaM -xDA +dcD +qIR jUb jUb jUb jUb jUb jUb -bbt +gNR jUb jUb jUb @@ -87127,7 +87142,7 @@ jUb aaa aaa rKQ -gjt +rfA rKQ aaa aaa @@ -87338,7 +87353,7 @@ fcq jPE auh crr -wkt +cNl crr qer crr @@ -87355,14 +87370,14 @@ pOa pOa pOa pOa -kZQ +hyI jUb xIK bar nBp -hSP -pqz -iuB +xje +cWX +uqS jUb oSy gwK @@ -87384,7 +87399,7 @@ jUb aaa aaa rKQ -iyC +wxE rKQ aaa aaa @@ -87612,12 +87627,12 @@ gXe vwi tql pOa -xcp +sff jUb tWr qKs -dPJ -hBC +lsb +lIS jUb nYy jUb @@ -87641,7 +87656,7 @@ jUb jUb xjH xjH -bVK +xvQ xjH xjH lMJ @@ -87861,15 +87876,15 @@ fjD fjD fjD fjD -vsr -bRG +hmY +weR pOa vZE ivx gDZ lEu pOa -pON +bpM jUb qno fms @@ -87897,8 +87912,8 @@ nsa jUb tzt xjH -sMo -sOM +lix +pmx jXn xjH aaa @@ -88114,11 +88129,11 @@ iOc qwG fjD rEj -vCu +eHo cwc kXa fjD -tmI +cMr fjD pOa cIW @@ -88126,7 +88141,7 @@ tKj tYi vXH pOa -tak +pgA jUb tXX dqN @@ -88154,8 +88169,8 @@ nsa jUb huF xjH -rUU -eSR +cQo +loM vYJ xjH aaa @@ -88371,19 +88386,19 @@ iOc mAs fjD aOo -haE -vsr -fRG -vsr -wfZ -soa -oMs -aFz -mvv +bmx +hmY +dGo +hmY +hoh +eax +nwZ +gbE +iSd sNM tYi pOa -kZQ +hyI jUb ilQ oVn @@ -88636,11 +88651,11 @@ fjD hsF pOa vJY -mvv -mvv -rVY -rAa -guq +iSd +iSd +rfn +sPk +tzr jUb sal gvg @@ -88894,7 +88909,7 @@ oyx pOa xgG vJY -wGf +ftL wev pOa uOH @@ -88919,15 +88934,15 @@ kZv xNq xLB mbx -wAX -eVU -qvC -nCL -iCX -oGf -sPq -vXg -iTH +mAZ +lmy +xps +jwI +gYR +rim +eln +fHr +gZC bhS tSw tSw @@ -89176,7 +89191,7 @@ jUb jUb jUb jUb -gPY +trC jUb jUb fLe @@ -89184,10 +89199,10 @@ jUb gll azE xxU -bxq -lpN -sWZ -ohY +vxf +qju +eHm +mdA rKf tSw laL @@ -89444,10 +89459,10 @@ erF xTw bhS fqR -mwm +eGg drm tSw -jsq +rpt tSw wxF tSw @@ -89701,7 +89716,7 @@ tzE ucc tSw tSw -rTF +hfJ tSw tSw tSw @@ -89900,7 +89915,7 @@ liU nrB smB tik -mka +kzE xwa fjw cwY @@ -89958,7 +89973,7 @@ wSv fuA aPq fVa -uFr +yaA vZb tBJ tnG @@ -90157,7 +90172,7 @@ snZ xgx dfk uyf -rPB +tFI uya yhL nQR @@ -90195,9 +90210,9 @@ jUb jUb mqz pHv -veS -dGv -bdy +saA +hmo +gXv izl rps eme @@ -90215,7 +90230,7 @@ oBO ieH vDc miX -bfg +sen iAu tBJ cxw @@ -90472,7 +90487,7 @@ tFr nMf bIv miX -hIx +jio qOk tBJ gIB @@ -90663,15 +90678,15 @@ kKO vQT hBo gWz -sGv -msn +qFV +gHK hIp ksM lQf wsx dsJ -qHp -oiX +qof +pih lzD hIW uyh @@ -90729,7 +90744,7 @@ kHg nMf vDc aRk -nCc +czZ msC tBJ gLY @@ -90918,14 +90933,14 @@ eOl vjg mLp kQP -qKz -qKz +bvX +bvX kQP kQP -hAA -kjM +bLV +uii dHi -kQA +wGW lVp bzH bzH @@ -91130,11 +91145,11 @@ tKa tGX aXa iSl -oZL -hmy -oZL -oZL -tub +qkY +bKW +qkY +qkY +uyb eJp bmB aXa @@ -91184,7 +91199,7 @@ cIl qxJ vNp erU -dvz +gyl uuW pPm jHM @@ -91391,7 +91406,7 @@ lds mzm hXQ bVF -fGP +kOu aJK liL kKZ @@ -91431,17 +91446,17 @@ ciE dUd rtz fpV -jcg +lIA bEK ydp cNb -kyL +jAT kUG rVn qxJ sik ryV -mbI +nuk qCx cap nZW @@ -91475,8 +91490,8 @@ cIW pOa mpV izs -uIM -kMo +dOz +gvd grm sSp wvP @@ -91486,7 +91501,7 @@ ckE ckE oJD oPv -wZh +iZX xtu rvb ver @@ -91648,7 +91663,7 @@ kKZ aXa aXa iDe -oUE +aXA aij oGZ aXa @@ -91692,13 +91707,13 @@ wyV iqo wyV cJt -kyL +jAT alu aUm jvv bNN rod -lHB +lme gav hab uyP @@ -91731,8 +91746,8 @@ kir vXH pOa xYM -aez -ajK +jFF +gtd aSe jeL jxc @@ -91905,7 +91920,7 @@ vjF kZF aXa aXa -bns +jen aXa aXa aXa @@ -91949,7 +91964,7 @@ wyV wyV wyV oxX -kyL +jAT vdW oac fhB @@ -91959,7 +91974,7 @@ oor oor xma oor -dZo +nlN oor oor oor @@ -92000,7 +92015,7 @@ mtj buN lTR bHE -jGG +tRt agZ rvb mhm @@ -92159,18 +92174,18 @@ wBn iFz eyX qYd -lmT -gtk -yhO -axK -yhO -yhO -crl -pSa -cUf -csb -uom -xSn +wcY +iBO +env +bOX +env +env +tBV +uzH +xrl +qqJ +jFw +rwy cji vjF ejR @@ -92212,8 +92227,8 @@ upN qxJ ajq vwg -jVY -ozP +ttD +tqr rBB kJk xJj @@ -92416,7 +92431,7 @@ hwZ rGe wtw tcW -mfb +ake axO tcW tcW @@ -92427,7 +92442,7 @@ tcW tcW odh tcW -mfb +ake qAX bhN wBe @@ -92458,16 +92473,16 @@ qme cNg kQP kQP -kJE -kJE +kux +kux kQP kQP kQP kQP rcR -llx -vem -szD +sZP +pxK +tAV nDG oor oor @@ -92512,8 +92527,8 @@ bHE vWv hMq hMq -sxf -jVx +gIt +hvo nKE xtu rvb @@ -92536,7 +92551,7 @@ yiJ sfA eQO xjI -dOS +jgn tSw tAH nwT @@ -92673,7 +92688,7 @@ tGX fwf ihb ihb -gtH +iMa ihb ihb mzI @@ -92684,7 +92699,7 @@ wZz wZz wZz oUU -xkB +fyg rDr wIM aCQ @@ -92707,7 +92722,7 @@ rlU vis dhz ixT -oXK +hlg rlU aaa aEH @@ -92726,14 +92741,14 @@ udU isA eKG iit -egM -bqs +cIE +aBF kkA fMC uYE iQb hRJ -bqs +aBF mnP xOw iOc @@ -92769,7 +92784,7 @@ pSl eUN jpU jpU -xgz +heY qXh ehg hgu @@ -92793,7 +92808,7 @@ vAX sfA dvn qkJ -tgC +inl tSw tAH ifQ @@ -92930,18 +92945,18 @@ qig ocG ihb pGZ -pJu +rsA mAe ihb nyf uZa nEZ wZz -dNC -qOT -swR -cXs -xkB +tYV +vaY +qeq +hkh +fyg oDX dfB aCQ @@ -92983,14 +92998,14 @@ kWP lgg uLE cSu -abc +rfe oor -bqs -bqs +aBF +aBF pog oor -bqs -bqs +aBF +aBF uGU mFo npY @@ -93026,7 +93041,7 @@ ppG nuO xQC ckE -iUJ +gHq bJk mpk pyU @@ -93046,7 +93061,7 @@ ngl ngl ngl uYp -ikS +dUE cnc igP sjx @@ -93186,16 +93201,16 @@ dAc lyu qDg ihb -lfm -hOR -uGx +cKG +sGM +rrF ihb pEI jDB ybd wZz tIE -lnM +sgI wZz xwf fBY @@ -93240,14 +93255,14 @@ hSg uTN uVm sSV -bJg +eHc anX -qmU +raf nyb xYT nyb nyb -qmU +raf qjH vhB guR @@ -93283,7 +93298,7 @@ sSp jxc jfn jxc -stD +sOd jxc sSp sSp @@ -93303,8 +93318,8 @@ dZy kTO gdL fEK -rOF -rOF +xru +xru cMX rOF tSw @@ -93559,11 +93574,11 @@ ePg eMI jfN eMI -kDa -onv -sFY +cmp +sBR +cYs xar -kKh +uPR tSw koq swP @@ -93797,7 +93812,7 @@ iFi eUW iFi iFi -gTn +ksC fod uVx jso @@ -94330,7 +94345,7 @@ oNy bqX bqX bqX -iHn +nWB nmQ qZa aec @@ -94752,7 +94767,7 @@ qJi mzL hAL nRZ -tti +dpR jDf gWT vaH @@ -95827,7 +95842,7 @@ jLQ fgS jrk dhX -oIC +tKs gBD twl bcx @@ -95850,7 +95865,7 @@ nBB nbT xxU tFr -xAF +vLE eIO eIO eIO @@ -96651,7 +96666,7 @@ wnW tSw oBD iUm -eri +qrG hPk xMz xMz @@ -97100,8 +97115,8 @@ tKN lMJ dsQ mZL -scw -xlt +geA +uFi acf hmq dJX @@ -98114,7 +98129,7 @@ lKZ dNX iVA mlK -ita +vEO dNX nyV dNX @@ -98690,7 +98705,7 @@ dXQ gmt qsx gmt -shR +wtD uzk gmt qhx @@ -100201,7 +100216,7 @@ kmZ buL pha sdp -tDY +gSr erl pbS eny @@ -103760,11 +103775,11 @@ ilh tWE edQ ilh -lJm +vFa dIO -hVX +noy dIO -rdT +pGp dIO hxt qRk @@ -104017,11 +104032,11 @@ ilh qhR xAR ilh -tzD +gBt dIO -vSU +rHM dIO -oos +cmy dIO dTv qRk @@ -104531,8 +104546,8 @@ nja icC eCn ilh -dKO -lNf +taB +pta fLz ujM cwF @@ -104600,7 +104615,7 @@ aBX iio kjG gwf -aNH +hMf mMX rhe rPA @@ -104788,8 +104803,8 @@ ilh ilh ilh ilh -rWf -nft +nrI +sWr dIO dIO dIO @@ -105027,7 +105042,7 @@ szp szp szp ilh -oiz +kim mVr jCj ihX @@ -105045,11 +105060,11 @@ xnU mgE xnU dIO -jlY -vgu +mZB +xKx kAF -lvU -nKO +eeu +mGV dIO aqa rNJ @@ -105281,8 +105296,8 @@ lMJ lMJ lMJ szp -lHH -vpR +eYg +qts ilh ipG gKc @@ -105303,7 +105318,7 @@ yfw eek wst mPE -knf +dHu gGf dIO dIO @@ -105538,8 +105553,8 @@ aaa aaa aaa nvn -lLw -ePA +nbQ +cHZ ilh gfe aDR @@ -105850,14 +105865,14 @@ fGH fhQ sFB mal -rFO +wIf pmZ qdI ttF sRY wDh uIs -btn +jYw gsr pUA wFM @@ -106057,7 +106072,7 @@ peF liO sSs gkM -rkf +plL uKL uKL mKu @@ -107139,7 +107154,7 @@ cfA mqu mJk itg -tEy +eBY nEB uIs bjl @@ -107658,7 +107673,7 @@ tQC gsP phS huG -nWd +baR ydS kCZ nKI @@ -107895,7 +107910,7 @@ xww xww aEr sDs -pyX +qNX obG gUe yks @@ -108178,10 +108193,10 @@ foB siz lKp unL -laf -aJn -aJn -oZZ +rsF +xhu +xhu +wvu hWx ekG tUn @@ -108432,13 +108447,13 @@ huG gPq wYB qlL -udO -hxz +sFn +iZI unL -uNd +ecL unL unL -gpv +uDZ unL tUn tUn @@ -108689,13 +108704,13 @@ huG dhs wYB uXS -txP +oOy bnE unL -kTZ +cFq unL iMF -guI +lTc uND slc tUn @@ -108946,13 +108961,13 @@ unL aLu unL xII -ltX +hsq kbR vOK -pnx +saO unL kbN -gXd +leI szJ heS tUn @@ -109203,14 +109218,14 @@ unL gmi unL unL -pNf +hBu unL unL -fGW +hgi unL vtI -mma -iMQ +vkT +lfU rAo tUn iLn @@ -109460,10 +109475,10 @@ nGo aBM unL lPy -vRk -aJn -fhA -gub +akb +xhu +bAp +qxj unL gjF sjB @@ -109713,11 +109728,11 @@ unL unL wOF esH -pdx +kna xcO -aXE -tXk -itW +poG +ptP +lRY kGv xZb fWA @@ -109974,9 +109989,9 @@ dQy pDR unL unL -enf +eyK hCl -aJm +wYH hum jCx cZF @@ -110230,8 +110245,8 @@ unL unL unL unL -izJ -fFq +nmX +mdO izp goZ fWA @@ -110487,8 +110502,8 @@ uxt tcn iOm unL -mEx -mWA +yeQ +ttY isl fWA fWA @@ -111003,7 +111018,7 @@ hCl mAJ dXe xrW -xdQ +cig hum tSY jKA @@ -111716,7 +111731,7 @@ hMQ qXB qXB kpI -gEF +cWx qcP wrn qXB @@ -112058,7 +112073,7 @@ aaa aaa wmL apS -qkq +aas ooz wmL aaa @@ -112315,7 +112330,7 @@ aaa aaa wmL cvO -uNO +fjO hUd uWk aaa @@ -112572,7 +112587,7 @@ aaa aaa wmL jkX -frs +oRL dFo wmL aaa @@ -112784,7 +112799,7 @@ dFH ygb pEG cAj -nTD +aWS peM wUM cZw @@ -112829,7 +112844,7 @@ oMA lSw wmL gUS -qBo +pUB gUS wmL lSw @@ -113086,7 +113101,7 @@ oMA eYu agN bXs -tLc +bvg juH pJA hLJ @@ -113343,7 +113358,7 @@ myr xfm nHG hjw -bqJ +gMN hzL wNO tml @@ -113600,7 +113615,7 @@ vOz tsy sRa ppC -twu +hcH mKD hxY nae @@ -113857,7 +113872,7 @@ ePT syV jsi eoZ -jjm +xRa nui wWV onD @@ -114114,7 +114129,7 @@ jlU jlU rsz lVB -bsE +hXZ uHD hEw jlU @@ -114371,7 +114386,7 @@ plp gog fUx pst -fkk +caK vuK yag hFz @@ -114628,7 +114643,7 @@ mtu jfS bQQ lVB -oWa +ixA iWc ces elm @@ -114885,7 +114900,7 @@ dVv gog jjj jNo -gAH +uJd klK aDQ hFz @@ -115142,7 +115157,7 @@ iTQ vGq avx vBf -uNs +iGL tIP qQJ vGq @@ -115393,16 +115408,16 @@ hbK hbK rMu xiL -exK +mrq fdZ mMK mMK mMK mMK -jxH +dni tMI pwZ -kRy +gyz fdZ fdZ jvX @@ -115656,16 +115671,16 @@ amV vVx kyh iwO -pQj -jzw -thT -jzw -sie -pgM -qiD -nYL -ddK -hAN +tXj +omK +vJA +omK +fae +wcZ +ozN +oay +mDv +qgr wrc aaa aaa @@ -115922,7 +115937,7 @@ xVu idA xiL xiL -lmn +gWr wrc aaa aaa @@ -116179,7 +116194,7 @@ oQJ xlH mCj xiL -lmn +gWr hbK aaa aaa @@ -116436,7 +116451,7 @@ pDl uYP ljF xiL -lmn +gWr wrc lMJ lMJ @@ -116693,7 +116708,7 @@ gkC xlH mtu xiL -lmn +gWr hbK aaa aaa @@ -116950,7 +116965,7 @@ xVu idA xiL xiL -lmn +gWr wrc aaa aaa @@ -117206,8 +117221,8 @@ psc eTI rKg xiL -lmn -lmn +gWr +gWr wrc aaa aaa @@ -117463,7 +117478,7 @@ wFy ohD bZb xiL -lmn +gWr hbK hbK lMJ @@ -117720,7 +117735,7 @@ toM eOP hWa xiL -lmn +gWr wrc aaa aaa @@ -117977,7 +117992,7 @@ fff mtu ljF xiL -lmn +gWr wrc aaa aaa @@ -118234,7 +118249,7 @@ fff mtu lWM xiL -lmn +gWr hbK lMJ lMJ @@ -118491,7 +118506,7 @@ xiL xiL xiL xiL -lmn +gWr hbK aaa aaa @@ -118745,10 +118760,10 @@ mCu kgW jlU xiL -qxr -lmn -lmn -hAN +jAq +gWr +gWr +qgr hbK aaa aaa @@ -119002,7 +119017,7 @@ xkv nET jlU iOJ -lmn +gWr rDf rDf utD @@ -119259,7 +119274,7 @@ nnc hdy aWp eSb -udp +tuO wHd uLa hbK @@ -119516,7 +119531,7 @@ kcu kcu jlU hbK -mTg +sGR hbK hbK hbK @@ -119772,9 +119787,9 @@ gyK kcu kcu jlU -qgn -mCV -xuY +gEZ +kgR +uTv hbK aaa aaa @@ -120029,8 +120044,8 @@ jQz nJr kcu jlU -uxA -pHt +lmC +oJB lUS hbK aaa diff --git a/_maps/map_files/NebulaStation/NebulaStation.dmm b/_maps/map_files/NebulaStation/NebulaStation.dmm index b683e139a78..348f2b50aa3 100644 --- a/_maps/map_files/NebulaStation/NebulaStation.dmm +++ b/_maps/map_files/NebulaStation/NebulaStation.dmm @@ -15284,6 +15284,7 @@ dir = 1 }, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/item/pipe_dispenser, /turf/open/floor/engine, /area/station/engineering/supermatter/room) "cpk" = ( @@ -44751,7 +44752,6 @@ /obj/structure/table/reinforced, /obj/item/t_scanner, /obj/item/pipe_dispenser, -/obj/item/pipe_dispenser, /obj/item/storage/belt/utility, /obj/effect/turf_decal/bot, /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm index dfcce8dc3b2..11fb4bc5caa 100644 --- a/_maps/map_files/generic/CentCom.dmm +++ b/_maps/map_files/generic/CentCom.dmm @@ -9129,8 +9129,8 @@ /area/centcom/central_command_areas/courtroom) "QY" = ( /obj/item/storage/box/handcuffs, -/obj/item/ammo_box/a357, -/obj/item/ammo_box/a357, +/obj/item/ammo_box/speedloader/c357, +/obj/item/ammo_box/speedloader/c357, /obj/item/gun/ballistic/revolver/mateba, /obj/structure/table/reinforced, /obj/machinery/firealarm/directional/south, diff --git a/_maps/map_files/tramstation/maintenance_modules/dormmedupper_3.dmm b/_maps/map_files/tramstation/maintenance_modules/dormmedupper_3.dmm index 69b84841086..4e29c62a599 100644 --- a/_maps/map_files/tramstation/maintenance_modules/dormmedupper_3.dmm +++ b/_maps/map_files/tramstation/maintenance_modules/dormmedupper_3.dmm @@ -256,6 +256,10 @@ /obj/structure/cable, /turf/open/floor/catwalk_floor, /area/station/maintenance/department/crew_quarters/dorms) +"Gv" = ( +/obj/effect/landmark/firealarm_sanity, +/turf/open/floor/grass, +/area/station/asteroid) "GE" = ( /obj/structure/flora/bush/flowers_br/style_random, /turf/open/floor/grass, @@ -1082,7 +1086,7 @@ GE vg ci rO -rO +Gv rO rO Cp diff --git a/_maps/map_files/tramstation/tramstation.dmm b/_maps/map_files/tramstation/tramstation.dmm index 411c98cb101..d8f320e4bd3 100644 --- a/_maps/map_files/tramstation/tramstation.dmm +++ b/_maps/map_files/tramstation/tramstation.dmm @@ -45250,7 +45250,7 @@ /obj/structure/safe/vault, /obj/item/clothing/head/costume/bearpelt, /obj/item/gun/ballistic/revolver/russian, -/obj/item/ammo_box/a357, +/obj/item/ammo_box/speedloader/c357, /obj/effect/turf_decal/bot_white/left, /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/machinery/light/dim/directional/east, diff --git a/_maps/map_files/wawastation/wawastation.dmm b/_maps/map_files/wawastation/wawastation.dmm index 31d1932d9e0..2edb6f6f87c 100644 --- a/_maps/map_files/wawastation/wawastation.dmm +++ b/_maps/map_files/wawastation/wawastation.dmm @@ -45211,6 +45211,7 @@ pixel_x = -3; pixel_y = 3 }, +/obj/item/clothing/gloves/color/yellow, /turf/open/floor/iron/textured, /area/station/engineering/storage/tech) "pEk" = ( diff --git a/_maps/minigame/basketball/soviet_bear.dmm b/_maps/minigame/basketball/soviet_bear.dmm index a612daa3653..f636344c4c0 100644 --- a/_maps/minigame/basketball/soviet_bear.dmm +++ b/_maps/minigame/basketball/soviet_bear.dmm @@ -6,9 +6,9 @@ /area/centcom/basketball) "aw" = ( /obj/structure/table, -/obj/item/ammo_box/strilka310, -/obj/item/ammo_box/strilka310, -/obj/item/ammo_box/strilka310, +/obj/item/ammo_box/speedloader/strilka310, +/obj/item/ammo_box/speedloader/strilka310, +/obj/item/ammo_box/speedloader/strilka310, /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -348,9 +348,9 @@ /area/centcom/basketball) "Bd" = ( /obj/structure/table, -/obj/item/ammo_box/strilka310, -/obj/item/ammo_box/strilka310, -/obj/item/ammo_box/strilka310, +/obj/item/ammo_box/speedloader/strilka310, +/obj/item/ammo_box/speedloader/strilka310, +/obj/item/ammo_box/speedloader/strilka310, /turf/open/floor/iron/dark, /area/centcom/basketball) "BJ" = ( diff --git a/_maps/minigame/deathmatch/arena_station.dmm b/_maps/minigame/deathmatch/arena_station.dmm index 1e2b1b57be7..c3fb3ed3903 100644 --- a/_maps/minigame/deathmatch/arena_station.dmm +++ b/_maps/minigame/deathmatch/arena_station.dmm @@ -876,7 +876,7 @@ /area/deathmatch) "Kz" = ( /obj/effect/spawner/random/trash/box, -/obj/item/ammo_box/a357, +/obj/item/ammo_box/speedloader/c357, /turf/open/indestructible/plating, /area/deathmatch) "KC" = ( diff --git a/_maps/minigame/deathmatch/train.dmm b/_maps/minigame/deathmatch/train.dmm index 3f0619d1ab4..d35de7b1a6e 100644 --- a/_maps/minigame/deathmatch/train.dmm +++ b/_maps/minigame/deathmatch/train.dmm @@ -34,7 +34,7 @@ locked = 0 }, /obj/effect/decal/cleanable/fuel_pool/hivis, -/obj/item/ammo_box/c38, +/obj/item/ammo_box/speedloader/c38, /obj/effect/turf_decal/stripes/asteroid/line{ dir = 6 }, @@ -242,7 +242,7 @@ locked = 0 }, /obj/effect/decal/cleanable/fuel_pool/hivis, -/obj/item/ammo_box/c38, +/obj/item/ammo_box/speedloader/c38, /obj/effect/turf_decal/stripes/asteroid/line{ dir = 4 }, @@ -617,7 +617,7 @@ /area/deathmatch) "EX" = ( /obj/structure/lattice/catwalk, -/obj/item/ammo_box/c38/match, +/obj/item/ammo_box/speedloader/c38/match, /turf/open/chasm/true/no_smooth/fake_motion_sand/fast, /area/deathmatch) "Fa" = ( @@ -932,7 +932,7 @@ locked = 0 }, /obj/effect/decal/cleanable/fuel_pool/hivis, -/obj/item/ammo_box/c38, +/obj/item/ammo_box/speedloader/c38, /obj/effect/turf_decal/stripes/asteroid/line{ dir = 4 }, diff --git a/_maps/minigame/deathmatch/underground_arena.dmm b/_maps/minigame/deathmatch/underground_arena.dmm index 4d776acb0b4..cd8d535ad71 100644 --- a/_maps/minigame/deathmatch/underground_arena.dmm +++ b/_maps/minigame/deathmatch/underground_arena.dmm @@ -564,7 +564,7 @@ /area/deathmatch) "Kb" = ( /obj/structure/table/reinforced, -/obj/item/ammo_box/strilka310/surplus, +/obj/item/ammo_box/speedloader/strilka310/surplus, /turf/open/indestructible/dark/smooth_large, /area/deathmatch) "Kr" = ( diff --git a/_maps/modular_generic/jungle_m_armory.dmm b/_maps/modular_generic/jungle_m_armory.dmm index 39090181945..0ba60740059 100644 --- a/_maps/modular_generic/jungle_m_armory.dmm +++ b/_maps/modular_generic/jungle_m_armory.dmm @@ -242,7 +242,7 @@ /obj/effect/turf_decal/siding/wood{ dir = 4 }, -/obj/item/ammo_box/strilka310, +/obj/item/ammo_box/speedloader/strilka310, /obj/effect/decal/cleanable/dirt, /obj/structure/railing/corner/end/flip{ dir = 8 diff --git a/_maps/modular_generic/station_s_vault.dmm b/_maps/modular_generic/station_s_vault.dmm index 774d50d3152..3a621492bb2 100644 --- a/_maps/modular_generic/station_s_vault.dmm +++ b/_maps/modular_generic/station_s_vault.dmm @@ -77,7 +77,7 @@ /obj/effect/turf_decal/trimline/dark_blue/corner{ dir = 8 }, -/obj/item/ammo_box/a357, +/obj/item/ammo_box/speedloader/c357, /obj/item/gun/ballistic/revolver/golden, /turf/open/floor/iron/smooth_corner{ dir = 8 diff --git a/_maps/shuttles/hunter_psyker.dmm b/_maps/shuttles/hunter_psyker.dmm index 476e58ce6f8..2c744e09ec0 100644 --- a/_maps/shuttles/hunter_psyker.dmm +++ b/_maps/shuttles/hunter_psyker.dmm @@ -147,25 +147,25 @@ "gE" = ( /obj/effect/turf_decal/tile/dark_blue/diagonal_edge, /obj/structure/table/reinforced/plasmarglass, -/obj/item/ammo_box/c38/match{ +/obj/item/ammo_box/speedloader/c38/match{ pixel_x = -5; pixel_y = 4 }, -/obj/item/ammo_box/c38/match{ +/obj/item/ammo_box/speedloader/c38/match{ pixel_x = -1; pixel_y = 4 }, -/obj/item/ammo_box/c38/match{ +/obj/item/ammo_box/speedloader/c38/match{ pixel_x = 3; pixel_y = 4 }, -/obj/item/ammo_box/c38/match{ +/obj/item/ammo_box/speedloader/c38/match{ pixel_x = -8 }, -/obj/item/ammo_box/c38/match{ +/obj/item/ammo_box/speedloader/c38/match{ pixel_x = -4 }, -/obj/item/ammo_box/c38/match, +/obj/item/ammo_box/speedloader/c38/match, /turf/open/floor/iron/white/diagonal, /area/shuttle/hunter) "gW" = ( diff --git a/_maps/shuttles/hunter_russian.dmm b/_maps/shuttles/hunter_russian.dmm index 3f3f24fee57..46840f7cdd7 100644 --- a/_maps/shuttles/hunter_russian.dmm +++ b/_maps/shuttles/hunter_russian.dmm @@ -173,10 +173,10 @@ /obj/structure/closet/crate/secure/weapon{ name = "surplus crate" }, -/obj/item/ammo_box/strilka310, -/obj/item/ammo_box/strilka310, -/obj/item/ammo_box/strilka310, -/obj/item/ammo_box/strilka310, +/obj/item/ammo_box/speedloader/strilka310, +/obj/item/ammo_box/speedloader/strilka310, +/obj/item/ammo_box/speedloader/strilka310, +/obj/item/ammo_box/speedloader/strilka310, /turf/open/floor/pod/dark, /area/shuttle/hunter/russian) "qF" = ( @@ -611,7 +611,7 @@ /obj/effect/decal/cleanable/dirt, /obj/item/gun/ballistic/automatic/pistol, /obj/item/ammo_box/magazine/m9mm, -/obj/item/ammo_box/strilka310, +/obj/item/ammo_box/speedloader/strilka310, /obj/item/crowbar, /turf/open/floor/pod/dark, /area/shuttle/hunter/russian) diff --git a/_maps/shuttles/pirate_silverscale.dmm b/_maps/shuttles/pirate_silverscale.dmm index b95c32be7d1..e5780fed0cb 100644 --- a/_maps/shuttles/pirate_silverscale.dmm +++ b/_maps/shuttles/pirate_silverscale.dmm @@ -802,18 +802,18 @@ dir = 8 }, /obj/effect/turf_decal/bot, -/obj/item/ammo_box/strilka310/phasic{ +/obj/item/ammo_box/speedloader/strilka310/phasic{ pixel_y = -5; pixel_x = 5 }, -/obj/item/ammo_box/strilka310/phasic{ +/obj/item/ammo_box/speedloader/strilka310/phasic{ pixel_x = 5 }, -/obj/item/ammo_box/strilka310/phasic{ +/obj/item/ammo_box/speedloader/strilka310/phasic{ pixel_x = -5; pixel_y = -5 }, -/obj/item/ammo_box/strilka310/phasic{ +/obj/item/ammo_box/speedloader/strilka310/phasic{ pixel_x = -5 }, /obj/item/gun/ballistic/rifle/boltaction/prime{ diff --git a/_maps/templates/battlecruiser_starfury.dmm b/_maps/templates/battlecruiser_starfury.dmm index 5cf3c984694..b34b6f1bdab 100644 --- a/_maps/templates/battlecruiser_starfury.dmm +++ b/_maps/templates/battlecruiser_starfury.dmm @@ -2205,11 +2205,11 @@ pixel_y = 4 }, /obj/item/ammo_box/c10mm, -/obj/item/ammo_box/a357{ +/obj/item/ammo_box/speedloader/c357{ icon_state = "357-7"; pixel_y = 3 }, -/obj/item/ammo_box/a357{ +/obj/item/ammo_box/speedloader/c357{ icon_state = "357-7"; pixel_x = 2 }, @@ -2360,7 +2360,7 @@ /obj/item/storage/lockbox/medal{ req_access = list("syndicate_leader") }, -/obj/item/ammo_box/a357{ +/obj/item/ammo_box/speedloader/c357{ icon_state = "357-7"; pixel_x = 2 }, diff --git a/_maps/virtual_domains/meta_central.dmm b/_maps/virtual_domains/meta_central.dmm index 440f002970d..98ccb7a67e9 100644 --- a/_maps/virtual_domains/meta_central.dmm +++ b/_maps/virtual_domains/meta_central.dmm @@ -4096,7 +4096,7 @@ /area/virtual_domain) "Il" = ( /obj/structure/lattice, -/obj/item/ammo_box/strilka310/surplus, +/obj/item/ammo_box/speedloader/strilka310/surplus, /turf/open/space/basic, /area/virtual_domain) "Io" = ( diff --git a/code/__DEFINES/combat.dm b/code/__DEFINES/combat.dm index 982f83e9d06..26cff68b93a 100644 --- a/code/__DEFINES/combat.dm +++ b/code/__DEFINES/combat.dm @@ -236,16 +236,22 @@ GLOBAL_LIST_INIT(shove_disarming_types, typecacheof(list( // Ammo box multiload defines /// Ammo box does not accept multiload in or out, e.g. ammo box CANNOT transfer multiple casings in one action, either IN or OUT. #define AMMO_BOX_MULTILOAD_NONE 0 -/// Ammo box accepts multiload going in, e.g. ammo box can transfer multiple casings IN at once. +/// Ammo box accepts multiload going in, e.g. a magazine being fed from a stripper clip. #define AMMO_BOX_MULTILOAD_IN (1 << 0) -/// Ammo box accepts multiload going out, e.g. ammo box can transfer multiple casings OUT at once. +/// Ammo box can multiload going out to other ammo boxes, but not loaded magazines, e.g. an ammo box feeding into an unloaded magazine. #define AMMO_BOX_MULTILOAD_OUT (1 << 1) +/// Ammo box can multiload going out into loaded magazines, e.g. a speedloader feeding into a revolver's cylinder or a stripper clip feeding into a loaded magazine. +#define AMMO_BOX_MULTILOAD_OUT_LOADED (1 << 2) /// Ammo box accepts multiload in AND out, e.g. ammo box can transfer multiple casings IN at once *and* OUT at once. -#define AMMO_BOX_MULTILOAD_BOTH AMMO_BOX_MULTILOAD_IN | AMMO_BOX_MULTILOAD_OUT +/// Ammo boxes are assumed to have some variety of magazine loading assistance. +#define AMMO_BOX_MULTILOAD_BOTH (AMMO_BOX_MULTILOAD_IN | AMMO_BOX_MULTILOAD_OUT) +/// Ammo box can accept multiloads, AND can give multiloads to boxes that are loaded or not loaded. Individual stripper clips would count for this. +#define AMMO_BOX_MULTILOAD_ALL (AMMO_BOX_MULTILOAD_IN | AMMO_BOX_MULTILOAD_OUT | AMMO_BOX_MULTILOAD_OUT_LOADED) DEFINE_BITFIELD(ammo_box_multiload, list( "LOAD_IN" = AMMO_BOX_MULTILOAD_IN, "LOAD_OUT" = AMMO_BOX_MULTILOAD_OUT, + "LOAD_OUT_LOADED" = AMMO_BOX_MULTILOAD_OUT_LOADED, )) #define SUPPRESSED_NONE 0 diff --git a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_movable.dm b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_movable.dm index 75b809b5403..412f5701eeb 100644 --- a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_movable.dm +++ b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_movable.dm @@ -65,16 +65,15 @@ #define COMSIG_MOVABLE_CANCEL_HEARING (1<<0) ///from base of atom/movable/Hear(): (proc args list(message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, list/message_mods = list(), message_range)) #define COMSIG_MOVABLE_HEAR "movable_hear" - #define HEARING_MESSAGE 1 - #define HEARING_SPEAKER 2 - #define HEARING_LANGUAGE 3 - #define HEARING_RAW_MESSAGE 4 - #define HEARING_RADIO_FREQ 5 - #define HEARING_RADIO_FREQ_NAME 6 - #define HEARING_RADIO_FREQ_COLOR 7 - #define HEARING_SPANS 8 - #define HEARING_MESSAGE_MODE 9 - #define HEARING_RANGE 10 + #define HEARING_SPEAKER 1 + #define HEARING_LANGUAGE 2 + #define HEARING_RAW_MESSAGE 3 + #define HEARING_RADIO_FREQ 4 + #define HEARING_RADIO_FREQ_NAME 5 + #define HEARING_RADIO_FREQ_COLOR 6 + #define HEARING_SPANS 7 + #define HEARING_MESSAGE_MODE 8 + #define HEARING_RANGE 9 ///called when space wind can't move a movable. (pressure_difference, pressure_direction) #define COMSIG_MOVABLE_RESISTED_SPACEWIND "movable_resisted_wind" @@ -116,7 +115,7 @@ #define MOVABLE_SAY_QUOTE_MESSAGE_SPANS 2 #define MOVABLE_SAY_QUOTE_MESSAGE_MODS 3 -/// From /datum/element/immerse/proc/add_submerge_overlay(): (visual_overlay) +/// From /datum/element/immerse/proc/add_immerse_overlay(): (atom/movable/immerse_mask/effect_relay) #define COMSIG_MOVABLE_EDIT_UNIQUE_IMMERSE_OVERLAY "movable_edit_unique_submerge_overlay" /// From base of area/Exited(): (area/left, direction) #define COMSIG_MOVABLE_EXITED_AREA "movable_exited_area" diff --git a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm index 1f5f19ba610..458ea924dca 100644 --- a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm +++ b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm @@ -351,4 +351,7 @@ #define COMSIG_LIVING_GHOSTROLE_INFO "living_ghostrole_info" ///from mob/living/befriend() -#define COMSIG_LIVING_MADE_NEW_FRIEND "made_new_friend" +#define COMSIG_LIVING_MADE_NEW_FRIEND "living_made_new_friend" + +/// From /mob/living/update_offsets(animate) : (new_x, new_y, new_w, new_z, animate) +#define COMSIG_LIVING_UPDATE_OFFSETS "living_update_offsets" diff --git a/code/__DEFINES/layers.dm b/code/__DEFINES/layers.dm index 33188011b44..15860b1aab9 100644 --- a/code/__DEFINES/layers.dm +++ b/code/__DEFINES/layers.dm @@ -270,13 +270,6 @@ #define GASFIRE_LAYER 5.05 #define RIPPLE_LAYER 5.1 -/** - * The layer of the visual overlay used in the submerge element. - * The vis overlay inherits the planes of the movables it's attached to (that also have KEEP_TOGETHER added) - * We just have to make sure the visual overlay is rendered above all the other overlays of those movables. - */ -#define WATER_VISUAL_OVERLAY_LAYER 1000 - // SEETHROUGH_PLANE layers here, tho it has no layer values //---------- LIGHTING ------------- diff --git a/code/__DEFINES/sight.dm b/code/__DEFINES/sight.dm index 5a3e0d17ef3..0a14db75ef9 100644 --- a/code/__DEFINES/sight.dm +++ b/code/__DEFINES/sight.dm @@ -25,6 +25,7 @@ #define BORGTHERM (1<<1) #define BORGXRAY (1<<2) #define BORGMATERIAL (1<<3) +#define BORGDEFAULT 0 //for clothing visor toggles, these determine which vars to toggle #define VISOR_FLASHPROTECT (1<<0) diff --git a/code/__DEFINES/traits/declarations.dm b/code/__DEFINES/traits/declarations.dm index 7dc5e789436..7d06c06af53 100644 --- a/code/__DEFINES/traits/declarations.dm +++ b/code/__DEFINES/traits/declarations.dm @@ -1192,11 +1192,6 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_ELEVATING_OBJECT "elevating_object" /// From [/datum/element/elevation_core] for purpose of checking if the turf has the trait from an instance of the element #define TRAIT_ELEVATED_TURF "elevated_turf" -/** - * With this, the immerse overlay will give the atom its own submersion visual overlay - * instead of one that's also shared with other movables, thus making editing its appearance possible. - */ -#define TRAIT_UNIQUE_IMMERSE "unique_immerse" /// This item is currently under the control of telekinesis #define TRAIT_TELEKINESIS_CONTROLLED "telekinesis_controlled" diff --git a/code/__DEFINES/wounds.dm b/code/__DEFINES/wounds.dm index cc1a6130b4c..c7b0ac1aa55 100644 --- a/code/__DEFINES/wounds.dm +++ b/code/__DEFINES/wounds.dm @@ -272,19 +272,19 @@ GLOBAL_LIST_INIT(wounding_types_to_series, list( RETURN_TYPE(/datum/wound) // note that just because its set to return this doesnt mean its non-nullable var/list/wounding_type_list = list() - for (var/wounding_type as anything in wounding_types) + for (var/wounding_type in wounding_types) wounding_type_list += GLOB.wounding_types_to_series[wounding_type] if (!length(wounding_type_list)) return null var/list/datum/wound/paths_to_pick_from = list() - for (var/series as anything in shuffle(wounding_type_list)) + for (var/series in shuffle(wounding_type_list)) var/list/severity_list = GLOB.wound_series_collections[series] if (!length(severity_list)) continue var/picked_severity - for (var/severity_text as anything in shuffle(GLOB.wound_severities_chronological)) + for (var/severity_text in shuffle(GLOB.wound_severities_chronological)) var/severity = text2num(severity_text) if (!ISINRANGE(severity, severity_min, severity_max)) continue diff --git a/code/__HELPERS/_lists.dm b/code/__HELPERS/_lists.dm index cae09f6ee50..9c4cc3eafa8 100644 --- a/code/__HELPERS/_lists.dm +++ b/code/__HELPERS/_lists.dm @@ -197,6 +197,7 @@ } while(FALSE) #define SORT_FIRST_INDEX(list) (list[1]) +#define SORT_PRIORITY_INDEX(list) (list["priority"]) #define SORT_COMPARE_DIRECTLY(thing) (thing) #define SORT_VAR_NO_TYPE(varname) var/varname /**** diff --git a/code/__HELPERS/ai.dm b/code/__HELPERS/ai.dm index 5db23ed1ffc..7e7179c3989 100644 --- a/code/__HELPERS/ai.dm +++ b/code/__HELPERS/ai.dm @@ -6,9 +6,7 @@ var/gun_neurons_activated = controller.blackboard[BB_MONKEY_GUN_NEURONS_ACTIVATED] var/top_force = 0 var/obj/item/top_force_item - for(var/obj/item/item as anything in held_weapons) - if(!item) - continue + for(var/obj/item/item in held_weapons) if(HAS_TRAIT(item, TRAIT_NEEDS_TWO_HANDS) || controller.blackboard[BB_MONKEY_BLACKLISTITEMS][item]) continue if(gun_neurons_activated && isgun(item)) @@ -19,9 +17,7 @@ top_force = item.force top_force_item = item - for(var/obj/item/item as anything in choices) - if(!item) - continue + for(var/obj/item/item in choices) if(HAS_TRAIT(item, TRAIT_NEEDS_TWO_HANDS) || controller.blackboard[BB_MONKEY_BLACKLISTITEMS][item]) continue if(gun_neurons_activated && isgun(item)) diff --git a/code/__HELPERS/construction.dm b/code/__HELPERS/construction.dm index a0ebb3db034..b2766952e1c 100644 --- a/code/__HELPERS/construction.dm +++ b/code/__HELPERS/construction.dm @@ -89,7 +89,7 @@ var/list/material_map_amounts = list() for(var/atom/object as anything in reccursive_contents) var/list/item_materials = object.custom_materials - for(var/mat as anything in custom_materials) + for(var/mat in custom_materials) var/mat_amount = 1 //no materials mean we assign this default amount if(length(item_materials)) mat_amount = item_materials[mat] || 1 //if this object doesn't have our material type then assign a default value of 1 @@ -104,7 +104,7 @@ mat_list_per_item += mat_amount //Step 3: normalize & scale material_map_amounts with material_map_sum - for(var/mat as anything in material_map_amounts) + for(var/mat in material_map_amounts) var/mat_sum = material_map_sum[mat] var/list/mat_per_item = material_map_amounts[mat] for(var/i in 1 to mat_per_item.len) @@ -114,7 +114,7 @@ var/index = 1 for(var/atom/object as anything in reccursive_contents) var/list/final_material_list = list() - for(var/mat as anything in material_map_amounts) + for(var/mat in material_map_amounts) var/list/mat_per_item = material_map_amounts[mat] final_material_list[mat] = mat_per_item[index] object.set_custom_materials(final_material_list, multiplier) diff --git a/code/__HELPERS/duplicating.dm b/code/__HELPERS/duplicating.dm index ff9a18426bc..9e88c5b7914 100644 --- a/code/__HELPERS/duplicating.dm +++ b/code/__HELPERS/duplicating.dm @@ -34,6 +34,7 @@ GLOBAL_LIST_INIT(duplicate_forbidden_vars, list( "parent", "parent_type", "power_supply", + "pixloc", "quirks", "reagents", "_signal_procs", @@ -65,14 +66,16 @@ GLOBAL_PROTECT(duplicate_forbidden_vars) var/atom/made_copy = new original.type(spawning_location) - for(var/atom_vars in original.vars - GLOB.duplicate_forbidden_vars) - if(islist(original.vars[atom_vars])) - var/list/var_list = original.vars[atom_vars] - made_copy.vars[atom_vars] = var_list.Copy() - continue - else if(istype(original.vars[atom_vars], /datum) || ismob(original.vars[atom_vars])) + for(var/atom_vars in (original.vars - GLOB.duplicate_forbidden_vars)) + var/var_value = original.vars[atom_vars] + if(isdatum(var_value)) continue // this would reference the original's object, that will break when it is used or deleted. - made_copy.vars[atom_vars] = original.vars[atom_vars] + + if(islist(var_value)) + var/list/var_list = var_value + var_value = var_list.Copy() + + made_copy.vars[atom_vars] = var_value if(isliving(made_copy)) if(iscarbon(made_copy)) diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index 996569d5ce4..f61c4f844cf 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -161,7 +161,7 @@ /proc/init_subtypes_w_path_keys(prototype, list/L) if(!istype(L)) L = list() - for(var/path as anything in subtypesof(prototype)) + for(var/path in subtypesof(prototype)) L[path] = new path() return L diff --git a/code/__HELPERS/honkerblast.dm b/code/__HELPERS/honkerblast.dm index a4418fed854..ea8eea00e59 100644 --- a/code/__HELPERS/honkerblast.dm +++ b/code/__HELPERS/honkerblast.dm @@ -7,7 +7,7 @@ playsound(origin_turf, 'sound/items/airhorn/airhorn.ogg', 100, TRUE) - for(var/mob/living/carbon/victim as anything in hearers(max(light_range, medium_range, heavy_range), origin_turf)) + for(var/mob/living/carbon/victim in hearers(max(light_range, medium_range, heavy_range), origin_turf)) if(!victim.can_hear()) continue var/distance = get_dist(origin_turf, victim.loc) diff --git a/code/__HELPERS/type_processing.dm b/code/__HELPERS/type_processing.dm index 40f21f4b189..180079cf65a 100644 --- a/code/__HELPERS/type_processing.dm +++ b/code/__HELPERS/type_processing.dm @@ -29,6 +29,9 @@ /obj/item/organ = "ORGAN", /obj/item/mod/control = "MODSUIT", /obj/item/mod/module = "MODSUIT_MOD", + /obj/item/ammo_box = "AMMOBOX", + /obj/item/ammo_box/magazine = "AMMOBOX_MAGAZINE", + /obj/item/ammo_box/speedloader = "AMMOBOX_SPEEDLOADER", /obj/item/gun = "GUN", /obj/item/gun/magic = "GUN_MAGIC", /obj/item/gun/energy = "GUN_ENERGY", diff --git a/code/_globalvars/lists/reagents.dm b/code/_globalvars/lists/reagents.dm index 882885dc11e..1b0f7258407 100644 --- a/code/_globalvars/lists/reagents.dm +++ b/code/_globalvars/lists/reagents.dm @@ -121,7 +121,7 @@ GLOBAL_LIST_INIT(plant_traits, init_plant_traits()) // So instead, we're gonna wing it var/list/reagent_to_react_count = list() for(var/datum/chemical_reaction/reaction as anything in reactions) - for(var/reagent_id as anything in reaction.required_reagents) + for(var/reagent_id in reaction.required_reagents) reagent_to_react_count[reagent_id] += 1 var/list/reaction_lookup = GLOB.chemical_reactions_list_reactant_index @@ -130,7 +130,7 @@ GLOBAL_LIST_INIT(plant_traits, init_plant_traits()) // Doing this separately because it relies on the loop above, and this is easier to parse for(var/datum/chemical_reaction/reaction as anything in reactions) var/preferred_id = null - for(var/reagent_id as anything in reaction.required_reagents) + for(var/reagent_id in reaction.required_reagents) if(isnull(preferred_id)) preferred_id = reagent_id continue @@ -207,5 +207,5 @@ GLOBAL_LIST_INIT(plant_traits, init_plant_traits()) only_names = sort_list(only_names) //build map with sorted keys - for(var/name as anything in only_names) + for(var/name in only_names) .[name] = name_to_reagent[name] diff --git a/code/_globalvars/traits/_traits.dm b/code/_globalvars/traits/_traits.dm index 9125478773e..3ddb2854387 100644 --- a/code/_globalvars/traits/_traits.dm +++ b/code/_globalvars/traits/_traits.dm @@ -90,7 +90,6 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_STOP_FISH_REPRODUCTION_AND_GROWTH" = TRAIT_STOP_FISH_REPRODUCTION_AND_GROWTH, "TRAIT_TELEKINESIS_CONTROLLED" = TRAIT_TELEKINESIS_CONTROLLED, "TRAIT_UNDERFLOOR" = TRAIT_UNDERFLOOR, - "TRAIT_UNIQUE_IMMERSE" = TRAIT_UNIQUE_IMMERSE, "TRAIT_VALID_DNA_INFUSION" = TRAIT_VALID_DNA_INFUSION, "TRAIT_WADDLING" = TRAIT_WADDLING, "TRAIT_WAS_RENAMED" = TRAIT_WAS_RENAMED, diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm index 895f4361053..45b957b8d93 100644 --- a/code/_onclick/hud/hud.dm +++ b/code/_onclick/hud/hud.dm @@ -213,7 +213,7 @@ GLOBAL_LIST_INIT(available_erp_ui_styles, list( if(should_sight_scale(new_sight) == should_sight_scale(old_sight)) return - for(var/group_key as anything in master_groups) + for(var/group_key in master_groups) var/datum/plane_master_group/group = master_groups[group_key] group.build_planes_offset(src, current_plane_offset) @@ -237,7 +237,7 @@ GLOBAL_LIST_INIT(available_erp_ui_styles, list( current_plane_offset = new_offset SEND_SIGNAL(src, COMSIG_HUD_OFFSET_CHANGED, old_offset, new_offset) - for(var/group_key as anything in master_groups) + for(var/group_key in master_groups) var/datum/plane_master_group/group = master_groups[group_key] group.build_planes_offset(src, new_offset) diff --git a/code/_onclick/hud/rendering/plane_master_controller.dm b/code/_onclick/hud/rendering/plane_master_controller.dm index f4b71611716..2d2d5c54bd6 100644 --- a/code/_onclick/hud/rendering/plane_master_controller.dm +++ b/code/_onclick/hud/rendering/plane_master_controller.dm @@ -31,21 +31,21 @@ INITIALIZE_IMMEDIATE(/atom/movable/plane_master_controller) return returned_planes ///Full override so we can just use filterrific -/atom/movable/plane_master_controller/add_filter(name, priority, list/params) +/atom/movable/plane_master_controller/add_filter(name, priority, list/params, update = TRUE) . = ..() for(var/atom/movable/screen/plane_master/pm_iterator as anything in get_planes()) - pm_iterator.add_filter(name, priority, params) + pm_iterator.add_filter(name, priority, params, update) ///Full override so we can just use filterrific -/atom/movable/plane_master_controller/remove_filter(name_or_names) +/atom/movable/plane_master_controller/remove_filter(name_or_names, update = TRUE) . = ..() for(var/atom/movable/screen/plane_master/pm_iterator as anything in get_planes()) - pm_iterator.remove_filter(name_or_names) + pm_iterator.remove_filter(name_or_names, update) -/atom/movable/plane_master_controller/update_filters() +/atom/movable/plane_master_controller/update_filters(start_index = null) . = ..() for(var/atom/movable/screen/plane_master/pm_iterator as anything in get_planes()) - pm_iterator.update_filters() + pm_iterator.update_filters(start_index) ///Gets all filters for this controllers plane masters /atom/movable/plane_master_controller/proc/get_filters(name) diff --git a/code/controllers/master.dm b/code/controllers/master.dm index 285c6451b68..6942f97dcb7 100644 --- a/code/controllers/master.dm +++ b/code/controllers/master.dm @@ -347,7 +347,7 @@ ADMIN_VERB(cmd_controller_view_ui, R_SERVER|R_DEBUG, "Controller Overview", "Vie // Allows subsystems to declare other subsystems that must initialize after them. for(var/datum/controller/subsystem/subsystem as anything in subsystems) - for(var/dependent_type as anything in subsystem.dependents) + for(var/dependent_type in subsystem.dependents) if(!ispath(dependent_type, /datum/controller/subsystem)) stack_trace("ERROR: MC: subsystem `[subsystem.type]` has an invalid dependent: `[dependent_type]`. Skipping") continue @@ -357,7 +357,7 @@ ADMIN_VERB(cmd_controller_view_ui, R_SERVER|R_DEBUG, "Controller Overview", "Vie // Constructs a reverse-dependency graph. for(var/datum/controller/subsystem/subsystem as anything in subsystems) - for(var/dependency_type as anything in subsystem.dependencies) + for(var/dependency_type in subsystem.dependencies) if(!ispath(dependency_type, /datum/controller/subsystem)) stack_trace("ERROR: MC: subsystem `[subsystem.type]` has an invalid dependency: `[dependency_type]`. Skipping") continue @@ -1041,4 +1041,3 @@ ADMIN_VERB(cmd_controller_view_ui, R_SERVER|R_DEBUG, "Controller Overview", "Vie return FALSE last_profiled = REALTIMEOFDAY SSprofiler.DumpFile(allow_yield = FALSE) - diff --git a/code/controllers/subsystem/blackbox.dm b/code/controllers/subsystem/blackbox.dm index b4e67fe7f91..89930cb1139 100644 --- a/code/controllers/subsystem/blackbox.dm +++ b/code/controllers/subsystem/blackbox.dm @@ -431,7 +431,7 @@ Versioning /datum/controller/subsystem/blackbox/proc/ReportRoundstartManifest(list/characters) var/list/query_rows = list() var/list/special_columns = list("server_ip" = "INET_ATON(?)") - for(var/mob_ckey as anything in characters) + for(var/mob_ckey in characters) var/mob/living/new_character = characters[mob_ckey] query_rows += list(list( "server_ip" = world.internet_address || 0, diff --git a/code/controllers/subsystem/movement/ai_movement.dm b/code/controllers/subsystem/movement/ai_movement.dm index 90333b529d7..8703fbfdfc6 100644 --- a/code/controllers/subsystem/movement/ai_movement.dm +++ b/code/controllers/subsystem/movement/ai_movement.dm @@ -14,6 +14,6 @@ MOVEMENT_SUBSYSTEM_DEF(ai_movement) /datum/controller/subsystem/movement/ai_movement/proc/SetupAIMovementInstances() movement_types = list() - for(var/key as anything in subtypesof(/datum/ai_movement)) + for(var/key in subtypesof(/datum/ai_movement)) var/datum/ai_movement/ai_movement = new key movement_types[key] = ai_movement diff --git a/code/controllers/subsystem/ore_generation.dm b/code/controllers/subsystem/ore_generation.dm index 97fd6057d65..b364bfe0487 100644 --- a/code/controllers/subsystem/ore_generation.dm +++ b/code/controllers/subsystem/ore_generation.dm @@ -21,26 +21,12 @@ SUBSYSTEM_DEF(ore_generation) */ var/list/ore_vent_minerals = list() - /// A tracker of how many of each ore vent size we have in the game. Useful for tracking purposes. - /datum/controller/subsystem/ore_generation/Initialize() //Basically, we're going to round robin through the list of ore vents and assign a mineral to them until complete. - while(length(ore_vent_minerals) > 0) //Keep looping if there's more to assign - var/stallbreaker = 0 - for(var/obj/structure/ore_vent/vent as anything in possible_vents) - if(length(ore_vent_minerals) <= 0) //But break early if there's none left. - break - if(vent.unique_vent) - continue //Ya'll already got your minerals. - if(length(difflist(first = ore_vent_minerals, second = vent.mineral_breakdown, skiprep = 1))) - vent.generate_mineral_breakdown(new_minerals = 1, map_loading = TRUE) - else - stallbreaker++ - if(stallbreaker >= length(possible_vents)) - break //We've done all we can here. break inner loop - continue - if(stallbreaker >= length(possible_vents)) - break //We've done all we can here. break outer loop + for(var/obj/structure/ore_vent/vent as anything in possible_vents) + if(vent.unique_vent) + continue //Ya'll already got your minerals. + vent.generate_mineral_breakdown(map_loading = TRUE) /// Handles roundstart logging logger.Log( diff --git a/code/controllers/subsystem/processing/fishing.dm b/code/controllers/subsystem/processing/fishing.dm index 3ccf0e06b73..5283560a5a5 100644 --- a/code/controllers/subsystem/processing/fishing.dm +++ b/code/controllers/subsystem/processing/fishing.dm @@ -117,7 +117,7 @@ PROCESSING_SUBSYSTEM_DEF(fishing) continue LAZYOR(fish_safe_turfs_by_type[fish_path], source.associated_safe_turfs) //If a subtype doesn't have set safe turfs, it'll inherit them from the parent type. - for(var/fish_type as anything in fish_safe_turfs_by_type) + for(var/fish_type in fish_safe_turfs_by_type) for(var/fish_subtype in subtypesof(fish_type)) if(!length(fish_safe_turfs_by_type[fish_subtype])) fish_safe_turfs_by_type[fish_subtype] = fish_safe_turfs_by_type[fish_type] diff --git a/code/controllers/subsystem/processing/greyscale.dm b/code/controllers/subsystem/processing/greyscale.dm index f88b960e869..2fe8444bd7c 100644 --- a/code/controllers/subsystem/processing/greyscale.dm +++ b/code/controllers/subsystem/processing/greyscale.dm @@ -34,7 +34,7 @@ PROCESSING_SUBSYSTEM_DEF(greyscale) #endif // This final verification step is for things that need other greyscale configurations to be finished loading - for(var/greyscale_type as anything in configurations) + for(var/greyscale_type in configurations) CHECK_TICK var/datum/greyscale_config/config = configurations[greyscale_type] config.CrossVerify() diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/targeting.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/targeting.dm index 4132a2cf2a5..e5de231aff5 100644 --- a/code/datums/ai/basic_mobs/basic_ai_behaviors/targeting.dm +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/targeting.dm @@ -91,7 +91,7 @@ GLOBAL_LIST_INIT(target_interested_atoms, typecacheof(list(/mob, /obj/machinery/ /datum/ai_behavior/find_potential_targets/proc/new_turf_found(turf/found, datum/ai_controller/controller, datum/targeting_strategy/strategy) var/valid_found = FALSE var/mob/pawn = controller.pawn - for(var/maybe_target as anything in found) + for(var/maybe_target in found) if(maybe_target == pawn) continue if(!is_type_in_typecache(maybe_target, GLOB.target_interested_atoms)) @@ -120,7 +120,7 @@ GLOBAL_LIST_INIT(target_interested_atoms, typecacheof(list(/mob, /obj/machinery/ /datum/ai_behavior/find_potential_targets/proc/new_atoms_found(list/atom/movable/found, datum/ai_controller/controller, target_key, datum/targeting_strategy/strategy, hiding_location_key) var/mob/pawn = controller.pawn var/list/accepted_targets = list() - for(var/maybe_target as anything in found) + for(var/maybe_target in found) if(maybe_target == pawn) continue // Need to better handle viewers here diff --git a/code/datums/ai/basic_mobs/targeting_strategies/basic_targeting_strategy.dm b/code/datums/ai/basic_mobs/targeting_strategies/basic_targeting_strategy.dm index 2b2297c2d6d..6848d5d323d 100644 --- a/code/datums/ai/basic_mobs/targeting_strategies/basic_targeting_strategy.dm +++ b/code/datums/ai/basic_mobs/targeting_strategies/basic_targeting_strategy.dm @@ -97,7 +97,7 @@ if (!length(required_traits)) return TRUE - for (var/trait as anything in required_traits) + for (var/trait in required_traits) if (HAS_TRAIT(the_target, trait)) return TRUE return FALSE diff --git a/code/datums/ai/generic/find_and_set.dm b/code/datums/ai/generic/find_and_set.dm index dd25a730629..a705c738698 100644 --- a/code/datums/ai/generic/find_and_set.dm +++ b/code/datums/ai/generic/find_and_set.dm @@ -95,7 +95,7 @@ var/mob/living/living_pawn = controller.pawn var/list/nearby_items = list() - for (var/obj/new_friend as anything in oview(search_range, controller.pawn)) + for (var/obj/new_friend in oview(search_range, controller.pawn)) if (!isitem(new_friend) && !isstructure(new_friend)) continue if (is_type_in_list(new_friend, GLOB.animatable_blacklist)) diff --git a/code/datums/alarm.dm b/code/datums/alarm.dm index e25f96b95a5..27125efbc9c 100644 --- a/code/datums/alarm.dm +++ b/code/datums/alarm.dm @@ -198,7 +198,7 @@ var/list/alarms_cache = alarms //Cache for sonic speec for(var/alarm_type in alarms_cache) var/list/alarms_of_type = alarms_cache[alarm_type] //Sonic cache speed forads - for(var/area_name as anything in alarms_of_type) + for(var/area_name in alarms_of_type) var/list/alarm_packet = alarms_of_type[area_name] var/list/cameras = alarm_packet[2] if(cameras) diff --git a/code/datums/armor/_armor.dm b/code/datums/armor/_armor.dm index 33f37900374..f990a57842e 100644 --- a/code/datums/armor/_armor.dm +++ b/code/datums/armor/_armor.dm @@ -183,7 +183,7 @@ GLOBAL_LIST_INIT(armor_by_type, generate_armor_type_cache()) /// Checks if any of the armor values are non-zero, so this technically also counts negative armor! /datum/armor/proc/has_any_armor() - for(var/rating as anything in ARMOR_LIST_ALL()) + for(var/rating in ARMOR_LIST_ALL()) if(vars[rating]) return TRUE return FALSE diff --git a/code/datums/brain_damage/imaginary_friend.dm b/code/datums/brain_damage/imaginary_friend.dm index 617f590e5fb..42779b5c81a 100644 --- a/code/datums/brain_damage/imaginary_friend.dm +++ b/code/datums/brain_damage/imaginary_friend.dm @@ -216,7 +216,7 @@ owner.imaginary_group -= src return ..() -/mob/eye/imaginary_friend/Hear(message, atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, freq_name, freq_color, list/spans, list/message_mods = list(), message_range) +/mob/eye/imaginary_friend/Hear(atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, freq_name, freq_color, list/spans, list/message_mods = list(), message_range) if (safe_read_pref(client, /datum/preference/toggle/enable_runechat) && (safe_read_pref(client, /datum/preference/toggle/enable_runechat_non_mobs) || ismob(speaker))) create_chat_message(speaker, message_language, raw_message, spans) to_chat(src, compose_message(speaker, message_language, raw_message, radio_freq, freq_name, freq_color, spans, message_mods)) @@ -257,14 +257,13 @@ log_sayverb_talk(message, message_mods, tag = "imaginary friend", forced_by = forced) var/messagepart = generate_messagepart(message, spans, message_mods) - var/rendered = "[span_name("[name]")] [messagepart]" var/dead_rendered = "[span_name("[name] (Imaginary friend of [owner])")] [messagepart]" var/language = message_language || owner.get_selected_language() - Hear(rendered, src, language, message, null, null, null, spans, message_mods) // We always hear what we say + Hear(src, language, message, null, null, null, spans, message_mods) // We always hear what we say var/group = owner.imaginary_group - src // The people in our group don't, so we have to exclude ourselves not to hear twice for(var/mob/person in group) - person.Hear(null, src, language, message, null, null, null, spans, message_mods, range) + person.Hear(src, language, message, null, null, null, spans, message_mods, range) // Speech bubble, but only for those who have runechat off var/list/speech_bubble_recipients = list() diff --git a/code/datums/brain_damage/special.dm b/code/datums/brain_damage/special.dm index bed2d33626d..b27335ce3fb 100644 --- a/code/datums/brain_damage/special.dm +++ b/code/datums/brain_damage/special.dm @@ -690,7 +690,7 @@ talk_tuah(pick(hurt_lines)) /datum/brain_trauma/special/axedoration/proc/talk_tuah(sent_message = "Hello World.") - owner.Hear(null, GLOB.bridge_axe, owner.get_selected_language(), sent_message) + owner.Hear(GLOB.bridge_axe, owner.get_selected_language(), sent_message) /datum/brain_trauma/special/axedoration/proc/get_axe_location() if(!GLOB.bridge_axe) diff --git a/code/datums/components/aquarium.dm b/code/datums/components/aquarium.dm index fd442427bbb..314b34bfe13 100644 --- a/code/datums/components/aquarium.dm +++ b/code/datums/components/aquarium.dm @@ -540,7 +540,7 @@ var/list/highest_val_list = list(tracked_fish_by_type[1]) //In case there's only one type of fish in here... var/highest_val = -1 - for(var/fish_type as anything in can_survive_with) + for(var/fish_type in can_survive_with) var/list/compatible_types = can_survive_with[fish_type] var/fish_amount = fish_alive_by_type[fish_type] for(var/obj/item/fish/fish_instance as anything in tracked_fish_by_type[fish_type]) diff --git a/code/datums/components/crafting/crafting.dm b/code/datums/components/crafting/crafting.dm index 5652c173ce5..d7511de26c6 100644 --- a/code/datums/components/crafting/crafting.dm +++ b/code/datums/components/crafting/crafting.dm @@ -2,8 +2,9 @@ #define CONTENTS_INSTANCES "instances" #define CONTENTS_MACHINERY "machinery" #define CONTENTS_STRUCTURES "structures" -#define CONTENTS_REAGENTS "reagents" +#define CONTENTS_REQS_COUNT "reqs_count" #define CONTENTS_TOOL_BEHAVIOUR "tool_behaviour" +#define CONTENTS_POSSIBLE_TOOLS "tool_instances" /// The portion of time spent crafting that recipe dependant on the speed of the tools #define RECIPE_DYNAMIC_TIME_COEFF 0.85 @@ -61,7 +62,7 @@ var/list/item_instances = contents[CONTENTS_INSTANCES] var/list/machines = contents[CONTENTS_MACHINERY] var/list/structures = contents[CONTENTS_STRUCTURES] - contents = contents[CONTENTS_REAGENTS] + contents = contents[CONTENTS_REQS_COUNT] var/list/requirements_list = list() @@ -132,81 +133,68 @@ continue . += AM -/datum/component/personal_crafting/proc/get_surroundings(atom/a, list/blacklist=null) +/datum/component/personal_crafting/proc/get_surroundings(atom/source, list/blacklist=null) . = list() .[CONTENTS_TOOL_BEHAVIOUR] = list() - .[CONTENTS_REAGENTS] = list() + .[CONTENTS_REQS_COUNT] = list() .[CONTENTS_INSTANCES] = list() .[CONTENTS_MACHINERY] = list() .[CONTENTS_STRUCTURES] = list() - for(var/obj/object in get_environment(a, blacklist)) + for(var/obj/object in get_environment(source, blacklist)) if(isitem(object)) var/obj/item/item = object LAZYADDASSOCLIST(.[CONTENTS_INSTANCES], item.type, item) if(isstack(item)) var/obj/item/stack/stack = item - .[CONTENTS_REAGENTS][item.type] += stack.amount + .[CONTENTS_REQS_COUNT][item.type] += stack.amount else - .[CONTENTS_REAGENTS][item.type] += 1 + .[CONTENTS_REQS_COUNT][item.type] += 1 if(is_reagent_container(item) && item.is_drainable() && length(item.reagents.reagent_list)) //some container that has some reagents inside it that can be drained var/obj/item/reagent_containers/container = item for(var/datum/reagent/reagent as anything in container.reagents.reagent_list) - .[CONTENTS_REAGENTS][reagent.type] += reagent.volume - else //a reagent container that is empty can also be used as a tool. e.g. glass bottle can be used as a rolling pin - if(item.tool_behaviour) - var/current_tool_speed = .[CONTENTS_TOOL_BEHAVIOUR][item.tool_behaviour] - if(current_tool_speed < item.toolspeed) - .[CONTENTS_TOOL_BEHAVIOUR][item.tool_behaviour] = item.toolspeed + .[CONTENTS_REQS_COUNT][reagent.type] += reagent.volume + if(item.tool_behaviour) + var/current_tool_speed = .[CONTENTS_TOOL_BEHAVIOUR][item.tool_behaviour] + if(current_tool_speed < item.toolspeed) + .[CONTENTS_TOOL_BEHAVIOUR][item.tool_behaviour] = item.toolspeed else if (ismachinery(object)) LAZYADDASSOCLIST(.[CONTENTS_MACHINERY], object.type, object) else if (isstructure(object)) LAZYADDASSOCLIST(.[CONTENTS_STRUCTURES], object.type, object) + var/list/within_source = list() + for(var/obj/item/item in source.contents) + within_source += item + if(item.atom_storage) + within_source += item.contents + + for(var/obj/item/item as anything in within_source) + if(!item.tool_behaviour) + continue + var/current_tool_speed = .[CONTENTS_TOOL_BEHAVIOUR][item.tool_behaviour] + if(current_tool_speed < item.toolspeed) + .[CONTENTS_TOOL_BEHAVIOUR][item.tool_behaviour] = item.toolspeed + + var/list/instances = .[CONTENTS_INSTANCES] + for(var/item_type in instances) + .[CONTENTS_POSSIBLE_TOOLS] += instances[item_type] + .[CONTENTS_POSSIBLE_TOOLS] += within_source + /// Returns a boolean on whether the tool requirements of the input recipe are satisfied by the input source and surroundings. /datum/component/personal_crafting/proc/check_tools(atom/source, datum/crafting_recipe/recipe, list/surroundings, final_check = FALSE) if(!length(recipe.tool_behaviors) && !length(recipe.tool_paths)) return TRUE - var/list/available_tools = list() - var/list/present_qualities = list() - - var/list/all_instances = list() - for(var/atom/movable/movable as anything in source.contents) - all_instances += movable - if(movable.atom_storage) - all_instances += movable.contents - - for(var/obj/item/contained_item in all_instances) //fill the available tools list with available tool types and behaviours - available_tools[contained_item.type] = TRUE - if(contained_item.tool_behaviour) - present_qualities[contained_item.tool_behaviour] = TRUE - - for(var/quality in surroundings[CONTENTS_TOOL_BEHAVIOUR]) - present_qualities[quality] = TRUE - - for(var/path in surroundings[CONTENTS_REAGENTS]) - available_tools[path] = TRUE - for(var/required_quality in recipe.tool_behaviors) - if(!present_qualities[required_quality]) + if(!(required_quality in surroundings[CONTENTS_TOOL_BEHAVIOUR])) return FALSE + var/list/possible_tool_instances = surroundings[CONTENTS_POSSIBLE_TOOLS] for(var/required_path in recipe.tool_paths) - var/found_this_tool = FALSE - for(var/tool_path in available_tools) - if(!ispath(tool_path, required_path)) - continue - found_this_tool = TRUE - break - if(!found_this_tool) + if(!(locate(required_path) in possible_tool_instances)) return FALSE - //add the contents of the assoc list of the surrounding instances to all_instances for the recipe.check_tools() call - var/list/surrounding_instances = surroundings[CONTENTS_INSTANCES] - for(var/type_key in surrounding_instances) - all_instances |= surrounding_instances[type_key] - - return recipe.check_tools(source, all_instances, final_check) + return recipe.check_tools(source, possible_tool_instances, final_check) /datum/component/personal_crafting/proc/construct_item(atom/crafter, datum/crafting_recipe/recipe) if(!crafter) @@ -233,10 +221,10 @@ //Then divide it by the number of tools used in the recipe, and recalculate it. dynamic_recipe_time /= tools_used - var/instances = contents[CONTENTS_INSTANCES] + var/list/possible_tool_instances = contents[CONTENTS_POSSIBLE_TOOLS] for(var/tool in recipe.tool_paths) var/best_speed = 10 //failsafe-ish - for(var/obj/item/item as anything in instances) + for(var/obj/item/item as anything in possible_tool_instances) if(!istype(item, tool) || best_speed < item.toolspeed) continue best_speed = item.toolspeed @@ -760,6 +748,7 @@ #undef CONTENTS_INSTANCES #undef CONTENTS_MACHINERY #undef CONTENTS_STRUCTURES -#undef CONTENTS_REAGENTS +#undef CONTENTS_REQS_COUNT #undef CONTENTS_TOOL_BEHAVIOUR #undef RECIPE_DYNAMIC_TIME_COEFF +#undef CONTENTS_POSSIBLE_TOOLS diff --git a/code/datums/components/ingredients_holder.dm b/code/datums/components/ingredients_holder.dm index 6214f6973f6..afa52f3fc53 100644 --- a/code/datums/components/ingredients_holder.dm +++ b/code/datums/components/ingredients_holder.dm @@ -58,7 +58,7 @@ ingredient_names = processed_holder.ingredient_names custom_name = processed_holder.custom_name atom_parent.name = "[custom_adjective()] [custom_name] [atom_parent.name]" - for(var/fillcol as anything in processed_holder.filling_colors) + for(var/fillcol in processed_holder.filling_colors) apply_fill(fillcol) /datum/component/ingredients_holder/Destroy(force) diff --git a/code/datums/components/material/material_container.dm b/code/datums/components/material/material_container.dm index 9a8f9b4647e..6b1cda73099 100644 --- a/code/datums/components/material/material_container.dm +++ b/code/datums/components/material/material_container.dm @@ -460,10 +460,10 @@ //we now summarize the chat msgs collected if(!(mat_container_flags & MATCONTAINER_SILENT)) - for(var/status as anything in chat_msgs) + for(var/status in chat_msgs) var/list/status_data = chat_msgs[status] - for(var/item_name as anything in status_data) + for(var/item_name in status_data) //read the params var/list/chat_data = status_data[item_name] var/count = chat_data["count"] diff --git a/code/datums/components/pet_commands/obeys_commands.dm b/code/datums/components/pet_commands/obeys_commands.dm index 71a8fb66b70..0e459a60161 100644 --- a/code/datums/components/pet_commands/obeys_commands.dm +++ b/code/datums/components/pet_commands/obeys_commands.dm @@ -52,7 +52,7 @@ SIGNAL_HANDLER RegisterSignal(new_friend, COMSIG_KB_LIVING_VIEW_PET_COMMANDS, PROC_REF(on_key_pressed)) RegisterSignal(new_friend, DEACTIVATE_KEYBIND(COMSIG_KB_LIVING_VIEW_PET_COMMANDS), PROC_REF(on_key_unpressed)) - for (var/command_name as anything in available_commands) + for (var/command_name in available_commands) var/datum/pet_command/command = available_commands[command_name] INVOKE_ASYNC(command, TYPE_PROC_REF(/datum/pet_command, add_new_friend), new_friend) @@ -71,7 +71,7 @@ COMSIG_KB_LIVING_VIEW_PET_COMMANDS, DEACTIVATE_KEYBIND(COMSIG_KB_LIVING_VIEW_PET_COMMANDS), )) - for (var/command_name as anything in available_commands) + for (var/command_name in available_commands) var/datum/pet_command/command = available_commands[command_name] INVOKE_ASYNC(command, TYPE_PROC_REF(/datum/pet_command, remove_friend), old_friend) @@ -116,7 +116,7 @@ /// Actually display the radial menu and then do something with the result /datum/component/obeys_commands/proc/display_radial_menu(mob/living/friend) var/list/radial_options = list() - for (var/command_name as anything in available_commands) + for (var/command_name in available_commands) var/datum/pet_command/command = available_commands[command_name] var/datum/radial_menu_choice/choice = command.provide_radial_data() if (!choice) diff --git a/code/datums/components/pet_commands/pet_command.dm b/code/datums/components/pet_commands/pet_command.dm index 84b288a5cd8..04dde32d5db 100644 --- a/code/datums/components/pet_commands/pet_command.dm +++ b/code/datums/components/pet_commands/pet_command.dm @@ -107,7 +107,7 @@ * if check_verbosity is true, skip the match if there spoken_text is way longer than the match */ /datum/pet_command/proc/find_command_in_text(spoken_text, check_verbosity = FALSE) - for (var/command as anything in speech_commands) + for (var/command in speech_commands) if (!findtext(spoken_text, command)) continue if(check_verbosity && length(spoken_text) > length(command) + MAX_NAME_LEN) @@ -220,5 +220,3 @@ return FALSE parent.visible_message(span_warning("[parent] follows [friend]'s gesture towards [potential_target] [pointed_reaction]!")) return TRUE - - diff --git a/code/datums/components/regenerative_shield.dm b/code/datums/components/regenerative_shield.dm index 34d305b27e1..c090eeefb24 100644 --- a/code/datums/components/regenerative_shield.dm +++ b/code/datums/components/regenerative_shield.dm @@ -19,7 +19,7 @@ src.regeneration_time = regeneration_time var/atom/movable/living_parent = parent - for(var/type_path as anything in shield_overlays) + for(var/type_path in shield_overlays) if(!ispath(type_path)) continue var/obj/effect/overlay/new_effect = new type_path() diff --git a/code/datums/components/riding/riding.dm b/code/datums/components/riding/riding.dm index 3ca466ca55a..f89557f0e2a 100644 --- a/code/datums/components/riding/riding.dm +++ b/code/datums/components/riding/riding.dm @@ -185,7 +185,8 @@ if(seat.buckle_lying && rider.body_position == LYING_DOWN) y_offset += (-1 * PIXEL_Y_OFFSET_LYING) - rider.add_offsets(RIDING_SOURCE, x_add = x_offset, y_add = y_offset, animate = animate) + // Rider uses pixel_z offsets as they're above the turf, not up north on the turf + rider.add_offsets(RIDING_SOURCE, x_add = x_offset, z_add = y_offset, animate = animate) rider.layer = layer #undef GET_X_OFFSET diff --git a/code/datums/components/uplink.dm b/code/datums/components/uplink.dm index 31294d586a8..4024c497425 100644 --- a/code/datums/components/uplink.dm +++ b/code/datums/components/uplink.dm @@ -210,7 +210,7 @@ )) var/list/remaining_stock = list() - for(var/item as anything in stock_list) + for(var/item in stock_list) remaining_stock[item] = stock_list[item] data["extra_purchasable"] = extra_purchasable data["extra_purchasable_stock"] = extra_purchasable_stock diff --git a/code/datums/datum.dm b/code/datums/datum.dm index dcf1772f54f..fe69f6d6cc3 100644 --- a/code/datums/datum.dm +++ b/code/datums/datum.dm @@ -55,9 +55,12 @@ */ var/list/cooldowns - /// List for handling persistent filters. var/list/filter_data + /// An accursed beast of a list that contains our filters. Why? Because var/list/filters on atoms/images isn't actually a list + /// but a snowflaked skinwalker pretending to be one, which doesn't support half the list procs/operations and the other half behaves weirdly + /// so we cut down on filter creation and appearance update costs by editing *this* list, and then assigning ours to it + var/list/filter_cache #ifdef REFERENCE_TRACKING /// When was this datum last touched by a reftracker? @@ -321,38 +324,67 @@ * * name - Filter name * * priority - Priority used when sorting the filter. * * params - Parameters of the filter. + * * update - If we should update our actual filters list, or wait until something updates it later */ -/datum/proc/add_filter(name, priority, list/params) - LAZYINITLIST(filter_data) - var/list/copied_parameters = params.Copy() - copied_parameters["priority"] = priority - filter_data[name] = copied_parameters - update_filters() - -///A version of add_filter that takes a list of filters to add rather than being individual, to limit calls to update_filters(). -/datum/proc/add_filters(list/list/filters) - LAZYINITLIST(filter_data) - for(var/list/individual_filter as anything in filters) - var/list/params = individual_filter["params"] - var/list/copied_parameters = params.Copy() - copied_parameters["priority"] = individual_filter["priority"] - filter_data[individual_filter["name"]] = copied_parameters - update_filters() - -/// Reapplies all the filters. -/datum/proc/update_filters() +/datum/proc/add_filter(name, priority, list/params, update = TRUE) ASSERT(isatom(src) || isimage(src)) var/atom/atom_cast = src // filters only work with images or atoms. - atom_cast.filters = null - sortTim(filter_data, GLOBAL_PROC_REF(cmp_filter_data_priority), TRUE) - for(var/filter_raw in filter_data) - var/list/data = filter_data[filter_raw] - var/list/arguments = data.Copy() + LAZYINITLIST(filter_data) + LAZYINITLIST(filter_cache) + var/list/copied_parameters = params.Copy() + copied_parameters["name"] = name + copied_parameters["priority"] = priority + for (var/list/filter_info as anything in filter_data) + if (filter_info["name"] == name) + filter_data -= filter_info + filter_cache -= name + break + + BINARY_INSERT_DEFINE(list(copied_parameters), filter_data, SORT_VAR_NO_TYPE, copied_parameters, SORT_PRIORITY_INDEX, COMPARE_KEY) + + for (var/index in 1 to length(filter_data)) + var/list/filter_info = filter_data[index] + if (filter_info["name"] != name) + continue + var/list/arguments = filter_info.Copy() arguments -= "priority" - atom_cast.filters += filter(arglist(arguments)) + filter_cache.Insert(index, filter(arglist(arguments))) + break + + if (update) + atom_cast.filters = filter_cache + +/// A version of add_filter that takes a list of filters to add rather than being individual, to limit appearance updates +/datum/proc/add_filters(list/list/filters, update = TRUE) + ASSERT(isatom(src) || isimage(src)) + var/atom/atom_cast = src // filters only work with images or atoms. + for (var/list/individual_filter as anything in filters) + add_filter(individual_filter["name"], individual_filter["priority"], individual_filter["params"], update = FALSE) + if (update) + atom_cast.filters = filter_cache + +/// Reapplies all the filters. If start_index is passed, only a portion of all filters are reapplied starting from said index +/datum/proc/update_filters(start_index = null) + ASSERT(isatom(src) || isimage(src)) + var/atom/atom_cast = src // filters only work with images or atoms. + if (start_index) + filter_cache.Cut(start_index) + else + atom_cast.filters = null + filter_cache.Cut() + + for (var/index in start_index || 1 to length(filter_data)) + var/list/filter_info = filter_data[index] + var/list/arguments = filter_info.Copy() + arguments -= "priority" + if (start_index) // See https://www.byond.com/forum/post/2980598 as to why we cannot just override the existing filter + atom_cast.filters -= filter_info["name"] // We're trapped in the belly of this horrible machine + filter_cache += filter(arglist(arguments)) // And the machine is bleeding to death + + atom_cast.filters = filter_cache UNSETEMPTY(filter_data) -/obj/item/update_filters() +/obj/item/update_filters(start_index = null) . = ..() update_item_action_buttons() @@ -362,17 +394,29 @@ * * name - Filter name * * new_params - New parameters of the filter * * overwrite - TRUE means we replace the parameter list completely. FALSE means we only replace the things on new_params. + * * update - If we should apply our filter cache to our actual filters */ -/datum/proc/modify_filter(name, list/new_params, overwrite = FALSE) - var/filter = get_filter(name) - if(!filter) +/datum/proc/modify_filter(name, list/new_params, overwrite = FALSE, update = TRUE) + ASSERT(isatom(src) || isimage(src)) + var/atom/atom_cast = src // filters only work with images or atoms. + for (var/index in 1 to length(filter_data)) + var/list/filter_info = filter_data[index] + if (filter_info["name"] != name) + continue + + if (overwrite) + filter_data[index] = new_params + else + for (var/thing in new_params) + filter_info[thing] = new_params[thing] + + var/list/arguments = filter_info.Copy() + arguments -= "priority" + filter_cache[index] = filter(arglist(arguments)) + + if (update) + atom_cast.filters = filter_cache return - if(overwrite) - filter_data[name] = new_params - else - for(var/thing in new_params) - filter_data[name][thing] = new_params[thing] - update_filters() /** Update a filter's parameter and animate this change. If the filter doesn't exist we won't do anything. * Basically a [datum/proc/modify_filter] call but with animations. Unmodified filter parameters are kept. @@ -386,7 +430,7 @@ */ /datum/proc/transition_filter(name, list/new_params, time, easing, loop) var/filter = get_filter(name) - if(!filter) + if (!filter) return // This can get injected by the filter procs, we want to support them so bye byeeeee new_params -= "type" @@ -399,75 +443,75 @@ * * duration - the time it takes to animate this step * * easing - the type of easing this step has */ -/proc/FilterChainStep(params, duration, easing) +/proc/filter_chain_step(params, duration, easing, flags) params -= "type" - return list("params"= params, "duration"=duration, "easing"=easing) + return list("params" = params, "duration" = duration, "easing" = easing, "flags" = flags) /** Similar to transition_filter(), except it creates an animation chain that moves between a list of states. * Arguments: * * name - Filter name * * num_loops - Amount of times the chain loops. INDEFINITE = Infinite - * * ... - a list of each link in the animation chain. Use FilterChainStep(params, duration, easing) for each link + * * ... - a list of each link in the animation chain. Use filter_chain_step(params, duration, easing) for each link * Example use: * * add_filter("blue_pulse", 1, color_matrix_filter(COLOR_WHITE)) * * transition_filter_chain(src, "blue_pulse", INDEFINITE,\ - * * FilterChainStep(color_matrix_filter(COLOR_BLUE), 10 SECONDS, CUBIC_EASING),\ - * * FilterChainStep(color_matrix_filter(COLOR_WHITE), 10 SECONDS, CUBIC_EASING)) + * * filter_chain_step(color_matrix_filter(COLOR_BLUE), 10 SECONDS, CUBIC_EASING),\ + * * filter_chain_step(color_matrix_filter(COLOR_WHITE), 10 SECONDS, CUBIC_EASING)) * The above code would edit a color_matrix_filter() to slowly turn blue over 10 seconds before returning back to white 10 seconds after, repeating this chain forever. */ /datum/proc/transition_filter_chain(name, num_loops, ...) var/list/transition_steps = args.Copy(3) var/filter = get_filter(name) - if(!filter) + if (!filter) return var/list/first_step = transition_steps[1] - animate(filter, first_step["params"], time = first_step["duration"], easing = first_step["easing"], loop = num_loops) - for(var/transition_step in 2 to length(transition_steps)) + animate(filter, first_step["params"], time = first_step["duration"], easing = first_step["easing"], flags = first_step["flags"], loop = num_loops) + for (var/transition_step in 2 to length(transition_steps)) var/list/this_step = transition_steps[transition_step] - animate(this_step["params"], time = this_step["duration"], easing = this_step["easing"]) - + animate(this_step["params"], time = this_step["duration"], easing = this_step["easing"], flags = this_step["flags"]) /// Updates the priority of the passed filter key /datum/proc/change_filter_priority(name, new_priority) - if(!filter_data || !filter_data[name]) - return + for (var/list/filter_info as anything in filter_data) + if (filter_info["name"] != name) + continue - filter_data[name]["priority"] = new_priority - update_filters() + remove_filter(name, update = FALSE) + add_filter(name, new_priority, filter_info) + return /// Returns the filter associated with the passed key /datum/proc/get_filter(name) ASSERT(isatom(src) || isimage(src)) - if(filter_data && filter_data[name]) - var/atom/atom_cast = src // filters only work with images or atoms. - return atom_cast.filters[filter_data.Find(name)] - -/// Returns the indice in filters of the given filter name. -/// If it is not found, returns null. -/datum/proc/get_filter_index(name) - return filter_data?.Find(name) + var/atom/atom_cast = src // filters only work with images or atoms. + return atom_cast.filters[name] /// Removes the passed filter, or multiple filters, if supplied with a list. -/datum/proc/remove_filter(name_or_names) +/datum/proc/remove_filter(name_or_names, update = TRUE) + ASSERT(isatom(src) || isimage(src)) if(!filter_data) return - + var/atom/atom_cast = src // filters only work with images or atoms. var/list/names = islist(name_or_names) ? name_or_names : list(name_or_names) - . = FALSE - for(var/name in names) - if(filter_data[name]) - filter_data -= name - . = TRUE - - if(.) - update_filters() + var/list/new_data = list() + var/list/new_cache = list() + for (var/index in 1 to length(filter_data)) + var/list/filter_info = filter_data[index] + if (!(filter_info["name"] in names)) + new_data += list(filter_info) + new_cache += filter_cache[index] + filter_data = new_data + filter_cache = new_cache + if (update) + atom_cast.filters = filter_cache return . /datum/proc/clear_filters() ASSERT(isatom(src) || isimage(src)) var/atom/atom_cast = src // filters only work with images or atoms. filter_data = null + filter_cache = null atom_cast.filters = null /// Calls qdel on itself, because signals dont allow callbacks diff --git a/code/datums/elements/art.dm b/code/datums/elements/art.dm index d5a642c23d0..0ec98410b1d 100644 --- a/code/datums/elements/art.dm +++ b/code/datums/elements/art.dm @@ -70,7 +70,7 @@ /datum/element/art/commoner/apply_moodlet(atom/source, mob/living/user, impress) var/msg var/list/haters = list() - for(var/hater_department_type as anything in list(/datum/job_department/security, /datum/job_department/command)) + for(var/hater_department_type in list(/datum/job_department/security, /datum/job_department/command)) var/datum/job_department/hater_department = SSjob.get_department_type(hater_department_type) for(var/datum/job/hater_job as anything in hater_department.department_jobs) haters += hater_job.title diff --git a/code/datums/elements/immerse.dm b/code/datums/elements/immerse.dm index 68def8feb54..3e28bbb7ea7 100644 --- a/code/datums/elements/immerse.dm +++ b/code/datums/elements/immerse.dm @@ -5,61 +5,31 @@ GLOBAL_LIST_INIT(immerse_ignored_movable, typecacheof(list( /obj/projectile, ))) -/** - * A visual element that makes movables entering the attached turfs look immersed into that turf. - * - * Abandon all hope, ye who read forth, for this immerse works on mind-numbing workarounds, - */ +/// A visual element that makes movables entering the attached turfs look immersed into that turf. +/// May the gods forgive me for the bullshit you're about to witness /datum/element/immerse element_flags = ELEMENT_DETACH_ON_HOST_DESTROY | ELEMENT_BESPOKE argument_hash_start_idx = 2 - ///An association list of turfs that have this element attached and their affected contents. - var/list/attached_turfs_and_movables = list() - ///A list of icons generated from a target and a mask, later used as appearances for the overlays. - var/static/list/generated_immerse_icons = list() - ///A list of instances of /atom/movable/immerse_overlay then used as visual overlays for the immersed movables. + /// An association list of turfs that have this element attached and their affected contents. + var/list/attached_turf_contents = list() + + /// A list of generated immersion masks based on object width, height and whever they're fully immersed underwater + var/list/immersion_masks = list() + /// An assoc list of instances of /atom/movable/immerse_mask used as abstract effect relays, because god is dead var/list/generated_visual_overlays = list() - ///An association list of movables as key and overlays as assoc. - var/list/immersed_movables + /// icon_state used as a mask by our turf + var/mask_icon = "immerse" + /// Alpha of the mask, to make the liquid partially transparent + var/alpha = 180 - var/icon - var/icon_state - var/mask_icon - var/color - var/alpha - -/datum/element/immerse/Attach(turf/target, icon, icon_state, mask_icon, color = "#777777", alpha = 180) +/datum/element/immerse/Attach(turf/target, mask_icon = "immerse", alpha = 180) . = ..() - if(!isturf(target) || !icon || !icon_state || !mask_icon) + if(!isturf(target) || !mask_icon) return ELEMENT_INCOMPATIBLE - src.icon = icon - src.icon_state = icon_state - src.color = color - src.alpha = alpha src.mask_icon = mask_icon - - /** - * Hello, you may be wondering why we're blending icons and not simply - * overlaying one mutable appearance with the blend multiply on another. - * Well, the latter option doesn't work as neatly when added - * to an atom with the KEEP_TOGETHER appearance flag, with the mask icon also - * showing on said atom, while we don't want it to. - * - * Also using KEEP_APART isn't an option, because unless it's drawn as one with - * its visual loation, the whole plane the atom belongs to will count as part of the - * mask of the final visual overlay since that's how the BLEND_INSET_OVERLAY blend mode works here. - * In layman terms, with KEEP_APART on, if a flying monkey gets nears an immersed - * human, the visual overlay will appear on the flying monkey even if it shouldn't. - */ - var/icon/immerse_icon = generated_immerse_icons["[icon]-[icon_state]-[mask_icon]"] - if(!immerse_icon) - immerse_icon = icon(icon, icon_state) - var/icon/sub_mask = icon('icons/effects/effects.dmi', mask_icon) - immerse_icon.Blend(sub_mask, ICON_MULTIPLY) - immerse_icon = fcopy_rsc(immerse_icon) - generated_immerse_icons["[icon]-[icon_state]-[mask_icon]"] = immerse_icon + src.alpha = alpha RegisterSignal(target, SIGNAL_ADDTRAIT(TRAIT_IMMERSE_STOPPED), PROC_REF(stop_immersion)) RegisterSignal(target, SIGNAL_REMOVETRAIT(TRAIT_IMMERSE_STOPPED), PROC_REF(start_immersion)) @@ -73,29 +43,30 @@ GLOBAL_LIST_INIT(immerse_ignored_movable, typecacheof(list( stop_immersion(source) return ..() -///Makes the element start affecting the turf and its contents. Called on Attach() or when TRAIT_IMMERSE_STOPPED is removed. + +/// Makes the element start affecting the turf and its contents. Called on Attach() or when TRAIT_IMMERSE_STOPPED is removed. /datum/element/immerse/proc/start_immersion(turf/source) SIGNAL_HANDLER RegisterSignals(source, list(COMSIG_ATOM_ABSTRACT_ENTERED, COMSIG_ATOM_AFTER_SUCCESSFUL_INITIALIZED_ON), PROC_REF(on_init_or_entered)) RegisterSignal(source, COMSIG_ATOM_ABSTRACT_EXITED, PROC_REF(on_atom_exited)) - attached_turfs_and_movables += source + attached_turf_contents += source for(var/atom/movable/movable as anything in source) if(!(movable.flags_1 & INITIALIZED_1) || movable.invisibility >= INVISIBILITY_OBSERVER) continue on_init_or_entered(source, movable) -///Stops the element from affecting on the turf and its contents. Called on Detach() or when TRAIT_IMMERSE_STOPPED is added. +/// Stops the element from affecting on the turf and its contents. Called on Detach() or when TRAIT_IMMERSE_STOPPED is added. /datum/element/immerse/proc/stop_immersion(turf/source) SIGNAL_HANDLER UnregisterSignal(source, list(COMSIG_ATOM_ABSTRACT_ENTERED, COMSIG_ATOM_AFTER_SUCCESSFUL_INITIALIZED_ON, COMSIG_ATOM_ABSTRACT_EXITED)) - for(var/atom/movable/movable as anything in attached_turfs_and_movables[source]) + for(var/atom/movable/movable as anything in attached_turf_contents[source]) remove_from_element(source, movable) - attached_turfs_and_movables -= source + attached_turf_contents -= source /** * If the movable is within the right layers and planes, not in the list of movable types to ignore, - * or already affected by the element for that matter, Signals will be registered and, - * unless the movable (or whatever it's buckled to) is flying, it'll appear as if immersed in that water. + * or already affected by the element for that matter, signals will be registered and, + * unless the movable is flying, it'll appear as if immersed in that water. */ /datum/element/immerse/proc/on_init_or_entered(turf/source, atom/movable/movable) SIGNAL_HANDLER @@ -103,123 +74,34 @@ GLOBAL_LIST_INIT(immerse_ignored_movable, typecacheof(list( return if(HAS_TRAIT(movable, TRAIT_IMMERSED) || HAS_TRAIT(movable, TRAIT_WALLMOUNTED)) return - if(!ISINRANGE(movable.plane, MUTATE_PLANE(FLOOR_PLANE, source), MUTATE_PLANE(GAME_PLANE, source))) + if(!ISINRANGE(PLANE_TO_TRUE(movable.plane), FLOOR_PLANE, GAME_PLANE)) return + + // First, floor plane objects use TOPDOWN_LAYER, second this check shouldn't apply to them anyway. var/layer_to_check = IS_TOPDOWN_PLANE(source.plane) ? TOPDOWN_ABOVE_WATER_LAYER : ABOVE_ALL_MOB_LAYER - //First, floor plane objects use TOPDOWN_LAYER, second this check shouldn't apply to them anyway. if(movable.layer >= layer_to_check) return if(is_type_in_typecache(movable, GLOB.immerse_ignored_movable)) return - var/atom/movable/buckled + var/atom/movable/buckled = null if(isliving(movable)) var/mob/living/living_mob = movable - RegisterSignal(living_mob, COMSIG_LIVING_SET_BUCKLED, PROC_REF(on_set_buckled)) buckled = living_mob.buckled + RegisterSignal(living_mob, COMSIG_LIVING_SET_BUCKLED, PROC_REF(on_set_buckled)) + RegisterSignal(living_mob, COMSIG_LIVING_UPDATE_OFFSETS, PROC_REF(on_update_offsets)) + RegisterSignal(movable, COMSIG_LIVING_POST_UPDATE_TRANSFORM, PROC_REF(on_update_transform)) - try_immerse(movable, buckled) + RegisterSignal(movable, COMSIG_ATOM_SPIN_ANIMATION, PROC_REF(on_spin_animation)) RegisterSignal(movable, COMSIG_QDELETING, PROC_REF(on_movable_qdel)) - LAZYADD(attached_turfs_and_movables[source], movable) + try_immerse(movable, buckled) + LAZYADD(attached_turf_contents[source], movable) ADD_TRAIT(movable, TRAIT_IMMERSED, ELEMENT_TRAIT(src)) /datum/element/immerse/proc/on_movable_qdel(atom/movable/source) SIGNAL_HANDLER remove_from_element(source.loc, source) -/** - * The main proc, which adds a visual overlay to the movable that has entered the turf to make it look immersed. - * It's kind of iffy but basically, we want the overlay to cover as much area as needed to - * avoid the movable's icon from spilling horizontally or below. - * Also, while these visual overlays are mainly cached movables, for certain movables, such as living mobs, - * we want them to have their own unique vis overlay with additional signals registered. - * This allows the vis overlay to look more or less unchanged while its owner is spinning or resting - * without otherwise affecting other movables with identical overlays. - */ -/datum/element/immerse/proc/add_immerse_overlay(atom/movable/movable) - var/list/icon_dimensions = get_icon_dimensions(movable.icon) - var/width = icon_dimensions["width"] || ICON_SIZE_X - var/height = icon_dimensions["height"] || ICON_SIZE_Y - - ///This determines if the overlay should cover the entire surface of the object or not - var/layer_to_check = IS_TOPDOWN_PLANE(movable.plane) ? TOPDOWN_WATER_LEVEL_LAYER : WATER_LEVEL_LAYER - var/is_below_water = (movable.layer < layer_to_check) ? "underwater-" : "" - - var/atom/movable/immerse_overlay/vis_overlay = generated_visual_overlays["[is_below_water][width]x[height]"] - - if(!vis_overlay) //create the overlay if not already done. - vis_overlay = generate_vis_overlay(width, height, is_below_water) - - - ADD_KEEP_TOGETHER(movable, ELEMENT_TRAIT(src)) - - /** - * Let's give an unique immerse visual only to those movables that would - * benefit from this the most, for the sake of a smidge of lightweightness. - */ - if(HAS_TRAIT(movable, TRAIT_UNIQUE_IMMERSE)) - var/atom/movable/immerse_overlay/original_vis_overlay = vis_overlay - vis_overlay = new(null) - vis_overlay.appearance = original_vis_overlay - vis_overlay.extra_width = original_vis_overlay.extra_width - vis_overlay.extra_height = original_vis_overlay.extra_height - vis_overlay.overlay_appearance = original_vis_overlay.overlay_appearance - SEND_SIGNAL(movable, COMSIG_MOVABLE_EDIT_UNIQUE_IMMERSE_OVERLAY, vis_overlay) - RegisterSignal(movable, COMSIG_ATOM_SPIN_ANIMATION, PROC_REF(on_spin_animation)) - RegisterSignal(movable, COMSIG_LIVING_POST_UPDATE_TRANSFORM, PROC_REF(on_update_transform)) - - movable.vis_contents |= vis_overlay - - LAZYSET(immersed_movables, movable, vis_overlay) - -///Initializes and caches a new visual overlay given parameters such as width, height and whether it should appear fully underwater. -/datum/element/immerse/proc/generate_vis_overlay(width, height, is_below_water) - - var/atom/movable/immerse_overlay/vis_overlay = new(null, src) - - /** - * vis contents spin around the center of the icon of their vis locs - * but since we want the appearance to stay where it should be, - * we have to counteract this one. - */ - var/extra_width = (width - ICON_SIZE_X) * 0.5 - var/extra_height = (height - ICON_SIZE_Y) * 0.5 - var/mutable_appearance/overlay_appearance = new() - var/icon/immerse_icon = generated_immerse_icons["[icon]-[icon_state]-[mask_icon]"] - var/last_i = width/ICON_SIZE_X - for(var/i in -1 to last_i) - var/mutable_appearance/underwater = mutable_appearance(icon, icon_state) - underwater.pixel_w = ICON_SIZE_X * i - extra_width - underwater.pixel_z = -ICON_SIZE_Y - extra_height - overlay_appearance.overlays += underwater - - var/mutable_appearance/water_level = is_below_water ? underwater : mutable_appearance(immerse_icon) - water_level.pixel_w = ICON_SIZE_X * i - extra_width - water_level.pixel_z = -extra_height - overlay_appearance.overlays += water_level - - - vis_overlay.color = color - vis_overlay.alpha = alpha - vis_overlay.overlays = list(overlay_appearance) - - vis_overlay.extra_width = extra_width - vis_overlay.extra_height = extra_height - vis_overlay.overlay_appearance = overlay_appearance - - generated_visual_overlays["[is_below_water][width]x[height]"] = vis_overlay - return vis_overlay - -///This proc removes the vis_overlay, the keep together trait and some signals from the movable. -/datum/element/immerse/proc/remove_immerse_overlay(atom/movable/movable) - var/atom/movable/immerse_overlay/vis_overlay = LAZYACCESS(immersed_movables, movable) - LAZYREMOVE(immersed_movables, movable) - REMOVE_KEEP_TOGETHER(movable, ELEMENT_TRAIT(src)) - movable.vis_contents -= vis_overlay - if(HAS_TRAIT(movable, TRAIT_UNIQUE_IMMERSE)) - UnregisterSignal(movable, list(COMSIG_ATOM_SPIN_ANIMATION, COMSIG_LIVING_POST_UPDATE_TRANSFORM, COMSIG_QDELETING)) - if(!QDELETED(vis_overlay)) - qdel(vis_overlay) /** * Called by init_or_entered() and on_set_buckled(). * This applies the overlay if neither the movable or whatever is buckled to (exclusive to living mobs) are flying @@ -229,29 +111,34 @@ GLOBAL_LIST_INIT(immerse_ignored_movable, typecacheof(list( var/atom/movable/to_check = buckled || movable if(!(to_check.movement_type & MOVETYPES_NOT_TOUCHING_GROUND) && !movable.throwing) add_immerse_overlay(movable) - if(!buckled) - RegisterSignal(movable, COMSIG_MOVETYPE_FLAG_ENABLED, PROC_REF(on_move_flag_enabled)) - RegisterSignal(movable, COMSIG_MOVETYPE_FLAG_DISABLED, PROC_REF(on_move_flag_disabled)) - RegisterSignal(movable, COMSIG_MOVABLE_POST_THROW, PROC_REF(on_throw)) - RegisterSignal(movable, COMSIG_MOVABLE_THROW_LANDED, PROC_REF(on_throw_landed)) + if(buckled) + return + RegisterSignal(movable, COMSIG_MOVETYPE_FLAG_ENABLED, PROC_REF(on_move_flag_enabled)) + RegisterSignal(movable, COMSIG_MOVETYPE_FLAG_DISABLED, PROC_REF(on_move_flag_disabled)) + RegisterSignal(movable, COMSIG_MOVABLE_POST_THROW, PROC_REF(on_throw)) + RegisterSignal(movable, COMSIG_MOVABLE_THROW_LANDED, PROC_REF(on_throw_landed)) -/** - * Called by on_set_buckled() and remove_from_element(). - * This removes the filter and signals from the movable unless it doesn't have them. - */ +/// Called by on_set_buckled() and remove_from_element(). +/// This removes the filter and signals from the movable unless it doesn't have them. /datum/element/immerse/proc/try_unimmerse(atom/movable/movable, atom/movable/buckled) var/atom/movable/to_check = buckled || movable if(!(to_check.movement_type & MOVETYPES_NOT_TOUCHING_GROUND) && !movable.throwing) remove_immerse_overlay(movable) - if(!buckled) - UnregisterSignal(movable, list(COMSIG_MOVETYPE_FLAG_ENABLED, COMSIG_MOVETYPE_FLAG_DISABLED, COMSIG_MOVABLE_POST_THROW, COMSIG_MOVABLE_THROW_LANDED)) + if(buckled) + return + UnregisterSignal(movable, list( + COMSIG_MOVETYPE_FLAG_ENABLED, + COMSIG_MOVETYPE_FLAG_DISABLED, + COMSIG_MOVABLE_POST_THROW, + COMSIG_MOVABLE_THROW_LANDED + )) /datum/element/immerse/proc/on_set_buckled(mob/living/source, atom/movable/new_buckled) SIGNAL_HANDLER try_unimmerse(source, source.buckled) try_immerse(source, new_buckled) -///Removes the overlay from mob and bucklees is flying. +/// Removes the overlay from mob and bucklees is flying. /datum/element/immerse/proc/on_move_flag_enabled(atom/movable/source, flag, old_movement_type) SIGNAL_HANDLER if(!(flag & MOVETYPES_NOT_TOUCHING_GROUND) || (old_movement_type & MOVETYPES_NOT_TOUCHING_GROUND) || source.throwing) @@ -260,7 +147,7 @@ GLOBAL_LIST_INIT(immerse_ignored_movable, typecacheof(list( for(var/mob/living/buckled_mob as anything in source.buckled_mobs) remove_immerse_overlay(buckled_mob) -///Works just like on_move_flag_enabled, except it only has to check that movable isn't flying +/// Works just like on_move_flag_enabled, except it only has to check that movable isn't flying /datum/element/immerse/proc/on_throw(atom/movable/source) SIGNAL_HANDLER if(source.movement_type & MOVETYPES_NOT_TOUCHING_GROUND) @@ -269,7 +156,7 @@ GLOBAL_LIST_INIT(immerse_ignored_movable, typecacheof(list( for(var/mob/living/buckled_mob as anything in source.buckled_mobs) remove_immerse_overlay(buckled_mob) -///Readds the overlay to the mob and bucklees if no longer flying. +/// Readds the overlay to the mob and bucklees if no longer flying. /datum/element/immerse/proc/on_move_flag_disabled(atom/movable/source, flag, old_movement_type) SIGNAL_HANDLER if(!(flag & MOVETYPES_NOT_TOUCHING_GROUND) || (source.movement_type & MOVETYPES_NOT_TOUCHING_GROUND) || source.throwing) @@ -278,7 +165,7 @@ GLOBAL_LIST_INIT(immerse_ignored_movable, typecacheof(list( for(var/mob/living/buckled_mob as anything in source.buckled_mobs) add_immerse_overlay(buckled_mob) -///Works just like on_move_flag_disabled, except it only has to check that movable isn't flying +/// Works just like on_move_flag_disabled, except it only has to check that movable isn't flying /datum/element/immerse/proc/on_throw_landed(atom/movable/source) SIGNAL_HANDLER if(source.movement_type & MOVETYPES_NOT_TOUCHING_GROUND) @@ -287,123 +174,131 @@ GLOBAL_LIST_INIT(immerse_ignored_movable, typecacheof(list( for(var/mob/living/buckled_mob as anything in source.buckled_mobs) add_immerse_overlay(buckled_mob) -/** - * Called when a movable exits the turf. If its new location is not in the list of turfs with this element, - * Remove the movable from the element. - */ +/// Called when a movable exits the turf. If its new location is not in the list of turfs with this element, +/// remove the movable from the element. /datum/element/immerse/proc/on_atom_exited(turf/source, atom/movable/exited, direction) SIGNAL_HANDLER - if(!(exited.loc in attached_turfs_and_movables)) + if(!attached_turf_contents[exited.loc]) remove_from_element(source, exited) - else - LAZYREMOVE(attached_turfs_and_movables[source], exited) - LAZYADD(attached_turfs_and_movables[exited.loc], exited) + return + LAZYREMOVE(attached_turf_contents[source], exited) + LAZYADD(attached_turf_contents[exited.loc], exited) -///Remove any signal, overlay, trait given to the movable and reference to it within the element. +//// Remove any signal, overlay, trait given to the movable and reference to it within the element. /datum/element/immerse/proc/remove_from_element(turf/source, atom/movable/movable) - var/atom/movable/buckled + var/atom/movable/buckled = null if(isliving(movable)) var/mob/living/living_mob = movable buckled = living_mob.buckled - try_unimmerse(movable, buckled) - LAZYREMOVE(attached_turfs_and_movables[source], movable) - UnregisterSignal(movable, list(COMSIG_LIVING_SET_BUCKLED, COMSIG_QDELETING)) + try_unimmerse(movable, buckled) + LAZYREMOVE(attached_turf_contents[source], movable) + UnregisterSignal(movable, list(COMSIG_LIVING_SET_BUCKLED, COMSIG_QDELETING, COMSIG_LIVING_UPDATE_OFFSETS, COMSIG_ATOM_SPIN_ANIMATION, COMSIG_LIVING_POST_UPDATE_TRANSFORM)) REMOVE_TRAIT(movable, TRAIT_IMMERSED, ELEMENT_TRAIT(src)) +/// Generate a mask filter mutable to use as render_source for the alpha filter based on provided width, height and immersion state +/datum/element/immerse/proc/generate_immerse_mask(width, height, is_below_water) + var/clean_height = height + width = ceil(width / ICON_SIZE_X) * ICON_SIZE_X + height = ceil(height / ICON_SIZE_Y) * ICON_SIZE_Y + + var/mask_key = "[width]-[height]-[is_below_water]" + var/mutable_appearance/target_mask = immersion_masks[mask_key] + if (target_mask) + return target_mask + + if (width == ICON_SIZE_X && height == ICON_SIZE_Y) + target_mask = mutable_appearance('icons/effects/effects.dmi', mask_icon, alpha = alpha) + immersion_masks[mask_key] = target_mask + return target_mask + + var/icon/column_icon = icon('icons/effects/effects.dmi', mask_icon) + var/y_tiles = 1 + if (height != ICON_SIZE_Y) + column_icon.Crop(1, 1, ICON_SIZE_X, ICON_SIZE_Y) // Use base icon and crop it out so animation frames respect dmi's delays + y_tiles = ceil((height / ICON_SIZE_Y - 1) / 2) + 1 + column_icon.Scale(ICON_SIZE_X, y_tiles * ICON_SIZE_Y) + var/icon/effect_icon = icon('icons/effects/effects.dmi', mask_icon) + var/icon/fill_icon = icon('icons/effects/alphacolors.dmi', "white") + for (var/y_tile in 1 to y_tiles - 1) + column_icon.Blend(fill_icon, ICON_OVERLAY, 1, 1 + (y_tile - 1) * ICON_SIZE_Y) + column_icon.Blend(effect_icon, ICON_OVERLAY, 1, 1 + (y_tiles - 1) * ICON_SIZE_Y) + + var/icon/immerse_icon = null + if (width == ICON_SIZE_X) + immerse_icon = column_icon + else + immerse_icon = icon('icons/effects/effects.dmi', mask_icon) // Use base icon and crop it out so animation frames respect dmi's delays + immerse_icon.Crop(1, 1, ICON_SIZE_X, ICON_SIZE_Y) + immerse_icon.Scale(ceil(width / ICON_SIZE_X) * ICON_SIZE_X, ceil(height / ICON_SIZE_Y) * ICON_SIZE_Y) + for (var/x_tile in 1 to ceil(width / ICON_SIZE_X)) + immerse_icon.Blend(column_icon, ICON_OVERLAY, 1 + (x_tile - 1) * ICON_SIZE_X, 1) + target_mask = mutable_appearance(immerse_icon) + target_mask.alpha = alpha + target_mask.pixel_y = -(y_tiles - 1) * ICON_SIZE_Y + floor((clean_height - ICON_SIZE_Y) / 2) + immersion_masks[mask_key] = target_mask + return target_mask + +/datum/element/immerse/proc/add_immerse_overlay(atom/movable/movable) + // This determines if the overlay should cover the entire surface of the object or not + var/layer_to_check = IS_TOPDOWN_PLANE(movable.plane) ? TOPDOWN_WATER_LEVEL_LAYER : WATER_LEVEL_LAYER + var/is_below_water = (movable.layer < layer_to_check) ? "underwater-" : "" + // Tall mobs still only get covered to their feet, unless they're offset down + var/mutable_appearance/immerse_mask = generate_immerse_mask(movable.get_cached_width(), max(ICON_SIZE_Y - movable.pixel_z, ICON_SIZE_Y), is_below_water) + var/atom/movable/immerse_mask/effect_relay = generated_visual_overlays[movable] + if (!effect_relay) + effect_relay = new(movable) + movable.vis_contents += effect_relay + generated_visual_overlays[movable] = effect_relay + var/mutable_appearance/mask_copy = new(immerse_mask) + effect_relay.appearance = mask_copy + effect_relay.render_target = "*immerse_[REF(movable)]" + SEND_SIGNAL(movable, COMSIG_MOVABLE_EDIT_UNIQUE_IMMERSE_OVERLAY, effect_relay) + // Should always render above any other filters that could be adding visuals + movable.add_filter("immerse_mask", INFINITY, alpha_mask_filter(y = -floor((movable.get_cached_height() - ICON_SIZE_Y) / 2) - movable.pixel_z, render_source = effect_relay.render_target, flags = MASK_INVERSE)) + +/datum/element/immerse/proc/remove_immerse_overlay(atom/movable/movable, deleting = TRUE) + movable.remove_filter("immerse_mask") + if (!deleting) + return + var/atom/movable/immerse_mask/mask = generated_visual_overlays[movable] + movable.vis_contents -= mask + generated_visual_overlays -= movable + QDEL_NULL(mask) + /// A band-aid to keep the (unique) visual overlay from scaling and rotating along with its owner. I'm sorry. /datum/element/immerse/proc/on_update_transform(mob/living/source, resize, new_lying_angle, is_opposite_angle) SIGNAL_HANDLER var/matrix/new_transform = matrix() - new_transform.Scale(1/source.current_size) + new_transform.Scale(1 / source.current_size) new_transform.Turn(-new_lying_angle) + var/atom/movable/immerse_mask/effect_relay = generated_visual_overlays[source] + var/mutable_appearance/relay_appearance = new(effect_relay.appearance) + relay_appearance.transform = new_transform + effect_relay.appearance = relay_appearance - var/atom/movable/immerse_overlay/vis_overlay = immersed_movables[source] - if(is_opposite_angle) - vis_overlay.transform = new_transform - vis_overlay.adjust_living_overlay_offset(source) - return - - /** - * Here, we temporarily switch from the offset of the mutable appearance to one for movable used as visual overlay. - * Why? While visual overlays can be animated, their fixed point stays at the center of the icon of the atom - * they're attached to and not theirs, which can make manipulating the transform var a pain, but because - * we cannot do that with normal overlay or filters (reliably), we have to bend a knee and try to compensate it. - */ - vis_overlay.overlays = list(vis_overlay.overlay_appearance) - - /// Oh, yeah, didn't I mention turning a visual overlay affects its pixel x/y/w/z too? Yeah, it sucks. - var/new_x = vis_overlay.extra_width - var/new_y = vis_overlay.extra_height - var/old_div = source.current_size / resize - var/offset_lying = source.rotate_on_lying ? PIXEL_Y_OFFSET_LYING : source.get_transform_translation_size(old_div) - switch(source.lying_prev) - if(270) - vis_overlay.pixel_x += -offset_lying / old_div - if(90) - vis_overlay.pixel_x += offset_lying / old_div - if(0) - vis_overlay.pixel_y += -source.get_transform_translation_size(old_div) / old_div - - switch(new_lying_angle) - if(270) - new_x += -offset_lying / source.current_size - if(90) - new_x += offset_lying / source.current_size - if(0) - new_y += -source.get_transform_translation_size(old_div) / old_div - - animate(vis_overlay, transform = new_transform, pixel_x = new_x, pixel_y = new_y, time = UPDATE_TRANSFORM_ANIMATION_TIME, easing = (EASE_IN|EASE_OUT)) - addtimer(CALLBACK(vis_overlay, TYPE_PROC_REF(/atom/movable/immerse_overlay, adjust_living_overlay_offset), source), UPDATE_TRANSFORM_ANIMATION_TIME) - -///Spin the overlay in the opposite direction so it doesn't look like it's spinning at all. +/// Spin the overlay in the opposite direction so it doesn't look like it's spinning at all. /datum/element/immerse/proc/on_spin_animation(atom/source, speed, loops, segments, segment) SIGNAL_HANDLER - var/atom/movable/immerse_overlay/vis_overlay = immersed_movables[source] - vis_overlay.do_spin_animation(speed, loops, segments, -segment) + var/atom/movable/immerse_mask/immerse_mask = generated_visual_overlays[source] + immerse_mask.do_spin_animation(speed, loops, segments, -segment) -///We need to make sure to remove hard refs from the element when deleted. -/datum/element/immerse/proc/clear_overlay_refs(atom/movable/immerse_overlay/source) - //Assume that every vis loc is also in the immersed_movables list - for(var/atom/movable/vis_loc as anything in source.vis_locs) - remove_from_element(vis_loc.loc, vis_loc) - LAZYREMOVE(generated_visual_overlays, source) - source.overlay_appearance = null +/datum/element/immerse/proc/on_update_offsets(mob/living/source, new_x, new_y, new_w, new_z, animate) + SIGNAL_HANDLER + var/old_height = ceil(max(ICON_SIZE_Y - source.pixel_z, ICON_SIZE_Y) / ICON_SIZE_Y) + var/new_height = ceil(max(ICON_SIZE_Y - new_z, ICON_SIZE_Y) / ICON_SIZE_Y) + if (old_height != new_height) + remove_immerse_overlay(source, FALSE) + add_immerse_overlay(source) -///The not-quite-perfect movable used by the immerse element for its nefarious deeds. -/atom/movable/immerse_overlay - appearance_flags = RESET_TRANSFORM|RESET_COLOR|RESET_ALPHA|KEEP_TOGETHER - vis_flags = VIS_INHERIT_PLANE|VIS_INHERIT_ID - mouse_opacity = MOUSE_OPACITY_TRANSPARENT - blend_mode = BLEND_INSET_OVERLAY - layer = WATER_VISUAL_OVERLAY_LAYER - plane = FLOAT_PLANE - /** - * The actual overlay used to make the mob look like it's half-covered in water. - * - * For visual overlays, pixel y/x/w/z are amplified by the a, b, d, e variables - * of the transform matrix of the movable they're attached to. - * For example, if a mob is twice its normal size (a = 2, e = 2), - * offsetting the movable used as visual overlay by 4 pixels to the right will result - * in the visual overlay moving 8 pixels to the right. - * - * This however, doesn't extend to the overlays of our visual overlay. which is why there's - * a mutable appearance variable that we use for those pixel offsets that really shouldn't be affected - * by the transform of our vis loc(s) in the first place. - */ - var/mutable_appearance/overlay_appearance - ///The base pixel x offset of this movable - var/extra_width = 0 - ///The base pixel y offset of this movable - var/extra_height = 0 + if (source.pixel_z == new_z) + return -/atom/movable/immerse_overlay/Initialize(mapload, datum/element/immerse/element) - . = ..() - verbs.Cut() //"Cargo cultttttt" or something. Either way, they're better off without verbs. - element?.RegisterSignal(src, COMSIG_QDELETING, TYPE_PROC_REF(/datum/element/immerse, clear_overlay_refs)) + if (animate) + source.transition_filter("immerse_mask", list("y" = -floor((source.get_cached_height() - ICON_SIZE_Y) / 2) - new_z), time = UPDATE_TRANSFORM_ANIMATION_TIME) + else + source.modify_filter("immerse_mask", list("y" = -floor((source.get_cached_height() - ICON_SIZE_Y) / 2) - new_z)) -///Called by COMSIG_MOVABLE_EDIT_UNIQUE_IMMERSE_OVERLAY for living mobs and a few procs from the immerse element. -/atom/movable/immerse_overlay/proc/adjust_living_overlay_offset(mob/living/source) - pixel_x = extra_width - pixel_y = extra_height - overlays = list(overlay_appearance) +/atom/movable/immerse_mask + appearance_flags = RESET_TRANSFORM|RESET_COLOR|RESET_ALPHA|KEEP_APART + vis_flags = VIS_HIDE diff --git a/code/datums/mutations/_mutations.dm b/code/datums/mutations/_mutations.dm index 1773cfd2d92..c06329fad20 100644 --- a/code/datums/mutations/_mutations.dm +++ b/code/datums/mutations/_mutations.dm @@ -19,10 +19,7 @@ #define POSITIVE_INSTABILITY_MAJOR 35 /datum/mutation - var/name - -/datum/mutation - name = "mutation" + var/name = "mutation" /// Description of the mutation var/desc = "A mutation." /// Is this mutation currently locked? diff --git a/code/datums/mutations/hulk.dm b/code/datums/mutations/hulk.dm index 9b5c9bf50d0..6626d45dbf5 100644 --- a/code/datums/mutations/hulk.dm +++ b/code/datums/mutations/hulk.dm @@ -13,7 +13,8 @@ var/scream_delay = 50 var/last_scream = 0 var/bodypart_color = COLOR_DARK_LIME - /// List of traits to add/remove when someone gets this mutation. + /// Determines whether or not our version of hulk breaks their arm when destroying walls. + var/no_recoil = TRUE mutation_traits = list( TRAIT_CHUNKYFINGERS, TRAIT_HULK, @@ -61,30 +62,6 @@ /datum/mutation/hulk/proc/scream_attack(mob/living/carbon/human/source) source.say("WAAAAAAAAAAAAAAGH!", forced="hulk") -/** - *Checks damage of a hulk's arm and applies bone wounds as necessary. - * - *Called by specific atoms being attacked, such as walls. If an atom - *does not call this proc, than punching that atom will not cause - *arm breaking (even if the atom deals recoil damage to hulks). - *Arguments: - *arg1 is the arm to evaluate damage of and possibly break. - */ -/datum/mutation/hulk/proc/break_an_arm(obj/item/bodypart/arm) - var/severity - switch(arm.brute_dam) - if(45 to 50) - severity = WOUND_SEVERITY_CRITICAL - if(41 to 45) - severity = WOUND_SEVERITY_SEVERE - if(35 to 41) - severity = WOUND_SEVERITY_MODERATE - - if (isnull(severity)) - return - - owner.cause_wound_of_type_and_severity(WOUND_BLUNT, arm, severity, wound_source = "hulk smashing") - /datum/mutation/hulk/on_life(seconds_per_tick, times_fired) if(owner.health < owner.crit_threshold) on_losing(owner) @@ -264,7 +241,7 @@ health_req = 0 instability = 0 scream_delay = 2.5 SECONDS // halved to be more annoying (spell doesn't last long anyways) - /// List of traits to add/remove when someone gets this mutation. + no_recoil = FALSE mutation_traits = list( TRAIT_HULK, TRAIT_PUSHIMMUNE, @@ -275,7 +252,7 @@ name = "Hulk (Super)" health_req = 0 instability = 0 - /// List of traits to add/remove when someone gets this mutation. + no_recoil = FALSE mutation_traits = list( TRAIT_CHUNKYFINGERS, TRAIT_HULK, diff --git a/code/datums/records/manifest.dm b/code/datums/records/manifest.dm index 76a05d9814a..27221f954cc 100644 --- a/code/datums/records/manifest.dm +++ b/code/datums/records/manifest.dm @@ -45,7 +45,7 @@ GLOBAL_DATUM_INIT(manifest, /datum/manifest, new) "trim" = trim, ) continue - for(var/department_type as anything in job.departments_list) + for(var/department_type in job.departments_list) //Jobs under multiple departments should only be displayed if this is their first department or the command department if(job.departments_list[1] != department_type && !(job.departments_bitflags & DEPARTMENT_BITFLAG_COMMAND)) continue @@ -238,4 +238,3 @@ GLOBAL_DATUM_INIT(manifest, /datum/manifest, new) "manifest" = get_manifest(), "positions" = positions ) - diff --git a/code/datums/status_effects/debuffs/speech_debuffs.dm b/code/datums/status_effects/debuffs/speech_debuffs.dm index 1ba85ebe72f..adb82b99023 100644 --- a/code/datums/status_effects/debuffs/speech_debuffs.dm +++ b/code/datums/status_effects/debuffs/speech_debuffs.dm @@ -33,11 +33,11 @@ return var/final_phrase = "" - var/original_char = "" - - for(var/i = 1, i <= length(phrase), i += length(original_char)) - original_char = phrase[i] - final_phrase += apply_speech(original_char) + var/list/words = splittext(phrase, " ") + var/list/new_words = list() + for(var/i in 1 to length(words)) + new_words += apply_speech(words[i], i) + final_phrase = jointext(new_words, " ") if(final_phrase == phrase) return // No change was done, whatever @@ -51,13 +51,13 @@ /** * Applies the speech effects on the past character, changing - * the original_char into the modified_char. + * the original_word into some modified_word * - * Return the modified_char to be reapplied to the message. + * Return the newly modified word */ -/datum/status_effect/speech/proc/apply_speech(original_char) +/datum/status_effect/speech/proc/apply_speech(original_word, index) stack_trace("[type] didn't implement apply_speech.") - return original_char + return original_word /datum/status_effect/speech/stutter id = "stutter" @@ -65,33 +65,41 @@ tts_filter = "tremolo=f=10:d=0.8,rubberband=tempo=0.5" /// The probability of adding a stutter to any character - var/stutter_prob = 80 + var/stutter_prob = 75 /// The chance of a four character stutter var/four_char_chance = 10 /// The chance of a three character stutter var/three_char_chance = 20 /// The chance of a two character stutter - var/two_char_chance = 95 - /// Regex of characters we won't apply a stutter to - var/static/regex/no_stutter + var/two_char_chance = 90 + /// Regex to apply generically to stuttered words + /// * 1st capture group is any leading invalid characters (can be empty) + /// * 2nd capture group is either a digraph (th, qu, ch) or a consonant + /// * 3rd capture group is the rest of the word (can be empty) + VAR_FINAL/static/regex/stutter_regex /datum/status_effect/speech/stutter/on_creation(mob/living/new_owner, ...) - . = ..() - if(!.) - return - if(!no_stutter) - no_stutter = regex(@@[aeiouAEIOU ""''()[\]{}.!?,:;_`~-]@) + stutter_regex ||= regex(@@^([\s"'()[\]{}.!?,:;_`~-]*\b)([^aeoiuh\d]h|qu|[^\d])(.*)@, "i") + return ..() -/datum/status_effect/speech/stutter/apply_speech(original_char) - if(prob(stutter_prob) && !no_stutter.Find(original_char)) - if(prob(four_char_chance)) - return "[original_char]-[original_char]-[original_char]-[original_char]" - if(prob(three_char_chance)) - return "[original_char]-[original_char]-[original_char]" - if(prob(two_char_chance)) - return "[original_char]-[original_char]" +/datum/status_effect/speech/stutter/apply_speech(original_word, index) + if(!prob(stutter_prob)) + return original_word - return original_char + if(stutter_regex.Find(original_word)) + return "[stutter_regex.group[1]][stutter_char(stutter_regex.group[2])][stutter_regex.group[3]]" + + return original_word // i give up + +/datum/status_effect/speech/stutter/proc/stutter_char(some_char) + if(prob(four_char_chance)) + return "[some_char]-[some_char]-[some_char]-[some_char]" + if(prob(three_char_chance)) + return "[some_char]-[some_char]-[some_char]" + if(prob(two_char_chance)) + return "[some_char]-[some_char]" + + return some_char /datum/status_effect/speech/stutter/anxiety id = "anxiety_stutter" @@ -133,7 +141,7 @@ if(prob(capitalize_prob)) var/exclamation = pick("!", "!!", "!!!") message = uppertext(message) - message += "[apply_speech(exclamation, exclamation)]" + message += "[stutter_char(exclamation)]" message_args[TREAT_MESSAGE_ARG] = message @@ -170,6 +178,12 @@ /// Strings that are appended to a character - populated in on_creation var/list/string_additions + /// Regex for characters we won't apply any slurring to + var/static/regex/no_slur + + /// If the last character we processed was a replacement, don't do another replacement right after it + VAR_PRIVATE/replacement_dupe_check = FALSE + /datum/status_effect/speech/slurring/on_creation(mob/living/new_owner, duration = 10 SECONDS) . = ..() if(!.) @@ -184,46 +198,57 @@ string_replacements = speech_changes["string_replacements"] string_additions = speech_changes["string_additions"] -/datum/status_effect/speech/slurring/apply_speech(original_char) + no_slur ||= regex(@@[ "'()[\]{}.!?,:;_`~-]@) +/datum/status_effect/speech/slurring/apply_speech(original_word, index) + var/original_char = "" + var/modified_word = "" + for(var/i = 1, i <= length(original_word), i += length(original_char)) + original_char = original_word[i] + modified_word += slur_character(original_char, i) + return modified_word + +/datum/status_effect/speech/slurring/proc/slur_character(original_char, index) var/modified_char = original_char + var/allow_slurring = index != 1 && !no_slur.Find(modified_char) var/lower_char = LOWER_TEXT(modified_char) if(prob(common_prob) && (lower_char in common_replacements)) var/to_replace = common_replacements[lower_char] - if(islist(to_replace)) - modified_char = pick(to_replace) - else - modified_char = to_replace + modified_char = islist(to_replace) ? pick(to_replace) : to_replace + replacement_dupe_check = FALSE - if(prob(uncommon_prob) && (modified_char in uncommon_replacements)) + else if(prob(uncommon_prob) && (modified_char in uncommon_replacements)) var/to_replace = uncommon_replacements[modified_char] - if(islist(to_replace)) - modified_char = pick(to_replace) - else - modified_char = to_replace + modified_char = islist(to_replace) ? pick(to_replace) : to_replace + replacement_dupe_check = FALSE - if(prob(replacement_prob)) - var/replacements_len = length(string_replacements) - var/additions_len = length(string_additions) - if(replacements_len && additions_len) - // Calculate the probability of grabbing a replacement vs an addition - var/weight = (replacements_len + additions_len) / replacements_len * 100 - if(prob(weight)) + else if(allow_slurring) // Don't do replacements on the first character, or punctuation + if(!replacement_dupe_check && prob(replacement_prob)) + var/replacements_len = length(string_replacements) + var/additions_len = length(string_additions) + if(replacements_len && additions_len) + // Calculate the probability of grabbing a replacement vs an addition + var/weight = (replacements_len + additions_len) / replacements_len * 100 + if(prob(weight)) + modified_char = pick(string_replacements) + else + modified_char += pick(string_additions) + + else if(replacements_len) modified_char = pick(string_replacements) - else + + else if(additions_len) modified_char += pick(string_additions) + replacement_dupe_check = TRUE - else if(replacements_len) - modified_char = pick(string_replacements) + else if(prob(doubletext_prob)) + modified_char += "[modified_char][prob(50) ? "" : modified_char]" + replacement_dupe_check = FALSE - else if(additions_len) - modified_char += pick(string_additions) - - if(prob(doubletext_prob)) - if(prob(50)) - modified_char += "[modified_char]" - else - modified_char += "[modified_char][modified_char]" + else + // If we don't allow replacements we don't want the next character to be a replacement either + // This makes some more coherent speech by disallowing structures like "Y'''e" + replacement_dupe_check = TRUE return modified_char @@ -231,8 +256,8 @@ id = "generic_slurring" common_prob = 33 uncommon_prob = 0 - replacement_prob = 5 - doubletext_prob = 10 + replacement_prob = 24 + doubletext_prob = 40 text_modification_file = "slurring_drunk_text.json" /datum/status_effect/speech/slurring/drunk @@ -248,13 +273,13 @@ var/current_drunkness = owner.get_drunk_amount() // These numbers are arbitarily picked // Common replacements start at about 20, and maxes out at about 85 - common_prob = clamp((current_drunkness * 0.8) - 16, 0, 50) + common_prob = clamp((current_drunkness * 0.8) - 16, 4, 50) // Uncommon replacements (burping) start at 50 and max out at 110 (when you are dying) - uncommon_prob = clamp((current_drunkness * 0.2) - 10, 0, 12) + uncommon_prob = clamp((current_drunkness * 0.3) - 10, 0, 12) // Replacements start at 20 and max out at about 60 - replacement_prob = clamp((current_drunkness * 0.4) - 8, 0, 12) + replacement_prob = clamp((current_drunkness * 0.6) - 8, 0, 12) // Double texting start out at about 25 and max out at about 60 - doubletext_prob = clamp((current_drunkness * 0.5) - 12, 0, 20) + doubletext_prob = clamp((current_drunkness * 0.8) - 8, 2, 50) return ..() /datum/status_effect/speech/slurring/cult diff --git a/code/datums/storage/subtypes/belts.dm b/code/datums/storage/subtypes/belts.dm index f920161d0a4..156f6adb151 100644 --- a/code/datums/storage/subtypes/belts.dm +++ b/code/datums/storage/subtypes/belts.dm @@ -340,7 +340,7 @@ /datum/storage/unfathomable_curio/New(atom/parent, max_slots, max_specific_storage, max_total_storage, rustle_sound, remove_rustle_sound) . = ..() set_holdable(list( - /obj/item/ammo_box/strilka310/lionhunter, + /obj/item/ammo_box/speedloader/strilka310/lionhunter, /obj/item/heretic_labyrinth_handbook, /obj/item/bodypart, // Bodyparts are often used in rituals. /obj/item/clothing/neck/eldritch_amulet, diff --git a/code/datums/storage/subtypes/holsters.dm b/code/datums/storage/subtypes/holsters.dm index b3a3189f9ad..e82007fea71 100644 --- a/code/datums/storage/subtypes/holsters.dm +++ b/code/datums/storage/subtypes/holsters.dm @@ -55,9 +55,7 @@ /obj/item/ammo_box/magazine/m45, /obj/item/ammo_box/magazine/m50, /obj/item/gun/ballistic/revolver, - /obj/item/ammo_box/c38, // Revolver speedloaders. - /obj/item/ammo_box/a357, - /obj/item/ammo_box/strilka310, + /obj/item/ammo_box/speedloader, // Speedloaders, which includes stripper clips on a technicality. /obj/item/ammo_box/magazine/toy/pistol, /obj/item/gun/energy/e_gun/mini, /obj/item/gun/energy/disabler, @@ -84,9 +82,7 @@ /obj/item/ammo_box/magazine/m45, /obj/item/ammo_box/magazine/m50, /obj/item/gun/ballistic/revolver, - /obj/item/ammo_box/c38, - /obj/item/ammo_box/a357, - /obj/item/ammo_box/strilka310, + /obj/item/ammo_box/speedloader, /obj/item/ammo_box/magazine/toy/pistol, /obj/item/gun/energy/recharge/ebow, /obj/item/gun/energy/e_gun/mini, @@ -107,9 +103,7 @@ holdables = list( /obj/item/gun, // ALL guns. /obj/item/ammo_box/magazine, // ALL magazines. - /obj/item/ammo_box/c38, //There isn't a speedloader parent type, so I just put these three here by hand. - /obj/item/ammo_box/a357, //I didn't want to just use /obj/item/ammo_box, because then this could hold huge boxes of ammo. - /obj/item/ammo_box/strilka310, + /obj/item/ammo_box/speedloader, // ALL speedloaders (there's 3 types at time of writing so it's probably fine) /obj/item/ammo_casing, // For shotgun shells, rockets, launcher grenades, and a few other things. /obj/item/grenade, // All regular grenades, the big grenade launcher fires these. ) diff --git a/code/datums/storage/subtypes/pockets.dm b/code/datums/storage/subtypes/pockets.dm index ed8b0997a0f..69273074807 100644 --- a/code/datums/storage/subtypes/pockets.dm +++ b/code/datums/storage/subtypes/pockets.dm @@ -216,7 +216,7 @@ /obj/item/reagent_containers/cup/glass/bottle/vodka, /obj/item/reagent_containers/cup/glass/bottle/molotov, /obj/item/reagent_containers/cup/glass/drinkingglass, - /obj/item/ammo_box/strilka310 + /obj/item/ammo_box/speedloader/strilka310 )) ///Void cloak pocket @@ -234,7 +234,7 @@ . = ..() set_holdable( can_hold_list = list( - /obj/item/ammo_box/strilka310/lionhunter, + /obj/item/ammo_box/speedloader/strilka310/lionhunter, /obj/item/bodypart, // Bodyparts are often used in rituals. They're also often normal sized, so you can only fit one. /obj/item/clothing/neck/eldritch_amulet, /obj/item/clothing/neck/heretic_focus, diff --git a/code/datums/wounds/_wound_static_data.dm b/code/datums/wounds/_wound_static_data.dm index adc0923ee4f..cd8d2a78caf 100644 --- a/code/datums/wounds/_wound_static_data.dm +++ b/code/datums/wounds/_wound_static_data.dm @@ -158,7 +158,7 @@ if (!length(suggested_wounding_types)) return FALSE - for (var/iter_wounding_type as anything in suggested_wounding_types) + for (var/iter_wounding_type in suggested_wounding_types) if (!(iter_wounding_type in required_wounding_types)) if (match_all_wounding_types) return FALSE diff --git a/code/datums/wounds/_wounds.dm b/code/datums/wounds/_wounds.dm index 2985a817184..7d95576103a 100644 --- a/code/datums/wounds/_wounds.dm +++ b/code/datums/wounds/_wounds.dm @@ -725,7 +725,7 @@ // fleshy burns will look for flesh then bone // dislocations will look for flesh, then bone, then metal var/file = default_scar_file - for (var/biotype as anything in pregen_data.scar_priorities) + for (var/biotype in pregen_data.scar_priorities) if (scarred_limb.biological_state & text2num(biotype)) file = GLOB.biotypes_to_scar_file[biotype] break diff --git a/code/game/atom/atom_examine.dm b/code/game/atom/atom_examine.dm index f4bd109240a..6b1a6725667 100644 --- a/code/game/atom/atom_examine.dm +++ b/code/game/atom/atom_examine.dm @@ -162,7 +162,12 @@ /atom/proc/get_name_chaser(mob/user, list/name_chaser = list()) return name_chaser -/// Used by mobs to determine the name for someone wearing a mask, or with a disfigured or missing face. By default just returns the atom's name. add_id_name will control whether or not we append "(as [id_name])". -/// force_real_name will always return real_name and add (as face_name/id_name) if it doesn't match their appearance -/atom/proc/get_visible_name(add_id_name, force_real_name) +/** + * Used by mobs to determine the name for someone wearing a mask, or with a disfigured or missing face. + * By default just returns the atom's name. + * + * * add_id_name - If TRUE, ID information such as honorifics or name (if mismatched) are appended + * * force_real_name - If TRUE, will always return real_name and add (as face_name/id_name) if it doesn't match their appearance + */ +/atom/proc/get_visible_name(add_id_name = TRUE, force_real_name = FALSE) return name diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm index c5f0fe8bcc0..c97d4d4fbe1 100644 --- a/code/game/machinery/_machinery.dm +++ b/code/game/machinery/_machinery.dm @@ -1056,7 +1056,7 @@ var/list/part_list = replacer_tool.get_sorted_parts(ignore_stacks = TRUE) if(!part_list.len) return FALSE - for(var/primary_part_base as anything in component_parts) + for(var/primary_part_base in component_parts) //we exchanged all we could time to bail if(!part_list.len) break @@ -1156,7 +1156,7 @@ // we infer the required stack stuff inside the machine from the circuitboards requested components if(istype(component_ref, /obj/item/circuitboard/machine)) var/obj/item/circuitboard/machine/board = component_ref - for(var/component as anything in board.req_components) + for(var/component in board.req_components) if(!ispath(component, /obj/item/stack)) continue part_count[component] = board.req_components[component] diff --git a/code/game/machinery/computer/arcade/battle.dm b/code/game/machinery/computer/arcade/battle.dm index 9cbec4430fb..3c6d0242615 100644 --- a/code/game/machinery/computer/arcade/battle.dm +++ b/code/game/machinery/computer/arcade/battle.dm @@ -391,7 +391,7 @@ data["enemy_mp"] = enemy_mp data["equipped_gear"] = list() - for(var/gear_slot as anything in equipped_gear) + for(var/gear_slot in equipped_gear) var/datum/battle_arcade_gear/user_gear = equipped_gear[gear_slot] if(!istype(user_gear)) continue diff --git a/code/game/machinery/doors/passworddoor.dm b/code/game/machinery/doors/passworddoor.dm index cb20b6a44f0..3a7225419b5 100644 --- a/code/game/machinery/doors/passworddoor.dm +++ b/code/game/machinery/doors/passworddoor.dm @@ -44,7 +44,7 @@ /obj/machinery/door/password/get_save_vars() return ..() + NAMEOF(src, password) -/obj/machinery/door/password/Hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), message_range) +/obj/machinery/door/password/Hear(atom/movable/speaker, message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), message_range) . = ..() if(!density || !voice_activated || radio_freq) return diff --git a/code/game/machinery/doors/poddoor.dm b/code/game/machinery/doors/poddoor.dm index 8a78d49a2cd..7b85ec650e8 100644 --- a/code/game/machinery/doors/poddoor.dm +++ b/code/game/machinery/doors/poddoor.dm @@ -19,16 +19,22 @@ /// The current deconstruction step var/deconstruction = BLASTDOOR_FINISHED /// The door's ID (used for buttons, etc to control the door) - var/id = 1 + var/id = null /// The sound that plays when the door opens/closes var/animation_sound = 'sound/machines/blastdoor.ogg' var/show_nav_computer_icon = TRUE + ///The mob who crafted this blastdoor + var/datum/weakref/owner /obj/machinery/door/poddoor/Initialize(mapload) . = ..() if(show_nav_computer_icon) AddElement(/datum/element/nav_computer_icon, 'icons/effects/nav_computer_indicators.dmi', "airlock", TRUE) +/obj/machinery/door/poddoor/Destroy() + owner = null + return ..() + /datum/armor/door_poddoor melee = 50 bullet = 100 @@ -46,7 +52,7 @@ if(panel_open) if(deconstruction == BLASTDOOR_FINISHED) . += span_notice("The maintenance panel is opened and the electronics could be pried out.") - . += span_notice("\The [src] could be calibrated to a blast door controller ID with a multitool or a blast door controller.") + . += span_notice("\The [src] could be calibrated to a blast door controller ID with a blast door controller.") else if(deconstruction == BLASTDOOR_NEEDS_ELECTRONICS) . += span_notice("The electronics are missing and there are some wires sticking out.") else if(deconstruction == BLASTDOOR_NEEDS_WIRES) @@ -71,9 +77,6 @@ if(TOOL_SCREWDRIVER) context[SCREENTIP_CONTEXT_LMB] = "Open panel" return CONTEXTUAL_SCREENTIP_SET - if(TOOL_MULTITOOL) - context[SCREENTIP_CONTEXT_LMB] = "Calibrate ID" - return CONTEXTUAL_SCREENTIP_SET if(TOOL_CROWBAR) context[SCREENTIP_CONTEXT_LMB] = "Remove electronics" return CONTEXTUAL_SCREENTIP_SET @@ -84,6 +87,10 @@ context[SCREENTIP_CONTEXT_LMB] = "Disassemble" return CONTEXTUAL_SCREENTIP_SET +/obj/machinery/door/poddoor/on_craft_completion(list/components, datum/crafting_recipe/current_recipe, atom/crafter) + . = ..() + owner = WEAKREF(crafter) + /obj/machinery/door/poddoor/item_interaction(mob/living/user, obj/item/tool, list/modifiers) if(deconstruction == BLASTDOOR_NEEDS_WIRES && istype(tool, /obj/item/stack/cable_coil)) var/obj/item/stack/cable_coil/coil = tool @@ -117,8 +124,22 @@ balloon_alert(user, "open the panel first!") return ITEM_INTERACT_BLOCKING var/obj/item/assembly/control/controller_item = tool + if(controller_item.id == -1) + //collect existing ids + var/list/door_ids = list() + for(var/obj/machinery/door/poddoor/M as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/door/poddoor)) + if(!M.id || (M.id in door_ids)) + continue + door_ids += "[M.id]" + + //create new id + var/new_id = 0 + while("[new_id]" in door_ids) + new_id += 1 + controller_item.id = "[new_id]" id = controller_item.id - balloon_alert(user, "id changed") + owner = WEAKREF(user) + balloon_alert(user, "id changed to [id]") return ITEM_INTERACT_SUCCESS return NONE @@ -131,24 +152,6 @@ else if (default_deconstruction_screwdriver(user, icon_state, icon_state, tool)) return ITEM_INTERACT_SUCCESS -/obj/machinery/door/poddoor/multitool_act(mob/living/user, obj/item/tool) - . = ..() - if (density) - balloon_alert(user, "open the door first!") - return ITEM_INTERACT_SUCCESS - if (!panel_open) - balloon_alert(user, "open the panel first!") - return ITEM_INTERACT_SUCCESS - if (deconstruction != BLASTDOOR_FINISHED) - return - var/change_id = tgui_input_number(user, "Set the door controllers ID (Current: [id])", "Door Controller ID", isnum(id) ? id : null, 100) - if(!change_id || QDELETED(usr) || QDELETED(src) || !usr.can_perform_action(src, FORBID_TELEKINESIS_REACH)) - return - id = change_id - to_chat(user, span_notice("You change the ID to [id].")) - balloon_alert(user, "id changed") - return ITEM_INTERACT_SUCCESS - /obj/machinery/door/poddoor/crowbar_act(mob/living/user, obj/item/tool) . = ..() if(machine_stat & NOPOWER) @@ -166,6 +169,7 @@ if(tool.use_tool(src, user, 10 SECONDS, volume = 50)) new /obj/item/electronics/airlock(loc) id = null + owner = null deconstruction = BLASTDOOR_NEEDS_ELECTRONICS balloon_alert(user, "removed airlock electronics") return ITEM_INTERACT_SUCCESS diff --git a/code/game/machinery/drone_dispenser.dm b/code/game/machinery/drone_dispenser.dm index 0cee62cc1e5..f51ffc466b1 100644 --- a/code/game/machinery/drone_dispenser.dm +++ b/code/game/machinery/drone_dispenser.dm @@ -212,7 +212,7 @@ if(energy_used) use_energy(energy_used) - for(var/spawnable_item as anything in dispense_type) + for(var/spawnable_item in dispense_type) var/atom/spawned_atom = new spawnable_item(loc) spawned_atom.flags_1 |= (flags_1 & ADMIN_SPAWNED_1) @@ -237,7 +237,7 @@ /obj/machinery/drone_dispenser/proc/count_shells() . = 0 for(var/actual_shell in loc) - for(var/potential_item as anything in dispense_type) + for(var/potential_item in dispense_type) if(istype(actual_shell, potential_item)) .++ diff --git a/code/game/machinery/experimental_cloner/experimental_cloning_record.dm b/code/game/machinery/experimental_cloner/experimental_cloning_record.dm index 8c1a5cb4782..96c1b9bc164 100644 --- a/code/game/machinery/experimental_cloner/experimental_cloning_record.dm +++ b/code/game/machinery/experimental_cloner/experimental_cloning_record.dm @@ -69,10 +69,10 @@ dna.copy_dna(subject.dna, COPY_DNA_SE|COPY_DNA_SPECIES) - for (var/quirk_type as anything in quirks) + for (var/quirk_type in quirks) subject.add_quirk(quirk_type, add_unique = FALSE, announce = FALSE) - for (var/trauma_type as anything in brain_traumas) + for (var/trauma_type in brain_traumas) subject.gain_trauma(trauma_type) for (var/obj/item/bodypart/limb as anything in subject.bodyparts) diff --git a/code/game/machinery/flatpacker.dm b/code/game/machinery/flatpacker.dm index 54d66d23267..07f76e3bd07 100644 --- a/code/game/machinery/flatpacker.dm +++ b/code/game/machinery/flatpacker.dm @@ -235,7 +235,7 @@ inserted_board = attacking_item //compute the needed mats from its stock parts - for(var/type as anything in inserted_board.req_components) + for(var/type in inserted_board.req_components) //these don't count to the final cost as they have to inserted manually if(type in inserted_board.flatpack_components) continue diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index b7cc52ca076..0fa5625d735 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -577,19 +577,19 @@ Possible to do for anyone motivated enough: /*This is the proc for special two-way communication between AI and holopad/people talking near holopad. For the other part of the code, check silicon say.dm. Particularly robot talk.*/ -/obj/machinery/holopad/Hear(message, atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), message_range) +/obj/machinery/holopad/Hear(atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), message_range) . = ..() if(speaker && LAZYLEN(masters) && !radio_freq)//Master is mostly a safety in case lag hits or something. Radio_freq so AIs dont hear holopad stuff through radios. for(var/mob/living/silicon/ai/master in masters) if(masters[master] && speaker != master) - master.relay_speech(message, speaker, message_language, raw_message, radio_freq, spans, message_mods) + master.relay_speech(speaker, message_language, raw_message, radio_freq, spans, message_mods) for(var/datum/holocall/holocall_to_update as anything in holo_calls) if(holocall_to_update.connected_holopad == src)//if we answered this call originating from another holopad if(speaker == holocall_to_update.hologram && holocall_to_update.user.client?.prefs.read_preference(/datum/preference/toggle/enable_runechat)) holocall_to_update.user.create_chat_message(speaker, message_language, raw_message, spans) else - holocall_to_update.user.Hear(message, speaker, message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, spans, message_mods, message_range = INFINITY) + holocall_to_update.user.Hear(speaker, message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, spans, message_mods, message_range = INFINITY) if(outgoing_call?.hologram && speaker == outgoing_call.user) outgoing_call.hologram.say(raw_message, spans = spans, sanitize = FALSE, language = message_language, message_mods = message_mods) diff --git a/code/game/machinery/quantum_pad.dm b/code/game/machinery/quantum_pad.dm index 397b62e35da..c30870c6213 100644 --- a/code/game/machinery/quantum_pad.dm +++ b/code/game/machinery/quantum_pad.dm @@ -92,8 +92,10 @@ return ..() /obj/machinery/quantumpad/interact(mob/user, obj/machinery/quantumpad/target_pad = linked_pad) - if(!target_pad || QDELETED(target_pad)) - if(!map_pad_link_id || !initMappedLink()) + if(QDELETED(target_pad)) + if(map_pad_link_id && initMappedLink()) + target_pad = linked_pad + else to_chat(user, span_warning("Target pad not found!")) return //SKYRAT EDIT ADDITION diff --git a/code/game/machinery/telecomms/broadcasting.dm b/code/game/machinery/telecomms/broadcasting.dm index 289ac960f8f..53d217f6cb7 100644 --- a/code/game/machinery/telecomms/broadcasting.dm +++ b/code/game/machinery/telecomms/broadcasting.dm @@ -174,14 +174,13 @@ // Always call this on the virtualspeaker to avoid issues. var/spans = data["spans"] var/list/message_mods = data["mods"] - var/rendered = virt.compose_message(virt, language, message, frequency, data["frequency_name"], data["frequency_color"], spans) for(var/atom/movable/hearer as anything in receive) if(!hearer) stack_trace("null found in the hearers list returned by the spatial grid. this is bad") continue spans -= blacklisted_spans - hearer.Hear(rendered, virt, language, message, frequency, data["frequency_name"], data["frequency_color"], spans, message_mods, message_range = INFINITY) + hearer.Hear(virt, language, message, frequency, data["frequency_name"], data["frequency_color"], spans, message_mods, message_range = INFINITY) // This following recording is intended for research and feedback in the use of department radio channels if(length(receive)) diff --git a/code/game/objects/effects/anomalies/anomalies_bluespace.dm b/code/game/objects/effects/anomalies/anomalies_bluespace.dm index c2efbfca316..d0b11b3cfe3 100644 --- a/code/game/objects/effects/anomalies/anomalies_bluespace.dm +++ b/code/game/objects/effects/anomalies/anomalies_bluespace.dm @@ -27,8 +27,8 @@ new /obj/effect/temp_visual/circle_wave/bluespace(get_turf(src)) playsound(src, 'sound/effects/magic/cosmic_energy.ogg', vol = 50) - var/turf/T = pick(get_area_turfs(impact_area)) - if(!T) + var/turf/impact_turf = pick(get_area_turfs(impact_area)) + if(!impact_turf) return // Calculate new position (searches through beacons in world) @@ -51,39 +51,31 @@ return // Calculate previous position for transition - var/turf/FROM = T // the turf of origin we're travelling FROM - var/turf/TO = get_turf(chosen) // the turf of origin we're travelling TO + var/turf/beacon_turf = get_turf(chosen) // the turf of origin we're travelling TO - playsound(TO, 'sound/effects/phasein.ogg', 100, TRUE) + playsound(beacon_turf, 'sound/effects/phasein.ogg', 100, TRUE) priority_announce("Massive bluespace translocation detected.", "Anomaly Alert") var/list/flashers = list() - for(var/mob/living/carbon/C in viewers(TO, null)) - if(C.flash_act()) - flashers += C + for(var/mob/living/living in viewers(beacon_turf, null)) + if(living.flash_act(affect_silicon = TRUE, visual = TRUE, type = /atom/movable/screen/fullscreen/bluespace_sparkle, length = 2 SECONDS)) + flashers += living - var/y_distance = TO.y - FROM.y - var/x_distance = TO.x - FROM.x - for (var/atom/movable/A in urange(12, FROM )) // iterate thru list of mobs in the area - if(istype(A, /obj/item/beacon)) - continue // don't teleport beacons because that's just insanely stupid - if(iseyemob(A)) - continue // Don't mess with AI eye, blob eye, xenobio or advanced cameras - if(A.anchored) - continue + var/y_distance = beacon_turf.y - impact_turf.y + var/x_distance = beacon_turf.x - impact_turf.x + var/list/available_turfs = RANGE_TURFS(12, beacon_turf) + for (var/atom/movable/movable in urange(12, impact_turf )) // iterate thru list of mobs in the area + if(istype(movable, /obj/item/beacon) || iseffect(movable) || iseyemob(movable)) + continue // Don't mess with beacons, effects or camera mobs (blob, AI eye etc...) + if(movable.anchored) + continue // do_teleport doesn't check if the item is anchored or not. - var/turf/newloc = locate(A.x + x_distance, A.y + y_distance, TO.z) // calculate the new place - if(!A.Move(newloc) && newloc) // if the atom, for some reason, can't move, FORCE them to move! :) We try Move() first to invoke any movement-related checks the atom needs to perform after moving - A.forceMove(newloc) + var/turf/newloc = locate(movable.x + x_distance, movable.y + y_distance, beacon_turf.z) || pick(available_turfs) // calculate the new place, or pick a random one as fallback + do_teleport(movable, newloc, no_effects = TRUE) - if(ismob(A) && !(A in flashers)) // don't flash if we're already doing an effect - var/mob/give_sparkles = A - if(give_sparkles.client) - blue_effect(give_sparkles) - -/obj/effect/anomaly/bluespace/proc/blue_effect(mob/make_sparkle) - make_sparkle.overlay_fullscreen("bluespace_flash", /atom/movable/screen/fullscreen/bluespace_sparkle, 1) - addtimer(CALLBACK(make_sparkle, TYPE_PROC_REF(/mob/, clear_fullscreen), "bluespace_flash"), 2 SECONDS) + if(isliving(movable) && !(movable in flashers)) // don't flash if we're already doing an effect + var/mob/living/give_sparkles = movable + give_sparkles.flash_act(affect_silicon = TRUE, visual = TRUE, type = /atom/movable/screen/fullscreen/bluespace_sparkle, length = 2 SECONDS) /obj/effect/anomaly/bluespace/stabilize(anchor, has_core) . = ..() diff --git a/code/game/objects/effects/spawners/random/russian_rifle_spawner.dm b/code/game/objects/effects/spawners/random/russian_rifle_spawner.dm index 84b19f59ee0..bebdab726b0 100644 --- a/code/game/objects/effects/spawners/random/russian_rifle_spawner.dm +++ b/code/game/objects/effects/spawners/random/russian_rifle_spawner.dm @@ -10,7 +10,7 @@ /obj/effect/spawner/random/sakhno/ammo name = ".310 Strilka stripper clip spawner" loot = list( - /obj/item/ammo_box/strilka310/surplus = 80, - /obj/item/ammo_box/strilka310 = 10, + /obj/item/ammo_box/speedloader/strilka310/surplus = 80, + /obj/item/ammo_box/speedloader/strilka310 = 10, /obj/item/food/rationpack = 1, ) diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm index 746b36c07f0..64bcf8a8398 100644 --- a/code/game/objects/items/devices/radio/intercom.dm +++ b/code/game/objects/items/devices/radio/intercom.dm @@ -102,6 +102,9 @@ /obj/item/radio/intercom/attack_ai(mob/user) interact(user) +/obj/item/radio/intercom/attack_robot(mob/user) + interact(user) + /obj/item/radio/intercom/attack_hand(mob/user, list/modifiers) . = ..() if(.) @@ -123,7 +126,7 @@ return TRUE -/obj/item/radio/intercom/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), message_range) +/obj/item/radio/intercom/Hear(atom/movable/speaker, message_langs, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), message_range) if(message_mods[RADIO_EXTENSION] == MODE_INTERCOM) return // Avoid hearing the same thing twice return ..() diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index aafeae53dbe..266f515152a 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -381,7 +381,7 @@ signal.levels = SSmapping.get_connected_levels(T) signal.broadcast() -/obj/item/radio/Hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), message_range) +/obj/item/radio/Hear(atom/movable/speaker, message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), message_range) . = ..() if(radio_freq || !broadcasting || get_dist(src, speaker) > canhear_range || message_mods[MODE_RELAY]) return diff --git a/code/game/objects/items/devices/scanners/health_analyzer.dm b/code/game/objects/items/devices/scanners/health_analyzer.dm index 269563cdf4c..2be40d6e716 100644 --- a/code/game/objects/items/devices/scanners/health_analyzer.dm +++ b/code/game/objects/items/devices/scanners/health_analyzer.dm @@ -190,7 +190,17 @@ render_list += "Fatigue level: [target.getStaminaLoss()]%.
" else render_list += "Subject appears to be suffering from fatigue.
" - if (!target.get_organ_slot(ORGAN_SLOT_BRAIN)) // kept exclusively for soul purposes + + // Check for brain - both organic (carbon) and synthetic (cyborg MMI) + var/has_brain = FALSE + if(target.get_organ_slot(ORGAN_SLOT_BRAIN)) + has_brain = TRUE + else if(iscyborg(target)) + var/mob/living/silicon/robot/cyborg_target = target + if(cyborg_target.mmi?.brain) + has_brain = TRUE + + if(!has_brain) // kept exclusively for soul purposes render_list += "Subject lacks a brain.
" if(iscarbon(target)) diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm index c5160b0d705..149015ce292 100644 --- a/code/game/objects/items/devices/taperecorder.dm +++ b/code/game/objects/items/devices/taperecorder.dm @@ -153,7 +153,7 @@ return ..() -/obj/item/taperecorder/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq, radio_freq_name, radio_freq_color, spans, list/message_mods = list(), message_range) +/obj/item/taperecorder/Hear(atom/movable/speaker, message_langs, raw_message, radio_freq, radio_freq_name, radio_freq_color, spans, list/message_mods = list(), message_range) . = ..() if(message_mods[MODE_RELAY] || !mytape || istype(speaker, /obj/item/taperecorder)) return diff --git a/code/game/objects/items/rcd/RCD.dm b/code/game/objects/items/rcd/RCD.dm index 9098908ef23..892cbe70489 100644 --- a/code/game/objects/items/rcd/RCD.dm +++ b/code/game/objects/items/rcd/RCD.dm @@ -165,8 +165,8 @@ //check if we can build our window on the grill if(target_turf.is_blocked_turf(exclude_mobs = !is_full_tile, source_atom = null, ignore_atoms = structures_to_ignore, type_list = TRUE)) - playsound(get_turf(user), SFX_TOOL_SWITCH, 20, TRUE) - balloon_alert(user, "something is blocking the turf") + playsound(user, SFX_TOOL_SWITCH, 20, TRUE) + balloon_alert(user, "tile is blocked!") return FALSE /** @@ -344,7 +344,7 @@ data["selected_root"] = root_category data["categories"] = list() - for(var/sub_category as anything in GLOB.rcd_designs[root_category]) + for(var/sub_category in GLOB.rcd_designs[root_category]) var/list/target_category = GLOB.rcd_designs[root_category][sub_category] if(!length(target_category)) continue @@ -529,15 +529,10 @@ /obj/item/construction/rcd/ce name = "professional RCD" desc = "A higher-end model of the rapid construction device, prefitted with improved cooling and disruption prevention. Provided to the chief engineer." + icon_state = "cercd" + inhand_icon_state = "cercd" construction_upgrades = RCD_UPGRADE_ANTI_INTERRUPT | RCD_UPGRADE_NO_FREQUENT_USE_COOLDOWN matter = 160 - color = list( - 0.3, 0.3, 0.7, 0.0, - 1.0, 1.0, 0.2, 0.0, - -0.2, 0.0, 1.0, 0.0, - 0.0, 0.0, 0.0, 1.0, - 0.0, 0.0, 0.0, 0.0, - ) /obj/item/construction/rcd/combat name = "industrial RCD" diff --git a/code/game/objects/items/rcd/RPLD.dm b/code/game/objects/items/rcd/RPLD.dm index 6522e13e358..6721b4d165a 100644 --- a/code/game/objects/items/rcd/RPLD.dm +++ b/code/game/objects/items/rcd/RPLD.dm @@ -206,13 +206,13 @@ var/is_allowed = TRUE if(!checkResource(cost, user) || !(is_allowed = canPlace(destination))) if(!is_allowed) - balloon_alert(user, "turf is blocked!") + balloon_alert(user, "tile is blocked!") return FALSE if(!build_delay(user, cost, target = destination)) return FALSE if(!checkResource(cost, user) || !(is_allowed = canPlace(destination))) if(!is_allowed) - balloon_alert(user, "turf is blocked!") + balloon_alert(user, "tile is blocked!") return FALSE if(!useResource(cost, user)) diff --git a/code/game/objects/items/rcd/RTD.dm b/code/game/objects/items/rcd/RTD.dm index b3c5f359cb9..50f973246c8 100644 --- a/code/game/objects/items/rcd/RTD.dm +++ b/code/game/objects/items/rcd/RTD.dm @@ -160,7 +160,7 @@ data["selected_root"] = root_category data["categories"] = list() - for(var/sub_category as anything in GLOB.floor_designs[root_category]) + for(var/sub_category in GLOB.floor_designs[root_category]) var/list/target_category = GLOB.floor_designs[root_category][sub_category] var/list/designs = list() //initialize all designs under this category diff --git a/code/game/objects/items/robot/items/hud.dm b/code/game/objects/items/robot/items/hud.dm index f2d46d29585..19bb6bdc1c5 100644 --- a/code/game/objects/items/robot/items/hud.dm +++ b/code/game/objects/items/robot/items/hud.dm @@ -22,16 +22,6 @@ icon_state = "securityhudnight" sight_mode = BORGXRAY -/obj/item/borg/sight/thermal - name = "\proper thermal vision" - sight_mode = BORGTHERM - icon_state = "thermal" - -/obj/item/borg/sight/meson - name = "\proper meson vision" - sight_mode = BORGMESON - icon_state = "meson" - /obj/item/borg/sight/material name = "\proper material vision" sight_mode = BORGMATERIAL diff --git a/code/game/objects/items/robot/items/tools.dm b/code/game/objects/items/robot/items/tools.dm index b25253dba23..a04d8ff64c7 100644 --- a/code/game/objects/items/robot/items/tools.dm +++ b/code/game/objects/items/robot/items/tools.dm @@ -132,7 +132,7 @@ /obj/item/borg/projectile_dampen/proc/process_usage(seconds_per_tick) var/usage = 0 - for(var/projectile as anything in tracked_bullet_cost) + for(var/projectile in tracked_bullet_cost) usage += projectile_tick_speed_ecost * seconds_per_tick usage += tracked_bullet_cost[projectile] * projectile_damage_tick_ecost_coefficient * seconds_per_tick energy = clamp(energy - usage, 0, maxenergy) diff --git a/code/game/objects/items/storage/holsters.dm b/code/game/objects/items/storage/holsters.dm index 6461a76d040..379d8b1c3bf 100644 --- a/code/game/objects/items/storage/holsters.dm +++ b/code/game/objects/items/storage/holsters.dm @@ -57,7 +57,7 @@ /obj/item/storage/belt/holster/detective/full/PopulateContents() generate_items_inside(list( - /obj/item/ammo_box/c38 = 2, + /obj/item/ammo_box/speedloader/c38 = 2, /obj/item/gun/ballistic/revolver/c38/detective = 1, ), src) @@ -99,7 +99,7 @@ /obj/item/storage/belt/holster/nukie/cowboy/full/PopulateContents() generate_items_inside(list( - /obj/item/ammo_box/a357 = 2, + /obj/item/ammo_box/speedloader/c357 = 2, /obj/item/gun/ballistic/revolver/cowboy/nuclear = 1, ), src) diff --git a/code/game/objects/items/storage/toolboxes/weapons.dm b/code/game/objects/items/storage/toolboxes/weapons.dm index 610607590e7..9b723c802c8 100644 --- a/code/game/objects/items/storage/toolboxes/weapons.dm +++ b/code/game/objects/items/storage/toolboxes/weapons.dm @@ -44,10 +44,10 @@ name = ".310 Strilka ammo box (Surplus?)" desc = "It contains a few clips. Goddamn, this thing smells awful. \ Has this been sitting in a warehouse for the last several centuries?" - ammo_to_spawn = /obj/item/ammo_box/strilka310 + ammo_to_spawn = /obj/item/ammo_box/speedloader/strilka310 /obj/item/storage/toolbox/ammobox/strilka310/surplus - ammo_to_spawn = /obj/item/ammo_box/strilka310/surplus + ammo_to_spawn = /obj/item/ammo_box/speedloader/strilka310/surplus /obj/item/storage/toolbox/ammobox/wt550m9 name = "4.6x30mm ammo box" @@ -201,7 +201,7 @@ /obj/item/storage/toolbox/guncase/revolver name = "revolver gun case" weapon_to_spawn = /obj/item/gun/ballistic/revolver/badass/nuclear - extra_to_spawn = /obj/item/ammo_box/a357 + extra_to_spawn = /obj/item/ammo_box/speedloader/c357 /obj/item/storage/toolbox/guncase/sword_and_board name = "energy sword and shield weapon case" diff --git a/code/game/objects/items/storage/uplink_kits.dm b/code/game/objects/items/storage/uplink_kits.dm index 38292016ff0..f529185b776 100644 --- a/code/game/objects/items/storage/uplink_kits.dm +++ b/code/game/objects/items/storage/uplink_kits.dm @@ -79,8 +79,8 @@ if(KIT_GUN) new /obj/item/gun/ballistic/revolver(src) // 13 tc - new /obj/item/ammo_box/a357(src) // 4tc - new /obj/item/ammo_box/a357(src) + new /obj/item/ammo_box/speedloader/c357(src) // 4tc + new /obj/item/ammo_box/speedloader/c357(src) new /obj/item/storage/belt/holster/chameleon(src) // 1 tc new /obj/item/card/emag/doorjack(src) // 3 tc replaced the emag with the doorjack new /obj/item/grenade/c4(src) // 1 tc diff --git a/code/game/objects/items/tools/painter/decal_painter.dm b/code/game/objects/items/tools/painter/decal_painter.dm index f1c934d028d..35abfb90b94 100644 --- a/code/game/objects/items/tools/painter/decal_painter.dm +++ b/code/game/objects/items/tools/painter/decal_painter.dm @@ -156,3 +156,6 @@ else if(cyborg.cell.charge <= 0) balloon_alert(user, "not enough energy!") return + +/obj/item/airlock_painter/decal/cyborg/click_alt(mob/user) + return CLICK_ACTION_BLOCKING diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 4a39fb5f5d2..55a6ba57957 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -1453,7 +1453,7 @@ . = ..() AddElement(/datum/element/toy_talk) -/obj/item/toy/dummy/get_voice() +/obj/item/toy/dummy/get_voice(add_id_name) return doll_name /obj/item/toy/seashell diff --git a/code/game/objects/structures/cannons/cannon.dm b/code/game/objects/structures/cannons/cannon.dm index 4e7730cc6da..1261ae6e8a3 100644 --- a/code/game/objects/structures/cannons/cannon.dm +++ b/code/game/objects/structures/cannons/cannon.dm @@ -22,6 +22,7 @@ /obj/structure/cannon/Initialize(mapload) . = ..() create_reagents(charge_size) + AddComponent(/datum/component/simple_rotation) /obj/structure/cannon/examine(mob/user) . = ..() diff --git a/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm b/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm index 9b07366e546..7773d54e3e4 100644 --- a/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm +++ b/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm @@ -44,7 +44,8 @@ return move_delay = TRUE var/oldloc = loc - try_step_multiz(direction); + try_step_multiz(direction) + user.setDir(dir) if(oldloc != loc) addtimer(CALLBACK(src, PROC_REF(ResetMoveDelay)), CONFIG_GET(number/movedelay/walk_delay) * move_speed_multiplier) else diff --git a/code/game/objects/structures/crates_lockers/closets/secure/misc.dm b/code/game/objects/structures/crates_lockers/closets/secure/misc.dm index a0a811fc6c8..c82d4230b0a 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/misc.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/misc.dm @@ -14,8 +14,8 @@ new /obj/item/ammo_box/magazine/m50(src) new /obj/item/gun/ballistic/automatic/pistol/deagle(src) else - new /obj/item/ammo_box/a357(src) - new /obj/item/ammo_box/a357(src) + new /obj/item/ammo_box/speedloader/c357(src) + new /obj/item/ammo_box/speedloader/c357(src) new /obj/item/gun/ballistic/revolver/mateba(src) /obj/structure/closet/secure_closet/ert_com/populate_contents_immediate() diff --git a/code/game/objects/structures/crates_lockers/crates/syndicrate.dm b/code/game/objects/structures/crates_lockers/crates/syndicrate.dm index 1abbecdd2ad..45ffc987a0e 100644 --- a/code/game/objects/structures/crates_lockers/crates/syndicrate.dm +++ b/code/game/objects/structures/crates_lockers/crates/syndicrate.dm @@ -47,7 +47,7 @@ if(!istype(item, /obj/item/syndicrate_key) || created_items) return ..() created_items = TRUE - for(var/item_path as anything in unlock_contents) + for(var/item_path in unlock_contents) new item_path(src) unlock_contents = list() qdel(item) diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm index 6b84fd10826..34279684ce1 100644 --- a/code/game/objects/structures/lattice.dm +++ b/code/game/objects/structures/lattice.dm @@ -45,8 +45,8 @@ var/turf/turfloc = loc . = ..() if(isturf(turfloc)) - for(var/thing_that_falls as anything in turfloc) // as anything because turfloc can only contain movables - turfloc.zFall((thing_that_falls)) + for(var/thing_that_falls in turfloc) + turfloc.zFall(thing_that_falls) /obj/structure/lattice/proc/deconstruction_hints(mob/user) return span_notice("The rods look like they could be cut. There's space for more rods or a tile.") @@ -154,28 +154,30 @@ desc = "A heavily reinforced catwalk used to build bridges in hostile environments. It doesn't look like anything could make this budge." resistance_flags = INDESTRUCTIBLE +/obj/structure/lattice/catwalk/mining/attackby(obj/item/C, mob/user, list/modifiers, list/attack_modifiers) + // Allow cable placement even though we're indestructible + if(istype(C, /obj/item/stack/cable_coil)) + var/turf/T = get_turf(src) + return T.attackby(C, user) + return ..() + /obj/structure/lattice/catwalk/mining/deconstruction_hints(mob/user) return -/obj/structure/lattice/lava - name = "heatproof support lattice" - desc = "A specialized support beam for building across lava. Watch your step." +/obj/structure/lattice/catwalk/lava + name = "heatproof catwalk" + desc = "A specialized catwalk for building across lava. Watch your step." icon = 'icons/obj/smooth_structures/catwalk.dmi' icon_state = "catwalk-0" base_icon_state = "catwalk" number_of_mats = 1 color = "#5286b9ff" - smoothing_flags = SMOOTH_BITMASK - smoothing_groups = SMOOTH_GROUP_LATTICE + SMOOTH_GROUP_OPEN_FLOOR - canSmoothWith = SMOOTH_GROUP_LATTICE - obj_flags = CAN_BE_HIT | BLOCK_Z_OUT_DOWN | BLOCK_Z_IN_UP resistance_flags = FIRE_PROOF | LAVA_PROOF - give_turf_traits = list(TRAIT_LAVA_STOPPED, TRAIT_CHASM_STOPPED, TRAIT_IMMERSE_STOPPED, TRAIT_HYPERSPACE_STOPPED) -/obj/structure/lattice/lava/deconstruction_hints(mob/user) +/obj/structure/lattice/catwalk/lava/deconstruction_hints(mob/user) return span_notice("The rods look like they could be cut, but the heat treatment will shatter off. There's space for a tile.") -/obj/structure/lattice/lava/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers) +/obj/structure/lattice/catwalk/lava/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers) . = ..() if(!ismetaltile(attacking_item)) return diff --git a/code/game/objects/structures/lavaland/ore_vent.dm b/code/game/objects/structures/lavaland/ore_vent.dm index c6afbc362a1..2e00a08a600 100644 --- a/code/game/objects/structures/lavaland/ore_vent.dm +++ b/code/game/objects/structures/lavaland/ore_vent.dm @@ -3,6 +3,7 @@ #define OVERLAY_OFFSET_START 0 #define OVERLAY_OFFSET_EACH 5 #define MINERALS_PER_BOULDER 3 +#define MAX_MINERAL_PICK_ATTEMPTS 10 /obj/structure/ore_vent name = "ore vent" @@ -171,26 +172,37 @@ /obj/structure/ore_vent/proc/generate_mineral_breakdown(new_minerals = MINERAL_TYPE_OPTIONS_RANDOM, map_loading = FALSE) if(new_minerals < 1) CRASH("generate_mineral_breakdown called with new_minerals < 1.") - var/list/available_mats = difflist(first = SSore_generation.ore_vent_minerals, second = mineral_breakdown, skiprep = 1) - for(var/i in 1 to new_minerals) - if(!length(SSore_generation.ore_vent_minerals) && map_loading) - // We should prevent this from happening in SSore_generation, but if not then we crash here - CRASH("No minerals left to pick from! We may have spawned too many ore vents in init, or the map config in seedRuins may not have enough resources for the mineral budget.") - var/datum/material/new_material - if(map_loading) - if(length(available_mats)) - new_material = pick(GLOB.ore_vent_minerals_lavaland) - var/datum/material/surrogate_mat = pick(SSore_generation.ore_vent_minerals) - available_mats -= surrogate_mat - SSore_generation.ore_vent_minerals -= surrogate_mat - else - new_material = pick(available_mats) - available_mats -= new_material - SSore_generation.ore_vent_minerals -= new_material - else - new_material = pick(GLOB.ore_vent_minerals_lavaland) - mineral_breakdown[new_material] = rand(1, 4) + //should have enough minerals for the vent during round start + var/list/available_minerals = SSore_generation.ore_vent_minerals + if(map_loading && available_minerals.len < new_minerals) + CRASH("No minerals left to pick from! We may have spawned too many ore vents in init, or the map config in seedRuins may not have enough resources for the mineral budget.") + + var/list/datum/material/picked_minerals = list() + for(var/_ in 1 to new_minerals) + var/datum/material/mineral + + //pick an unique mineral but try only MAX_MINERAL_PICK_ATTEMPTS times before giving up else we could be stuck here forever + var/attempts = 0 + do + mineral = length(mineral_breakdown) ? pick_weight(mineral_breakdown) : null + if(map_loading) + if(!mineral || !available_minerals.Find(mineral)) + mineral = pick(available_minerals) + else + mineral = mineral || pick_weight(GLOB.ore_vent_minerals_lavaland) + attempts += 1 + while(attempts < MAX_MINERAL_PICK_ATTEMPTS && picked_minerals.Find(mineral)) + + //register the picked mineral, removing it from the round start available minerals if nessassary + if(map_loading) + available_minerals -= mineral + picked_minerals |= mineral + + //assign random weights to picked minerals + mineral_breakdown.Cut() + for(var/datum/material/mineral as anything in picked_minerals) + mineral_breakdown[mineral] = rand(1, new_minerals) /** * Returns the quantity of mineral sheets in each ore vent's boulder contents roll. @@ -201,7 +213,7 @@ * @params ore_floor The number of minerals already rolled. Used to scale the logarithmic function. */ /obj/structure/ore_vent/proc/ore_quantity_function(ore_floor) - return SHEET_MATERIAL_AMOUNT * round(boulder_size * (log(rand(1 + ore_floor, 4 + ore_floor)) ** -1)) + return SHEET_MATERIAL_AMOUNT * max(round(boulder_size * (log(rand(1 + ore_floor, 4 + ore_floor)) ** -1)), 1) /** * This confirms that the user wants to start the wave defense event, and that they can start it. @@ -472,8 +484,8 @@ unique_vent = TRUE boulder_size = BOULDER_SIZE_SMALL mineral_breakdown = list( - /datum/material/iron = 50, - /datum/material/glass = 50, + /datum/material/iron = 1, + /datum/material/glass = 1, ) /obj/structure/ore_vent/random @@ -614,3 +626,4 @@ #undef OVERLAY_OFFSET_START #undef OVERLAY_OFFSET_EACH #undef MINERALS_PER_BOULDER +#undef MAX_MINERAL_PICK_ATTEMPTS diff --git a/code/game/objects/structures/reflector.dm b/code/game/objects/structures/reflector.dm index 899d3390ddb..ada47e65bc0 100644 --- a/code/game/objects/structures/reflector.dm +++ b/code/game/objects/structures/reflector.dm @@ -292,6 +292,7 @@ return if(!can_rotate) user.balloon_alert(user, "can't rotate!") + ui?.close() return ui = SStgui.try_update_ui(user, src, ui) if(!ui) diff --git a/code/game/say.dm b/code/game/say.dm index 242efa862e4..6e32395dbad 100644 --- a/code/game/say.dm +++ b/code/game/say.dm @@ -74,7 +74,7 @@ GLOBAL_LIST_INIT(freqtospan, list( /// Called when this movable hears a message from a source. /// Returns TRUE if the message was received and understood. -/atom/movable/proc/Hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), message_range=0) +/atom/movable/proc/Hear(atom/movable/speaker, message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), message_range=0) SEND_SIGNAL(src, COMSIG_MOVABLE_HEAR, args) return TRUE @@ -125,7 +125,7 @@ GLOBAL_LIST_INIT(freqtospan, list( if(!hearing_movable)//theoretically this should use as anything because it shouldnt be able to get nulls but there are reports that it does. stack_trace("somehow theres a null returned from get_hearers_in_view() in send_speech!") continue - if(hearing_movable.Hear(null, src, message_language, message, null, null, null, spans, message_mods, range)) + if(hearing_movable.Hear(src, message_language, message, null, null, null, spans, message_mods, range)) listened += hearing_movable if(!found_client && length(hearing_movable.client_mobs_in_contents)) found_client = TRUE @@ -325,14 +325,21 @@ GLOBAL_LIST_INIT(freqtospan, list( return "2" return "0" -/// Get what this atom sounds like when speaking -/atom/proc/get_voice() +/** + * Get what this atom sounds like when speaking + * + * * add_id_name - If TRUE, ID information such as honorifics are added into the voice + */ +/atom/proc/get_voice(add_id_name = FALSE) return "[src]" //Returns the atom's name, prepended with 'The' if it's not a proper noun -/// Get what this atom appears like in chat when speaking -/// visible_name - If TRUE, returns the visible name rather than the voice +/** + * Get what this atom appears like in chat when speaking + * + * * visible_name - If TRUE, returns the visible name rather than the voice + */ /atom/proc/get_message_voice(visible_name) - return visible_name ? get_visible_name() : get_voice() + return visible_name ? get_visible_name(add_id_name = TRUE) : get_voice(add_id_name = TRUE) //HACKY VIRTUALSPEAKER STUFF BEYOND THIS POINT //these exist mostly to deal with the AIs hrefs and job stuff. @@ -355,7 +362,7 @@ INITIALIZE_IMMEDIATE(/atom/movable/virtualspeaker) radio = _radio source = M if(istype(M)) - name = radio.anonymize ? "Unknown" : M.get_voice() + name = radio.anonymize ? "Unknown" : M.get_voice(add_id_name = TRUE) verb_say = M.get_default_say_verb() verb_ask = M.verb_ask verb_exclaim = M.verb_exclaim diff --git a/code/game/shuttle_engines.dm b/code/game/shuttle_engines.dm index 35bd07a7f07..7d0a403d3f5 100644 --- a/code/game/shuttle_engines.dm +++ b/code/game/shuttle_engines.dm @@ -46,6 +46,7 @@ /obj/machinery/power/shuttle_engine/on_construction(mob/user) . = ..() if(anchored) + engine_state = ENGINE_WRENCHED connect_to_shuttle(port = SSshuttle.get_containing_shuttle(src)) //connect to a new ship, if needed if(!connected_ship_ref?.resolve()) AddElement(/datum/element/connect_loc, connections) @@ -134,7 +135,7 @@ if(ENGINE_UNWRENCHED) to_chat(user, span_warning("\The [src] needs to be wrenched to the floor!")) if(ENGINE_WRENCHED) - if(!tool.tool_start_check(user, amount=round(ENGINE_WELDTIME / 5), heat_required = HIGH_TEMPERATURE_REQUIRED)) + if(!tool.tool_start_check(user, heat_required = HIGH_TEMPERATURE_REQUIRED)) return TRUE user.visible_message(span_notice("[user.name] starts to weld \the [src] to the floor."), \ @@ -147,7 +148,7 @@ alter_engine_power(engine_power) if(ENGINE_WELDED) - if(!tool.tool_start_check(user, amount=round(ENGINE_WELDTIME / 5), heat_required = HIGH_TEMPERATURE_REQUIRED)) + if(!tool.tool_start_check(user, heat_required = HIGH_TEMPERATURE_REQUIRED)) return TRUE user.visible_message(span_notice("[user.name] starts to cut \the [src] free from the floor."), \ diff --git a/code/game/turfs/closed/walls.dm b/code/game/turfs/closed/walls.dm index 662b9fb5f2a..b7eb985bee5 100644 --- a/code/game/turfs/closed/walls.dm +++ b/code/game/turfs/closed/walls.dm @@ -170,19 +170,17 @@ *Deals damage back to the hulk's arm. * *When a hulk manages to break a wall using their hulk smash, this deals back damage to the arm used. - *This is in its own proc just to be easily overridden by other wall types. Default allows for three - *smashed walls per arm. Also, we use CANT_WOUND here because wounds are random. Wounds are applied - *by hulk code based on arm damage and checked when we call break_an_arm(). + *This is in its own proc just to be easily overridden by other wall types. Default will likely cause a + *critical bone wound in at least three punches. *Arguments: **arg1 is the arm to deal damage to. **arg2 is the hulk */ /turf/closed/wall/proc/hulk_recoil(obj/item/bodypart/arm, mob/living/carbon/human/hulkman, damage = 20) - hulkman.apply_damage(damage, BRUTE, arm, wound_bonus = CANT_WOUND) var/datum/mutation/hulk/smasher = locate(/datum/mutation/hulk) in hulkman.dna.mutations - if(!smasher || !damage) //sanity check but also snow and wood walls deal no recoil damage, so no arm breaky + if(!smasher || !damage || smasher.no_recoil) //sanity check but also snow and wood walls deal no recoil damage, so no arm breaky. Also, if our type of hulk doesn't cause recoil damage, return. return - smasher.break_an_arm(arm) + hulkman.apply_damage(damage, BRUTE, arm, wound_bonus = 0) //enough damage to regularly result in at least a breakage. /turf/closed/wall/attack_hand(mob/user, list/modifiers) . = ..() diff --git a/code/game/turfs/open/lava.dm b/code/game/turfs/open/lava.dm index 8de10a7ea06..d814fd7d632 100644 --- a/code/game/turfs/open/lava.dm +++ b/code/game/turfs/open/lava.dm @@ -41,8 +41,6 @@ var/mask_state = "lava-lightmask" /// The type for the preset fishing spot of this type of turf. var/fish_source_type = /datum/fish_source/lavaland - /// The color we use for our immersion overlay - var/immerse_overlay_color = "#a15e1b" /// Whether the immerse element has been added yet or not var/immerse_added = FALSE /// Lazy list of atoms that we've checked that can/cannot burn @@ -75,7 +73,7 @@ START_PROCESSING(SSobj, src) if(immerse_added || is_type_in_typecache(movable, GLOB.immerse_ignored_movable)) return - AddElement(/datum/element/immerse, icon, icon_state, "immerse", immerse_overlay_color) + AddElement(/datum/element/immerse, "immerse", 215) immerse_added = TRUE /** @@ -86,7 +84,7 @@ /turf/open/lava/Entered(atom/movable/arrived) . = ..() if(!immerse_added && !is_type_in_typecache(arrived, GLOB.immerse_ignored_movable)) - AddElement(/datum/element/immerse, icon, icon_state, "immerse", immerse_overlay_color) + AddElement(/datum/element/immerse, "immerse", 215) immerse_added = TRUE if(burn_stuff(arrived)) START_PROCESSING(SSobj, src) @@ -215,14 +213,14 @@ ..() if(istype(C, /obj/item/stack/rods/lava)) var/obj/item/stack/rods/lava/R = C - var/obj/structure/lattice/lava/H = locate(/obj/structure/lattice/lava, src) + var/obj/structure/lattice/catwalk/lava/H = locate(/obj/structure/lattice/catwalk/lava, src) if(H) to_chat(user, span_warning("There is already a lattice here!")) return if(R.use(1)) to_chat(user, span_notice("You construct a lattice.")) playsound(src, 'sound/items/weapons/genhit.ogg', 50, TRUE) - new /obj/structure/lattice/lava(locate(x, y, z)) + new /obj/structure/lattice/catwalk/lava(locate(x, y, z)) else to_chat(user, span_warning("You need one rod to build a heatproof lattice.")) return @@ -378,7 +376,6 @@ smoothing_groups = SMOOTH_GROUP_TURF_OPEN + SMOOTH_GROUP_FLOOR_LAVA canSmoothWith = SMOOTH_GROUP_FLOOR_LAVA underfloor_accessibility = 2 //This avoids strangeness when routing pipes / wires along catwalks over lava - immerse_overlay_color = "#F98511" /// Smooth lava needs to take after basalt in order to blend better. If you make a /turf/open/lava/smooth subtype for an area NOT surrounded by basalt; you should override this proc. /turf/open/lava/smooth/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir) @@ -408,7 +405,6 @@ immunity_trait = TRAIT_SNOWSTORM_IMMUNE immunity_resistance_flags = FREEZE_PROOF lava_temperature = 100 - immerse_overlay_color = "#CD4C9F" /turf/open/lava/plasma/examine(mob/user) . = ..() diff --git a/code/game/turfs/open/water.dm b/code/game/turfs/open/water.dm index cabdd3fd434..ee63072025f 100644 --- a/code/game/turfs/open/water.dm +++ b/code/game/turfs/open/water.dm @@ -15,12 +15,6 @@ clawfootstep = FOOTSTEP_WATER heavyfootstep = FOOTSTEP_WATER underfloor_accessibility = UNDERFLOOR_INTERACTABLE - /** - * Used as the color arg/var for the immerse element. It should be kept more or less in line with - * the hue of the turf, as semi-transparent vis overlays can opacify the semi-transparent bits of an icon, - * and we're kinda trying to offset that issue. - */ - var/immerse_overlay_color = "#5AAA88" ///The transparency of the immerse element's overlay var/immerse_overlay_alpha = 180 ///Icon state to use for the immersion mask @@ -73,7 +67,7 @@ /turf/open/water/proc/make_immersed(atom/movable/triggering_atom) if(immerse_added || is_type_in_typecache(triggering_atom, GLOB.immerse_ignored_movable)) return FALSE - AddElement(/datum/element/immerse, icon, icon_state, immerse_overlay, immerse_overlay_color, alpha = immerse_overlay_alpha) + AddElement(/datum/element/immerse, immerse_overlay, immerse_overlay_alpha) immerse_added = TRUE if(is_swimming_tile) AddElement(/datum/element/swimming_tile, stamina_entry_cost, ticking_stamina_cost, ticking_oxy_damage, exhaust_swimmer_prob) @@ -114,7 +108,6 @@ icon_state = "water" base_icon_state = "water" baseturfs = /turf/open/water/beach - immerse_overlay_color = "#7799AA" fishing_datum = /datum/fish_source/ocean/beach /turf/open/water/beach/Initialize(mapload) @@ -130,7 +123,6 @@ icon_state = "deepwater" base_icon_state = "deepwater" baseturfs = /turf/open/water/deep_beach - immerse_overlay_color = "#57707c" fishing_datum = /datum/fish_source/ocean is_swimming_tile = TRUE @@ -160,7 +152,6 @@ the odd fish darting through the water." baseturfs = /turf/open/water/hot_spring planetary_atmos = FALSE - immerse_overlay_color = "#A0E2DE" immerse_overlay_alpha = 190 fishing_datum = /datum/fish_source/hot_spring @@ -171,7 +162,7 @@ // the immerse trait to be repeatedly removed and readded as someone moves within the pool, // replacing the status effect over and over, which can be seen through the status effect alert icon. if(!immerse_added) - AddElement(/datum/element/immerse, icon, icon_state, "immerse", immerse_overlay_color, alpha = immerse_overlay_alpha) + AddElement(/datum/element/immerse, immerse_overlay, immerse_overlay_alpha) immerse_added = TRUE icon_state = "pool_[rand(1, 4)]" var/obj/effect/abstract/shared_particle_holder/holder = add_shared_particles(/particles/hotspring_steam, "hot_springs_[GET_TURF_PLANE_OFFSET(src)]", pool_size = 4) diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index c7a66051734..09b8f70751b 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -23,15 +23,11 @@ dat += "Storyteller Panel
" // BUBBER EDIT CHANGE - Storyteller - Dynamic Panel -> Storyteller Panel dat += "
" - dat += {" - Create Object
- Quick Create Object
- Create Turf
- Create Mob
- "} + + dat += "Spawn Panel
" if(marked_datum && istype(marked_datum, /atom)) - dat += "Duplicate Marked Datum
" + dat += "Duplicate Marked Datum
" var/datum/browser/browser = new(usr, "admin2", "Game Panel", 240, 280) browser.set_content(dat) diff --git a/code/modules/admin/create_mob.dm b/code/modules/admin/create_mob.dm index 6db18547826..18e3fd819d3 100644 --- a/code/modules/admin/create_mob.dm +++ b/code/modules/admin/create_mob.dm @@ -1,15 +1,3 @@ - -/datum/admins/proc/create_mob(mob/user) - var/static/create_mob_html - if (!create_mob_html) - var/mobjs = null - mobjs = jointext(typesof(/mob), ";") - create_mob_html = file2text('html/create_object.html') - create_mob_html = replacetext(create_mob_html, "Create Object", "Create Mob") - create_mob_html = replacetext(create_mob_html, "null; /* object types */", "\"[mobjs]\";") - - user << browse(create_panel_helper(create_mob_html), "window=create_mob;size=425x475") - /** * Fully randomizes everything about a human, including DNA and name. */ diff --git a/code/modules/admin/create_object.dm b/code/modules/admin/create_object.dm deleted file mode 100644 index babef40af2a..00000000000 --- a/code/modules/admin/create_object.dm +++ /dev/null @@ -1,32 +0,0 @@ -/datum/admins/proc/create_panel_helper(template) - var/final_html = replacetext(template, "/* ref src */", "[REF(src)];[HrefToken()]") - final_html = replacetext(final_html,"/* hreftokenfield */","[HrefTokenFormField()]") - return final_html - -/datum/admins/proc/create_object(mob/user) - var/static/create_object_html = null - if (!create_object_html) - var/objectjs = null - objectjs = jointext(typesof(/obj), ";") - create_object_html = file2text('html/create_object.html') - create_object_html = replacetext(create_object_html, "null; /* object types */", "\"[objectjs]\";") - - user << browse(create_panel_helper(create_object_html), "window=create_object;size=425x475") - -/datum/admins/proc/quick_create_object(mob/user) - var/static/list/create_object_forms = list( - /obj, /obj/structure, /obj/machinery, /obj/effect, - /obj/item, /obj/item/clothing, /obj/item/stack, /obj/item, - /obj/item/reagent_containers, /obj/item/gun) - - var/path = input("Select the path of the object you wish to create.", "Path", /obj) in sort_list(create_object_forms, GLOBAL_PROC_REF(cmp_typepaths_asc)) - var/html_form = create_object_forms[path] - - if (!html_form) - var/objectjs = jointext(typesof(path), ";") - html_form = file2text('html/create_object.html') - html_form = replacetext(html_form, "Create Object", "Create [path]") - html_form = replacetext(html_form, "null; /* object types */", "\"[objectjs]\";") - create_object_forms[path] = html_form - - user << browse(create_panel_helper(html_form), "window=qco[path];size=425x475") diff --git a/code/modules/admin/create_turf.dm b/code/modules/admin/create_turf.dm deleted file mode 100644 index dcbcd7ee0d9..00000000000 --- a/code/modules/admin/create_turf.dm +++ /dev/null @@ -1,10 +0,0 @@ -/datum/admins/proc/create_turf(mob/user) - var/static/create_turf_html - if (!create_turf_html) - var/turfjs = null - turfjs = jointext(typesof(/turf), ";") - create_turf_html = file2text('html/create_object.html') - create_turf_html = replacetext(create_turf_html, "Create Object", "Create Turf") - create_turf_html = replacetext(create_turf_html, "null; /* object types */", "\"[turfjs]\";") - - user << browse(create_panel_helper(create_turf_html), "window=create_turf;size=425x475") diff --git a/code/modules/admin/spawn_panel/admin_hotkeys.dm b/code/modules/admin/spawn_panel/admin_hotkeys.dm new file mode 100644 index 00000000000..2a7ed8f75dc --- /dev/null +++ b/code/modules/admin/spawn_panel/admin_hotkeys.dm @@ -0,0 +1,9 @@ +// Open "View Variables" menu for target +/mob/dead/observer/CtrlShiftClickOn(atom/target) + if(check_rights(R_DEBUG)) + SSadmin_verbs.dynamic_invoke_verb(client, /datum/admin_verb/debug_variables, target) + +// Open "Show Player Panel" menu for target mob +/mob/dead/observer/CtrlClickOn(atom/target) + if(check_rights(R_ADMIN) && ismob(target)) + SSadmin_verbs.dynamic_invoke_verb(client, /datum/admin_verb/show_player_panel, target) diff --git a/code/modules/admin/spawn_panel/assets.dm b/code/modules/admin/spawn_panel/assets.dm new file mode 100644 index 00000000000..3be37240c50 --- /dev/null +++ b/code/modules/admin/spawn_panel/assets.dm @@ -0,0 +1,51 @@ +/datum/asset/json/spawnpanel + name = "spawnpanel_atom_data" + +/datum/asset/json/spawnpanel/generate() + var/list/data = list() + + var/static/list/mapping_objects = typecacheof(list( + /obj/effect/mapping_helpers, + /obj/effect/landmark, + /obj/effect/spawner, + /obj/effect/mob_spawn, + /obj/effect/holodeck_effect, + /obj/docking_port, + /obj/modular_map_connector, + /obj/modular_map_root, + /obj/pathfind_guy, + )) + + data["atoms"] = list() + + for(var/obj/each_object as anything in typesof(/obj)) + data["atoms"][each_object] = list( + "icon" = each_object?.icon_preview || each_object?.icon || "none", + "icon_state" = each_object?.icon_state_preview || each_object?.icon_state || "none", + "name" = each_object.name, + "description" = each_object.desc, + "mapping" = is_type_in_typecache(each_object, mapping_objects), + "type" = "Objects" + ) + + for(var/turf/each_turf as anything in typesof(/turf)) + data["atoms"][each_turf] = list( + "icon" = each_turf?.icon || "noneturf", + "icon_state" = each_turf?.icon_state || "noneturf", + "name" = each_turf.name, + "description" = each_turf.desc, + "mapping" = is_type_in_typecache(each_turf, mapping_objects), + "type" = "Turfs" + ) + + for(var/mob/each_mob as anything in typesof(/mob)) + data["atoms"][each_mob] = list( + "icon" = each_mob?.icon || "nonemob", + "icon_state" = each_mob?.icon_state || "nonemob", + "name" = each_mob.name, + "description" = each_mob.desc, + "mapping" = is_type_in_typecache(each_mob, mapping_objects), + "type" = "Mobs" + ) + + return data diff --git a/code/modules/admin/spawn_panel/spawn_handling.dm b/code/modules/admin/spawn_panel/spawn_handling.dm new file mode 100644 index 00000000000..dddfbda0eb8 --- /dev/null +++ b/code/modules/admin/spawn_panel/spawn_handling.dm @@ -0,0 +1,174 @@ +#define WHERE_FLOOR_BELOW_MOB "Current location" +#define WHERE_SUPPLY_BELOW_MOB "Current location (droppod)" +#define WHERE_MOB_HAND "In own mob's hand" +#define WHERE_MARKED_OBJECT "At a marked object" +#define WHERE_IN_MARKED_OBJECT "In the marked object" +#define WHERE_TARGETED_LOCATION "Targeted location" +#define WHERE_TARGETED_LOCATION_POD "Targeted location (droppod)" +#define WHERE_TARGETED_MOB_HAND "In targeted mob's hand" + +#define OFFSET_ABSOLUTE "Absolute offset" +#define OFFSET_RELATIVE "Relative offset" + +/* + Handles spawning an atom. See the call examples for the proper spawn parameters fetching. +*/ +/datum/spawnpanel/proc/spawn_atom(list/spawn_params, mob/user) + if(!check_rights(R_SPAWN) || !spawn_params) + return + + var/atom/atom_to_spawn = spawn_params["selected_atom"] + + if(!atom_to_spawn || (!ispath(atom_to_spawn, /obj) && !ispath(atom_to_spawn, /turf) && !ispath(atom_to_spawn, /mob))) + return + + var/amount = clamp(text2num(spawn_params["atom_amount"]), 1, ADMIN_SPAWN_CAP) + + var/list/offset_data + if(islist(spawn_params["offset"])) + offset_data = spawn_params["offset"] + else if(istext(spawn_params["offset"])) + var/list/parsed = splittext(spawn_params["offset"], ",") + if(length(parsed) >= 3) + offset_data = list("X" = text2num(parsed[1]), "Y" = text2num(parsed[2]), "Z" = text2num(parsed[3])) + else + offset_data = list("X" = 0, "Y" = 0, "Z" = 0) + else + offset_data = list("X" = 0, "Y" = 0, "Z" = 0) + + + var/X = offset_data["X"] || 0 + var/Y = offset_data["Y"] || 0 + var/Z = offset_data["Z"] || 0 + + var/atom_dir = text2num(spawn_params["atom_dir"]) || 1 + var/atom_name = sanitize(spawn_params["atom_name"]) + + var/where_target_type = spawn_params["where_target_type"] + var/atom/target = null + + if(where_target_type == WHERE_MOB_HAND || where_target_type == WHERE_TARGETED_MOB_HAND) + target = (where_target_type == WHERE_TARGETED_MOB_HAND ? spawn_params["target"] : user) + + if(!target) + to_chat(user, span_warning("No target specified.")) + return + + if(!ismob(target)) + to_chat(user, span_warning("The targeted atom is not a mob.")) + return + + if(!iscarbon(target) && !iscyborg(target)) + to_chat(user, span_warning("Can only spawn in hand when the target is a carbon mob or a cyborg.")) + where_target_type = WHERE_FLOOR_BELOW_MOB + + else if(where_target_type == WHERE_MARKED_OBJECT || where_target_type == WHERE_IN_MARKED_OBJECT) + if(!user.client.holder.marked_datum) + to_chat(user, span_warning("You don't have any object marked.")) + return + else if(!istype(user.client.holder.marked_datum, /atom)) + to_chat(user, span_warning("The object you have marked cannot be used as a target. Target must be of type /atom.")) + return + else + target = (where_target_type == WHERE_MARKED_OBJECT ? get_turf(user.client.holder.marked_datum) : user.client.holder.marked_datum) + + else if(where_target_type == WHERE_TARGETED_LOCATION || where_target_type == WHERE_TARGETED_LOCATION_POD) + target = spawn_params["target"] + else + switch(spawn_params["offset_type"]) + if(OFFSET_ABSOLUTE) + target = locate(X, Y, Z) + + if(OFFSET_RELATIVE) + var/turf/relative_turf + var/atom/user_loc = user.loc + + if (user_loc) + relative_turf = get_turf(user_loc) + + if (!relative_turf) + if(isobserver(user)) + var/mob/dead/observer/user_observer = user + relative_turf = get_turf(user_observer.client?.eye) || get_turf(user_observer) + if (!relative_turf) + relative_turf = locate(1, 1, 1) + + if (!relative_turf) + to_chat(user, span_warning("Could not determine a valid relative location.")) + return + + target = locate(relative_turf.x + X, relative_turf.y + Y, relative_turf.z + Z) + + if(!target) + return + + var/use_droppod = where_target_type == WHERE_SUPPLY_BELOW_MOB || where_target_type == WHERE_TARGETED_LOCATION_POD + + var/obj/structure/closet/supplypod/centcompod/pod + if(use_droppod) + pod = new() + + for(var/i in 1 to amount) + if(istype(atom_to_spawn, /turf)) + var/turf/original_turf = target + var/turf/created_turf = original_turf.ChangeTurf(atom_to_spawn.type) + if(created_turf && atom_name) + created_turf.name = atom_name + continue + + var/atom/created_atom = new atom_to_spawn(use_droppod ? pod : target) + + if(QDELETED(created_atom)) + return + + created_atom.flags_1 |= ADMIN_SPAWNED_1 + + if(spawn_params["apply_icon_override"]) + if(spawn_params["selected_atom_icon"]) + created_atom.icon = file(spawn_params["selected_atom_icon"]) + + if(spawn_params["selected_atom_icon_state"]) + created_atom.icon_state = spawn_params["selected_atom_icon_state"] + + if(spawn_params["atom_icon_size"]) + if(ismob(created_atom)) + var/mob/living/created_mob = created_atom + created_mob.current_size = spawn_params["atom_icon_size"] / 100 + + if(atom_dir) + created_atom.setDir(atom_dir) + + if(atom_name) + created_atom.name = atom_name + if(ismob(created_atom)) + var/mob/created_mob = created_atom + created_mob.real_name = atom_name + + if((where_target_type == WHERE_MOB_HAND || where_target_type == WHERE_TARGETED_MOB_HAND) && isliving(target) && isitem(created_atom)) + var/mob/living/living_target = target + var/obj/item/created_item = created_atom + living_target.put_in_hands(created_item) + + if(iscyborg(living_target)) + var/mob/living/silicon/robot/target_robot = living_target + if(target_robot.model) + target_robot.model.add_module(created_item, TRUE, TRUE) + target_robot.activate_module(created_item) + + if(pod) + new /obj/effect/pod_landingzone(target, pod) + + log_admin("[key_name(user)] created [amount == 1 ? "an instance" : "[amount] instances"] of [atom_to_spawn.type]") + if(istype(atom_to_spawn, /mob)) + message_admins("[key_name_admin(user)] created [amount == 1 ? "an instance" : "[amount] instances"] of [atom_to_spawn.type]") + +#undef WHERE_FLOOR_BELOW_MOB +#undef WHERE_SUPPLY_BELOW_MOB +#undef WHERE_MOB_HAND +#undef WHERE_MARKED_OBJECT +#undef WHERE_IN_MARKED_OBJECT +#undef WHERE_TARGETED_LOCATION +#undef WHERE_TARGETED_LOCATION_POD +#undef WHERE_TARGETED_MOB_HAND +#undef OFFSET_ABSOLUTE +#undef OFFSET_RELATIVE diff --git a/code/modules/admin/spawn_panel/spawn_panel.dm b/code/modules/admin/spawn_panel/spawn_panel.dm new file mode 100644 index 00000000000..95097d6bade --- /dev/null +++ b/code/modules/admin/spawn_panel/spawn_panel.dm @@ -0,0 +1,336 @@ +#define WHERE_FLOOR_BELOW_MOB "Current location" +#define WHERE_SUPPLY_BELOW_MOB "Current location (droppod)" +#define WHERE_MOB_HAND "In own mob's hand" +#define WHERE_MARKED_OBJECT "At a marked object" +#define WHERE_IN_MARKED_OBJECT "In the marked object" +#define WHERE_TARGETED_LOCATION "Targeted location" +#define WHERE_TARGETED_LOCATION_POD "Targeted location (droppod)" +#define WHERE_TARGETED_MOB_HAND "In targeted mob's hand" + +#define PRECISE_MODE_OFF "Off" +#define PRECISE_MODE_TARGET "Target" +#define PRECISE_MODE_MARK "Mark" +#define PRECISE_MODE_COPY "Copy" + +#define OFFSET_ABSOLUTE "Absolute offset" +#define OFFSET_RELATIVE "Relative offset" + +GLOBAL_LIST_INIT(spawnpanels_by_ckey, list()) + +/* + An instance of a /tg/UI™ Spawn Panel. Stores preferences, spawns things, controls the UI. Unique for each user (their ckey). +*/ +/datum/spawnpanel + /// Who this instance of spawn panel belongs to. The instances are unique to correctly keep modified values between multiple admins. + var/owner_ckey + /// Where and how the atom should be spawned. + var/where_target_type = WHERE_FLOOR_BELOW_MOB + /// The atom selected from the panel. + var/atom/selected_atom = null + /// The icon selected for the atom from the panel. + var/selected_atom_icon = null + /// The icon state selected for the atom from the panel. + var/selected_atom_icon_state = null + /// Should selected icon/icon state override the initial ones? Added as an edge case to not replace animated GAGS icons. + var/apply_icon_override = FALSE + /// A list of icon states to display in preview panels. + var/list/available_icon_states = null + /// Override for the icon size of the spawned mob. + var/atom_icon_size = 100 + /// How many atoms will be spawned at once. + var/atom_amount = 1 + /// Custom atom name (leave `null` for initial). + var/atom_name = null + /// Custom atom description (leave `null` for initial). + var/atom_desc = null + /// Custom atom dir (leave `null` for `2`). + var/atom_dir = 1 + /// An associative list of x-y-z offsets. + var/offset = list() + /// The pivot point for offsetting — relative or absolute. + var/offset_type = OFFSET_RELATIVE + /// Precise mode toggle. Used for build-mode-like spawning experience and targeting datums. + var/precise_mode = PRECISE_MODE_OFF + +/datum/spawnpanel/New() + . = ..() + offset = list("X" = 0, "Y" = 0, "Z" = 0) + +/datum/spawnpanel/ui_interact(mob/user, datum/tgui/ui) + if(user.client.ckey != owner_ckey) + return + + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "SpawnPanel") + ui.open() + +/// Returns a `spawnpanel` instance belonging to this `user`, or creates and registers a new one +/proc/get_spawnpanel_for_admin(mob/user) + if(!user?.client?.ckey) + return null + + var/ckey = user.client.ckey + + if(GLOB.spawnpanels_by_ckey[ckey]) + return GLOB.spawnpanels_by_ckey[ckey] + + var/datum/spawnpanel/new_panel = new() + new_panel.owner_ckey = ckey + GLOB.spawnpanels_by_ckey[ckey] = new_panel + + return new_panel + +/datum/spawnpanel/ui_close(mob/user) + . = ..() + if (precise_mode && precise_mode != PRECISE_MODE_OFF) + toggle_precise_mode(PRECISE_MODE_OFF) + +/datum/spawnpanel/ui_state(mob/user) + if(user.client.ckey != owner_ckey) + return GLOB.never_state + return ADMIN_STATE(R_ADMIN) + +/datum/spawnpanel/ui_act(action, params) + if(..()) + return FALSE + + if(usr.client.ckey != owner_ckey) + return FALSE + + switch(action) + if("select-new-DMI") + var/icon/new_icon = input("Select a new icon file:", "Icon") as null|icon + if(new_icon) + selected_atom_icon = new_icon + available_icon_states = icon_states(selected_atom_icon) + if(!(selected_atom_icon_state in available_icon_states)) + selected_atom_icon_state = available_icon_states[1] + SStgui.update_uis(src) + return TRUE + + if("set-apply-icon-override") + apply_icon_override = !!params["value"] + SStgui.update_uis(src) + return TRUE + + if("reset-DMI-icon") + selected_atom_icon = null + selected_atom_icon_state = null + if(selected_atom) + selected_atom_icon = initial(selected_atom.icon) + selected_atom_icon_state = initial(selected_atom.icon_state) + available_icon_states = icon_states(selected_atom_icon) + else + available_icon_states = list() + + SStgui.update_uis(src) + return TRUE + + if("select-new-icon-state") + selected_atom_icon_state = params["new_state"] + SStgui.update_uis(src) + return TRUE + + if("reset-icon-state") + selected_atom_icon_state = null + if(selected_atom) + selected_atom_icon_state = initial(selected_atom.icon_state) + SStgui.update_uis(src) + return TRUE + + if("set-icon-size") + atom_icon_size = params["size"] + SStgui.update_uis(src) + return TRUE + + if("reset-icon-size") + atom_icon_size = 100 + SStgui.update_uis(src) + return TRUE + + if("get-icon-states") + available_icon_states = icon_states(selected_atom_icon) + SStgui.update_uis(src) + return TRUE + + if("selected-atom-changed") + var/path = text2path(params["newObj"]) + if(path) + var/atom/temp_atom = path + selected_atom_icon = initial(temp_atom.icon) + selected_atom_icon_state = initial(temp_atom.icon_state) + available_icon_states = icon_states(selected_atom_icon) + selected_atom = temp_atom + return TRUE + + if("create-atom-action") + var/list/spawn_params = list( + "selected_atom" = selected_atom, + "offset" = params["offset"], + "atom_dir" = text2num(params["dir"]) || 1, + "atom_amount" = text2num(params["atom_amount"]) || 1, + "atom_name" = params["atom_name"], + "where_target_type" = params["where_target_type"] || WHERE_FLOOR_BELOW_MOB, + "atom_icon_size" = params["atom_icon_size"], + "offset_type" = params["offset_type"] || OFFSET_RELATIVE, + "apply_icon_override" = apply_icon_override, + ) + + if(apply_icon_override) + spawn_params["selected_atom_icon"] = selected_atom_icon + spawn_params["selected_atom_icon_state"] = selected_atom_icon_state + + spawn_atom(spawn_params, usr) + return TRUE + + if("toggle-precise-mode") + var/precise_type = params["newPreciseType"] + if(precise_type == PRECISE_MODE_TARGET && params["where_target_type"]) + where_target_type = params["where_target_type"] + toggle_precise_mode(precise_type) + return TRUE + + if("update-settings") + if(params["atom_amount"]) + atom_amount = text2num(params["atom_amount"]) + if(params["atom_dir"]) + atom_dir = text2num(params["atom_dir"]) + if(params["offset"]) + var/list/temp_offset = params["offset"] + offset["X"] = temp_offset[1] + offset["Y"] = temp_offset[2] + offset["Z"] = temp_offset[3] + if(params["atom_name"]) + atom_name = params["atom_name"] + if(params["where_target_type"]) + where_target_type = params["where_target_type"] + if(params["offset_type"]) + offset_type = params["offset_type"] + if(params["atom_icon_size"]) + atom_icon_size = text2num(params["atom_icon_size"]) + if(params["selected_atom_icon"]) + selected_atom_icon = params["selected_atom_icon"] + if(params["selected_atom_icon_state"]) + selected_atom_icon_state = params["selected_atom_icon_state"] + return TRUE + +/datum/spawnpanel/proc/toggle_precise_mode(precise_type) + precise_mode = precise_type + var/client/admin_client = usr.client + if (!admin_client) + return + + admin_client.mouse_up_icon = null + admin_client.mouse_down_icon = null + admin_client.mouse_override_icon = null + admin_client.click_intercept = null + + if (precise_mode != PRECISE_MODE_OFF) + admin_client.mouse_up_icon = 'icons/effects/mouse_pointers/supplypod_pickturf.dmi' + admin_client.mouse_down_icon = 'icons/effects/mouse_pointers/supplypod_pickturf_down.dmi' + admin_client.mouse_override_icon = admin_client.mouse_up_icon + admin_client.mouse_pointer_icon = admin_client.mouse_override_icon + admin_client.click_intercept = src + + winset(admin_client, "mapwindow.map", "right-click=true") + else + winset(admin_client, "mapwindow.map", "right-click=false") + + var/mob/holder_mob = admin_client.mob + holder_mob?.update_mouse_pointer() + +/datum/spawnpanel/proc/InterceptClickOn(mob/user, params, atom/target) + var/list/modifiers = params2list(params) + var/left_click = LAZYACCESS(modifiers, LEFT_CLICK) + var/right_click = LAZYACCESS(modifiers, RIGHT_CLICK) + + if(right_click) + toggle_precise_mode(PRECISE_MODE_OFF) + SStgui.update_uis(src) + return TRUE + + if(left_click) + if(istype(target,/atom/movable/screen)) + return FALSE + + var/turf/clicked_turf = get_turf(target) + if(!clicked_turf) + return FALSE + + switch(precise_mode) + if(PRECISE_MODE_TARGET) + var/list/spawn_params = list( + "selected_atom" = selected_atom, + "atom_amount" = atom_amount, + "offset" = "0,0,0", + "atom_dir" = atom_dir, + "atom_name" = atom_name, + "atom_desc" = atom_desc, + "offset_type" = OFFSET_ABSOLUTE, + "where_target_type" = where_target_type, + "target" = target, + "atom_icon_size" = atom_icon_size, + "apply_icon_override" = apply_icon_override, + ) + + if(apply_icon_override) + spawn_params["selected_atom_icon"] = selected_atom_icon + spawn_params["selected_atom_icon_state"] = selected_atom_icon_state + + if(where_target_type == WHERE_TARGETED_LOCATION || where_target_type == WHERE_TARGETED_LOCATION_POD) + spawn_params["X"] = clicked_turf.x + spawn_params["Y"] = clicked_turf.y + spawn_params["Z"] = clicked_turf.z + + spawn_atom(spawn_params, user) + + if(PRECISE_MODE_MARK) + var/client/admin_client = user.client + admin_client.mark_datum(target) + to_chat(user, span_notice("Marked object: [icon2html(target, user)] [span_bold("[target]")]")) + toggle_precise_mode(PRECISE_MODE_OFF) + SStgui.update_uis(src) + + if(PRECISE_MODE_COPY) + to_chat(user, span_notice("Picked object: [icon2html(target, user)] [span_bold("[target]")]")) + selected_atom = target + toggle_precise_mode(PRECISE_MODE_OFF) + SStgui.update_uis(src) + + return TRUE + +/datum/spawnpanel/ui_data(mob/user) + var/data = list() + data["icon"] = selected_atom_icon + data["iconState"] = selected_atom_icon_state + data["iconSize"] = atom_icon_size + data["apply_icon_override"] = apply_icon_override + var/list/states = list() + if(available_icon_states) + for(var/state in available_icon_states) + states += state + data["iconStates"] = states + data["precise_mode"] = precise_mode + data["selected_object"] = selected_atom ? "[selected_atom.type]" : "" + return data + +/datum/spawnpanel/ui_assets(mob/user) + return list( + get_asset_datum(/datum/asset/json/spawnpanel), + ) + +#undef WHERE_FLOOR_BELOW_MOB +#undef WHERE_SUPPLY_BELOW_MOB +#undef WHERE_MOB_HAND +#undef WHERE_MARKED_OBJECT +#undef WHERE_IN_MARKED_OBJECT +#undef WHERE_TARGETED_LOCATION +#undef WHERE_TARGETED_LOCATION_POD +#undef WHERE_TARGETED_MOB_HAND +#undef PRECISE_MODE_OFF +#undef PRECISE_MODE_TARGET +#undef PRECISE_MODE_MARK +#undef PRECISE_MODE_COPY +#undef OFFSET_ABSOLUTE +#undef OFFSET_RELATIVE diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 668c39ade00..06821d9b5e0 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -1008,157 +1008,14 @@ GLOB.player_ticket_history.ui_interact(usr) return - else if(href_list["create_object"]) - if(!check_rights(R_SPAWN)) - return - return create_object(usr) - - else if(href_list["quick_create_object"]) - if(!check_rights(R_SPAWN)) - return - return quick_create_object(usr) - - else if(href_list["create_turf"]) - if(!check_rights(R_SPAWN)) - return - return create_turf(usr) - - else if(href_list["create_mob"]) - if(!check_rights(R_SPAWN)) - return - return create_mob(usr) + else if(href_list["spawn_panel"]) + SSadmin_verbs.dynamic_invoke_verb(usr, /datum/admin_verb/spawn_panel) else if(href_list["dupe_marked_datum"]) if(!check_rights(R_SPAWN)) return return duplicate_object(marked_datum, spawning_location = get_turf(usr)) - else if(href_list["object_list"]) //this is the laggiest thing ever - if(!check_rights(R_SPAWN)) - return - - var/atom/loc = usr.loc - - var/dirty_paths - if (istext(href_list["object_list"])) - dirty_paths = list(href_list["object_list"]) - else if (istype(href_list["object_list"], /list)) - dirty_paths = href_list["object_list"] - - var/paths = list() - - for(var/dirty_path in dirty_paths) - var/path = text2path(dirty_path) - if(!path) - continue - else if(!ispath(path, /obj) && !ispath(path, /turf) && !ispath(path, /mob)) - continue - paths += path - - if(!paths) - tgui_alert(usr,"The path list you sent is empty.") - return - - var/number = clamp(text2num(href_list["object_count"]), 1, ADMIN_SPAWN_CAP) - if(length(paths) * number > ADMIN_SPAWN_CAP) - tgui_alert(usr,"Select fewer object types!") - return - - var/list/offset = splittext(href_list["offset"],",") - var/X = offset.len > 0 ? text2num(offset[1]) : 0 - var/Y = offset.len > 1 ? text2num(offset[2]) : 0 - var/Z = offset.len > 2 ? text2num(offset[3]) : 0 - var/obj_dir = text2num(href_list["object_dir"]) - if(obj_dir && !(obj_dir in list(1,2,4,8,5,6,9,10))) - obj_dir = null - var/obj_name = sanitize(href_list["object_name"]) - - - var/atom/target //Where the object will be spawned - var/where = href_list["object_where"] - if (!( where in list("onfloor","frompod","inhand","inmarked") )) - where = "onfloor" - - - switch(where) - if("inhand") - if (!iscarbon(usr) && !iscyborg(usr)) - to_chat(usr, "Can only spawn in hand when you're a carbon mob or cyborg.", confidential = TRUE) - where = "onfloor" - target = usr - - if("onfloor", "frompod") - switch(href_list["offset_type"]) - if ("absolute") - target = locate(0 + X,0 + Y,0 + Z) - if ("relative") - target = locate(loc.x + X,loc.y + Y,loc.z + Z) - if("inmarked") - if(!marked_datum) - to_chat(usr, "You don't have any object marked. Abandoning spawn.", confidential = TRUE) - return - else if(!istype(marked_datum, /atom)) - to_chat(usr, "The object you have marked cannot be used as a target. Target must be of type /atom. Abandoning spawn.", confidential = TRUE) - return - else - target = marked_datum - - var/obj/structure/closet/supplypod/centcompod/pod - - if(target) - if(where == "frompod") - pod = new() - - for (var/path in paths) - for (var/i = 0; i < number; i++) - if(path in typesof(/turf)) - var/turf/O = target - var/turf/N = O.ChangeTurf(path) - if(N && obj_name) - N.name = obj_name - else - var/atom/O - if(where == "frompod") - O = new path(pod) - else - O = new path(target) - - if(!QDELETED(O)) - O.flags_1 |= ADMIN_SPAWNED_1 - if(obj_dir) - O.setDir(obj_dir) - if(obj_name) - O.name = obj_name - if(ismob(O)) - var/mob/M = O - M.real_name = obj_name - if(where == "inhand" && isliving(usr) && isitem(O)) - var/mob/living/L = usr - var/obj/item/I = O - L.put_in_hands(I) - if(iscyborg(L)) - var/mob/living/silicon/robot/R = L - if(R.model) - R.model.add_module(I, TRUE, TRUE) - R.activate_module(I) - - if(pod) - new /obj/effect/pod_landingzone(target, pod) - - if (number == 1) - log_admin("[key_name(usr)] created an instance of [english_list(paths)]") - for(var/path in paths) - if(ispath(path, /mob)) - message_admins("[key_name_admin(usr)] created an instance of [english_list(paths)]") - break - else - log_admin("[key_name(usr)] created [number] instances of [english_list(paths)]") - for(var/path in paths) - if(ispath(path, /mob)) - message_admins("[key_name_admin(usr)] created [number] instances of [english_list(paths)]") - break - return - else if(href_list["check_antagonist"]) SSadmin_verbs.dynamic_invoke_verb(usr, /datum/admin_verb/check_antagonists) diff --git a/code/modules/admin/verbs/admingame.dm b/code/modules/admin/verbs/admingame.dm index 23bfc44c999..712bd66ce40 100644 --- a/code/modules/admin/verbs/admingame.dm +++ b/code/modules/admin/verbs/admingame.dm @@ -444,3 +444,10 @@ ADMIN_VERB(lag_switch_panel, R_ADMIN, "Show Lag Switches", "Display the controls dat += "Disable character creator: [SSlag_switch.measures[DISABLE_CREATOR] ? "On" : "Off"] - trait applies to all
" // SKYRAT EDIT ADDITION dat += "" user << browse(dat.Join(), "window=lag_switch_panel;size=420x480") + +ADMIN_VERB(spawn_panel, R_SPAWN, "Spawn Panel", "Spawn Panel (TGUI).", ADMIN_CATEGORY_GAME) + var/datum/spawnpanel/panel = get_spawnpanel_for_admin(user.mob) + if(panel) + panel.ui_interact(user.mob) + BLACKBOX_LOG_ADMIN_VERB("Spawn Panel") + diff --git a/code/modules/admin/verbs/lua/lua_state.dm b/code/modules/admin/verbs/lua/lua_state.dm index 53b869e23a1..54d1d719c9c 100644 --- a/code/modules/admin/verbs/lua/lua_state.dm +++ b/code/modules/admin/verbs/lua/lua_state.dm @@ -115,7 +115,7 @@ GLOBAL_PROTECT(lua_state_stack) if(timer_enabled) var/result = call_function("__Timer_timer_process", seconds_per_tick) log_result(result, verbose = FALSE) - for(var/function as anything in functions_to_execute) + for(var/function in functions_to_execute) result = call_function(list("__Timer_callbacks", function)) log_result(result, verbose = FALSE) functions_to_execute.Cut() diff --git a/code/modules/admin/verbs/plane_debugger.dm b/code/modules/admin/verbs/plane_debugger.dm index 8c9f1fbfa32..90c12c931d7 100644 --- a/code/modules/admin/verbs/plane_debugger.dm +++ b/code/modules/admin/verbs/plane_debugger.dm @@ -126,7 +126,7 @@ var/list/plane_info = list() var/list/our_planes = our_hud?.get_planes_from(current_group) - for (var/plane_string as anything in our_planes) + for (var/plane_string in our_planes) var/list/this_plane = list() var/atom/movable/screen/plane_master/plane = our_planes[plane_string] this_plane["name"] = plane.name diff --git a/code/modules/admin/verbs/selectequipment.dm b/code/modules/admin/verbs/selectequipment.dm index b42e01da44d..7586726c48e 100644 --- a/code/modules/admin/verbs/selectequipment.dm +++ b/code/modules/admin/verbs/selectequipment.dm @@ -88,7 +88,7 @@ ADMIN_VERB_ONLY_CONTEXT_MENU(select_equipment, R_FUN, "Select Equipment", mob/ta /datum/select_equipment/proc/make_outfit_entries(category="General", list/outfit_list) var/list/entries = list() - for(var/path as anything in outfit_list) + for(var/path in outfit_list) var/datum/outfit/outfit = path entries += list(outfit_entry(category, path, initial(outfit.name))) return entries diff --git a/code/modules/admin/view_variables/filterrific.dm b/code/modules/admin/view_variables/filterrific.dm index bc46889408e..80544178817 100644 --- a/code/modules/admin/view_variables/filterrific.dm +++ b/code/modules/admin/view_variables/filterrific.dm @@ -74,8 +74,7 @@ if("modify_icon_value") var/icon/new_icon = input("Pick icon:", "Icon") as null|icon if(new_icon) - target.filter_data[params["name"]]["icon"] = new_icon - target.update_filters() + target.modify_filter(params["name"], list("icon" = new_icon)) . = TRUE if("mass_apply") if(!check_rights_for(usr.client, R_FUN)) diff --git a/code/modules/antagonists/cult/cult_items.dm b/code/modules/antagonists/cult/cult_items.dm index dacd9836fa7..ca4bb86cc97 100644 --- a/code/modules/antagonists/cult/cult_items.dm +++ b/code/modules/antagonists/cult/cult_items.dm @@ -472,25 +472,23 @@ Striking a noncultist, however, will tear their flesh."} // on bound if(bound) + remove_filter("unbound_ray", update = FALSE) add_filter("bind_glow", 2, list("type" = "outline", "color" = h_color, "size" = 0.1)) - remove_filter("unbound_ray") - update_filters() - // on unbound - else - // we re-add this every time it's picked up or dropped - remove_filter("unbound_ray") - add_filter(name = "unbound_ray", priority = 1, params = list( - type = "rays", - size = 16, - color = COLOR_HERETIC_GREEN, // the sickly green of the heretic leaking through - density = 16, - )) - // because otherwise the animations stack and it looks ridiculous - var/ray_filter = get_filter("unbound_ray") - animate(ray_filter, offset = 100, time = 2 MINUTES, loop = -1, flags = ANIMATION_PARALLEL) // Absurdly long animate so nobody notices it hitching when it loops - animate(offset = 0, time = 2 MINUTES) // I sure hope duration of animate doesnt have any performance effect + return - update_filters() + // on unbound + // we re-add this every time it's picked up or dropped + remove_filter("bind_glow", update = FALSE) + add_filter(name = "unbound_ray", priority = 1, params = list( + type = "rays", + size = 16, + color = COLOR_HERETIC_GREEN, // the sickly green of the heretic leaking through + density = 16, + )) + // because otherwise the animations stack and it looks ridiculous + var/ray_filter = get_filter("unbound_ray") + animate(ray_filter, offset = 100, time = 2 MINUTES, loop = -1, flags = ANIMATION_PARALLEL) // Absurdly long animate so nobody notices it hitching when it loops + animate(offset = 0, time = 2 MINUTES) // I sure hope duration of animate doesnt have any performance effect /obj/item/melee/cultblade/haunted/proc/start_glow_loop() var/filter = get_filter("bind_glow") diff --git a/code/modules/antagonists/fugitive/hunters/hunter_outfits.dm b/code/modules/antagonists/fugitive/hunters/hunter_outfits.dm index 422c576ed9e..65e22b1ed6c 100644 --- a/code/modules/antagonists/fugitive/hunters/hunter_outfits.dm +++ b/code/modules/antagonists/fugitive/hunters/hunter_outfits.dm @@ -42,7 +42,7 @@ gloves = /obj/item/clothing/gloves/tackler/combat head = /obj/item/clothing/head/helmet/alt shoes = /obj/item/clothing/shoes/russian - l_pocket = /obj/item/ammo_box/strilka310 + l_pocket = /obj/item/ammo_box/speedloader/strilka310 r_pocket = /obj/item/restraints/handcuffs/cable/zipties id = /obj/item/card/id/advanced/bountyhunter diff --git a/code/modules/antagonists/heretic/items/hunter_rifle.dm b/code/modules/antagonists/heretic/items/hunter_rifle.dm index 43f55b8b77f..b328c3215fc 100644 --- a/code/modules/antagonists/heretic/items/hunter_rifle.dm +++ b/code/modules/antagonists/heretic/items/hunter_rifle.dm @@ -174,10 +174,10 @@ return ..() // Extra ammunition can be made with a heretic ritual. -/obj/item/ammo_box/strilka310/lionhunter +/obj/item/ammo_box/speedloader/strilka310/lionhunter name = "stripper clip (.310 hunter)" desc = "A stripper clip of mysterious, atypical ammo. It doesn't fit into normal ballistic rifles." - icon_state = "310_strip" + icon_state = "lionhunter_strip" ammo_type = /obj/item/ammo_casing/strilka310/lionhunter max_ammo = 3 multiple_sprites = AMMO_BOX_PER_BULLET diff --git a/code/modules/antagonists/heretic/knowledge/side_blade_rust.dm b/code/modules/antagonists/heretic/knowledge/side_blade_rust.dm index 814e8522cdd..8f9a595859f 100644 --- a/code/modules/antagonists/heretic/knowledge/side_blade_rust.dm +++ b/code/modules/antagonists/heretic/knowledge/side_blade_rust.dm @@ -79,7 +79,7 @@ required_atoms = list( /obj/item/ammo_casing = 3, ) - result_atoms = list(/obj/item/ammo_box/strilka310/lionhunter) + result_atoms = list(/obj/item/ammo_box/speedloader/strilka310/lionhunter) cost = 0 research_tree_icon_path = 'icons/obj/weapons/guns/ammo.dmi' diff --git a/code/modules/antagonists/heretic/magic/cosmic_expansion.dm b/code/modules/antagonists/heretic/magic/cosmic_expansion.dm index a3330aefabd..c191b00d32c 100644 --- a/code/modules/antagonists/heretic/magic/cosmic_expansion.dm +++ b/code/modules/antagonists/heretic/magic/cosmic_expansion.dm @@ -38,7 +38,7 @@ /datum/action/cooldown/spell/conjure/cosmic_expansion/proc/get_turfs(turf/target_turf) var/list/target_turfs = list() - for (var/direction as anything in GLOB.cardinals) + for (var/direction in GLOB.cardinals) target_turfs += get_ranged_target_turf(target_turf, direction, 2) target_turfs += get_ranged_target_turf(target_turf, direction, 3) return target_turfs diff --git a/code/modules/antagonists/heretic/magic/star_touch.dm b/code/modules/antagonists/heretic/magic/star_touch.dm index 5b6b9c27522..bf7491ab037 100644 --- a/code/modules/antagonists/heretic/magic/star_touch.dm +++ b/code/modules/antagonists/heretic/magic/star_touch.dm @@ -49,7 +49,7 @@ var/list/target_turfs = list(get_turf(owner)) var/range = ascended ? 2 : 1 var/list/directions = list(turn(owner.dir, 90), turn(owner.dir, 270)) - for (var/direction as anything in directions) + for (var/direction in directions) for (var/i in 1 to range) target_turfs += get_ranged_target_turf(owner, direction, i) return target_turfs diff --git a/code/modules/antagonists/heretic/magic/void_conduit.dm b/code/modules/antagonists/heretic/magic/void_conduit.dm index 65b433440f8..0b7d325e3f8 100644 --- a/code/modules/antagonists/heretic/magic/void_conduit.dm +++ b/code/modules/antagonists/heretic/magic/void_conduit.dm @@ -49,7 +49,7 @@ /obj/structure/void_conduit/proc/build_view_turfs() for(var/turf/affected_turf as anything in overlayed_turfs) affected_turf.cut_overlay(void_overlay) - for(var/turf/affected_turf as anything in view(effect_range, src)) + for(var/turf/affected_turf in view(effect_range, src)) if(!isopenturf(affected_turf)) continue affected_turf.add_overlay(void_overlay) @@ -72,7 +72,7 @@ ///Sends out a pulse /obj/structure/void_conduit/proc/do_conduit_pulse() var/list/turfs_to_affect = list() - for(var/turf/affected_turf as anything in view(effect_range, loc)) + for(var/turf/affected_turf in view(effect_range, loc)) var/distance = get_dist(loc, affected_turf) if(!turfs_to_affect["[distance]"]) turfs_to_affect["[distance]"] = list() diff --git a/code/modules/assembly/doorcontrol.dm b/code/modules/assembly/doorcontrol.dm index 33610283502..3e658d84770 100644 --- a/code/modules/assembly/doorcontrol.dm +++ b/code/modules/assembly/doorcontrol.dm @@ -3,23 +3,68 @@ desc = "A small electronic device able to control a blast door remotely." icon_state = "control" /// The ID of the blast door electronics to match to the ID of the blast door being used. - var/id = null + var/id = -1 /// Cooldown of the door's controller. Updates when pressed (activate()) var/cooldown = FALSE + /// Should we toggle open/close of doors based on their current state var/sync_doors = TRUE +/obj/item/assembly/control/Initialize(mapload) + . = ..() + register_context() + +/obj/item/assembly/control/add_context(atom/source, list/context, obj/item/held_item, mob/user) + . = NONE + if(istype(held_item, /obj/item/assembly/control)) + context[SCREENTIP_CONTEXT_LMB] = "Copy ID" + return CONTEXTUAL_SCREENTIP_SET + /obj/item/assembly/control/examine(mob/user) . = ..() if(id) - . += span_notice("Its channel ID is '[id]'.") + if(id != -1) + . += span_notice("Its channel ID is '[id]'.") + else + . += span_notice("Interact with pod door to generate an new id") + . += span_notice("You can interact with another controller to copy its ID.") /obj/item/assembly/control/multitool_act(mob/living/user) - var/change_id = tgui_input_number(user, "Set the door controllers ID", "Door ID", id, 100) - if(!change_id || QDELETED(user) || QDELETED(src) || !usr.can_perform_action(src, FORBID_TELEKINESIS_REACH)) + var/list/door_ids = list() + var/list/display_ids = list("UNIQUE") + for(var/obj/machinery/door/poddoor/M as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/door/poddoor)) + if(!M.id || (M.id in door_ids)) + continue + door_ids += "[M.id]" + if(M.owner?.resolve() != user) + continue + var/area/door_area = get_area(M) + display_ids += "[door_area.name]([M.id])" + + var/change_id = tgui_input_list(user, "Set Controller ID", "Controller ID", display_ids) + if(!change_id || QDELETED(user) || QDELETED(src) || !user.can_perform_action(src, FORBID_TELEKINESIS_REACH)) return - id = change_id + + if(change_id == "UNIQUE") + id = -1 + else + var/start = findtext(change_id, "(") + 1 + var/end = length(change_id) - 1 + if(start == end) + id = "[change_id[start]]" + else + id = copytext(change_id, start, end) balloon_alert(user, "id changed") - to_chat(user, span_notice("You change the ID to [id].")) + if(id != -1) + to_chat(user, span_notice("You change the ID to [id].")) + else + to_chat(user, span_notice("You now must interact with an pod door to generate an unique ID.")) + +/obj/item/assembly/control/interact_with_atom(obj/item/assembly/control/interacting_with, mob/living/user, list/modifiers) + . = NONE + if(istype(interacting_with)) + id = interacting_with.id + balloon_alert(user, "id changed") + return ITEM_INTERACT_SUCCESS /obj/item/assembly/control/activate() var/openclose diff --git a/code/modules/assembly/voice.dm b/code/modules/assembly/voice.dm index 62375dc0643..ebf9d71a8dd 100644 --- a/code/modules/assembly/voice.dm +++ b/code/modules/assembly/voice.dm @@ -33,7 +33,7 @@ . = ..() . += span_notice("Use a multitool to swap between \"inclusive\", \"exclusive\", \"recognizer\", and \"voice sensor\" mode.") -/obj/item/assembly/voice/Hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), message_range) +/obj/item/assembly/voice/Hear(atom/movable/speaker, message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), message_range) . = ..() if(message_mods[WHISPER_MODE] || message_mods[MODE_RELAY]) //Too quiet lad return FALSE @@ -90,7 +90,7 @@ return FALSE /obj/item/assembly/voice/proc/send_pulse() - visible_message("clicks", visible_message_flags = EMOTE_MESSAGE) + visible_message("clicks.", visible_message_flags = EMOTE_MESSAGE) playsound(src, 'sound/effects/whirthunk.ogg', 30) addtimer(CALLBACK(src, PROC_REF(pulse)), 2 SECONDS) diff --git a/code/modules/asset_cache/assets/plumbing.dm b/code/modules/asset_cache/assets/plumbing.dm index 176ba363446..19225184038 100644 --- a/code/modules/asset_cache/assets/plumbing.dm +++ b/code/modules/asset_cache/assets/plumbing.dm @@ -37,7 +37,6 @@ ), ) - for(var/icon_file as anything in essentials) - for(var/icon_state as anything in essentials[icon_file]) + for(var/icon_file in essentials) + for(var/icon_state in essentials[icon_file]) insert_icon(icon_state, uni_icon(icon_file, icon_state)) - diff --git a/code/modules/asset_cache/assets/rtd.dm b/code/modules/asset_cache/assets/rtd.dm index 0a600dffe6b..83b120ac7dc 100644 --- a/code/modules/asset_cache/assets/rtd.dm +++ b/code/modules/asset_cache/assets/rtd.dm @@ -11,7 +11,7 @@ populate_rtd_datums() var/datum/tile_info/tile_data = design["datum"] var/list/directions = tile_data.tile_directions_numbers || list(SOUTH) - for(var/direction as anything in directions) + for(var/direction in directions) var/sprite_name = sanitize_css_class_name("[tile_data.icon_file]-[tile_data.icon_state]-[dir2text(direction)]") if(registered[sprite_name]) continue diff --git a/code/modules/atmospherics/machinery/air_alarm/air_alarm_circuit.dm b/code/modules/atmospherics/machinery/air_alarm/air_alarm_circuit.dm index 5263ae26c6d..74f260976d5 100644 --- a/code/modules/atmospherics/machinery/air_alarm/air_alarm_circuit.dm +++ b/code/modules/atmospherics/machinery/air_alarm/air_alarm_circuit.dm @@ -351,7 +351,7 @@ . = ..() var/static/list/meta_data = list() if(length(meta_data) == 0) - for(var/typepath as anything in GLOB.meta_gas_info) + for(var/typepath in GLOB.meta_gas_info) meta_data += GLOB.meta_gas_info[typepath][META_GAS_ID] . += create_table_notices(meta_data, column_name = "Gas", column_name_plural = "Gases") diff --git a/code/modules/bitrunning/objects/gimmick_disks/sports_disk.dm b/code/modules/bitrunning/objects/gimmick_disks/sports_disk.dm index ff70679e667..7024a9a4065 100644 --- a/code/modules/bitrunning/objects/gimmick_disks/sports_disk.dm +++ b/code/modules/bitrunning/objects/gimmick_disks/sports_disk.dm @@ -94,6 +94,6 @@ /obj/item/modular_computer/laptop/gamer/install_default_programs() // Only install starting programs, we don't want the software downloading program from default programs - for(var/programs as anything in starting_programs) + for(var/programs in starting_programs) var/datum/computer_file/program/program_type = new programs store_file(program_type) diff --git a/code/modules/bitrunning/outfits.dm b/code/modules/bitrunning/outfits.dm index 0da85853f51..f17d02903ec 100644 --- a/code/modules/bitrunning/outfits.dm +++ b/code/modules/bitrunning/outfits.dm @@ -43,7 +43,7 @@ /// Corresponding ammo var/list/corresponding_ammo = list( /obj/item/ammo_box/magazine/m9mm, - /obj/item/ammo_box/strilka310, + /obj/item/ammo_box/speedloader/strilka310, /obj/item/ammo_box/magazine/uzim9mm, /obj/item/ammo_box/magazine/m50, /obj/item/food/pizzaslice/dank, // more silly, less destructive diff --git a/code/modules/cargo/goodies.dm b/code/modules/cargo/goodies.dm index 6d481ab02c5..be625cefdaa 100644 --- a/code/modules/cargo/goodies.dm +++ b/code/modules/cargo/goodies.dm @@ -17,21 +17,21 @@ desc = "Contains one speedloader of .38 DumDum ammunition, good for embedding in soft targets." cost = PAYCHECK_CREW * 2 access_view = ACCESS_WEAPONS - contains = list(/obj/item/ammo_box/c38/dumdum) + contains = list(/obj/item/ammo_box/speedloader/c38/dumdum) /datum/supply_pack/goody/match38 name = ".38 Match Grade Speedloader Single-Pack" desc = "Contains one speedloader of match grade .38 ammunition, perfect for showing off trickshots." cost = PAYCHECK_CREW * 2 access_view = ACCESS_WEAPONS - contains = list(/obj/item/ammo_box/c38/match) + contains = list(/obj/item/ammo_box/speedloader/c38/match) /datum/supply_pack/goody/rubber name = ".38 Rubber Speedloader Single-Pack" desc = "Contains one speedloader of bouncy rubber .38 ammunition, for when you want to bounce your shots off anything and everything." cost = PAYCHECK_CREW * 1.5 access_view = ACCESS_WEAPONS - contains = list(/obj/item/ammo_box/c38/match/bouncy) + contains = list(/obj/item/ammo_box/speedloader/c38/match/bouncy) /datum/supply_pack/goody/dumdum38br name = ".38 DumDum Magazine Single-Pack" diff --git a/code/modules/cargo/markets/market_items/consumables.dm b/code/modules/cargo/markets/market_items/consumables.dm index e06a9fc0fdb..a063f5c3c38 100644 --- a/code/modules/cargo/markets/market_items/consumables.dm +++ b/code/modules/cargo/markets/market_items/consumables.dm @@ -27,7 +27,7 @@ var/static/list/choices if(isnull(choices)) choices = list() - for(var/boxtype as anything in typesof(/obj/item/storage/box/donkpockets)) + for(var/boxtype in typesof(/obj/item/storage/box/donkpockets)) choices[boxtype] = 3 choices[/obj/item/storage/box/donkpockets/donkpocketgondola] = 1 item = pick_weight(choices) diff --git a/code/modules/cargo/order.dm b/code/modules/cargo/order.dm index 20b31620e5f..275248fed67 100644 --- a/code/modules/cargo/order.dm +++ b/code/modules/cargo/order.dm @@ -205,7 +205,7 @@ return /datum/supply_order/proc/append_order(list/new_contents, cost_increase) - for(var/i as anything in new_contents) + for(var/i in new_contents) if(pack.contains[i]) pack.contains[i] += new_contents[i] else diff --git a/code/modules/cargo/packs/imports.dm b/code/modules/cargo/packs/imports.dm index 111288a28f6..453e1cfeaac 100644 --- a/code/modules/cargo/packs/imports.dm +++ b/code/modules/cargo/packs/imports.dm @@ -226,8 +226,8 @@ cost = CARGO_CRATE_VALUE * 12 contains = list( /obj/item/food/rationpack, - /obj/item/ammo_box/strilka310, - /obj/item/ammo_box/strilka310/surplus, + /obj/item/ammo_box/speedloader/strilka310, + /obj/item/ammo_box/speedloader/strilka310/surplus, /obj/effect/spawner/random/armory/strilka, /obj/item/gun_maintenance_supplies, /obj/item/clothing/suit/armor/vest/russian, diff --git a/code/modules/cargo/packs/organic.dm b/code/modules/cargo/packs/organic.dm index 5ef762c5f7c..0b935f9fa36 100644 --- a/code/modules/cargo/packs/organic.dm +++ b/code/modules/cargo/packs/organic.dm @@ -366,3 +366,33 @@ ) crate_name = "illegal syrups box" crate_type = /obj/structure/closet/crate/cardboard + +/datum/supply_pack/organic/cooking_oil + name = "Cooking Oil Vat" + desc = "This high-grade cooking oil can make almost anything edible. \ + From a plasma cutter to a Syndicate bomb, if it fits in the fryer, it's a snack. \ + Contains a vat of cooking oil." + cost = CARGO_CRATE_VALUE * 4.75 + contains = list(/obj/structure/reagent_dispensers/cooking_oil) + crate_name = "cooking oil crate" + crate_type = /obj/structure/closet/crate/wooden + +/datum/supply_pack/organic/beer_keg + name = "Beer Keg" + desc = "The perfect way to start your shift... or end it. \ + Contains a full barrel of Nanotrasen brewed, low-grade alcoholic beverage, \ + perfect for getting loose after a hard day of not dying." + cost = CARGO_CRATE_VALUE * 6.25 + contains = list(/obj/structure/reagent_dispensers/beerkeg) + crate_name = "beer keg crate" + crate_type = /obj/structure/closet/crate/wooden + +/datum/supply_pack/organic/nutraslop + name = "Nutraslop Serving Dish" + desc = "A culinary masterpiece created from all of Nanotrasen's previous culinary... innovations. \ + A single bite will transport you back to the taste of yesterday's prison rations. \ + Contains a serving dish filled with Nutraslop." + cost = CARGO_CRATE_VALUE * 4 + contains = list(/obj/structure/reagent_dispensers/servingdish) + crate_name = "nutraslop serving dish crate" + diff --git a/code/modules/cargo/packs/security.dm b/code/modules/cargo/packs/security.dm index 409c746aad5..41942e1ba47 100644 --- a/code/modules/cargo/packs/security.dm +++ b/code/modules/cargo/packs/security.dm @@ -11,9 +11,9 @@ access_view = ACCESS_ARMORY contains = list(/obj/item/storage/box/beanbag = 3, /obj/item/storage/box/rubbershot = 3, - /obj/item/ammo_box/c38/trac, - /obj/item/ammo_box/c38/hotshot, - /obj/item/ammo_box/c38/iceblox, + /obj/item/ammo_box/speedloader/c38/trac, + /obj/item/ammo_box/speedloader/c38/hotshot, + /obj/item/ammo_box/speedloader/c38/iceblox, ) crate_name = "ammo crate" @@ -321,7 +321,7 @@ desc = "Contains four tracking implants and three tracking speedloaders of tracing .38 ammo." cost = CARGO_CRATE_VALUE * 4.5 contains = list(/obj/item/storage/box/trackimp, - /obj/item/ammo_box/c38/trac = 3, + /obj/item/ammo_box/speedloader/c38/trac = 3, ) crate_name = "tracking implant crate" diff --git a/code/modules/client/preferences/migrations/sound_checkboxes_migration.dm b/code/modules/client/preferences/migrations/sound_checkboxes_migration.dm index ca0d583f650..82c68964c1b 100644 --- a/code/modules/client/preferences/migrations/sound_checkboxes_migration.dm +++ b/code/modules/client/preferences/migrations/sound_checkboxes_migration.dm @@ -31,7 +31,7 @@ /datum/preference/numeric/volume/sound_radio_noise = savefile.get_entry("sound_radio_noise"), ) - for(var/entry as anything in entries) + for(var/entry in entries) var/pref_data = entries[entry] if(pref_data <= 1) pref_data *= 100 diff --git a/code/modules/client/preferences/multiz_parallax.dm b/code/modules/client/preferences/multiz_parallax.dm index dab945e4bb3..df78d84f167 100644 --- a/code/modules/client/preferences/multiz_parallax.dm +++ b/code/modules/client/preferences/multiz_parallax.dm @@ -11,6 +11,6 @@ if(!my_hud) return - for(var/group_key as anything in my_hud.master_groups) + for(var/group_key in my_hud.master_groups) var/datum/plane_master_group/group = my_hud.master_groups[group_key] group.build_planes_offset(my_hud, my_hud.current_plane_offset) diff --git a/code/modules/client/preferences/multiz_performance.dm b/code/modules/client/preferences/multiz_performance.dm index f4575357e34..5579c5fed52 100644 --- a/code/modules/client/preferences/multiz_performance.dm +++ b/code/modules/client/preferences/multiz_performance.dm @@ -16,6 +16,6 @@ if(!my_hud) return - for(var/group_key as anything in my_hud.master_groups) + for(var/group_key in my_hud.master_groups) var/datum/plane_master_group/group = my_hud.master_groups[group_key] group.build_planes_offset(my_hud, my_hud.current_plane_offset) diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm index 79b5c263f52..4c0c9af89f2 100644 --- a/code/modules/clothing/glasses/hud.dm +++ b/code/modules/clothing/glasses/hud.dm @@ -42,13 +42,13 @@ /obj/item/clothing/glasses/hud/proc/toggle_hud_display(mob/living/carbon/eye_owner) if(display_active) display_active = FALSE - for(var/hud_trait as anything in clothing_traits) + for(var/hud_trait in clothing_traits) REMOVE_CLOTHING_TRAIT(eye_owner, hud_trait) balloon_alert(eye_owner, "hud disabled") return display_active = TRUE - for(var/hud_trait as anything in clothing_traits) + for(var/hud_trait in clothing_traits) ADD_CLOTHING_TRAIT(eye_owner, hud_trait) balloon_alert(eye_owner, "hud enabled") diff --git a/code/modules/clothing/head/hat.dm b/code/modules/clothing/head/hat.dm index 65c076005a0..2577e6731dd 100644 --- a/code/modules/clothing/head/hat.dm +++ b/code/modules/clothing/head/hat.dm @@ -369,7 +369,7 @@ icon_state = "/obj/item/clothing/head/costume/ushanka/sec" desc = "A warm and comfortable ushanka, dyed with 'all natural flavors' according to the tag." greyscale_colors = "#C7B08B#A52F29" - armor_type = /datum/armor/head_helmet + armor_type = /datum/armor/cosmetic_sec flags_1 = null /obj/item/clothing/head/costume/nightcap diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm index be5c86740c3..61285e3801b 100644 --- a/code/modules/clothing/head/jobs.dm +++ b/code/modules/clothing/head/jobs.dm @@ -220,12 +220,12 @@ /// Now to solve where all these keep coming from /obj/item/clothing/head/fedora/det_hat/click_alt(mob/user) if(!COOLDOWN_FINISHED(src, candy_cooldown)) - to_chat(user, span_warning("You just took a candy corn! You should wait a couple minutes, lest you burn through your stash.")) + to_chat(user, span_warning("A candy corn was just taken! You should wait a couple minutes, lest you burn through the stash.")) return CLICK_ACTION_BLOCKING var/obj/item/food/candy_corn/sweets = new /obj/item/food/candy_corn(src) user.put_in_hands(sweets) - to_chat(user, span_notice("You slip a candy corn from your hat.")) + to_chat(user, span_notice("You slip a candy corn from \the [src].")) COOLDOWN_START(src, candy_cooldown, CANDY_CD_TIME) return CLICK_ACTION_SUCCESS @@ -292,7 +292,7 @@ var/obj/item/found_item = items_by_regex[found_regex] . += span_notice("[icon2html(found_item, user)] You can remove [found_item] by saying \"[prefix] [found_phrase]\"!") -/obj/item/clothing/head/fedora/inspector_hat/Hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), message_range) +/obj/item/clothing/head/fedora/inspector_hat/Hear(atom/movable/speaker, message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), message_range) . = ..() var/mob/living/carbon/wearer = loc if(!istype(wearer) || speaker != wearer) //if we are worn diff --git a/code/modules/clothing/outfits/ert.dm b/code/modules/clothing/outfits/ert.dm index 9effcaef69a..63c60645635 100644 --- a/code/modules/clothing/outfits/ert.dm +++ b/code/modules/clothing/outfits/ert.dm @@ -304,8 +304,8 @@ glasses = /obj/item/clothing/glasses/sunglasses gloves = /obj/item/clothing/gloves/color/black shoes = /obj/item/clothing/shoes/sneakers/black - l_pocket = /obj/item/ammo_box/strilka310 - r_pocket = /obj/item/ammo_box/strilka310 + l_pocket = /obj/item/ammo_box/speedloader/strilka310 + r_pocket = /obj/item/ammo_box/speedloader/strilka310 l_hand = /obj/item/gun/ballistic/rifle/boltaction /datum/outfit/centcom/centcom_intern/post_equip(mob/living/carbon/human/H, visuals_only = FALSE) @@ -434,7 +434,7 @@ back = /obj/item/mod/control/pre_equipped/apocryphal box = /obj/item/storage/box/survival/centcom backpack_contents = list( - /obj/item/ammo_box/a357 = 1, + /obj/item/ammo_box/speedloader/c357 = 1, /obj/item/flashlight = 1, /obj/item/grenade/c4/x4 = 1, /obj/item/storage/box/flashbangs = 1, diff --git a/code/modules/clothing/outfits/standard.dm b/code/modules/clothing/outfits/standard.dm index 2aa79e3706b..2730af4c636 100644 --- a/code/modules/clothing/outfits/standard.dm +++ b/code/modules/clothing/outfits/standard.dm @@ -221,7 +221,7 @@ sec_briefcase.contents += new /obj/item/stack/spacecash/c1000 sec_briefcase.contents += new /obj/item/gun/energy/recharge/ebow sec_briefcase.contents += new /obj/item/gun/ballistic/revolver/mateba - sec_briefcase.contents += new /obj/item/ammo_box/a357 + sec_briefcase.contents += new /obj/item/ammo_box/speedloader/c357 sec_briefcase.contents += new /obj/item/grenade/c4/x4 var/obj/item/modular_computer/pda/heads/pda = H.belt @@ -247,7 +247,7 @@ head = /obj/item/clothing/head/hats/centhat mask = /obj/item/cigarette/cigar/cohiba shoes = /obj/item/clothing/shoes/combat/swat - l_pocket = /obj/item/ammo_box/a357 + l_pocket = /obj/item/ammo_box/speedloader/c357 r_pocket = /obj/item/lighter /datum/outfit/centcom/commander/post_equip(mob/living/carbon/human/H, visuals_only = FALSE) diff --git a/code/modules/deathmatch/deathmatch_loadouts.dm b/code/modules/deathmatch/deathmatch_loadouts.dm index aa33df6fde8..8a6ab4a8c0a 100644 --- a/code/modules/deathmatch/deathmatch_loadouts.dm +++ b/code/modules/deathmatch/deathmatch_loadouts.dm @@ -168,7 +168,7 @@ gloves = /obj/item/clothing/gloves/tackler/combat/insulated backpack_contents = list( /obj/item/grenade/smokebomb = 2, - /obj/item/ammo_box/strilka310 = 2, + /obj/item/ammo_box/speedloader/strilka310 = 2, ) /datum/outfit/deathmatch_loadout/battler/druid @@ -1054,8 +1054,8 @@ belt = /obj/item/storage/belt/unfathomable_curio gloves = null shoes = /obj/item/clothing/shoes/winterboots/ice_boots - l_pocket = /obj/item/ammo_box/strilka310/lionhunter - r_pocket = /obj/item/ammo_box/strilka310/lionhunter + l_pocket = /obj/item/ammo_box/speedloader/strilka310/lionhunter + r_pocket = /obj/item/ammo_box/speedloader/strilka310/lionhunter back = /obj/item/gun/ballistic/rifle/lionhunter // for his neutral b, he wields a gun diff --git a/code/modules/detectivework/scanner.dm b/code/modules/detectivework/scanner.dm index 57bd2735707..a686bc9c90a 100644 --- a/code/modules/detectivework/scanner.dm +++ b/code/modules/detectivework/scanner.dm @@ -156,11 +156,13 @@ log_entry_data["scan_target"] = scanned_atom.name log_entry_data["scan_time"] = station_time_timestamp() - log_entry_data[DETSCAN_CATEGORY_FIBER] = GET_ATOM_FIBRES(scanned_atom) + var/list/atom_fibers = GET_ATOM_FIBRES(scanned_atom) + if(length(atom_fibers)) + log_entry_data[DETSCAN_CATEGORY_FIBER] = atom_fibers.Copy() var/list/blood = GET_ATOM_BLOOD_DNA(scanned_atom) if(length(blood)) - LAZYADD(log_entry_data[DETSCAN_CATEGORY_BLOOD], blood) + log_entry_data[DETSCAN_CATEGORY_BLOOD] = blood.Copy() if(ishuman(scanned_atom)) var/mob/living/carbon/human/scanned_human = scanned_atom @@ -169,7 +171,9 @@ else if(!ismob(scanned_atom)) - log_entry_data[DETSCAN_CATEGORY_FINGERS] = GET_ATOM_FINGERPRINTS(scanned_atom) + var/list/atom_fingerprints = GET_ATOM_FINGERPRINTS(scanned_atom) + if(length(atom_fingerprints)) + log_entry_data[DETSCAN_CATEGORY_FINGERS] = atom_fingerprints.Copy() // Only get reagents from non-mobs. for(var/datum/reagent/present_reagent as anything in scanned_atom.reagents?.reagent_list) @@ -184,7 +188,10 @@ if(!blood_DNA || !blood_type) continue - LAZYSET(blood, blood_DNA, blood_type) + // Add to our copied blood list instead of the original + if(!log_entry_data[DETSCAN_CATEGORY_BLOOD]) + log_entry_data[DETSCAN_CATEGORY_BLOOD] = list() + LAZYSET(log_entry_data[DETSCAN_CATEGORY_BLOOD], blood_DNA, blood_type) if(istype(scanned_atom, /obj/item/card/id)) var/obj/item/card/id/user_id = scanned_atom diff --git a/code/modules/discord/discord_embed.dm b/code/modules/discord/discord_embed.dm index cae7d9ade6a..6733a1bd748 100644 --- a/code/modules/discord/discord_embed.dm +++ b/code/modules/discord/discord_embed.dm @@ -70,7 +70,7 @@ ) if(fields) data_to_list["fields"] = list() - for(var/data as anything in fields) + for(var/data in fields) if(!fields[data]) continue data_to_list["fields"] += list(list( diff --git a/code/modules/fishing/fish/chasm_detritus.dm b/code/modules/fishing/fish/chasm_detritus.dm index 05db9571004..034471147d8 100644 --- a/code/modules/fishing/fish/chasm_detritus.dm +++ b/code/modules/fishing/fish/chasm_detritus.dm @@ -68,7 +68,7 @@ GLOBAL_LIST_INIT_TYPED(chasm_detritus_types, /datum/chasm_detritus, init_chasm_d /datum/chasm_detritus/proc/get_chasm_contents(turf/fishing_spot) . = list() for(var/obj/effect/abstract/chasm_storage/storage in range(5, fishing_spot)) - for (var/thing as anything in storage.contents) + for (var/thing in storage.contents) . += thing /// Variant of the chasm detritus that allows for an easier time at fishing out @@ -81,7 +81,7 @@ GLOBAL_LIST_INIT_TYPED(chasm_detritus_types, /datum/chasm_detritus, init_chasm_d /datum/chasm_detritus/restricted/get_chasm_contents(turf/fishing_spot) . = list() for(var/obj/effect/abstract/chasm_storage/storage in range(5, fishing_spot)) - for (var/thing as anything in storage.contents) + for (var/thing in storage.contents) if(!istype(thing, chasm_storage_restricted_type)) continue . += thing diff --git a/code/modules/fishing/fish/fish_traits.dm b/code/modules/fishing/fish/fish_traits.dm index d81cde8f85d..e5ea3d97807 100644 --- a/code/modules/fishing/fish/fish_traits.dm +++ b/code/modules/fishing/fish/fish_traits.dm @@ -9,7 +9,7 @@ GLOBAL_LIST_INIT(spontaneous_fish_traits, populate_spontaneous_fish_traits()) /proc/populate_spontaneous_fish_traits() var/list/list = list() - for(var/trait_path as anything in GLOB.fish_traits) + for(var/trait_path in GLOB.fish_traits) var/datum/fish_trait/trait = GLOB.fish_traits[trait_path] if(isnull(trait.spontaneous_manifest_types)) continue diff --git a/code/modules/fishing/sources/_fish_source.dm b/code/modules/fishing/sources/_fish_source.dm index e9c0e7b1a6f..c0ac2418eb9 100644 --- a/code/modules/fishing/sources/_fish_source.dm +++ b/code/modules/fishing/sources/_fish_source.dm @@ -616,7 +616,7 @@ GLOBAL_LIST_INIT(specific_fish_icons, generate_specific_fish_icons()) table_copy -= FISHING_DUD var/exponent = weight_leveling_exponents[trait] var/multiplier = weight_result_multiplier[trait] - for(var/fish as anything in table_copy) + for(var/fish in table_copy) if(!ispath(fish, /obj/item/fish)) continue table_copy[fish] = round(table_copy[fish] * multiplier, 1) diff --git a/code/modules/fishing/sources/subtypes/fishing_portal_machine.dm b/code/modules/fishing/sources/subtypes/fishing_portal_machine.dm index f2db96d77d0..df8ce18990a 100644 --- a/code/modules/fishing/sources/subtypes/fishing_portal_machine.dm +++ b/code/modules/fishing/sources/subtypes/fishing_portal_machine.dm @@ -205,7 +205,7 @@ var/static/list/weighted_traits if(!weighted_traits) weighted_traits = list() - for(var/trait_type as anything in GLOB.fish_traits) + for(var/trait_type in GLOB.fish_traits) var/datum/fish_trait/trait = GLOB.fish_traits[trait_type] weighted_traits[trait.type] = round(trait.inheritability**2/100) diff --git a/code/modules/food_and_drinks/recipes/soup_mixtures.dm b/code/modules/food_and_drinks/recipes/soup_mixtures.dm index 264fc50f469..ff9e49dbffc 100644 --- a/code/modules/food_and_drinks/recipes/soup_mixtures.dm +++ b/code/modules/food_and_drinks/recipes/soup_mixtures.dm @@ -130,7 +130,7 @@ created.pixel_y += 8 // Re-add required reagents that were not used in this step if(created_volume > ingredient_max_multiplier) - for(var/reagent_path as anything in required_reagents) + for(var/reagent_path in required_reagents) holder.add_reagent(reagent_path,(required_reagents[reagent_path])*(created_volume-ingredient_max_multiplier)) diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_guide.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_guide.dm index 313eb635853..435ba95f66f 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_guide.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_guide.dm @@ -9,13 +9,9 @@ ) result = /obj/item/knife/shiv category = CAT_WEAPON_MELEE + non_craftable = TRUE steps = list("Use cloth on a glass shard of any type") -/datum/crafting_recipe/restraints - reqs = list(/obj/item/stack/cable_coil = 15) - result = /obj/item/restraints/handcuffs/cable - category = CAT_TOOLS - /datum/crafting_recipe/runed_metal reqs = list(/obj/item/stack/sheet/plasteel = 1) requirements_mats_blacklist = list(/obj/item/stack/sheet/plasteel) // runed metal has its own material diff --git a/code/modules/food_and_drinks/restaurant/custom_order.dm b/code/modules/food_and_drinks/restaurant/custom_order.dm index c4e8861ade5..b860829c98f 100644 --- a/code/modules/food_and_drinks/restaurant/custom_order.dm +++ b/code/modules/food_and_drinks/restaurant/custom_order.dm @@ -96,7 +96,7 @@ if(prob(33)) cone_type = /obj/item/food/icecream/chocolate var/static/list/possible_flavors = list() - for(var/flavour as anything in GLOB.ice_cream_flavours) + for(var/flavour in GLOB.ice_cream_flavours) //only request standard flavors that are available from the ice cream vat if(!GLOB.ice_cream_flavours[flavour].hidden && flavour != ICE_CREAM_CUSTOM) possible_flavors += flavour diff --git a/code/modules/jobs/job_types/detective.dm b/code/modules/jobs/job_types/detective.dm index d467bebac4c..087c237eac3 100644 --- a/code/modules/jobs/job_types/detective.dm +++ b/code/modules/jobs/job_types/detective.dm @@ -29,12 +29,12 @@ mail_goodies = list( /obj/item/storage/fancy/cigarettes = 25, - /obj/item/ammo_box/c38 = 20, - /obj/item/ammo_box/c38/dumdum = 5, - /obj/item/ammo_box/c38/hotshot = 5, - /obj/item/ammo_box/c38/iceblox = 5, - /obj/item/ammo_box/c38/match = 5, - /obj/item/ammo_box/c38/trac = 5, + /obj/item/ammo_box/speedloader/c38 = 20, + /obj/item/ammo_box/speedloader/c38/dumdum = 5, + /obj/item/ammo_box/speedloader/c38/hotshot = 5, + /obj/item/ammo_box/speedloader/c38/iceblox = 5, + /obj/item/ammo_box/speedloader/c38/match = 5, + /obj/item/ammo_box/speedloader/c38/trac = 5, /obj/item/card/id/advanced/plainclothes = 5, /obj/item/storage/belt/holster/detective/full = 1, ) diff --git a/code/modules/jobs/job_types/janitor.dm b/code/modules/jobs/job_types/janitor.dm index 13a3496c609..2cf5997d32b 100644 --- a/code/modules/jobs/job_types/janitor.dm +++ b/code/modules/jobs/job_types/janitor.dm @@ -47,10 +47,10 @@ . = ..() if(check_holidays(GARBAGEDAY)) backpack_contents += list(/obj/item/gun/ballistic/revolver) - r_pocket = /obj/item/ammo_box/a357 + r_pocket = /obj/item/ammo_box/speedloader/c357 /datum/outfit/job/janitor/get_types_to_preload() . = ..() if(check_holidays(GARBAGEDAY)) . += /obj/item/gun/ballistic/revolver - . += /obj/item/ammo_box/a357 + . += /obj/item/ammo_box/speedloader/c357 diff --git a/code/modules/library/admin_only.dm b/code/modules/library/admin_only.dm index 847f28070e6..d81a26f2172 100644 --- a/code/modules/library/admin_only.dm +++ b/code/modules/library/admin_only.dm @@ -140,7 +140,7 @@ .["view_raw"] = view_raw .["show_deleted"] = show_deleted var/list/histories = list() - for(var/id as anything in book_history) + for(var/id in book_history) var/list/insert = list() for(var/datum/book_history_entry/entry in book_history[id]) insert += list(entry.serialize()) diff --git a/code/modules/mining/lavaland/mining_loot/megafauna/colossus.dm b/code/modules/mining/lavaland/mining_loot/megafauna/colossus.dm index 4215f6c1a53..10c37355495 100644 --- a/code/modules/mining/lavaland/mining_loot/megafauna/colossus.dm +++ b/code/modules/mining/lavaland/mining_loot/megafauna/colossus.dm @@ -112,7 +112,7 @@ . += observer_desc . += "It is activated by [activation_method]." -/obj/machinery/anomalous_crystal/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq, radio_freq_name, radio_freq_color, spans, list/message_mods = list(), message_range) +/obj/machinery/anomalous_crystal/Hear(atom/movable/speaker, message_langs, raw_message, radio_freq, radio_freq_name, radio_freq_color, spans, list/message_mods = list(), message_range) . = ..() if(isliving(speaker)) ActivationReaction(speaker, ACTIVATE_SPEECH) diff --git a/code/modules/mining/ores_coins.dm b/code/modules/mining/ores_coins.dm index 8582a1c3c86..db734992c61 100644 --- a/code/modules/mining/ores_coins.dm +++ b/code/modules/mining/ores_coins.dm @@ -107,6 +107,7 @@ singular_name = "sand pile" points = 1 mats_per_unit = list(/datum/material/sand = SHEET_MATERIAL_AMOUNT) + material_type = /datum/material/sand refined_type = /obj/item/stack/sheet/glass w_class = WEIGHT_CLASS_TINY mine_experience = 0 //its sand @@ -123,7 +124,7 @@ GLOBAL_LIST_INIT(sand_recipes, list(\ AddComponent(/datum/component/storm_hating) /obj/item/stack/ore/glass/on_orm_collection() //we need to smelt the glass beforehand because the silo and orm don't accept sand mats - var/obj/item/stack/sheet/glass = new refined_type(drop_location(), amount) + var/obj/item/stack/sheet/glass = new refined_type(drop_location(), amount, merge = FALSE) //The newly spawned glass should not merge with other stacks on the turf, else it could cause issues. qdel(src) return glass diff --git a/code/modules/mob/dead/new_player/preferences_setup.dm b/code/modules/mob/dead/new_player/preferences_setup.dm index 17e9bf65919..87f730ad325 100644 --- a/code/modules/mob/dead/new_player/preferences_setup.dm +++ b/code/modules/mob/dead/new_player/preferences_setup.dm @@ -121,7 +121,7 @@ if(SSquirks?.initialized) // And yes we need to clean all the quirk datums every time mannequin.cleanse_quirk_datums() - for(var/quirk_name as anything in all_quirks) + for(var/quirk_name in all_quirks) var/datum/quirk/quirk_type = SSquirks.quirks[quirk_name] if(!(initial(quirk_type.quirk_flags) & QUIRK_CHANGES_APPEARANCE)) continue diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index db9ded291ca..9137c259f37 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -146,7 +146,8 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) show_data_huds() SSpoints_of_interest.make_point_of_interest(src) - ADD_TRAIT(src, TRAIT_HEAR_THROUGH_DARKNESS, ref(src)) + ADD_TRAIT(src, TRAIT_HEAR_THROUGH_DARKNESS, INNATE_TRAIT) + ADD_TRAIT(src, TRAIT_GOOD_HEARING, INNATE_TRAIT) /mob/dead/observer/get_photo_description(obj/item/camera/camera) if(!invisibility || camera.see_ghosts) diff --git a/code/modules/mob/dead/observer/observer_say.dm b/code/modules/mob/dead/observer/observer_say.dm index d88271cfe44..2c9c37dd79a 100644 --- a/code/modules/mob/dead/observer/observer_say.dm +++ b/code/modules/mob/dead/observer/observer_say.dm @@ -58,7 +58,7 @@ . = say_dead(message) -/mob/dead/observer/Hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), message_range) +/mob/dead/observer/Hear(atom/movable/speaker, message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), message_range) . = ..() var/atom/movable/to_follow = speaker if(radio_freq) @@ -74,7 +74,7 @@ if (safe_read_pref(client, /datum/preference/toggle/enable_runechat) && (safe_read_pref(client, /datum/preference/toggle/enable_runechat_non_mobs) || ismob(speaker))) create_chat_message(speaker, message_language, raw_message, spans) // Recompose the message, because it's scrambled by default - message = compose_message(speaker, message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, spans, message_mods) + var/message = compose_message(speaker, message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, spans, message_mods) to_chat(src, html = "[link] [message]", avoid_highlighting = speaker == src) diff --git a/code/modules/mob/living/basic/guardian/guardian_creator.dm b/code/modules/mob/living/basic/guardian/guardian_creator.dm index 9c001af82f5..7dddd03f685 100644 --- a/code/modules/mob/living/basic/guardian/guardian_creator.dm +++ b/code/modules/mob/living/basic/guardian/guardian_creator.dm @@ -28,7 +28,7 @@ GLOBAL_LIST_INIT(guardian_radial_images, setup_guardian_radial()) /// Failure message if no ghost picks the holopara. var/failure_message = span_boldholoparasite("..And draw a card! It's... blank? Maybe you should try again later.") /// Failure message if we don't allow lings. - var/ling_failure = span_boldholoparasite("The deck refuses to respond to a souless creature such as you.") + var/ling_failure = span_boldholoparasite("The deck refuses to respond to a soulless creature such as you.") /// Message sent if we successfully get a guardian. var/success_message = span_holoparasite("%GUARDIAN has been summoned!") /// If true, you are given a random guardian rather than picking from a selection. diff --git a/code/modules/mob/living/basic/jungle/seedling/seedling.dm b/code/modules/mob/living/basic/jungle/seedling/seedling.dm index 0d74cf6b171..8629d6c84cc 100644 --- a/code/modules/mob/living/basic/jungle/seedling/seedling.dm +++ b/code/modules/mob/living/basic/jungle/seedling/seedling.dm @@ -19,8 +19,8 @@ mob_biotypes = MOB_ORGANIC | MOB_PLANT maxHealth = 100 health = 100 - pixel_y = -14 - base_pixel_y = -14 + pixel_z = -14 + base_pixel_z = -14 pixel_x = -14 base_pixel_x = -14 response_harm_continuous = "strikes" diff --git a/code/modules/mob/living/basic/lavaland/mook/mook.dm b/code/modules/mob/living/basic/lavaland/mook/mook.dm index 0bc66afcd72..a2cccfdbe89 100644 --- a/code/modules/mob/living/basic/lavaland/mook/mook.dm +++ b/code/modules/mob/living/basic/lavaland/mook/mook.dm @@ -22,8 +22,8 @@ speed = 5 pixel_x = -16 base_pixel_x = -16 - pixel_y = -16 - base_pixel_y = -16 + pixel_z = -16 + base_pixel_z = -16 ///the state of combat we are in var/attack_state = MOOK_ATTACK_NEUTRAL diff --git a/code/modules/mob/living/basic/lavaland/mook/mook_abilities.dm b/code/modules/mob/living/basic/lavaland/mook/mook_abilities.dm index 6149f552d81..44f84da8fa7 100644 --- a/code/modules/mob/living/basic/lavaland/mook/mook_abilities.dm +++ b/code/modules/mob/living/basic/lavaland/mook/mook_abilities.dm @@ -134,8 +134,8 @@ layer = BELOW_MOB_LAYER plane = GAME_PLANE pixel_x = -16 - pixel_y = -16 - base_pixel_y = -16 + pixel_z = -16 + base_pixel_z = -16 base_pixel_x = -16 duration = 1 SECONDS diff --git a/code/modules/mob/living/basic/lavaland/raptor/_raptor.dm b/code/modules/mob/living/basic/lavaland/raptor/_raptor.dm index fac1b72df41..10dab01c8c7 100644 --- a/code/modules/mob/living/basic/lavaland/raptor/_raptor.dm +++ b/code/modules/mob/living/basic/lavaland/raptor/_raptor.dm @@ -18,6 +18,9 @@ GLOBAL_LIST_EMPTY(raptor_population) #define HAPPINESS_BOOST_DAMPENER 0.3 +/// Innate raptor offsets +#define RAPTOR_INNATE_SOURCE "raptor_innate" + /mob/living/basic/raptor name = "raptor" desc = "A trusty, powerful steed. Taming it might prove difficult..." @@ -151,17 +154,13 @@ GLOBAL_LIST_EMPTY(raptor_population) switch (direction) if (NORTH) - pixel_x = -8 - pixel_y = -5 + add_offsets(RAPTOR_INNATE_SOURCE, w_add = -8, animate = FALSE) if (SOUTH) - pixel_x = 0 - pixel_y = 0 + add_offsets(RAPTOR_INNATE_SOURCE, w_add = 0, animate = FALSE) if (EAST, SOUTHEAST, NORTHEAST) - pixel_x = -20 - pixel_y = 0 + add_offsets(RAPTOR_INNATE_SOURCE, w_add = -20, animate = FALSE) if (WEST, SOUTHWEST, NORTHWEST) - pixel_x = -5 - pixel_y = 0 + add_offsets(RAPTOR_INNATE_SOURCE, w_add = -5, animate = FALSE) /mob/living/basic/raptor/early_melee_attack(atom/target, list/modifiers, ignore_cooldown) . = ..() @@ -344,3 +343,4 @@ GLOBAL_LIST_EMPTY(raptor_population) return NONE #undef HAPPINESS_BOOST_DAMPENER +#undef RAPTOR_INNATE_SOURCE diff --git a/code/modules/mob/living/basic/stoats/stoat.dm b/code/modules/mob/living/basic/stoats/stoat.dm index a401c42d481..25d077dc54b 100644 --- a/code/modules/mob/living/basic/stoats/stoat.dm +++ b/code/modules/mob/living/basic/stoats/stoat.dm @@ -19,6 +19,7 @@ response_help_simple = "pet" verb_say = "chips" verb_ask = "chips curiously" + can_be_held = TRUE verb_exclaim = "chips loudly" verb_yell = "chips loudly" faction = list(FACTION_NEUTRAL) @@ -32,6 +33,8 @@ /datum/pet_command/follow, /datum/pet_command/fetch, ) + //can this mob breed? + var/can_breed = TRUE /mob/living/basic/stoat/Initialize(mapload) . = ..() @@ -45,6 +48,8 @@ ai_controller.set_blackboard_key(BB_BASIC_FOODS, typecacheof(eatable_food)) AddElement(/datum/element/wears_collar) AddComponent(/datum/component/obeys_commands, pet_commands) + if(can_breed) + add_breeding_component() var/static/list/display_emote = list( BB_EMOTE_SAY = list("Chirp chirp chirp!"), @@ -53,3 +58,27 @@ BB_EMOTE_SOUND = list('sound/mobs/non-humanoids/stoat/stoat_sounds.ogg'), ) ai_controller.set_blackboard_key(BB_BASIC_MOB_SPEAK_LINES, display_emote) + +/mob/living/basic/stoat/proc/add_breeding_component() + var/static/list/partner_paths = typecacheof(list(/mob/living/basic/stoat)) + var/static/list/baby_paths = list( + /mob/living/basic/stoat/kit = 100 // Placeholder until we get proper baby stoats + ) + AddComponent(\ + /datum/component/breed,\ + can_breed_with = typecacheof(list(/mob/living/basic/stoat)),\ + baby_paths = baby_paths,\ + ) + +/mob/living/basic/stoat/kit + name = "\improper stoat kit" + real_name = "stoat" + desc = "They're a stoat kit!" + icon_state = "kit_stoat" + icon_living = "kit_stoat" + icon_dead = "kit_stoat_dead" + density = FALSE + pass_flags = PASSMOB + ai_controller = /datum/ai_controller/basic_controller/stoat/kit + mob_size = MOB_SIZE_SMALL + can_breed = FALSE diff --git a/code/modules/mob/living/basic/stoats/stoat_ai.dm b/code/modules/mob/living/basic/stoats/stoat_ai.dm index d592f4cfb36..ecefb0fd93a 100644 --- a/code/modules/mob/living/basic/stoats/stoat_ai.dm +++ b/code/modules/mob/living/basic/stoats/stoat_ai.dm @@ -1,4 +1,25 @@ /datum/ai_controller/basic_controller/stoat + blackboard = list( + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/of_size/smaller, + BB_PET_TARGETING_STRATEGY = /datum/targeting_strategy/basic/not_friends, + BB_GUILTY_CONSCIOUS_CHANCE = 5, + BB_STEAL_CHANCE = 2, + BB_BABIES_PARTNER_TYPES = list(/mob/living/basic/stoat), + BB_BABIES_CHILD_TYPES = list(/mob/living/basic/stoat/kit), + ) + ai_movement = /datum/ai_movement/basic_avoidance + idle_behavior = /datum/idle_behavior/idle_random_walk + planning_subtrees = list( + /datum/ai_planning_subtree/pet_planning, + /datum/ai_planning_subtree/simple_find_target, + /datum/ai_planning_subtree/random_speech/blackboard, + /datum/ai_planning_subtree/steal_items, + /datum/ai_planning_subtree/basic_melee_attack_subtree, + /datum/ai_planning_subtree/find_food, + /datum/ai_planning_subtree/make_babies, + ) + +/datum/ai_controller/basic_controller/stoat/kit blackboard = list( BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/of_size/smaller, BB_PET_TARGETING_STRATEGY = /datum/targeting_strategy/basic/not_friends, diff --git a/code/modules/mob/living/brain/brain_item.dm b/code/modules/mob/living/brain/brain_item.dm index 8234fcc4fc9..8d2dd60bea0 100644 --- a/code/modules/mob/living/brain/brain_item.dm +++ b/code/modules/mob/living/brain/brain_item.dm @@ -350,7 +350,8 @@ // If we crossed blinking brain damage thresholds either way, update our blinking if (owner && ((prev_damage > BRAIN_DAMAGE_ASYNC_BLINKING && damage < BRAIN_DAMAGE_ASYNC_BLINKING) || (prev_damage < BRAIN_DAMAGE_ASYNC_BLINKING && damage > BRAIN_DAMAGE_ASYNC_BLINKING))) var/obj/item/organ/eyes/eyes = owner.get_organ_slot(ORGAN_SLOT_EYES) - eyes?.animate_eyelids(owner) + if(eyes?.blink_animation) + eyes.animate_eyelids(owner) // If we're not more injured than before, return without gambling for a trauma if(damage <= prev_damage) diff --git a/code/modules/mob/living/carbon/alien/adult/alien_powers.dm b/code/modules/mob/living/carbon/alien/adult/alien_powers.dm index fbd031b029c..22b4b3d8d34 100644 --- a/code/modules/mob/living/carbon/alien/adult/alien_powers.dm +++ b/code/modules/mob/living/carbon/alien/adult/alien_powers.dm @@ -225,7 +225,7 @@ Doesn't work on other aliens/AI.*/ if(get_dist(owner, target) > 1) return FALSE if(ismob(target)) //If it could corrode mobs, it would one-shot them. - owner.balloon_alert(owner, "doesn't work on mobs!") + owner.balloon_alert(owner, "doesn't work on creatures!") return FALSE return ..() diff --git a/code/modules/mob/living/carbon/human/human_say.dm b/code/modules/mob/living/carbon/human/human_say.dm index a962b5d33cc..72bc111a880 100644 --- a/code/modules/mob/living/carbon/human/human_say.dm +++ b/code/modules/mob/living/carbon/human/human_say.dm @@ -29,7 +29,7 @@ return "gurgles" return tongue.temp_say_mod || tongue.say_mod || ..() -/mob/living/carbon/human/get_voice() +/mob/living/carbon/human/get_voice(add_id_name = FALSE) if(HAS_TRAIT(src, TRAIT_UNKNOWN_VOICE)) return "Unknown" var/id_name = get_id_name("") @@ -37,7 +37,7 @@ return id_name if(override_voice) return override_voice - if(real_name == id_name) // Allows for "Captain John" to have the voice "Captain Join" and not "John" + if(add_id_name && real_name == id_name) // Allows for "Captain John" to have the voice "Captain Join" and not "John" return get_id_name("", honorifics = TRUE) return real_name diff --git a/code/modules/mob/living/carbon/human/species_types/dullahan.dm b/code/modules/mob/living/carbon/human/species_types/dullahan.dm index 8fb2cb52c68..7375c259243 100644 --- a/code/modules/mob/living/carbon/human/species_types/dullahan.dm +++ b/code/modules/mob/living/carbon/human/species_types/dullahan.dm @@ -248,10 +248,9 @@ var/obj/item/organ/brain/brain = locate(/obj/item/organ/brain) in detached_head brain.name = "[wearer.name]'s brain" -/obj/item/dullahan_relay/Hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), message_range) +/obj/item/dullahan_relay/Hear(atom/movable/speaker, message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), message_range) . = ..() - if(owner) - owner.Hear(message, speaker, message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, spans, message_mods, message_range) + owner?.Hear(speaker, message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, spans, message_mods, message_range) ///Adds the owner to the list of hearers in hearers_in_view(), for visible/hearable on top of say messages /obj/item/dullahan_relay/proc/include_owner(datum/source, list/hearers) diff --git a/code/modules/mob/living/init_signals.dm b/code/modules/mob/living/init_signals.dm index 0797f77c082..d60a99f3f41 100644 --- a/code/modules/mob/living/init_signals.dm +++ b/code/modules/mob/living/init_signals.dm @@ -277,13 +277,10 @@ SIGNAL_HANDLER refresh_gravity() -/// Called in [/datum/element/immerse/apply_filter] -/mob/living/proc/edit_immerse_overlay(datum/source, atom/movable/immerse_overlay/vis_overlay) +/mob/living/proc/edit_immerse_overlay(datum/source, atom/movable/immerse_mask/effect_relay) SIGNAL_HANDLER - - vis_overlay.transform = vis_overlay.transform.Scale(1/current_size) - vis_overlay.transform = vis_overlay.transform.Turn(-lying_angle) - vis_overlay.adjust_living_overlay_offset(src) + effect_relay.transform = effect_relay.transform.Scale(1 / current_size) + effect_relay.transform = effect_relay.transform.Turn(-lying_angle) /// Called when [TRAIT_UNDENSE] is gained or lost /mob/living/proc/undense_changed(datum/source) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 50742b1fa89..f6fb71bd1d0 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -15,7 +15,6 @@ SSpoints_of_interest.make_point_of_interest(src) update_fov() gravity_setup() - ADD_TRAIT(src, TRAIT_UNIQUE_IMMERSE, INNATE_TRAIT) /mob/living/prepare_huds() ..() diff --git a/code/modules/mob/living/living_say.dm b/code/modules/mob/living/living_say.dm index 400b3a4c5f6..fe35e64de71 100644 --- a/code/modules/mob/living/living_say.dm +++ b/code/modules/mob/living/living_say.dm @@ -269,7 +269,7 @@ GLOBAL_LIST_INIT(message_modes_stat_limits, list( return TRUE -/mob/living/Hear(message, atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), message_range=0) +/mob/living/Hear(atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), message_range=0) if((SEND_SIGNAL(src, COMSIG_MOVABLE_PRE_HEAR, args) & COMSIG_MOVABLE_CANCEL_HEARING) || !GET_CLIENT(src)) return FALSE @@ -299,13 +299,14 @@ GLOBAL_LIST_INIT(message_modes_stat_limits, list( else if (!ismob(speaker) && !client?.prefs.read_preference(/datum/preference/toggle/enable_runechat_non_mobs)) use_runechat = FALSE + var/message = "" // if someone is whispering we make an extra type of message that is obfuscated for people out of range // Less than or equal to 0 means normal hearing. More than 0 and less than or equal to EAVESDROP_EXTRA_RANGE means // partial hearing. More than EAVESDROP_EXTRA_RANGE means no hearing. Exception for GOOD_HEARING trait var/dist = get_dist(speaker, src) - message_range - if(dist > 0 && dist <= EAVESDROP_EXTRA_RANGE && !HAS_TRAIT(src, TRAIT_GOOD_HEARING) && !isobserver(src)) // ghosts can hear all messages clearly + if(dist > 0 && dist <= EAVESDROP_EXTRA_RANGE && !HAS_TRAIT(src, TRAIT_GOOD_HEARING)) raw_message = stars(raw_message) - if(message_range != INFINITY && dist > EAVESDROP_EXTRA_RANGE && !HAS_TRAIT(src, TRAIT_GOOD_HEARING) && !isobserver(src)) + if(message_range != INFINITY && dist > EAVESDROP_EXTRA_RANGE && !HAS_TRAIT(src, TRAIT_GOOD_HEARING)) // Too far away and don't have good hearing, you can't hear anything if(is_blind() || HAS_TRAIT(speaker, TRAIT_INVISIBLE_MAN)) // Can't see them speak either return FALSE @@ -422,7 +423,7 @@ GLOBAL_LIST_INIT(message_modes_stat_limits, list( stack_trace("somehow theres a null returned from get_hearers_in_view() in send_speech!") continue - if(listening_movable.Hear(null, src, message_language, message_raw, null, null, null, spans, message_mods, message_range)) + if(listening_movable.Hear(src, message_language, message_raw, null, null, null, spans, message_mods, message_range)) listened += listening_movable //speech bubble diff --git a/code/modules/mob/living/living_update_icons.dm b/code/modules/mob/living/living_update_icons.dm index 4d39da1a3d5..a8a517008c1 100644 --- a/code/modules/mob/living/living_update_icons.dm +++ b/code/modules/mob/living/living_update_icons.dm @@ -124,6 +124,8 @@ if(new_w == pixel_w && new_x == pixel_x && new_y == pixel_y && new_z == pixel_z) return FALSE + SEND_SIGNAL(src, COMSIG_LIVING_UPDATE_OFFSETS, new_x, new_y, new_w, new_z, animate) + if(!animate) pixel_w = new_w pixel_x = new_x @@ -141,7 +143,6 @@ pixel_x = new_x, pixel_y = new_y, pixel_z = new_z, - easing = (EASE_IN|EASE_OUT), flags = ANIMATION_PARALLEL, time = UPDATE_TRANSFORM_ANIMATION_TIME, ) diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 3b66d4c7eff..ace9054ca49 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -805,7 +805,7 @@ var/list/viewscale = getviewsize(client.view) return get_dist(src, A) <= max(viewscale[1]*0.5,viewscale[2]*0.5) -/mob/living/silicon/ai/proc/relay_speech(message, atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, list/spans, list/message_mods = list()) +/mob/living/silicon/ai/proc/relay_speech(atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, list/spans, list/message_mods = list()) var/raw_translation = translate_language(speaker, message_language, raw_message, spans, message_mods) var/atom/movable/source = speaker.GetSource() || speaker // is the speaker virtual/radio var/treated_message = source.generate_messagepart(raw_translation, spans, message_mods) @@ -1093,11 +1093,10 @@ . = ..() .[/datum/job/ai::title] = minutes -/mob/living/silicon/ai/get_voice() - . = ..() - if(ai_voicechanger && ai_voicechanger.changing_voice) +/mob/living/silicon/ai/get_voice(add_id_name) + if(ai_voicechanger?.changing_voice) return ai_voicechanger.say_name - return + return ..() /mob/living/silicon/ai/proc/set_control_disabled(control_disabled) SEND_SIGNAL(src, COMSIG_SILICON_AI_SET_CONTROL_DISABLED, control_disabled) diff --git a/code/modules/mob/living/silicon/ai/freelook/eye.dm b/code/modules/mob/living/silicon/ai/freelook/eye.dm index c1741faa121..900ff158ee7 100644 --- a/code/modules/mob/living/silicon/ai/freelook/eye.dm +++ b/code/modules/mob/living/silicon/ai/freelook/eye.dm @@ -219,10 +219,10 @@ acceleration = !acceleration to_chat(usr, "Camera acceleration has been toggled [acceleration ? "on" : "off"].") -/mob/eye/camera/ai/Hear(message, atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), message_range) +/mob/eye/camera/ai/Hear(atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods = list(), message_range) . = ..() if(relay_speech && speaker && ai && !radio_freq && speaker != ai && GLOB.cameranet.checkCameraVis(speaker)) - ai.relay_speech(message, speaker, message_language, raw_message, radio_freq, spans, message_mods) + ai.relay_speech(speaker, message_language, raw_message, radio_freq, spans, message_mods) /obj/effect/overlay/ai_detect_hud name = "" diff --git a/code/modules/mob/living/silicon/robot/robot_model.dm b/code/modules/mob/living/silicon/robot/robot_model.dm index e99a07c052a..65771acd56b 100644 --- a/code/modules/mob/living/silicon/robot/robot_model.dm +++ b/code/modules/mob/living/silicon/robot/robot_model.dm @@ -303,7 +303,7 @@ if(!isnull(details[SKIN_PIXEL_X])) cyborg.base_pixel_x = details[SKIN_PIXEL_X] if(!isnull(details[SKIN_PIXEL_Y])) - cyborg.base_pixel_y = details[SKIN_PIXEL_Y] + cyborg.base_pixel_z = details[SKIN_PIXEL_Y] if(!isnull(details[SKIN_LIGHT_KEY])) special_light_key = details[SKIN_LIGHT_KEY] if(!isnull(details[SKIN_HAT_OFFSET])) @@ -459,16 +459,12 @@ button_icon_state = "meson" /datum/action/cooldown/borg_meson/Activate() - if(usr.sight & SEE_TURFS) - usr.clear_sight(SEE_TURFS) - owner.lighting_cutoff_red += 5 - owner.lighting_cutoff_green += 15 - owner.lighting_cutoff_blue += 5 + var/mob/living/silicon/robot/borg = owner + if(borg.sight & SEE_TURFS) + borg.sight_mode = BORGDEFAULT else - usr.add_sight(SEE_TURFS) - owner.lighting_cutoff_red -= 5 - owner.lighting_cutoff_green -= 15 - owner.lighting_cutoff_blue -= 5 + borg.sight_mode = BORGMESON + borg.update_sight() /obj/item/robot_model/engineering/be_transformed_to(obj/item/robot_model/old_model, forced = FALSE) var/datum/action/cooldown/borg_meson/night_vision = new(loc) @@ -1046,16 +1042,15 @@ /datum/action/cooldown/borg_thermal name = "Toggle Thermal Night Vision" button_icon = 'icons/mob/actions/actions_mecha.dmi' - button_icon_state = "meson" + button_icon_state = "thermal" /datum/action/cooldown/borg_thermal/Activate() - if(usr.sight & SEE_TURFS) - usr.clear_sight(SEE_TURFS|SEE_MOBS) - usr.lighting_cutoff = LIGHTING_CUTOFF_VISIBLE + var/mob/living/silicon/robot/borg = owner + if(borg.sight & SEE_MOBS) + borg.sight_mode = BORGDEFAULT else - usr.add_sight(SEE_TURFS|SEE_MOBS) - usr.lighting_cutoff = LIGHTING_CUTOFF_HIGH - usr.sync_lighting_plane_cutoff() + borg.sight_mode = BORGTHERM + borg.update_sight() /obj/item/robot_model/saboteur/be_transformed_to(obj/item/robot_model/old_model, forced = FALSE) var/datum/action/cooldown/borg_thermal/thermal_vision = new(loc) diff --git a/code/modules/mob/living/silicon/silicon_say.dm b/code/modules/mob/living/silicon/silicon_say.dm index c3edff2b94b..b81d44983d6 100644 --- a/code/modules/mob/living/silicon/silicon_say.dm +++ b/code/modules/mob/living/silicon/silicon_say.dm @@ -24,7 +24,7 @@ var/namepart = name // If carbon, use voice to account for voice changers if(iscarbon(src)) - namepart = get_voice() + namepart = get_voice(add_id_name = TRUE) // AI in carbon body should still have its real name var/obj/item/organ/brain/cybernetic/ai/brain = get_organ_slot(ORGAN_SLOT_BRAIN) diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index c95b5545e49..b637e33eb6f 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -543,7 +543,7 @@ recent_speech[spoken_memory] = splittext(say_log[spoken_memory], "\"", 1, 0, TRUE)[3] var/list/raw_lines = list() - for (var/key as anything in recent_speech) + for (var/key in recent_speech) raw_lines += recent_speech[key] return raw_lines diff --git a/code/modules/mob/say_readme.md b/code/modules/mob/say_readme.md index e39dfb9fbcf..5f065b9df16 100644 --- a/code/modules/mob/say_readme.md +++ b/code/modules/mob/say_readme.md @@ -67,7 +67,7 @@ global procs Checks that our atom can vocally speak at all. Does not (and should not) include any feedback on its own. - Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq, spans, message_mods, message_range) + Hear(atom/movable/speaker, message_langs, raw_message, radio_freq, spans, message_mods, message_range) This proc handles hearing. What it does varies. For mobs, it treats the message with hearer-specific things like language and deafness, then outputs it to the hearer. diff --git a/code/modules/mod/mod_link.dm b/code/modules/mod/mod_link.dm index f18f89e4124..342d9c15d20 100644 --- a/code/modules/mod/mod_link.dm +++ b/code/modules/mod/mod_link.dm @@ -117,7 +117,7 @@ /obj/item/mod/control/proc/delete_link_visual(mob/living/old_user) return delete_link_visual_generic(mod_link, old_user) -/obj/item/mod/control/Hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods, message_range) +/obj/item/mod/control/Hear(atom/movable/speaker, message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods, message_range) . = ..() if(speaker != wearer && speaker != ai_assistant) return @@ -300,7 +300,7 @@ old_user.update_worn_neck() return delete_link_visual_generic(mod_link, old_user) -/obj/item/clothing/neck/link_scryer/Hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods, message_range) +/obj/item/clothing/neck/link_scryer/Hear(atom/movable/speaker, message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods, message_range) . = ..() if(speaker != loc) return diff --git a/code/modules/modular_computers/computers/item/pda.dm b/code/modules/modular_computers/computers/item/pda.dm index cf64d575daf..b58b3b89083 100644 --- a/code/modules/modular_computers/computers/item/pda.dm +++ b/code/modules/modular_computers/computers/item/pda.dm @@ -74,7 +74,7 @@ apps_to_download += default_programs + pda_programs apps_to_download += starting_programs - for(var/programs as anything in apps_to_download) + for(var/programs in apps_to_download) var/datum/computer_file/program/program_type = new programs store_file(program_type) diff --git a/code/modules/modular_computers/file_system/programs/nt_pay.dm b/code/modules/modular_computers/file_system/programs/nt_pay.dm index 200b2cee337..7fcb42f567c 100644 --- a/code/modules/modular_computers/file_system/programs/nt_pay.dm +++ b/code/modules/modular_computers/file_system/programs/nt_pay.dm @@ -81,7 +81,7 @@ to_chat(user, span_notice("You can't send credits to yourself.")) return NT_PAY_SATUS_SENDER_IS_RECEIVER - for(var/account as anything in SSeconomy.bank_accounts_by_id) + for(var/account in SSeconomy.bank_accounts_by_id) var/datum/bank_account/acc = SSeconomy.bank_accounts_by_id[account] if(acc.pay_token == token) recipient = acc diff --git a/code/modules/modular_computers/file_system/programs/virtual_pet.dm b/code/modules/modular_computers/file_system/programs/virtual_pet.dm index a741331daa5..d2177361a24 100644 --- a/code/modules/modular_computers/file_system/programs/virtual_pet.dm +++ b/code/modules/modular_computers/file_system/programs/virtual_pet.dm @@ -434,7 +434,7 @@ GLOBAL_LIST_EMPTY(virtual_pets_list) /datum/computer_file/program/virtual_pet/ui_static_data(mob/user) var/list/data = list() data["pet_state_icons"] = list() - for(var/list_index as anything in pet_state_icons) + for(var/list_index in pet_state_icons) var/list/sprite_location = pet_state_icons[list_index] data["pet_state_icons"] += list(list( "name" = list_index, @@ -446,7 +446,7 @@ GLOBAL_LIST_EMPTY(virtual_pets_list) "hat_name" = "none", )) - for(var/type_index as anything in hat_selections) + for(var/type_index in hat_selections) if(level >= hat_selections[type_index]) var/obj/item/hat = type_index var/hat_name = initial(hat.name) diff --git a/code/modules/modular_computers/file_system/programs/wirecarp.dm b/code/modules/modular_computers/file_system/programs/wirecarp.dm index 0c91bcfd6e7..6de0f67b412 100644 --- a/code/modules/modular_computers/file_system/programs/wirecarp.dm +++ b/code/modules/modular_computers/file_system/programs/wirecarp.dm @@ -101,7 +101,7 @@ /obj/item/circuit_component/mod_program/ntnetmonitor/proc/get_pdas(datum/port/port) var/list/computers_with_messenger = list() - for(var/messenger_ref as anything in GLOB.pda_messengers) + for(var/messenger_ref in GLOB.pda_messengers) var/datum/computer_file/program/messenger/messenger = GLOB.pda_messengers[messenger_ref] computers_with_messenger |= WEAKREF(messenger.computer) all_messengers.set_output(computers_with_messenger) diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index c9162079d63..d8493feea2b 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -281,15 +281,16 @@ * * stamp_y - Y coordinate to render the stamp in tgui. * * rotation - Degrees of rotation for the stamp to be rendered with in tgui. * * stamp_icon_state - Icon state for the stamp as part of overlay rendering. +* * stamp_icon_state - An alternate Icon file can be passed for the stamp as part of overlay rendering if desired */ -/obj/item/paper/proc/add_stamp(stamp_class, stamp_x, stamp_y, rotation, stamp_icon_state) +/obj/item/paper/proc/add_stamp(stamp_class, stamp_x, stamp_y, rotation, stamp_icon_state, stamp_icon = 'icons/obj/service/bureaucracy.dmi') var/new_stamp_datum = new /datum/paper_stamp(stamp_class, stamp_x, stamp_y, rotation) LAZYADD(raw_stamp_data, new_stamp_datum); if(LAZYLEN(stamp_cache) > MAX_PAPER_STAMPS_OVERLAYS) return - var/mutable_appearance/stamp_overlay = mutable_appearance('icons/obj/service/bureaucracy.dmi', "paper_[stamp_icon_state]", appearance_flags = KEEP_APART | RESET_COLOR) + var/mutable_appearance/stamp_overlay = mutable_appearance(stamp_icon, "paper_[stamp_icon_state]", appearance_flags = KEEP_APART | RESET_COLOR) stamp_overlay.pixel_w = rand(-2, 2) stamp_overlay.pixel_z = rand(-3, 2) add_overlay(stamp_overlay) @@ -441,7 +442,7 @@ if(writing_stats["interaction_mode"] == MODE_STAMPING) if(!user.can_read(src) || user.is_blind()) //The paper's stampable window area is assumed approx 300x400 - add_stamp(writing_stats["stamp_class"], rand(0, 300), rand(0, 400), rand(0, 360), writing_stats["stamp_icon_state"]) + add_stamp(writing_stats["stamp_class"], rand(0, 300), rand(0, 400), rand(0, 360), writing_stats["stamp_icon_state"], stamp_icon = writing_stats["stamp_icon"]) user.visible_message(span_notice("[user] blindly stamps [src] with \the [attacking_item]!")) to_chat(user, span_notice("You stamp [src] with \the [attacking_item] the best you can!")) playsound(src, 'sound/items/handling/standard_stamp.ogg', 50, vary = TRUE) @@ -464,7 +465,7 @@ if(!user.can_read(src) || user.is_blind()) // Just leftclick instead return NONE - add_stamp(writing_stats["stamp_class"], rand(1, 300), rand(1, 400), stamp_icon_state = writing_stats["stamp_icon_state"]) + add_stamp(writing_stats["stamp_class"], rand(1, 300), rand(1, 400), stamp_icon_state = writing_stats["stamp_icon_state"], stamp_icon = writing_stats["stamp_icon"]) user.visible_message( span_notice("[user] quickly stamps [src] with [tool] without looking."), span_notice("You quickly stamp [src] with [tool] without looking."), @@ -617,12 +618,13 @@ var/stamp_y = text2num(params["y"]) var/stamp_rotation = text2num(params["rotation"]) var/stamp_icon_state = stamp_info["stamp_icon_state"] + var/stamp_icon = stamp_info["stamp_icon"] if (LAZYLEN(raw_stamp_data) >= MAX_PAPER_STAMPS) to_chat(usr, pick("You try to stamp but you miss!", "There is nowhere else you can stamp!")) return TRUE - add_stamp(stamp_class, stamp_x, stamp_y, stamp_rotation, stamp_icon_state) + add_stamp(stamp_class, stamp_x, stamp_y, stamp_rotation, stamp_icon_state, stamp_icon) user.visible_message(span_notice("[user] stamps [src] with \the [holding.name]!"), span_notice("You stamp [src] with \the [holding.name]!")) playsound(src, 'sound/items/handling/standard_stamp.ogg', 50, vary = TRUE) diff --git a/code/modules/paperwork/stamps.dm b/code/modules/paperwork/stamps.dm index 1a7e3ac0b1b..504bb89fe4e 100644 --- a/code/modules/paperwork/stamps.dm +++ b/code/modules/paperwork/stamps.dm @@ -24,6 +24,7 @@ return list( interaction_mode = MODE_STAMPING, stamp_icon_state = icon_state, + stamp_icon = icon, stamp_class = sheet.icon_class_name(icon_state) ) diff --git a/code/modules/point/point.dm b/code/modules/point/point.dm index ae0fc64cac9..adb539ad3b9 100644 --- a/code/modules/point/point.dm +++ b/code/modules/point/point.dm @@ -48,10 +48,7 @@ pointed_atom_appearance.pixel_x = 0 pointed_atom_appearance.pixel_y = 0 thought_bubble.overlays += pointed_atom_appearance - - var/hover_outline_index = pointed_atom.get_filter_index(HOVER_OUTLINE_FILTER) - if (!isnull(hover_outline_index)) - pointed_atom_appearance.filters.Cut(hover_outline_index, hover_outline_index + 1) + pointed_atom_appearance.remove_filter(HOVER_OUTLINE_FILTER) thought_bubble.pixel_w = 16 thought_bubble.pixel_z = 32 diff --git a/code/modules/power/apc/apc_appearance.dm b/code/modules/power/apc/apc_appearance.dm index 41547288a0b..9959c209be8 100644 --- a/code/modules/power/apc/apc_appearance.dm +++ b/code/modules/power/apc/apc_appearance.dm @@ -109,6 +109,8 @@ // Shows a dark-blue interface for a moment. Shouldn't appear on cameras. /obj/machinery/power/apc/proc/flicker_hacked_icon() + if(opened != APC_COVER_CLOSED) + return var/image/hacker_image = image(icon = 'icons/obj/machines/wallmounts.dmi', loc = src, icon_state = "apcemag", layer = FLOAT_LAYER) var/list/mobs_to_show = list() // Collecting mobs the APC can see for this animation, rather than mobs that can see the APC. Important distinction, intended such that mobs on camera / with XRAY cannot see the flicker. diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index 0e350677012..68c9700bd0e 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -240,7 +240,7 @@ return ITEM_INTERACT_BLOCKING //select cable layer - var/terminal_cable_layer + var/terminal_cable_layer = installing_cable.target_layer if(LAZYACCESS(modifiers, RIGHT_CLICK)) var/choice = tgui_input_list(user, "Select Power Input Cable Layer", "Select Cable Layer", GLOB.cable_name_to_layer) if(isnull(choice) \ diff --git a/code/modules/projectiles/ammunition/ballistic/sniper.dm b/code/modules/projectiles/ammunition/ballistic/sniper.dm index 1b6e60cdef0..ef6e3a41b49 100644 --- a/code/modules/projectiles/ammunition/ballistic/sniper.dm +++ b/code/modules/projectiles/ammunition/ballistic/sniper.dm @@ -33,3 +33,13 @@ name = ".50 BMG marksman round bullet casing" desc = "A .50 caliber marksman round casing." projectile_type = /obj/projectile/bullet/p50/marksman + +// Lahti 20x138mm rifle ammo // + +/obj/item/ammo_casing/mm20x138 + name = "20x138mm bullet casing" + desc = "A 20x138mm bullet casing." + caliber = CALIBER_50BMG + projectile_type = /obj/projectile/bullet/mm20x138 + icon_state = ".50" + newtonian_force = 1.5 diff --git a/code/modules/projectiles/boxes_magazines/_box_magazine.dm b/code/modules/projectiles/boxes_magazines/_box_magazine.dm index f708ec04f6c..f5c123866b3 100644 --- a/code/modules/projectiles/boxes_magazines/_box_magazine.dm +++ b/code/modules/projectiles/boxes_magazines/_box_magazine.dm @@ -30,7 +30,7 @@ var/multiple_sprite_use_base = FALSE ///String, used for checking if ammo of different types but still fits can fit inside it; generally used for magazines var/caliber - /// Determines whether ammo boxes can multiload in or out. + /// Determines whether ammo boxes can multiload in or out. See code/__DEFINES/combat.dm for details. var/ammo_box_multiload = AMMO_BOX_MULTILOAD_BOTH ///Whether the magazine should start with nothing in it @@ -189,7 +189,17 @@ if(did_load) other_box.stored_ammo -= casing num_loaded++ - if(!did_load || !(ammo_box_multiload & AMMO_BOX_MULTILOAD_IN) || !(other_box.ammo_box_multiload & AMMO_BOX_MULTILOAD_OUT)) + // failed to load (full already? ran out of ammo?) + if(!did_load) + break + // this box can't accept being multiloaded into + if(!(ammo_box_multiload & AMMO_BOX_MULTILOAD_IN)) + break + // the other box can't give multiple bullets in one go to an unloaded magazine + if(!isgun(loc) && !(other_box.ammo_box_multiload & AMMO_BOX_MULTILOAD_OUT)) + break + // the other box can't give multiple bullets in one go to a loaded magazine + if(isgun(loc) && !(other_box.ammo_box_multiload & AMMO_BOX_MULTILOAD_OUT_LOADED)) break if(num_loaded) diff --git a/code/modules/projectiles/boxes_magazines/ammo_boxes.dm b/code/modules/projectiles/boxes_magazines/ammo_boxes.dm index 42e0ee45e88..4d099d7f34f 100644 --- a/code/modules/projectiles/boxes_magazines/ammo_boxes.dm +++ b/code/modules/projectiles/boxes_magazines/ammo_boxes.dm @@ -1,108 +1,3 @@ -/obj/item/ammo_box/a357 - name = "speed loader (.357)" - desc = "Designed to quickly reload revolvers." - icon_state = "357" - ammo_type = /obj/item/ammo_casing/c357 - max_ammo = 7 - caliber = CALIBER_357 - multiple_sprites = AMMO_BOX_PER_BULLET - item_flags = NO_MAT_REDEMPTION - ammo_band_icon = "+357_ammo_band" - ammo_band_color = null - -/obj/item/ammo_box/a357/match - name = "speed loader (.357 Match)" - desc = "Designed to quickly reload revolvers. These rounds are manufactured within extremely tight tolerances, making them easy to show off trickshots with." - ammo_type = /obj/item/ammo_casing/c357/match - ammo_band_color = "#77828a" - -/obj/item/ammo_box/a357/phasic - name = "speed loader (.357 Phasic)" - desc = "Designed to quickly reload revolvers. Holds phasic ammo, also known as 'Ghost Lead', allowing it to pass through non-organic material." - ammo_type = /obj/item/ammo_casing/c357/phasic - ammo_band_color = "#693a6a" - -/obj/item/ammo_box/a357/heartseeker - name = "speed loader (.357 Heartseeker)" - desc = "Designed to quickly reload revolvers. Holds heartseeker ammo, which veers into targets with exceptional precision using \ - an unknown method. It apparently predicts movement using neural pulses in the brain, but that's less marketable. \ - As seen in the hit NTFlik horror-space western film, Forget-Me-Not! Brought to you by Roseus Galactic!" - ammo_type = /obj/item/ammo_casing/c357/heartseeker - ammo_band_color = "#a91e1e" - -/obj/item/ammo_box/c38 - name = "speed loader (.38)" - desc = "Designed to quickly reload revolvers." - icon_state = "38" - base_icon_state = "38" - ammo_type = /obj/item/ammo_casing/c38 - max_ammo = 6 - caliber = CALIBER_38 - multiple_sprites = AMMO_BOX_PER_BULLET - custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT) - ammo_band_icon = "+38_ammo_band" - ammo_band_color = null - -/obj/item/ammo_box/c38/update_icon_state() - . = ..() - icon_state = "[base_icon_state]-base" - -/obj/item/ammo_box/c38/update_overlays() - . = ..() - if(!LAZYLEN(stored_ammo)) - return - for(var/inserted_ammo in 1 to stored_ammo.len) - var/obj/item/ammo_casing/c38/boolet = stored_ammo[inserted_ammo] - . += "38-[boolet::lead_or_laser]-[inserted_ammo]" - -/obj/item/ammo_box/c38/trac - name = "speed loader (.38 TRAC)" - desc = "Designed to quickly reload revolvers. TRAC bullets embed a tracking implant within the target's body." - ammo_type = /obj/item/ammo_casing/c38/trac - ammo_band_color = COLOR_AMMO_TRACK - -/obj/item/ammo_box/c38/match - name = "speed loader (.38 Match)" - desc = "Designed to quickly reload revolvers. These rounds are manufactured within extremely tight tolerances, making them easy to show off trickshots with." - ammo_type = /obj/item/ammo_casing/c38/match - ammo_band_color = COLOR_AMMO_MATCH - -/obj/item/ammo_box/c38/match/bouncy - name = "speed loader (.38 Rubber)" - desc = "Designed to quickly reload revolvers. These rounds are incredibly bouncy and MOSTLY nonlethal, making them great to show off trickshots with." - ammo_type = /obj/item/ammo_casing/c38/match/bouncy - ammo_band_color = COLOR_AMMO_RUBBER - -/obj/item/ammo_box/c38/true - name = "speed loader (.38 True Strike)" - desc = "Designed to quickly reload revolvers. Bullets bounce towards new targets with surprising accuracy." - ammo_type = /obj/item/ammo_casing/c38/match/true - ammo_band_color = COLOR_AMMO_TRUESTRIKE - -/obj/item/ammo_box/c38/dumdum - name = "speed loader (.38 DumDum)" - desc = "Designed to quickly reload revolvers. These rounds expand on impact, allowing them to shred the target and cause massive bleeding. Very weak against armor and distant targets." - ammo_type = /obj/item/ammo_casing/c38/dumdum - ammo_band_color = COLOR_AMMO_DUMDUM - -/obj/item/ammo_box/c38/hotshot - name = "speed loader (.38 Hot Shot)" - desc = "Designed to quickly reload revolvers. Hot Shot bullets contain an incendiary payload." - ammo_type = /obj/item/ammo_casing/c38/hotshot - ammo_band_color = COLOR_AMMO_HOTSHOT - -/obj/item/ammo_box/c38/iceblox - name = "speed loader (.38 Iceblox)" - desc = "Designed to quickly reload revolvers. Iceblox bullets contain a cryogenic payload." - ammo_type = /obj/item/ammo_casing/c38/iceblox - ammo_band_color = COLOR_AMMO_ICEBLOX - -/obj/item/ammo_box/c38/flare - name = "speed loader (.38 Flare)" - desc = "Designed to quickly reload revolvers. Flare casings launch a concentrated particle beam towards a target, lighting them up for everyone to see." - ammo_type = /obj/item/ammo_casing/c38/flare - ammo_band_color = COLOR_AMMO_HELLFIRE - /obj/item/ammo_box/c9mm name = "ammo box (9mm)" icon_state = "9mmbox" @@ -142,25 +37,6 @@ /obj/item/ammo_box/rocket/can_load(mob/user) return FALSE -/obj/item/ammo_box/strilka310 - name = "stripper clip (.310 Strilka)" - desc = "A stripper clip." - icon_state = "310_strip" - ammo_type = /obj/item/ammo_casing/strilka310 - max_ammo = 5 - caliber = CALIBER_STRILKA310 - multiple_sprites = AMMO_BOX_PER_BULLET - -/obj/item/ammo_box/strilka310/surplus - name = "stripper clip (.310 Surplus)" - ammo_type = /obj/item/ammo_casing/strilka310/surplus - -/obj/item/ammo_box/strilka310/phasic - name = "stripper clip (.310 Phasic)" - desc = "A stripper clip filled with phasic bullets, hastily developed after an incident where a misfire resulted in the destruction of Atrakor Silverscale's priceless Vigoxian Fabergé egg. \ - These fancy bullets pass right though valuables until they end up in a far less expensive human skull." - ammo_type = /obj/item/ammo_casing/strilka310/phasic - /obj/item/ammo_box/n762 name = "ammo box (7.62x38mmR)" icon_state = "10mmbox" diff --git a/code/modules/projectiles/boxes_magazines/external/sniper.dm b/code/modules/projectiles/boxes_magazines/external/sniper.dm index c937e435f0e..32933509918 100644 --- a/code/modules/projectiles/boxes_magazines/external/sniper.dm +++ b/code/modules/projectiles/boxes_magazines/external/sniper.dm @@ -42,3 +42,14 @@ desc = parent_type::desc + " Loaded with extremely fast marksman rounds, able to pretty much instantly hit their targets." base_icon_state = "marksman" ammo_type = /obj/item/ammo_casing/p50/marksman + +// Lahti-L39 Magazine // + +/obj/item/ammo_box/magazine/lahtimagazine + name = "\improper Lahti sniper rounds (20x138mm)" + desc = "A 20x138mm magazine suitable ammo for anti kaiju-rifles." + icon_state = ".50mag" + base_icon_state = ".50mag" + ammo_type = /obj/item/ammo_casing/mm20x138 + max_ammo = 9 + caliber = CALIBER_50BMG diff --git a/code/modules/projectiles/boxes_magazines/speedloaders.dm b/code/modules/projectiles/boxes_magazines/speedloaders.dm new file mode 100644 index 00000000000..0fe437f05b9 --- /dev/null +++ b/code/modules/projectiles/boxes_magazines/speedloaders.dm @@ -0,0 +1,134 @@ +/obj/item/ammo_box/speedloader + name = "speed loader (base type)" + desc = "This shouldn't be here. Report this to a coder, thanks!" + multiple_sprites = AMMO_BOX_PER_BULLET + ammo_box_multiload = (AMMO_BOX_MULTILOAD_IN | AMMO_BOX_MULTILOAD_OUT_LOADED) + // You can feed ammo in from a box (assuming someone ever codes a relevant ammo box), + // you can feed ammo out to a revolver's cylinder, + // but you can't use it to teleport six bullets into a detached rifle magazine. + +/obj/item/ammo_box/speedloader/c357 + name = "speed loader (.357)" + desc = "Designed to quickly reload seven-chamber .357 revolvers." + icon_state = "357" + ammo_type = /obj/item/ammo_casing/c357 + max_ammo = 7 + caliber = CALIBER_357 + item_flags = NO_MAT_REDEMPTION + ammo_band_icon = "+357_ammo_band" + ammo_band_color = null + +/obj/item/ammo_box/speedloader/c357/match + name = "speed loader (.357 Match)" + desc = parent_type::desc + " Match rounds are manufactured within extremely tight tolerances, making them easy to show off trickshots with." + ammo_type = /obj/item/ammo_casing/c357/match + ammo_band_color = "#77828a" + +/obj/item/ammo_box/speedloader/c357/phasic + name = "speed loader (.357 Phasic)" + desc = parent_type::desc + " Phasic rounds, also known as 'Ghost Lead', are specially manufactured to pass through non-organic material. Somehow." + ammo_type = /obj/item/ammo_casing/c357/phasic + ammo_band_color = "#693a6a" + +/obj/item/ammo_box/speedloader/c357/heartseeker + name = "speed loader (.357 Heartseeker)" + desc = parent_type::desc + " Heartseeker rounds veer into targets with exceptional precision using an unknown method. \ + It apparently predicts movement using neural pulses in the brain, but that's less marketable. \ + As seen in the hit NTFlik horror-space western film, Forget-Me-Not, brought to you by Roseus Galactic!" + ammo_type = /obj/item/ammo_casing/c357/heartseeker + ammo_band_color = "#a91e1e" + +/obj/item/ammo_box/speedloader/c38 + name = "speed loader (.38)" + desc = "Designed to quickly reload six-chamber .38 Special revolvers." + icon_state = "38" + base_icon_state = "38" + ammo_type = /obj/item/ammo_casing/c38 + max_ammo = 6 + caliber = CALIBER_38 + custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT) + ammo_band_icon = "+38_ammo_band" + ammo_band_color = null + +/obj/item/ammo_box/speedloader/c38/update_icon_state() + . = ..() + icon_state = "[base_icon_state]-base" + +/obj/item/ammo_box/speedloader/c38/update_overlays() + . = ..() + if(!LAZYLEN(stored_ammo)) + return + for(var/inserted_ammo in 1 to stored_ammo.len) + var/obj/item/ammo_casing/c38/boolet = stored_ammo[inserted_ammo] + . += "38-[boolet::lead_or_laser]-[inserted_ammo]" + +/obj/item/ammo_box/speedloader/c38/trac + name = "speed loader (.38 TRAC)" + desc = parent_type::desc + " TRAC bullets embed a tracking implant within the target's body." + ammo_type = /obj/item/ammo_casing/c38/trac + ammo_band_color = COLOR_AMMO_TRACK + +/obj/item/ammo_box/speedloader/c38/match + name = "speed loader (.38 Match)" + desc = parent_type::desc + " Match bullets are manufactured within extremely tight tolerances, making them easy to show off trickshots with." + ammo_type = /obj/item/ammo_casing/c38/match + ammo_band_color = COLOR_AMMO_MATCH + +/obj/item/ammo_box/speedloader/c38/match/bouncy + name = "speed loader (.38 Rubber)" + desc = parent_type::desc + " Rubber rounds are incredibly bouncy and MOSTLY less-lethal, making them great to show off trickshots with." + ammo_type = /obj/item/ammo_casing/c38/match/bouncy + ammo_band_color = COLOR_AMMO_RUBBER + +/obj/item/ammo_box/speedloader/c38/true + name = "speed loader (.38 True Strike)" + desc = parent_type::desc + " True Strike bullets bounce towards new targets with surprising accuracy after ricocheting." + ammo_type = /obj/item/ammo_casing/c38/match/true + ammo_band_color = COLOR_AMMO_TRUESTRIKE + +/obj/item/ammo_box/speedloader/c38/dumdum + name = "speed loader (.38 DumDum)" + desc = parent_type::desc + " DumDum bullets expand on impact, reducing outright stopping power but \ + shredding targets and causing massive bleeding in close range, \ + at the cost of suffering greatly against armor and distant targets." + ammo_type = /obj/item/ammo_casing/c38/dumdum + ammo_band_color = COLOR_AMMO_DUMDUM + +/obj/item/ammo_box/speedloader/c38/hotshot + name = "speed loader (.38 Hot Shot)" + desc = parent_type::desc + " Hot Shot bullets contain an incendiary payload that ignites struck targets." + ammo_type = /obj/item/ammo_casing/c38/hotshot + ammo_band_color = COLOR_AMMO_HOTSHOT + +/obj/item/ammo_box/speedloader/c38/iceblox + name = "speed loader (.38 Iceblox)" + desc = parent_type::desc + " Iceblox bullets contain a cryogenic payload that lower the body temperature of struck targets." + ammo_type = /obj/item/ammo_casing/c38/iceblox + ammo_band_color = COLOR_AMMO_ICEBLOX + +/obj/item/ammo_box/speedloader/c38/flare + name = "speed loader (.38 Flare)" + desc = parent_type::desc + " Flare casings launch a concentrated particle beam towards a target, lighting them up for everyone to see." + ammo_type = /obj/item/ammo_casing/c38/flare + ammo_band_color = COLOR_AMMO_HELLFIRE + +/obj/item/ammo_box/speedloader/strilka310 + name = "stripper clip (.310 Strilka)" + desc = "A five-round stripper clip for .310 Strilka rifles." + icon_state = "310_strip" + ammo_type = /obj/item/ammo_casing/strilka310 + max_ammo = 5 + ammo_box_multiload = AMMO_BOX_MULTILOAD_ALL + caliber = CALIBER_STRILKA310 + +/obj/item/ammo_box/speedloader/strilka310/surplus + name = "stripper clip (.310 Surplus)" + desc = parent_type::desc + " This one has a few spots of rust where there's not excessive amounts of gun grease." + ammo_type = /obj/item/ammo_casing/strilka310/surplus + +/obj/item/ammo_box/speedloader/strilka310/phasic + name = "stripper clip (.310 Phasic)" + desc = parent_type::desc + " These should come with phasic bullets, \ + hastily developed after an incident where a misfire resulted in the destruction of Atrakor Silverscale's priceless Vigoxian Fabergé egg. \ + These fancy bullets pass right though valuables until they end up in a far less expensive human skull." + ammo_type = /obj/item/ammo_casing/strilka310/phasic diff --git a/code/modules/projectiles/guns/ballistic/rifle.dm b/code/modules/projectiles/guns/ballistic/rifle.dm index bee133ac8fb..8c6e468ab16 100644 --- a/code/modules/projectiles/guns/ballistic/rifle.dm +++ b/code/modules/projectiles/guns/ballistic/rifle.dm @@ -492,3 +492,30 @@ /obj/item/gun/ballistic/rifle/sks/empty spawn_magazine_type = /obj/item/ammo_box/magazine/internal/sks/empty + +// lahti-l39 anti material rifle // + +/obj/item/gun/ballistic/automatic/lahti + name = "\improper Lahti L-39" + desc = "The Lahti L-39, now manufactured in space with better materials making it more portable and reliable- still loaded in the same massive cartridge, \ + this thing was made to go through a tank and come out the other end- imagine what it could do to an exosuit, there's also a completely useless sight which is totally obstructed by the magazine." + icon = 'icons/obj/weapons/guns/lahtil39.dmi' + icon_state = "lahtil" + inhand_icon_state = "sniper" + worn_icon_state = "sniper" + fire_sound = 'sound/items/weapons/gun/sniper/shot.ogg' + fire_sound_volume = 90 + load_sound = 'sound/items/weapons/gun/sniper/mag_insert.ogg' + rack_sound = 'sound/items/weapons/gun/sniper/rack.ogg' + suppressed_sound = 'sound/items/weapons/gun/general/heavy_shot_suppressed.ogg' + mag_display = FALSE + recoil = 15 + w_class = WEIGHT_CLASS_BULKY + accepted_magazine_type = /obj/item/ammo_box/magazine/lahtimagazine + fire_delay = 8 SECONDS + slowdown = 2 + burst_size = 1 + slot_flags = ITEM_SLOT_BACK + actions_types = list() + suppressor_x_offset = 3 + suppressor_y_offset = 3 diff --git a/code/modules/projectiles/projectile/bullets/sniper.dm b/code/modules/projectiles/projectile/bullets/sniper.dm index 7fa6b6a181c..ce352fcd93a 100644 --- a/code/modules/projectiles/projectile/bullets/sniper.dm +++ b/code/modules/projectiles/projectile/bullets/sniper.dm @@ -117,3 +117,29 @@ ricochet_incidence_leeway = 90 ricochet_decay_damage = 1 ricochet_shoots_firer = FALSE + +// 20x138mm bullet (lahti-l39) // + +/obj/projectile/bullet/mm20x138 + name ="20x138mm bullet" + speed = 3.5 + range = 400 // same as sniper rifle + damage = 400 + paralyze = 100 + dismemberment = 50 + catastropic_dismemberment = TRUE + armour_penetration = 50 + ignore_range_hit_prone_targets = TRUE + var/mecha_damage = 2 // this is a damage multiplier var + var/object_damage = 2 // same normal damage + paralyze = 100 // same as sniper rifle + +/obj/projectile/bullet/mm20x138/on_hit(atom/target, blocked = 0, pierce_hit) + if(isobj(target) && (blocked != 100)) + var/obj/thing_to_break = target + var/damage_to_deal = object_damage + if(ismecha(thing_to_break) && mecha_damage) + damage_to_deal += mecha_damage + if(damage_to_deal) + thing_to_break.take_damage(damage_to_deal, BRUTE, BULLET, FALSE) + return ..() diff --git a/code/modules/reagents/chemistry/machinery/chem_recipe_debug.dm b/code/modules/reagents/chemistry/machinery/chem_recipe_debug.dm index c2591c8dd30..f83c5a1ad0d 100644 --- a/code/modules/reagents/chemistry/machinery/chem_recipe_debug.dm +++ b/code/modules/reagents/chemistry/machinery/chem_recipe_debug.dm @@ -452,7 +452,7 @@ var/mode = tgui_alert(usr, "Play all or a specific reaction?","Select Reaction", list("All", "Specific")) if(mode == "All") reactions_to_test.Cut() - for(var/reaction as anything in all_reaction_list) + for(var/reaction in all_reaction_list) reactions_to_test += all_reaction_list[reaction] current_reaction_index = 0 return TRUE diff --git a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm index 23a8a4b32d4..4cebd1613fe 100644 --- a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm +++ b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm @@ -97,7 +97,7 @@ total_weight += target.w_class if(to_process.len) . += span_notice("Currently holding:") - for(var/target_name as anything in to_process) + for(var/target_name in to_process) . += span_notice("[to_process[target_name]] [target_name]") . += span_notice("Filled to [round((total_weight / maximum_weight) * 100)]% capacity.") diff --git a/code/modules/reagents/chemistry/reagents/impure_reagents/impure_medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/impure_reagents/impure_medicine_reagents.dm index 8e5767d299c..d22235c0846 100644 --- a/code/modules/reagents/chemistry/reagents/impure_reagents/impure_medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/impure_reagents/impure_medicine_reagents.dm @@ -662,9 +662,9 @@ Basically, we fill the time between now and 2s from now with hands based off the ) traumalist -= abstracttraumas - for (var/type as anything in forbiddentraumas) + for (var/type in forbiddentraumas) traumalist -= typesof(type) - for (var/type as anything in forbiddensubtypes) + for (var/type in forbiddensubtypes) traumalist -= subtypesof(type) traumalist = shuffle(traumalist) diff --git a/code/modules/reagents/chemistry/recipes.dm b/code/modules/reagents/chemistry/recipes.dm index 105ce859ffd..01250e80bf0 100644 --- a/code/modules/reagents/chemistry/recipes.dm +++ b/code/modules/reagents/chemistry/recipes.dm @@ -405,9 +405,7 @@ holder.my_atom.audible_message("The [holder.my_atom] suddenly explodes, sending a shockwave rippling through the air!") playsound(this_turf, 'sound/effects/chemistry/shockwave_explosion.ogg', 80, TRUE) //Modified goonvortex - for(var/atom/movable/movey as anything in orange(range, this_turf)) - if(!istype(movey, /atom/movable)) - continue + for(var/atom/movable/movey in orange(range, this_turf)) if(isliving(movey) && damage) var/mob/living/live = movey live.apply_damage(damage)//Since this can be called multiple times diff --git a/code/modules/reagents/chemistry/recipes/pyrotechnics.dm b/code/modules/reagents/chemistry/recipes/pyrotechnics.dm index 6e02f2f4e6a..a10a6902ccb 100644 --- a/code/modules/reagents/chemistry/recipes/pyrotechnics.dm +++ b/code/modules/reagents/chemistry/recipes/pyrotechnics.dm @@ -30,7 +30,7 @@ if(purge_power >= 1) var/has_purging_chemical = FALSE // They need one of the purge reagents in them - for(var/purging_chem as anything in PURGING_REAGENTS) + for(var/purging_chem in PURGING_REAGENTS) if(holder.has_reagent(purging_chem)) // We have a purging chemical has_purging_chemical = TRUE diff --git a/code/modules/reagents/reagent_containers/cups/glassbottle.dm b/code/modules/reagents/reagent_containers/cups/glassbottle.dm index 391a1bfc241..a76974b1052 100644 --- a/code/modules/reagents/reagent_containers/cups/glassbottle.dm +++ b/code/modules/reagents/reagent_containers/cups/glassbottle.dm @@ -25,7 +25,7 @@ age_restricted = TRUE // wrryy can't set an init value to see if drink_type contains ALCOHOL so here we go ///Directly relates to the 'knockdown' duration. Lowered by armor (i.e. helmets) var/bottle_knockdown_duration = BOTTLE_KNOCKDOWN_DEFAULT_DURATION - tool_behaviour = TOOL_ROLLINGPIN // Used to knock out the Chef. + tool_behaviour = TOOL_ROLLINGPIN // Glass bottles can be used as rolling pins when empty toolspeed = 1.3 //it's a little awkward to use, but it's a cylinder alright. /// A contained piece of paper, a photo, or space cash, that we can use as a message or gift to future spessmen. var/obj/item/message_in_a_bottle @@ -51,6 +51,13 @@ return CONTEXTUAL_SCREENTIP_SET return NONE +/obj/item/reagent_containers/cup/glass/bottle/on_reagent_change(datum/reagents/holder, ...) + . = ..() + if(!reagents?.total_volume) + tool_behaviour = TOOL_ROLLINGPIN // Glass bottles can be used as rolling pins when empty + else + tool_behaviour = null + /obj/item/reagent_containers/cup/glass/bottle/Exited(atom/movable/gone, atom/newloc) if(gone == message_in_a_bottle) message_in_a_bottle = null diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index 63d241fd70a..64e83e01e32 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -633,7 +633,6 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/reagent_dispensers/wall/virusfood, 30 name = "vat of cooking oil" desc = "A huge metal vat with a tap on the front. Filled with cooking oil for use in frying food." icon_state = "vat" - anchored = TRUE reagent_id = /datum/reagent/consumable/nutriment/fat/oil openable = TRUE @@ -642,7 +641,6 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/reagent_dispensers/wall/virusfood, 30 desc = "A dish full of food slop for your bowl." icon = 'icons/obj/service/kitchen.dmi' icon_state = "serving" - anchored = TRUE reagent_id = /datum/reagent/consumable/nutraslop /obj/structure/reagent_dispensers/plumbed diff --git a/code/modules/research/designs/autolathe/security_designs.dm b/code/modules/research/designs/autolathe/security_designs.dm index ba25d46aa40..ebe81f05e09 100644 --- a/code/modules/research/designs/autolathe/security_designs.dm +++ b/code/modules/research/designs/autolathe/security_designs.dm @@ -27,7 +27,7 @@ id = "c38" build_type = AUTOLATHE materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*3) - build_path = /obj/item/ammo_box/c38 + build_path = /obj/item/ammo_box/speedloader/c38 category = list( RND_CATEGORY_INITIAL, RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO, diff --git a/code/modules/research/designs/weapon_designs.dm b/code/modules/research/designs/weapon_designs.dm index 4c92cff8511..26d0ba9456b 100644 --- a/code/modules/research/designs/weapon_designs.dm +++ b/code/modules/research/designs/weapon_designs.dm @@ -21,7 +21,7 @@ /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT, ) - build_path = /obj/item/ammo_box/c38/trac + build_path = /obj/item/ammo_box/speedloader/c38/trac category = list( RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO ) @@ -36,7 +36,7 @@ /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT * 3, /datum/material/plasma = HALF_SHEET_MATERIAL_AMOUNT * 1.5, ) - build_path = /obj/item/ammo_box/c38/hotshot + build_path = /obj/item/ammo_box/speedloader/c38/hotshot category = list( RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO ) @@ -51,7 +51,7 @@ /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT * 3, /datum/material/plasma = HALF_SHEET_MATERIAL_AMOUNT * 1.5, ) - build_path = /obj/item/ammo_box/c38/iceblox + build_path = /obj/item/ammo_box/speedloader/c38/iceblox category = list( RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO ) @@ -63,7 +63,7 @@ id = "c38_rubber" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT * 3) - build_path = /obj/item/ammo_box/c38/match/bouncy + build_path = /obj/item/ammo_box/speedloader/c38/match/bouncy category = list( RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO ) @@ -78,7 +78,7 @@ /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT * 3, /datum/material/bluespace = HALF_SHEET_MATERIAL_AMOUNT * 1.5, ) - build_path = /obj/item/ammo_box/c38/true + build_path = /obj/item/ammo_box/speedloader/c38/true category = list( RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO ) @@ -94,7 +94,7 @@ /datum/material/uranium = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT, ) - build_path = /obj/item/ammo_box/c38/flare + build_path = /obj/item/ammo_box/speedloader/c38/flare category = list( RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO ) diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm index 70c37d3d066..2c591e0fe11 100644 --- a/code/modules/research/server.dm +++ b/code/modules/research/server.dm @@ -146,13 +146,13 @@ if(HDD_PANEL_CLOSED) . += "The front panel is closed. You can see some recesses which may have screws." if(HDD_PANEL_OPEN) - . += "The front panel is dangling open. The hdd is in a secure housing. Looks like you'll have to pry it loose." + . += "The front panel is dangling open. The HDD is in a secure housing. Looks like you'll have to pry it loose." if(HDD_PRIED) - . += "The front panel is dangling open. The hdd has been pried from its housing. It is still connected by wires." + . += "The front panel is dangling open. The HDD has been pried from its housing. It is still connected by wires." if(HDD_CUT_LOOSE) . += "The front panel is dangling open. All you can see inside are cut wires and mangled metal." if(HDD_OVERLOADED) - . += "The front panel is dangling open. The hdd inside is destroyed and the wires are all burned." + . += "The front panel is dangling open. The HDD inside is destroyed and the wires are all burned." /obj/machinery/rnd/server/master/tool_act(mob/living/user, obj/item/tool, list/modifiers) if(!tool.tool_behaviour) @@ -175,10 +175,10 @@ balloon_alert(user, "you weren't trained to install this!") return TRUE if(HDD_PRIED) - balloon_alert(user, "the hdd housing is completely broken, it won't fit!") + balloon_alert(user, "the HDD housing is completely broken, it won't fit!") return TRUE if(HDD_CUT_LOOSE) - balloon_alert(user, "the hdd housing is completely broken and all the wires are cut!") + balloon_alert(user, "the HDD housing is completely broken and all the wires are cut!") return TRUE if(HDD_OVERLOADED) balloon_alert(user, "the inside is scorched and all the wires are burned!") diff --git a/code/modules/shuttle/mobile_port/variants/custom/custom_consoles.dm b/code/modules/shuttle/mobile_port/variants/custom/custom_consoles.dm index b8a5ddedba0..c28a72c8b23 100644 --- a/code/modules/shuttle/mobile_port/variants/custom/custom_consoles.dm +++ b/code/modules/shuttle/mobile_port/variants/custom/custom_consoles.dm @@ -91,6 +91,8 @@ /obj/machinery/computer/camera_advanced/shuttle_docker/custom/proc/on_shuttle_expanded(obj/docking_port/mobile/source, list/turfs) SIGNAL_HANDLER recalculate_eye_view(source) + var/list/bounds = shuttle_port.return_coords(eyeobj.x - x_offset, eyeobj.y - y_offset, eyeobj.dir) + var/list/overlappers = SSshuttle.get_dock_overlap(bounds[1], bounds[2], bounds[3], bounds[4], eyeobj.z) if(my_port) var/here_x = source.x var/here_y = source.y @@ -122,7 +124,7 @@ target_x += offset_y target_y -= offset_x checked_turf = locate(target_x, target_y, target_z) - if(checkLandingTurf(checked_turf) != SHUTTLE_DOCKER_LANDING_CLEAR) + if(checkLandingTurf(checked_turf, overlappers) != SHUTTLE_DOCKER_LANDING_CLEAR) if(docked) my_port.unregister() my_port.delete_after = TRUE diff --git a/code/modules/surgery/bodyparts/_bodyparts.dm b/code/modules/surgery/bodyparts/_bodyparts.dm index 7e2f76356dd..b0d49725805 100644 --- a/code/modules/surgery/bodyparts/_bodyparts.dm +++ b/code/modules/surgery/bodyparts/_bodyparts.dm @@ -619,7 +619,7 @@ var/bio_status = NONE - for (var/state as anything in GLOB.bio_state_anatomy) + for (var/state in GLOB.bio_state_anatomy) var/flag = text2num(state) if (!(biological_state & flag)) continue diff --git a/code/modules/surgery/bodyparts/head.dm b/code/modules/surgery/bodyparts/head.dm index 7359b1fb71d..bea39018a6c 100644 --- a/code/modules/surgery/bodyparts/head.dm +++ b/code/modules/surgery/bodyparts/head.dm @@ -228,7 +228,7 @@ . = ..() AddElement(/datum/element/toy_talk) -/obj/item/bodypart/head/get_voice() +/obj/item/bodypart/head/get_voice(add_id_name) return "The head of [real_name]" /obj/item/bodypart/head/update_bodypart_damage_state() diff --git a/code/modules/surgery/plastic_surgery.dm b/code/modules/surgery/plastic_surgery.dm index b4e090595b9..2c518619fbe 100644 --- a/code/modules/surgery/plastic_surgery.dm +++ b/code/modules/surgery/plastic_surgery.dm @@ -90,7 +90,7 @@ var/obj/item/offhand = user.get_inactive_held_item() if(istype(offhand, /obj/item/photo) && istype(surgery, /datum/surgery/plastic_surgery/advanced)) var/obj/item/photo/disguises = offhand - for(var/namelist as anything in disguises.picture?.names_seen) + for(var/namelist in disguises.picture?.names_seen) names += namelist else to_chat(user, span_warning("You have no picture to base the appearance on, reverting to random appearances.")) diff --git a/code/modules/transport/_transport_machinery.dm b/code/modules/transport/_transport_machinery.dm index 60285102938..61caee8a0d7 100644 --- a/code/modules/transport/_transport_machinery.dm +++ b/code/modules/transport/_transport_machinery.dm @@ -86,7 +86,7 @@ // Construct the signals LAZYINITLIST(repair_signals) - for(var/tool_method as anything in methods_to_fix) + for(var/tool_method in methods_to_fix) repair_signals += COMSIG_ATOM_TOOL_ACT(how_do_we_fix_it[tool_method]) // Register signals to make it fixable @@ -100,7 +100,7 @@ /obj/machinery/transport/examine(mob/user) . = ..() if(methods_to_fix) - for(var/tool_method as anything in methods_to_fix) + for(var/tool_method in methods_to_fix) . += span_warning("It needs someone to [EXAMINE_HINT(tool_method)].") if(panel_open) . += span_notice("It can be deconstructed with a [EXAMINE_HINT("crowbar.")]") diff --git a/code/modules/transport/elevator/elev_music_zone.dm b/code/modules/transport/elevator/elev_music_zone.dm index 9a8b2e98c15..a4223bc33c2 100644 --- a/code/modules/transport/elevator/elev_music_zone.dm +++ b/code/modules/transport/elevator/elev_music_zone.dm @@ -101,13 +101,13 @@ GLOBAL_LIST_EMPTY(elevator_music) /// Start sound loops playing /datum/proximity_monitor/advanced/elevator_music_area/proc/turn_on() enabled = TRUE - for (var/mob as anything in tracked_mobs) + for (var/mob in tracked_mobs) var/datum/looping_sound/loop = tracked_mobs[mob] loop.start() /// Stop active sound loops /datum/proximity_monitor/advanced/elevator_music_area/proc/turn_off() enabled = FALSE - for (var/mob as anything in tracked_mobs) + for (var/mob in tracked_mobs) var/datum/looping_sound/loop = tracked_mobs[mob] loop.stop() diff --git a/code/modules/transport/tram/tram_remote.dm b/code/modules/transport/tram/tram_remote.dm index 65c2cff8727..789a4f3cd47 100644 --- a/code/modules/transport/tram/tram_remote.dm +++ b/code/modules/transport/tram/tram_remote.dm @@ -17,9 +17,9 @@ if(!id_tag) id_tag = assign_random_name() SStransport.hello(src, name, id_tag) - register_context() /obj/item/assembly/control/transport/remote/add_context(atom/source, list/context, obj/item/held_item, mob/user) + . = NONE if(!specific_transport_id) context[SCREENTIP_CONTEXT_LMB] = "Link tram" return CONTEXTUAL_SCREENTIP_SET diff --git a/code/modules/unit_tests/designs.dm b/code/modules/unit_tests/designs.dm index b892528aae2..94e7aa24bba 100644 --- a/code/modules/unit_tests/designs.dm +++ b/code/modules/unit_tests/designs.dm @@ -72,7 +72,7 @@ for (var/obj/item/disk/surgery/design_disk as anything in subtypesof(/obj/item/disk/surgery)) design_disk = new design_disk() - for (var/surgery_type as anything in design_disk.surgeries) + for (var/surgery_type in design_disk.surgeries) for (var/design_id in all_designs) var/datum/design/surgery/design = all_designs[design_id] if (ispath(design, /datum/design/surgery) && design::surgery == surgery_type) diff --git a/code/modules/unit_tests/dna_infusion.dm b/code/modules/unit_tests/dna_infusion.dm index 86d19a84e5f..72f0ff78371 100644 --- a/code/modules/unit_tests/dna_infusion.dm +++ b/code/modules/unit_tests/dna_infusion.dm @@ -3,7 +3,7 @@ /datum/unit_test/valid_dna_infusion/Run() for(var/datum/infuser_entry/infuser_entry as anything in flatten_list(GLOB.infuser_entries)) - for(var/input_type as anything in infuser_entry.input_obj_or_mob) + for(var/input_type in infuser_entry.input_obj_or_mob) if(ispath(input_type, /mob/living)) continue var/atom/movable/movable = allocate(input_type) diff --git a/code/modules/unit_tests/fish_unit_tests.dm b/code/modules/unit_tests/fish_unit_tests.dm index 7d9df1df417..d42c2e8c81f 100644 --- a/code/modules/unit_tests/fish_unit_tests.dm +++ b/code/modules/unit_tests/fish_unit_tests.dm @@ -449,7 +449,7 @@ /datum/fish_source/unit_test_all_fish /datum/fish_source/unit_test_all_fish/New() - for(var/fish_type as anything in subtypesof(/obj/item/fish)) + for(var/fish_type in subtypesof(/obj/item/fish)) fish_table[fish_type] = 10 return ..() diff --git a/code/modules/unit_tests/geyser.dm b/code/modules/unit_tests/geyser.dm index bdbaf9cc189..8bd3aa65bed 100644 --- a/code/modules/unit_tests/geyser.dm +++ b/code/modules/unit_tests/geyser.dm @@ -9,7 +9,7 @@ /datum/unit_test/geyser/Run() //While we're at it just check em all var/list/geysers = subtypesof(/obj/structure/geyser) - for(var/geyser_type as anything in geysers) + for(var/geyser_type in geysers) var/obj/structure/geyser/wittel/geyser = allocate(geyser_type) geyser.potency = geyser.max_volume //make it recharge in 1 tick diff --git a/code/modules/unit_tests/plane_double_transform.dm b/code/modules/unit_tests/plane_double_transform.dm index f4928a8f997..3379f751e11 100644 --- a/code/modules/unit_tests/plane_double_transform.dm +++ b/code/modules/unit_tests/plane_double_transform.dm @@ -13,13 +13,13 @@ // Generates a list of render target -> PM for future use var/list/render_target_to_plane = list() - for(var/plane_key as anything in our_group.plane_masters) + for(var/plane_key in our_group.plane_masters) var/atom/movable/screen/plane_master/plane = our_group.plane_masters[plane_key] if(plane.render_target) render_target_to_plane[plane.render_target] = plane - for(var/plane_key as anything in our_group.plane_masters) + for(var/plane_key in our_group.plane_masters) var/atom/movable/screen/plane_master/plane = our_group.plane_masters[plane_key] if(!plane.multiz_scaled) @@ -33,12 +33,10 @@ consider making a new render plate that they can both draw to instead, or something of that nature.") // Now we walk for filters that take from us - for(var/filter_id in plane.filter_data) - var/list/filter = plane.filter_data[filter_id] + for(var/list/filter in plane.filter_data) if(!filter["render_source"]) continue var/atom/movable/screen/plane_master/target = render_target_to_plane[filter["render_source"]] if(target.multiz_scaled) TEST_FAIL("[plane.type] draws a render relay into [target.type]. Both are scaled by multiz, so this will cause strange transforms.\n\ consider making a new render plate that they can both draw to instead, or something of that nature.") - diff --git a/code/modules/unit_tests/reagent_recipe_collisions.dm b/code/modules/unit_tests/reagent_recipe_collisions.dm index 6623c73a31d..c219e69a711 100644 --- a/code/modules/unit_tests/reagent_recipe_collisions.dm +++ b/code/modules/unit_tests/reagent_recipe_collisions.dm @@ -6,8 +6,8 @@ // Exclude soup from this test, they all have the same "reagents" just about var/list/reactions_sans_soup = GLOB.chemical_reactions_list - subtypesof(/datum/chemical_reaction/food/soup) - for(var/reaction_type_a as anything in reactions_sans_soup) - for(var/reaction_type_b as anything in reactions_sans_soup) + for(var/reaction_type_a in reactions_sans_soup) + for(var/reaction_type_b in reactions_sans_soup) if(reaction_type_a == reaction_type_b) continue var/datum/chemical_reaction/reaction_a = reactions_sans_soup[reaction_type_a] diff --git a/code/modules/unit_tests/say.dm b/code/modules/unit_tests/say.dm index 08f4370d8cb..681a2d2dccd 100644 --- a/code/modules/unit_tests/say.dm +++ b/code/modules/unit_tests/say.dm @@ -125,9 +125,6 @@ /datum/unit_test/speech/proc/handle_hearing(datum/source, list/hearing_args) SIGNAL_HANDLER - // So it turns out that the `message` arg for COMSIG_MOVABLE_HEAR is super redundant and should probably - // be gutted out of both the Hear() proc and signal since it's never used - //TEST_ASSERT(hearing_args[HEARING_MESSAGE], "Handle hearing signal does not have a message arg") TEST_ASSERT(hearing_args[HEARING_SPEAKER], "Handle hearing signal does not have a speaker arg") TEST_ASSERT(hearing_args[HEARING_LANGUAGE], "Handle hearing signal does not have a language arg") TEST_ASSERT(hearing_args[HEARING_RAW_MESSAGE], "Handle hearing signal does not have a raw message arg") @@ -166,7 +163,7 @@ var/datum/client_interface/mock_client = new() listener.mock_client = mock_client - RegisterSignal(speaker, COMSIG_MOB_SAY, PROC_REF(handle_speech)) // + RegisterSignal(speaker, COMSIG_MOB_SAY, PROC_REF(handle_speech)) RegisterSignal(speaker_radio, COMSIG_RADIO_NEW_MESSAGE, PROC_REF(handle_radio_hearing)) RegisterSignal(listener, COMSIG_MOVABLE_HEAR, PROC_REF(handle_hearing)) diff --git a/code/modules/uplink/uplink_items/ammunition.dm b/code/modules/uplink/uplink_items/ammunition.dm index 7000fb7e9a7..63853d55745 100644 --- a/code/modules/uplink/uplink_items/ammunition.dm +++ b/code/modules/uplink/uplink_items/ammunition.dm @@ -51,7 +51,7 @@ name = ".357 Speed Loader" desc = "A speed loader that contains seven additional .357 Magnum rounds; usable with the Syndicate revolver. \ For when you really need a lot of things dead." - item = /obj/item/ammo_box/a357 + item = /obj/item/ammo_box/speedloader/c357 cost = 4 purchasable_from = ~(UPLINK_ALL_SYNDIE_OPS | UPLINK_SPY) //nukies get their own version uplink_item_flags = SYNDIE_TRIPS_CONTRABAND diff --git a/code/modules/uplink/uplink_items/nukeops.dm b/code/modules/uplink/uplink_items/nukeops.dm index 7a3e40bffe7..465e244a9f5 100644 --- a/code/modules/uplink/uplink_items/nukeops.dm +++ b/code/modules/uplink/uplink_items/nukeops.dm @@ -218,7 +218,7 @@ name = ".357 Speed Loader (Revolver)" desc = "A speed loader that contains seven additional .357 Magnum rounds; usable with the Syndicate revolver. \ For when you really need a lot of things dead. Unlike field agents, operatives get a premium price for their speedloaders!" - item = /obj/item/ammo_box/a357 + item = /obj/item/ammo_box/speedloader/c357 purchasable_from = parent_type::purchasable_from | UPLINK_SPY /datum/uplink_item/ammo_nuclear/special/revolver/phasic @@ -226,7 +226,7 @@ desc = "A speed loader that contains seven additional .357 Magnum phasic rounds; usable with the Syndicate revolver. \ These bullets are made from an experimental alloy, 'Ghost Lead', that allows it to pass through almost any non-organic material. \ The name is a misnomer. It doesn't contain any lead whatsoever!" - item = /obj/item/ammo_box/a357/phasic + item = /obj/item/ammo_box/speedloader/c357/phasic purchasable_from = parent_type::purchasable_from | UPLINK_SPY /datum/uplink_item/ammo_nuclear/special/revolver/heartseeker @@ -234,7 +234,7 @@ desc = "A speed loader that contains seven additional .357 Magnum heartseeker rounds; usable with the Syndicate revolver. \ Able to veer straight into targets! Don't miss a shot with heartseeker! As seen in the hit NTFlik horror-space western film, Forget-Me-Not! \ Brought to you by Roseus Galactic!" - item = /obj/item/ammo_box/a357/heartseeker + item = /obj/item/ammo_box/speedloader/c357/heartseeker cost = 3 purchasable_from = parent_type::purchasable_from | UPLINK_SPY diff --git a/code/modules/vehicles/mecha/equipment/tools/mining_tools.dm b/code/modules/vehicles/mecha/equipment/tools/mining_tools.dm index 49e70d3f017..759a513c828 100644 --- a/code/modules/vehicles/mecha/equipment/tools/mining_tools.dm +++ b/code/modules/vehicles/mecha/equipment/tools/mining_tools.dm @@ -262,9 +262,8 @@ return FALSE COOLDOWN_START(src, area_scan_cooldown, 15 SECONDS) for(var/mob/living/driver in chassis.return_drivers()) - for(var/obj/structure/ore_vent/vent as anything in range(5, chassis)) - if(istype(vent, /obj/structure/ore_vent)) - vent.scan_and_confirm(driver, TRUE) + for(var/obj/structure/ore_vent/vent in range(5, chassis)) + vent.scan_and_confirm(driver, TRUE) return TRUE #undef DRILL_BASIC diff --git a/code/modules/vehicles/scooter.dm b/code/modules/vehicles/scooter.dm index 187b64835a7..7a4100f753e 100644 --- a/code/modules/vehicles/scooter.dm +++ b/code/modules/vehicles/scooter.dm @@ -168,8 +168,8 @@ if (over_object == skater) pick_up_board(skater) -/obj/vehicle/ridden/scooter/skateboard/proc/pick_up_board(mob/living/carbon/skater) - if (skater.incapacitated || !Adjacent(skater)) +/obj/vehicle/ridden/scooter/skateboard/proc/pick_up_board(mob/living/carbon/skater, forced = FALSE) + if ((skater.incapacitated || !Adjacent(skater)) && !forced) return if(has_buckled_mobs()) to_chat(skater, span_warning("You can't lift this up when somebody's on it.")) diff --git a/code/modules/vehicles/vehicle_actions.dm b/code/modules/vehicles/vehicle_actions.dm index 0463ac7bfa7..4028b8a02d2 100644 --- a/code/modules/vehicles/vehicle_actions.dm +++ b/code/modules/vehicles/vehicle_actions.dm @@ -409,7 +409,8 @@ animate(board, pixel_z = 6, time = 0.3 SECONDS, flags = ANIMATION_RELATIVE|ANIMATION_PARALLEL) animate(pixel_z = -6, time = 0.1 SECONDS, flags = ANIMATION_RELATIVE) board.unbuckle_mob(rider) - addtimer(CALLBACK(board, TYPE_PROC_REF(/obj/vehicle/ridden/scooter/skateboard, pick_up_board), rider), 0.5 SECONDS) // so the board can still handle "picking it up" + rider.Immobilize(0.5 SECONDS) + addtimer(CALLBACK(board, TYPE_PROC_REF(/obj/vehicle/ridden/scooter/skateboard, pick_up_board), rider, TRUE), 0.5 SECONDS) // so the board can still handle "picking it up" diff --git a/code/modules/wiremod/components/atom/hear.dm b/code/modules/wiremod/components/atom/hear.dm index 4dc8812efc0..b3a41154dc6 100644 --- a/code/modules/wiremod/components/atom/hear.dm +++ b/code/modules/wiremod/components/atom/hear.dm @@ -43,7 +43,7 @@ SIGNAL_HANDLER return Hear(arglist(arguments)) -/obj/item/circuit_component/hear/Hear(message, atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods, message_range) +/obj/item/circuit_component/hear/Hear(atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, radio_freq_name, radio_freq_color, list/spans, list/message_mods, message_range) if(!on.value) return FALSE if(speaker == parent?.shell) diff --git a/code/modules/wiremod/core/integrated_circuit.dm b/code/modules/wiremod/core/integrated_circuit.dm index 459ff570172..ff50f635522 100644 --- a/code/modules/wiremod/core/integrated_circuit.dm +++ b/code/modules/wiremod/core/integrated_circuit.dm @@ -231,14 +231,14 @@ GLOBAL_LIST_EMPTY_TYPED(integrated_circuits, /obj/item/integrated_circuit) * * to_check - The component to check. **/ /obj/item/integrated_circuit/proc/is_duplicate(obj/item/circuit_component/to_check) - for(var/component as anything in attached_components) + for(var/component in attached_components) if(component == to_check) continue if(istype(component, to_check.type)) return TRUE if(istype(component, /obj/item/circuit_component/module)) var/obj/item/circuit_component/module/module = component - for(var/module_component as anything in module.internal_circuit.attached_components) + for(var/module_component in module.internal_circuit.attached_components) if(module_component == to_check) continue if(istype(module_component, to_check.type)) diff --git a/html/changelogs/AutoChangeLog-pr-92980.yml b/html/changelogs/AutoChangeLog-pr-92980.yml deleted file mode 100644 index 3fcdfacb5ee..00000000000 --- a/html/changelogs/AutoChangeLog-pr-92980.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Pickle-Coding" -delete-after: True -changes: - - code_imp: "Caches individual gases for gas reactions." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-92981.yml b/html/changelogs/AutoChangeLog-pr-92981.yml deleted file mode 100644 index 9a591d50ad9..00000000000 --- a/html/changelogs/AutoChangeLog-pr-92981.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "RealWinterFrost & TheSelfish" -delete-after: True -changes: - - rscadd: "Multicolours ushankas, woo!" - - rscadd: "Security now has a hat to fight off the frost." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-93002.yml b/html/changelogs/AutoChangeLog-pr-93002.yml deleted file mode 100644 index 911ae678893..00000000000 --- a/html/changelogs/AutoChangeLog-pr-93002.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "LT3" -delete-after: True -changes: - - bugfix: "'a box full of shotgun darts with increased chemical storage capacity' now has a shorter name" \ No newline at end of file diff --git a/html/changelogs/archive/2025-09.yml b/html/changelogs/archive/2025-09.yml index 272e375efd6..b63ac29febd 100644 --- a/html/changelogs/archive/2025-09.yml +++ b/html/changelogs/archive/2025-09.yml @@ -486,3 +486,147 @@ materials being processed with a tool. SyncIt21: - bugfix: ORM's smelt ores correctly when inserted by hand/bag +2025-09-18: + LT3: + - bugfix: '''a box full of shotgun darts with increased chemical storage capacity'' + now has a shorter name' + Pickle-Coding: + - code_imp: Caches individual gases for gas reactions. + RealWinterFrost & TheSelfish: + - rscadd: Multicolours ushankas, woo! + - rscadd: Security now has a hat to fight off the frost. +2025-09-19: + SyncIt21: + - bugfix: ore vents have unique distribution of at most 4 minerals without rare + ones being repeated + - bugfix: ore vents should no longer be produce 0 material boulders + theselfish: + - balance: a ushanka no longer can protect brainy as much as a metal helmet +2025-09-20: + Aliceee2ch: + - bugfix: Removed rogue decal in DeltaStation garden + - bugfix: Added missing RD computer in RD office (Catwalk) + - map: Replaced one of RND consoles on bridge with RD computer (Catwalk) + Hatterhat: + - balance: General ammo boxes (not speedloaders, not stripper clips) can no longer + multiload into currently loaded magazines (revolver cylinders, internal magazines). + - balance: Speedloaders are now a separate type from ammo boxes, and can only multiload + into currently loaded magazines e.g. revolver cylinders. + - qol: Ammo boxes, magazines, and speedloaders now have fancier types for spawning + in by admins. + Melbert: + - bugfix: Honorifics will no longer interfere with voice detectors and similar things + SyncIt21: + - qol: ' Multitooling a pod door controller now picks from a list of doors available + for that player(crafted, set via controller) only and can auto generate new + IDs for you' + - bugfix: no BSOD when clicking table row buttons in controller overview window + Y0SH1M4S73R: + - bugfix: You no longer need 40 welding fuel to start welding or unwelding shuttle + engines, despite only consuming 1. + - bugfix: Shuttle engines constructed from anchored machine frames start in the + wrenched-but-unwelded state. + - bugfix: Expanding custom shuttles from shuttle frames is once again possible without + href exploitation. + - bugfix: Shuttle expansion now correctly checks for other shuttle docking ports + the expanded shuttle's footprint would encroach upon. + - qol: Tries to make some of the buttons in the custom shuttle UI more indicative + of what they actually do. + loganuk: + - bugfix: Fixes unable to place power cables on reinforced catwalk in Lavaland + - bugfix: Allows health analysers to scan Cyborg MMIs and show a brain (or not) + theselfish: + - spellcheck: HDD has been properly capitalised in the server robbery thing. +2025-09-21: + Aliceee2ch: + - bugfix: Added missing insulated gloves in WawaStation tech storage + - map: Remapped gateway museum area. + AyIong: + - qol: Chat tabs are scrollable now (with your mouse wheel yeah) if they are too + much or your screen resolution sucks + Ezel: + - map: makes psychology office in metastation feel a little more open + Ghommie: + - bugfix: Shivs cannot be erroneously crafted via crafting menu anymore. That'd + cause you to get a generic glass shiv if you were to use sturdier shards like + plasma or titanium. + - rscdel: Removed the recipe for cable handcuffs from the crafting menu. + - bugfix: You can once again craft custom material stuff like carving blocks and + toilets made of sand once again. + - qol: The direction of your character changes when moving inside a cardboard box. + Hatterhat: + - bugfix: Lava no longer slows you down while running on heatproof catwalks. Also, + heatproof support lattices are heatproof catwalks now, which is more accurate + to their sprites. + Melbert: + - spellcheck: Replaced ooc ic in RCD, RPLD, and alien power feedback + - code_imp: Removed some redundant code from core hearing code. Report if you hear + anything weird. + Pink-MB: + - bugfix: Intercomms work for Cyborgs + YakiAttaki: + - rscadd: Added the ability to pick up stoats + - rscadd: Stoats can now breed! + - rscadd: Baby stoat mobs are now a thing. Aww, so cute! + lelandkemble: + - spellcheck: Changed det hat candy corn text to more neutral language + - bugfix: Apcs will no longer bluescreen without a screen + - map: Moved one RPD from atmos to engi on Nebula + - bugfix: Locked reflector boxes no longer repeat "can't rotate" forever + timothymtorres: + - bugfix: Fix blink animation for eyes with no eyelids +2025-09-22: + Aliceee2ch: + - bugfix: Fixed meson and thermal view action for cyborgs + - bugfix: You can't eject infinite toner from cyborg decal painter anymore. + - rscdel: Removed now unused cyborg meson and thermal goggles items. + Ghommie: + - bugfix: Fixed some recipes taking too long to make. + SmArtKar: + - refactor: Refactors immerse element to use alpha filters instead of static overlays. + It should look much prettier now. + - refactor: Refactored filters to utilize binary insertion instead of timSort. The + server should run somewhat faster now, hopefully. + Yobrocharlie: + - rscadd: Added the Lahti-L39 rifle +2025-09-23: + Gaxeer: + - bugfix: '`/proc/duplicate_object` now properly sets copy location' + Gboster-0: + - bugfix: fixed mapped in quantum pads runtiming when trying to link with eachother + Melbert: + - qol: Reworked stammering. Only the first character is stammered, and digraphs + are accounted for. + - qol: Reworked drunken slurring. No longer inserts a bunch of random apostrophes, + now creates more + longer drawn out words. + lelandkemble: + - bugfix: Kickflippers now catch their board every time + loganuk: + - bugfix: Fixes endless updates to det forensic scanner into the UI +2025-09-24: + Aliceee2ch: + - image: Added inhand sprite for CE professional RCD + Ghommie: + - qol: You can now rotate cannons. + - bugfix: Bluespace anomalies should no longer teleport 'un-teleportable' mobs like + anchored AIs or megafauna. + Hardly: + - spellcheck: Fixes 'souless' typo when trying to use enchanted deck of carot cards + as a changeling. + Melbert: + - bugfix: Atrocinated text is upside down again. + Xander3359: + - bugfix: Fix SMES terminal having null cable_layer + mcbalaam, Ez-Briz: + - admin: Added a new TGUI spawn panel, removing it's ancestors - HTML "Create X" + panels + necromanceranne: + - balance: Special versions of hulk, such as the wizard's transformation spell and + the pirate warlord's superhuman powers, no longer suffer from arm breakage like + normal hulks do. + - balance: Hulk arm breaking now uses natural wound determination over forced wound + effects at arm health thresholds. + - code_imp: Cleans up some of the mutation code. + timothymtorres: + - rscadd: Add cooking oil, nutraslop, and beer keg to cargo supply packs. Nutraslop + serving trays and cooking oil vats can now be pushed and moved. diff --git a/html/create_object.html b/html/create_object.html deleted file mode 100644 index c139855a009..00000000000 --- a/html/create_object.html +++ /dev/null @@ -1,121 +0,0 @@ - - - Create Object - - - - -
- - /* hreftokenfield */ Type - -
- Offset: - - - A R -
- - Number: - - Dir: - Name: -
- Where: - -

- -
-
- - - - diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi index 6ba40d01fbb..38d01c3076c 100644 Binary files a/icons/effects/effects.dmi and b/icons/effects/effects.dmi differ diff --git a/icons/mob/inhands/equipment/tools_lefthand.dmi b/icons/mob/inhands/equipment/tools_lefthand.dmi index 157f15d90a4..7fb4ab7bd95 100644 Binary files a/icons/mob/inhands/equipment/tools_lefthand.dmi and b/icons/mob/inhands/equipment/tools_lefthand.dmi differ diff --git a/icons/mob/inhands/equipment/tools_righthand.dmi b/icons/mob/inhands/equipment/tools_righthand.dmi index 290ef08244d..91aae9fe34f 100644 Binary files a/icons/mob/inhands/equipment/tools_righthand.dmi and b/icons/mob/inhands/equipment/tools_righthand.dmi differ diff --git a/icons/mob/simple/pets.dmi b/icons/mob/simple/pets.dmi index 3a1f56ede90..a760642d705 100644 Binary files a/icons/mob/simple/pets.dmi and b/icons/mob/simple/pets.dmi differ diff --git a/icons/obj/tools.dmi b/icons/obj/tools.dmi index 4777c610cac..1db24b418e5 100644 Binary files a/icons/obj/tools.dmi and b/icons/obj/tools.dmi differ diff --git a/icons/obj/weapons/guns/ammo.dmi b/icons/obj/weapons/guns/ammo.dmi index 37533a6cdeb..79250688cc4 100644 Binary files a/icons/obj/weapons/guns/ammo.dmi and b/icons/obj/weapons/guns/ammo.dmi differ diff --git a/icons/obj/weapons/guns/lahtil39.dmi b/icons/obj/weapons/guns/lahtil39.dmi new file mode 100644 index 00000000000..062ff213ed3 Binary files /dev/null and b/icons/obj/weapons/guns/lahtil39.dmi differ diff --git a/strings/slurring_drunk_text.json b/strings/slurring_drunk_text.json index c03d62f820a..254376b2702 100644 --- a/strings/slurring_drunk_text.json +++ b/strings/slurring_drunk_text.json @@ -10,9 +10,9 @@ }, "uncommon": { " ": "...huuuhhh...", - ".": " *BURP*." + ".": "... *BURP*.", + ",": ", *hic* " } - }, - "string_additions": ["'"] + } } } diff --git a/tgstation.dme b/tgstation.dme index e60c8a834b8..f46fa143fa0 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -3189,8 +3189,6 @@ #include "code\modules\admin\chat_commands.dm" #include "code\modules\admin\check_antagonists.dm" #include "code\modules\admin\create_mob.dm" -#include "code\modules\admin\create_object.dm" -#include "code\modules\admin\create_turf.dm" #include "code\modules\admin\force_event.dm" #include "code\modules\admin\fun_balloon.dm" #include "code\modules\admin\greyscale_modify_menu.dm" @@ -3246,6 +3244,10 @@ #include "code\modules\admin\smites\scarify.dm" #include "code\modules\admin\smites\supply_pod.dm" #include "code\modules\admin\smites\supply_pod_quick.dm" +#include "code\modules\admin\spawn_panel\admin_hotkeys.dm" +#include "code\modules\admin\spawn_panel\assets.dm" +#include "code\modules\admin\spawn_panel\spawn_handling.dm" +#include "code\modules\admin\spawn_panel\spawn_panel.dm" #include "code\modules\admin\verb_datums\_admin_verb_datum.dm" #include "code\modules\admin\verbs\admin.dm" #include "code\modules\admin\verbs\admin_newscaster.dm" @@ -5966,6 +5968,7 @@ #include "code\modules\projectiles\ammunition\special\syringe.dm" #include "code\modules\projectiles\boxes_magazines\_box_magazine.dm" #include "code\modules\projectiles\boxes_magazines\ammo_boxes.dm" +#include "code\modules\projectiles\boxes_magazines\speedloaders.dm" #include "code\modules\projectiles\boxes_magazines\external\grenade.dm" #include "code\modules\projectiles\boxes_magazines\external\lmg.dm" #include "code\modules\projectiles\boxes_magazines\external\pistol.dm" diff --git a/tgui/bun.lock b/tgui/bun.lock index fbbe3337ac0..acef62558fd 100644 --- a/tgui/bun.lock +++ b/tgui/bun.lock @@ -49,7 +49,7 @@ "marked-smartypants": "^1.1.9", "react": "^19.1.0", "react-dom": "^19.1.0", - "tgui-core": "^4.2.3", + "tgui-core": "^5.3.1", "tgui-dev-server": "workspace:*", }, }, @@ -72,7 +72,7 @@ "react": "^19.1.0", "react-dom": "^19.1.0", "tgui": "workspace:*", - "tgui-core": "^4.2.3", + "tgui-core": "^5.3.1", "tgui-dev-server": "workspace:*", }, }, @@ -84,7 +84,7 @@ "react": "^19.1.0", "react-dom": "^19.1.0", "tgui": "workspace:*", - "tgui-core": "^4.2.3", + "tgui-core": "^5.3.1", }, }, "packages/tgui-setup": { @@ -107,13 +107,13 @@ "@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.0.3", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-8K5IFFsQqF9wQNJptGbS6FNKgUTsSRYnTqNCG1vPP8jFdjSv18n2mQfJpkt2Oibo9iBEzcDnDxNwKTzC7svlJw=="], - "@floating-ui/core": ["@floating-ui/core@1.7.2", "", { "dependencies": { "@floating-ui/utils": "^0.2.10" } }, "sha512-wNB5ooIKHQc+Kui96jE/n69rHFWAVoxn5CAzL1Xdd8FG03cgY3MLO+GF9U3W737fYDSgPWA6MReKhBQBop6Pcw=="], + "@floating-ui/core": ["@floating-ui/core@1.7.3", "", { "dependencies": { "@floating-ui/utils": "^0.2.10" } }, "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w=="], - "@floating-ui/dom": ["@floating-ui/dom@1.7.2", "", { "dependencies": { "@floating-ui/core": "^1.7.2", "@floating-ui/utils": "^0.2.10" } }, "sha512-7cfaOQuCS27HD7DX+6ib2OrnW+b4ZBwDNnCcT0uTyidcmyWb03FnQqJybDBoCnpdxwBSfA94UAYlRCt7mV+TbA=="], + "@floating-ui/dom": ["@floating-ui/dom@1.7.4", "", { "dependencies": { "@floating-ui/core": "^1.7.3", "@floating-ui/utils": "^0.2.10" } }, "sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA=="], - "@floating-ui/react": ["@floating-ui/react@0.27.13", "", { "dependencies": { "@floating-ui/react-dom": "^2.1.4", "@floating-ui/utils": "^0.2.10", "tabbable": "^6.0.0" }, "peerDependencies": { "react": ">=17.0.0", "react-dom": ">=17.0.0" } }, "sha512-Qmj6t9TjgWAvbygNEu1hj4dbHI9CY0ziCMIJrmYoDIn9TUAH5lRmiIeZmRd4c6QEZkzdoH7jNnoNyoY1AIESiA=="], + "@floating-ui/react": ["@floating-ui/react@0.27.16", "", { "dependencies": { "@floating-ui/react-dom": "^2.1.6", "@floating-ui/utils": "^0.2.10", "tabbable": "^6.0.0" }, "peerDependencies": { "react": ">=17.0.0", "react-dom": ">=17.0.0" } }, "sha512-9O8N4SeG2z++TSM8QA/KTeKFBVCNEz/AGS7gWPJf6KFRzmRWixFRnCnkPHRDwSVZW6QPDO6uT0P2SpWNKCc9/g=="], - "@floating-ui/react-dom": ["@floating-ui/react-dom@2.1.4", "", { "dependencies": { "@floating-ui/dom": "^1.7.2" }, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-JbbpPhp38UmXDDAu60RJmbeme37Jbgsm7NrHGgzYYFKmblzRUh6Pa641dII6LsjwF4XlScDrde2UAzDo/b9KPw=="], + "@floating-ui/react-dom": ["@floating-ui/react-dom@2.1.6", "", { "dependencies": { "@floating-ui/dom": "^1.7.4" }, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw=="], "@floating-ui/utils": ["@floating-ui/utils@0.2.10", "", {}, "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ=="], @@ -991,7 +991,7 @@ "tgui": ["tgui@workspace:packages/tgui"], - "tgui-core": ["tgui-core@4.3.3", "", { "dependencies": { "@floating-ui/react": "^0.27.13", "@nozbe/microfuzz": "^1.0.0" }, "peerDependencies": { "react": "^19.1.0", "react-dom": "^19.1.0" } }, "sha512-+eVCmmwbwH6X/SMSXBVGQwsPzIKI8Ho5+tFuIU82cxmWIlWyaJzlCb86+5yBGeeJy4+SCPo6Pv1WrCeHNQeJuw=="], + "tgui-core": ["tgui-core@5.3.1", "", { "dependencies": { "@floating-ui/react": "^0.27.16", "@nozbe/microfuzz": "^1.0.0" }, "peerDependencies": { "react": "^19.1.0", "react-dom": "^19.1.0" } }, "sha512-+8dDM4R2G6T1SpzpkRXGYc7YD+9ohqYjTV/4Zgcqc1I4Ld8bJH9vKHCQVbEAsHTCIjHsTBW4xnOpKyAx1gRB5w=="], "tgui-dev-server": ["tgui-dev-server@workspace:packages/tgui-dev-server"], diff --git a/tgui/packages/tgui-panel/Panel.tsx b/tgui/packages/tgui-panel/Panel.tsx index d818f0351b8..d79fd985fdb 100644 --- a/tgui/packages/tgui-panel/Panel.tsx +++ b/tgui/packages/tgui-panel/Panel.tsx @@ -33,7 +33,7 @@ export const Panel = (props) => {
- + diff --git a/tgui/packages/tgui-panel/chat/ChatTabs.tsx b/tgui/packages/tgui-panel/chat/ChatTabs.tsx index cfa8e8e385a..d20c5f999ca 100644 --- a/tgui/packages/tgui-panel/chat/ChatTabs.tsx +++ b/tgui/packages/tgui-panel/chat/ChatTabs.tsx @@ -23,7 +23,7 @@ export function ChatTabs(props) { return ( - + {pages.map((page) => ( { + onChange={(value) => act('rate', { rate: value, }) diff --git a/tgui/packages/tgui/interfaces/AtmosMixer.tsx b/tgui/packages/tgui/interfaces/AtmosMixer.tsx index f84366c95c9..966fe808c74 100644 --- a/tgui/packages/tgui/interfaces/AtmosMixer.tsx +++ b/tgui/packages/tgui/interfaces/AtmosMixer.tsx @@ -70,6 +70,7 @@ export const AtmosMixer = (props) => { { minValue={0} maxValue={100} stepPixelSize={2} - onDrag={(value) => + onChange={(value) => act('node1', { concentration: value, }) @@ -87,6 +88,7 @@ export const AtmosMixer = (props) => { { minValue={0} maxValue={100} stepPixelSize={2} - onDrag={(value) => + onChange={(value) => act('node2', { concentration: value, }) diff --git a/tgui/packages/tgui/interfaces/BluespaceSender.tsx b/tgui/packages/tgui/interfaces/BluespaceSender.tsx index dacf10d67b2..1f417cb4c19 100644 --- a/tgui/packages/tgui/interfaces/BluespaceSender.tsx +++ b/tgui/packages/tgui/interfaces/BluespaceSender.tsx @@ -72,13 +72,14 @@ export const BluespaceSender = (props) => { /> + onChange={(value) => act('rate', { rate: value, }) @@ -130,12 +131,13 @@ const GasDisplay = (props: GasDisplayProps) => { + onChange={(value) => act('price', { gas_price: value, gas_type: id, diff --git a/tgui/packages/tgui/interfaces/BluespaceVendor.tsx b/tgui/packages/tgui/interfaces/BluespaceVendor.tsx index c24f3aa9ce9..78da7251943 100644 --- a/tgui/packages/tgui/interfaces/BluespaceVendor.tsx +++ b/tgui/packages/tgui/interfaces/BluespaceVendor.tsx @@ -86,13 +86,14 @@ export const BluespaceVendor = (props) => { + onChange={(value) => act('pumping_rate', { rate: value, }) diff --git a/tgui/packages/tgui/interfaces/ChemHeater.tsx b/tgui/packages/tgui/interfaces/ChemHeater.tsx index 0bb78dc5168..fb76a4461b8 100644 --- a/tgui/packages/tgui/interfaces/ChemHeater.tsx +++ b/tgui/packages/tgui/interfaces/ChemHeater.tsx @@ -224,6 +224,7 @@ export const ChemHeater = (props) => { { value={dispenseVolume} minValue={1} maxValue={10} - onDrag={(value) => + onChange={(value) => act('disp_vol', { target: value, }) @@ -245,6 +246,7 @@ export const ChemHeater = (props) => { { value={round(targetTemp, 0.1)} minValue={0} maxValue={1000} - onDrag={(value) => + onChange={(value) => act('temperature', { target: value, }) diff --git a/tgui/packages/tgui/interfaces/ChemMixingChamber.tsx b/tgui/packages/tgui/interfaces/ChemMixingChamber.tsx index b539b22f240..893549a5506 100644 --- a/tgui/packages/tgui/interfaces/ChemMixingChamber.tsx +++ b/tgui/packages/tgui/interfaces/ChemMixingChamber.tsx @@ -46,6 +46,7 @@ export const ChemMixingChamber = (props) => { {'Target:'} { value={round(targetTemp, 0.1)} minValue={0} maxValue={1000} - onDrag={(value) => + onChange={(value) => act('temperature', { target: value, }) @@ -119,13 +120,14 @@ export const ChemMixingChamber = (props) => { setReagentQuantity(value)} + onChange={(value) => setReagentQuantity(value)} /> diff --git a/tgui/packages/tgui/interfaces/ChemReactionChamber.tsx b/tgui/packages/tgui/interfaces/ChemReactionChamber.tsx index 881a10c4f1b..c2337fef7a5 100644 --- a/tgui/packages/tgui/interfaces/ChemReactionChamber.tsx +++ b/tgui/packages/tgui/interfaces/ChemReactionChamber.tsx @@ -50,6 +50,7 @@ export const ChemReactionChamber = (props) => { {'Target:'} { value={round(targetTemp, 0.1)} minValue={0} maxValue={1000} - onDrag={(value) => + onChange={(value) => act('temperature', { target: value, }) @@ -156,13 +157,14 @@ export const ChemReactionChamber = (props) => { + onChange={(value) => act('acidic', { target: value, }) @@ -171,13 +173,14 @@ export const ChemReactionChamber = (props) => { + onChange={(value) => act('alkaline', { target: value, }) @@ -204,13 +207,14 @@ export const ChemReactionChamber = (props) => { setReagentQuantity(value)} + onChange={(value) => setReagentQuantity(value)} /> diff --git a/tgui/packages/tgui/interfaces/ChemRecipeDebug.tsx b/tgui/packages/tgui/interfaces/ChemRecipeDebug.tsx index f4917f3755a..50fe3f1410f 100644 --- a/tgui/packages/tgui/interfaces/ChemRecipeDebug.tsx +++ b/tgui/packages/tgui/interfaces/ChemRecipeDebug.tsx @@ -120,13 +120,14 @@ export const ChemRecipeDebug = (props) => { + onChange={(value) => act('forced_temp', { target: value, }) @@ -167,13 +168,14 @@ export const ChemRecipeDebug = (props) => { PH:}> + onChange={(value) => act('forced_ph', { target: value, }) @@ -200,13 +202,14 @@ export const ChemRecipeDebug = (props) => { Purity:}> + onChange={(value) => act('forced_purity', { target: value, }) @@ -233,6 +236,7 @@ export const ChemRecipeDebug = (props) => { { minValue={1} maxValue={1000} unit="x" - onDrag={(value) => + onChange={(value) => act('volume_multiplier', { target: value, }) @@ -364,6 +368,7 @@ export const ChemRecipeDebug = (props) => { Value:}> { minValue={-1000} maxValue={1000} disabled={editReaction === null} - onDrag={(value) => + onChange={(value) => act('edit_value', { target: value, }) diff --git a/tgui/packages/tgui/interfaces/ColorMatrixEditor.tsx b/tgui/packages/tgui/interfaces/ColorMatrixEditor.tsx index c988b0328e5..54773016eb0 100644 --- a/tgui/packages/tgui/interfaces/ColorMatrixEditor.tsx +++ b/tgui/packages/tgui/interfaces/ColorMatrixEditor.tsx @@ -41,13 +41,14 @@ export const ColorMatrixEditor = (props) => { {`${PREFIXES[row]}${PREFIXES[col]}:`} toFixed(value, 2)} - onDrag={(value) => { + onChange={(value) => { const retColor = currentColor; retColor[row * 4 + col] = value; act('transition_color', { diff --git a/tgui/packages/tgui/interfaces/ControllerOverview/OverviewSection.tsx b/tgui/packages/tgui/interfaces/ControllerOverview/OverviewSection.tsx index c8650bd29cd..e15083933a0 100644 --- a/tgui/packages/tgui/interfaces/ControllerOverview/OverviewSection.tsx +++ b/tgui/packages/tgui/interfaces/ControllerOverview/OverviewSection.tsx @@ -17,7 +17,7 @@ export function OverviewSection(props) { let overallOverrun = 0; for (let i = 0; i < subsystems.length; i++) { avgUsage += subsystems[i].usage_per_tick; - overallOverrun += subsystems[i].tick_overrun; + overallOverrun += subsystems[i].overtime; } return ( diff --git a/tgui/packages/tgui/interfaces/ControllerOverview/SubsystemDialog.tsx b/tgui/packages/tgui/interfaces/ControllerOverview/SubsystemDialog.tsx index 7c8b1be6ce1..0212bfecde5 100644 --- a/tgui/packages/tgui/interfaces/ControllerOverview/SubsystemDialog.tsx +++ b/tgui/packages/tgui/interfaces/ControllerOverview/SubsystemDialog.tsx @@ -23,7 +23,7 @@ export function SubsystemDialog(props: Props) { last_fire, name, next_fire, - tick_overrun, + overtime, tick_usage, usage_per_tick, } = subsystem; @@ -54,7 +54,7 @@ export function SubsystemDialog(props: Props) { {usage_per_tick.toFixed(2)}% - {tick_overrun.toFixed(2)}% + {overtime.toFixed(2)}% {initialization_failure_message && ( diff --git a/tgui/packages/tgui/interfaces/ControllerOverview/index.tsx b/tgui/packages/tgui/interfaces/ControllerOverview/index.tsx index 806890ef2c5..264ebe2d368 100644 --- a/tgui/packages/tgui/interfaces/ControllerOverview/index.tsx +++ b/tgui/packages/tgui/interfaces/ControllerOverview/index.tsx @@ -1,9 +1,8 @@ import { useReducer, useState } from 'react'; import { Button, Dropdown, Input, Section, Stack } from 'tgui-core/components'; - import { Window } from '../../layouts'; import { SORTING_TYPES } from './contants'; -import { FilterAction, filterReducer, type FilterState } from './filters'; +import { FilterAction, type FilterState, filterReducer } from './filters'; import { OverviewSection } from './OverviewSection'; import { SubsystemDialog } from './SubsystemDialog'; import { SubsystemViews } from './SubsystemViews'; diff --git a/tgui/packages/tgui/interfaces/ControllerOverview/types.ts b/tgui/packages/tgui/interfaces/ControllerOverview/types.ts index b1ece195d3f..818c8ba38b1 100644 --- a/tgui/packages/tgui/interfaces/ControllerOverview/types.ts +++ b/tgui/packages/tgui/interfaces/ControllerOverview/types.ts @@ -11,7 +11,7 @@ export type SubsystemData = { name: string; next_fire: number; ref: string; - tick_overrun: number; + overtime: number; tick_usage: number; usage_per_tick: number; }; diff --git a/tgui/packages/tgui/interfaces/Crystallizer.tsx b/tgui/packages/tgui/interfaces/Crystallizer.tsx index 5394b63eb55..56407a452b6 100644 --- a/tgui/packages/tgui/interfaces/Crystallizer.tsx +++ b/tgui/packages/tgui/interfaces/Crystallizer.tsx @@ -81,13 +81,14 @@ const Controls = (props) => { + onChange={(value) => act('gas_input', { gas_input: value, }) diff --git a/tgui/packages/tgui/interfaces/DnaConsole/DnaConsoleEnzymes.jsx b/tgui/packages/tgui/interfaces/DnaConsole/DnaConsoleEnzymes.jsx index aa0d2e37d6f..02796cfe000 100644 --- a/tgui/packages/tgui/interfaces/DnaConsole/DnaConsoleEnzymes.jsx +++ b/tgui/packages/tgui/interfaces/DnaConsole/DnaConsoleEnzymes.jsx @@ -294,13 +294,14 @@ const PulseSettings = (props) => { + onChange={(value) => act('set_pulse_strength', { val: value, }) @@ -310,13 +311,14 @@ const PulseSettings = (props) => { + onChange={(value) => act('set_pulse_duration', { val: value, }) diff --git a/tgui/packages/tgui/interfaces/Electropack.jsx b/tgui/packages/tgui/interfaces/Electropack.jsx index 40135d0f78b..d1bbe11a6a0 100644 --- a/tgui/packages/tgui/interfaces/Electropack.jsx +++ b/tgui/packages/tgui/interfaces/Electropack.jsx @@ -41,6 +41,7 @@ export const Electropack = (props) => { > { value={frequency / 10} format={(value) => toFixed(value, 1)} width="80px" - onDrag={(value) => + onChange={(value) => act('freq', { freq: value, }) @@ -72,13 +73,14 @@ export const Electropack = (props) => { > + onChange={(value) => act('code', { code: value, }) diff --git a/tgui/packages/tgui/interfaces/Filteriffic.jsx b/tgui/packages/tgui/interfaces/Filteriffic.jsx index f130e3b8c2e..eb74398ed66 100644 --- a/tgui/packages/tgui/interfaces/Filteriffic.jsx +++ b/tgui/packages/tgui/interfaces/Filteriffic.jsx @@ -12,8 +12,7 @@ import { NumberInput, Section, } from 'tgui-core/components'; -import { toFixed } from 'tgui-core/math'; -import { numberOfDecimalDigits } from 'tgui-core/math'; +import { numberOfDecimalDigits, toFixed } from 'tgui-core/math'; import { useBackend } from '../backend'; import { Window } from '../layouts'; @@ -23,13 +22,14 @@ const FilterIntegerEntry = (props) => { const { act } = useBackend(); return ( + onChange={(value) => act('modify_filter_value', { name: filterName, new_data: { @@ -49,6 +49,7 @@ const FilterFloatEntry = (props) => { return ( <> { step={step} format={(value) => toFixed(value, numberOfDecimalDigits(step))} width="80px" - onDrag={(value) => + onChange={(value) => act('transition_filter_value', { name: filterName, new_data: { diff --git a/tgui/packages/tgui/interfaces/GhostMenu.tsx b/tgui/packages/tgui/interfaces/GhostMenu.tsx index f9d8945c2de..365fc6a1221 100644 --- a/tgui/packages/tgui/interfaces/GhostMenu.tsx +++ b/tgui/packages/tgui/interfaces/GhostMenu.tsx @@ -201,12 +201,12 @@ const GhostSettingsSection = (props) => { value={viewNumber} minValue={0} maxValue={max_extra_view} - onDrag={(newValue) => setviewNumber(newValue)} - onChange={(new_range) => + onChange={(new_range) => { + setviewNumber(new_range); act('view_range', { new_view_range: new_range, - }) - } + }); + }} /> )} diff --git a/tgui/packages/tgui/interfaces/HighLuminosityEyesMenu.tsx b/tgui/packages/tgui/interfaces/HighLuminosityEyesMenu.tsx index 745bb03bf54..371ab52088d 100644 --- a/tgui/packages/tgui/interfaces/HighLuminosityEyesMenu.tsx +++ b/tgui/packages/tgui/interfaces/HighLuminosityEyesMenu.tsx @@ -78,13 +78,14 @@ const RangeDisplay = (props) => { /> + onChange={(value) => act('set_range', { new_range: value, }) diff --git a/tgui/packages/tgui/interfaces/Hypertorus/Controls.tsx b/tgui/packages/tgui/interfaces/Hypertorus/Controls.tsx index 06d895af3a5..b03c0573bd1 100644 --- a/tgui/packages/tgui/interfaces/Hypertorus/Controls.tsx +++ b/tgui/packages/tgui/interfaces/Hypertorus/Controls.tsx @@ -235,12 +235,13 @@ export const HypertorusWasteRemove = (props) => { > + onChange={(value) => act('mod_filtering_rate', { mod_filtering_rate: value, }) diff --git a/tgui/packages/tgui/interfaces/Hypertorus/Gases.tsx b/tgui/packages/tgui/interfaces/Hypertorus/Gases.tsx index 9aceff155e9..5af1faa1d16 100644 --- a/tgui/packages/tgui/interfaces/Hypertorus/Gases.tsx +++ b/tgui/packages/tgui/interfaces/Hypertorus/Gases.tsx @@ -118,12 +118,13 @@ const GasList = (props: GasListProps) => { /> act(input_rate, { [input_rate]: v })} + onChange={(v) => act(input_rate, { [input_rate]: v })} /> {gases.map((gas) => { diff --git a/tgui/packages/tgui/interfaces/Mecha/ModulesPane.tsx b/tgui/packages/tgui/interfaces/Mecha/ModulesPane.tsx index b6b270a30ff..43a4a5c8dd5 100644 --- a/tgui/packages/tgui/interfaces/Mecha/ModulesPane.tsx +++ b/tgui/packages/tgui/interfaces/Mecha/ModulesPane.tsx @@ -652,6 +652,7 @@ const SnowflakeRadio = (props) => { { maxValue={maxFrequency / 10} value={frequency / 10} format={(value) => toFixed(value, 1)} - onDrag={(value) => + onChange={(value) => act('equip_act', { ref: ref, gear_action: 'set_frequency', @@ -1040,7 +1041,7 @@ const SnowflakeOreScanner = (props) => { const { cooldown } = props.module.snowflake; return ( - + {cooldown / 10 > 0 ? 'Recharging...' : 'Ready to scan vents'} diff --git a/tgui/packages/tgui/interfaces/PaperSheet/types.ts b/tgui/packages/tgui/interfaces/PaperSheet/types.ts index 0fd4da91ef2..ddd91ce4140 100644 --- a/tgui/packages/tgui/interfaces/PaperSheet/types.ts +++ b/tgui/packages/tgui/interfaces/PaperSheet/types.ts @@ -51,6 +51,7 @@ export type WritingImplement = { color: string; font: string; stamp_class: string; + stamp_icon: string; stamp_icon_state: string; use_bold: boolean; }>; diff --git a/tgui/packages/tgui/interfaces/ParticleEdit/EntriesBasic.tsx b/tgui/packages/tgui/interfaces/ParticleEdit/EntriesBasic.tsx index f1a95eb33d8..07fbdfa2694 100644 --- a/tgui/packages/tgui/interfaces/ParticleEdit/EntriesBasic.tsx +++ b/tgui/packages/tgui/interfaces/ParticleEdit/EntriesBasic.tsx @@ -46,11 +46,12 @@ export const EntryFloat = (props: EntryFloatProps) => { /> + onChange={(value) => act('edit', { var: var_name, new_value: value, @@ -74,11 +75,12 @@ export const EntryCoord = (props: EntryCoordProps) => { /> + onChange={(value) => act('edit', { var: var_name, new_value: [value, coord?.[1], coord?.[2]], @@ -87,11 +89,12 @@ export const EntryCoord = (props: EntryCoordProps) => { /> + onChange={(value) => act('edit', { var: var_name, new_value: [coord?.[0], value, coord?.[2]], @@ -100,11 +103,12 @@ export const EntryCoord = (props: EntryCoordProps) => { /> + onChange={(value) => act('edit', { var: var_name, new_value: [coord?.[0], coord?.[1], value], @@ -258,12 +262,13 @@ export const EntryTransform = (props: EntryTransformProps) => { {transform?.map((value, index) => ( + onChange={(value) => act('edit', { var: var_name, new_value: transform!.map((x, i) => @@ -303,11 +308,12 @@ export const EntryIcon = (props: EntryIconStateProps) => { + onChange={(value) => act('edit', { var: var_name, var_mod: P_DATA_ICON_WEIGHT, @@ -394,11 +400,12 @@ export const EntryIconState = (props: EntryIconStateProps) => { + onChange={(value) => act('edit', { var: var_name, new_value: editWeightOf(icon_state, iconstate, value), diff --git a/tgui/packages/tgui/interfaces/ParticleEdit/EntriesGenerators.tsx b/tgui/packages/tgui/interfaces/ParticleEdit/EntriesGenerators.tsx index 20b0b8ee5b6..ebe3e629e2c 100644 --- a/tgui/packages/tgui/interfaces/ParticleEdit/EntriesGenerators.tsx +++ b/tgui/packages/tgui/interfaces/ParticleEdit/EntriesGenerators.tsx @@ -54,11 +54,12 @@ export const FloatGenerator = (props: FloatGeneratorProps) => { + onChange={(value) => act('edit', { var: var_name, new_value: value, @@ -177,11 +178,12 @@ export const EntryGeneratorNumbersList = ( + onChange={(value) => act('edit', { var: var_name, new_value: value, @@ -199,11 +201,12 @@ export const EntryGeneratorNumbersList = ( + onChange={(value) => act('edit', { var: var_name, new_value: [value, input![1], input![2]], @@ -212,11 +215,12 @@ export const EntryGeneratorNumbersList = ( /> + onChange={(value) => act('edit', { var: var_name, new_value: [input![0], value, input![2]], @@ -226,11 +230,12 @@ export const EntryGeneratorNumbersList = ( {allow_z ? ( + onChange={(value) => act('edit', { var: var_name, new_value: [input![0], input![1], value], diff --git a/tgui/packages/tgui/interfaces/ParticleEdit/Generators.tsx b/tgui/packages/tgui/interfaces/ParticleEdit/Generators.tsx index 09c3140eddd..7f20365783f 100644 --- a/tgui/packages/tgui/interfaces/ParticleEdit/Generators.tsx +++ b/tgui/packages/tgui/interfaces/ParticleEdit/Generators.tsx @@ -66,10 +66,11 @@ export const GeneratorListEntry = (props: GeneratorProps) => { {typeof A === 'number' ? ( + onChange={(value) => act('edit', { var: var_name, var_mod: P_DATA_GENERATOR, @@ -82,9 +83,10 @@ export const GeneratorListEntry = (props: GeneratorProps) => { <> + onChange={(value) => act('edit', { var: var_name, var_mod: P_DATA_GENERATOR, @@ -101,9 +103,10 @@ export const GeneratorListEntry = (props: GeneratorProps) => { /> + onChange={(value) => act('edit', { var: var_name, var_mod: P_DATA_GENERATOR, @@ -115,9 +118,10 @@ export const GeneratorListEntry = (props: GeneratorProps) => { /> + onChange={(value) => act('edit', { var: var_name, var_mod: P_DATA_GENERATOR, @@ -135,9 +139,10 @@ export const GeneratorListEntry = (props: GeneratorProps) => { {typeof B === 'number' ? ( + onChange={(value) => act('edit', { var: var_name, var_mod: P_DATA_GENERATOR, @@ -151,9 +156,10 @@ export const GeneratorListEntry = (props: GeneratorProps) => { <> + onChange={(value) => act('edit', { var: var_name, var_mod: P_DATA_GENERATOR, @@ -170,9 +176,10 @@ export const GeneratorListEntry = (props: GeneratorProps) => { /> + onChange={(value) => act('edit', { var: var_name, var_mod: P_DATA_GENERATOR, @@ -189,9 +196,10 @@ export const GeneratorListEntry = (props: GeneratorProps) => { /> + onChange={(value) => act('edit', { var: var_name, var_mod: P_DATA_GENERATOR, diff --git a/tgui/packages/tgui/interfaces/Radio.tsx b/tgui/packages/tgui/interfaces/Radio.tsx index 27566469945..168acab435d 100644 --- a/tgui/packages/tgui/interfaces/Radio.tsx +++ b/tgui/packages/tgui/interfaces/Radio.tsx @@ -74,6 +74,7 @@ export const Radio = (props) => { )) || ( { maxValue={maxFrequency / 10} value={frequency / 10} format={(value) => toFixed(value, 1)} - onDrag={(value) => + onChange={(value) => act('frequency', { adjust: value - frequency / 10, }) diff --git a/tgui/packages/tgui/interfaces/Reagents/RecipeLibrary.tsx b/tgui/packages/tgui/interfaces/Reagents/RecipeLibrary.tsx index 321e29248be..5c8c61fb4b2 100644 --- a/tgui/packages/tgui/interfaces/Reagents/RecipeLibrary.tsx +++ b/tgui/packages/tgui/interfaces/Reagents/RecipeLibrary.tsx @@ -117,13 +117,14 @@ export function RecipeLibrary(props: ReagentsProps) { onClick={() => setPage(Math.max(page - 1, 1))} /> setPage(value)} + onChange={(value) => setPage(value)} /> + + + + {allObjects[selectedObj].name} + + {allObjects[selectedObj].description || 'no description'} + + + + +
+
+ )} + + +
+ + + + + + + + + + { + updateHideMapping(!hideMapping); + }} + color={!hideMapping && 'good'} + checked={!hideMapping} + tooltip={`Toggle mapping objects visibility`} + > + Mapping + + + + { + updateShowIcons(!showIcons); + }} + color={showIcons && 'good'} + checked={showIcons} + tooltip={`Toggle preview icons on hovering`} + > + Icons + + + + { + updateShowPreview(!showPreview); + }} + color={showPreview && 'good'} + checked={showPreview} + tooltip={`Toggle the large object preview panel`} + > + Preview + + + +
+
+ + +
+ {query === '' ? ( + + Begin typing to search... + + ) : !filteredResults.length ? ( + + Nothing found + + ) : ( + + {filteredResults.map((obj, index) => ( + + ))} + + )} +
+
+ + ); +} diff --git a/tgui/packages/tgui/interfaces/SpawnPanel/CreateObjectAdvancedSettings.tsx b/tgui/packages/tgui/interfaces/SpawnPanel/CreateObjectAdvancedSettings.tsx new file mode 100644 index 00000000000..758a35a7358 --- /dev/null +++ b/tgui/packages/tgui/interfaces/SpawnPanel/CreateObjectAdvancedSettings.tsx @@ -0,0 +1,146 @@ +import { useEffect } from 'react'; +import { Button, Dropdown, Slider, Table } from 'tgui-core/components'; + +import { useBackend } from '../../backend'; +import type { IconSettings } from './index'; + +interface SpawnPanelData { + icon: string; + iconState: string; + iconStates: string[]; + selected_object?: string; + apply_icon_override?: boolean; +} + +interface CreateObjectAdvancedSettingsProps { + iconSettings: IconSettings; + onIconSettingsChange: (settings: Partial) => void; +} + +export function CreateObjectAdvancedSettings( + props: CreateObjectAdvancedSettingsProps, +) { + const { act, data } = useBackend(); + const { iconSettings, onIconSettingsChange } = props; + + const sendUpdatedSettings = ( + changedSettings: Partial> = {}, + ) => { + const currentSettings = { + selected_atom_icon: data.icon || iconSettings.icon, + selected_atom_icon_state: data.iconState || iconSettings.iconState, + atom_icon_size: iconSettings.iconSize, + ...changedSettings, + }; + act('update-settings', currentSettings); + }; + + useEffect(() => { + act('get-icon-states'); + }, []); + + const iconStateOptions = ( + Array.isArray(data.iconStates) ? data.iconStates : [] + ).map((state) => ({ + value: state, + displayText: state, + })); + + return ( + + + + Icon: + + + + + +
+ ); +} diff --git a/tgui/packages/tgui/interfaces/SpawnPanel/CreateObjectSettings.tsx b/tgui/packages/tgui/interfaces/SpawnPanel/CreateObjectSettings.tsx new file mode 100644 index 00000000000..752ebc9c594 --- /dev/null +++ b/tgui/packages/tgui/interfaces/SpawnPanel/CreateObjectSettings.tsx @@ -0,0 +1,489 @@ +import { storage } from 'common/storage'; +import { useEffect, useState } from 'react'; +import { + Button, + Dropdown, + Input, + NumberInput, + Slider, + Stack, + Table, +} from 'tgui-core/components'; + +import { useBackend } from '../../backend'; +import { + directionIcons, + directionNames, + spawnLocationIcons, + spawnLocationOptions, +} from './constants'; +import type { IconSettings } from './index'; + +export interface SpawnPanelData { + icon: string; + iconState: string; + iconStates: string[]; + selected_object?: string; + precise_mode: string; +} + +interface CreateObjectSettingsProps { + onCreateObject?: (obj: Record) => void; + setAdvancedSettings: (value: boolean) => void; + iconSettings: IconSettings; +} + +export function CreateObjectSettings(props: CreateObjectSettingsProps) { + const { onCreateObject, setAdvancedSettings, iconSettings } = props; + const { act, data } = useBackend(); + + const [amount, setAmount] = useState(1); + const [cordsType, setCordsType] = useState(0); + const [spawnLocation, setSpawnLocation] = useState('Current location'); + const [direction, setDirection] = useState(0); + const [objectName, setObjectName] = useState(''); + const [offset, setOffset] = useState(''); + + const updateAmount = (value: number) => { + setAmount(value); + sendUpdatedSettings({ atom_amount: value }); + }; + + const updateCordsType = (value: number) => { + setCordsType(value); + storage.set('spawnpanel-offset_type', value); + sendUpdatedSettings({ + offset_type: value ? 'Absolute offset' : 'Relative offset', + }); + }; + + const updateSpawnLocation = (value: string) => { + setSpawnLocation(value); + storage.set('spawnpanel-where_target_type', value); + sendUpdatedSettings({ where_target_type: value }); + }; + + const updateDirection = (value: number) => { + setDirection(value); + storage.set('spawnpanel-direction', value); + sendUpdatedSettings({ atom_dir: [1, 2, 4, 8][value] }); + }; + + const updateObjectName = (value: string) => { + setObjectName(value); + storage.set('spawnpanel-atom_name', value); + sendUpdatedSettings({ atom_name: value }); + + if (isPreciseModeActive) { + sendUpdatedSettings(); + } + }; + + const updateOffset = (value: string) => { + setOffset(value); + storage.set('spawnpanel-offset', value); + + const parseOffset = (offsetStr: string): number[] => { + if (!offsetStr.trim()) return [0, 0, 0]; + + const parts = offsetStr.split(',').map((part) => { + return parseInt(part.trim()); + }); + + while (parts.length < 3) { + parts.push(0); + } + + return parts.slice(0, 3); + }; + + sendUpdatedSettings({ offset: parseOffset(value) }); + }; + + const sendUpdatedSettings = ( + changedSettings: Partial> = {}, + ) => { + const parseOffset = (offsetStr: string): number[] => { + if (!offsetStr.trim()) return [0, 0, 0]; + + const parts = offsetStr.split(',').map((part) => { + return parseInt(part.trim()); + }); + + while (parts.length < 3) { + parts.push(0); + } + + return parts.slice(0, 3); + }; + + const currentSettings = { + atom_amount: amount, + offset_type: cordsType ? 'Absolute offset' : 'Relative offset', + where_target_type: spawnLocation, + atom_dir: [1, 2, 4, 8][direction], + offset: parseOffset(offset), + atom_name: objectName, + atom_icon_size: iconSettings.iconSize, + apply_icon_override: iconSettings.applyIcon ?? false, + ...changedSettings, + }; + act('update-settings', currentSettings); + }; + + const resetAdvancedSettings = () => { + const defaultAmount = 1; + const defaultCordsType = 0; + const defaultSpawnLocation = 'Current location'; + const defaultDirection = 0; + const defaultObjectName = ''; + const defaultOffset = ''; + + setAmount(defaultAmount); + setCordsType(defaultCordsType); + setSpawnLocation(defaultSpawnLocation); + setDirection(defaultDirection); + setObjectName(defaultObjectName); + setOffset(defaultOffset); + + storage.set('spawnpanel-atom_amount', defaultAmount); + storage.set('spawnpanel-offset_type', defaultCordsType); + storage.set('spawnpanel-where_target_type', defaultSpawnLocation); + storage.set('spawnpanel-direction', defaultDirection); + storage.set('spawnpanel-atom_name', defaultObjectName); + storage.set('spawnpanel-offset', defaultOffset); + + sendUpdatedSettings({ + atom_amount: defaultAmount, + offset_type: defaultCordsType ? 'Absolute offset' : 'Relative offset', + where_target_type: defaultSpawnLocation, + atom_dir: [1, 2, 4, 8][defaultDirection], + offset: defaultOffset, + atom_name: defaultObjectName, + }); + }; + + useEffect(() => { + const loadStoredValues = async () => { + const storedCordsType = await storage.get('spawnpanel-offset_type'); + const storedSpawnLocation = await storage.get( + 'spawnpanel-where_target_type', + ); + const storedDirection = await storage.get('spawnpanel-direction'); + const storedObjectName = await storage.get('spawnpanel-atom_name'); + const storedOffset = await storage.get('spawnpanel-offset'); + + if (storedCordsType !== undefined) setCordsType(storedCordsType); + if (storedSpawnLocation) setSpawnLocation(storedSpawnLocation); + if (storedDirection !== undefined) setDirection(storedDirection); + if (storedObjectName !== undefined) setObjectName(storedObjectName); + if (storedOffset !== undefined) setOffset(storedOffset); + }; + + loadStoredValues(); + }, []); + + const isTargetMode = + spawnLocation === 'Targeted location' || + spawnLocation === 'Targeted location (droppod)' || + spawnLocation === "In targeted mob's hand"; + + const isPreciseModeActive = data?.precise_mode === 'Target'; + const isMarkModeActive = data?.precise_mode === 'Mark'; + const isCopyModeActive = data?.precise_mode === 'Copy'; + + const isAnyPreciseModeActive = !(data?.precise_mode === 'Off'); + + const disablePreciseMode = () => { + if (isPreciseModeActive) { + act('toggle-precise-mode', { + newPreciseType: 'Off', + }); + } + }; + + const handleSpawn = () => { + const parseOffset = (offsetStr: string): number[] => { + if (!offsetStr.trim()) return [0, 0, 0]; + + const parts = offsetStr.split(',').map((part) => { + return parseInt(part.trim()); + }); + + while (parts.length < 3) { + parts.push(0); + } + + return parts.slice(0, 3); + }; + + const currentSettings = { + atom_amount: amount, + offset_type: cordsType ? 'Absolute offset' : 'Relative offset', + where_target_type: spawnLocation, + atom_dir: [1, 2, 4, 8][direction], + offset: parseOffset(offset), + atom_name: objectName, + atom_icon_size: iconSettings.iconSize, + selected_atom: data.selected_object, + apply_icon_override: iconSettings.applyIcon ?? false, + }; + + act('update-settings', currentSettings); + + if (!isTargetMode) { + if (onCreateObject) { + onCreateObject(currentSettings); + } else { + act('create-atom-action', currentSettings); + } + } else { + if (isPreciseModeActive) { + act('toggle-precise-mode', { newPreciseType: 'Off' }); + } else { + act('toggle-precise-mode', { + newPreciseType: 'Target', + where_target_type: spawnLocation, + }); + } + } + }; + + useEffect(() => { + if (!isTargetMode && isPreciseModeActive) { + disablePreciseMode(); + } + }, [spawnLocation]); + + useEffect(() => { + if (isPreciseModeActive) { + sendUpdatedSettings(); + } + }, [iconSettings.icon, iconSettings.iconState, iconSettings.iconSize]); + + return ( + + + + + + Amnt.: + + + + updateAmount(value)} + disabled={isAnyPreciseModeActive} + /> + + Dir: + +
+
+ + + + + + + + + { + if (data?.precise_mode && data.precise_mode !== 'Off') { + act('toggle-precise-mode', { + newPreciseType: 'Off', + }); + } + updateSpawnLocation(value); + }} + selected={spawnLocation} + /> + + + + + +
+
+ ); +} diff --git a/tgui/packages/tgui/interfaces/SpawnPanel/constants.tsx b/tgui/packages/tgui/interfaces/SpawnPanel/constants.tsx new file mode 100644 index 00000000000..13be3441059 --- /dev/null +++ b/tgui/packages/tgui/interfaces/SpawnPanel/constants.tsx @@ -0,0 +1,47 @@ +export const spawnLocationOptions = [ + 'Current location', + 'Current location (droppod)', + "In own mob's hand", + 'At a marked object', + 'In the marked object', + 'Targeted location', + 'Targeted location (droppod)', + "In targeted mob's hand", +]; + +export const listTypes = { + Objects: 'cube', + Turfs: 'map', + Mobs: 'cat', +}; + +export const listNames = { + Objects: 'Search objects', + Turfs: 'Search turfs', + Mobs: 'Search mobs', +}; + +export const spawnLocationIcons = { + 'Current location': 'map-marker', + 'Current location (droppod)': 'parachute-box', + "In own mob's hand": 'hand-holding', + 'At a marked object': 'floppy-disk', + 'In the marked object': 'floppy-disk', + 'Targeted location': 'crosshairs', + 'Targeted location (droppod)': 'crosshairs', + "In targeted mob's hand": 'crosshairs', +}; + +export const directionIcons = { + 1: 'arrow-up', + 2: 'arrow-down', + 4: 'arrow-right', + 8: 'arrow-left', +}; + +export const directionNames = { + 1: 'NORTH', + 2: 'SOUTH', + 4: 'EAST', + 8: 'WEST', +}; diff --git a/tgui/packages/tgui/interfaces/SpawnPanel/index.tsx b/tgui/packages/tgui/interfaces/SpawnPanel/index.tsx new file mode 100644 index 00000000000..6cca2be9fb5 --- /dev/null +++ b/tgui/packages/tgui/interfaces/SpawnPanel/index.tsx @@ -0,0 +1,91 @@ +import { useEffect, useState } from 'react'; +import { Button, Modal, Section, Stack } from 'tgui-core/components'; +import { fetchRetry } from 'tgui-core/http'; + +import { resolveAsset } from '../../assets'; +import { Window } from '../../layouts'; +import { logger } from '../../logging'; +import { CreateObject } from './CreateObject'; +import { CreateObjectAdvancedSettings } from './CreateObjectAdvancedSettings'; +import type { CreateObjectData } from './types'; + +export interface IconSettings { + icon: string | null; + iconState: string | null; + iconSize: number; + applyIcon?: boolean; +} + +export function SpawnPanel() { + const [data, setData] = useState(); + const [advancedSettings, setAdvancedSettings] = useState(false); + const [iconSettings, setIconSettings] = useState({ + icon: null, + iconState: null, + iconSize: 100, + applyIcon: false, + }); + + useEffect(() => { + fetchRetry(resolveAsset('spawnpanel_atom_data.json')) + .then((response) => response.json()) + .then(setData) + .catch((error) => { + logger.log( + 'Failed to fetch spawnpanel_atom_data.json', + JSON.stringify(error), + ); + }); + }, []); + + const handleIconSettingsChange = (newSettings: Partial) => { + setIconSettings((current) => ({ + ...current, + ...newSettings, + })); + }; + + return ( + + + {advancedSettings && ( + +
setAdvancedSettings(false)} + /> + } + > + +
+
+ )} + + + {data && ( + + )} + + +
+
+ ); +} diff --git a/tgui/packages/tgui/interfaces/SpawnPanel/types.ts b/tgui/packages/tgui/interfaces/SpawnPanel/types.ts new file mode 100644 index 00000000000..ae35c387e03 --- /dev/null +++ b/tgui/packages/tgui/interfaces/SpawnPanel/types.ts @@ -0,0 +1,53 @@ +import type { BooleanLike } from 'tgui-core/react'; + +export interface SpawnPreferences { + hide_icons: boolean; + hide_mappings: boolean; + sort_by: string; + search_text: string; + search_by: string; + where_dropdown_value: string; + offset_type: string; + offset: string; + object_count: number; + dir: number; + object_name: string; +} + +export interface SpawnPanelPreferences { + hide_icons: boolean; + hide_mappings: boolean; + sort_by: string; + search_text: string; + search_by: string; +} + +export interface AtomData { + icon: string; + icon_state: string; + name: string; + description?: string; + mapping: BooleanLike; + type: 'Objects' | 'Turfs' | 'Mobs'; +} + +export interface CreateObjectData { + atoms: Record; +} + +export interface CreateObjectProps { + objList: CreateObjectData; + setAdvancedSettings: (value: boolean) => void; + iconSettings: { + icon: string | null; + iconState: string | null; + iconSize: number; + }; + onIconSettingsChange: ( + settings: Partial<{ + icon: string | null; + iconState: string | null; + iconSize: number; + }>, + ) => void; +} diff --git a/tgui/packages/tgui/interfaces/ThermoMachine.jsx b/tgui/packages/tgui/interfaces/ThermoMachine.jsx index 8e49d223417..cf2eb2c73e8 100644 --- a/tgui/packages/tgui/interfaces/ThermoMachine.jsx +++ b/tgui/packages/tgui/interfaces/ThermoMachine.jsx @@ -48,6 +48,7 @@ export const ThermoMachine = (props) => { { maxValue={Math.round(data.max)} step={5} stepPixelSize={3} - onDrag={(value) => + onChange={(value) => act('target', { target: value, }) diff --git a/tgui/packages/tgui/interfaces/TurbineComputer.tsx b/tgui/packages/tgui/interfaces/TurbineComputer.tsx index 4b8a3348a43..6c6cd203fd6 100644 --- a/tgui/packages/tgui/interfaces/TurbineComputer.tsx +++ b/tgui/packages/tgui/interfaces/TurbineComputer.tsx @@ -47,12 +47,13 @@ const TurbineDisplay = (props) => { + onChange={(value) => act('regulate', { regulate: value * 0.01, }) diff --git a/tgui/packages/tgui/package.json b/tgui/packages/tgui/package.json index eaef4e67590..e4f1037775f 100644 --- a/tgui/packages/tgui/package.json +++ b/tgui/packages/tgui/package.json @@ -14,7 +14,7 @@ "marked-smartypants": "^1.1.9", "react": "^19.1.0", "react-dom": "^19.1.0", - "tgui-core": "^4.2.3", + "tgui-core": "^5.3.1", "tgui-dev-server": "workspace:*" }, "private": true diff --git a/tools/UpdatePaths/Scripts/92854_speedloaders.txt b/tools/UpdatePaths/Scripts/92854_speedloaders.txt new file mode 100644 index 00000000000..233c1e2a5e2 --- /dev/null +++ b/tools/UpdatePaths/Scripts/92854_speedloaders.txt @@ -0,0 +1,3 @@ +/obj/item/ammo_box/a357/@SUBTYPES : /obj/item/ammo_box/speedloader/c357/@SUBTYPES{@OLD} +/obj/item/ammo_box/c38/@SUBTYPES : /obj/item/ammo_box/speedloader/c38/@SUBTYPES{@OLD} +/obj/item/ammo_box/strilka310/@SUBTYPES : /obj/item/ammo_box/speedloader/strilka310/@SUBTYPES{@OLD} diff --git a/tools/UpdatePaths/Scripts/92994_lava_lattices_to_lava_catwalks.txt b/tools/UpdatePaths/Scripts/92994_lava_lattices_to_lava_catwalks.txt new file mode 100644 index 00000000000..61f494b7da6 --- /dev/null +++ b/tools/UpdatePaths/Scripts/92994_lava_lattices_to_lava_catwalks.txt @@ -0,0 +1 @@ +/obj/structure/lattice/lava : /obj/structure/lattice/catwalk/lava diff --git a/tools/UpdatePaths/Scripts/93026_borgening_fixes.txt b/tools/UpdatePaths/Scripts/93026_borgening_fixes.txt new file mode 100644 index 00000000000..4f86d86e1af --- /dev/null +++ b/tools/UpdatePaths/Scripts/93026_borgening_fixes.txt @@ -0,0 +1,3 @@ +/obj/item/borg/sight/meson : @DELETE + +/obj/item/borg/sight/thermal : @DELETE diff --git a/tools/ci/check_grep.sh b/tools/ci/check_grep.sh index 0fa602a6e9d..a9515f2640b 100644 --- a/tools/ci/check_grep.sh +++ b/tools/ci/check_grep.sh @@ -218,6 +218,20 @@ if $grep 'forceMove\(\s*(\w+\(\)|\w+)\s*,\s*(\w+\(\)|\w+)\s*\)' $code_files; the st=1 fi; +part "as anything on typeless loops" +if $grep 'var/[^/]+ as anything' $code_files; then + echo + echo -e "${RED}ERROR: 'as anything' used in a typeless for loop. This doesn't do anything and should be removed.${NC}" + st=1 +fi; + +part "as anything on internal functions" +if $grep 'var\/(turf|mob|obj|atom\/movable).+ as anything in o?(view|range|hearers)\(' $code_files; then + echo + echo -e "${RED}ERROR: 'as anything' typed for loop over an internal function. These functions have some internal optimization that relies on the loop not having 'as anything' in it.${NC}" + st=1 +fi; + part "common spelling mistakes" if $grep -i 'centcomm' $code_files; then echo diff --git a/tools/pull_request_hooks/autoLabel.js b/tools/pull_request_hooks/autoLabel.js index d898c4587b7..b995bdc19d5 100644 --- a/tools/pull_request_hooks/autoLabel.js +++ b/tools/pull_request_hooks/autoLabel.js @@ -48,7 +48,7 @@ function check_body_for_labels(body) { const labels_to_add = []; // detect "fixes #1234" or "resolves #1234" in body - const fix_regex = /\b(?:fix(?:es|ed)?|resolve[sd]?)\s*#\d+\b/gim; + const fix_regex = /\b(?:fix(?:es|ed)?|resolve[sd]?)\s*(?:#\d+|https:\/\/github\.com\/\S+\/issues\/\d+)/gim; if (fix_regex.test(body)) { labels_to_add.push("Fix"); }