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 && (
+
+
+ )}
-
+
-
-
);
};
+
+const TextHighlightSetting = (props, context) => {
+ const { id, ...rest } = props;
+ const highlightSettingById = useSelector(context, selectHighlightSettingById);
+ const dispatch = useDispatch(context);
+ const {
+ highlightColor,
+ highlightText,
+ highlightWholeMessage,
+ matchWord,
+ matchCase,
+ } = highlightSettingById[id];
+ return (
+
+
+
+
+
+
+ dispatch(
+ updateHighlightSetting({
+ id: id,
+ highlightWholeMessage: !highlightWholeMessage,
+ })
+ )
+ }
+ />
+
+
+
+ dispatch(
+ updateHighlightSetting({
+ id: id,
+ matchWord: !matchWord,
+ })
+ )
+ }
+ />
+
+
+
+ dispatch(
+ updateHighlightSetting({
+ id: id,
+ matchCase: !matchCase,
+ })
+ )
+ }
+ />
+
+
+
+
+ dispatch(
+ updateHighlightSetting({
+ id: id,
+ highlightColor: value,
+ })
+ )
+ }
+ />
+
+
+
+ );
+};
diff --git a/tgui/packages/tgui-panel/settings/actions.js b/tgui/packages/tgui-panel/settings/actions.js
index df20ad5611a..1550bef80ba 100644
--- a/tgui/packages/tgui-panel/settings/actions.js
+++ b/tgui/packages/tgui-panel/settings/actions.js
@@ -5,9 +5,22 @@
*/
import { createAction } from 'common/redux';
+import { createHighlightSetting } from './model';
export const updateSettings = createAction('settings/update');
export const loadSettings = createAction('settings/load');
export const changeSettingsTab = createAction('settings/changeTab');
export const toggleSettings = createAction('settings/toggle');
export const openChatSettings = createAction('settings/openChatTab');
+export const addHighlightSetting = createAction(
+ 'settings/addHighlightSetting',
+ () => ({
+ payload: createHighlightSetting(),
+ })
+);
+export const removeHighlightSetting = createAction(
+ 'settings/removeHighlightSetting'
+);
+export const updateHighlightSetting = createAction(
+ 'settings/updateHighlightSetting'
+);
diff --git a/tgui/packages/tgui-panel/settings/constants.js b/tgui/packages/tgui-panel/settings/constants.js
index 4d7e17860c2..86ac41a23eb 100644
--- a/tgui/packages/tgui-panel/settings/constants.js
+++ b/tgui/packages/tgui-panel/settings/constants.js
@@ -9,6 +9,11 @@ export const SETTINGS_TABS = [
id: 'general',
name: 'General',
},
+
+ {
+ id: 'textHighlight',
+ name: 'Text Highlights',
+ },
{
id: 'chatPage',
name: 'Chat Tabs',
@@ -30,3 +35,5 @@ export const FONTS = [
'Courier New',
'Lucida Console',
];
+
+export const MAX_HIGHLIGHT_SETTINGS = 10;
diff --git a/tgui/packages/tgui-panel/settings/middleware.js b/tgui/packages/tgui-panel/settings/middleware.js
index 0adecf7042c..705d7a89f3b 100644
--- a/tgui/packages/tgui-panel/settings/middleware.js
+++ b/tgui/packages/tgui-panel/settings/middleware.js
@@ -6,7 +6,7 @@
import { storage } from 'common/storage';
import { setClientTheme } from '../themes';
-import { loadSettings, updateSettings } from './actions';
+import { loadSettings, updateSettings, addHighlightSetting, removeHighlightSetting, updateHighlightSetting } from './actions';
import { selectSettings } from './selectors';
import { FONTS_DISABLED } from './constants';
@@ -32,7 +32,13 @@ export const settingsMiddleware = (store) => {
store.dispatch(loadSettings(settings));
});
}
- if (type === updateSettings.type || type === loadSettings.type) {
+ if (
+ type === updateSettings.type ||
+ type === loadSettings.type ||
+ type === addHighlightSetting.type ||
+ type === removeHighlightSetting.type ||
+ type === updateHighlightSetting.type
+ ) {
// Set client theme
const theme = payload?.theme;
if (theme) {
diff --git a/tgui/packages/tgui-panel/settings/model.js b/tgui/packages/tgui-panel/settings/model.js
new file mode 100644
index 00000000000..b98d0d4fb6f
--- /dev/null
+++ b/tgui/packages/tgui-panel/settings/model.js
@@ -0,0 +1,20 @@
+/**
+ * @file
+ */
+import { createUuid } from 'common/uuid';
+
+export const createHighlightSetting = (obj) => ({
+ id: createUuid(),
+ highlightText: '',
+ highlightColor: '#ffdd44',
+ highlightWholeMessage: true,
+ matchWord: false,
+ matchCase: false,
+ ...obj,
+});
+
+export const createDefaultHighlightSetting = (obj) =>
+ createHighlightSetting({
+ id: 'default',
+ ...obj,
+ });
diff --git a/tgui/packages/tgui-panel/settings/reducer.js b/tgui/packages/tgui-panel/settings/reducer.js
index de052ad2a88..42d799fd659 100644
--- a/tgui/packages/tgui-panel/settings/reducer.js
+++ b/tgui/packages/tgui-panel/settings/reducer.js
@@ -4,8 +4,11 @@
* @license MIT
*/
-import { changeSettingsTab, loadSettings, openChatSettings, toggleSettings, updateSettings } from './actions';
-import { FONTS, SETTINGS_TABS } from './constants';
+import { changeSettingsTab, loadSettings, openChatSettings, toggleSettings, updateSettings, addHighlightSetting, removeHighlightSetting, updateHighlightSetting } from './actions';
+import { createDefaultHighlightSetting } from './model';
+import { SETTINGS_TABS, FONTS, MAX_HIGHLIGHT_SETTINGS } from './constants';
+
+const defaultHighlightSetting = createDefaultHighlightSetting();
const initialState = {
version: 1,
@@ -14,10 +17,14 @@ const initialState = {
lineHeight: 1.2,
theme: 'light',
adminMusicVolume: 0.5,
+ // Keep these two state vars for compatibility with other servers
highlightText: '',
highlightColor: '#ffdd44',
- matchWord: false,
- matchCase: false,
+ // END compatibility state vars
+ highlightSettings: [defaultHighlightSetting.id],
+ highlightSettingById: {
+ [defaultHighlightSetting.id]: defaultHighlightSetting,
+ },
view: {
visible: false,
activeTab: SETTINGS_TABS[0].id,
@@ -37,11 +44,34 @@ export const settingsReducer = (state = initialState, action) => {
if (!payload?.version) {
return state;
}
+
delete payload.view;
- return {
+ const nextState = {
...state,
...payload,
};
+ // Lazy init the list for compatibility reasons
+ if (!nextState.highlightSettings) {
+ nextState.highlightSettings = [defaultHighlightSetting.id];
+ nextState.highlightSettingById[defaultHighlightSetting.id] =
+ defaultHighlightSetting;
+ }
+ // Compensating for mishandling of default highlight settings
+ else if (!nextState.highlightSettingById[defaultHighlightSetting.id]) {
+ nextState.highlightSettings = [
+ defaultHighlightSetting.id,
+ ...nextState.highlightSettings,
+ ];
+ nextState.highlightSettingById[defaultHighlightSetting.id] =
+ defaultHighlightSetting;
+ }
+ // Update the highlight settings for default highlight
+ // settings compatibility
+ const highlightSetting =
+ nextState.highlightSettingById[defaultHighlightSetting.id];
+ highlightSetting.highlightColor = nextState.highlightColor;
+ highlightSetting.highlightText = nextState.highlightText;
+ return nextState;
}
if (type === toggleSettings.type) {
return {
@@ -72,5 +102,74 @@ export const settingsReducer = (state = initialState, action) => {
},
};
}
+ if (type === addHighlightSetting.type) {
+ const highlightSetting = payload;
+ if (state.highlightSettings.length >= MAX_HIGHLIGHT_SETTINGS) {
+ return state;
+ }
+ return {
+ ...state,
+ highlightSettings: [...state.highlightSettings, highlightSetting.id],
+ highlightSettingById: {
+ ...state.highlightSettingById,
+ [highlightSetting.id]: highlightSetting,
+ },
+ };
+ }
+ if (type === removeHighlightSetting.type) {
+ const { id } = payload;
+ const nextState = {
+ ...state,
+ highlightSettings: [...state.highlightSettings],
+ highlightSettingById: {
+ ...state.highlightSettingById,
+ },
+ };
+ if (id === defaultHighlightSetting.id) {
+ nextState.highlightSettings[defaultHighlightSetting.id] =
+ defaultHighlightSetting;
+ } else {
+ delete nextState.highlightSettingById[id];
+ nextState.highlightSettings = nextState.highlightSettings.filter(
+ (sid) => sid !== id
+ );
+ if (!nextState.highlightSettings.length) {
+ nextState.highlightSettings.push(defaultHighlightSetting.id);
+ nextState.highlightSettingById[defaultHighlightSetting.id] =
+ defaultHighlightSetting;
+ }
+ }
+ return nextState;
+ }
+ if (type === updateHighlightSetting.type) {
+ const { id, ...settings } = payload;
+ const nextState = {
+ ...state,
+ highlightSettings: [...state.highlightSettings],
+ highlightSettingById: {
+ ...state.highlightSettingById,
+ },
+ };
+
+ // Transfer this data from the default highlight setting
+ // so they carry over to other servers
+ if (id === defaultHighlightSetting.id) {
+ if (settings.highlightText) {
+ nextState.highlightText = settings.highlightText;
+ }
+ if (settings.highlightColor) {
+ nextState.highlightColor = settings.highlightColor;
+ }
+ }
+
+ if (nextState.highlightSettingById[id]) {
+ nextState.highlightSettingById[id] = {
+ ...nextState.highlightSettingById[id],
+ ...settings,
+ };
+ }
+
+ return nextState;
+ }
return state;
};
diff --git a/tgui/packages/tgui-panel/settings/selectors.js b/tgui/packages/tgui-panel/settings/selectors.js
index 6b5ca76bff0..75f9ecb4988 100644
--- a/tgui/packages/tgui-panel/settings/selectors.js
+++ b/tgui/packages/tgui-panel/settings/selectors.js
@@ -6,3 +6,7 @@
export const selectSettings = (state) => state.settings;
export const selectActiveTab = (state) => state.settings.view.activeTab;
+export const selectHighlightSettings = (state) =>
+ state.settings.highlightSettings;
+export const selectHighlightSettingById = (state) =>
+ state.settings.highlightSettingById;