diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index 92a94b67e8b..4740ba69cf1 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -1257,14 +1257,6 @@ }, /turf/open/floor/iron/dark, /area/station/command/bridge) -"aoo" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/xeno_spawn, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/mob/living/basic/cockroach, -/turf/open/floor/plating, -/area/station/service/theater/abandoned) "aoB" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/closed/wall/r_wall, @@ -2229,6 +2221,16 @@ "ayh" = ( /turf/open/floor/iron/grimy, /area/station/command/heads_quarters/ce) +"ayA" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/glass, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/duct, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/mob/living/basic/cockroach, +/turf/open/floor/iron, +/area/station/medical/abandoned) "ayH" = ( /obj/machinery/camera/directional/west{ c_tag = "Permabrig - Central"; @@ -2440,6 +2442,27 @@ }, /turf/open/floor/wood, /area/station/service/theater) +"aBF" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/newscaster/directional/east, +/obj/effect/spawner/random/structure/table_fancy, +/obj/item/reagent_containers/cup/glass/bottle/beer{ + desc = "Whatever it is, it reeks of foul, putrid froth."; + list_reagents = list(/datum/reagent/consumable/ethanol/bacchus_blessing=15); + name = "Delta-Down"; + pixel_x = 5; + pixel_y = 5 + }, +/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass{ + pixel_x = -3; + pixel_y = 6 + }, +/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass{ + pixel_x = -6; + pixel_y = 3 + }, +/turf/open/floor/wood, +/area/station/commons/dorms) "aBL" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -2761,14 +2784,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/maintenance/department/science/xenobiology) -"aGa" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable/layer3, -/mob/living/simple_animal/bot/secbot/pingsky, -/turf/open/floor/iron/grimy, -/area/station/ai_monitored/turret_protected/aisat_interior) "aGg" = ( /obj/structure/table, /obj/item/storage/box/bodybags, @@ -4161,6 +4176,10 @@ /obj/machinery/status_display/ai/directional/north, /turf/open/floor/plating, /area/station/engineering/supermatter/room) +"aXU" = ( +/obj/docking_port/stationary/escape_pod, +/turf/open/space/basic, +/area/space) "aXV" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/holopad, @@ -4180,14 +4199,6 @@ }, /turf/open/floor/iron/grimy, /area/station/service/library/lounge) -"aYn" = ( -/obj/effect/landmark/secequipment, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/structure/reagent_dispensers/wall/peppertank/directional/east, -/obj/structure/reagent_dispensers/wall/peppertank/directional/east, -/turf/open/floor/iron/dark, -/area/station/security/office) "aYs" = ( /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ dir = 9 @@ -5287,6 +5298,22 @@ }, /turf/open/floor/iron/dark, /area/station/security/office) +"bla" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/green/filled/mid_joiner{ + dir = 1 + }, +/obj/machinery/camera/directional/north{ + c_tag = "Virology - Test Subject Cell"; + name = "virology camera"; + network = list("ss13","medbay","virology") + }, +/mob/living/carbon/human/species/monkey, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/virology) "blc" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, @@ -7970,6 +7997,11 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/entry) +"bQy" = ( +/obj/effect/mapping_helpers/burnt_floor, +/mob/living/basic/cockroach, +/turf/open/floor/plating, +/area/station/maintenance/department/crew_quarters/bar) "bRe" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -9491,6 +9523,12 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark/corner, /area/station/engineering/atmos/mix) +"ciF" = ( +/obj/structure/window/reinforced/spawner/east, +/obj/structure/flora/bush/sparsegrass, +/mob/living/carbon/human/species/monkey, +/turf/open/floor/grass, +/area/station/science/genetics) "ciH" = ( /obj/machinery/door/airlock/research/glass{ name = "Ordnance Lab" @@ -10447,6 +10485,11 @@ /obj/effect/turf_decal/trimline/purple, /turf/open/floor/iron/dark, /area/station/science/ordnance) +"ctW" = ( +/obj/structure/cable, +/mob/living/simple_animal/slime, +/turf/open/floor/circuit/green, +/area/station/science/xenobiology) "cug" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -16033,16 +16076,6 @@ }, /turf/open/floor/plating, /area/station/engineering/atmos/pumproom) -"dOJ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/mob/living/simple_animal/bot/secbot/beepsky/armsky, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/security/armory) "dOO" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -16681,6 +16714,18 @@ /obj/effect/landmark/start/medical_doctor, /turf/open/floor/iron/white, /area/station/medical/medbay) +"dXS" = ( +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=hall12"; + location = "hall11" + }, +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/mob/living/simple_animal/bot/secbot/beepsky/officer, +/turf/open/floor/iron, +/area/station/hallway/primary/starboard) "dYj" = ( /turf/closed/wall/r_wall, /area/station/engineering/atmos/hfr_room) @@ -17421,14 +17466,6 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/medical/surgery/theatre) -"eig" = ( -/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/trimline/green/filled/warning, -/mob/living/carbon/human/species/monkey, -/turf/open/floor/iron/white, -/area/station/medical/virology) "eio" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/bar{ @@ -20714,20 +20751,6 @@ /obj/effect/spawner/random/trash/mess, /turf/open/floor/iron, /area/station/service/kitchen/abandoned) -"eXw" = ( -/obj/structure/table, -/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ - dir = 4 - }, -/obj/machinery/status_display/ai/directional/east, -/obj/structure/table/reinforced, -/obj/item/storage/toolbox/mechanical{ - pixel_x = 2; - pixel_y = 4 - }, -/obj/item/storage/toolbox/mechanical, -/turf/open/floor/iron, -/area/station/science/ordnance/office) "eXD" = ( /obj/machinery/camera/directional/north{ c_tag = "Solar - Aft Port"; @@ -25019,12 +25042,6 @@ heat_capacity = 1e+006 }, /area/station/maintenance/department/science) -"fZH" = ( -/obj/structure/window/reinforced/spawner/east, -/obj/structure/flora/bush/sparsegrass, -/mob/living/carbon/human/species/monkey, -/turf/open/floor/grass, -/area/station/science/genetics) "fZO" = ( /turf/open/floor/engine/vacuum, /area/station/engineering/atmos) @@ -25451,13 +25468,6 @@ /obj/effect/spawner/random/vending/colavend, /turf/open/floor/plating, /area/station/service/abandoned_gambling_den) -"gfa" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/mob/living/basic/cockroach, -/turf/open/floor/wood, -/area/station/service/library/abandoned) "gfb" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -28100,6 +28110,24 @@ }, /turf/open/floor/iron/dark, /area/station/science/explab) +"gLy" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/window/right/directional/west{ + name = "Chemistry Desk"; + req_access = list("plumbing") + }, +/obj/item/paper{ + pixel_x = -1; + pixel_y = 3 + }, +/obj/structure/desk_bell{ + pixel_x = 7; + pixel_y = -1 + }, +/obj/item/pen, +/turf/open/floor/iron, +/area/station/medical/chemistry) "gLz" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -29991,6 +30019,13 @@ /obj/structure/sign/warning/secure_area/directional/west, /turf/open/floor/iron/white, /area/station/medical/medbay) +"hkR" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/mob/living/basic/cockroach, +/turf/open/floor/wood, +/area/station/service/library/abandoned) "hkU" = ( /obj/machinery/door/firedoor/heavy, /obj/effect/turf_decal/stripes/line{ @@ -30046,6 +30081,15 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/aft) +"hlG" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 9 + }, +/obj/structure/cable, +/mob/living/carbon/human/species/monkey, +/turf/open/floor/iron/white, +/area/station/medical/virology) "hlM" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -36240,30 +36284,6 @@ /obj/structure/extinguisher_cabinet/directional/north, /turf/open/floor/iron/dark, /area/station/security/courtroom) -"iPE" = ( -/obj/item/paper_bin{ - pixel_x = -7 - }, -/obj/item/pen{ - pixel_x = -7 - }, -/obj/item/reagent_containers/cup/glass/mug/britcup{ - pixel_x = 6; - pixel_y = -4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/structure/window{ - dir = 1 - }, -/obj/structure/table, -/obj/structure/extinguisher_cabinet/directional/west, -/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/cargo/drone_bay) "iPJ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, @@ -36744,6 +36764,12 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) +"iWL" = ( +/obj/structure/flora/bush/flowers_pp, +/obj/structure/flora/bush/sparsegrass, +/mob/living/carbon/human/species/monkey, +/turf/open/floor/grass, +/area/station/science/genetics) "iWR" = ( /obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 8 @@ -37131,24 +37157,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron, /area/station/science/xenobiology) -"jbc" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/window/right/directional/west{ - name = "Chemistry Desk"; - req_access = list("chemistry") - }, -/obj/item/paper{ - pixel_x = -1; - pixel_y = 3 - }, -/obj/structure/desk_bell{ - pixel_x = 7; - pixel_y = -1 - }, -/obj/item/pen, -/turf/open/floor/iron, -/area/station/medical/chemistry) "jbn" = ( /obj/structure/cable, /obj/machinery/computer/security/telescreen{ @@ -38259,6 +38267,13 @@ heat_capacity = 1e+006 }, /area/station/security/courtroom) +"jmW" = ( +/obj/structure/closet/secure_closet/contraband/armory, +/obj/machinery/light/directional/east, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) "jnd" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, @@ -38286,22 +38301,6 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron/large, /area/station/security/lockers) -"jnp" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/green/filled/mid_joiner{ - dir = 1 - }, -/obj/machinery/camera/directional/north{ - c_tag = "Virology - Test Subject Cell"; - name = "virology camera"; - network = list("ss13","medbay","virology") - }, -/mob/living/carbon/human/species/monkey, -/turf/open/floor/iron/white/smooth_large, -/area/station/medical/virology) "jnr" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -38614,6 +38613,17 @@ "jrp" = ( /turf/closed/wall, /area/station/cargo/storage) +"jrz" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/mob/living/simple_animal/sloth/citrus, +/turf/open/floor/iron, +/area/station/command/heads_quarters/qm) "jrA" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -42624,15 +42634,6 @@ /obj/structure/closet/radiation, /turf/open/floor/plating, /area/station/maintenance/department/science/xenobiology) -"kmT" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 9 - }, -/obj/structure/cable, -/mob/living/carbon/human/species/monkey, -/turf/open/floor/iron/white, -/area/station/medical/virology) "kmV" = ( /obj/item/clothing/gloves/cut, /obj/effect/decal/remains/human{ @@ -44515,16 +44516,6 @@ }, /turf/open/floor/iron, /area/station/security/brig) -"kMr" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/glass, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/duct, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/mob/living/basic/cockroach, -/turf/open/floor/iron, -/area/station/medical/abandoned) "kMt" = ( /obj/machinery/light/small/directional/west, /obj/structure/sign/warning/radiation/directional/west, @@ -45860,6 +45851,30 @@ /obj/machinery/status_display/ai/directional/north, /turf/open/floor/iron, /area/station/security/prison/safe) +"lde" = ( +/obj/item/paper_bin{ + pixel_x = -7 + }, +/obj/item/pen{ + pixel_x = -7 + }, +/obj/item/reagent_containers/cup/glass/mug/britcup{ + pixel_x = 6; + pixel_y = -4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/window{ + dir = 1 + }, +/obj/structure/table, +/obj/structure/extinguisher_cabinet/directional/west, +/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/drone_bay) "ldh" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/machinery/atmospherics/pipe/bridge_pipe/scrubbers/visible, @@ -46455,6 +46470,14 @@ }, /turf/open/floor/iron, /area/station/cargo/sorting) +"lkE" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 5 + }, +/mob/living/carbon/human/species/monkey, +/turf/open/floor/iron/white, +/area/station/medical/virology) "lkL" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -46640,15 +46663,6 @@ /obj/effect/landmark/start/assistant, /turf/open/floor/iron, /area/station/hallway/primary/central/aft) -"lng" = ( -/obj/structure/bed/dogbed/runtime, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/obj/item/radio/intercom/directional/south, -/mob/living/simple_animal/pet/cat/runtime, -/turf/open/floor/iron, -/area/station/command/heads_quarters/cmo) "lnm" = ( /obj/structure/closet/secure_closet/captains, /obj/effect/turf_decal/stripes/line{ @@ -47018,17 +47032,6 @@ /obj/structure/sign/warning/biohazard/directional/south, /turf/open/floor/iron, /area/station/maintenance/department/science) -"ltb" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/iron/dark/textured_edge{ - dir = 4 - }, -/area/station/security/brig) "lte" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/effect/mapping_helpers/airlock/abandoned, @@ -53721,17 +53724,6 @@ }, /turf/open/floor/iron, /area/station/engineering/supermatter/room) -"mZu" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/mapping_helpers/broken_floor, -/obj/effect/turf_decal/trimline/white/warning{ - dir = 8 - }, -/mob/living/simple_animal/hostile/retaliate/goose/vomit, -/turf/open/floor/iron/dark, -/area/station/service/abandoned_gambling_den) "mZy" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -55472,13 +55464,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/atmos) -"nyy" = ( -/obj/structure/closet/secure_closet/contraband/armory, -/obj/machinery/light/directional/east, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/security/armory) "nyC" = ( /obj/machinery/door/airlock/public/glass{ name = "Library Access" @@ -56767,6 +56752,20 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos/storage/gas) +"nNM" = ( +/obj/structure/table, +/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ + dir = 4 + }, +/obj/machinery/status_display/ai/directional/east, +/obj/structure/table/reinforced, +/obj/item/storage/toolbox/mechanical{ + pixel_x = 2; + pixel_y = 4 + }, +/obj/item/storage/toolbox/mechanical, +/turf/open/floor/iron, +/area/station/science/ordnance/office) "nNR" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -57313,6 +57312,14 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/iron/grimy, /area/station/service/library/abandoned) +"nUR" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/xeno_spawn, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/mob/living/basic/cockroach, +/turf/open/floor/plating, +/area/station/service/theater/abandoned) "nUT" = ( /obj/structure/lattice/catwalk, /obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ @@ -59090,11 +59097,6 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron, /area/station/cargo/storage) -"osL" = ( -/obj/structure/cable, -/mob/living/simple_animal/slime, -/turf/open/floor/circuit/green, -/area/station/science/xenobiology) "osR" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/structure/table/wood, @@ -59149,12 +59151,6 @@ /obj/machinery/light/directional/west, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) -"otS" = ( -/obj/structure/flora/bush/flowers_pp, -/obj/structure/flora/bush/sparsegrass, -/mob/living/carbon/human/species/monkey, -/turf/open/floor/grass, -/area/station/science/genetics) "ouc" = ( /obj/structure/sign/warning/electric_shock{ pixel_y = -30 @@ -64647,11 +64643,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/maintenance/port) -"pNw" = ( -/obj/effect/mapping_helpers/burnt_floor, -/mob/living/basic/cockroach, -/turf/open/floor/plating, -/area/station/maintenance/department/crew_quarters/bar) "pNA" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/wood, @@ -67096,17 +67087,6 @@ /obj/item/pen, /turf/open/floor/wood, /area/station/service/electronic_marketing_den) -"qrw" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/mob/living/simple_animal/sloth/citrus, -/turf/open/floor/iron, -/area/station/command/heads_quarters/qm) "qrP" = ( /obj/effect/landmark/start/hangover, /obj/structure/chair/stool/bar/directional/south, @@ -67502,22 +67482,6 @@ /obj/structure/sign/departments/aiupload/directional/south, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) -"qwZ" = ( -/obj/structure/toilet{ - dir = 8 - }, -/obj/machinery/newscaster/directional/west, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/small/directional/east, -/obj/machinery/button/door/directional/south{ - id = "Toilet_Med"; - name = "Lock Control"; - normaldoorcontrol = 1; - specialfunctions = 4 - }, -/obj/item/food/grilled_cheese_sandwich, -/turf/open/floor/iron/cafeteria, -/area/station/medical/break_room) "qxi" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 @@ -68263,14 +68227,6 @@ }, /turf/open/floor/iron, /area/station/commons/lounge) -"qGM" = ( -/obj/structure/cable, -/obj/effect/turf_decal/siding/dark_red{ - dir = 1 - }, -/mob/living/basic/carp/pet/lia, -/turf/open/floor/iron/grimy, -/area/station/command/heads_quarters/hos) "qGQ" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, @@ -69277,6 +69233,17 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"qRO" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/turf_decal/trimline/white/warning{ + dir = 8 + }, +/mob/living/simple_animal/hostile/retaliate/goose/vomit, +/turf/open/floor/iron/dark, +/area/station/service/abandoned_gambling_den) "qRZ" = ( /obj/structure/table, /obj/item/storage/bag/tray/cafeteria, @@ -69669,6 +69636,14 @@ }, /turf/open/floor/iron, /area/station/engineering/main) +"qYD" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable/layer3, +/mob/living/simple_animal/bot/secbot/pingsky, +/turf/open/floor/iron/grimy, +/area/station/ai_monitored/turret_protected/aisat_interior) "qYL" = ( /turf/closed/wall, /area/station/medical/morgue) @@ -70652,6 +70627,15 @@ }, /turf/open/floor/iron, /area/station/security/checkpoint/supply) +"rlA" = ( +/obj/structure/bed/dogbed/runtime, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/obj/item/radio/intercom/directional/south, +/mob/living/simple_animal/pet/cat/runtime, +/turf/open/floor/iron, +/area/station/command/heads_quarters/cmo) "rlC" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -74100,27 +74084,6 @@ }, /turf/open/floor/carpet, /area/station/command/heads_quarters/captain) -"scT" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/newscaster/directional/east, -/obj/effect/spawner/random/structure/table_fancy, -/obj/item/reagent_containers/cup/glass/bottle/beer{ - desc = "Whatever it is, it reeks of foul, putrid froth."; - list_reagents = list(/datum/reagent/consumable/ethanol/bacchus_blessing=15); - name = "Delta-Down"; - pixel_x = 5; - pixel_y = 5 - }, -/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass{ - pixel_x = -3; - pixel_y = 6 - }, -/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass{ - pixel_x = -6; - pixel_y = 3 - }, -/turf/open/floor/wood, -/area/station/commons/dorms) "sdi" = ( /obj/machinery/atmospherics/pipe/smart/manifold/supply/visible, /obj/effect/turf_decal/tile/yellow{ @@ -81639,14 +81602,6 @@ /obj/effect/turf_decal/siding/wood, /turf/open/floor/iron, /area/station/maintenance/port/aft) -"tUm" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 5 - }, -/mob/living/carbon/human/species/monkey, -/turf/open/floor/iron/white, -/area/station/medical/virology) "tUB" = ( /turf/open/floor/plating, /area/station/security/prison) @@ -81755,10 +81710,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"tWk" = ( -/obj/docking_port/stationary/escape_pod, -/turf/open/space/basic, -/area/space) "tWl" = ( /turf/open/floor/iron, /area/station/science/research/abandoned) @@ -84659,12 +84610,6 @@ /obj/item/clothing/mask/surgical, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"uFY" = ( -/obj/docking_port/stationary/escape_pod{ - dir = 4 - }, -/turf/open/space/basic, -/area/space) "uGf" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -86058,6 +86003,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/circuit/green, /area/station/ai_monitored/command/nuke_storage) +"uYn" = ( +/obj/effect/landmark/secequipment, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/reagent_dispensers/wall/peppertank/directional/east, +/obj/structure/reagent_dispensers/wall/peppertank/directional/east, +/turf/open/floor/iron/dark, +/area/station/security/office) "uYp" = ( /obj/machinery/computer/med_data{ dir = 8 @@ -88148,6 +88101,16 @@ }, /turf/open/floor/wood, /area/station/medical/psychology) +"vxf" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/mob/living/simple_animal/bot/secbot/beepsky/armsky, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) "vxi" = ( /obj/effect/turf_decal/tile/neutral{ dir = 1 @@ -89286,6 +89249,17 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/maintenance/port/aft) +"vLM" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_edge{ + dir = 4 + }, +/area/station/security/brig) "vLP" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -94283,6 +94257,22 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/glass, /area/station/maintenance/space_hut/observatory) +"wWs" = ( +/obj/structure/toilet{ + dir = 8 + }, +/obj/machinery/newscaster/directional/west, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/directional/east, +/obj/machinery/button/door/directional/south{ + id = "Toilet_Med"; + name = "Lock Control"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/obj/item/food/grilled_cheese_sandwich, +/turf/open/floor/iron/cafeteria, +/area/station/medical/break_room) "wWy" = ( /obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ dir = 4 @@ -95616,6 +95606,14 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/wood, /area/station/service/theater/abandoned) +"xoa" = ( +/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/trimline/green/filled/warning, +/mob/living/carbon/human/species/monkey, +/turf/open/floor/iron/white, +/area/station/medical/virology) "xop" = ( /obj/machinery/atmospherics/components/tank, /turf/open/floor/iron/dark, @@ -98427,6 +98425,14 @@ /obj/item/radio/intercom/directional/south, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) +"xXq" = ( +/obj/structure/cable, +/obj/effect/turf_decal/siding/dark_red{ + dir = 1 + }, +/mob/living/basic/carp/pet/lia, +/turf/open/floor/iron/grimy, +/area/station/command/heads_quarters/hos) "xXt" = ( /obj/structure/closet/emcloset, /obj/effect/decal/cleanable/dirt, @@ -98606,6 +98612,12 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/command/heads_quarters/qm) +"xZM" = ( +/obj/docking_port/stationary/escape_pod{ + dir = 4 + }, +/turf/open/space/basic, +/area/space) "yah" = ( /obj/machinery/computer/bank_machine, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -98652,18 +98664,6 @@ dir = 1 }, /area/station/commons/fitness/recreation) -"yay" = ( -/obj/machinery/navbeacon{ - codes_txt = "patrol;next_patrol=hall12"; - location = "hall11" - }, -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/mob/living/simple_animal/bot/secbot/beepsky/officer, -/turf/open/floor/iron, -/area/station/hallway/primary/starboard) "yaG" = ( /obj/structure/sign/warning/biohazard, /turf/closed/wall/r_wall, @@ -107880,7 +107880,7 @@ wgG lKC dYL bhn -aGa +qYD pFl wLX lUB @@ -121026,7 +121026,7 @@ pWL mZd rUl fMl -osL +ctW fMl oVW oUe @@ -121550,7 +121550,7 @@ gpd cXL bMd eJy -mZu +qRO jtC ibp pxb @@ -122568,7 +122568,7 @@ kSA mZd nkj fMl -osL +ctW fMl oVW fmi @@ -123329,7 +123329,7 @@ uKY gcr mQO fMl -osL +ctW fMl iWX nYS @@ -128767,7 +128767,7 @@ ihO sIn epp hQx -gfa +hkR vyC daz bAz @@ -131435,7 +131435,7 @@ odd aaa aaa aaa -tWk +aXU eBZ gzG ogM @@ -133366,7 +133366,7 @@ bCY bXG jui reC -eXw +nNM gzz ilX peU @@ -135152,7 +135152,7 @@ lGJ oJy gCS uZf -otS +iWL whc fvi rkj @@ -135408,7 +135408,7 @@ whK rcW oJy dWE -fZH +ciF hXQ sEw fvi @@ -136061,7 +136061,7 @@ lUo aaa aaa aaa -tWk +aXU eBZ gzG rfH @@ -136483,7 +136483,7 @@ tgT sdw tgT vvb -kmT +hlG ePb xPc oOz @@ -136998,7 +136998,7 @@ qDT tgT oEd esG -eig +xoa rJQ nlz bNs @@ -137230,10 +137230,10 @@ rEO uLn pMF jDq -lng +rlA loe eoE -jbc +gLy eoE etc etc @@ -137254,7 +137254,7 @@ tgT pol tgT tgT -jnp +bla hGG gqm nbR @@ -137511,7 +137511,7 @@ vKI iFg geU tgT -tUm +lkE uoS xPc jQL @@ -137921,7 +137921,7 @@ hJP goi qAV xiG -pNw +bQy rhh jEF edg @@ -139710,7 +139710,7 @@ xeH qAV xYZ vGf -iPE +lde cAw sJd khn @@ -142122,7 +142122,7 @@ vxc dki lcw gyn -qwZ +wWs lvZ lvZ lvZ @@ -145114,7 +145114,7 @@ aDg krp cAF qqx -qrw +jrz xZC iIj aJE @@ -149000,7 +149000,7 @@ lYY lYY lYY pdY -yay +dXS fvn rNx uPH @@ -149772,7 +149772,7 @@ pjj uzD fJq nlY -ltb +vLM oSx qJZ aPx @@ -150841,7 +150841,7 @@ wEM uen kss klE -kMr +ayA tHd ujU ehy @@ -152142,7 +152142,7 @@ waI iEa nbc kKl -aoo +nUR gdr aii lXx @@ -152358,7 +152358,7 @@ aaa aad vop qqe -scT +aBF yaI fNn uEo @@ -153113,7 +153113,7 @@ lHb lHb yhE jYK -dOJ +vxf pIX cdr jhr @@ -153866,7 +153866,7 @@ tAj oSd sMX bRG -aYn +uYn gNx aQD iDq @@ -154136,7 +154136,7 @@ aaa aad bLs bLs -nyy +jmW xWI vhx gYv @@ -154633,7 +154633,7 @@ aad aad bRF wQo -qGM +xXq hOw trV hOw @@ -155955,7 +155955,7 @@ efQ aad uKw aaa -uFY +xZM aaa uKw aaa @@ -157967,7 +157967,7 @@ efQ aad gJk aaa -uFY +xZM aaa gJk qYo diff --git a/_maps/map_files/tramstation/tramstation.dmm b/_maps/map_files/tramstation/tramstation.dmm index 0104864c6b2..af48f4673ba 100644 --- a/_maps/map_files/tramstation/tramstation.dmm +++ b/_maps/map_files/tramstation/tramstation.dmm @@ -310,11 +310,6 @@ }, /turf/open/floor/iron, /area/station/security/execution/transfer) -"agT" = ( -/obj/structure/window/reinforced/tinted/fulltile, -/obj/structure/grille, -/turf/open/floor/plating, -/area/station/science/breakroom) "agX" = ( /obj/effect/turf_decal/trimline/white/tram, /obj/structure/railing, @@ -931,6 +926,11 @@ /obj/item/seeds/tower, /turf/open/floor/iron/dark, /area/station/security/prison/garden) +"asv" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/glass/reinforced/tram, +/area/station/hallway/primary/tram/left) "asw" = ( /obj/machinery/computer/monitor{ dir = 8 @@ -1002,6 +1002,13 @@ /obj/effect/spawner/random/engineering/tracking_beacon, /turf/open/floor/iron/grimy, /area/station/ai_monitored/turret_protected/aisat/foyer) +"auK" = ( +/obj/structure/chair/sofa/left{ + dir = 8 + }, +/obj/structure/sign/clock/directional/east, +/turf/open/floor/carpet, +/area/station/medical/psychology) "avr" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -2341,19 +2348,6 @@ "bbj" = ( /turf/closed/wall, /area/station/engineering/break_room) -"bbG" = ( -/obj/effect/turf_decal/delivery/white, -/obj/structure/holosign/barrier/atmos/tram, -/obj/machinery/camera/directional/south{ - c_tag = "Hallway - Eastern Tram Bridge 2" - }, -/turf/open/floor/vault{ - base_icon_state = "tram2"; - icon_state = "tram2"; - desc = "A sturdy looking tram platform."; - name = "tram platform" - }, -/area/station/hallway/primary/tram/right) "bcq" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 8 @@ -2581,6 +2575,19 @@ }, /turf/open/floor/iron, /area/station/commons/fitness/recreation) +"bfJ" = ( +/obj/effect/turf_decal/delivery/white, +/obj/structure/holosign/barrier/atmos/tram, +/obj/machinery/camera/directional/south{ + c_tag = "Hallway - Western Tram Bridge 1" + }, +/turf/open/floor/vault{ + base_icon_state = "tram2"; + icon_state = "tram2"; + desc = "A sturdy looking tram platform."; + name = "tram platform" + }, +/area/station/hallway/primary/tram/left) "bfM" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper, /obj/machinery/door/airlock/external{ @@ -3216,13 +3223,6 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/security/lockers) -"bpr" = ( -/obj/structure/table/wood, -/obj/item/candle, -/turf/open/floor/iron/chapel{ - dir = 4 - }, -/area/station/service/chapel) "bpv" = ( /obj/effect/turf_decal/trimline/brown/filled/line{ dir = 8 @@ -4997,19 +4997,6 @@ }, /turf/open/floor/iron/freezer, /area/station/science/lower) -"bTr" = ( -/obj/effect/turf_decal/delivery/white, -/obj/structure/holosign/barrier/atmos/tram, -/obj/structure/fluff/tram_rail/floor{ - dir = 1 - }, -/turf/open/floor/vault{ - base_icon_state = "tram2"; - icon_state = "tram2"; - desc = "A sturdy looking tram platform."; - name = "tram platform" - }, -/area/station/hallway/primary/tram/center) "bTx" = ( /obj/effect/turf_decal/siding/thinplating, /turf/open/floor/iron, @@ -5454,14 +5441,6 @@ }, /turf/open/floor/iron, /area/station/maintenance/tram/left) -"caQ" = ( -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/structure/chair/sofa/right, -/turf/open/floor/iron, -/area/station/cargo/miningdock/cafeteria) "caR" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 4 @@ -6062,6 +6041,14 @@ /obj/structure/sign/clock/directional/north, /turf/open/floor/iron/white, /area/station/science/ordnance) +"cjX" = ( +/obj/structure/industrial_lift/tram/subfloor, +/obj/structure/window/reinforced/shuttle/tram, +/obj/structure/fluff/tram_rail{ + dir = 1 + }, +/turf/open/openspace, +/area/station/hallway/primary/tram/center) "ckb" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -6734,6 +6721,16 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) +"cvz" = ( +/obj/effect/turf_decal/tile/bar, +/obj/effect/turf_decal/tile/bar{ + dir = 1 + }, +/obj/structure/chair/sofa/left{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/miningdock/cafeteria) "cvF" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/trimline/purple/filled/line{ @@ -6814,6 +6811,13 @@ /obj/structure/chair, /turf/open/floor/iron/checker, /area/station/commons/lounge) +"cxd" = ( +/obj/structure/table/wood, +/obj/item/candle, +/turf/open/floor/iron/chapel{ + dir = 4 + }, +/area/station/service/chapel) "cxg" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 4 @@ -8357,14 +8361,6 @@ "cXL" = ( /turf/open/floor/iron/dark/telecomms, /area/station/tcommsat/server) -"cXU" = ( -/obj/structure/fluff/tram_rail/floor{ - dir = 1 - }, -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/turf/open/floor/glass/reinforced/tram, -/area/station/hallway/primary/tram/left) "cXV" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, /turf/open/floor/circuit/telecomms, @@ -8753,11 +8749,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/eva) -"dgc" = ( -/obj/structure/industrial_lift/tram/white, -/obj/structure/window/reinforced/shuttle/tram, -/turf/open/floor/noslip/tram_plate, -/area/station/hallway/primary/tram/center) "dgw" = ( /obj/machinery/power/apc/auto_name/directional/south, /obj/structure/cable, @@ -10489,11 +10480,6 @@ /obj/structure/window/reinforced/spawner/east, /turf/open/floor/iron/dark, /area/station/science/xenobiology) -"dJx" = ( -/obj/structure/industrial_lift/tram/white, -/obj/structure/window/reinforced/shuttle/tram, -/turf/open/openspace, -/area/station/hallway/primary/tram/center) "dJF" = ( /obj/effect/turf_decal/trimline/purple/filled/corner{ dir = 8 @@ -11850,12 +11836,6 @@ /obj/structure/cable, /turf/open/floor/wood, /area/station/service/theater) -"ejB" = ( -/obj/structure/chair/sofa/right{ - dir = 8 - }, -/turf/open/floor/iron/cafeteria, -/area/station/science/breakroom) "ejL" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -12579,16 +12559,6 @@ }, /turf/open/floor/iron, /area/station/maintenance/tram/mid) -"exO" = ( -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/structure/chair/sofa/corner{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/cargo/miningdock/cafeteria) "eyc" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -12667,6 +12637,13 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/commons/fitness/recreation) +"ezQ" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/fluff/tram_rail/floor{ + dir = 1 + }, +/turf/open/floor/glass/reinforced/tram, +/area/station/hallway/primary/tram/right) "ezX" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 1 @@ -13301,6 +13278,13 @@ /obj/structure/extinguisher_cabinet/directional/south, /turf/open/floor/iron/grimy, /area/station/service/library/lounge) +"eLw" = ( +/obj/structure/chair/sofa/right{ + dir = 8 + }, +/obj/structure/sign/calendar/directional/east, +/turf/open/floor/carpet, +/area/station/medical/psychology) "eLY" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -14327,6 +14311,12 @@ /obj/machinery/food_cart, /turf/open/floor/iron/kitchen_coldroom, /area/station/service/kitchen/coldroom) +"fhe" = ( +/obj/structure/industrial_lift/tram/subfloor, +/obj/structure/fluff/tram_rail, +/obj/structure/window/reinforced/shuttle/tram, +/turf/open/openspace, +/area/station/hallway/primary/tram/center) "fhg" = ( /obj/structure/table/reinforced, /obj/machinery/door/firedoor, @@ -14660,12 +14650,6 @@ /obj/effect/landmark/navigate_destination/hydro, /turf/open/floor/iron/dark, /area/station/service/hydroponics) -"fma" = ( -/obj/structure/chair/sofa/corner{ - dir = 8 - }, -/turf/open/floor/iron/cafeteria, -/area/station/science/breakroom) "fmf" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 4 @@ -17425,6 +17409,11 @@ /obj/machinery/status_display/ai/directional/north, /turf/open/floor/iron, /area/station/commons/dorms) +"gom" = ( +/obj/structure/industrial_lift/tram/subfloor, +/obj/structure/window/reinforced/shuttle/tram, +/turf/open/floor/noslip/tram_plate, +/area/station/hallway/primary/tram/center) "goR" = ( /obj/machinery/door/airlock/public/glass{ name = "Chapel Office" @@ -18148,6 +18137,19 @@ }, /turf/open/floor/iron, /area/station/security/prison) +"gAY" = ( +/obj/effect/turf_decal/delivery/white, +/obj/structure/holosign/barrier/atmos/tram, +/obj/structure/fluff/tram_rail/floor{ + dir = 1 + }, +/turf/open/floor/vault{ + base_icon_state = "tram2"; + icon_state = "tram2"; + desc = "A sturdy looking tram platform."; + name = "tram platform" + }, +/area/station/hallway/primary/tram/right) "gBr" = ( /obj/structure/chair/pew, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -18257,19 +18259,6 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) -"gEn" = ( -/obj/effect/turf_decal/delivery/white, -/obj/structure/holosign/barrier/atmos/tram, -/obj/structure/fluff/tram_rail/floor{ - dir = 1 - }, -/turf/open/floor/vault{ - base_icon_state = "tram2"; - icon_state = "tram2"; - desc = "A sturdy looking tram platform."; - name = "tram platform" - }, -/area/station/hallway/primary/tram/left) "gEQ" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 4 @@ -19433,16 +19422,6 @@ /obj/structure/cable, /turf/open/floor/catwalk_floor, /area/station/maintenance/solars/port/aft) -"gXS" = ( -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/structure/chair/sofa{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/cargo/miningdock/cafeteria) "gXT" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -19587,12 +19566,6 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/commons/fitness/recreation/entertainment) -"hat" = ( -/obj/structure/industrial_lift/tram/white, -/obj/structure/fluff/tram_rail, -/obj/structure/window/reinforced/shuttle/tram, -/turf/open/openspace, -/area/station/hallway/primary/tram/center) "haH" = ( /obj/structure/chair{ dir = 1 @@ -19953,12 +19926,6 @@ }, /turf/open/floor/glass/reinforced, /area/station/security/warden) -"hhS" = ( -/obj/structure/industrial_lift/tram, -/obj/structure/fluff/tram_rail, -/obj/structure/chair/sofa/bench/tram/left, -/turf/open/openspace, -/area/station/hallway/primary/tram/center) "hhT" = ( /obj/machinery/vending/wardrobe/gene_wardrobe, /obj/machinery/firealarm/directional/west, @@ -20572,16 +20539,6 @@ /obj/item/ai_module/supplied/freeform, /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/ai_upload) -"hwL" = ( -/obj/structure/fluff/tram_rail{ - dir = 1 - }, -/obj/structure/industrial_lift/tram, -/obj/structure/chair/sofa/bench/tram/right{ - dir = 1 - }, -/turf/open/openspace, -/area/station/hallway/primary/tram/center) "hwM" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 4 @@ -20595,14 +20552,6 @@ dir = 1 }, /area/station/hallway/secondary/service) -"hya" = ( -/obj/structure/industrial_lift/tram/white, -/obj/structure/window/reinforced/shuttle/tram, -/obj/structure/fluff/tram_rail{ - dir = 1 - }, -/turf/open/openspace, -/area/station/hallway/primary/tram/center) "hyE" = ( /obj/effect/turf_decal/tile/neutral/half/contrasted, /obj/effect/turf_decal/tile/yellow/half/contrasted{ @@ -22583,6 +22532,13 @@ /obj/item/screwdriver, /turf/open/floor/iron, /area/station/cargo/warehouse) +"iiH" = ( +/obj/structure/fluff/tram_rail, +/obj/effect/landmark/start/hangover, +/obj/structure/industrial_lift/tram, +/obj/structure/chair/sofa/bench/tram/solo, +/turf/open/openspace, +/area/station/hallway/primary/tram/center) "iiJ" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -23480,17 +23436,6 @@ /obj/machinery/telecomms/bus/preset_two, /turf/open/floor/iron/dark/telecomms, /area/station/tcommsat/server) -"iyP" = ( -/obj/effect/turf_decal/delivery/white, -/obj/structure/holosign/barrier/atmos/tram, -/obj/structure/fluff/tram_rail/floor, -/turf/open/floor/vault{ - base_icon_state = "tram2"; - icon_state = "tram2"; - desc = "A sturdy looking tram platform."; - name = "tram platform" - }, -/area/station/hallway/primary/tram/center) "izi" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 4 @@ -23654,6 +23599,12 @@ }, /turf/open/floor/iron/freezer, /area/station/commons/toilet) +"iCz" = ( +/obj/structure/fluff/tram_rail/floor, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/glass/reinforced/tram, +/area/station/hallway/primary/tram/left) "iCA" = ( /obj/structure/fluff{ desc = "What, you think the water just magically soaks into the metallic flooring?"; @@ -23910,6 +23861,16 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/science/xenobiology) +"iHW" = ( +/obj/effect/turf_decal/delivery/white, +/obj/structure/holosign/barrier/atmos/tram, +/turf/open/floor/vault{ + base_icon_state = "tram2"; + icon_state = "tram2"; + desc = "A sturdy looking tram platform."; + name = "tram platform" + }, +/area/station/hallway/primary/tram/center) "iIm" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -24730,6 +24691,29 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/commons/lounge) +"iYa" = ( +/obj/effect/turf_decal/delivery/white, +/obj/structure/holosign/barrier/atmos/tram, +/turf/open/floor/vault{ + base_icon_state = "tram2"; + icon_state = "tram2"; + desc = "A sturdy looking tram platform."; + name = "tram platform" + }, +/area/station/hallway/primary/tram/right) +"iYi" = ( +/obj/effect/turf_decal/delivery/white, +/obj/structure/holosign/barrier/atmos/tram, +/obj/structure/fluff/tram_rail/floor{ + dir = 1 + }, +/turf/open/floor/vault{ + base_icon_state = "tram2"; + icon_state = "tram2"; + desc = "A sturdy looking tram platform."; + name = "tram platform" + }, +/area/station/hallway/primary/tram/center) "iYm" = ( /obj/effect/turf_decal/siding/wood{ dir = 4 @@ -25438,6 +25422,16 @@ "jnq" = ( /turf/closed/wall, /area/station/maintenance/central/lesser) +"jnw" = ( +/obj/effect/turf_decal/tile/bar, +/obj/effect/turf_decal/tile/bar{ + dir = 1 + }, +/obj/structure/chair/sofa/corner{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/miningdock/cafeteria) "jnD" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -26178,6 +26172,16 @@ }, /turf/open/floor/iron, /area/station/security/prison/safe) +"jAu" = ( +/obj/effect/turf_decal/tile/bar, +/obj/effect/turf_decal/tile/bar{ + dir = 1 + }, +/obj/structure/chair/sofa{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/miningdock/cafeteria) "jAF" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 10 @@ -26255,6 +26259,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating/airless, /area/lavaland/surface) +"jCQ" = ( +/obj/effect/landmark/tram/middle_part, +/obj/structure/industrial_lift/tram, +/obj/structure/sign/plaques/tram, +/turf/open/floor/noslip/tram_plate, +/area/station/hallway/primary/tram/center) "jCT" = ( /obj/effect/turf_decal/trimline/red/filled/corner{ dir = 4 @@ -26580,16 +26590,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/hallway/primary/tram/right) -"jIK" = ( -/obj/effect/turf_decal/delivery/white, -/obj/structure/holosign/barrier/atmos/tram, -/turf/open/floor/vault{ - base_icon_state = "tram2"; - icon_state = "tram2"; - desc = "A sturdy looking tram platform."; - name = "tram platform" - }, -/area/station/hallway/primary/tram/left) "jIV" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ @@ -26636,6 +26636,14 @@ }, /turf/open/floor/iron/checker, /area/station/commons/lounge) +"jJM" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/fluff/tram_rail/floor{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/glass/reinforced/tram, +/area/station/hallway/primary/tram/center) "jJO" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 8 @@ -28304,10 +28312,6 @@ /obj/structure/window/reinforced/spawner/east, /turf/open/floor/iron/dark, /area/station/command/bridge) -"kmZ" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/glass/reinforced/tram, -/area/station/hallway/primary/tram/right) "kna" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 8 @@ -29615,19 +29619,6 @@ /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, /turf/open/floor/iron, /area/station/engineering/atmos) -"kKd" = ( -/obj/effect/turf_decal/delivery/white, -/obj/structure/holosign/barrier/atmos/tram, -/obj/structure/fluff/tram_rail/floor{ - dir = 1 - }, -/turf/open/floor/vault{ - base_icon_state = "tram2"; - icon_state = "tram2"; - desc = "A sturdy looking tram platform."; - name = "tram platform" - }, -/area/station/hallway/primary/tram/right) "kKe" = ( /obj/machinery/conveyor_switch/oneway{ dir = 8; @@ -29990,6 +29981,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/tram/center) +"kRa" = ( +/obj/structure/chair/sofa{ + dir = 8 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/carpet, +/area/station/medical/psychology) "kRi" = ( /obj/machinery/telecomms/relay/preset/station, /obj/effect/turf_decal/box, @@ -30139,13 +30137,6 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/iron, /area/station/security/checkpoint/supply) -"kTB" = ( -/obj/structure/chair/sofa{ - dir = 8 - }, -/obj/machinery/light/directional/east, -/turf/open/floor/carpet, -/area/station/medical/psychology) "kTD" = ( /obj/effect/landmark/start/hangover, /obj/effect/turf_decal/trimline/yellow/filled/line, @@ -30557,6 +30548,11 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/security/evidence) +"kYX" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/turf/open/floor/glass/reinforced/tram, +/area/station/hallway/primary/tram/center) "kYZ" = ( /obj/machinery/airalarm/server{ dir = 4; @@ -32179,12 +32175,6 @@ }, /turf/open/floor/iron, /area/station/security/checkpoint/science) -"lBL" = ( -/obj/effect/landmark/tram/middle_part, -/obj/structure/industrial_lift/tram, -/obj/machinery/computer/tram_controls, -/turf/open/floor/noslip/tram_plate, -/area/station/hallway/primary/tram/center) "lBQ" = ( /turf/closed/wall, /area/station/medical/surgery/aft) @@ -32617,6 +32607,12 @@ /obj/structure/extinguisher_cabinet/directional/east, /turf/open/floor/iron, /area/station/hallway/primary/tram/right) +"lKP" = ( +/obj/structure/industrial_lift/tram/subfloor, +/obj/structure/window/reinforced/shuttle/tram, +/obj/machinery/computer/tram_controls/directional/north, +/turf/open/openspace, +/area/station/hallway/primary/tram/center) "lLd" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/trimline/yellow/warning{ @@ -32769,6 +32765,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/tram/center) +"lNy" = ( +/obj/structure/industrial_lift/tram/accessible/north, +/obj/structure/fluff/tram_rail, +/obj/structure/railing{ + dir = 1 + }, +/turf/open/openspace, +/area/station/hallway/primary/tram/center) "lNJ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, @@ -32872,17 +32876,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/brig) -"lPq" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 6 - }, -/mob/living/basic/pet/dog/pug{ - desc = "A pug with an insatiable appetite for pasta and pasta-adjacent piping."; - name = "Spaghetti" - }, -/obj/structure/bed/dogbed/ian, -/turf/open/floor/iron, -/area/station/engineering/atmos) "lPz" = ( /obj/effect/turf_decal/sand/plating, /obj/item/stack/ore/glass, @@ -32959,14 +32952,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"lQJ" = ( -/obj/structure/industrial_lift/tram/white, -/obj/structure/fluff/tram_rail{ - dir = 1 - }, -/obj/structure/window/reinforced/shuttle/tram, -/turf/open/openspace, -/area/station/hallway/primary/tram/center) "lQM" = ( /turf/closed/wall/r_wall, /area/station/maintenance/port/central) @@ -33366,6 +33351,17 @@ "lZW" = ( /turf/closed/wall, /area/station/maintenance/department/cargo) +"lZX" = ( +/obj/effect/turf_decal/delivery/white, +/obj/structure/holosign/barrier/atmos/tram, +/obj/structure/fluff/tram_rail/floor, +/turf/open/floor/vault{ + base_icon_state = "tram2"; + icon_state = "tram2"; + desc = "A sturdy looking tram platform."; + name = "tram platform" + }, +/area/station/hallway/primary/tram/right) "lZY" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/stripes/corner, @@ -33522,6 +33518,10 @@ /obj/machinery/suit_storage_unit/medical, /turf/open/floor/iron/dark, /area/station/medical/storage) +"mdW" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/glass/reinforced/tram, +/area/station/hallway/primary/tram/right) "mdY" = ( /obj/effect/turf_decal/trimline/neutral/line, /turf/open/floor/iron, @@ -35154,12 +35154,6 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"mFz" = ( -/obj/structure/fluff/tram_rail/floor, -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/turf/open/floor/glass/reinforced/tram, -/area/station/hallway/primary/tram/left) "mFQ" = ( /obj/structure/table, /obj/item/stack/sheet/plasteel{ @@ -38652,6 +38646,17 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/catwalk_floor, /area/station/hallway/primary/tram/right) +"nTr" = ( +/obj/effect/turf_decal/delivery/white, +/obj/structure/holosign/barrier/atmos/tram, +/obj/structure/fluff/tram_rail/floor, +/turf/open/floor/vault{ + base_icon_state = "tram2"; + icon_state = "tram2"; + desc = "A sturdy looking tram platform."; + name = "tram platform" + }, +/area/station/hallway/primary/tram/left) "nTz" = ( /obj/machinery/holopad{ pixel_y = 16 @@ -39578,19 +39583,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/smooth, /area/station/hallway/primary/tram/left) -"okc" = ( -/obj/effect/turf_decal/delivery/white, -/obj/structure/holosign/barrier/atmos/tram, -/obj/machinery/camera/directional/south{ - c_tag = "Hallway - Eastern Tram Bridge 1" - }, -/turf/open/floor/vault{ - base_icon_state = "tram2"; - icon_state = "tram2"; - desc = "A sturdy looking tram platform."; - name = "tram platform" - }, -/area/station/hallway/primary/tram/center) "okf" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -39918,6 +39910,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/freezer, /area/station/commons/toilet) +"orI" = ( +/obj/structure/chair/sofa/left{ + dir = 1 + }, +/turf/open/floor/iron/cafeteria, +/area/station/science/breakroom) "orL" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible/layer2{ dir = 1 @@ -40254,12 +40252,6 @@ /obj/machinery/light/directional/north, /turf/open/floor/iron/dark, /area/station/science/genetics) -"ozg" = ( -/obj/structure/chair/sofa/left{ - dir = 1 - }, -/turf/open/floor/iron/cafeteria, -/area/station/science/breakroom) "ozo" = ( /obj/effect/turf_decal/siding/thinplating/dark{ dir = 10 @@ -41597,6 +41589,11 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/command/bridge) +"oZE" = ( +/obj/structure/industrial_lift/tram/subfloor, +/obj/structure/tramwall/titanium, +/turf/open/openspace, +/area/station/hallway/primary/tram/center) "oZG" = ( /obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{ dir = 9 @@ -43700,11 +43697,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/secondary/service) -"pKT" = ( -/obj/structure/industrial_lift/tram, -/obj/structure/tramwall/titanium, -/turf/open/openspace, -/area/station/hallway/primary/tram/center) "pKZ" = ( /obj/structure/table/wood, /obj/item/flashlight/lamp, @@ -44071,16 +44063,6 @@ /obj/structure/ore_box, /turf/open/floor/iron, /area/station/cargo/warehouse) -"pSf" = ( -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/structure/chair/sofa/left{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/cargo/miningdock/cafeteria) "pSg" = ( /obj/machinery/light/directional/west, /obj/effect/turf_decal/trimline/white/corner{ @@ -44435,19 +44417,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/command/heads_quarters/hop) -"pYg" = ( -/obj/effect/turf_decal/delivery/white, -/obj/structure/holosign/barrier/atmos/tram, -/obj/machinery/camera/directional/south{ - c_tag = "Hallway - Western Tram Bridge 1" - }, -/turf/open/floor/vault{ - base_icon_state = "tram2"; - icon_state = "tram2"; - desc = "A sturdy looking tram platform."; - name = "tram platform" - }, -/area/station/hallway/primary/tram/left) "pYt" = ( /obj/structure/table/wood, /obj/item/book/manual/wiki/security_space_law, @@ -44791,6 +44760,16 @@ "qfs" = ( /turf/open/floor/glass, /area/station/service/kitchen) +"qfz" = ( +/obj/structure/fluff/tram_rail{ + dir = 1 + }, +/obj/structure/industrial_lift/tram, +/obj/structure/chair/sofa/bench/tram/solo{ + dir = 1 + }, +/turf/open/openspace, +/area/station/hallway/primary/tram/center) "qfO" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, @@ -45796,14 +45775,6 @@ /obj/effect/turf_decal/trimline/neutral/filled/warning, /turf/open/floor/iron, /area/station/hallway/primary/tram/left) -"qwj" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/fluff/tram_rail/floor{ - dir = 1 - }, -/obj/structure/cable, -/turf/open/floor/glass/reinforced/tram, -/area/station/hallway/primary/tram/center) "qwq" = ( /obj/structure/table/wood, /obj/item/radio/intercom, @@ -47073,6 +47044,12 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/break_room) +"qRs" = ( +/obj/structure/chair/sofa/right{ + dir = 8 + }, +/turf/open/floor/iron/cafeteria, +/area/station/science/breakroom) "qRA" = ( /obj/effect/turf_decal/trimline/blue/filled/corner{ dir = 4 @@ -47438,15 +47415,6 @@ /obj/machinery/status_display/evac/directional/east, /turf/open/floor/iron/dark, /area/station/tcommsat/computer) -"qYR" = ( -/obj/structure/industrial_lift/tram/white, -/obj/structure/tramwall/titanium, -/obj/machinery/destination_sign{ - dir = 1; - layer = 3.4 - }, -/turf/open/openspace, -/area/station/hallway/primary/tram/center) "qYU" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 4 @@ -47501,6 +47469,14 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper, /turf/open/floor/plating, /area/station/construction/mining/aux_base) +"qZI" = ( +/obj/effect/turf_decal/tile/bar, +/obj/effect/turf_decal/tile/bar{ + dir = 1 + }, +/obj/structure/chair/sofa/right, +/turf/open/floor/iron, +/area/station/cargo/miningdock/cafeteria) "qZJ" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 1 @@ -47653,6 +47629,19 @@ "rcm" = ( /turf/open/floor/wood, /area/station/service/lawoffice) +"rcr" = ( +/obj/effect/turf_decal/delivery/white, +/obj/structure/holosign/barrier/atmos/tram, +/obj/machinery/camera/directional/south{ + c_tag = "Hallway - Eastern Tram Bridge 1" + }, +/turf/open/floor/vault{ + base_icon_state = "tram2"; + icon_state = "tram2"; + desc = "A sturdy looking tram platform."; + name = "tram platform" + }, +/area/station/hallway/primary/tram/center) "rcD" = ( /obj/structure/chair/comfy/brown, /obj/machinery/airalarm/directional/north, @@ -48211,6 +48200,19 @@ /obj/effect/turf_decal/trimline/neutral/filled/line, /turf/open/floor/iron, /area/station/commons/dorms) +"rnp" = ( +/obj/effect/turf_decal/delivery/white, +/obj/structure/holosign/barrier/atmos/tram, +/obj/structure/fluff/tram_rail/floor{ + dir = 1 + }, +/turf/open/floor/vault{ + base_icon_state = "tram2"; + icon_state = "tram2"; + desc = "A sturdy looking tram platform."; + name = "tram platform" + }, +/area/station/hallway/primary/tram/left) "rnA" = ( /obj/structure/extinguisher_cabinet/directional/east, /obj/effect/decal/cleanable/dirt, @@ -49983,6 +49985,17 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/cargo/miningdock) +"rQL" = ( +/obj/effect/turf_decal/delivery/white, +/obj/structure/holosign/barrier/atmos/tram, +/obj/structure/fluff/tram_rail/floor, +/turf/open/floor/vault{ + base_icon_state = "tram2"; + icon_state = "tram2"; + desc = "A sturdy looking tram platform."; + name = "tram platform" + }, +/area/station/hallway/primary/tram/center) "rQN" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -51163,6 +51176,15 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/cargo/storage) +"sqW" = ( +/obj/structure/industrial_lift/tram/subfloor, +/obj/structure/tramwall/titanium, +/obj/machinery/destination_sign{ + dir = 1; + layer = 3.4 + }, +/turf/open/openspace, +/area/station/hallway/primary/tram/center) "srb" = ( /obj/machinery/door/airlock/hatch{ name = "Ladder Access Hatch" @@ -51474,11 +51496,6 @@ /obj/effect/turf_decal/trimline/neutral/filled/line, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) -"swx" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/fluff/tram_rail/floor, -/turf/open/floor/glass/reinforced/tram, -/area/station/hallway/primary/tram/right) "swC" = ( /obj/structure/closet/firecloset, /obj/effect/turf_decal/siding/thinplating/dark{ @@ -53549,6 +53566,19 @@ /obj/structure/cable, /turf/open/floor/wood, /area/station/commons/vacant_room/office) +"tlu" = ( +/obj/effect/turf_decal/delivery/white, +/obj/structure/holosign/barrier/atmos/tram, +/obj/machinery/camera/directional/south{ + c_tag = "Hallway - Eastern Tram Bridge 2" + }, +/turf/open/floor/vault{ + base_icon_state = "tram2"; + icon_state = "tram2"; + desc = "A sturdy looking tram platform."; + name = "tram platform" + }, +/area/station/hallway/primary/tram/right) "tlF" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -54381,6 +54411,16 @@ }, /turf/open/floor/iron, /area/station/ai_monitored/command/storage/eva) +"tyU" = ( +/obj/effect/turf_decal/delivery/white, +/obj/structure/holosign/barrier/atmos/tram, +/turf/open/floor/vault{ + base_icon_state = "tram2"; + icon_state = "tram2"; + desc = "A sturdy looking tram platform."; + name = "tram platform" + }, +/area/station/hallway/primary/tram/left) "tze" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -54570,13 +54610,6 @@ }, /turf/open/floor/iron, /area/station/cargo/lobby) -"tCd" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/fluff/tram_rail/floor{ - dir = 1 - }, -/turf/open/floor/glass/reinforced/tram, -/area/station/hallway/primary/tram/right) "tCe" = ( /obj/effect/turf_decal/siding/thinplating{ dir = 6 @@ -54871,6 +54904,11 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/maintenance/disposal/incinerator) +"tGU" = ( +/obj/structure/window/reinforced/tinted/fulltile, +/obj/structure/grille, +/turf/open/floor/plating, +/area/station/science/breakroom) "tGW" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 8 @@ -55674,11 +55712,6 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron/dark, /area/station/command/teleporter) -"tZC" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/turf/open/floor/glass/reinforced/tram, -/area/station/hallway/primary/tram/left) "tZN" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 8 @@ -55994,6 +56027,12 @@ /obj/effect/turf_decal/trimline/blue/filled/corner, /turf/open/floor/iron/white, /area/station/medical/treatment_center) +"uep" = ( +/obj/structure/industrial_lift/tram/subfloor, +/obj/structure/window/reinforced/shuttle/tram, +/obj/machinery/computer/tram_controls/directional/south, +/turf/open/openspace, +/area/station/hallway/primary/tram/center) "ueE" = ( /obj/effect/turf_decal/trimline/yellow/filled/corner{ dir = 4 @@ -56705,16 +56744,6 @@ /obj/structure/window/reinforced/spawner/east, /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/ai) -"url" = ( -/obj/effect/turf_decal/delivery/white, -/obj/structure/holosign/barrier/atmos/tram, -/turf/open/floor/vault{ - base_icon_state = "tram2"; - icon_state = "tram2"; - desc = "A sturdy looking tram platform."; - name = "tram platform" - }, -/area/station/hallway/primary/tram/center) "urm" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -57640,6 +57669,14 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron/dark, /area/station/command/bridge) +"uIC" = ( +/obj/structure/fluff/tram_rail/floor{ + dir = 1 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/glass/reinforced/tram, +/area/station/hallway/primary/tram/left) "uIO" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, @@ -57842,11 +57879,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/brig) -"uMP" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/turf/open/floor/glass/reinforced/tram, -/area/station/hallway/primary/tram/center) "uMR" = ( /obj/effect/turf_decal/trimline/neutral/filled/corner{ dir = 8 @@ -58070,6 +58102,19 @@ /obj/effect/turf_decal/trimline/neutral/filled/warning, /turf/open/floor/iron, /area/station/hallway/primary/tram/left) +"uQJ" = ( +/obj/effect/turf_decal/delivery/white, +/obj/structure/holosign/barrier/atmos/tram, +/obj/machinery/camera/directional/south{ + c_tag = "Hallway - Western Tram Bridge 2" + }, +/turf/open/floor/vault{ + base_icon_state = "tram2"; + icon_state = "tram2"; + desc = "A sturdy looking tram platform."; + name = "tram platform" + }, +/area/station/hallway/primary/tram/center) "uQK" = ( /obj/effect/landmark/event_spawn, /obj/structure/chair/stool/directional/east, @@ -58551,6 +58596,17 @@ }, /turf/open/floor/iron, /area/station/commons/fitness/recreation) +"uZP" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 6 + }, +/mob/living/basic/pet/dog/pug{ + desc = "A pug with an insatiable appetite for pasta and pasta-adjacent piping."; + name = "Spaghetti" + }, +/obj/structure/bed/dogbed/ian, +/turf/open/floor/iron, +/area/station/engineering/atmos) "uZQ" = ( /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/trimline/blue/filled/corner{ @@ -59314,16 +59370,6 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron, /area/station/service/janitor) -"vpM" = ( -/obj/effect/turf_decal/delivery/white, -/obj/structure/holosign/barrier/atmos/tram, -/turf/open/floor/vault{ - base_icon_state = "tram2"; - icon_state = "tram2"; - desc = "A sturdy looking tram platform."; - name = "tram platform" - }, -/area/station/hallway/primary/tram/right) "vpP" = ( /obj/machinery/door/poddoor/preopen{ id = "Engineering"; @@ -59926,6 +59972,14 @@ }, /turf/open/floor/iron, /area/station/security/execution/transfer) +"vzr" = ( +/obj/effect/turf_decal/tile/bar, +/obj/effect/turf_decal/tile/bar{ + dir = 1 + }, +/obj/structure/chair/sofa/corner, +/turf/open/floor/iron, +/area/station/cargo/miningdock/cafeteria) "vzt" = ( /obj/item/flashlight/flare, /turf/open/misc/asteroid, @@ -60151,6 +60205,14 @@ "vCZ" = ( /turf/closed/wall, /area/station/service/chapel/monastery) +"vDw" = ( +/obj/structure/industrial_lift/tram/subfloor, +/obj/structure/fluff/tram_rail{ + dir = 1 + }, +/obj/structure/window/reinforced/shuttle/tram, +/turf/open/openspace, +/area/station/hallway/primary/tram/center) "vDG" = ( /obj/structure/filingcabinet/chestdrawer{ pixel_y = 2 @@ -60282,13 +60344,6 @@ }, /turf/open/floor/engine/n2o, /area/station/engineering/atmos) -"vFS" = ( -/obj/structure/fluff/tram_rail, -/obj/effect/landmark/start/hangover, -/obj/structure/industrial_lift/tram, -/obj/structure/chair/sofa/bench/tram/right, -/turf/open/openspace, -/area/station/hallway/primary/tram/center) "vFV" = ( /obj/structure/flora/bush/lavendergrass/style_random, /obj/structure/window/reinforced/spawner/west, @@ -60430,6 +60485,12 @@ }, /turf/open/floor/iron/white, /area/station/science/xenobiology) +"vJU" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/fluff/tram_rail/floor, +/obj/structure/cable, +/turf/open/floor/glass/reinforced/tram, +/area/station/hallway/primary/tram/center) "vKb" = ( /obj/structure/lattice, /obj/machinery/camera/motion{ @@ -61242,13 +61303,6 @@ }, /turf/open/floor/iron/stairs/medium, /area/station/commons/dorms) -"vYL" = ( -/obj/structure/chair/sofa/left{ - dir = 8 - }, -/obj/structure/sign/clock/directional/east, -/turf/open/floor/carpet, -/area/station/medical/psychology) "vYU" = ( /obj/machinery/door/airlock/security/glass{ name = "Holding Area" @@ -61489,17 +61543,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) -"wdA" = ( -/obj/effect/turf_decal/delivery/white, -/obj/structure/holosign/barrier/atmos/tram, -/obj/structure/fluff/tram_rail/floor, -/turf/open/floor/vault{ - base_icon_state = "tram2"; - icon_state = "tram2"; - desc = "A sturdy looking tram platform."; - name = "tram platform" - }, -/area/station/hallway/primary/tram/left) "wdG" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, @@ -62385,14 +62428,6 @@ /obj/item/gun/ballistic/shotgun/doublebarrel, /turf/open/floor/wood, /area/station/service/bar/backroom) -"wwg" = ( -/obj/effect/turf_decal/tile/bar, -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/obj/structure/chair/sofa/corner, -/turf/open/floor/iron, -/area/station/cargo/miningdock/cafeteria) "wwn" = ( /obj/structure/table, /obj/effect/turf_decal/stripes/line{ @@ -63262,6 +63297,12 @@ /obj/structure/table/wood/fancy/royalblue, /turf/open/floor/wood/large, /area/station/service/library) +"wLP" = ( +/obj/structure/chair/sofa/corner{ + dir = 8 + }, +/turf/open/floor/iron/cafeteria, +/area/station/science/breakroom) "wLR" = ( /obj/effect/turf_decal/trimline/brown/filled/line{ dir = 5 @@ -63497,6 +63538,11 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/secondary/service) +"wQO" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/fluff/tram_rail/floor, +/turf/open/floor/glass/reinforced/tram, +/area/station/hallway/primary/tram/right) "wQP" = ( /turf/closed/wall, /area/station/maintenance/starboard/lesser) @@ -64765,19 +64811,6 @@ /obj/item/paper/fluff/genpop_instructions, /turf/open/floor/iron, /area/station/security/execution/transfer) -"xlu" = ( -/obj/effect/turf_decal/delivery/white, -/obj/structure/holosign/barrier/atmos/tram, -/obj/machinery/camera/directional/south{ - c_tag = "Hallway - Western Tram Bridge 2" - }, -/turf/open/floor/vault{ - base_icon_state = "tram2"; - icon_state = "tram2"; - desc = "A sturdy looking tram platform."; - name = "tram platform" - }, -/area/station/hallway/primary/tram/center) "xlw" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -64895,12 +64928,6 @@ /obj/machinery/airalarm/directional/east, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"xor" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/fluff/tram_rail/floor, -/obj/structure/cable, -/turf/open/floor/glass/reinforced/tram, -/area/station/hallway/primary/tram/center) "xoN" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -65935,17 +65962,6 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) -"xJH" = ( -/obj/effect/turf_decal/delivery/white, -/obj/structure/holosign/barrier/atmos/tram, -/obj/structure/fluff/tram_rail/floor, -/turf/open/floor/vault{ - base_icon_state = "tram2"; - icon_state = "tram2"; - desc = "A sturdy looking tram platform."; - name = "tram platform" - }, -/area/station/hallway/primary/tram/right) "xJV" = ( /obj/structure/cable, /obj/effect/turf_decal/trimline/red/filled/line, @@ -66916,6 +66932,14 @@ /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, /turf/closed/wall/r_wall, /area/station/engineering/atmos) +"ybz" = ( +/obj/structure/industrial_lift/tram/accessible/south, +/obj/structure/fluff/tram_rail{ + dir = 1 + }, +/obj/structure/railing, +/turf/open/openspace, +/area/station/hallway/primary/tram/center) "ybY" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -67007,13 +67031,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/cargo/storage) -"yek" = ( -/obj/structure/chair/sofa/right{ - dir = 8 - }, -/obj/structure/sign/calendar/directional/east, -/turf/open/floor/carpet, -/area/station/medical/psychology) "yeo" = ( /obj/machinery/duct, /obj/effect/turf_decal/trimline/neutral/filled/line, @@ -102612,7 +102629,7 @@ bia hZr gdJ hRj -lPq +uZP mwK xtu beG @@ -111344,7 +111361,7 @@ xUs lmK ydF hHv -agT +tGU xOv xBB eiC @@ -111857,8 +111874,8 @@ mxV lJn sdf jMD -ozg -agT +orI +tGU nbq iyC eQy @@ -112113,8 +112130,8 @@ oys yky lhA oTm -ejB -fma +qRs +wLP qig bnS rGx @@ -112330,10 +112347,10 @@ dhe dhe dhe unl -caQ +qZI nTG nTG -pSf +cvz unl qaV kDi @@ -112587,10 +112604,10 @@ dhe dhe dhe unl -wwg -gXS -gXS -exO +vzr +jAu +jAu +jnw unl gxw kDi @@ -152476,7 +152493,7 @@ tDT ylF mSw pUw -bpr +cxd jLf oYR jLf @@ -155019,11 +155036,11 @@ yiM jUu xwC eNO -tZC -mFz +asv +iCz qoE -cXU -tZC +uIC +asv eOr aKp sTs @@ -158616,13 +158633,13 @@ dDG dDG dOi klT -jIK -jIK -wdA +tyU +tyU +nTr fbM -gEn -jIK -pYg +rnp +tyU +bfJ klT aRN dDG @@ -159387,13 +159404,13 @@ cuX dDG dOi pdW -url -url -iyP +iHW +iHW +rQL dns -bTr -url -xlu +iYi +iHW +uQJ pdW aRN dDG @@ -162986,11 +163003,11 @@ eSz kQF tGW jJw -uMP -xor +kYX +vJU eGA -qwj -uMP +jJM +kYX hke lNj dVP @@ -163757,11 +163774,11 @@ izU jpv aEM cRU -wew -hat -dgc -hya -wew +oZE +fhe +gom +cjX +oZE lyv eOi agt @@ -164014,11 +164031,11 @@ vyH qGw wHs gej -qYR -vFS +sqW +iiH duZ oCu -qYR +sqW sqz oej vJF @@ -164271,11 +164288,11 @@ vyH qGw bqI izU -wew -hhS +oZE +lNy duZ xSu -wew +oZE izU gYR vJF @@ -165042,11 +165059,11 @@ vyH vRL vjl fld -dJx +uep krX -lBL +jCQ meY -dJx +lKP jEO anS uwY @@ -165813,11 +165830,11 @@ vyH jfC kBX izU -wew +oZE uRh duZ -oCu -pKT +ybz +oZE izU nWl vJF @@ -166070,11 +166087,11 @@ vyH jfC waf odj -qYR +sqW azO duZ -hwL -qYR +qfz +sqW kXK qms vJF @@ -166328,10 +166345,10 @@ vtp dUC cRU wew -hat -dgc -lQJ -wew +fhe +gom +vDw +oZE lyv ebF vsR @@ -167098,11 +167115,11 @@ eSz rMA fmf bxy -uMP -xor +kYX +vJU bwZ -qwj -uMP +jJM +kYX ipd vbL gMZ @@ -168661,9 +168678,9 @@ dvK bLQ bFq qgd -yek -kTB -vYL +eLw +kRa +auK kcZ ugt pbn @@ -170695,13 +170712,13 @@ dhe dDG dOi pdW -url -url -iyP +iHW +iHW +rQL dns -bTr -url -okc +iYi +iHW +rcr pdW aRN dDG @@ -171466,13 +171483,13 @@ dhe dDG dOi pev -vpM -vpM -xJH +iYa +iYa +lZX uZg -kKd -vpM -bbG +gAY +iYa +tlu pev aRN dDG @@ -175065,11 +175082,11 @@ wkz xHd xPU nXJ -kmZ -swx +mdW +wQO oSW -tCd -kmZ +ezQ +mdW qsl aNP czl diff --git a/code/datums/components/crafting/recipes.dm b/code/datums/components/crafting/recipes.dm index 4259c27e9be..5e143dd5bdc 100644 --- a/code/datums/components/crafting/recipes.dm +++ b/code/datums/components/crafting/recipes.dm @@ -785,7 +785,8 @@ /datum/crafting_recipe/paperframes name = "Paper Frames" - result = /obj/item/stack/sheet/paperframes/five + result = /obj/item/stack/sheet/paperframes + result_amount = 5 time = 1 SECONDS reqs = list(/obj/item/stack/sheet/mineral/wood = 5, /obj/item/paper = 20) category = CAT_STRUCTURE @@ -814,7 +815,8 @@ /datum/crafting_recipe/blackcarpet name = "Black Carpet" reqs = list(/obj/item/stack/tile/carpet = 50, /obj/item/toy/crayon/black = 1) - result = /obj/item/stack/tile/carpet/black/fifty + result = /obj/item/stack/tile/carpet/black + result_amount = 50 category = CAT_TILES /datum/crafting_recipe/curtain diff --git a/code/datums/components/twohanded.dm b/code/datums/components/twohanded.dm index 3c438b8c085..aa82d8e3544 100644 --- a/code/datums/components/twohanded.dm +++ b/code/datums/components/twohanded.dm @@ -219,7 +219,7 @@ // wield update status wielded = FALSE - UnregisterSignal(user, COMSIG_MOB_SWAP_HANDS) + UnregisterSignal(user, COMSIG_MOB_SWAPPING_HANDS) SEND_SIGNAL(parent, COMSIG_TWOHANDED_UNWIELD, user) REMOVE_TRAIT(parent, TRAIT_WIELDED, REF(src)) unwield_callback?.Invoke(parent, user) diff --git a/code/datums/greyscale/config_types/greyscale_configs.dm b/code/datums/greyscale/config_types/greyscale_configs.dm index a673762a229..bf42bb8a62f 100644 --- a/code/datums/greyscale/config_types/greyscale_configs.dm +++ b/code/datums/greyscale/config_types/greyscale_configs.dm @@ -465,6 +465,11 @@ icon_file = 'icons/obj/sofa.dmi' json_config = 'code/datums/greyscale/json_configs/bench_right.json' +/datum/greyscale_config/bench_solo + name = "Bench Right" + icon_file = 'icons/obj/sofa.dmi' + json_config = 'code/datums/greyscale/json_configs/bench_solo.json' + /datum/greyscale_config/bench_corner name = "Bench Corner" icon_file = 'icons/obj/sofa.dmi' diff --git a/code/datums/greyscale/json_configs/bench_solo.json b/code/datums/greyscale/json_configs/bench_solo.json new file mode 100644 index 00000000000..505be14387f --- /dev/null +++ b/code/datums/greyscale/json_configs/bench_solo.json @@ -0,0 +1,15 @@ +{ + "bench_solo": [ + { + "type": "icon_state", + "icon_state": "bench_solo_base", + "blend_mode": "overlay" + }, + { + "type": "icon_state", + "icon_state": "bench_solo_cover", + "blend_mode": "overlay", + "color_ids": [ 1 ] + } + ] +} diff --git a/code/datums/json_savefile.dm b/code/datums/json_savefile.dm index 8884fa60c5d..5c498b2441f 100644 --- a/code/datums/json_savefile.dm +++ b/code/datums/json_savefile.dm @@ -1,6 +1,7 @@ /** * A savefile implementation that handles all data using json. * Also saves it using JSON too, fancy. + * If you pass in a null path, it simply acts as a memory tree instead, and cannot be saved. */ /datum/json_savefile var/path = "" @@ -13,7 +14,7 @@ GENERAL_PROTECT_DATUM(/datum/json_savefile) /datum/json_savefile/New(path) src.path = path tree = list() - if(fexists(path)) + if(path && fexists(path)) load() /** @@ -43,7 +44,7 @@ GENERAL_PROTECT_DATUM(/datum/json_savefile) tree?.Cut() /datum/json_savefile/proc/load() - if(!fexists(path)) + if(!path || !fexists(path)) return FALSE try tree = json_decode(rustg_file_read(path)) @@ -53,7 +54,8 @@ GENERAL_PROTECT_DATUM(/datum/json_savefile) return FALSE /datum/json_savefile/proc/save() - rustg_file_write(json_encode(tree), path) + if(path) + rustg_file_write(json_encode(tree), path) /// Traverses the entire dir tree of the given savefile and dynamically assembles the tree from it /datum/json_savefile/proc/import_byond_savefile(savefile/savefile) diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index 9a7da3b0026..e685165c285 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -203,7 +203,6 @@ return //install board if(install_board(target_board, user, FALSE)) - user.Beam(src, icon_state = "rped_upgrade", time = 5) replacer.play_rped_sound() //attack this frame again with the rped so it can install stock parts since its now in state 3 attackby(replacer, user, params) diff --git a/code/game/objects/structures/plaques/static_plaques.dm b/code/game/objects/structures/plaques/static_plaques.dm index b74b147b34c..f6a823426e1 100644 --- a/code/game/objects/structures/plaques/static_plaques.dm +++ b/code/game/objects/structures/plaques/static_plaques.dm @@ -141,3 +141,9 @@ /obj/structure/sign/plaques/kiddie/gameoflife name = "\improper Conway's The Game Of Life plaque" desc = "A plaque detailing the historical significance of The Game Of Life in the field of computer science, and that the mural underfoot is a representation of the game in action." + +/obj/structure/sign/plaques/tram + name = "\improper tram information plate" + desc = "A plate showing details from the manufacturer about this Nakamura Engineering SkyyTram Mk IV, serial number LT301TG2563. We are not responsible for any injuries or fatalites caused by usage of the tram. For technical assistance in the event of malfunction please contact: (the info seems to be scratched up to the point of being unreadable.)" + icon_state = "commission_tram" + custom_materials = list(/datum/material/titanium = 2000) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 2ea215689e0..0a8583bd1b9 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -2,20 +2,26 @@ GLOBAL_LIST_EMPTY(preferences_datums) /datum/preferences var/client/parent - //doohickeys for savefiles + /// The path to the general savefile for this datum var/path - var/default_slot = 1 //Holder so it doesn't default to slot 1, rather the last one used - var/max_save_slots = 30 //SKYRAT EDIT CHANGE + /// Whether or not we allow saving/loading. Used for guests, if they're enabled + var/load_and_save = TRUE + /// Ensures that we always load the last used save, QOL + var/default_slot = 1 + /// The maximum number of slots we're allowed to contain + var/max_save_slots = 30 //SKYRAT EDIT - ORIGINAL 3 - //non-preference stuff - var/muted = 0 + /// Bitflags for communications that are muted + var/muted = NONE + /// Last IP that this client has connected from var/last_ip + /// Last CID that this client has connected from var/last_id - //game-preferences - var/lastchangelog = "" //Saved changlog filesize to detect if there was a change + /// Cached changelog size, to detect new changelogs since last join + var/lastchangelog = "" - //Antag preferences + /// List of ROLE_X that the client wants to be eligible for var/list/be_special = list() //Special role selection /// Custom keybindings. Map of keybind names to keyboard inputs. @@ -99,13 +105,13 @@ GLOBAL_LIST_EMPTY(preferences_datums) middleware += new middleware_type(src) if(IS_CLIENT_OR_MOCK(parent)) - if(!is_guest_key(parent.key)) - load_path(parent.ckey) - if(!fexists(path)) - try_savefile_type_migration() - unlock_content = !!parent.IsByondMember() - if(unlock_content) - max_save_slots = 40 //SKYRAT EDIT CHANGE + load_and_save = !is_guest_key(parent.key) + load_path(parent.ckey) + if(load_and_save && !fexists(path)) + try_savefile_type_migration() + unlock_content = !!parent.IsByondMember() + if(unlock_content) + max_save_slots = 40 //SKYRAT EDIT - ORIGINAL 8 else CRASH("attempted to create a preferences datum without a client or mock!") load_savefile() diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index 53c5b922601..10f59091243 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -141,14 +141,14 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car to_chat(parent, span_danger("[conflicted.category]: [conflicted.full_name] needs updating")) /datum/preferences/proc/load_path(ckey, filename="preferences.json") - if(!ckey) + if(!ckey || !load_and_save) return path = "data/player_saves/[ckey[1]]/[ckey]/[filename]" /datum/preferences/proc/load_savefile() - if(!path) + if(load_and_save && !path) CRASH("Attempted to load savefile without first loading a path!") - savefile = new /datum/json_savefile(path) + savefile = new /datum/json_savefile(load_and_save ? path : null) /datum/preferences/proc/load_preferences() if(!savefile) @@ -159,7 +159,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car return FALSE var/needs_update = save_data_needs_update(savefile.get_entry()) - if(needs_update == -2) //fatal, can't load any data + if(load_and_save && (needs_update == -2)) //fatal, can't load any data var/bacpath = "[path].updatebac" //todo: if the savefile version is higher then the server, check the backup, and give the player a prompt to load the backup if (fexists(bacpath)) fdel(bacpath) //only keep 1 version of backup @@ -264,7 +264,6 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car /datum/preferences/proc/load_character(slot) SHOULD_NOT_SLEEP(TRUE) - if(!slot) slot = default_slot slot = sanitize_integer(slot, 1, max_save_slots, initial(default_slot)) @@ -320,7 +319,6 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car /datum/preferences/proc/save_character() SHOULD_NOT_SLEEP(TRUE) - if(!path) return FALSE var/tree_key = "character[default_slot]" diff --git a/code/modules/industrial_lift/industrial_lift.dm b/code/modules/industrial_lift/industrial_lift.dm index f5170e6ab9e..a1f90b7683d 100644 --- a/code/modules/industrial_lift/industrial_lift.dm +++ b/code/modules/industrial_lift/industrial_lift.dm @@ -821,11 +821,26 @@ GLOBAL_LIST_EMPTY(lifts) /obj/structure/industrial_lift/tram/white icon_state = "titanium_white" +/obj/structure/industrial_lift/tram/subfloor + name = "tram subfloor" + desc = "A sturdy looking thermoplastic subfloor the tram is built on." + icon_state = "tram_subfloor" + /datum/armor/structure_industrial_lift melee = 50 fire = 80 acid = 50 +/obj/structure/industrial_lift/tram/accessible + icon_state = "titanium_accessible_north" + +/obj/structure/industrial_lift/tram/accessible/north + icon_state = "titanium_accessible_north" + +/obj/structure/industrial_lift/tram/accessible/south + icon_state = "titanium_accessible_south" + + /obj/structure/industrial_lift/tram/AddItemOnLift(datum/source, atom/movable/AM) . = ..() if(travelling) diff --git a/code/modules/industrial_lift/tram_controls.dm b/code/modules/industrial_lift/tram_controls.dm index 5e007c81ecb..b443ee09ff4 100644 --- a/code/modules/industrial_lift/tram_controls.dm +++ b/code/modules/industrial_lift/tram_controls.dm @@ -5,6 +5,7 @@ base_icon_state = "tram_" icon_screen = "tram_Central Wing_idle" icon_keyboard = null + layer = SIGN_LAYER circuit = /obj/item/circuitboard/computer/tram_controls flags_1 = NODECONSTRUCT_1 | SUPERMATTER_IGNORES_1 resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF @@ -197,3 +198,5 @@ /obj/item/circuit_component/tram_controls/proc/on_tram_travel(datum/source, obj/effect/landmark/tram/from_where, obj/effect/landmark/tram/to_where) SIGNAL_HANDLER location.set_output(to_where.name) + +MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/tram_controls, 0) diff --git a/code/modules/industrial_lift/tram_override_objects.dm b/code/modules/industrial_lift/tram_override_objects.dm index a5da90f1f27..81fcfa5f4cc 100644 --- a/code/modules/industrial_lift/tram_override_objects.dm +++ b/code/modules/industrial_lift/tram_override_objects.dm @@ -31,15 +31,26 @@ greyscale_colors = "#00CCFF" /obj/structure/chair/sofa/bench/tram/left + name = "tram seating" + desc = "Not the most comfortable, but easy to keep clean!" icon_state = "bench_left" greyscale_config = /datum/greyscale_config/bench_left greyscale_colors = "#00CCFF" /obj/structure/chair/sofa/bench/tram/right + name = "tram seating" + desc = "Not the most comfortable, but easy to keep clean!" icon_state = "bench_right" greyscale_config = /datum/greyscale_config/bench_right greyscale_colors = "#00CCFF" +/obj/structure/chair/sofa/bench/tram/solo + name = "tram seating" + desc = "Not the most comfortable, but easy to keep clean!" + icon_state = "bench_solo" + greyscale_config = /datum/greyscale_config/bench_solo + greyscale_colors = "#00CCFF" + /turf/open/floor/glass/reinforced/tram name = "tram bridge" desc = "It shakes a bit when you step, but lets you cross between sides quickly!" @@ -49,6 +60,8 @@ icon = 'icons/obj/doors/tramdoor.dmi' var/associated_lift = MAIN_STATION_TRAM var/datum/weakref/tram_ref + /// Directions the tram door can be forced open in an emergency + var/space_dir = null name = "tram door" desc = "Probably won't crush you if you try to rush them as they close. But we know you live on that danger, try and beat the tram!" @@ -72,6 +85,17 @@ INVOKE_ASYNC(src, PROC_REF(open)) find_tram() +/obj/machinery/door/window/tram/examine(mob/user) + . = ..() + . += span_notice("It has labels indicating that it has an emergency mechanism to open from the inside using just your hands in the event of an emergency.") + +/obj/machinery/door/window/tram/try_safety_unlock(mob/user) + if(!hasPower()) + to_chat(user, span_notice("You begin pulling the tram emergency exit handle...")) + if(do_after(user, 15 SECONDS, target = src)) + try_to_crowbar(null, user, TRUE) + return TRUE + /obj/machinery/door/window/tram/open_and_close() var/datum/lift_master/tram/tram_part = tram_ref?.resolve() if(!open()) diff --git a/code/modules/jobs/job_types/_job.dm b/code/modules/jobs/job_types/_job.dm index 421c2d876c0..28fcd112781 100644 --- a/code/modules/jobs/job_types/_job.dm +++ b/code/modules/jobs/job_types/_job.dm @@ -35,9 +35,6 @@ /// Supervisors, who this person answers to directly var/supervisors = "" - /// Selection screen color - var/selection_color = "#ffffff" - /// What kind of mob type joining players with this job as their assigned role are spawned as. var/spawn_type = /mob/living/carbon/human diff --git a/code/modules/jobs/job_types/ai.dm b/code/modules/jobs/job_types/ai.dm index 3a3a401e84b..b1e1eeb6572 100644 --- a/code/modules/jobs/job_types/ai.dm +++ b/code/modules/jobs/job_types/ai.dm @@ -6,7 +6,6 @@ total_positions = 1 spawn_positions = 1 supervisors = "your laws" - selection_color = "#ccffcc" spawn_type = /mob/living/silicon/ai req_admin_notify = TRUE minimal_player_age = 30 diff --git a/code/modules/jobs/job_types/assistant.dm b/code/modules/jobs/job_types/assistant.dm index bf7a89841b6..9561e565098 100644 --- a/code/modules/jobs/job_types/assistant.dm +++ b/code/modules/jobs/job_types/assistant.dm @@ -10,7 +10,6 @@ Assistant total_positions = 5 spawn_positions = 5 supervisors = "absolutely everyone" - selection_color = "#dddddd" exp_granted_type = EXP_TYPE_CREW outfit = /datum/outfit/job/assistant plasmaman_outfit = /datum/outfit/plasmaman diff --git a/code/modules/jobs/job_types/atmospheric_technician.dm b/code/modules/jobs/job_types/atmospheric_technician.dm index 0176bc6eb79..b5c38f4fe58 100644 --- a/code/modules/jobs/job_types/atmospheric_technician.dm +++ b/code/modules/jobs/job_types/atmospheric_technician.dm @@ -6,7 +6,6 @@ total_positions = 3 spawn_positions = 2 supervisors = SUPERVISOR_CE - selection_color = "#fff5cc" exp_requirements = 60 exp_required_type = EXP_TYPE_CREW exp_granted_type = EXP_TYPE_CREW diff --git a/code/modules/jobs/job_types/bartender.dm b/code/modules/jobs/job_types/bartender.dm index 9fc56f186a8..ec526e10d91 100644 --- a/code/modules/jobs/job_types/bartender.dm +++ b/code/modules/jobs/job_types/bartender.dm @@ -6,7 +6,6 @@ total_positions = 1 spawn_positions = 1 supervisors = SUPERVISOR_HOP - selection_color = "#bbe291" exp_granted_type = EXP_TYPE_CREW config_tag = "BARTENDER" diff --git a/code/modules/jobs/job_types/botanist.dm b/code/modules/jobs/job_types/botanist.dm index 2ea1c14fcd9..9486cc6e4c3 100644 --- a/code/modules/jobs/job_types/botanist.dm +++ b/code/modules/jobs/job_types/botanist.dm @@ -6,7 +6,6 @@ total_positions = 3 spawn_positions = 2 supervisors = SUPERVISOR_HOP - selection_color = "#bbe291" exp_granted_type = EXP_TYPE_CREW config_tag = "BOTANIST" diff --git a/code/modules/jobs/job_types/captain.dm b/code/modules/jobs/job_types/captain.dm index 4b1d1a95d8b..16aab686d34 100755 --- a/code/modules/jobs/job_types/captain.dm +++ b/code/modules/jobs/job_types/captain.dm @@ -9,7 +9,6 @@ total_positions = 1 spawn_positions = 1 supervisors = "Nanotrasen officials and Space Law" - selection_color = "#ccccff" req_admin_notify = 1 minimal_player_age = 14 exp_requirements = 180 diff --git a/code/modules/jobs/job_types/cargo_technician.dm b/code/modules/jobs/job_types/cargo_technician.dm index 53807a195ae..0887ea0c084 100644 --- a/code/modules/jobs/job_types/cargo_technician.dm +++ b/code/modules/jobs/job_types/cargo_technician.dm @@ -8,7 +8,6 @@ total_positions = 3 spawn_positions = 2 supervisors = SUPERVISOR_QM - selection_color = "#dcba97" exp_granted_type = EXP_TYPE_CREW config_tag = "CARGO_TECHNICIAN" diff --git a/code/modules/jobs/job_types/chaplain.dm b/code/modules/jobs/job_types/chaplain.dm index 850c10dece1..c1ec62d792f 100644 --- a/code/modules/jobs/job_types/chaplain.dm +++ b/code/modules/jobs/job_types/chaplain.dm @@ -7,7 +7,6 @@ total_positions = 1 spawn_positions = 1 supervisors = SUPERVISOR_HOP - selection_color = "#bbe291" exp_granted_type = EXP_TYPE_CREW config_tag = "CHAPLAIN" diff --git a/code/modules/jobs/job_types/chemist.dm b/code/modules/jobs/job_types/chemist.dm index ab8b0914d13..07becbc4140 100644 --- a/code/modules/jobs/job_types/chemist.dm +++ b/code/modules/jobs/job_types/chemist.dm @@ -7,7 +7,6 @@ total_positions = 2 spawn_positions = 2 supervisors = SUPERVISOR_CMO - selection_color = "#ffeef0" exp_requirements = 60 exp_required_type = EXP_TYPE_CREW exp_granted_type = EXP_TYPE_CREW diff --git a/code/modules/jobs/job_types/chief_engineer.dm b/code/modules/jobs/job_types/chief_engineer.dm index 4496505279a..4a4ae8828bb 100644 --- a/code/modules/jobs/job_types/chief_engineer.dm +++ b/code/modules/jobs/job_types/chief_engineer.dm @@ -9,7 +9,6 @@ total_positions = 1 spawn_positions = 1 supervisors = SUPERVISOR_CAPTAIN - selection_color = "#ffeeaa" req_admin_notify = 1 minimal_player_age = 7 exp_requirements = 180 diff --git a/code/modules/jobs/job_types/chief_medical_officer.dm b/code/modules/jobs/job_types/chief_medical_officer.dm index 91d95cec470..d0ddc0e27d0 100644 --- a/code/modules/jobs/job_types/chief_medical_officer.dm +++ b/code/modules/jobs/job_types/chief_medical_officer.dm @@ -9,7 +9,6 @@ total_positions = 1 spawn_positions = 1 supervisors = SUPERVISOR_CAPTAIN - selection_color = "#ffddf0" req_admin_notify = 1 minimal_player_age = 7 exp_requirements = 180 diff --git a/code/modules/jobs/job_types/clown.dm b/code/modules/jobs/job_types/clown.dm index 7e0be854d4f..28d102873be 100644 --- a/code/modules/jobs/job_types/clown.dm +++ b/code/modules/jobs/job_types/clown.dm @@ -6,7 +6,6 @@ total_positions = 1 spawn_positions = 1 supervisors = SUPERVISOR_HOP - selection_color = "#bbe291" exp_granted_type = EXP_TYPE_CREW config_tag = "CLOWN" diff --git a/code/modules/jobs/job_types/cook.dm b/code/modules/jobs/job_types/cook.dm index 0a65dca8953..b76f8a1e7a5 100644 --- a/code/modules/jobs/job_types/cook.dm +++ b/code/modules/jobs/job_types/cook.dm @@ -6,7 +6,6 @@ total_positions = 2 spawn_positions = 1 supervisors = SUPERVISOR_HOP - selection_color = "#bbe291" exp_granted_type = EXP_TYPE_CREW config_tag = "COOK" var/cooks = 0 //Counts cooks amount diff --git a/code/modules/jobs/job_types/curator.dm b/code/modules/jobs/job_types/curator.dm index cbf26d51f9a..905575b12a5 100644 --- a/code/modules/jobs/job_types/curator.dm +++ b/code/modules/jobs/job_types/curator.dm @@ -7,7 +7,6 @@ total_positions = 1 spawn_positions = 1 supervisors = SUPERVISOR_HOP - selection_color = "#bbe291" config_tag = "CURATOR" exp_granted_type = EXP_TYPE_CREW diff --git a/code/modules/jobs/job_types/cyborg.dm b/code/modules/jobs/job_types/cyborg.dm index 785db5e8a31..3080eb3e649 100644 --- a/code/modules/jobs/job_types/cyborg.dm +++ b/code/modules/jobs/job_types/cyborg.dm @@ -6,7 +6,6 @@ total_positions = 3 // SKYRAT EDIT: Original value (0) spawn_positions = 3 // SKYRAT EDIT: Original value (1) supervisors = "your laws and the AI" //Nodrak - selection_color = "#ddffdd" spawn_type = /mob/living/silicon/robot minimal_player_age = 21 exp_requirements = 120 diff --git a/code/modules/jobs/job_types/detective.dm b/code/modules/jobs/job_types/detective.dm index 46bdb3275b2..4b44a3a4ae2 100644 --- a/code/modules/jobs/job_types/detective.dm +++ b/code/modules/jobs/job_types/detective.dm @@ -8,7 +8,6 @@ total_positions = 1 spawn_positions = 1 supervisors = SUPERVISOR_HOS - selection_color = "#ffeeee" minimal_player_age = 7 exp_requirements = 300 exp_required_type = EXP_TYPE_CREW diff --git a/code/modules/jobs/job_types/geneticist.dm b/code/modules/jobs/job_types/geneticist.dm index 6d09163d51f..1c11925bcd3 100644 --- a/code/modules/jobs/job_types/geneticist.dm +++ b/code/modules/jobs/job_types/geneticist.dm @@ -6,7 +6,6 @@ total_positions = 2 spawn_positions = 2 supervisors = SUPERVISOR_RD - selection_color = "#ffeeff" exp_requirements = 60 exp_required_type = EXP_TYPE_CREW exp_granted_type = EXP_TYPE_CREW diff --git a/code/modules/jobs/job_types/head_of_personnel.dm b/code/modules/jobs/job_types/head_of_personnel.dm index ae079f432ad..36d805eec5b 100644 --- a/code/modules/jobs/job_types/head_of_personnel.dm +++ b/code/modules/jobs/job_types/head_of_personnel.dm @@ -9,7 +9,6 @@ total_positions = 1 spawn_positions = 1 supervisors = SUPERVISOR_HOP - selection_color = "#ddddff" req_admin_notify = 1 minimal_player_age = 10 exp_requirements = 180 diff --git a/code/modules/jobs/job_types/head_of_security.dm b/code/modules/jobs/job_types/head_of_security.dm index 2198ab7dda2..79294563a48 100644 --- a/code/modules/jobs/job_types/head_of_security.dm +++ b/code/modules/jobs/job_types/head_of_security.dm @@ -9,7 +9,6 @@ total_positions = 1 spawn_positions = 1 supervisors = SUPERVISOR_CAPTAIN - selection_color = "#ffdddd" req_admin_notify = 1 minimal_player_age = 14 exp_requirements = 300 diff --git a/code/modules/jobs/job_types/janitor.dm b/code/modules/jobs/job_types/janitor.dm index c5350e14ab3..d946fe9e93e 100644 --- a/code/modules/jobs/job_types/janitor.dm +++ b/code/modules/jobs/job_types/janitor.dm @@ -6,7 +6,6 @@ total_positions = 2 spawn_positions = 1 supervisors = SUPERVISOR_HOP - selection_color = "#bbe291" exp_granted_type = EXP_TYPE_CREW config_tag = "JANITOR" diff --git a/code/modules/jobs/job_types/lawyer.dm b/code/modules/jobs/job_types/lawyer.dm index 431fca96f32..38d55e85c28 100644 --- a/code/modules/jobs/job_types/lawyer.dm +++ b/code/modules/jobs/job_types/lawyer.dm @@ -7,7 +7,6 @@ total_positions = 2 spawn_positions = 2 supervisors = SUPERVISOR_HOP - selection_color = "#bbe291" exp_granted_type = EXP_TYPE_CREW config_tag = "LAWYER" diff --git a/code/modules/jobs/job_types/medical_doctor.dm b/code/modules/jobs/job_types/medical_doctor.dm index 1662d6ba744..e8f064fd545 100644 --- a/code/modules/jobs/job_types/medical_doctor.dm +++ b/code/modules/jobs/job_types/medical_doctor.dm @@ -7,7 +7,6 @@ total_positions = 5 spawn_positions = 3 supervisors = SUPERVISOR_CMO - selection_color = "#ffeef0" exp_granted_type = EXP_TYPE_CREW config_tag = "MEDICAL_DOCTOR" diff --git a/code/modules/jobs/job_types/mime.dm b/code/modules/jobs/job_types/mime.dm index fb421d4d133..dd6240e75a5 100644 --- a/code/modules/jobs/job_types/mime.dm +++ b/code/modules/jobs/job_types/mime.dm @@ -6,7 +6,6 @@ total_positions = 1 spawn_positions = 1 supervisors = SUPERVISOR_HOP - selection_color = "#bbe291" exp_granted_type = EXP_TYPE_CREW config_tag = "MIME" diff --git a/code/modules/jobs/job_types/paramedic.dm b/code/modules/jobs/job_types/paramedic.dm index f84b1e7c138..608cfb7ba0d 100644 --- a/code/modules/jobs/job_types/paramedic.dm +++ b/code/modules/jobs/job_types/paramedic.dm @@ -7,7 +7,6 @@ total_positions = 2 spawn_positions = 2 supervisors = SUPERVISOR_CMO - selection_color = "#ffeef0" exp_granted_type = EXP_TYPE_CREW config_tag = "PARAMEDIC" diff --git a/code/modules/jobs/job_types/prisoner.dm b/code/modules/jobs/job_types/prisoner.dm index 8a1dcbd6634..196630adf90 100644 --- a/code/modules/jobs/job_types/prisoner.dm +++ b/code/modules/jobs/job_types/prisoner.dm @@ -6,7 +6,6 @@ total_positions = 12 // SKYRAT EDIT: Original value (0) spawn_positions = 2 supervisors = "the security team" - selection_color = "#ffe1c3" exp_granted_type = EXP_TYPE_CREW paycheck = PAYCHECK_LOWER config_tag = "PRISONER" diff --git a/code/modules/jobs/job_types/psychologist.dm b/code/modules/jobs/job_types/psychologist.dm index 18e47208ae5..b39babc0045 100644 --- a/code/modules/jobs/job_types/psychologist.dm +++ b/code/modules/jobs/job_types/psychologist.dm @@ -7,7 +7,6 @@ total_positions = 1 spawn_positions = 1 supervisors = "the Head of Personnel and the Chief Medical Officer" - selection_color = "#bbe291" exp_granted_type = EXP_TYPE_CREW config_tag = "PSYCHOLOGIST" diff --git a/code/modules/jobs/job_types/quartermaster.dm b/code/modules/jobs/job_types/quartermaster.dm index c09e3687f9b..271ce27c4a5 100644 --- a/code/modules/jobs/job_types/quartermaster.dm +++ b/code/modules/jobs/job_types/quartermaster.dm @@ -9,7 +9,6 @@ spawn_positions = 1 minimal_player_age = 7 supervisors = SUPERVISOR_CAPTAIN - selection_color = "#d7b088" exp_required_type_department = EXP_TYPE_SUPPLY exp_granted_type = EXP_TYPE_CREW config_tag = "QUARTERMASTER" diff --git a/code/modules/jobs/job_types/research_director.dm b/code/modules/jobs/job_types/research_director.dm index 7aff43251c5..0be48b2ea80 100644 --- a/code/modules/jobs/job_types/research_director.dm +++ b/code/modules/jobs/job_types/research_director.dm @@ -10,7 +10,6 @@ total_positions = 1 spawn_positions = 1 supervisors = SUPERVISOR_CAPTAIN - selection_color = "#ffddff" req_admin_notify = 1 minimal_player_age = 7 exp_required_type_department = EXP_TYPE_SCIENCE diff --git a/code/modules/jobs/job_types/roboticist.dm b/code/modules/jobs/job_types/roboticist.dm index 2afc7847cba..4eefbf573b6 100644 --- a/code/modules/jobs/job_types/roboticist.dm +++ b/code/modules/jobs/job_types/roboticist.dm @@ -6,7 +6,6 @@ total_positions = 2 spawn_positions = 2 supervisors = SUPERVISOR_RD - selection_color = "#ffeeff" exp_requirements = 60 exp_required_type = EXP_TYPE_CREW exp_granted_type = EXP_TYPE_CREW diff --git a/code/modules/jobs/job_types/scientist.dm b/code/modules/jobs/job_types/scientist.dm index 7dfe2621ff7..709d4b76c87 100644 --- a/code/modules/jobs/job_types/scientist.dm +++ b/code/modules/jobs/job_types/scientist.dm @@ -6,7 +6,6 @@ total_positions = 5 spawn_positions = 3 supervisors = SUPERVISOR_RD - selection_color = "#ffeeff" exp_requirements = 60 exp_required_type = EXP_TYPE_CREW exp_granted_type = EXP_TYPE_CREW diff --git a/code/modules/jobs/job_types/security_officer.dm b/code/modules/jobs/job_types/security_officer.dm index 5c27c8ba478..47ce1982604 100644 --- a/code/modules/jobs/job_types/security_officer.dm +++ b/code/modules/jobs/job_types/security_officer.dm @@ -8,7 +8,6 @@ total_positions = 8 //Handled in /datum/controller/occupations/proc/setup_officer_positions() //SKYRAT EDIT: SET TO 8, WAS 5 spawn_positions = 8 //Handled in /datum/controller/occupations/proc/setup_officer_positions() //SKYRAT EDIT: SEE ABOVE supervisors = "the Head of Security, and the head of your assigned department (if applicable)" - selection_color = "#ffeeee" minimal_player_age = 7 exp_requirements = 300 exp_required_type = EXP_TYPE_CREW diff --git a/code/modules/jobs/job_types/shaft_miner.dm b/code/modules/jobs/job_types/shaft_miner.dm index 4c76521f719..d4aa84a4c3a 100644 --- a/code/modules/jobs/job_types/shaft_miner.dm +++ b/code/modules/jobs/job_types/shaft_miner.dm @@ -7,7 +7,6 @@ total_positions = 3 spawn_positions = 3 supervisors = SUPERVISOR_QM - selection_color = "#dcba97" exp_granted_type = EXP_TYPE_CREW config_tag = "SHAFT_MINER" diff --git a/code/modules/jobs/job_types/station_engineer.dm b/code/modules/jobs/job_types/station_engineer.dm index 26e413add01..5c1420c6787 100644 --- a/code/modules/jobs/job_types/station_engineer.dm +++ b/code/modules/jobs/job_types/station_engineer.dm @@ -7,7 +7,6 @@ total_positions = 5 spawn_positions = 5 supervisors = SUPERVISOR_CE - selection_color = "#fff5cc" exp_requirements = 60 exp_required_type = EXP_TYPE_CREW exp_granted_type = EXP_TYPE_CREW diff --git a/code/modules/jobs/job_types/virologist.dm b/code/modules/jobs/job_types/virologist.dm index 5f33a9e98fb..a844b8abcdc 100644 --- a/code/modules/jobs/job_types/virologist.dm +++ b/code/modules/jobs/job_types/virologist.dm @@ -7,7 +7,6 @@ total_positions = 1 spawn_positions = 1 supervisors = SUPERVISOR_CMO - selection_color = "#ffeef0" exp_requirements = 60 exp_required_type = EXP_TYPE_CREW exp_granted_type = EXP_TYPE_CREW diff --git a/code/modules/jobs/job_types/warden.dm b/code/modules/jobs/job_types/warden.dm index f7e4d0f65f9..d6d3e070173 100644 --- a/code/modules/jobs/job_types/warden.dm +++ b/code/modules/jobs/job_types/warden.dm @@ -9,7 +9,6 @@ total_positions = 1 spawn_positions = 1 supervisors = SUPERVISOR_HOS - selection_color = "#ffeeee" minimal_player_age = 7 exp_requirements = 300 exp_required_type = EXP_TYPE_CREW diff --git a/code/modules/mob/dead/new_player/sprite_accessories.dm b/code/modules/mob/dead/new_player/sprite_accessories.dm index a516a54e579..03b12ad34dc 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories.dm @@ -103,6 +103,10 @@ name = "Afro (Large)" icon_state = "hair_bigafro" +/datum/sprite_accessory/hair/allthefuzz + name = "All The Fuzz" + icon_state = "hair_allthefuzz" + /datum/sprite_accessory/hair/antenna name = "Ahoge" icon_state = "hair_antenna" @@ -128,7 +132,7 @@ icon_state = "hair_bedheadv3" /datum/sprite_accessory/hair/bedheadv4 - name = "BedHead 4X" + name = "Bedhead 4x" icon_state = "hair_bedheadv4" /datum/sprite_accessory/hair/bedheadlong @@ -139,8 +143,8 @@ name = "Floorlength Bedhead" icon_state = "hair_floorlength_bedhead" -/datum/sprite_accessory/hair/BadlyCut - name = "Marginally shorter yet Long Bedhead" +/datum/sprite_accessory/hair/badlycut + name = "Shorter Long Bedhead" icon_state = "hair_verybadlycut" /datum/sprite_accessory/hair/beehive @@ -527,6 +531,10 @@ name = "Over Eye" icon_state = "hair_shortovereye" +/datum/sprite_accessory/hair/hair_overeyetwo + name = "Over Eye 2" + icon_state = "hair_overeyetwo" + /datum/sprite_accessory/hair/oxton name = "Oxton" icon_state = "hair_oxton" diff --git a/code/modules/research/stock_parts.dm b/code/modules/research/stock_parts.dm index 3867675ee8a..83c492f9356 100644 --- a/code/modules/research/stock_parts.dm +++ b/code/modules/research/stock_parts.dm @@ -55,9 +55,6 @@ If you create T5+ please take a pass at mech_fabricator.dm. The parts being good if(!ismachinery(attacked_object) && !istype(attacked_object, /obj/structure/frame/machine)) return ..() - if(adjacent) - return ..() - if(ismachinery(attacked_object)) var/obj/machinery/attacked_machinery = attacked_object @@ -70,6 +67,8 @@ If you create T5+ please take a pass at mech_fabricator.dm. The parts being good return var/obj/structure/frame/machine/attacked_frame = attacked_object + if(!adjacent && !works_from_distance) + return // no point attacking the frame with the rped if the frame doesn't have wiring or it doesn't have components & rped has no circuitboard to offer as an component. if(attacked_frame.state == 1 || (!attacked_frame.components && !has_an_circuitboard())) return diff --git a/html/changelogs/archive/2023-01.yml b/html/changelogs/archive/2023-01.yml index 0c7b77311b5..40d4087b775 100644 --- a/html/changelogs/archive/2023-01.yml +++ b/html/changelogs/archive/2023-01.yml @@ -433,3 +433,41 @@ - rscadd: RPED can now pick up & install machine circuit boards in machine frames - rscadd: RPED can pick up computer circuit boards for storage convenience but doesn't install them +2023-01-12: + GoldenAlpharex: + - code_imp: Made the worn_icons unit test check the worn GAGS config rather than + the normal one. + LT3: + - imageadd: Tram controls are now side mounted, freeing up space. Even better, you + now have two of them! + - imageadd: Added a new accessible space on the tram for wheelchairs + - bugfix: Removed duplicate tram plate/platforms + - code_imp: Tram has its own floor subtype for the walls and windows + - rscadd: Emergency exit feature added for people who are silly enough to not carry + a crowbar + MiiyaBot: + - rscadd: Two new hairstyles! ("All the Fuzz" & "Over Eye (Izutsumi)") + - spellcheck: Renamed "Marginally shorter yet long bedhead" to "Shorter Long Bedhead" + - spellcheck: Renamed "BedHead 4X" to "Bedhead 4x" + - bugfix: Slight changes to "Jade", "Shorter Bedhead", "Bedhead 4x" + RatFromTheJungle: + - bugfix: the detective revolver is once more, visible at all times + ShizCalev: + - bugfix: Fixed Black Carpet and Paper Frames crafting recipes only giving you 1 + item in return. + SkyratBot: + - server: Preferences now support guests + - bugfix: fixes twohanded items not letting you switch hands + - bugfix: Chemists can now properly open and close their desk windoor on Deltastation + - bugfix: normal RPED from behaving like an BRPED when installing stock parts in + an incomplete machine frame + dawsonkeyes: + - qol: marked one is now harder and makes clang noises and talks to signal attacks + - bugfix: removed useless berserker armor vars + stanalbatross, thedonkified: + - rscadd: added the ability to make up to 10 individual highlights in tgchat, customise + their colours, and toggle if they highlight the whole message or not. Ported + from CM. + - rscadd: you can now use regex for text highlighting. The syntax is /[regex expression]/, + eg /dog[0-9]/. There are no quantifiers, but you can use capture groups. The + regex must read a minimum of two characters. diff --git a/icons/mob/species/human/human_face.dmi b/icons/mob/species/human/human_face.dmi index fc22646202f..adbb9734e49 100644 Binary files a/icons/mob/species/human/human_face.dmi and b/icons/mob/species/human/human_face.dmi differ diff --git a/icons/obj/computer.dmi b/icons/obj/computer.dmi index 190ab69abde..7abc92dd166 100644 Binary files a/icons/obj/computer.dmi and b/icons/obj/computer.dmi differ diff --git a/icons/obj/signs.dmi b/icons/obj/signs.dmi index 614556ef965..2f0f1afde83 100644 Binary files a/icons/obj/signs.dmi and b/icons/obj/signs.dmi differ diff --git a/icons/obj/sofa.dmi b/icons/obj/sofa.dmi index 84708279824..4cf7889d480 100644 Binary files a/icons/obj/sofa.dmi and b/icons/obj/sofa.dmi differ diff --git a/icons/turf/floors.dmi b/icons/turf/floors.dmi index b4e9aa1eb05..7bcdf29a359 100644 Binary files a/icons/turf/floors.dmi and b/icons/turf/floors.dmi differ diff --git a/modular_skyrat/modules/aesthetics/guns/icons/guns.dmi b/modular_skyrat/modules/aesthetics/guns/icons/guns.dmi index 7b936082562..19c37999218 100644 Binary files a/modular_skyrat/modules/aesthetics/guns/icons/guns.dmi and b/modular_skyrat/modules/aesthetics/guns/icons/guns.dmi differ diff --git a/modular_skyrat/modules/blueshield/code/blueshield.dm b/modular_skyrat/modules/blueshield/code/blueshield.dm index 88d71775e7f..d78b8952e8a 100644 --- a/modular_skyrat/modules/blueshield/code/blueshield.dm +++ b/modular_skyrat/modules/blueshield/code/blueshield.dm @@ -7,7 +7,6 @@ total_positions = 1 spawn_positions = 1 supervisors = "Central Command and the Nanotrasen Consultant" - selection_color = "#c6ffe0" minimal_player_age = 7 exp_requirements = 2400 exp_required_type = EXP_TYPE_CREW diff --git a/modular_skyrat/modules/gladiator/code/game/objects/items/gladiator_items.dm b/modular_skyrat/modules/gladiator/code/game/objects/items/gladiator_items.dm index ee1f70e6f07..ffbdae3102f 100644 --- a/modular_skyrat/modules/gladiator/code/game/objects/items/gladiator_items.dm +++ b/modular_skyrat/modules/gladiator/code/game/objects/items/gladiator_items.dm @@ -1,5 +1,4 @@ -#define MAX_BERSERK_CHARGE 200 -#define BERSERK_HALF_CHARGE 100 +#define BERSERK_MAX_CHARGE 100 #define PROJECTILE_HIT_MULTIPLIER 1.5 #define DAMAGE_TO_CHARGE_SCALE 1 #define CHARGE_DRAINED_PER_SECOND 3 @@ -77,8 +76,6 @@ armor_type = /datum/armor/berserker_gatsu resistance_flags = INDESTRUCTIBLE actions_types = list(/datum/action/item_action/berserk_mode) - ///tracks whether or not the armor's charge is equal to or greater than 100% so it does not do the bubble alert twice - var/charged = FALSE /datum/armor/berserker_gatsu melee = 40 @@ -96,20 +93,18 @@ /obj/item/clothing/head/hooded/berserker/gatsu/examine() . = ..() - . += span_warning("Berserk mode is usable at 100% charge but can gain up to 200% charge for extended duration.") //woag!!! + . += span_warning("Berserk mode is usable at 100% charge and requires the helmet to be closed in order to remain active.") //woag!!! /obj/item/clothing/head/hooded/berserker/gatsu/process(delta_time) if(berserk_active) - berserk_charge = clamp(berserk_charge - CHARGE_DRAINED_PER_SECOND * delta_time, 0, MAX_BERSERK_CHARGE) + berserk_charge = clamp(berserk_charge - CHARGE_DRAINED_PER_SECOND * delta_time, 0, BERSERK_MAX_CHARGE) if(!berserk_charge) if(ishuman(loc)) end_berserk(loc) - charged = FALSE /obj/item/clothing/head/hooded/berserker/gatsu/dropped(mob/user) . = ..() end_berserk(user) - charged = FALSE /obj/item/clothing/head/hooded/berserker/gatsu/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) if(berserk_active) @@ -117,10 +112,9 @@ var/berserk_value = damage * DAMAGE_TO_CHARGE_SCALE if(attack_type == PROJECTILE_ATTACK) berserk_value *= PROJECTILE_HIT_MULTIPLIER - berserk_charge = clamp(round(berserk_charge + berserk_value), 0, MAX_BERSERK_CHARGE) - if(berserk_charge >= BERSERK_HALF_CHARGE & charged == FALSE) + berserk_charge = clamp(round(berserk_charge + berserk_value), 0, BERSERK_MAX_CHARGE) + if(berserk_charge >= BERSERK_MAX_CHARGE) balloon_alert(owner, "berserk charged") - charged = TRUE /obj/item/clothing/head/hooded/berserker/gatsu/IsReflect() if(berserk_active) @@ -234,8 +228,7 @@ new /obj/item/clothing/neck/warrior_cape(src) new /obj/item/crusher_trophy/gladiator(src) -#undef MAX_BERSERK_CHARGE -#undef BERSERK_HALF_CHARGE +#undef BERSERK_MAX_CHARGE #undef PROJECTILE_HIT_MULTIPLIER #undef DAMAGE_TO_CHARGE_SCALE #undef CHARGE_DRAINED_PER_SECOND diff --git a/modular_skyrat/modules/gladiator/code/modules/mob/living/simple_animal/hostile/megafauna/markedone.dm b/modular_skyrat/modules/gladiator/code/modules/mob/living/simple_animal/hostile/megafauna/markedone.dm index 7a53e1bac3c..fef369ad022 100644 --- a/modular_skyrat/modules/gladiator/code/modules/mob/living/simple_animal/hostile/megafauna/markedone.dm +++ b/modular_skyrat/modules/gladiator/code/modules/mob/living/simple_animal/hostile/megafauna/markedone.dm @@ -50,7 +50,7 @@ /// Are we doing the spin attack? var/spinning = FALSE /// Range of spin attack - var/spinning_range = 4 + var/spinning_range = 6 /// Are we doing the charge attack var/charging = FALSE /// If we are charging, this is a counter for how many tiles we have ran past @@ -60,12 +60,16 @@ /// We get stunned whenever we ram into a closed turf var/stunned = FALSE /// Move_to_delay but only while we are charging - var/move_to_delay_charge = 1.5 - /// Chance to block damage entirely on phase 1 - var/phase_1_block_chance = 50 + var/move_to_delay_charge = 0.6 + /// Chance to block damage entirely on phases 1 and 4 + var/block_chance = 50 /// This mob will not attack mobs randomly if not in anger, the time doubles as a check for anger var/anger_timer_id = null +/mob/living/simple_animal/hostile/megafauna/gladiator/Initialize(mapload) + . = ..() + ADD_TRAIT(src, TRAIT_NO_FLOATING_ANIM, INNATE_TRAIT) + /mob/living/simple_animal/hostile/megafauna/gladiator/Destroy() get_calm() return ..() @@ -103,14 +107,17 @@ . = ..() . += span_boldwarning("They are currently in Phase [phase].") -/// Gets him mad at you if you're a species he's not racist towards, and provides the 25% chance to block attacks in the first phase +/// Gets him mad at you if you're a species he's not racist towards, and provides the 50% to block attacks in the first and fourth phases /mob/living/simple_animal/hostile/megafauna/gladiator/adjustHealth(amount, updating_health, forced) get_angry() if(spinning) - visible_message(span_danger("[src] brushes off all incoming attacks with his spinning blade!")) + balloon_alert_to_viewers("damage blocked!") return FALSE - else if(prob(phase_1_block_chance) && (phase == 1) && !stunned) - visible_message(span_danger("[src] blocks all incoming damage with his arm!")) + else if(prob(block_chance) && (phase == 1) && !stunned) + balloon_alert_to_viewers("damage blocked!") + return FALSE + else if(prob(block_chance) && (phase == 4) && !stunned) + balloon_alert_to_viewers("damage blocked!") return FALSE . = ..() update_phase() @@ -199,6 +206,7 @@ if(anger_timer_id) deltimer(anger_timer_id) anger_timer_id = addtimer(CALLBACK(src, PROC_REF(get_calm)), MARKED_ONE_ANGER_DURATION, TIMER_STOPPABLE) + balloon_alert_to_viewers("angered!") /// Makes the Marked One a sleepy boy that don't wanna hurt nobody. He starts like this and progresses to his hostile state after seeing an ash walker or being punched in the noggin. /mob/living/simple_animal/hostile/megafauna/gladiator/proc/get_calm() @@ -268,7 +276,7 @@ if(phase == MARKED_ONE_FIRST_PHASE) phase = MARKED_ONE_SECOND_PHASE INVOKE_ASYNC(src, PROC_REF(charge), target, 21) - playsound(src, 'sound/effects/clockcult_gateway_disrupted.ogg', 200, 1, 2) + ranged_cooldown += 8 SECONDS //this needs to be here lest another ranged attack override the charge while it's prepping icon_state = "marked2" rapid_melee = 2 move_to_delay = 2 @@ -278,21 +286,21 @@ if(phase == MARKED_ONE_SECOND_PHASE) phase = MARKED_ONE_THIRD_PHASE INVOKE_ASYNC(src, PROC_REF(charge), target, 21) - playsound(src, 'sound/effects/clockcult_gateway_charging.ogg', 200, 1, 2) + ranged_cooldown += 8 SECONDS rapid_melee = 4 melee_damage_upper = 25 melee_damage_lower = 25 - move_to_delay = 1.7 + move_to_delay = 1.5 if(0 to SHOWDOWN_PERCENT) if (phase == MARKED_ONE_THIRD_PHASE) phase = MARKED_ONE_FINAL_PHASE INVOKE_ASYNC(src, PROC_REF(charge), target, 21) - playsound(src, 'sound/effects/clockcult_gateway_active.ogg', 200, 1, 2) + ranged_cooldown += 8 SECONDS icon_state = "marked3" rapid_melee = 1 melee_damage_upper = 50 melee_damage_lower = 50 - move_to_delay = 2.5 + move_to_delay = 1.2 if(charging) move_to_delay = move_to_delay_charge @@ -301,7 +309,18 @@ var/turf/our_turf = get_turf(src) if(!istype(our_turf)) return - visible_message(span_userdanger("[src] lifts his ancient blade, and prepares to spin!")) + var/static/list/spin_messages = list( + "Duck!", + "I'll break your legs!", + "Plain, dead, simple!", + "SWING AND A MISS!", + "Only one of us makes it outta here!", + "JUMP-ROPE!!", + "Slice and dice, right?!", + "Come on, HIT ME!", + "CLANG!!", + ) + say(message = pick(spin_messages)) spinning = TRUE animate(src, color = "#ff6666", 10) SLEEP_CHECK_DEATH(5, src) @@ -322,7 +341,7 @@ QDEL_IN(smonk, 0.5 SECONDS) for(var/mob/living/slapped in targeted) if(!faction_check(faction, slapped.faction) && !(slapped in hit_things)) - playsound(src, 'sound/weapons/slash.ogg', 75, 0) + playsound(src, 'modular_skyrat/modules/gladiator/Clang_cut.ogg', 75, 0) if(slapped.apply_damage(40, BRUTE, BODY_ZONE_CHEST, slapped.run_armor_check(BODY_ZONE_CHEST), wound_bonus = CANT_WOUND)) visible_message(span_danger("[src] slashes through [slapped] with his spinning blade!")) else @@ -333,13 +352,22 @@ break sleep(0.75) //addtimer(CALLBACK(src, PROC_REF(convince_zonespace_to_let_me_use_sleeps)), 2 WEEKS) animate(src, color = initial(color), 3) - sleep(3) + sleep(1) spinning = FALSE /// The Marked One's charge has an instant travel time, but takes a moment to power-up, allowing you to get behind cover to stun him if he hits a wall. Only ever called when a phase change occurs, as it hardstuns if it lands /mob/living/simple_animal/hostile/megafauna/gladiator/proc/charge(atom/target, range = 1) face_atom(target) - visible_message(span_userdanger("[src] lifts his arm, and prepares to charge!")) + var/static/list/charge_messages = list( + "Heads up!", + "Coming through!", + "This ends only one way!", + "Hold still!", + "GET OVER HERE!", + "Looking for this?!", + "COME ON!!", + ) + say(message = pick(charge_messages)) animate(src, color = "#ff6666", 3) SLEEP_CHECK_DEATH(4, src) face_atom(target) @@ -353,6 +381,7 @@ charging = FALSE minimum_distance = initial(minimum_distance) chargetiles = 0 + playsound(src, 'modular_skyrat/modules/gladiator/Clang_cut.ogg', 75, 0) animate(src, color = initial(color), 5) update_phase() sleep(CEILING(MARKED_ONE_STUN_DURATION * modifier, 1)) @@ -396,30 +425,25 @@ for(var/turf/stomp_turf in all_turfs) if(get_dist(origin, stomp_turf) > sound_range) continue - new /obj/effect/temp_visual/small_smoke/halfsecond(stomp_turf) for(var/mob/living/target in stomp_turf) if(target == src || target.throwing) continue - to_chat(target, span_userdanger("[src]'s ground slam shockwave sends you flying!")) var/turf/thrownat = get_ranged_target_turf_direct(src, target, throw_range, rand(-10, 10)) target.throw_at(thrownat, 8, 2, null, TRUE, force = MOVE_FORCE_OVERPOWERING, gentle = TRUE) target.apply_damage(20, BRUTE, wound_bonus=CANT_WOUND) - shake_camera(target, 2, 1) - all_turfs -= stomp_turf - sleep(delay) /// Large radius but slow-to-move radiating ground slam /mob/living/simple_animal/hostile/megafauna/gladiator/proc/swordslam() - ground_pound(5, 1 SECONDS, 8) + ground_pound(5, 0.4 SECONDS, 8) /// Sort range slam with faster shockwave travel /mob/living/simple_animal/hostile/megafauna/gladiator/proc/stomp() - ground_pound(2, 0.5 SECONDS, 3) + ground_pound(2, 0.2 SECONDS, 3) /// Used to determine what attacks the Marked One actually uses. This works by making him a ranged mob without a projectile. Shitcode? Maybe! But it woooorks. /mob/living/simple_animal/hostile/megafauna/gladiator/OpenFire() @@ -432,7 +456,6 @@ if(MARKED_ONE_FIRST_PHASE) if(prob(10) && (get_dist(src, target) <= spinning_range)) INVOKE_ASYNC(src, PROC_REF(spinattack)) - INVOKE_ASYNC(src, PROC_REF(stomp)) ranged_cooldown += 5.5 SECONDS else if(prob(50)) @@ -446,7 +469,6 @@ if(prob(80)) if(prob(50) && (get_dist(src, target) <= spinning_range)) INVOKE_ASYNC(src, PROC_REF(spinattack)) - INVOKE_ASYNC(src, PROC_REF(stomp)) ranged_cooldown += 5 SECONDS else INVOKE_ASYNC(src, PROC_REF(swordslam)) @@ -463,8 +485,7 @@ if(prob(50)) if(prob(30) && (get_dist(src, target) <= spinning_range)) INVOKE_ASYNC(src, PROC_REF(spinattack)) - INVOKE_ASYNC(src, PROC_REF(stomp)) - ranged_cooldown += 4.5 SECONDS + ranged_cooldown += 3 SECONDS else INVOKE_ASYNC(src, PROC_REF(swordslam)) ranged_cooldown += 2 SECONDS @@ -485,6 +506,7 @@ ranged_cooldown += 2 SECONDS else INVOKE_ASYNC(src, PROC_REF(swordslam)) + INVOKE_ASYNC(src, PROC_REF(stomp)) ranged_cooldown += 2 SECONDS else INVOKE_ASYNC(src, PROC_REF(bone_knife_throw), target) diff --git a/modular_skyrat/modules/goofsec/code/department_guards.dm b/modular_skyrat/modules/goofsec/code/department_guards.dm index 043986ca1c5..4e256c98545 100644 --- a/modular_skyrat/modules/goofsec/code/department_guards.dm +++ b/modular_skyrat/modules/goofsec/code/department_guards.dm @@ -159,7 +159,6 @@ total_positions = 2 spawn_positions = 2 supervisors = SUPERVISOR_RD - selection_color = "#ffeeee" exp_granted_type = EXP_TYPE_CREW config_tag = "SCIENCE_GUARD" @@ -261,7 +260,6 @@ total_positions = 2 spawn_positions = 2 supervisors = SUPERVISOR_CMO - selection_color = "#ffeeee" exp_granted_type = EXP_TYPE_CREW config_tag = "ORDERLY" @@ -359,7 +357,6 @@ total_positions = 2 spawn_positions = 2 supervisors = SUPERVISOR_CE - selection_color = "#ffeeee" exp_granted_type = EXP_TYPE_CREW config_tag = "ENGINEERING_GUARD" @@ -462,7 +459,6 @@ total_positions = 2 spawn_positions = 2 supervisors = SUPERVISOR_QM - selection_color = "#ffeeee" exp_granted_type = EXP_TYPE_CREW config_tag = "CUSTOMS_AGENT" @@ -559,7 +555,6 @@ total_positions = 2 spawn_positions = 2 supervisors = SUPERVISOR_HOP - selection_color = "#ffeeee" exp_granted_type = EXP_TYPE_CREW config_tag = "BOUNCER" diff --git a/modular_skyrat/modules/nanotrasen_rep/code/nanotrasen_consultant.dm b/modular_skyrat/modules/nanotrasen_rep/code/nanotrasen_consultant.dm index dc6cf12200b..8348599c11f 100644 --- a/modular_skyrat/modules/nanotrasen_rep/code/nanotrasen_consultant.dm +++ b/modular_skyrat/modules/nanotrasen_rep/code/nanotrasen_consultant.dm @@ -6,7 +6,6 @@ total_positions = 1 spawn_positions = 1 supervisors = "Central Command" - selection_color = "#c6ffe0" minimal_player_age = 14 exp_requirements = 600 exp_required_type = EXP_TYPE_CREW diff --git a/modular_skyrat/modules/salon/code/barber.dm b/modular_skyrat/modules/salon/code/barber.dm index 478503ae27f..66caf0bb282 100644 --- a/modular_skyrat/modules/salon/code/barber.dm +++ b/modular_skyrat/modules/salon/code/barber.dm @@ -6,7 +6,6 @@ total_positions = 2 spawn_positions = 2 supervisors = SUPERVISOR_HOP - selection_color = "#bbe291" exp_granted_type = EXP_TYPE_CREW config_tag = "BARBER" diff --git a/modular_skyrat/modules/sec_haul/code/corrections_officer/corrections_officer.dm b/modular_skyrat/modules/sec_haul/code/corrections_officer/corrections_officer.dm index ed3cd600936..ccbe7a29119 100644 --- a/modular_skyrat/modules/sec_haul/code/corrections_officer/corrections_officer.dm +++ b/modular_skyrat/modules/sec_haul/code/corrections_officer/corrections_officer.dm @@ -7,7 +7,6 @@ total_positions = 1 spawn_positions = 1 supervisors = SUPERVISOR_HOS - selection_color = "#ffeeee" minimal_player_age = 7 exp_requirements = 150 exp_required_type = EXP_TYPE_CREW diff --git a/modular_skyrat/modules/sec_haul/code/security_medic/security_medic.dm b/modular_skyrat/modules/sec_haul/code/security_medic/security_medic.dm index 951e8cc3b8b..cc505232c2d 100644 --- a/modular_skyrat/modules/sec_haul/code/security_medic/security_medic.dm +++ b/modular_skyrat/modules/sec_haul/code/security_medic/security_medic.dm @@ -7,7 +7,6 @@ total_positions = 1 spawn_positions = 1 supervisors = SUPERVISOR_HOS - selection_color = "#ffeeee" minimal_player_age = 7 exp_requirements = 120 exp_required_type = EXP_TYPE_CREW diff --git a/tgui/packages/tgui-panel/chat/middleware.js b/tgui/packages/tgui-panel/chat/middleware.js index 334c438ac0d..51ee8f1deae 100644 --- a/tgui/packages/tgui-panel/chat/middleware.js +++ b/tgui/packages/tgui-panel/chat/middleware.js @@ -6,7 +6,7 @@ import DOMPurify from 'dompurify'; import { storage } from 'common/storage'; -import { loadSettings, updateSettings } from '../settings/actions'; +import { loadSettings, updateSettings, addHighlightSetting, removeHighlightSetting, updateHighlightSetting } from '../settings/actions'; import { selectSettings } from '../settings/selectors'; import { addChatPage, changeChatPage, changeScrollTracking, loadChat, rebuildChat, removeChatPage, saveChatToDisk, toggleAcceptedType, updateMessageCount } from './actions'; import { MAX_PERSISTED_MESSAGES, MESSAGE_SAVE_INTERVAL } from './constants'; @@ -113,15 +113,21 @@ export const chatMiddleware = (store) => { chatRenderer.rebuildChat(); return next(action); } - if (type === updateSettings.type || type === loadSettings.type) { + + if ( + type === updateSettings.type || + type === loadSettings.type || + type === addHighlightSetting.type || + type === removeHighlightSetting.type || + type === updateHighlightSetting.type + ) { next(action); const settings = selectSettings(store.getState()); chatRenderer.setHighlight( - settings.highlightText, - settings.highlightColor, - settings.matchWord, - settings.matchCase + settings.highlightSettings, + settings.highlightSettingById ); + return; } if (type === 'roundrestart') { diff --git a/tgui/packages/tgui-panel/chat/renderer.js b/tgui/packages/tgui-panel/chat/renderer.js index 3f841802e6e..f7ce9277cf6 100644 --- a/tgui/packages/tgui-panel/chat/renderer.js +++ b/tgui/packages/tgui-panel/chat/renderer.js @@ -180,30 +180,79 @@ class ChatRenderer { } } - setHighlight(text, color, matchWord, matchCase) { - if (!text || !color) { - this.highlightRegex = null; - this.highlightColor = null; + setHighlight(highlightSettings, highlightSettingById) { + this.highlightParsers = null; + if (!highlightSettings) { return; } - const lines = String(text) - .split(',') - // eslint-disable-next-line no-useless-escape - .map((str) => str.trim().replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&')) - // Must be longer than one character - .filter((str) => str && str.length > 1); - // Nothing to match, reset highlighting - if (lines.length === 0) { - this.highlightRegex = null; - this.highlightColor = null; - return; - } - const pattern = `${matchWord ? '\\b' : ''}(${lines.join('|')})${ - matchWord ? '\\b' : '' - }`; - const flags = 'g' + (matchCase ? '' : 'i'); - this.highlightRegex = new RegExp(pattern, flags); - this.highlightColor = color; + highlightSettings.map((id) => { + const setting = highlightSettingById[id]; + const text = setting.highlightText; + const highlightColor = setting.highlightColor; + const highlightWholeMessage = setting.highlightWholeMessage; + const matchWord = setting.matchWord; + const matchCase = setting.matchCase; + const allowedRegex = /^[a-z0-9_\-$/^[\s\]\\]+$/gi; + const lines = String(text) + .split(',') + .map((str) => str.trim()) + .filter( + (str) => + // Must be longer than one character + str && + str.length > 1 && + // Must be alphanumeric (with some punctuation) + allowedRegex.test(str) && + // Reset lastIndex so it does not mess up the next word + ((allowedRegex.lastIndex = 0) || true) + ); + let highlightWords; + let highlightRegex; + // Nothing to match, reset highlighting + if (lines.length === 0) { + return; + } + let regexExpressions = []; + // Organize each highlight entry into regex expressions and words + for (let line of lines) { + // Regex expression syntax is /[exp]/ + if (line.charAt(0) === '/' && line.charAt(line.length - 1) === '/') { + const expr = line.substring(1, line.length - 1); + // Check if this is more than one character + if (/^(\[.*\]|\\.|.)$/.test(expr)) { + continue; + } + regexExpressions.push(expr); + } else { + // Lazy init + if (!highlightWords) { + highlightWords = []; + } + highlightWords.push(line); + } + } + const regexStr = regexExpressions.join('|'); + const flags = 'g' + (matchCase ? '' : 'i'); + // setting regex overrides matchword + if (regexStr) { + highlightRegex = new RegExp('(' + regexStr + ')', flags); + } else { + const pattern = `${matchWord ? '\\b' : ''}(${lines.join('|')})${ + matchWord ? '\\b' : '' + }`; + highlightRegex = new RegExp(pattern, flags); + } + // Lazy init + if (!this.highlightParsers) { + this.highlightParsers = []; + } + this.highlightParsers.push({ + highlightWords, + highlightRegex, + highlightColor, + highlightWholeMessage, + }); + }); } scrollToBottom() { @@ -352,13 +401,18 @@ class ChatRenderer { } // Highlight text - if (!message.avoidHighlighting && this.highlightRegex) { - const highlighted = highlightNode(node, this.highlightRegex, (text) => - createHighlightNode(text, this.highlightColor) - ); - if (highlighted) { - node.className += ' ChatMessage--highlighted'; - } + if (!message.avoidHighlighting && this.highlightParsers) { + this.highlightParsers.map((parser) => { + const highlighted = highlightNode( + node, + parser.highlightRegex, + parser.highlightWords, + (text) => createHighlightNode(text, parser.highlightColor) + ); + if (highlighted && parser.highlightWholeMessage) { + node.className += ' ChatMessage--highlighted'; + } + }); } // Linkify text const linkifyNodes = node.querySelectorAll('.linkify'); diff --git a/tgui/packages/tgui-panel/chat/replaceInTextNode.js b/tgui/packages/tgui-panel/chat/replaceInTextNode.js index 668017f60f2..753997b3b82 100644 --- a/tgui/packages/tgui-panel/chat/replaceInTextNode.js +++ b/tgui/packages/tgui-panel/chat/replaceInTextNode.js @@ -7,43 +7,120 @@ /** * Replaces text matching a regular expression with a custom node. */ -export const replaceInTextNode = (regex, createNode) => (node) => { +const regexParseNode = (params) => { + const { node, regex, createNode, captureAdjust } = params; const text = node.textContent; const textLength = text.length; + let nodes; + let new_node; let match; let lastIndex = 0; let fragment; let n = 0; + let count = 0; // eslint-disable-next-line no-cond-assign while ((match = regex.exec(text))) { n += 1; + // Safety check to prevent permanent + // client crashing + if (++count > 9999) { + return {}; + } // Lazy init fragment if (!fragment) { fragment = document.createDocumentFragment(); } - const matchText = match[0]; + // Lazy init nodes + if (!nodes) { + nodes = []; + } + const matchText = captureAdjust ? captureAdjust(match[0]) : match[0]; const matchLength = matchText.length; - const matchIndex = match.index; + // If matchText is set to be a substring nested within the original + // matched text make sure to properly offset the index + const matchIndex = match.index + match[0].indexOf(matchText); // Insert previous unmatched chunk if (lastIndex < matchIndex) { - fragment.appendChild( - document.createTextNode(text.substring(lastIndex, matchIndex)) - ); + new_node = document.createTextNode(text.substring(lastIndex, matchIndex)); + nodes.push(new_node); + fragment.appendChild(new_node); } lastIndex = matchIndex + matchLength; // Create a wrapper node - fragment.appendChild(createNode(matchText)); + new_node = createNode(matchText); + nodes.push(new_node); + fragment.appendChild(new_node); } if (fragment) { // Insert the remaining unmatched chunk if (lastIndex < textLength) { - fragment.appendChild( - document.createTextNode(text.substring(lastIndex, textLength)) - ); + new_node = document.createTextNode(text.substring(lastIndex, textLength)); + nodes.push(new_node); + fragment.appendChild(new_node); } // Commit the fragment node.parentNode.replaceChild(fragment, node); } + + return { + nodes: nodes, + n: n, + }; +}; + +/** + * Replace text of a node with custom nades if they match + * a regex expression or are in a word list + */ +export const replaceInTextNode = (regex, words, createNode) => (node) => { + let nodes; + let result; + let n = 0; + + if (regex) { + result = regexParseNode({ + node: node, + regex: regex, + createNode: createNode, + }); + nodes = result.nodes; + n += result.n; + } + + if (words) { + let i = 0; + let wordRegexStr = '('; + for (let word of words) { + // Capture if the word is at the beginning, end, middle, + // or by itself in a message + wordRegexStr += `^${word}\\W|\\W${word}\\W|\\W${word}$|^${word}$`; + // Make sure the last character for the expression is NOT '|' + if (++i !== words.length) { + wordRegexStr += '|'; + } + } + wordRegexStr += ')'; + const wordRegex = new RegExp(wordRegexStr, 'gi'); + if (regex && nodes) { + for (let a_node of nodes) { + result = regexParseNode({ + node: a_node, + regex: wordRegex, + createNode: createNode, + captureAdjust: (str) => str.replace(/^\W|\W$/g, ''), + }); + n += result.n; + } + } else { + result = regexParseNode({ + node: node, + regex: wordRegex, + createNode: createNode, + captureAdjust: (str) => str.replace(/^\W|\W$/g, ''), + }); + n += result.n; + } + } return n; }; @@ -71,6 +148,7 @@ const createHighlightNode = (text) => { export const highlightNode = ( node, regex, + words, createNode = createHighlightNode ) => { if (!createNode) { @@ -82,9 +160,9 @@ export const highlightNode = ( const node = childNodes[i]; // Is a text node if (node.nodeType === 3) { - n += replaceInTextNode(regex, createNode)(node); + n += replaceInTextNode(regex, words, createNode)(node); } else { - n += highlightNode(node, regex, createNode); + n += highlightNode(node, regex, words, createNode); } } return n; @@ -118,7 +196,7 @@ export const linkifyNode = (node) => { return n; }; -const linkifyTextNode = replaceInTextNode(URL_REGEX, (text) => { +const linkifyTextNode = replaceInTextNode(URL_REGEX, null, (text) => { const node = document.createElement('a'); node.href = text; node.textContent = text; diff --git a/tgui/packages/tgui-panel/settings/SettingsPanel.js b/tgui/packages/tgui-panel/settings/SettingsPanel.js index d449fd3e7a6..90abe4e36b2 100644 --- a/tgui/packages/tgui-panel/settings/SettingsPanel.js +++ b/tgui/packages/tgui-panel/settings/SettingsPanel.js @@ -11,9 +11,9 @@ import { Box, Button, ColorBox, Divider, Dropdown, Flex, Input, LabeledList, Num import { ChatPageSettings } from '../chat'; import { rebuildChat, saveChatToDisk } from '../chat/actions'; import { THEMES } from '../themes'; -import { changeSettingsTab, updateSettings } from './actions'; -import { FONTS, SETTINGS_TABS } from './constants'; -import { selectActiveTab, selectSettings } from './selectors'; +import { changeSettingsTab, updateSettings, addHighlightSetting, removeHighlightSetting, updateHighlightSetting } from './actions'; +import { SETTINGS_TABS, FONTS, MAX_HIGHLIGHT_SETTINGS } from './constants'; +import { selectActiveTab, selectSettings, selectHighlightSettings, selectHighlightSettingById } from './selectors'; export const SettingsPanel = (props, context) => { const activeTab = useSelector(context, selectActiveTab); @@ -43,22 +43,17 @@ export const SettingsPanel = (props, context) => { {activeTab === 'general' && } {activeTab === 'chatPage' && } + {activeTab === 'textHighlight' && } ); }; export const SettingsGeneral = (props, context) => { - const { - theme, - fontFamily, - fontSize, - lineHeight, - highlightText, - highlightColor, - matchWord, - matchCase, - } = useSelector(context, selectSettings); + const { theme, fontFamily, fontSize, lineHeight } = useSelector( + context, + selectSettings + ); const dispatch = useDispatch(context); const [freeFont, setFreeFont] = useLocalState(context, 'freeFont', false); return ( @@ -157,62 +152,41 @@ export const SettingsGeneral = (props, context) => { - - - Highlight text (comma separated): - - - - dispatch( - updateSettings({ - highlightColor: value, - }) - ) - } + + + ); +}; + +const TextHighlightSettings = (props, context) => { + const highlightSettings = useSelector(context, selectHighlightSettings); + const dispatch = useDispatch(context); + return ( +
+
+ + {highlightSettings.map((id, i) => ( + - + ))} + {highlightSettings.length < MAX_HIGHLIGHT_SETTINGS && ( + +