diff --git a/_maps/map_files/KiloStation/KiloStation.dmm b/_maps/map_files/KiloStation/KiloStation.dmm
index b9b7c55fb0a7..7849f9737e50 100644
--- a/_maps/map_files/KiloStation/KiloStation.dmm
+++ b/_maps/map_files/KiloStation/KiloStation.dmm
@@ -1853,18 +1853,6 @@
/obj/machinery/camera/directional/north,
/turf/open/floor/iron,
/area/station/commons/fitness/recreation)
-"aDx" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/navbeacon{
- codes_txt = "patrol;next_patrol=HOP";
- location = "Security";
- name = "security navigation beacon"
- },
-/obj/structure/cable,
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/turf/open/floor/iron,
-/area/station/security/brig)
"aDF" = (
/obj/structure/table,
/obj/effect/decal/cleanable/dirt,
@@ -31589,12 +31577,6 @@
},
/area/station/service/chapel)
"jIX" = (
-/obj/item/radio/intercom/directional/west{
- freerange = 1;
- listening = 0;
- name = "Common Channel";
- pixel_y = 4
- },
/obj/item/radio/intercom/directional/north{
freerange = 1;
listening = 0;
@@ -31619,6 +31601,13 @@
pixel_x = -24;
req_access = list("ai_upload")
},
+/obj/item/radio/intercom/directional/west{
+ freerange = 1;
+ frequency = 1447;
+ name = "Private Channel";
+ pixel_y = 4;
+ listening = 0
+ },
/turf/open/floor/circuit/red,
/area/station/ai_monitored/turret_protected/ai)
"jJd" = (
@@ -69231,6 +69220,15 @@
/obj/machinery/status_display/evac/directional/west,
/turf/open/floor/iron/dark,
/area/station/medical/treatment_center)
+"vHR" = (
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/obj/machinery/navbeacon{
+ codes_txt = "patrol;next_patrol=HOP";
+ location = "Security";
+ name = "security navigation beacon"
+ },
+/turf/open/floor/iron,
+/area/station/security/brig)
"vHS" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -102209,7 +102207,7 @@ hyc
ihl
hyc
pUa
-aDx
+dZA
qOC
lNf
eHH
@@ -104008,7 +104006,7 @@ ych
ych
ych
vVt
-aOe
+vHR
sQa
cfL
pRP
diff --git a/_maps/map_files/Voidraptor/VoidRaptor.dmm b/_maps/map_files/Voidraptor/VoidRaptor.dmm
index 9f73b5cde1be..80008621a472 100644
--- a/_maps/map_files/Voidraptor/VoidRaptor.dmm
+++ b/_maps/map_files/Voidraptor/VoidRaptor.dmm
@@ -1426,7 +1426,7 @@
},
/obj/effect/turf_decal/bot,
/turf/open/floor/iron/white,
-/area/station/medical/virology)
+/area/station/medical/pathology)
"aub" = (
/obj/structure/reagent_dispensers/water_cooler,
/obj/effect/turf_decal/siding/wood{
@@ -1653,7 +1653,7 @@
dir = 4
},
/turf/open/floor/catwalk_floor/iron_smooth,
-/area/station/medical/pharmacy)
+/area/station/maintenance/department/medical/central)
"axY" = (
/obj/structure/dresser,
/obj/item/toy/figure/cmo{
@@ -1980,7 +1980,7 @@
name = "Cell 6"
},
/turf/open/floor/iron/dark/textured_large,
-/area/station/security/prison)
+/area/station/security/prison/safe)
"aBX" = (
/obj/effect/decal/cleanable/dirt,
/obj/item/screwdriver,
@@ -2351,7 +2351,7 @@
pixel_y = 24
},
/turf/open/floor/iron/dark/textured,
-/area/station/security/prison)
+/area/station/security/prison/safe)
"aJr" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -2915,7 +2915,7 @@
/turf/open/floor/iron/white/textured_corner{
dir = 8
},
-/area/station/medical/virology)
+/area/station/medical/pathology)
"aQv" = (
/obj/machinery/door/airlock/maintenance{
name = "Commissary Maintenance"
@@ -3398,7 +3398,7 @@
},
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/catwalk_floor/iron_smooth,
-/area/station/medical/medbay/central)
+/area/station/maintenance/department/medical/central)
"aWH" = (
/obj/effect/spawner/random/structure/crate,
/turf/open/floor/iron/textured,
@@ -4378,7 +4378,7 @@
},
/obj/machinery/light/small/directional/north,
/turf/open/floor/iron/textured,
-/area/station/medical/virology)
+/area/station/medical/pathology)
"bmG" = (
/obj/effect/turf_decal/trimline/purple/filled/line{
dir = 9
@@ -4818,7 +4818,7 @@
dir = 8
},
/turf/open/floor/iron/white/herringbone,
-/area/station/medical/virology)
+/area/station/medical/pathology)
"btZ" = (
/obj/machinery/firealarm/directional/south,
/obj/machinery/light_switch/directional/south{
@@ -5015,13 +5015,38 @@
},
/area/station/hallway/primary/central/aft)
"bvV" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/trimline/dark_green/line{
+ dir = 8
+ },
+/obj/structure/closet/secure_closet/wall/directional/west{
+ name = "Pathologist Equipment"
+ },
+/obj/item/clothing/glasses/science,
+/obj/item/clothing/glasses/science,
+/obj/item/clothing/glasses/science,
+/obj/item/clothing/gloves/latex,
+/obj/item/clothing/gloves/latex,
+/obj/item/clothing/gloves/latex,
+/obj/item/healthanalyzer,
+/obj/item/healthanalyzer,
+/obj/item/healthanalyzer,
+/obj/item/reagent_containers/cup/tube,
+/obj/item/reagent_containers/cup/tube,
+/obj/item/reagent_containers/cup/tube,
+/obj/item/reagent_containers/cup/tube,
+/obj/item/reagent_containers/cup/tube,
+/obj/item/reagent_containers/cup/tube,
+/obj/item/device/antibody_scanner,
+/obj/item/device/antibody_scanner,
+/obj/item/device/antibody_scanner,
/obj/effect/turf_decal/trimline/dark_green/filled/line{
dir = 9
},
-/obj/machinery/firealarm/directional/north,
-/obj/structure/closet/l3closet/virology,
+/obj/machinery/light/directional/north,
/turf/open/floor/iron/white,
-/area/station/medical/virology)
+/area/station/medical/pathology)
"bws" = (
/obj/structure/table,
/obj/item/storage/bag/egg,
@@ -5459,7 +5484,7 @@
/turf/open/floor/iron/white/textured_edge{
dir = 8
},
-/area/station/medical/virology)
+/area/station/medical/pathology)
"bCE" = (
/obj/effect/turf_decal/trimline/red/filled/line{
dir = 1
@@ -5652,7 +5677,7 @@
/obj/item/reagent_containers/cup/tube,
/obj/item/reagent_containers/cup/tube,
/turf/open/floor/iron/white/textured_large,
-/area/station/medical/virology)
+/area/station/medical/pathology)
"bGZ" = (
/obj/structure/showcase/machinery/signal_decrypter,
/obj/machinery/power/apc/auto_name/directional/north,
@@ -5868,7 +5893,7 @@
dir = 10
},
/turf/open/floor/catwalk_floor/iron_smooth,
-/area/station/medical/virology)
+/area/station/medical/pathology)
"bKX" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -6017,7 +6042,7 @@
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
/obj/effect/turf_decal/box/blue,
/turf/open/floor/iron/white/herringbone,
-/area/station/medical/virology)
+/area/station/medical/pathology)
"bNu" = (
/obj/structure/chair/sofa/left/brown{
dir = 4
@@ -6255,7 +6280,7 @@
/turf/open/floor/iron/white/textured_corner{
dir = 8
},
-/area/station/medical/virology)
+/area/station/medical/pathology)
"bQF" = (
/turf/open/floor/iron/textured,
/area/station/maintenance/department/science/ordnance_maint)
@@ -7513,7 +7538,7 @@
req_access = list("pathology")
},
/turf/open/floor/grass,
-/area/station/medical/virology)
+/area/station/medical/pathology)
"cmW" = (
/obj/effect/turf_decal/tile/brown/anticorner{
dir = 1
@@ -7732,7 +7757,7 @@
/obj/structure/flora/bush/large,
/obj/machinery/status_display/ai/directional/north,
/turf/open/floor/grass,
-/area/station/medical/virology)
+/area/station/medical/pathology)
"cqn" = (
/obj/item/toy/basketball,
/obj/effect/turf_decal/trimline/blue/line{
@@ -7780,7 +7805,7 @@
name = "Air to Distro"
},
/turf/open/floor/iron/textured,
-/area/station/medical/virology)
+/area/station/medical/pathology)
"cqB" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -8972,7 +8997,7 @@
/turf/open/floor/iron/white/textured_edge{
dir = 8
},
-/area/station/medical/virology)
+/area/station/medical/pathology)
"cIE" = (
/obj/effect/turf_decal/trimline/brown/filled/warning{
dir = 1
@@ -9031,7 +9056,7 @@
/turf/open/floor/iron/white/textured_edge{
dir = 1
},
-/area/station/medical/virology)
+/area/station/medical/pathology)
"cJm" = (
/obj/effect/decal/cleanable/dirt,
/obj/item/stack/sheet/cardboard,
@@ -9315,7 +9340,7 @@
dir = 4
},
/turf/open/floor/catwalk_floor/iron_smooth,
-/area/station/medical/medbay/central)
+/area/station/maintenance/department/medical/central)
"cOs" = (
/obj/machinery/door/airlock/grunge{
name = "Chapel Office"
@@ -9374,7 +9399,7 @@
},
/obj/effect/turf_decal/tile/dark_green/diagonal_centre,
/turf/open/floor/iron/white/diagonal,
-/area/station/medical/virology)
+/area/station/medical/pathology)
"cPv" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -9394,14 +9419,14 @@
/turf/open/floor/iron/white/textured_large,
/area/station/commons/fitness/recreation/entertainment)
"cPF" = (
-/obj/structure/closet/l3closet,
/obj/effect/turf_decal/stripes/line{
dir = 6
},
/obj/machinery/airalarm/directional/south,
/obj/effect/turf_decal/tile/dark_green/diagonal_centre,
+/obj/structure/closet/l3closet/virology,
/turf/open/floor/iron/white/diagonal,
-/area/station/medical/virology)
+/area/station/medical/pathology)
"cPN" = (
/obj/effect/turf_decal/trimline/purple/filled/line{
dir = 4
@@ -10845,7 +10870,7 @@
/turf/open/floor/iron/grimy,
/area/station/service/chapel)
"dkF" = (
-/obj/machinery/portable_atmospherics/canister/carbon_dioxide,
+/obj/machinery/atmospherics/miner/carbon_dioxide,
/turf/open/floor/engine/co2,
/area/station/engineering/atmos)
"dkR" = (
@@ -11833,7 +11858,7 @@
dir = 4
},
/turf/open/floor/plating,
-/area/station/medical/virology)
+/area/station/medical/pathology)
"dzk" = (
/obj/effect/turf_decal/trimline/blue/filled/line{
dir = 5
@@ -12047,7 +12072,7 @@
},
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
/turf/open/floor/grass,
-/area/station/medical/virology)
+/area/station/medical/pathology)
"dBK" = (
/obj/structure/railing,
/obj/structure/flora/grass/jungle,
@@ -12394,7 +12419,7 @@
dir = 9
},
/turf/open/floor/iron/dark/textured,
-/area/station/security/prison)
+/area/station/security/prison/safe)
"dGO" = (
/obj/structure/bookcase/random/nonfiction,
/obj/effect/turf_decal/siding/wood,
@@ -13186,7 +13211,7 @@
dir = 4
},
/turf/open/floor/iron/white/textured_large,
-/area/station/medical/virology)
+/area/station/medical/pathology)
"dQE" = (
/obj/effect/turf_decal/trimline/green/filled/line,
/obj/machinery/airalarm/directional/south,
@@ -13214,7 +13239,7 @@
/turf/open/floor/iron/white/textured_edge{
dir = 8
},
-/area/station/medical/virology)
+/area/station/medical/pathology)
"dQX" = (
/obj/structure/toilet/greyscale{
dir = 4
@@ -13225,7 +13250,7 @@
dir = 9
},
/turf/open/floor/iron/dark/textured,
-/area/station/security/prison)
+/area/station/security/prison/safe)
"dRs" = (
/obj/structure/disposalpipe/junction/yjunction,
/turf/open/floor/iron/white/textured_large,
@@ -13767,7 +13792,7 @@
name = "curtain"
},
/turf/open/floor/plating,
-/area/station/security/prison)
+/area/station/security/prison/safe)
"dYG" = (
/obj/machinery/airalarm/directional/west,
/obj/effect/turf_decal/trimline/neutral/filled/line{
@@ -14275,7 +14300,7 @@
name = "curtain"
},
/turf/open/floor/plating,
-/area/station/security/prison)
+/area/station/security/prison/safe)
"efl" = (
/obj/machinery/vending/coffee,
/obj/effect/turf_decal/trimline/blue/filled/line{
@@ -15911,7 +15936,7 @@
/obj/effect/turf_decal/delivery,
/obj/machinery/space_heater,
/turf/open/floor/iron/textured,
-/area/station/medical/medbay/central)
+/area/station/maintenance/department/medical/central)
"eDN" = (
/obj/structure/chair/sofa/bench/right,
/obj/effect/turf_decal/siding/wood{
@@ -19568,7 +19593,7 @@
name = "Cell 3"
},
/turf/open/floor/iron/dark/textured_large,
-/area/station/security/prison)
+/area/station/security/prison/safe)
"fJT" = (
/obj/structure/railing,
/obj/structure/flora/grass/jungle,
@@ -19821,7 +19846,7 @@
dir = 10
},
/turf/open/floor/iron/white,
-/area/station/medical/virology)
+/area/station/medical/pathology)
"fOm" = (
/obj/effect/turf_decal/trimline/brown/filled/corner,
/obj/structure/disposalpipe/segment{
@@ -19850,7 +19875,7 @@
"fOv" = (
/obj/structure/trash_pile,
/turf/open/floor/iron/textured,
-/area/station/medical/medbay/central)
+/area/station/maintenance/department/medical/central)
"fOR" = (
/obj/machinery/camera/directional/south{
c_tag = "Bridge - Captain's Quarters";
@@ -20281,7 +20306,7 @@
/obj/machinery/duct,
/obj/structure/disposalpipe/segment,
/turf/open/floor/iron/white,
-/area/station/medical/virology)
+/area/station/medical/pathology)
"fVF" = (
/obj/structure/chair{
dir = 4
@@ -20414,7 +20439,7 @@
dir = 4
},
/turf/open/floor/iron/white/textured_large,
-/area/station/medical/virology)
+/area/station/medical/pathology)
"fXv" = (
/obj/effect/landmark/start/detective,
/turf/open/floor/carpet,
@@ -20536,7 +20561,7 @@
pixel_y = 7
},
/turf/open/floor/iron/white,
-/area/station/medical/virology)
+/area/station/medical/pathology)
"fZt" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/carpet,
@@ -20797,7 +20822,7 @@
/turf/open/floor/iron/white/textured_edge{
dir = 8
},
-/area/station/medical/virology)
+/area/station/medical/pathology)
"gdS" = (
/obj/machinery/door/firedoor,
/obj/structure/cable,
@@ -21503,6 +21528,10 @@
/area/station/science/research)
"glS" = (
/obj/structure/rack,
+/obj/item/analyzer{
+ pixel_x = 7;
+ pixel_y = 3
+ },
/obj/item/pipe_dispenser,
/obj/item/clothing/glasses/meson/engine,
/obj/effect/turf_decal/stripes/line{
@@ -22138,7 +22167,7 @@
/turf/open/floor/iron/white/textured_edge{
dir = 4
},
-/area/station/medical/virology)
+/area/station/medical/pathology)
"gvG" = (
/turf/open/floor/engine,
/area/station/science/auxlab/firing_range)
@@ -22433,7 +22462,7 @@
dir = 1
},
/turf/open/floor/iron/white/diagonal,
-/area/station/medical/virology)
+/area/station/medical/pathology)
"gAm" = (
/obj/machinery/disposal/bin,
/obj/structure/extinguisher_cabinet/directional/west,
@@ -22482,7 +22511,7 @@
},
/obj/item/clothing/head/cone,
/turf/open/floor/catwalk_floor/iron_smooth,
-/area/station/medical/virology)
+/area/station/medical/pathology)
"gAG" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/closet/firecloset,
@@ -23325,7 +23354,6 @@
pixel_y = 21
},
/obj/structure/rack,
-/obj/item/stack/sheet/iron/fifty,
/obj/item/analyzer,
/obj/item/pipe_dispenser,
/turf/open/floor/engine,
@@ -23444,7 +23472,7 @@
dir = 8
},
/turf/open/floor/iron/textured,
-/area/station/medical/virology)
+/area/station/medical/pathology)
"gPk" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -24830,7 +24858,7 @@
},
/obj/machinery/disease2/diseaseanalyser,
/turf/open/floor/iron/white,
-/area/station/medical/virology)
+/area/station/medical/pathology)
"hhP" = (
/obj/effect/turf_decal/trimline/green/filled/warning{
dir = 1
@@ -26219,7 +26247,7 @@
/obj/item/clothing/neck/stethoscope,
/obj/machinery/firealarm/directional/south,
/turf/open/floor/iron/white,
-/area/station/medical/virology)
+/area/station/medical/pathology)
"hBZ" = (
/obj/machinery/pdapainter/research,
/obj/machinery/computer/security/telescreen/rd{
@@ -28246,7 +28274,7 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron/white/herringbone,
-/area/station/medical/virology)
+/area/station/medical/pathology)
"ihB" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -28258,7 +28286,7 @@
/turf/open/floor/iron/white/textured_edge{
dir = 4
},
-/area/station/medical/virology)
+/area/station/medical/pathology)
"ihT" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -28618,7 +28646,7 @@
name = "curtain"
},
/turf/open/floor/plating,
-/area/station/security/prison)
+/area/station/security/prison/safe)
"imV" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -29426,7 +29454,7 @@
},
/obj/effect/spawner/random/structure/tank_holder,
/turf/open/floor/catwalk_floor/iron_smooth,
-/area/station/medical/virology)
+/area/station/medical/pathology)
"ivM" = (
/obj/structure/table/wood/fancy/black,
/obj/effect/turf_decal/siding/wood{
@@ -29467,7 +29495,7 @@
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/curtain,
/turf/open/floor/plating,
-/area/station/medical/virology)
+/area/station/medical/pathology)
"ivY" = (
/obj/structure/flora/grass/jungle,
/obj/structure/flora/bush/grassy,
@@ -30276,7 +30304,7 @@
pixel_y = 5
},
/turf/open/floor/iron/white,
-/area/station/medical/virology)
+/area/station/medical/pathology)
"iHX" = (
/obj/effect/decal/cleanable/oil,
/obj/effect/turf_decal/stripes/corner{
@@ -30800,7 +30828,7 @@
/turf/open/floor/iron/textured_large,
/area/station/cargo/lobby)
"iQz" = (
-/obj/machinery/portable_atmospherics/canister/nitrous_oxide,
+/obj/machinery/atmospherics/miner/n2o,
/turf/open/floor/engine/n2o,
/area/station/engineering/atmos)
"iQV" = (
@@ -31451,7 +31479,7 @@
dir = 10
},
/turf/open/floor/iron/dark/textured,
-/area/station/security/prison)
+/area/station/security/prison/safe)
"iYT" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/effect/turf_decal/tile/green/diagonal_centre,
@@ -36124,7 +36152,7 @@
/obj/structure/flora/bush/sparsegrass,
/obj/machinery/light/cold/directional/west,
/turf/open/floor/grass,
-/area/station/medical/virology)
+/area/station/medical/pathology)
"kmZ" = (
/obj/structure/lattice,
/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
@@ -36991,7 +37019,7 @@
/turf/open/floor/iron/white/textured_edge{
dir = 1
},
-/area/station/medical/virology)
+/area/station/medical/pathology)
"kzk" = (
/obj/structure/table/wood,
/obj/effect/decal/cleanable/cobweb/cobweb2,
@@ -37470,7 +37498,7 @@
},
/obj/effect/turf_decal/tile/dark_green/diagonal_centre,
/turf/open/floor/iron/white/diagonal,
-/area/station/medical/virology)
+/area/station/medical/pathology)
"kEP" = (
/obj/machinery/door/airlock/grunge{
name = "Funeral Room"
@@ -38861,7 +38889,7 @@
},
/obj/structure/disposalpipe/segment,
/turf/open/floor/iron/white/textured_edge,
-/area/station/medical/virology)
+/area/station/medical/pathology)
"kXz" = (
/obj/structure/disposalpipe/segment,
/obj/effect/turf_decal/trimline/brown/filled/warning{
@@ -39644,7 +39672,7 @@
},
/area/station/hallway/secondary/command)
"liY" = (
-/obj/machinery/portable_atmospherics/canister/oxygen,
+/obj/machinery/atmospherics/miner/oxygen,
/turf/open/floor/engine/o2,
/area/station/engineering/atmos)
"liZ" = (
@@ -40341,7 +40369,7 @@
/obj/effect/turf_decal/stripes/box,
/obj/effect/turf_decal/siding/thinplating/dark/end,
/turf/open/floor/iron/checker,
-/area/station/medical/virology)
+/area/station/medical/pathology)
"ltz" = (
/obj/machinery/door/firedoor,
/obj/effect/mapping_helpers/airlock/access/all/supply/qm,
@@ -40475,7 +40503,7 @@
/turf/open/floor/iron/white/textured_edge{
dir = 8
},
-/area/station/medical/virology)
+/area/station/medical/pathology)
"lvs" = (
/obj/machinery/door/airlock/maintenance{
name = "Barbershop Maintenance"
@@ -41731,7 +41759,7 @@
name = "curtain"
},
/turf/open/floor/plating,
-/area/station/security/prison)
+/area/station/security/prison/safe)
"lMS" = (
/turf/closed/wall/r_wall,
/area/station/maintenance/port)
@@ -41758,7 +41786,7 @@
/obj/machinery/duct,
/obj/structure/disposalpipe/segment,
/turf/open/floor/catwalk_floor/iron_smooth,
-/area/station/medical/virology)
+/area/station/medical/pathology)
"lNr" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -42731,7 +42759,7 @@
name = "Cell 2"
},
/turf/open/floor/iron/dark/textured_large,
-/area/station/security/prison)
+/area/station/security/prison/safe)
"lZs" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -43254,7 +43282,7 @@
pixel_y = 24
},
/turf/open/floor/iron/dark/textured,
-/area/station/security/prison)
+/area/station/security/prison/safe)
"miA" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
@@ -44526,7 +44554,7 @@
name = "virology water reservoir"
},
/turf/open/floor/catwalk_floor/iron_smooth,
-/area/station/medical/virology)
+/area/station/medical/pathology)
"mDf" = (
/obj/effect/turf_decal/trimline/purple/filled/line,
/obj/structure/cable,
@@ -45019,7 +45047,7 @@
/turf/open/floor/iron/white/textured_edge{
dir = 4
},
-/area/station/medical/virology)
+/area/station/medical/pathology)
"mKs" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
dir = 4
@@ -45878,7 +45906,7 @@
/turf/open/floor/wood/large,
/area/station/commons/fitness/recreation/entertainment)
"mVF" = (
-/obj/machinery/portable_atmospherics/canister/nitrogen,
+/obj/machinery/atmospherics/miner/nitrogen,
/turf/open/floor/engine/n2,
/area/station/engineering/atmos)
"mVK" = (
@@ -46896,7 +46924,7 @@
/obj/item/radio/intercom/directional/north,
/obj/effect/turf_decal/bot,
/turf/open/floor/iron/white,
-/area/station/medical/virology)
+/area/station/medical/pathology)
"nkb" = (
/obj/item/kirbyplants/random,
/obj/structure/cable,
@@ -46957,7 +46985,7 @@
name = "Chemistry Maintenance"
},
/turf/open/floor/catwalk_floor/iron_smooth,
-/area/station/medical/chemistry)
+/area/station/maintenance/department/medical/central)
"nkA" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
/turf/open/floor/iron/small,
@@ -48170,7 +48198,7 @@
dir = 1
},
/turf/open/floor/catwalk_floor/iron_smooth,
-/area/station/medical/virology)
+/area/station/medical/pathology)
"nCE" = (
/obj/machinery/door/airlock{
id_tag = "Cell1";
@@ -50405,7 +50433,7 @@
name = "Cell 1"
},
/turf/open/floor/iron/dark/textured_large,
-/area/station/security/prison)
+/area/station/security/prison/safe)
"ojJ" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -50531,7 +50559,7 @@
},
/obj/effect/turf_decal/box,
/turf/open/floor/iron/white,
-/area/station/medical/virology)
+/area/station/medical/pathology)
"okX" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -50895,7 +50923,7 @@
/obj/effect/landmark/event_spawn,
/obj/machinery/computer/diseasesplicer,
/turf/open/floor/iron/white/textured_large,
-/area/station/medical/virology)
+/area/station/medical/pathology)
"ore" = (
/obj/effect/turf_decal/trimline/blue/filled/line{
dir = 1
@@ -51564,7 +51592,7 @@
/obj/machinery/light/cold/directional/north,
/obj/item/crowbar/red,
/turf/open/floor/iron/white/textured_edge,
-/area/station/medical/virology)
+/area/station/medical/pathology)
"oAo" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -51748,7 +51776,7 @@
dir = 1
},
/turf/open/floor/iron/white/textured_large,
-/area/station/medical/virology)
+/area/station/medical/pathology)
"oCY" = (
/obj/structure/chair/office{
dir = 8
@@ -52350,7 +52378,7 @@
},
/obj/effect/turf_decal/box/blue,
/turf/open/floor/iron/white/herringbone,
-/area/station/medical/virology)
+/area/station/medical/pathology)
"oLS" = (
/obj/effect/landmark/event_spawn,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -52806,7 +52834,7 @@
dir = 6
},
/turf/open/floor/iron/dark/textured,
-/area/station/security/prison)
+/area/station/security/prison/safe)
"oSy" = (
/obj/structure/table/wood,
/obj/machinery/status_display/evac/directional/east,
@@ -52944,7 +52972,7 @@
/turf/open/floor/iron/white/textured_edge{
dir = 4
},
-/area/station/medical/virology)
+/area/station/medical/pathology)
"oUo" = (
/obj/structure/cable,
/obj/effect/spawner/random/trash/garbage,
@@ -52970,7 +52998,7 @@
/obj/machinery/holopad,
/obj/effect/turf_decal/bot,
/turf/open/floor/iron/white/textured_large,
-/area/station/medical/virology)
+/area/station/medical/pathology)
"oUR" = (
/obj/structure/flora/bush/fullgrass,
/obj/structure/flora/bush/ferny,
@@ -53466,7 +53494,7 @@
/obj/structure/flora/bush/lavendergrass/style_random,
/obj/structure/sign/poster/official/fruit_bowl/directional/west,
/turf/open/floor/grass,
-/area/station/medical/virology)
+/area/station/medical/pathology)
"paA" = (
/obj/effect/turf_decal/trimline/yellow/filled/line,
/obj/effect/turf_decal/bot,
@@ -55476,7 +55504,7 @@
dir = 4
},
/turf/open/floor/catwalk_floor/iron_smooth,
-/area/station/medical/virology)
+/area/station/medical/pathology)
"pCl" = (
/obj/machinery/light/warm/directional/east,
/obj/structure/bed/double,
@@ -55905,7 +55933,7 @@
/obj/machinery/iv_drip,
/obj/effect/turf_decal/bot,
/turf/open/floor/iron/white/textured_edge,
-/area/station/medical/virology)
+/area/station/medical/pathology)
"pIi" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -56307,7 +56335,7 @@
},
/obj/machinery/light/small/directional/east,
/turf/open/floor/iron/white/herringbone,
-/area/station/medical/virology)
+/area/station/medical/pathology)
"pNx" = (
/obj/machinery/atmospherics/components/unary/portables_connector/visible{
dir = 4
@@ -56520,7 +56548,7 @@
/turf/open/floor/iron/white/textured_edge{
dir = 4
},
-/area/station/medical/virology)
+/area/station/medical/pathology)
"pRr" = (
/mob/living/basic/spider/giant/hunter/scrawny,
/obj/machinery/light/small/directional/south,
@@ -56938,7 +56966,7 @@
/turf/open/floor/iron/white/textured_corner{
dir = 8
},
-/area/station/medical/virology)
+/area/station/medical/pathology)
"pXj" = (
/obj/effect/turf_decal/tile/red/anticorner{
dir = 8
@@ -57457,7 +57485,7 @@
dir = 5
},
/turf/open/floor/iron/dark/textured,
-/area/station/security/prison)
+/area/station/security/prison/safe)
"qbl" = (
/obj/effect/turf_decal/siding/thinplating,
/obj/machinery/door/firedoor,
@@ -57525,7 +57553,7 @@
"qbX" = (
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
-/area/station/medical/virology)
+/area/station/medical/pathology)
"qca" = (
/obj/machinery/cryopod{
dir = 1
@@ -57585,7 +57613,7 @@
/obj/effect/spawner/random/trash/garbage,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/catwalk_floor/iron_smooth,
-/area/station/medical/medbay/central)
+/area/station/maintenance/department/medical/central)
"qcB" = (
/obj/effect/turf_decal/tile/yellow/half/contrasted{
dir = 8
@@ -58527,7 +58555,7 @@
name = "Cell 4"
},
/turf/open/floor/iron/dark/textured_large,
-/area/station/security/prison)
+/area/station/security/prison/safe)
"qpR" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/effect/landmark/start/assistant,
@@ -60001,7 +60029,7 @@
/obj/effect/turf_decal/tile/dark_green/diagonal_centre,
/obj/effect/turf_decal/tile/dark_green/diagonal_centre,
/turf/open/floor/iron/white/textured_large,
-/area/station/medical/virology)
+/area/station/medical/pathology)
"qLu" = (
/turf/open/floor/catwalk_floor/iron_smooth,
/area/station/maintenance/department/science/xenobiology)
@@ -60357,7 +60385,7 @@
},
/obj/effect/turf_decal/tile/dark_green/diagonal_centre,
/turf/open/floor/iron/white/diagonal,
-/area/station/medical/virology)
+/area/station/medical/pathology)
"qRv" = (
/obj/structure/table,
/obj/effect/spawner/random/trash/food_packaging,
@@ -60797,7 +60825,7 @@
name = "curtain"
},
/turf/open/floor/plating,
-/area/station/security/prison)
+/area/station/security/prison/safe)
"qVT" = (
/obj/structure/disposalpipe/segment,
/obj/effect/turf_decal/siding/wood{
@@ -64159,7 +64187,7 @@
name = "Cell 5"
},
/turf/open/floor/iron/dark/textured_large,
-/area/station/security/prison)
+/area/station/security/prison/safe)
"rUE" = (
/obj/structure/disposalpipe/segment{
dir = 10
@@ -64590,7 +64618,7 @@
dir = 4
},
/turf/open/floor/iron/white,
-/area/station/medical/virology)
+/area/station/medical/pathology)
"scI" = (
/obj/structure/rack,
/obj/effect/turf_decal/bot,
@@ -65073,9 +65101,8 @@
/turf/open/floor/iron/textured,
/area/station/maintenance/department/crew_quarters/bar)
"sjV" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/turf/open/floor/catwalk_floor/iron_smooth,
-/area/station/medical/medbay/central)
+/turf/closed/wall,
+/area/station/security/prison/safe)
"sjW" = (
/obj/effect/turf_decal/siding/thinplating{
dir = 4
@@ -65423,7 +65450,7 @@
/obj/effect/spawner/structure/window/reinforced,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/plating,
-/area/station/medical/virology)
+/area/station/medical/pathology)
"soZ" = (
/obj/effect/turf_decal/nova_decals/enclave/top/middle{
color = "#52B4E9"
@@ -65538,7 +65565,7 @@
},
/obj/effect/landmark/start/virologist,
/turf/open/floor/iron/white/textured_large,
-/area/station/medical/virology)
+/area/station/medical/pathology)
"sqD" = (
/obj/structure/table/optable,
/obj/effect/turf_decal/tile/blue/full,
@@ -65724,7 +65751,7 @@
pixel_y = 24
},
/turf/open/floor/iron/dark/textured,
-/area/station/security/prison)
+/area/station/security/prison/safe)
"sts" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -65846,7 +65873,7 @@
},
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/catwalk_floor/iron_smooth,
-/area/station/medical/medbay/lobby)
+/area/station/maintenance/department/medical/central)
"svh" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/effect/landmark/start/lawyer,
@@ -67481,7 +67508,7 @@
/obj/structure/sign/poster/official/cleanliness/directional/north,
/obj/effect/turf_decal/tile/dark_green/diagonal_centre,
/turf/open/floor/iron/white/diagonal,
-/area/station/medical/virology)
+/area/station/medical/pathology)
"sOJ" = (
/obj/effect/turf_decal/trimline/green/filled/line{
dir = 8
@@ -67574,7 +67601,7 @@
pixel_y = 24
},
/turf/open/floor/iron/dark/textured,
-/area/station/security/prison)
+/area/station/security/prison/safe)
"sQk" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/effect/turf_decal/siding/green{
@@ -68274,7 +68301,7 @@
/turf/open/floor/iron/white/textured_edge{
dir = 8
},
-/area/station/medical/virology)
+/area/station/medical/pathology)
"sZG" = (
/obj/machinery/computer/records/security,
/obj/structure/sign/calendar/directional/north,
@@ -68436,6 +68463,7 @@
"tbw" = (
/obj/structure/table,
/obj/effect/turf_decal/bot,
+/obj/item/stack/sheet/iron/fifty,
/obj/item/storage/toolbox/mechanical,
/obj/item/flashlight,
/obj/item/clothing/glasses/meson/engine,
@@ -68578,7 +68606,7 @@
/turf/open/floor/iron/white/textured_edge{
dir = 8
},
-/area/station/medical/virology)
+/area/station/medical/pathology)
"tdG" = (
/obj/structure/chair/stool/directional/west{
dir = 4
@@ -69542,7 +69570,7 @@
dir = 6
},
/turf/open/floor/iron/dark/textured,
-/area/station/security/prison)
+/area/station/security/prison/safe)
"tqM" = (
/obj/machinery/pdapainter/security,
/obj/machinery/newscaster/directional/east,
@@ -70096,10 +70124,12 @@
},
/obj/item/storage/box/syringes,
/obj/structure/sign/warning/biohazard/directional/east,
+/obj/item/storage/box/monkeycubes/mousecubes,
+/obj/item/storage/box/monkeycubes/mousecubes,
/turf/open/floor/iron/white/textured_edge{
dir = 8
},
-/area/station/medical/virology)
+/area/station/medical/pathology)
"txu" = (
/turf/closed/wall/r_wall,
/area/station/maintenance/port/fore)
@@ -72412,7 +72442,7 @@
},
/obj/effect/turf_decal/tile/dark_green/diagonal_centre,
/turf/open/floor/iron/white/diagonal,
-/area/station/medical/virology)
+/area/station/medical/pathology)
"uhe" = (
/turf/closed/wall,
/area/station/cargo/lobby)
@@ -73602,7 +73632,7 @@
/obj/machinery/firealarm/directional/north,
/obj/effect/turf_decal/tile/dark_green/diagonal_centre,
/turf/open/floor/iron/white/diagonal,
-/area/station/medical/virology)
+/area/station/medical/pathology)
"uwg" = (
/obj/effect/turf_decal/siding/thinplating/corner{
dir = 8
@@ -74113,7 +74143,7 @@
/turf/open/floor/iron/textured_large,
/area/station/cargo/sorting)
"uCn" = (
-/obj/machinery/portable_atmospherics/canister/plasma,
+/obj/machinery/atmospherics/miner/plasma,
/turf/open/floor/engine/plasma,
/area/station/engineering/atmos)
"uCv" = (
@@ -74561,7 +74591,7 @@
dir = 1
},
/turf/open/floor/iron/white/textured_large,
-/area/station/medical/virology)
+/area/station/medical/pathology)
"uIw" = (
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating/airless,
@@ -74897,7 +74927,7 @@
},
/obj/machinery/light/small/directional/east,
/turf/open/floor/iron/white/herringbone,
-/area/station/medical/virology)
+/area/station/medical/pathology)
"uNY" = (
/obj/effect/spawner/structure/window/reinforced/tinted,
/obj/structure/cable,
@@ -74935,7 +74965,7 @@
},
/obj/item/radio/intercom/directional/east,
/turf/open/floor/iron/white,
-/area/station/medical/virology)
+/area/station/medical/pathology)
"uOt" = (
/obj/structure/rack,
/obj/machinery/status_display/ai/directional/north,
@@ -75284,7 +75314,7 @@
dir = 1
},
/turf/open/floor/grass,
-/area/station/medical/virology)
+/area/station/medical/pathology)
"uTT" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
dir = 8
@@ -75843,7 +75873,7 @@
pixel_y = 24
},
/turf/open/floor/iron/dark/textured,
-/area/station/security/prison)
+/area/station/security/prison/safe)
"vcW" = (
/obj/effect/turf_decal/trimline/green/filled/line{
dir = 10
@@ -76571,7 +76601,7 @@
/area/station/service/chapel/funeral)
"vnu" = (
/turf/closed/wall/r_wall,
-/area/station/medical/virology)
+/area/station/medical/pathology)
"vnv" = (
/mob/living/simple_animal/bot/secbot/beepsky/officer,
/turf/open/floor/iron/dark/textured_large,
@@ -77090,7 +77120,7 @@
},
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/catwalk_floor/iron_smooth,
-/area/station/medical/medbay/central)
+/area/station/maintenance/department/medical/central)
"vvT" = (
/obj/machinery/door/firedoor/heavy,
/obj/effect/turf_decal/stripes/line{
@@ -77345,7 +77375,7 @@
/turf/open/floor/iron/white/textured_edge{
dir = 8
},
-/area/station/medical/virology)
+/area/station/medical/pathology)
"vzg" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/spawner/random/trash/garbage,
@@ -77918,7 +77948,7 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron/white/herringbone,
-/area/station/medical/virology)
+/area/station/medical/pathology)
"vHM" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/table/wood,
@@ -78265,7 +78295,7 @@
/obj/item/folder/white,
/obj/item/pen/red,
/turf/open/floor/iron/white/textured_edge,
-/area/station/medical/virology)
+/area/station/medical/pathology)
"vMO" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
dir = 1
@@ -78647,7 +78677,7 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron/white/herringbone,
-/area/station/medical/virology)
+/area/station/medical/pathology)
"vSj" = (
/obj/machinery/portable_atmospherics/scrubber,
/obj/effect/turf_decal/delivery,
@@ -79501,7 +79531,7 @@
/obj/structure/flora/bush/large,
/obj/machinery/status_display/evac/directional/south,
/turf/open/floor/grass,
-/area/station/medical/virology)
+/area/station/medical/pathology)
"wel" = (
/obj/effect/turf_decal/trimline/blue/mid_joiner,
/turf/open/space/basic,
@@ -79720,7 +79750,7 @@
dir = 10
},
/turf/open/floor/iron/dark/textured,
-/area/station/security/prison)
+/area/station/security/prison/safe)
"whS" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/effect/mapping_helpers/airlock/access/all/command/gateway,
@@ -79909,7 +79939,7 @@
/turf/open/floor/iron/white/textured_corner{
dir = 1
},
-/area/station/medical/virology)
+/area/station/medical/pathology)
"wkT" = (
/obj/machinery/atmospherics/components/tank/air{
dir = 8
@@ -80150,7 +80180,7 @@
layer = 2.9
},
/turf/open/floor/grass,
-/area/station/medical/virology)
+/area/station/medical/pathology)
"woB" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
/turf/open/floor/iron/large,
@@ -83040,7 +83070,7 @@
/turf/open/floor/iron/white/textured_edge{
dir = 8
},
-/area/station/medical/virology)
+/area/station/medical/pathology)
"xgy" = (
/obj/effect/turf_decal/trimline/blue/filled/corner{
dir = 4
@@ -84577,7 +84607,7 @@
network = list("ss13","medbay")
},
/turf/open/floor/iron/white/herringbone,
-/area/station/medical/virology)
+/area/station/medical/pathology)
"xBE" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/cable,
@@ -85392,7 +85422,7 @@
name = "curtain"
},
/turf/open/floor/plating,
-/area/station/security/prison)
+/area/station/security/prison/safe)
"xPs" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
dir = 8
@@ -86177,7 +86207,7 @@
pixel_y = 24
},
/turf/open/floor/iron/dark/textured,
-/area/station/security/prison)
+/area/station/security/prison/safe)
"yaj" = (
/turf/closed/wall,
/area/station/cargo/miningoffice)
@@ -103547,8 +103577,8 @@ soY
qbX
qbX
vnu
-qbX
-qbX
+vnu
+vnu
vnu
ttw
ttw
@@ -117676,7 +117706,7 @@ dfi
pNq
suM
aWG
-sjV
+cay
fiN
pdh
goS
@@ -132512,10 +132542,10 @@ bpy
agC
dQX
iYH
-iyU
+sjV
dQX
iYH
-iyU
+sjV
dGL
iYH
pQm
@@ -132769,10 +132799,10 @@ xNf
agC
aIV
tqC
-iyU
+sjV
yaf
tqC
-iyU
+sjV
stk
tqC
pQm
@@ -133026,10 +133056,10 @@ vzN
agC
imS
fJz
-iyU
+sjV
xPg
ojc
-iyU
+sjV
lML
lZl
iyU
@@ -135596,10 +135626,10 @@ jPN
arU
efi
qpM
-iyU
+sjV
dYB
rUC
-iyU
+sjV
qVR
aBT
iyU
@@ -135853,10 +135883,10 @@ ttw
tHI
sQc
whu
-iyU
+sjV
miz
whu
-iyU
+sjV
vcy
whu
iyU
@@ -136110,10 +136140,10 @@ ttw
tHI
qbc
oSw
-iyU
+sjV
qbc
oSw
-iyU
+sjV
qbc
oSw
iyU
diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm
index add7e781f61a..21f969587678 100644
--- a/_maps/map_files/generic/CentCom.dmm
+++ b/_maps/map_files/generic/CentCom.dmm
@@ -345,10 +345,8 @@
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/briefing)
"aaW" = (
-/obj/structure/chair/office{
- dir = 8
- },
-/turf/open/floor/carpet/purple,
+/obj/machinery/light/directional/west,
+/turf/open/floor/carpet/donk,
/area/centcom/central_command_areas/adminroom)
"aaX" = (
/obj/effect/turf_decal/trimline/green/line,
@@ -811,9 +809,11 @@
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/botany)
"acd" = (
-/obj/machinery/rnd/production/protolathe/department/science,
-/turf/open/floor/circuit/green,
-/area/centcom/central_command_areas/adminroom)
+/obj/effect/turf_decal/siding/white{
+ dir = 4
+ },
+/turf/open/floor/grass,
+/area/centcom/central_command_areas/retirement_yard)
"ace" = (
/obj/structure/railing/wood{
dir = 1
@@ -932,7 +932,11 @@
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/medical)
"acv" = (
-/turf/open/floor/iron/white/textured_large,
+/obj/effect/turf_decal/trimline/yellow/warning{
+ dir = 1
+ },
+/obj/effect/turf_decal/trimline/yellow/warning,
+/turf/open/floor/iron/dark/smooth_large,
/area/centcom/central_command_areas/retirement_yard)
"acw" = (
/obj/effect/turf_decal/siding/wood,
@@ -1019,7 +1023,7 @@
/area/centcom/central_command_areas/adminroom)
"acI" = (
/obj/machinery/door/airlock/centcom{
- name = "Abraxis' Office"
+ name = "NT Helpdesk"
},
/obj/effect/mapping_helpers/airlock/access/any/admin/captain,
/turf/open/floor/iron/dark,
@@ -1379,10 +1383,8 @@
/turf/open/floor/plating,
/area/centcom/syndicate_mothership/expansion_bombthreat)
"adC" = (
-/obj/machinery/modular_computer/preset/id/centcom{
- dir = 8
- },
-/turf/open/floor/carpet/purple,
+/obj/structure/fireaxecabinet/directional/north,
+/turf/open/floor/mineral/titanium/tiled/white,
/area/centcom/central_command_areas/adminroom)
"adD" = (
/obj/effect/turf_decal/siding/wood{
@@ -1975,13 +1977,10 @@
/turf/open/misc/asteroid/snow/icemoon,
/area/centcom/syndicate_mothership/control)
"afl" = (
-/obj/machinery/door/airlock/centcom{
- dir = 4;
- name = "Softie's Office"
- },
-/obj/effect/mapping_helpers/airlock/access/any/admin/captain,
-/turf/open/floor/carpet/purple,
-/area/centcom/central_command_areas/adminroom)
+/obj/effect/turf_decal/siding/white,
+/obj/structure/flora/bush/large/style_3,
+/turf/open/floor/grass,
+/area/centcom/central_command_areas/admin)
"afn" = (
/obj/effect/turf_decal/siding/dark{
dir = 8
@@ -3033,9 +3032,11 @@
/turf/open/floor/wood/parquet,
/area/centcom/central_command_areas/borbop)
"aid" = (
-/obj/structure/table/wood,
-/obj/item/book/granter/sign_language,
-/turf/open/floor/carpet/purple,
+/obj/effect/mapping_helpers/airlock/access/any/admin/captain,
+/obj/machinery/door/airlock/vault{
+ name = "Pooba's Lair"
+ },
+/turf/open/floor/carpet/orange,
/area/centcom/central_command_areas/adminroom)
"aie" = (
/obj/effect/turf_decal/tile/dark/diagonal_edge,
@@ -5743,11 +5744,8 @@
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/supply)
"ape" = (
-/obj/structure/table/wood,
-/obj/item/storage/fancy/donut_box,
-/obj/machinery/light/floor/has_bulb,
-/turf/open/floor/carpet/purple,
-/area/centcom/central_command_areas/adminroom)
+/turf/open/space/basic,
+/area)
"apf" = (
/obj/structure/chair/sofa/left/brown{
dir = 4
@@ -6878,10 +6876,11 @@
/turf/open/floor/iron,
/area/centcom/central_command_areas/ferry)
"ase" = (
-/obj/structure/table/reinforced,
-/obj/item/storage/belt/utility/full/engi,
-/turf/open/floor/circuit/green,
-/area/centcom/central_command_areas/adminroom)
+/obj/effect/turf_decal/siding/white{
+ dir = 1
+ },
+/turf/open/floor/grass,
+/area/centcom/central_command_areas/admin)
"asf" = (
/obj/effect/turf_decal/siding/thinplating_new/dark{
dir = 10
@@ -7675,8 +7674,12 @@
/turf/open/floor/wood,
/area/centcom/central_command_areas/retirement_home)
"auh" = (
-/turf/open/floor/carpet/purple,
-/area/centcom/central_command_areas/adminroom)
+/obj/effect/turf_decal/siding/white{
+ dir = 8
+ },
+/obj/structure/flora/bush/fullgrass/style_2,
+/turf/open/floor/grass,
+/area/centcom/central_command_areas/admin)
"aui" = (
/obj/effect/turf_decal/siding/dark,
/obj/effect/turf_decal/siding/dark{
@@ -8358,11 +8361,14 @@
/turf/open/floor/iron/dark/herringbone,
/area/centcom/central_command_areas/hall)
"awb" = (
-/obj/structure/chair/sofa/right{
+/obj/effect/turf_decal/trimline/yellow/warning{
+ dir = 8
+ },
+/obj/effect/turf_decal/trimline/yellow/warning{
dir = 4
},
-/turf/open/floor/carpet/purple,
-/area/centcom/central_command_areas/adminroom)
+/turf/open/floor/iron/dark/smooth_large,
+/area/centcom/central_command_areas/retirement_yard)
"awc" = (
/turf/closed/indestructible/riveted,
/area/centcom/central_command_areas/borbop)
@@ -8711,9 +8717,9 @@
/turf/open/floor/catwalk_floor,
/area/centcom/central_command_areas/evacuation/ship)
"awY" = (
-/obj/machinery/autolathe,
-/turf/open/floor/circuit/green,
-/area/centcom/central_command_areas/adminroom)
+/obj/structure/flora/tree/jungle,
+/turf/open/floor/grass,
+/area/centcom/central_command_areas/admin)
"awZ" = (
/obj/effect/turf_decal/siding/wood,
/obj/structure/chair/stool/bar/directional/north,
@@ -9413,9 +9419,12 @@
/turf/open/floor/wood/parquet,
/area/centcom/central_command_areas/arcade)
"ayM" = (
-/obj/machinery/light/floor/has_bulb,
-/turf/open/floor/carpet/purple,
-/area/centcom/central_command_areas/adminroom)
+/obj/effect/turf_decal/siding/white{
+ dir = 8
+ },
+/obj/machinery/light/street_lamp,
+/turf/open/floor/grass,
+/area/centcom/central_command_areas/retirement_yard)
"ayN" = (
/obj/structure/table/wood,
/obj/effect/spawner/random/trash/garbage,
@@ -9826,10 +9835,12 @@
/turf/open/floor/carpet,
/area/centcom/central_command_areas/kitchen)
"azQ" = (
-/obj/structure/window/reinforced/spawner/directional/north,
-/obj/machinery/mecha_part_fabricator,
-/turf/open/floor/mineral/titanium/purple,
-/area/centcom/central_command_areas/adminroom)
+/obj/effect/turf_decal/siding/white{
+ dir = 4
+ },
+/obj/structure/flora/bush/fullgrass/style_2,
+/turf/open/floor/grass,
+/area/centcom/central_command_areas/retirement_yard)
"azR" = (
/obj/structure/chair/sofa/corp/right{
dir = 4;
@@ -9899,8 +9910,9 @@
/turf/open/floor/iron,
/area/centcom/central_command_areas/supplypod/loading/three)
"aAa" = (
-/obj/machinery/suit_storage_unit/rd,
-/turf/open/floor/carpet/purple,
+/turf/open/chasm{
+ name = "Pooba's Hole of Dead Body Storage +1"
+ },
/area/centcom/central_command_areas/adminroom)
"aAb" = (
/obj/structure/railing/wood,
@@ -11289,11 +11301,12 @@
/turf/open/floor/catwalk_floor,
/area/centcom/central_command_areas/evacuation/ship)
"aDM" = (
-/obj/machinery/door/window{
- dir = 8
+/obj/effect/turf_decal/siding/white{
+ dir = 1
},
-/turf/open/floor/carpet/purple,
-/area/centcom/central_command_areas/adminroom)
+/obj/structure/flora/bush/fullgrass/style_3,
+/turf/open/floor/grass,
+/area/centcom/central_command_areas/admin)
"aDN" = (
/obj/structure/table/glass/plasmaglass,
/obj/item/stack/sheet/mineral/plasma{
@@ -12049,7 +12062,7 @@
name = "Andrea's Fax Machine"
},
/turf/open/floor/carpet/royalblue,
-/area/centcom/central_command_areas/admin)
+/area)
"aFK" = (
/obj/structure/hedge,
/obj/effect/turf_decal/siding/wood/corner{
@@ -13394,12 +13407,14 @@
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/admin_hangout)
"aJv" = (
-/obj/structure/table/reinforced,
-/obj/structure/window/reinforced/spawner/directional/north,
-/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/infinite,
-/turf/open/floor/mineral/titanium/purple,
-/area/centcom/central_command_areas/adminroom)
+/obj/structure/sign{
+ name = "wall";
+ icon = 'monkestation/icons/turf/walls/reinforced_wall.dmi';
+ icon_state = "reinforced_wall-12";
+ pixel_y = -32
+ },
+/turf/closed/indestructible/riveted,
+/area/centcom/central_command_areas/retirement_yard)
"aJw" = (
/obj/effect/turf_decal/siding/wood{
dir = 5
@@ -13647,7 +13662,8 @@
/turf/open/floor/grass,
/area/centcom/central_command_areas/hall)
"aKc" = (
-/turf/open/floor/mineral/titanium/purple,
+/obj/machinery/computer/camera_advanced/syndie,
+/turf/open/floor/carpet/donk,
/area/centcom/central_command_areas/adminroom)
"aKd" = (
/obj/effect/turf_decal/trimline/green/corner{
@@ -15224,8 +15240,10 @@
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/kitchen)
"aOk" = (
-/obj/structure/window/reinforced/spawner/directional/north,
-/turf/open/floor/mineral/titanium/purple,
+/obj/machinery/quantum_server{
+ name = "NT Quantum Server Relay"
+ },
+/turf/open/floor/mineral/titanium/tiled/white,
/area/centcom/central_command_areas/adminroom)
"aOl" = (
/obj/effect/turf_decal/siding/wood{
@@ -16371,11 +16389,12 @@
/turf/open/floor/engine/cult,
/area/centcom/wizard_station)
"aRt" = (
-/obj/structure/table/reinforced,
-/obj/item/paper_bin,
-/obj/item/pen/fourcolor,
-/turf/open/floor/carpet/purple,
-/area/centcom/central_command_areas/adminroom)
+/obj/effect/turf_decal/trimline/yellow/warning,
+/obj/effect/turf_decal/trimline/yellow/warning{
+ dir = 1
+ },
+/turf/open/floor/iron/dark/smooth_large,
+/area/centcom/central_command_areas/retirement_yard)
"aRu" = (
/obj/item/statuebust{
pixel_y = 12
@@ -17834,11 +17853,13 @@
/turf/open/floor/plating/abductor,
/area/centcom/central_command_areas/adminroom)
"aVc" = (
-/obj/structure/table/reinforced,
-/obj/item/flashlight/lamp,
-/obj/item/reagent_containers/cup/glass/mug/nanotrasen,
-/turf/open/floor/carpet/purple,
-/area/centcom/central_command_areas/adminroom)
+/obj/effect/turf_decal/siding/white{
+ dir = 4
+ },
+/obj/structure/flora/bush/fullgrass/style_2,
+/obj/structure/flora/biolumi/flower,
+/turf/open/floor/grass,
+/area/centcom/central_command_areas/retirement_yard)
"aVd" = (
/obj/effect/turf_decal/siding/thinplating_new/dark{
dir = 1
@@ -18107,10 +18128,6 @@
},
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/borbop)
-"aVI" = (
-/obj/machinery/light/floor/has_bulb,
-/turf/open/floor/mineral/titanium/purple,
-/area/centcom/central_command_areas/adminroom)
"aVJ" = (
/obj/structure/window/plasma/spawner/directional/east,
/obj/machinery/photocopier/gratis,
@@ -19013,11 +19030,6 @@
},
/turf/open/floor/iron/dark/herringbone,
/area/centcom/central_command_areas/adminroom)
-"aYd" = (
-/obj/structure/closet/crate/science,
-/obj/item/clothing/head/beret/science/rd,
-/turf/open/floor/carpet/purple,
-/area/centcom/central_command_areas/adminroom)
"aYf" = (
/obj/effect/turf_decal/siding/wood{
dir = 8
@@ -19463,10 +19475,8 @@
/turf/open/floor/iron/white/herringbone,
/area/centcom/central_command_areas/evacuation/ship)
"aZr" = (
-/obj/structure/chair/sofa/left{
- dir = 4
- },
-/turf/open/floor/carpet/purple,
+/obj/machinery/computer/arcade,
+/turf/open/floor/mineral/titanium/tiled/white,
/area/centcom/central_command_areas/adminroom)
"aZs" = (
/obj/machinery/shuttle_manipulator,
@@ -19758,6 +19768,13 @@
/obj/effect/turf_decal/bot_white,
/turf/open/floor/iron/dark/textured_large,
/area/cruiser_dock)
+"bjH" = (
+/obj/effect/turf_decal/siding/white{
+ dir = 4
+ },
+/obj/machinery/light/street_lamp,
+/turf/open/floor/grass,
+/area/centcom/central_command_areas/retirement_yard)
"bkY" = (
/obj/effect/turf_decal/siding/thinplating_new/dark{
dir = 4
@@ -19775,6 +19792,13 @@
},
/turf/open/floor/iron/dark/textured_edge,
/area/centcom/central_command_areas/evacuation)
+"blr" = (
+/obj/effect/mapping_helpers/airlock/access/any/admin/captain,
+/obj/machinery/door/airlock/hatch{
+ name = "Pooba's Observatory"
+ },
+/turf/open/floor/carpet/donk,
+/area/centcom/central_command_areas/adminroom)
"blD" = (
/obj/effect/mapping_helpers/airlock/access/any/admin/captain,
/obj/machinery/door/airlock/sandstone{
@@ -19825,6 +19849,15 @@
/obj/structure/shipping_container/cybersun,
/turf/open/floor/iron/dark/textured_large,
/area/cruiser_dock)
+"bTx" = (
+/obj/effect/turf_decal/trimline/yellow/warning{
+ dir = 4
+ },
+/obj/effect/turf_decal/trimline/yellow/warning{
+ dir = 8
+ },
+/turf/open/floor/iron/dark/smooth_large,
+/area/centcom/central_command_areas/retirement_yard)
"bTZ" = (
/obj/effect/turf_decal/siding/thinplating_new/dark{
dir = 8
@@ -19832,6 +19865,10 @@
/obj/machinery/light/cold/directional/south,
/turf/open/misc/asteroid,
/area/cruiser_dock)
+"bVz" = (
+/obj/effect/turf_decal/trimline/white/end,
+/turf/open/floor/iron/dark/smooth_large,
+/area/centcom/central_command_areas/admin)
"bWo" = (
/obj/effect/turf_decal/tile/dark/opposingcorners,
/obj/structure/railing/wood{
@@ -19929,6 +19966,28 @@
dir = 1
},
/area/centcom/central_command_areas/evacuation)
+"cQz" = (
+/obj/effect/turf_decal/siding/white{
+ dir = 4
+ },
+/turf/open/floor/grass,
+/area/centcom/central_command_areas/admin)
+"cQL" = (
+/obj/machinery/computer/communications/syndicate,
+/turf/open/floor/carpet/donk,
+/area/centcom/central_command_areas/adminroom)
+"cSL" = (
+/obj/effect/turf_decal/siding/white{
+ dir = 4
+ },
+/turf/open/misc/dirt,
+/area/centcom/central_command_areas/retirement_yard)
+"diV" = (
+/obj/structure/closet/abductor{
+ name = "Sentient Locker of Transport"
+ },
+/turf/open/floor/mineral/titanium/tiled/white,
+/area/centcom/central_command_areas/adminroom)
"dki" = (
/obj/effect/turf_decal/siding/wideplating_new/dark{
dir = 1
@@ -19974,6 +20033,13 @@
dir = 8
},
/area/cruiser_dock)
+"dtE" = (
+/obj/effect/turf_decal/siding/white{
+ dir = 1
+ },
+/obj/structure/flora/bush/fullgrass/style_2,
+/turf/open/floor/grass,
+/area/centcom/central_command_areas/admin)
"duq" = (
/obj/structure/railing/wood{
dir = 1
@@ -19983,6 +20049,13 @@
},
/turf/open/floor/glass/plasma,
/area/centcom/central_command_areas/evacuation)
+"dwU" = (
+/obj/effect/turf_decal/siding/white{
+ dir = 4
+ },
+/obj/structure/flora/bush/large/style_3,
+/turf/open/floor/grass,
+/area/centcom/central_command_areas/retirement_yard)
"dxL" = (
/obj/machinery/vending/cigarette/syndicate,
/obj/effect/turf_decal/bot_white,
@@ -20006,6 +20079,13 @@
/obj/machinery/chem_master,
/turf/open/floor/iron/dark/textured_large,
/area/cruiser_dock)
+"dQc" = (
+/obj/effect/mapping_helpers/airlock/access/any/admin/captain,
+/obj/machinery/door/airlock/wood/glass{
+ name = "Pooba's Bedroom"
+ },
+/turf/open/floor/carpet/orange,
+/area/centcom/central_command_areas/adminroom)
"dRD" = (
/obj/structure/chair/plastic,
/obj/effect/landmark/start/assaultop,
@@ -20021,6 +20101,13 @@
},
/turf/open/floor/iron/dark/herringbone,
/area/centcom/central_command_areas/evacuation)
+"egP" = (
+/obj/effect/turf_decal/siding/white{
+ dir = 9
+ },
+/obj/machinery/light/street_lamp,
+/turf/open/floor/grass,
+/area/centcom/central_command_areas/admin)
"egY" = (
/turf/open/floor/iron/dark/herringbone,
/area/centcom/central_command_areas/evacuation)
@@ -20034,6 +20121,21 @@
},
/turf/open/floor/iron/dark/textured_large,
/area/cruiser_dock)
+"elw" = (
+/obj/machinery/vending/coffee,
+/obj/machinery/light/directional/north,
+/turf/open/floor/mineral/titanium/tiled/white,
+/area/centcom/central_command_areas/adminroom)
+"erK" = (
+/obj/structure/flora/bush/fullgrass/style_2,
+/turf/open/floor/grass,
+/area/centcom/central_command_areas/admin)
+"exk" = (
+/obj/structure/chair/office/light{
+ dir = 1
+ },
+/turf/open/floor/mineral/titanium/tiled/white,
+/area/centcom/central_command_areas/adminroom)
"exy" = (
/obj/effect/turf_decal/plaque{
icon_state = "L11"
@@ -20089,6 +20191,10 @@
dir = 4
},
/area/cruiser_dock)
+"ePC" = (
+/obj/machinery/light/directional/east,
+/turf/open/floor/mineral/titanium/tiled/white,
+/area/centcom/central_command_areas/adminroom)
"eQR" = (
/obj/effect/turf_decal/siding/thinplating_new/dark/corner{
dir = 8
@@ -20109,6 +20215,10 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/iron/dark/herringbone,
/area/centcom/central_command_areas/evacuation)
+"fan" = (
+/obj/machinery/light/floor/has_bulb,
+/turf/open/floor/carpet/orange,
+/area/centcom/central_command_areas/adminroom)
"fcP" = (
/obj/machinery/light/neon_lining{
icon_state = "pink2_1"
@@ -20121,12 +20231,29 @@
dir = 1
},
/area/centcom/central_command_areas/evacuation)
+"ffV" = (
+/obj/effect/turf_decal/siding/white{
+ dir = 4
+ },
+/obj/structure/flora/bush/fullgrass/style_2,
+/obj/structure/flora/bush/fullgrass/style_2,
+/turf/open/floor/grass,
+/area/centcom/central_command_areas/retirement_yard)
"fgR" = (
/obj/effect/turf_decal/siding/thinplating_new/dark{
dir = 8
},
/turf/open/floor/iron/smooth_large,
/area/cruiser_dock)
+"flN" = (
+/obj/structure/table/reinforced/titaniumglass,
+/obj/machinery/fax{
+ name = "NT Helpdesk Fax Machine";
+ fax_name = "NT Helpdesk"
+ },
+/obj/machinery/light/directional/west,
+/turf/open/floor/mineral/titanium/tiled/white,
+/area/centcom/central_command_areas/adminroom)
"fuy" = (
/obj/machinery/light/neon_lining{
icon_state = "pink2_1"
@@ -20174,6 +20301,13 @@
/obj/structure/flora/rock/pile/jungle/style_random,
/turf/open/floor/grass,
/area/centcom/central_command_areas/evacuation)
+"fYP" = (
+/obj/vehicle/sealed/mecha/durand{
+ name = "\improper Rosie"
+ },
+/obj/machinery/light/directional/east,
+/turf/open/floor/mineral/titanium/tiled/white,
+/area/centcom/central_command_areas/adminroom)
"fYQ" = (
/obj/structure/table/reinforced/plastitaniumglass{
name = "Andrea's Desk"
@@ -20259,6 +20393,10 @@
},
/turf/open/floor/iron/dark/herringbone,
/area/centcom/central_command_areas/evacuation)
+"gBq" = (
+/obj/machinery/vending/imported/mothic,
+/turf/open/floor/mineral/titanium/tiled/white,
+/area/centcom/central_command_areas/adminroom)
"gBx" = (
/obj/structure/railing/wood{
dir = 4
@@ -20295,6 +20433,12 @@
/obj/structure/chair/sofa/corp/left,
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/hall)
+"gJY" = (
+/obj/effect/turf_decal/siding/white{
+ dir = 8
+ },
+/turf/open/floor/grass,
+/area/centcom/central_command_areas/retirement_yard)
"gMl" = (
/obj/effect/turf_decal/siding/wideplating_new/dark{
dir = 6
@@ -20328,6 +20472,10 @@
/obj/structure/punching_bag,
/turf/open/floor/plating,
/area/cruiser_dock)
+"gXN" = (
+/obj/structure/table/reinforced/titaniumglass,
+/turf/open/floor/mineral/titanium/tiled/white,
+/area/centcom/central_command_areas/adminroom)
"gYo" = (
/obj/structure/chair/sofa/corp/right{
dir = 1
@@ -20359,6 +20507,22 @@
/obj/effect/turf_decal/siding/thinplating_new/dark,
/turf/open/floor/iron/smooth,
/area/cruiser_dock)
+"hol" = (
+/obj/item/kirbyplants/synthetic,
+/turf/open/floor/carpet/orange,
+/area/centcom/central_command_areas/adminroom)
+"hpt" = (
+/obj/effect/turf_decal/siding/white,
+/obj/machinery/light/street_lamp,
+/turf/open/floor/grass,
+/area/centcom/central_command_areas/admin)
+"hpU" = (
+/obj/effect/turf_decal/siding/white{
+ dir = 1
+ },
+/obj/structure/flora/bush/large/style_3,
+/turf/open/floor/grass,
+/area/centcom/central_command_areas/admin)
"hrx" = (
/obj/machinery/light/cold/directional/east,
/turf/open/floor/iron/dark/textured_large,
@@ -20372,12 +20536,24 @@
dir = 8
},
/area/centcom/central_command_areas/evacuation)
+"hxZ" = (
+/obj/effect/turf_decal/siding/white{
+ dir = 4
+ },
+/obj/structure/flora/bush/fullgrass/style_2,
+/obj/structure/flora/bush/large/style_3,
+/turf/open/floor/grass,
+/area/centcom/central_command_areas/retirement_yard)
"hAI" = (
/obj/effect/turf_decal/box/corners{
dir = 8
},
/turf/open/floor/iron/dark/textured_large,
/area/cruiser_dock)
+"hAP" = (
+/obj/machinery/light/directional/west,
+/turf/open/floor/carpet/orange,
+/area/centcom/central_command_areas/adminroom)
"hAZ" = (
/obj/effect/turf_decal/siding/wideplating_new/dark{
dir = 8
@@ -20431,6 +20607,13 @@
},
/turf/open/floor/glass/reinforced,
/area/centcom/central_command_areas/evacuation)
+"hGa" = (
+/obj/machinery/door/airlock/centcom{
+ name = "Admin Retirement Home"
+ },
+/obj/effect/mapping_helpers/airlock/access/any/admin/captain,
+/turf/open/floor/iron/dark/smooth_large,
+/area/centcom/central_command_areas/admin)
"hHJ" = (
/obj/effect/turf_decal/siding/thinplating_new/dark{
dir = 5
@@ -20464,6 +20647,12 @@
"hVj" = (
/turf/open/floor/iron/stairs/right,
/area/cruiser_dock)
+"iew" = (
+/obj/structure/bed/double,
+/obj/item/bedsheet/syndie/double,
+/obj/item/toy/plush/pooba_bee_plush,
+/turf/open/floor/carpet/orange,
+/area/centcom/central_command_areas/adminroom)
"ifF" = (
/obj/effect/landmark/start/assaultop,
/obj/structure/chair/office/light{
@@ -20492,6 +20681,19 @@
/obj/item/kirbyplants/random,
/turf/open/floor/iron/dark/textured_corner,
/area/centcom/central_command_areas/evacuation)
+"ins" = (
+/obj/item/shell/server{
+ name = "NT Helpdesk Backup Server Assembly"
+ },
+/turf/open/floor/mineral/titanium/tiled/white,
+/area/centcom/central_command_areas/adminroom)
+"ivR" = (
+/obj/structure/table/reinforced/plastitaniumglass,
+/obj/machinery/fax{
+ name = "Pooba's Fax Machine"
+ },
+/turf/open/floor/carpet/donk,
+/area/centcom/central_command_areas/adminroom)
"iCr" = (
/obj/structure/chair/sofa/corp/right{
dir = 4
@@ -20512,6 +20714,13 @@
},
/turf/open/floor/iron/smooth_large,
/area/cruiser_dock)
+"iOc" = (
+/obj/effect/turf_decal/siding/white{
+ dir = 5
+ },
+/obj/machinery/light/street_lamp,
+/turf/open/floor/grass,
+/area/centcom/central_command_areas/admin)
"iQv" = (
/obj/structure/flora/bush/large/style_3,
/obj/item/toy/plush/lizard_plushie,
@@ -20521,6 +20730,13 @@
/obj/machinery/light/cold/directional/east,
/turf/open/floor/iron/smooth_large,
/area/cruiser_dock)
+"iRM" = (
+/obj/effect/turf_decal/siding/white{
+ dir = 8
+ },
+/obj/structure/flora/bush/fullgrass/style_2,
+/turf/open/floor/grass,
+/area/centcom/central_command_areas/retirement_yard)
"iSx" = (
/turf/open/floor/iron/smooth_edge{
dir = 8
@@ -20541,6 +20757,13 @@
},
/turf/open/floor/glass/reinforced/plasma,
/area/centcom/central_command_areas/adminroom)
+"jbf" = (
+/obj/effect/turf_decal/siding/white{
+ dir = 4
+ },
+/obj/structure/flora/biolumi/mine,
+/turf/open/floor/grass,
+/area/centcom/central_command_areas/retirement_yard)
"jce" = (
/obj/effect/turf_decal/siding/thinplating_new/dark{
dir = 1
@@ -20564,10 +20787,17 @@
/obj/effect/baseturf_helper/asteroid,
/turf/closed/indestructible/syndicate,
/area/cruiser_dock)
+"jth" = (
+/obj/machinery/light/directional/east,
+/turf/open/floor/carpet/donk,
+/area/centcom/central_command_areas/adminroom)
"jvd" = (
/obj/structure/hedge,
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/botany)
+"jAA" = (
+/turf/open/floor/carpet/donk,
+/area/centcom/central_command_areas/adminroom)
"jFt" = (
/obj/structure/table/glass/plasmaglass,
/obj/item/storage/box/beakers{
@@ -20589,6 +20819,10 @@
},
/turf/open/floor/iron/dark/textured,
/area/centcom/central_command_areas/evacuation)
+"jOY" = (
+/obj/machinery/ticket_machine/directional/north,
+/turf/open/floor/mineral/titanium/tiled/white,
+/area/centcom/central_command_areas/adminroom)
"jPc" = (
/obj/effect/turf_decal/siding/wideplating_new/dark{
dir = 8
@@ -20604,6 +20838,19 @@
/obj/structure/fake_stairs/wood/directional/north,
/turf/open/misc/dirt,
/area/centcom/central_command_areas/retirement_yard)
+"kch" = (
+/obj/structure/closet/cabinet{
+ name = "Pooba's Storage Cabinet of Intrigue"
+ },
+/obj/item/toy/balloon/syndicate,
+/obj/item/storage/fancy/cigarettes/cigpack_syndicate,
+/obj/item/lighter/skull,
+/obj/item/storage/box/donkpockets/donkpocketteriyaki,
+/obj/item/radio/headset/syndicate/alt/leader,
+/obj/item/clothing/under/costume/syndie_pajamas,
+/obj/item/storage/backpack/duffelbag/syndie,
+/turf/open/floor/carpet/orange,
+/area/centcom/central_command_areas/adminroom)
"kcm" = (
/obj/effect/turf_decal/tile/dark/opposingcorners,
/obj/structure/railing/wood{
@@ -20626,6 +20873,9 @@
/obj/structure/window/reinforced/tinted/spawner/directional/south,
/turf/open/floor/iron/grimy,
/area/centcom/central_command_areas/adminroom)
+"kjO" = (
+/turf/open/floor/grass,
+/area/centcom/central_command_areas/admin)
"kpH" = (
/turf/closed/indestructible/riveted,
/area/centcom/central_command_areas/adminroom)
@@ -20699,6 +20949,12 @@
dir = 1
},
/area/centcom/central_command_areas/evacuation)
+"lkv" = (
+/obj/structure/flora/bush/fullgrass/style_2,
+/obj/structure/flora/bush/fullgrass/style_2,
+/obj/structure/flora/biolumi/flower,
+/turf/open/floor/grass,
+/area/centcom/central_command_areas/retirement_yard)
"lwC" = (
/obj/effect/turf_decal/siding/thinplating_new/dark/corner{
dir = 1
@@ -20708,6 +20964,14 @@
"lBd" = (
/turf/open/floor/iron/smooth_corner,
/area/cruiser_dock)
+"lCG" = (
+/obj/effect/turf_decal/siding/white,
+/obj/effect/turf_decal/siding/white{
+ dir = 8
+ },
+/obj/structure/billboard/nanotrasen,
+/turf/open/floor/grass,
+/area/centcom/central_command_areas/retirement_yard)
"lKm" = (
/obj/structure/fake_stairs/wood/directional/north,
/turf/open/floor/wood/large,
@@ -20741,6 +21005,12 @@
/obj/structure/chair/sofa/corp/corner,
/turf/open/floor/iron/dark/herringbone,
/area/centcom/central_command_areas/evacuation)
+"lRs" = (
+/obj/effect/turf_decal/siding/white{
+ dir = 8
+ },
+/turf/open/floor/grass,
+/area/centcom/central_command_areas/admin)
"lWT" = (
/turf/open/floor/iron/smooth_edge{
dir = 1
@@ -20795,11 +21065,28 @@
/obj/structure/window/reinforced/tinted/spawner/directional/south,
/turf/open/floor/iron/grimy,
/area/centcom/central_command_areas/adminroom)
+"mJK" = (
+/obj/effect/turf_decal/siding/white{
+ dir = 6
+ },
+/obj/machinery/light/street_lamp,
+/obj/effect/turf_decal/siding/white{
+ dir = 8
+ },
+/turf/open/floor/grass,
+/area/centcom/central_command_areas/admin)
"mKK" = (
/obj/structure/table/wood,
/obj/machinery/fax,
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/admin)
+"mUv" = (
+/obj/effect/turf_decal/trimline/yellow/warning,
+/obj/effect/turf_decal/trimline/yellow/warning{
+ dir = 1
+ },
+/turf/open/floor/iron/dark/smooth_large,
+/area/centcom/central_command_areas/admin)
"nbv" = (
/obj/effect/turf_decal/siding/white,
/turf/open/misc/dirt,
@@ -20919,6 +21206,11 @@
/obj/structure/sign/poster/abductor/ayy_recruitment/directional/north,
/turf/open/floor/iron/dark/herringbone,
/area/centcom/central_command_areas/evacuation)
+"odD" = (
+/obj/structure/railing,
+/obj/structure/chair/office/tactical,
+/turf/open/floor/carpet/donk,
+/area/centcom/central_command_areas/adminroom)
"ofy" = (
/obj/effect/turf_decal/box/corners{
dir = 4
@@ -20949,6 +21241,10 @@
/obj/item/clothing/suit/armor/vest,
/turf/open/floor/iron/dark/textured_large,
/area/cruiser_dock)
+"okM" = (
+/obj/machinery/vending/imported,
+/turf/open/floor/mineral/titanium/tiled/white,
+/area/centcom/central_command_areas/adminroom)
"ooz" = (
/obj/machinery/light/neon_lining{
icon_state = "pink2_1"
@@ -20988,6 +21284,15 @@
/obj/item/kirbyplants/random,
/turf/open/floor/iron/dark/textured_large,
/area/cruiser_dock)
+"oDI" = (
+/obj/effect/turf_decal/trimline/yellow/warning{
+ dir = 8
+ },
+/obj/effect/turf_decal/trimline/yellow/warning{
+ dir = 4
+ },
+/turf/open/floor/iron/dark/smooth_large,
+/area/centcom/central_command_areas/admin)
"oEF" = (
/obj/effect/turf_decal/siding/wideplating_new/dark{
dir = 10
@@ -21011,6 +21316,11 @@
/obj/effect/turf_decal/siding/thinplating_new/dark,
/turf/open/floor/iron/dark/textured_large,
/area/cruiser_dock)
+"oJx" = (
+/obj/effect/turf_decal/siding/white,
+/obj/structure/flora/bush/fullgrass/style_2,
+/turf/open/floor/grass,
+/area/centcom/central_command_areas/admin)
"oNH" = (
/obj/machinery/light/neon_lining{
dir = 1;
@@ -21038,8 +21348,8 @@
/obj/machinery/door/airlock/centcom{
name = "Admin Retirement Home"
},
-/turf/open/space/basic,
-/area/space)
+/turf/open/floor/iron/dark/smooth_large,
+/area/centcom/central_command_areas/retirement_yard)
"peK" = (
/obj/structure/railing/wood{
dir = 4
@@ -21060,9 +21370,22 @@
dir = 8
},
/area/centcom/central_command_areas/evacuation)
+"pkn" = (
+/obj/effect/turf_decal/trimline/yellow/warning{
+ dir = 5
+ },
+/turf/open/floor/iron/dark/smooth_large,
+/area/centcom/central_command_areas/admin)
"plB" = (
/turf/open/floor/iron/smooth,
/area/cruiser_dock)
+"ppk" = (
+/obj/machinery/computer/camera_advanced{
+ dir = 4
+ },
+/obj/machinery/light/directional/west,
+/turf/open/floor/mineral/titanium/tiled/white,
+/area/centcom/central_command_areas/adminroom)
"prl" = (
/obj/item/mop,
/obj/structure/mop_bucket,
@@ -21088,6 +21411,9 @@
},
/turf/open/floor/carpet/red,
/area/cruiser_dock)
+"pIi" = (
+/turf/open/floor/wood/large,
+/area)
"pVf" = (
/obj/effect/turf_decal/tile/dark/opposingcorners,
/obj/structure/chair/sofa/corp,
@@ -21195,8 +21521,16 @@
/turf/closed/indestructible/opsglass,
/area/cruiser_dock)
"rnC" = (
-/turf/closed/indestructible/fakeglass,
-/area/space)
+/obj/effect/turf_decal/siding/white{
+ dir = 4
+ },
+/obj/machinery/light/street_lamp,
+/turf/open/floor/grass,
+/area/centcom/central_command_areas/admin)
+"rsi" = (
+/obj/structure/chair/office/light,
+/turf/open/floor/mineral/titanium/tiled/white,
+/area/centcom/central_command_areas/adminroom)
"rtD" = (
/obj/effect/turf_decal/siding/wideplating_new/dark,
/obj/structure/sign/poster/contraband/random/directional/south,
@@ -21214,6 +21548,10 @@
},
/turf/open/floor/iron/dark/herringbone,
/area/centcom/central_command_areas/admin)
+"rxE" = (
+/obj/effect/turf_decal/siding/white,
+/turf/open/floor/grass,
+/area/centcom/central_command_areas/admin)
"rCN" = (
/obj/machinery/light/small/directional/west,
/obj/item/stack/cable_coil,
@@ -21274,9 +21612,23 @@
},
/turf/open/floor/iron/dark/textured_large,
/area/cruiser_dock)
+"rVD" = (
+/obj/effect/turf_decal/siding/white{
+ dir = 8
+ },
+/obj/effect/turf_decal/siding/white,
+/obj/machinery/light/street_lamp,
+/turf/open/floor/grass,
+/area/centcom/central_command_areas/admin)
"rXO" = (
/turf/open/floor/iron/smooth_large,
/area/cruiser_dock)
+"rYm" = (
+/obj/machinery/telecomms/relay/preset/ruskie{
+ use_power = 0
+ },
+/turf/open/floor/carpet/orange,
+/area/centcom/central_command_areas/adminroom)
"saC" = (
/obj/effect/turf_decal/plaque{
icon_state = "L1"
@@ -21344,9 +21696,6 @@
/obj/structure/chair/plastic,
/turf/open/floor/iron/smooth,
/area/cruiser_dock)
-"sUX" = (
-/turf/closed/indestructible/riveted,
-/area/space)
"sYg" = (
/obj/machinery/light/neon_lining{
icon_state = "pink2_1"
@@ -21367,6 +21716,12 @@
/obj/machinery/fax,
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/adminroom)
+"tbq" = (
+/obj/effect/turf_decal/trimline/yellow/warning{
+ dir = 10
+ },
+/turf/open/floor/iron/dark/smooth_large,
+/area/centcom/central_command_areas/retirement_yard)
"tez" = (
/obj/machinery/door/airlock/centcom{
name = "Raziel's Theatre"
@@ -21374,6 +21729,12 @@
/obj/effect/mapping_helpers/airlock/access/any/admin/captain,
/turf/open/floor/mineral/titanium/tiled/white,
/area/centcom/central_command_areas/adminroom)
+"tiz" = (
+/obj/structure/table/reinforced/plastitaniumglass,
+/obj/item/clothing/mask/breath/poob_mask,
+/obj/machinery/light/directional/east,
+/turf/open/floor/carpet/orange,
+/area/centcom/central_command_areas/adminroom)
"tlQ" = (
/obj/structure/flora/bush/fullgrass/style_random,
/obj/structure/flora/bush/flowers_pp/style_random,
@@ -21410,6 +21771,25 @@
/obj/structure/railing/wood,
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/botany)
+"tsg" = (
+/obj/structure/table/reinforced/titaniumglass,
+/obj/machinery/cell_charger_multi,
+/turf/open/floor/mineral/titanium/tiled/white,
+/area/centcom/central_command_areas/adminroom)
+"tsH" = (
+/obj/effect/turf_decal/siding/white{
+ dir = 8
+ },
+/obj/structure/flora/bush/fullgrass/style_2,
+/obj/structure/flora/biolumi/flower,
+/turf/open/floor/grass,
+/area/centcom/central_command_areas/retirement_yard)
+"tsY" = (
+/obj/structure/table/reinforced/titaniumglass,
+/obj/item/paper_bin,
+/obj/item/pen/fourcolor,
+/turf/open/floor/mineral/titanium/tiled/white,
+/area/centcom/central_command_areas/adminroom)
"tvA" = (
/obj/structure/flora/tree/jungle/style_random,
/obj/structure/flora/bush/fullgrass/style_random,
@@ -21487,6 +21867,13 @@
dir = 4
},
/area/centcom/central_command_areas/evacuation)
+"tNY" = (
+/obj/structure/railing{
+ dir = 8;
+ layer = 4.1
+ },
+/turf/open/floor/carpet/donk,
+/area/centcom/central_command_areas/adminroom)
"tWL" = (
/obj/effect/turf_decal/tile/dark/opposingcorners,
/obj/structure/railing/wood{
@@ -21516,6 +21903,14 @@
},
/turf/open/misc/asteroid,
/area/cruiser_dock)
+"uun" = (
+/obj/structure/flora/bush/large/style_3,
+/turf/open/floor/grass,
+/area/centcom/central_command_areas/admin)
+"uwL" = (
+/obj/machinery/light/street_lamp,
+/turf/open/floor/grass,
+/area/centcom/central_command_areas/admin)
"uAz" = (
/turf/open/floor/iron/smooth_corner{
dir = 4
@@ -21540,6 +21935,13 @@
},
/turf/open/floor/iron/dark/textured_large,
/area/cruiser_dock)
+"uIG" = (
+/obj/machinery/door/airlock/centcom{
+ name = "NT Helpdesk"
+ },
+/obj/effect/mapping_helpers/airlock/access/any/admin/captain,
+/turf/open/floor/mineral/titanium/tiled/white,
+/area/centcom/central_command_areas/adminroom)
"uNf" = (
/obj/machinery/light/neon_lining{
icon_state = "pink2_1"
@@ -21547,6 +21949,13 @@
/obj/effect/turf_decal/siding/wideplating_new/dark,
/turf/open/floor/iron/dark/textured_edge,
/area/centcom/central_command_areas/evacuation)
+"uOq" = (
+/obj/machinery/door/airlock/centcom{
+ name = "Admin Auxillary Offices"
+ },
+/obj/effect/mapping_helpers/airlock/access/any/admin/captain,
+/turf/open/floor/iron/dark/smooth_large,
+/area/centcom/central_command_areas/admin)
"uSs" = (
/obj/structure/statue/sandstone/venus{
dir = 1;
@@ -21818,6 +22227,20 @@
},
/turf/open/floor/mineral/titanium/tiled/white,
/area/cruiser_dock)
+"xjq" = (
+/obj/effect/turf_decal/siding/white{
+ dir = 8
+ },
+/obj/machinery/light/street_lamp,
+/turf/open/floor/grass,
+/area/centcom/central_command_areas/admin)
+"xkv" = (
+/obj/structure/railing{
+ dir = 4;
+ layer = 4.1
+ },
+/turf/open/floor/carpet/donk,
+/area/centcom/central_command_areas/adminroom)
"xno" = (
/obj/structure/window/reinforced/tinted/frosted,
/turf/open/floor/iron/dark/small,
@@ -21855,6 +22278,13 @@
/obj/structure/table/reinforced/plastitaniumglass,
/turf/open/floor/iron/dark/herringbone,
/area/centcom/central_command_areas/evacuation)
+"xDC" = (
+/obj/effect/turf_decal/siding/white{
+ dir = 8
+ },
+/obj/structure/flora/bush/large/style_3,
+/turf/open/floor/grass,
+/area/centcom/central_command_areas/retirement_yard)
"xMe" = (
/obj/machinery/light/neon_lining{
dir = 1;
@@ -21907,6 +22337,12 @@
/obj/item/storage/box/mothic_rations,
/turf/open/floor/iron/dark/textured_large,
/area/cruiser_dock)
+"xXl" = (
+/obj/structure/railing{
+ dir = 1
+ },
+/turf/open/floor/carpet/donk,
+/area/centcom/central_command_areas/adminroom)
"yaU" = (
/obj/structure/flora/bush/fullgrass/style_random,
/obj/structure/flora/bush/flowers_yw/style_random,
@@ -21929,6 +22365,9 @@
},
/turf/open/floor/glass/reinforced,
/area/centcom/central_command_areas/evacuation)
+"yhF" = (
+/turf/open/floor/iron/dark/smooth_large,
+/area/centcom/central_command_areas/admin)
"yhG" = (
/obj/machinery/light/neon_lining{
dir = 1;
@@ -48229,117 +48668,64 @@ aaa
aaa
aaa
aaa
-ajb
-ajl
-ajs
-aiX
-ajs
-ajJ
-aZo
-aaa
-aaa
-aaa
-aaa
-aIh
-aOM
-amG
-anl
-apd
-aiF
-aaa
-aaa
-aaa
-aaa
-aaa
-aiF
-kpH
-agn
-ahs
-agn
-ahs
-agn
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aOn
-aDs
-aur
-ajh
-aUa
-aBn
-aOn
-abF
-aKB
-alF
-aqZ
-aqZ
-aqZ
-aqZ
-aqZ
-aqZ
-aqZ
-aKM
-aTZ
-ahK
-aAw
-aOn
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aGA
-anp
-anp
-anp
-aGA
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+ajb
+ajl
+ajs
+aiX
+ajs
+ajJ
+aZo
+aaa
+aaa
+aaa
+aaa
+aIh
+aOM
+amG
+anl
+apd
+aiF
+aaa
+aaa
+aaa
+aaa
+aaa
+aiF
+kpH
+agn
+ahs
+agn
+ahs
+agn
+aaa
+aaa
+aaa
+aaa
aaa
aaa
+aOn
+aDs
+aur
+ajh
+aUa
+aBn
+aOn
+abF
+aKB
+alF
+aqZ
+aqZ
+aqZ
+aqZ
+aqZ
+aqZ
+aqZ
+aKM
+aTZ
+ahK
+aAw
+aOn
+aaa
aaa
aaa
aaa
@@ -48349,6 +48735,12 @@ aaa
aaa
aaa
aaa
+aGA
+anp
+anp
+anp
+aGA
+aaa
aaa
aaa
aaa
@@ -48414,8 +48806,6 @@ aaa
aaa
aaa
aaa
-"}
-(104,1,1) = {"
aaa
aaa
aaa
@@ -48463,6 +48853,8 @@ aaa
aaa
aaa
aaa
+"}
+(104,1,1) = {"
aaa
aaa
aaa
@@ -48483,6 +48875,53 @@ aaa
aaa
aaa
aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+kpH
+kpH
+kpH
+kpH
+kpH
+kpH
+kpH
+aOn
+aOn
+aOn
+aOn
+aOn
+kpH
+kpH
+kpH
+kpH
+kpH
+kpH
+aaa
aiF
aiN
aiX
@@ -48721,24 +49160,24 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+kpH
+flN
+tsY
+aAl
+tsY
+ppk
+kpH
+bVz
+yhF
+mUv
+yhF
+hpU
+kpH
+cQL
+aaW
+xkv
+jAA
+kpH
aaa
aiF
aiO
@@ -48978,24 +49417,24 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+kpH
+rsi
+gXN
+aAl
+gXN
+exk
+eHz
+bVz
+yhF
+mUv
+yhF
+aDM
+kpH
+ivR
+odD
+aAa
+xXl
+kpH
aaa
aiF
aHk
@@ -49235,24 +49674,24 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+kpH
+jOY
+gXN
+aAl
+tsg
+aAl
+kpH
+mJK
+yhF
+mUv
+yhF
+iOc
+kpH
+aKc
+jth
+tNY
+jAA
+kpH
aaa
aiF
aDX
@@ -49492,24 +49931,24 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+kpH
+adC
+aAl
+aAl
+aAl
+aAl
+eHz
+yhF
+yhF
+mUv
+yhF
+yhF
+kpH
+kpH
+kpH
+blr
+kpH
+kpH
aaa
aiF
aac
@@ -49749,24 +50188,24 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+kpH
+elw
+aAl
+aAl
+aAl
+aAl
+uIG
+yhF
+yhF
+mUv
+yhF
+yhF
+aid
+fan
+ayR
+ayR
+fan
+kpH
aaa
aiF
aac
@@ -50006,24 +50445,24 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+kpH
+okM
+aAl
+aOk
+aZr
+aAl
+eHz
+yhF
+yhF
+mUv
+yhF
+yhF
+kpH
+kpH
+kpH
+kpH
+dQc
+kpH
aaa
aiF
aac
@@ -50263,24 +50702,24 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+kpH
+gBq
+aAl
+ins
+aZr
+aAl
+kpH
+rVD
+yhF
+mUv
+yhF
+egP
+kpH
+rYm
+hAP
+ayR
+ayR
+kpH
aaa
aiF
aac
@@ -50520,24 +50959,24 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+kpH
+diV
+aAl
+aOk
+aZr
+aAl
+eHz
+oJx
+yhF
+mUv
+yhF
+dtE
+kpH
+ayR
+ayR
+ayR
+ayR
+kpH
aaa
aiF
aqQ
@@ -50575,7 +51014,7 @@ aMc
aMc
aMc
aMc
-aMc
+pIi
aMc
aMc
aMc
@@ -50777,24 +51216,24 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+kpH
+fYP
+aAl
+aOk
+aZr
+ePC
+eHz
+oJx
+yhF
+mUv
+yhF
+dtE
+kpH
+iew
+tiz
+kch
+hol
+kpH
aaa
aiF
aRi
@@ -51034,24 +51473,24 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+kpH
+kpH
+kpH
+kpH
+kpH
+kpH
+kpH
+oJx
+yhF
+mUv
+yhF
+dtE
+kpH
+kpH
+kpH
+kpH
+kpH
+kpH
aaa
aiF
aiF
@@ -51297,17 +51736,17 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+aOn
+afl
+yhF
+mUv
+yhF
+hpU
+kjO
+erK
+erK
+erK
+aOn
aaa
aaa
aaa
@@ -51367,12 +51806,12 @@ aIW
aIS
kpH
kpH
-kpH
-kpH
-afl
-aIS
-kpH
-kpH
+aOn
+aOn
+aOn
+aOn
+aOn
+aOn
amD
amD
amD
@@ -51554,41 +51993,41 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-akG
+aOn
+rxE
+yhF
+mUv
+yhF
+ase
+kjO
+kjO
+awY
+erK
+aOn
+aft
+aft
+aft
+aft
+aft
+aft
+aft
+aft
+aft
+aft
+aft
+aft
+aft
+aft
+aft
+aft
+aft
+aft
+aft
+aft
+aft
+aft
+aft
+aJv
atj
aXi
aTL
@@ -51624,12 +52063,12 @@ atW
aHo
azt
kpH
-aZr
-awb
-auh
-azQ
-aKc
-kpH
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
amD
aBm
apR
@@ -51811,41 +52250,41 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-akG
+aOn
+rxE
+yhF
+mUv
+yhF
+ase
+kjO
+kjO
+kjO
+erK
+aOn
+afC
+afC
+aCV
+cxr
+cxr
+aYB
+aYB
+aYB
+aYB
+lkv
+aYB
+aCV
+afC
+aYB
+aYB
+lkv
+afC
+aCV
+aYB
+aYB
+aYB
+aGD
+afC
+aJv
atj
aya
aUo
@@ -51881,12 +52320,12 @@ aJp
aZx
aId
kpH
-aid
-ape
-auh
-aJv
-aVI
-kpH
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
amD
aau
apR
@@ -52068,41 +52507,41 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-akG
+aOn
+hpt
+yhF
+mUv
+yhF
+iOc
+cQz
+cQz
+cQz
+rnC
+aOn
+acd
+acd
+bjH
+dwU
+cSL
+cSL
+azQ
+hxZ
+azQ
+azQ
+bjH
+acd
+aVc
+ffV
+azQ
+azQ
+azQ
+bjH
+jbf
+azQ
+azQ
+azQ
+acd
+aJv
atj
aNl
aMU
@@ -52138,12 +52577,12 @@ aXn
aDw
aGe
kpH
-auh
-auh
-auh
-aOk
-aKc
-kpH
+aaa
+aaa
+aaa
+aaa
+aaa
+amD
amD
amD
amD
@@ -52325,41 +52764,41 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-akG
+aOn
+rxE
+yhF
+mUv
+yhF
+yhF
+yhF
+yhF
+yhF
+yhF
+uOq
+aYr
+aYr
+aYr
+aYr
+aYr
+aYr
+aYr
+aYr
+aYr
+aYr
+aYr
+aYr
+aYr
+aYr
+aYr
+aYr
+aYr
+aYr
+aYr
+aYr
+aYr
+aYr
+aYr
+aJv
atj
aoj
apL
@@ -52395,12 +52834,12 @@ aCU
aiD
aOR
kpH
-aRt
-aVc
-aDM
-ase
-ayg
-kpH
+aaa
+aaa
+aaa
+aaa
+aaa
+amD
aTd
aTd
aTd
@@ -52582,41 +53021,41 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-akG
+aOn
+rxE
+yhF
+pkn
+oDI
+oDI
+oDI
+oDI
+oDI
+oDI
+aOn
+bTx
+bTx
+bTx
+bTx
+bTx
+bTx
+bTx
+bTx
+bTx
+awb
+bTx
+awb
+bTx
+awb
+bTx
+awb
+awb
+awb
+bTx
+awb
+awb
+tbq
+aYr
+aJv
atj
aVQ
aTL
@@ -52652,12 +53091,12 @@ aCs
aiD
aHQ
kpH
-ayM
-aaW
-auh
-ayg
-ayg
-kpH
+aaa
+aaa
+aaa
+aaa
+aaa
+amD
aTd
aTd
aTd
@@ -52783,43 +53222,8 @@ aaa
aaa
aaa
aaa
-"}
-(121,1,1) = {"
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+"}
+(121,1,1) = {"
aaa
aaa
aaa
@@ -52874,6 +53278,41 @@ aaa
aaa
aaa
aaa
+aOn
+oJx
+yhF
+yhF
+yhF
+yhF
+yhF
+yhF
+yhF
+yhF
+hGa
+aYr
+aYr
+aYr
+aYr
+aYr
+aYr
+aYr
+aYr
+aYr
+aYr
+aYr
+aYr
+aYr
+aYr
+aYr
+aYr
+aYr
+aYr
+aYr
+aYr
+aYr
+acv
+aYr
+aft
atj
atj
atj
@@ -52909,12 +53348,12 @@ sYu
aBB
aAC
kpH
-adC
-aAa
-aYd
-acd
-awY
-kpH
+aaa
+aaa
+aaa
+aaa
+aaa
+amD
aTd
aTd
aTd
@@ -53096,41 +53535,41 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+aOn
+uwL
+auh
+lRs
+lRs
+xjq
+lRs
+auh
+auh
+xjq
+aOn
+gJY
+gJY
+iRM
+iRM
+iRM
+ayM
+xDC
+gJY
+gJY
+iRM
+iRM
+tsH
+gJY
+gJY
+gJY
+ayM
+iRM
+tsH
+gJY
+lCG
+aYr
+acv
+aYr
+aft
aUv
aPR
acC
@@ -53166,15 +53605,15 @@ eHz
eHz
kpH
kpH
-kpH
-eHz
-eHz
-eHz
-kpH
-aYn
-aYn
-aYn
-aYn
+aaa
+aaa
+aaa
+aaa
+aaa
+amD
+amD
+amD
+amD
aTd
aTd
aTd
@@ -53353,41 +53792,41 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aft
-aft
-aft
-aft
-aft
-aft
-aft
-aft
-aft
-aft
-aft
-aft
-aft
-aft
-aft
-aft
-aft
-aft
-aft
-aaa
-aaa
-aaa
-aaa
-aaa
+aOn
+erK
+erK
+erK
+erK
+kjO
+erK
+erK
+erK
+uun
+aOn
+afC
+afC
+aGD
+aCV
+aYB
+aYB
+aYB
+aYB
+afC
+afC
+aYB
+aYB
+afC
+aYB
+aYB
+aYB
+aYB
+afC
+afC
+aqz
+aYr
+aRt
+aYr
+aOE
aaa
aaa
aua
@@ -53431,7 +53870,7 @@ aaa
aaa
aaa
aaa
-aYn
+amD
aTd
aTd
aTd
@@ -53610,16 +54049,16 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+aOn
+aOn
+aOn
+aOn
+aOn
+aOn
+aOn
+aOn
+aOn
+aOn
aft
aft
aAf
@@ -53635,15 +54074,15 @@ aYB
aGH
afC
aWU
-afC
+aCV
aYB
arI
ajY
-aft
-aOE
-aOE
-aOE
-aOE
+afC
+aqz
+aYr
+acv
+aYr
aOE
aaa
aaa
@@ -53688,7 +54127,7 @@ aaa
aaa
aaa
aaa
-aYn
+amD
aTd
aTd
aTd
@@ -53899,7 +54338,7 @@ aCR
aCR
aZi
aYr
-acv
+aRt
aYr
aOE
aOE
@@ -53945,7 +54384,7 @@ aaa
aaa
aaa
aaa
-aYn
+amD
aTd
aTd
aTd
@@ -54156,7 +54595,7 @@ aPH
aGU
aXK
aYr
-aYr
+acv
aYr
aRS
aft
@@ -54202,7 +54641,7 @@ aaa
aaa
aaa
aaa
-aYn
+amD
amD
amD
amD
@@ -54413,7 +54852,7 @@ afr
cxr
aaY
aYr
-acv
+aRt
aYr
apt
aft
@@ -54459,7 +54898,7 @@ aaa
aaa
aaa
aaa
-aYn
+amD
aNE
aNE
aNE
@@ -54716,7 +55155,7 @@ aaa
aaa
aaa
aaa
-aYn
+amD
aNE
aNE
aNE
@@ -54927,7 +55366,7 @@ jUj
cxr
aWl
aYr
-aYr
+acv
aYr
aDV
aGD
@@ -54973,7 +55412,7 @@ aaa
aaa
aaa
aaa
-aYn
+amD
aNE
aNE
aNE
@@ -55230,7 +55669,7 @@ aaa
aaa
aaa
aaa
-aYn
+amD
aNE
aNE
aNE
@@ -55487,7 +55926,7 @@ aaa
aaa
aaa
aaa
-aYn
+amD
aNE
aNE
aNE
@@ -55698,7 +56137,7 @@ aCR
aYB
akx
aYr
-aYr
+acv
aYr
aDV
afC
@@ -55744,7 +56183,7 @@ aaa
aaa
aaa
aaa
-aYn
+amD
aNE
aNE
aNE
@@ -55955,7 +56394,7 @@ aEW
ahW
akt
aYr
-aYr
+aRt
aYr
adu
aft
@@ -55982,6 +56421,7 @@ kpH
kpH
kpH
aaa
+ape
aaa
aaa
aaa
@@ -56000,8 +56440,7 @@ aaa
aaa
aaa
aaa
-aaa
-aYn
+amD
aNE
aNE
aNE
@@ -56258,7 +56697,7 @@ aaa
aaa
aaa
aaa
-aYn
+amD
aNE
aNE
aNE
@@ -56469,7 +56908,7 @@ aCV
aCR
akx
aYr
-acv
+aRt
aYr
aft
aft
@@ -56515,7 +56954,7 @@ aaa
aaa
aaa
aaa
-aYn
+amD
aNE
aNE
aNE
@@ -56723,12 +57162,12 @@ aQG
ahW
aUy
ahW
-sUX
-sUX
+aft
+aft
oZB
-rnC
+aOE
oZB
-sUX
+aft
aaa
aaa
aaa
@@ -56768,11 +57207,11 @@ aaa
aaa
aaa
aaa
-aYn
-aYn
-aYn
-aYn
-aYn
+amD
+amD
+amD
+amD
+amD
aQC
aQC
amD
diff --git a/_maps/~monkestation/RandomBars/Box/bloody_bar.dmm b/_maps/~monkestation/RandomBars/Box/bloody_bar.dmm
index 017294cd5ba8..84468fdf67f0 100644
--- a/_maps/~monkestation/RandomBars/Box/bloody_bar.dmm
+++ b/_maps/~monkestation/RandomBars/Box/bloody_bar.dmm
@@ -111,7 +111,6 @@
/turf/open/floor/plating,
/area/station/commons/lounge)
"qb" = (
-/obj/machinery/camera/autoname/directional/north,
/obj/machinery/light/small/directional/north,
/turf/open/floor/cult,
/area/station/commons/lounge)
@@ -149,11 +148,6 @@
/obj/machinery/holopad,
/turf/open/floor/cult,
/area/station/commons/lounge)
-"vj" = (
-/obj/machinery/camera/autoname/directional/east,
-/obj/machinery/computer/slot_machine,
-/turf/open/floor/cult,
-/area/station/commons/lounge)
"wp" = (
/obj/structure/chair/wood{
dir = 8
@@ -208,12 +202,12 @@
/turf/open/floor/cult,
/area/station/commons/lounge)
"DC" = (
+/obj/machinery/camera/autoname/directional/north,
/obj/machinery/media/jukebox,
/turf/open/floor/cult,
/area/station/commons/lounge)
"DJ" = (
-/obj/machinery/camera/autoname/directional/west,
-/obj/machinery/light/small/directional/west,
+/obj/machinery/light/directional/west,
/turf/open/floor/cult,
/area/station/commons/lounge)
"DZ" = (
@@ -380,8 +374,7 @@
/turf/open/floor/wood/large,
/area/station/service/theater)
"WG" = (
-/obj/machinery/camera/autoname/directional/east,
-/obj/machinery/light/small/directional/east,
+/obj/machinery/light/directional/east,
/obj/item/radio/intercom/directional/east,
/turf/open/floor/cult,
/area/station/commons/lounge)
@@ -457,7 +450,7 @@ Bl
FK
eO
ja
-vj
+ja
es
Sg
kL
diff --git a/_maps/~monkestation/RandomBars/Box/clockwork_bar.dmm b/_maps/~monkestation/RandomBars/Box/clockwork_bar.dmm
index 1b3c3680bd34..a8d1317e0e6b 100644
--- a/_maps/~monkestation/RandomBars/Box/clockwork_bar.dmm
+++ b/_maps/~monkestation/RandomBars/Box/clockwork_bar.dmm
@@ -69,6 +69,7 @@
/turf/open/floor/bronze,
/area/station/commons/lounge)
"iB" = (
+/obj/machinery/camera/autoname/directional/north,
/obj/machinery/media/jukebox,
/turf/open/floor/bronze,
/area/station/commons/lounge)
@@ -80,11 +81,6 @@
/obj/machinery/vending/cigarette,
/turf/open/floor/bronze,
/area/station/commons/lounge)
-"ll" = (
-/obj/machinery/camera/autoname/directional/east,
-/obj/machinery/computer/slot_machine,
-/turf/open/floor/bronze,
-/area/station/commons/lounge)
"mm" = (
/obj/structure/chair/bronze,
/obj/effect/landmark/start/hangover,
@@ -153,8 +149,7 @@
/turf/open/floor/bronze,
/area/station/commons/lounge)
"uV" = (
-/obj/machinery/camera/autoname/directional/east,
-/obj/machinery/light/small/directional/east,
+/obj/machinery/light/directional/east,
/obj/item/radio/intercom/directional/east,
/turf/open/floor/bronze,
/area/station/commons/lounge)
@@ -243,8 +238,7 @@
/turf/open/floor/bronze,
/area/station/commons/lounge)
"LJ" = (
-/obj/machinery/camera/autoname/directional/west,
-/obj/machinery/light/small/directional/west,
+/obj/machinery/light/directional/west,
/turf/open/floor/bronze,
/area/station/commons/lounge)
"Mm" = (
@@ -320,7 +314,6 @@
/turf/open/floor/bronze,
/area/station/commons/lounge)
"Tu" = (
-/obj/machinery/camera/autoname/directional/north,
/obj/machinery/light/small/directional/north,
/turf/open/floor/bronze,
/area/station/commons/lounge)
@@ -435,7 +428,7 @@ TL
ZZ
UM
tZ
-ll
+tZ
yC
Ya
Wj
diff --git a/_maps/~monkestation/RandomBars/Box/default_bar.dmm b/_maps/~monkestation/RandomBars/Box/default_bar.dmm
index 062f8e608021..fa3c5d969d63 100644
--- a/_maps/~monkestation/RandomBars/Box/default_bar.dmm
+++ b/_maps/~monkestation/RandomBars/Box/default_bar.dmm
@@ -220,8 +220,7 @@
/area/station/commons/lounge)
"zm" = (
/obj/effect/turf_decal/tile/bar/opposingcorners,
-/obj/machinery/camera/autoname/directional/east,
-/obj/machinery/light/small/directional/east,
+/obj/machinery/light/directional/east,
/obj/item/radio/intercom/directional/east,
/turf/open/floor/iron,
/area/station/commons/lounge)
@@ -311,7 +310,6 @@
/area/station/commons/lounge)
"EP" = (
/obj/effect/turf_decal/tile/bar/opposingcorners,
-/obj/machinery/camera/autoname/directional/north,
/obj/machinery/light/small/directional/north,
/turf/open/floor/iron,
/area/station/commons/lounge)
@@ -345,12 +343,6 @@
/obj/machinery/light/directional/east,
/turf/open/floor/iron,
/area/station/commons/lounge)
-"Jm" = (
-/obj/effect/turf_decal/tile/bar/opposingcorners,
-/obj/machinery/camera/autoname/directional/east,
-/obj/machinery/computer/slot_machine,
-/turf/open/floor/iron,
-/area/station/commons/lounge)
"JF" = (
/obj/effect/turf_decal/tile/bar/opposingcorners,
/obj/effect/spawner/random/entertainment/arcade{
@@ -368,6 +360,7 @@
/area/station/commons/lounge)
"Lc" = (
/obj/effect/turf_decal/tile/bar/opposingcorners,
+/obj/machinery/camera/autoname/directional/north,
/obj/machinery/media/jukebox,
/turf/open/floor/iron,
/area/station/commons/lounge)
@@ -432,8 +425,7 @@
/area/station/commons/lounge)
"PD" = (
/obj/effect/turf_decal/tile/bar/opposingcorners,
-/obj/machinery/camera/autoname/directional/west,
-/obj/machinery/light/small/directional/west,
+/obj/machinery/light/directional/west,
/turf/open/floor/iron,
/area/station/commons/lounge)
"QZ" = (
@@ -446,7 +438,6 @@
"Tq" = (
/obj/effect/turf_decal/tile/bar/opposingcorners,
/obj/structure/table/wood/poker,
-/obj/item/toy/cards/deck,
/obj/item/clothing/mask/cigarette/cigar,
/turf/open/floor/iron,
/area/station/commons/lounge)
@@ -533,7 +524,7 @@ tH
Nm
QZ
vO
-Jm
+vO
IP
JF
sZ
@@ -546,8 +537,8 @@ tH
TB
TB
EF
-Ly
Tq
+ZX
tH
tH
cL
diff --git a/_maps/~monkestation/RandomBars/Box/vietmoth_bar.dmm b/_maps/~monkestation/RandomBars/Box/vietmoth_bar.dmm
index 1ee74c8e49ec..180c7cfdb1f1 100644
--- a/_maps/~monkestation/RandomBars/Box/vietmoth_bar.dmm
+++ b/_maps/~monkestation/RandomBars/Box/vietmoth_bar.dmm
@@ -59,7 +59,6 @@
/turf/open/floor/grass,
/area/station/commons/lounge)
"gY" = (
-/obj/machinery/camera/autoname/directional/north,
/obj/machinery/light/small/directional/north,
/turf/open/water/jungle,
/area/station/commons/lounge)
@@ -172,6 +171,7 @@
/turf/open/floor/grass,
/area/station/commons/lounge)
"py" = (
+/obj/machinery/camera/autoname/directional/north,
/obj/machinery/media/jukebox,
/turf/open/floor/grass,
/area/station/commons/lounge)
@@ -265,11 +265,6 @@
"yJ" = (
/turf/template_noop,
/area/template_noop)
-"zh" = (
-/obj/machinery/camera/autoname/directional/east,
-/obj/machinery/computer/slot_machine,
-/turf/open/floor/grass,
-/area/station/commons/lounge)
"zv" = (
/obj/structure/table/wood,
/obj/item/instrument/saxophone,
@@ -325,8 +320,7 @@
/turf/open/floor/grass,
/area/station/commons/lounge)
"GX" = (
-/obj/machinery/camera/autoname/directional/east,
-/obj/machinery/light/small/directional/east,
+/obj/machinery/light/directional/east,
/obj/item/radio/intercom/directional/east,
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
dir = 1
@@ -411,8 +405,7 @@
/turf/open/floor/grass,
/area/station/commons/lounge)
"OY" = (
-/obj/machinery/camera/autoname/directional/west,
-/obj/machinery/light/small/directional/west,
+/obj/machinery/light/directional/west,
/obj/structure/flora/bush/fullgrass/style_random,
/obj/structure/flora/bush/flowers_br/style_random,
/turf/open/floor/grass,
@@ -508,7 +501,7 @@ vy
Dg
xk
AS
-zh
+AS
oa
EB
yJ
diff --git a/_maps/~monkestation/RandomBars/Icebox/Magbar.dmm b/_maps/~monkestation/RandomBars/Icebox/Magbar.dmm
index b81405dd2b06..059597c36201 100644
--- a/_maps/~monkestation/RandomBars/Icebox/Magbar.dmm
+++ b/_maps/~monkestation/RandomBars/Icebox/Magbar.dmm
@@ -66,18 +66,28 @@
},
/area/station/commons/lounge)
"ci" = (
-/obj/effect/turf_decal/siding/brown{
- dir = 1
- },
-/obj/effect/turf_decal/siding/brown,
+/obj/structure/cable,
/obj/structure/chair/stool/bar/directional/north{
pixel_y = 4
},
-/mob/living/carbon/human/species/monkey/punpun,
-/turf/open/floor/pod,
+/obj/effect/landmark/start/hangover,
+/turf/open/floor/iron{
+ base_icon_state = "basalt0";
+ icon_state = "basalt0";
+ name = "false ash tile"
+ },
/area/station/commons/lounge)
"cG" = (
-/obj/item/gps/computer,
+/obj/machinery/power/apc/auto_name/directional/north,
+/obj/structure/cable,
+/obj/structure/table/reinforced,
+/obj/machinery/chem_dispenser/drinks/beer{
+ pixel_y = 10
+ },
+/obj/item/reagent_containers/cup/rag{
+ pixel_x = 9;
+ pixel_y = 2
+ },
/turf/open/floor/pod,
/area/station/service/bar)
"cR" = (
@@ -103,20 +113,6 @@
/obj/machinery/status_display/evac/directional/north,
/turf/open/floor/pod,
/area/station/commons/lounge)
-"dX" = (
-/obj/effect/turf_decal/siding/brown{
- dir = 4
- },
-/obj/structure/chair/stool/bar/directional/east{
- pixel_x = 1;
- pixel_y = 3
- },
-/obj/effect/turf_decal/siding/brown{
- dir = 8
- },
-/obj/effect/landmark/start/hangover,
-/turf/open/floor/pod,
-/area/station/commons/lounge)
"eM" = (
/obj/structure/ore_box,
/turf/open/floor/iron{
@@ -126,11 +122,16 @@
},
/area/station/commons/lounge)
"eR" = (
-/obj/structure/table/reinforced/rglass,
/obj/structure/cable,
-/obj/item/food/pie/cream,
-/turf/open/floor/pod,
-/area/station/service/bar)
+/obj/structure/chair/stool/bar/directional/north{
+ pixel_y = 4
+ },
+/turf/open/floor/iron{
+ base_icon_state = "basalt0";
+ icon_state = "basalt0";
+ name = "false ash tile"
+ },
+/area/station/commons/lounge)
"eV" = (
/obj/structure/window/reinforced/survival_pod/spawner/directional/west,
/obj/structure/window/reinforced/survival_pod/spawner/directional/south,
@@ -182,10 +183,11 @@
},
/area/station/commons/lounge)
"gc" = (
-/obj/effect/turf_decal/siding/brown{
- dir = 6
- },
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/cable,
+/obj/effect/turf_decal/siding/brown,
+/obj/structure/table/reinforced/rglass,
+/obj/effect/spawner/random/entertainment/gambling,
/turf/open/floor/pod,
/area/station/service/bar)
"gz" = (
@@ -216,8 +218,9 @@
/obj/effect/turf_decal/siding/brown{
dir = 8
},
-/obj/structure/cable,
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
+/obj/structure/table/reinforced/rglass,
+/obj/item/holosign_creator/robot_seat/bar,
/turf/open/floor/pod,
/area/station/service/bar)
"hE" = (
@@ -231,15 +234,19 @@
},
/area/station/commons/lounge)
"hN" = (
-/obj/structure/table/reinforced/rglass,
-/obj/structure/desk_bell{
- pixel_x = 7
+/obj/structure/displaycase{
+ alert = 0;
+ desc = "A display case containing an expensive forgery, probably.";
+ pixel_y = -4;
+ req_access = list("mining");
+ start_showpiece_type = /obj/item/fakeartefact
},
-/obj/structure/desk_bell{
- pixel_x = 7
+/turf/open/floor/iron{
+ base_icon_state = "basalt0";
+ icon_state = "basalt0";
+ name = "false ash tile"
},
-/turf/open/floor/pod,
-/area/station/service/bar)
+/area/station/commons/lounge)
"hS" = (
/obj/machinery/camera/directional/south{
c_tag = "Service Theater - Backstage"
@@ -265,16 +272,6 @@
name = "false ash tile"
},
/area/station/commons/lounge)
-"il" = (
-/obj/effect/turf_decal/siding/brown/corner{
- dir = 1
- },
-/obj/effect/turf_decal/siding/brown{
- dir = 6
- },
-/obj/machinery/restaurant_portal/bar,
-/turf/open/floor/pod,
-/area/station/commons/lounge)
"jh" = (
/obj/effect/turf_decal/siding/brown{
dir = 4
@@ -347,10 +344,6 @@
name = "false ash tile"
},
/area/station/commons/lounge)
-"lo" = (
-/obj/machinery/vending/boozeomat,
-/turf/closed/wall/mineral/titanium/survival/pod,
-/area/station/service/bar)
"lq" = (
/obj/structure/disposalpipe/segment,
/obj/structure/window/reinforced/survival_pod/spawner/directional/east,
@@ -364,16 +357,21 @@
},
/area/station/commons/lounge)
"lw" = (
-/obj/effect/turf_decal/mining,
-/turf/closed/wall/mineral/titanium/survival/pod,
+/obj/machinery/restaurant_portal/bar,
+/turf/open/floor/iron{
+ base_icon_state = "basalt0";
+ icon_state = "basalt0";
+ name = "false ash tile"
+ },
/area/station/commons/lounge)
"lF" = (
/obj/effect/turf_decal/siding/brown{
dir = 10
},
-/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/spawner/random/entertainment/gambling,
+/obj/structure/table/reinforced/rglass,
/turf/open/floor/pod,
/area/station/service/bar)
"lW" = (
@@ -424,12 +422,17 @@
/turf/open/floor/pod,
/area/station/service/bar/backroom)
"nh" = (
-/obj/structure/table/reinforced/rglass,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/spawner/random/entertainment/gambling,
-/turf/open/floor/pod,
-/area/station/service/bar)
+/obj/structure/chair/stool/bar/directional/north{
+ pixel_y = 4
+ },
+/turf/open/floor/iron{
+ base_icon_state = "basalt0";
+ icon_state = "basalt0";
+ name = "false ash tile"
+ },
+/area/station/commons/lounge)
"nq" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -467,18 +470,16 @@
},
/area/station/commons/lounge)
"qd" = (
-/obj/effect/turf_decal/siding/brown{
- dir = 8
- },
/obj/structure/chair/stool/bar/directional/west{
pixel_x = -1;
pixel_y = 3
},
-/obj/effect/turf_decal/siding/brown{
- dir = 4
- },
/obj/effect/landmark/start/hangover,
-/turf/open/floor/pod,
+/turf/open/floor/iron{
+ base_icon_state = "basalt0";
+ icon_state = "basalt0";
+ name = "false ash tile"
+ },
/area/station/commons/lounge)
"qe" = (
/obj/effect/turf_decal/siding/brown/corner{
@@ -491,29 +492,7 @@
/obj/structure/cable,
/turf/open/floor/pod,
/area/station/service/bar/backroom)
-"qB" = (
-/obj/machinery/jukebox{
- pixel_x = -1;
- pixel_y = -2
- },
-/obj/effect/turf_decal/siding/brown/end{
- dir = 1
- },
-/turf/open/floor/pod,
-/area/station/commons/lounge)
"qS" = (
-/obj/structure/table/reinforced,
-/obj/machinery/chem_dispenser/drinks{
- dir = 8;
- pixel_x = 3
- },
-/obj/item/reagent_containers/cup/glass/shaker{
- pixel_x = -8;
- pixel_y = 4
- },
-/obj/effect/turf_decal/siding/brown/end{
- dir = 8
- },
/turf/open/floor/pod,
/area/station/service/bar)
"qV" = (
@@ -550,29 +529,13 @@
"rR" = (
/turf/closed/wall/mineral/titanium/survival/pod,
/area/station/service/bar)
-"sf" = (
-/turf/closed/wall/mineral/titanium/survival,
-/area/station/service/bar/backroom)
"sK" = (
/obj/effect/turf_decal/siding/brown,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/item/food/pie/cream,
+/obj/structure/table/reinforced/rglass,
/turf/open/floor/pod,
/area/station/service/bar)
-"tl" = (
-/obj/effect/turf_decal/siding/brown{
- dir = 4
- },
-/obj/effect/turf_decal/siding/brown{
- dir = 8
- },
-/obj/structure/chair/stool/bar/directional/east{
- pixel_x = 1;
- pixel_y = 3
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/pod,
-/area/station/commons/lounge)
"tn" = (
/obj/machinery/computer/slot_machine{
pixel_x = 2
@@ -598,8 +561,13 @@
},
/area/station/commons/lounge)
"us" = (
+/obj/effect/turf_decal/siding/brown{
+ dir = 6
+ },
/obj/structure/table/reinforced/rglass,
-/obj/effect/spawner/random/entertainment/gambling,
+/obj/structure/displaycase/forsale/kitchen{
+ pixel_y = 8
+ },
/turf/open/floor/pod,
/area/station/service/bar)
"uy" = (
@@ -615,14 +583,13 @@
/turf/open/floor/pod,
/area/station/commons/lounge)
"vu" = (
-/obj/structure/table/reinforced/rglass,
/obj/machinery/light/directional/north,
-/obj/structure/sign/picture_frame/portrait/bar{
- pixel_x = -8;
- pixel_y = 32
+/turf/open/floor/iron{
+ base_icon_state = "basalt0";
+ icon_state = "basalt0";
+ name = "false ash tile"
},
-/turf/open/floor/pod,
-/area/station/service/bar)
+/area/station/commons/lounge)
"vL" = (
/obj/structure/disposalpipe/segment{
dir = 6
@@ -641,9 +608,17 @@
},
/area/station/commons/lounge)
"vY" = (
-/obj/structure/table/reinforced/rglass,
-/turf/open/floor/pod,
-/area/station/service/bar)
+/obj/structure/cable,
+/obj/structure/chair/stool/bar/directional/north{
+ pixel_y = 4
+ },
+/mob/living/carbon/human/species/monkey/punpun,
+/turf/open/floor/iron{
+ base_icon_state = "basalt0";
+ icon_state = "basalt0";
+ name = "false ash tile"
+ },
+/area/station/commons/lounge)
"wC" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -745,9 +720,7 @@
},
/area/station/commons/lounge)
"Ae" = (
-/obj/effect/turf_decal/siding/brown{
- dir = 1
- },
+/obj/machinery/light/floor/has_bulb,
/turf/open/floor/pod,
/area/station/service/bar)
"Am" = (
@@ -794,8 +767,15 @@
/turf/open/floor/pod,
/area/station/commons/lounge)
"Bg" = (
-/obj/machinery/smartfridge/survival_pod/preloaded,
/obj/machinery/firealarm/directional/north,
+/obj/structure/table/reinforced,
+/obj/machinery/chem_dispenser/drinks{
+ pixel_y = 10
+ },
+/obj/item/reagent_containers/cup/glass/shaker{
+ pixel_x = -8;
+ pixel_y = 4
+ },
/turf/open/floor/pod,
/area/station/service/bar)
"Bq" = (
@@ -839,17 +819,15 @@
},
/area/station/commons/lounge)
"Ci" = (
-/obj/effect/turf_decal/siding/brown{
- dir = 8
- },
/obj/structure/chair/stool/bar/directional/west{
pixel_x = -1;
pixel_y = 3
},
-/obj/effect/turf_decal/siding/brown{
- dir = 4
+/turf/open/floor/iron{
+ base_icon_state = "basalt0";
+ icon_state = "basalt0";
+ name = "false ash tile"
},
-/turf/open/floor/pod,
/area/station/commons/lounge)
"CQ" = (
/obj/structure/disposalpipe/segment,
@@ -900,22 +878,10 @@
},
/area/station/commons/lounge)
"Ea" = (
-/obj/effect/turf_decal/siding/brown{
- dir = 4
- },
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
+/obj/structure/cable,
/turf/open/floor/pod,
/area/station/service/bar)
-"Ec" = (
-/obj/effect/turf_decal/siding/brown{
- dir = 1
- },
-/obj/effect/turf_decal/siding/brown,
-/obj/structure/chair/stool/bar/directional/north{
- pixel_y = 4
- },
-/turf/open/floor/pod,
-/area/station/commons/lounge)
"EC" = (
/obj/machinery/light/directional/west,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -952,7 +918,7 @@
},
/area/station/commons/lounge)
"ET" = (
-/turf/closed/wall/mineral/titanium/survival/pod,
+/turf/closed/wall,
/area/station/commons/lounge)
"Fk" = (
/obj/effect/turf_decal/siding/brown{
@@ -965,25 +931,18 @@
/turf/open/floor/pod,
/area/station/service/bar/backroom)
"Fr" = (
-/obj/structure/table/reinforced,
-/obj/machinery/chem_dispenser/drinks/beer{
- dir = 4;
- pixel_x = -5;
- pixel_y = 7
- },
-/obj/effect/turf_decal/siding/brown/end{
+/obj/effect/landmark/start/bartender,
+/turf/open/floor/pod,
+/area/station/service/bar)
+"Ft" = (
+/obj/effect/turf_decal/siding/brown{
dir = 4
},
-/obj/item/reagent_containers/cup/rag{
- pixel_x = 9;
- pixel_y = 6
+/obj/machinery/vending/boozeomat{
+ layer = 3.1
},
-/turf/open/floor/pod,
+/turf/open/space/basic,
/area/station/service/bar)
-"Ft" = (
-/obj/effect/turf_decal/mining/survival,
-/turf/closed/wall/mineral/titanium/survival,
-/area/station/service/bar/backroom)
"Gt" = (
/obj/machinery/door/airlock/maintenance,
/obj/effect/mapping_helpers/airlock/access/all/service/bar,
@@ -1035,12 +994,15 @@
},
/area/station/commons/lounge)
"It" = (
-/obj/structure/table/reinforced/rglass,
-/obj/structure/desk_bell{
- pixel_x = -7
+/obj/structure/chair/stool/bar/directional/north{
+ pixel_y = 4
},
-/turf/open/floor/pod,
-/area/station/service/bar)
+/turf/open/floor/iron{
+ base_icon_state = "basalt0";
+ icon_state = "basalt0";
+ name = "false ash tile"
+ },
+/area/station/commons/lounge)
"Jn" = (
/obj/item/radio/intercom/directional/east,
/turf/open/floor/iron{
@@ -1050,8 +1012,7 @@
},
/area/station/commons/lounge)
"Kh" = (
-/obj/effect/turf_decal/mining,
-/turf/closed/wall/mineral/titanium/survival,
+/turf/closed/wall,
/area/station/maintenance/department/crew_quarters/bar)
"KA" = (
/obj/structure/chair/stool/bar/directional/west{
@@ -1065,25 +1026,6 @@
/obj/effect/landmark/start/hangover,
/turf/open/floor/pod,
/area/station/commons/lounge)
-"KQ" = (
-/obj/effect/turf_decal/mining/survival{
- dir = 8
- },
-/turf/closed/wall/mineral/titanium/survival,
-/area/station/service/bar/backroom)
-"KR" = (
-/obj/effect/turf_decal/siding/brown{
- dir = 4
- },
-/obj/effect/turf_decal/siding/brown{
- dir = 8
- },
-/obj/structure/chair/stool/bar/directional/east{
- pixel_x = 1;
- pixel_y = 3
- },
-/turf/open/floor/pod,
-/area/station/commons/lounge)
"KT" = (
/obj/structure/window/reinforced/survival_pod/spawner/directional/south,
/obj/effect/turf_decal/siding/brown,
@@ -1105,22 +1047,13 @@
},
/turf/open/floor/pod,
/area/station/commons/lounge)
-"KX" = (
-/obj/effect/turf_decal/mining/survival{
- dir = 4
- },
-/turf/closed/wall/mineral/titanium/survival/pod,
-/area/station/commons/lounge)
"Lw" = (
-/obj/effect/turf_decal/siding/brown{
- dir = 1
- },
-/obj/effect/turf_decal/siding/brown,
-/obj/structure/chair/stool/bar/directional/north{
- pixel_y = 4
- },
/obj/structure/cable,
-/turf/open/floor/pod,
+/turf/open/floor/iron{
+ base_icon_state = "basalt0";
+ icon_state = "basalt0";
+ name = "false ash tile"
+ },
/area/station/commons/lounge)
"LO" = (
/obj/effect/turf_decal/siding/brown{
@@ -1162,16 +1095,6 @@
name = "false ash tile"
},
/area/station/commons/lounge)
-"MW" = (
-/obj/effect/turf_decal/siding/brown{
- dir = 1
- },
-/obj/structure/chair/stool/bar/directional/north{
- pixel_y = 4
- },
-/obj/effect/turf_decal/siding/brown,
-/turf/open/floor/pod,
-/area/station/commons/lounge)
"ND" = (
/obj/structure/rack,
/obj/structure/disposalpipe/segment{
@@ -1233,20 +1156,10 @@
/turf/open/floor/pod,
/area/station/commons/lounge)
"Rd" = (
-/obj/structure/fans,
/obj/item/radio/intercom/directional/north,
-/turf/open/floor/pod,
+/obj/machinery/smartfridge/survival_pod/preloaded,
+/turf/closed/wall/mineral/titanium/survival/pod,
/area/station/service/bar)
-"RS" = (
-/obj/effect/turf_decal/siding/brown/end{
- dir = 1
- },
-/obj/machinery/camera{
- c_tag = "Service Bar North";
- dir = 9
- },
-/turf/open/floor/pod,
-/area/station/commons/lounge)
"SB" = (
/obj/structure/window/reinforced/survival_pod/spawner/directional/west,
/obj/machinery/light/directional/south,
@@ -1270,13 +1183,7 @@
/turf/open/floor/pod,
/area/station/service/bar/backroom)
"Tg" = (
-/obj/effect/turf_decal/siding/brown{
- dir = 1
- },
-/obj/effect/turf_decal/siding/brown{
- dir = 1
- },
-/obj/effect/turf_decal/siding/brown/corner,
+/obj/structure/cable,
/turf/open/floor/pod,
/area/station/service/bar)
"Ti" = (
@@ -1289,7 +1196,7 @@
/turf/open/floor/pod,
/area/station/commons/lounge)
"TB" = (
-/turf/closed/wall/mineral/titanium/survival,
+/turf/closed/wall,
/area/station/maintenance/starboard/lesser)
"Uo" = (
/obj/structure/window/reinforced/survival_pod/spawner/directional/south,
@@ -1306,29 +1213,11 @@
/obj/structure/cable,
/turf/open/floor/pod,
/area/station/service/bar/backroom)
-"Vp" = (
-/obj/effect/turf_decal/siding/brown{
- dir = 1
- },
-/obj/effect/turf_decal/siding/brown,
-/obj/structure/chair/stool/bar/directional/north{
- pixel_y = 4
- },
-/obj/effect/landmark/start/hangover,
-/turf/open/floor/pod,
-/area/station/commons/lounge)
"VB" = (
-/obj/machinery/door/window{
- base_state = "right";
- dir = 4;
- icon_state = "right";
- name = "Bar Interior"
+/obj/machinery/door/airlock{
+ name = "Bar"
},
/obj/effect/mapping_helpers/airlock/access/all/service/bar,
-/obj/effect/turf_decal/siding/brown/end{
- dir = 4
- },
-/obj/machinery/light/directional/north,
/turf/open/floor/pod,
/area/station/service/bar)
"VG" = (
@@ -1350,27 +1239,16 @@
},
/area/station/commons/lounge)
"WC" = (
-/obj/structure/table/reinforced,
-/obj/machinery/power/apc/auto_name/directional/west,
-/obj/structure/cable,
-/obj/machinery/reagentgrinder{
- pixel_x = -6;
- pixel_y = 4
- },
/obj/machinery/airalarm/directional/north,
-/turf/open/floor/pod,
+/turf/closed/wall/mineral/titanium/survival/pod,
/area/station/service/bar)
"WT" = (
/obj/effect/turf_decal/siding/brown,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/landmark/start/bartender,
-/turf/open/floor/pod,
-/area/station/service/bar)
-"Xk" = (
-/obj/effect/turf_decal/siding/brown{
- dir = 9
+/obj/structure/desk_bell{
+ pixel_x = -7
},
-/obj/structure/cable,
+/obj/structure/table/reinforced/rglass,
/turf/open/floor/pod,
/area/station/service/bar)
"Xv" = (
@@ -1390,22 +1268,6 @@
name = "false ash tile"
},
/area/station/commons/lounge)
-"XK" = (
-/obj/effect/turf_decal/siding/brown/corner{
- dir = 4
- },
-/obj/effect/turf_decal/siding/brown{
- dir = 10
- },
-/obj/structure/displaycase{
- alert = 0;
- desc = "A display case containing an expensive forgery, probably.";
- pixel_y = -4;
- req_access = list("mining");
- start_showpiece_type = /obj/item/fakeartefact
- },
-/turf/open/floor/pod,
-/area/station/commons/lounge)
"Yk" = (
/obj/machinery/door/window/survival_pod,
/obj/effect/turf_decal/siding/brown,
@@ -1424,6 +1286,7 @@
},
/area/station/commons/lounge)
"YP" = (
+/obj/machinery/camera/directional/east,
/turf/open/floor/iron{
base_icon_state = "basalt5";
icon_state = "basalt5";
@@ -1444,6 +1307,10 @@
/area/station/service/bar/backroom)
"ZX" = (
/obj/machinery/computer/security/telescreen/entertainment/directional/north,
+/obj/machinery/jukebox{
+ pixel_x = -1;
+ pixel_y = -2
+ },
/turf/open/floor/iron{
base_icon_state = "basalt0";
icon_state = "basalt0";
@@ -1499,7 +1366,7 @@ EK
EK
CU
hS
-KX
+ET
jN
xc
DX
@@ -1522,12 +1389,12 @@ EK
EK
"}
(6,1,1) = {"
-lw
-qB
-KR
-tl
-dX
-XK
+wY
+wY
+wY
+aH
+wY
+wY
aH
Ww
OA
@@ -1536,12 +1403,12 @@ EK
EK
"}
(7,1,1) = {"
-rR
+wY
vu
-vY
+It
nh
It
-MW
+wY
fg
Yy
nq
@@ -1551,7 +1418,7 @@ EK
"}
(8,1,1) = {"
WC
-Xk
+VB
hm
lF
eR
@@ -1565,11 +1432,11 @@ EK
"}
(9,1,1) = {"
Rd
-Ae
+qS
qS
WT
-vY
-Vp
+ci
+wY
aH
HS
KA
@@ -1583,7 +1450,7 @@ Ae
Fr
sK
vY
-ci
+wY
fs
HS
uy
@@ -1596,8 +1463,8 @@ cG
Tg
Ea
gc
-vY
-Vp
+eR
+wY
hZ
AP
ND
@@ -1606,12 +1473,12 @@ ak
EK
"}
(12,1,1) = {"
-lo
+rR
VB
-vY
+Ft
us
-hN
-Ec
+It
+wY
VG
HS
MM
@@ -1621,11 +1488,11 @@ EK
"}
(13,1,1) = {"
lw
-RS
+wY
qd
Ci
Ci
-il
+wY
wC
EC
mo
@@ -1648,12 +1515,12 @@ eM
EK
"}
(15,1,1) = {"
-sf
-KQ
-sf
-sf
-KQ
-sf
+nF
+nF
+nF
+nF
+nF
+nF
tn
BV
OA
@@ -1662,12 +1529,12 @@ rp
EK
"}
(16,1,1) = {"
-sf
+nF
Bq
zn
Xv
mH
-Ft
+nF
KU
wT
OA
@@ -1698,7 +1565,7 @@ Db
TB
Gt
TB
-wY
+hN
TB
TB
EK
diff --git a/_maps/~monkestation/RandomEngines/BoxStation/empty.dmm b/_maps/~monkestation/RandomEngines/BoxStation/empty.dmm
index b661e8368595..70ab6bba77b0 100644
--- a/_maps/~monkestation/RandomEngines/BoxStation/empty.dmm
+++ b/_maps/~monkestation/RandomEngines/BoxStation/empty.dmm
@@ -47,7 +47,7 @@
},
/obj/effect/mapping_helpers/airlock/access/all/engineering/general,
/turf/open/floor/plating,
-/area/station/maintenance/department/engine)
+/area/station/maintenance/department/engineering/central)
"m" = (
/obj/structure/lattice/catwalk,
/turf/open/space/basic,
@@ -78,7 +78,7 @@
},
/obj/effect/spawner/structure/window/reinforced/plasma,
/turf/open/floor/plating,
-/area/station/maintenance/department/engine)
+/area/station/maintenance/department/engineering/central)
"A" = (
/obj/structure/lattice,
/turf/open/space/basic,
@@ -88,7 +88,7 @@
/area/station/engineering/main)
"C" = (
/turf/closed/wall/r_wall,
-/area/station/maintenance/department/engine)
+/area/station/maintenance/department/engineering/central)
"D" = (
/obj/machinery/light/directional/north,
/obj/machinery/airalarm/directional/north,
@@ -167,7 +167,7 @@
"Z" = (
/obj/effect/spawner/structure/window/reinforced/plasma,
/turf/open/floor/plating,
-/area/station/maintenance/department/engine)
+/area/station/maintenance/department/engineering/central)
(1,1,1) = {"
R
@@ -875,7 +875,7 @@ Z
l
z
C
-C
+a
a
a
a
@@ -902,7 +902,6 @@ f
f
f
f
-f
C
a
a
@@ -911,6 +910,7 @@ a
a
a
a
+a
R
r
r
@@ -930,7 +930,6 @@ f
f
f
f
-f
C
a
a
@@ -939,6 +938,7 @@ a
a
a
a
+a
R
f
f
@@ -958,17 +958,17 @@ f
f
f
f
-f
C
-R
-R
-R
-R
-Y
-Y
-Y
-R
-A
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
A
A
A
diff --git a/_maps/~monkestation/RandomEngines/BoxStation/particle_accelerator.dmm b/_maps/~monkestation/RandomEngines/BoxStation/particle_accelerator.dmm
index 6fe34c60bd9e..32de13887c45 100644
--- a/_maps/~monkestation/RandomEngines/BoxStation/particle_accelerator.dmm
+++ b/_maps/~monkestation/RandomEngines/BoxStation/particle_accelerator.dmm
@@ -47,8 +47,9 @@
/turf/open/floor/plating/airless,
/area/space/nearstation)
"dV" = (
+/obj/structure/foamedmetal,
/turf/open/floor/plating,
-/area/station/maintenance/department/engine)
+/area/station/maintenance/department/engineering/central)
"fX" = (
/obj/effect/turf_decal/stripes/line,
/obj/effect/turf_decal/stripes/line{
@@ -144,7 +145,7 @@
"il" = (
/obj/effect/spawner/structure/window/reinforced/plasma,
/turf/open/floor/plating,
-/area/station/maintenance/department/engine)
+/area/station/maintenance/department/engineering/central)
"iV" = (
/obj/effect/turf_decal/tile/yellow/fourcorners,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -248,7 +249,7 @@
},
/obj/effect/spawner/structure/window/reinforced/plasma,
/turf/open/floor/plating,
-/area/station/maintenance/department/engine)
+/area/station/maintenance/department/engineering/central)
"os" = (
/obj/machinery/power/emitter{
dir = 1
@@ -445,7 +446,7 @@
},
/obj/effect/mapping_helpers/airlock/access/all/engineering/general,
/turf/open/floor/plating,
-/area/station/maintenance/department/engine)
+/area/station/maintenance/department/engineering/central)
"zF" = (
/obj/machinery/door/airlock/engineering/glass{
name = "Engine SMES Room"
@@ -810,7 +811,7 @@
/area/space/nearstation)
"Zx" = (
/turf/closed/wall/r_wall,
-/area/station/maintenance/department/engine)
+/area/station/maintenance/department/engineering/central)
"ZH" = (
/obj/effect/turf_decal/stripes/line{
dir = 8
@@ -1595,9 +1596,9 @@ kk
kk
kk
kk
+kk
FS
GW
-GW
wX
GW
wX
@@ -1624,7 +1625,7 @@ GW
GW
GW
GW
-wX
+GW
wX
wX
wX
diff --git a/_maps/~monkestation/RandomEngines/BoxStation/sm_teg.dmm b/_maps/~monkestation/RandomEngines/BoxStation/sm_teg.dmm
index 986380fd08a2..67298b8c7ad4 100644
--- a/_maps/~monkestation/RandomEngines/BoxStation/sm_teg.dmm
+++ b/_maps/~monkestation/RandomEngines/BoxStation/sm_teg.dmm
@@ -17,14 +17,14 @@
/obj/effect/mapping_helpers/airlock/access/all/engineering/general,
/obj/effect/mapping_helpers/airlock/cyclelink_helper,
/obj/machinery/atmospherics/pipe/smart/simple/orange/visible,
-/turf/open/floor/iron/dark/textured,
+/turf/open/floor/iron/dark/textured_large,
/area/station/engineering/main)
"bi" = (
/obj/effect/turf_decal/stripes/corner{
dir = 1
},
-/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{
- dir = 10
+/obj/machinery/atmospherics/pipe/smart/manifold/orange/visible{
+ dir = 4
},
/turf/open/floor/iron/dark,
/area/station/engineering/supermatter/room)
@@ -63,13 +63,15 @@
/turf/open/floor/iron/dark,
/area/station/engineering/supermatter/room)
"cV" = (
+/obj/structure/foamedmetal,
/turf/open/floor/plating,
-/area/station/maintenance/department/engine)
+/area/station/maintenance/department/engineering/central)
"db" = (
/obj/effect/turf_decal/stripes/line{
dir = 1
},
/obj/machinery/light/directional/north,
+/obj/machinery/status_display/evac/directional/north,
/obj/machinery/atmospherics/components/unary/portables_connector/visible/layer4{
dir = 4
},
@@ -84,23 +86,17 @@
/turf/open/floor/iron/dark,
/area/station/engineering/supermatter/room)
"dL" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/effect/turf_decal/stripes/line,
/obj/structure/cable/layer1,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/structure/cable,
-/turf/open/floor/iron/dark,
+/turf/open/floor/iron/dark/smooth_large,
/area/station/engineering/main)
"dX" = (
-/obj/effect/turf_decal/stripes/end{
- dir = 4
- },
+/obj/machinery/light/small/directional/east,
/obj/machinery/camera/autoname/directional/east,
/obj/structure/tank_holder/oxygen/yellow,
-/turf/open/floor/iron/dark,
+/turf/open/floor/iron/dark/smooth_large,
/area/station/engineering/main)
"eq" = (
/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible,
@@ -140,13 +136,25 @@
/area/station/engineering/supermatter/room)
"eU" = (
/obj/effect/spawner/structure/window/reinforced/plasma,
-/obj/machinery/atmospherics/pipe/smart/simple/pink/visible,
+/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible,
/obj/machinery/door/poddoor/shutters/radiation/preopen{
id = "eng_burn";
name = "Burn Chamber Radiation Shutters"
},
/turf/open/floor/plating,
/area/station/engineering/supermatter/room)
+"eZ" = (
+/obj/effect/turf_decal/stripes/end,
+/obj/machinery/camera/directional/east{
+ c_tag = "Engineering Supermatter Chamber";
+ name = "engineering camera";
+ network = list("engine")
+ },
+/obj/structure/window/reinforced/plasma/spawner/directional/south,
+/obj/structure/cable,
+/obj/machinery/power/energy_accumulator/tesla_coil/anchored,
+/turf/open/floor/plating,
+/area/station/engineering/supermatter)
"fw" = (
/obj/effect/turf_decal/stripes/line{
dir = 8
@@ -170,7 +178,7 @@
/turf/open/floor/iron/dark,
/area/station/engineering/supermatter/room)
"gf" = (
-/obj/machinery/atmospherics/pipe/smart/simple/pink/visible{
+/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{
dir = 10
},
/turf/open/floor/iron/dark,
@@ -189,7 +197,7 @@
dir = 1
},
/obj/machinery/atmospherics/pipe/smart/simple/orange/visible,
-/turf/open/floor/iron/dark/textured,
+/turf/open/floor/iron/dark/textured_large,
/area/station/engineering/main)
"gu" = (
/obj/structure/lattice/catwalk,
@@ -198,6 +206,11 @@
},
/turf/open/space/basic,
/area/space/nearstation)
+"gK" = (
+/obj/structure/cable/layer1,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/iron/dark,
+/area/station/engineering/supermatter/room)
"gQ" = (
/obj/effect/turf_decal/stripes/line{
dir = 8
@@ -230,8 +243,8 @@
/turf/open/floor/plating,
/area/station/engineering/main)
"hG" = (
-/obj/machinery/atmospherics/components/binary/pump{
- name = "Cold"
+/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{
+ dir = 10
},
/turf/open/floor/iron/dark,
/area/station/engineering/supermatter/room)
@@ -247,7 +260,7 @@
dir = 8
},
/obj/machinery/door/poddoor/shutters/radiation/preopen{
- id = "engsm";
+ id = "eng_sm";
name = "Radiation Chamber Shutters"
},
/turf/open/floor/plating,
@@ -268,7 +281,7 @@
/turf/open/floor/iron/dark,
/area/station/engineering/main)
"io" = (
-/turf/open/floor/engine,
+/turf/open/floor/engine/vacuum,
/area/station/engineering/supermatter/room)
"it" = (
/obj/effect/turf_decal/stripes/line{
@@ -282,7 +295,9 @@
/turf/open/floor/plating,
/area/station/engineering/supermatter)
"ix" = (
-/obj/machinery/atmospherics/pipe/smart/simple/violet/visible,
+/obj/machinery/atmospherics/components/binary/pump{
+ name = "Gas Director"
+ },
/turf/open/floor/iron/dark,
/area/station/engineering/supermatter/room)
"iC" = (
@@ -307,8 +322,8 @@
/turf/open/floor/plating,
/area/station/engineering/supermatter)
"iV" = (
-/obj/machinery/atmospherics/pipe/smart/simple/pink/visible{
- dir = 6
+/obj/machinery/atmospherics/pipe/smart/manifold/pink/visible{
+ dir = 1
},
/turf/open/floor/iron/dark,
/area/station/engineering/supermatter/room)
@@ -371,20 +386,15 @@
/turf/open/floor/engine,
/area/station/engineering/supermatter)
"ky" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/effect/turf_decal/stripes/line,
-/obj/machinery/light/small/directional/north,
/obj/machinery/firealarm/directional/north{
pixel_x = -5
},
-/turf/open/floor/iron/dark,
+/turf/open/floor/iron/dark/smooth_large,
/area/station/engineering/main)
"kN" = (
/obj/effect/spawner/structure/window/reinforced/plasma,
/turf/open/floor/plating,
-/area/station/maintenance/department/engine)
+/area/station/maintenance/department/engineering/central)
"kV" = (
/obj/machinery/door/airlock/engineering/glass{
name = "Engine SMES Room"
@@ -404,11 +414,7 @@
/turf/open/floor/iron/dark/textured,
/area/station/engineering/main)
"lb" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/effect/turf_decal/stripes/line,
-/turf/open/floor/iron/dark,
+/turf/open/floor/iron/dark/smooth_large,
/area/station/engineering/main)
"lf" = (
/obj/effect/turf_decal/stripes/line{
@@ -428,13 +434,18 @@
/turf/open/floor/engine,
/area/station/engineering/supermatter)
"lm" = (
-/obj/effect/turf_decal/stripes/end{
- dir = 8
- },
+/obj/machinery/light/small/directional/west,
/obj/machinery/camera/autoname/directional/west,
/obj/structure/tank_holder/oxygen/yellow,
-/turf/open/floor/iron/dark,
+/turf/open/floor/iron/dark/smooth_large,
/area/station/engineering/main)
+"lq" = (
+/obj/machinery/atmospherics/components/binary/pump{
+ name = "Waste";
+ dir = 8
+ },
+/turf/open/floor/iron/dark,
+/area/station/engineering/supermatter/room)
"lE" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -445,7 +456,7 @@
/obj/effect/turf_decal/stripes/line{
dir = 1
},
-/obj/machinery/atmospherics/pipe/smart/simple/general/visible/layer4{
+/obj/machinery/atmospherics/pipe/smart/simple/pink/visible/layer4{
dir = 4
},
/obj/machinery/atmospherics/components/unary/portables_connector/visible/layer2{
@@ -454,6 +465,13 @@
/obj/machinery/portable_atmospherics/canister/nitrogen,
/turf/open/floor/iron/dark,
/area/station/engineering/supermatter/room)
+"lQ" = (
+/obj/machinery/atmospherics/pipe/bridge_pipe/pink/visible,
+/obj/machinery/atmospherics/pipe/bridge_pipe/orange/visible{
+ dir = 4
+ },
+/turf/open/floor/iron/dark,
+/area/station/engineering/supermatter/room)
"lS" = (
/obj/structure/lattice,
/obj/machinery/atmospherics/pipe/smart/simple/dark/visible/layer2{
@@ -511,18 +529,27 @@
/obj/effect/turf_decal/stripes/line{
dir = 5
},
+/obj/structure/cable,
/turf/open/floor/plating,
/area/station/engineering/main)
+"mN" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/smart/simple/orange/visible,
+/turf/open/floor/iron/dark,
+/area/station/engineering/supermatter/room)
"mO" = (
/obj/effect/turf_decal/stripes/line{
dir = 9
},
+/obj/item/radio/intercom/directional/west,
/obj/structure/table/reinforced,
-/obj/item/clothing/glasses/meson/engine,
/obj/item/clothing/glasses/meson/engine{
pixel_x = -4;
pixel_y = 8
},
+/obj/item/clothing/glasses/meson/engine,
/turf/open/floor/iron/dark,
/area/station/engineering/supermatter/room)
"mR" = (
@@ -536,7 +563,7 @@
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
dir = 1
},
-/turf/open/floor/engine,
+/turf/open/floor/engine/vacuum,
/area/station/engineering/supermatter/room)
"nT" = (
/obj/effect/turf_decal/stripes/corner{
@@ -562,17 +589,20 @@
/obj/effect/turf_decal/stripes/line{
dir = 5
},
+/obj/item/radio/intercom/directional/east,
/obj/structure/table/reinforced,
-/obj/item/clothing/glasses/meson/engine,
/obj/item/clothing/glasses/meson/engine{
pixel_x = 4;
pixel_y = 8
},
+/obj/item/clothing/glasses/meson/engine,
/turf/open/floor/iron/dark,
/area/station/engineering/supermatter/room)
"ot" = (
/obj/effect/spawner/structure/window/reinforced/plasma,
-/obj/machinery/atmospherics/pipe/smart/simple/orange/visible,
+/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{
+ dir = 6
+ },
/obj/machinery/door/poddoor/shutters/radiation/preopen{
id = "eng_burn";
name = "Burn Chamber Radiation Shutters"
@@ -603,9 +633,9 @@
dir = 1
},
/obj/machinery/light/directional/north,
-/obj/machinery/atmospherics/components/binary/pump{
- name = "Mix to Engine";
- dir = 8
+/obj/machinery/status_display/ai/directional/north,
+/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{
+ dir = 4
},
/turf/open/floor/iron/dark,
/area/station/engineering/supermatter/room)
@@ -650,7 +680,7 @@
/area/station/engineering/supermatter/room)
"rg" = (
/obj/effect/turf_decal/tile/yellow/fourcorners,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron,
/area/station/engineering/main)
"rj" = (
@@ -662,6 +692,7 @@
c_tag = "Engineering - Engine Room, East";
name = "engineering camera"
},
+/obj/machinery/status_display/evac/directional/east,
/obj/machinery/atmospherics/pipe/layer_manifold/cyan/visible,
/turf/open/floor/iron/dark,
/area/station/engineering/supermatter/room)
@@ -669,6 +700,7 @@
/obj/effect/turf_decal/stripes/line{
dir = 9
},
+/obj/structure/cable,
/turf/open/floor/plating,
/area/station/engineering/main)
"ry" = (
@@ -802,6 +834,9 @@
/obj/effect/turf_decal/stripes/line{
dir = 8
},
+/obj/machinery/atmospherics/components/unary/thermomachine/freezer{
+ dir = 4
+ },
/turf/open/floor/iron/dark,
/area/station/engineering/supermatter/room)
"tx" = (
@@ -842,6 +877,7 @@
/obj/effect/turf_decal/stripes/line{
dir = 10
},
+/obj/structure/cable,
/turf/open/floor/plating,
/area/station/engineering/main)
"uI" = (
@@ -853,18 +889,6 @@
"uU" = (
/obj/effect/turf_decal/stripes/line,
/obj/machinery/light/directional/south,
-/obj/machinery/button/door/directional/south{
- id = "engsm";
- name = "Radiation Shutters Control";
- req_access = list("engineering");
- pixel_x = 6
- },
-/obj/machinery/button/door/directional/south{
- id = "sm_vent";
- name = "Supermatter Vent Control";
- req_access = list("engineering");
- pixel_x = -6
- },
/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{
dir = 5
},
@@ -912,11 +936,12 @@
/obj/effect/turf_decal/stripes/corner{
dir = 8
},
+/obj/machinery/atmospherics/pipe/smart/simple/orange/visible,
/turf/open/floor/iron/dark,
/area/station/engineering/supermatter/room)
"vR" = (
/obj/effect/turf_decal/delivery/red,
-/obj/machinery/atmospherics/pipe/layer_manifold/general/visible{
+/obj/machinery/atmospherics/pipe/layer_manifold/pink/visible{
dir = 4
},
/turf/open/floor/iron/dark/smooth_large,
@@ -945,6 +970,13 @@
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
/turf/open/floor/iron/dark,
/area/station/engineering/supermatter/room)
+"wS" = (
+/obj/machinery/atmospherics/components/binary/pump{
+ dir = 8;
+ name = "Waste to Filter"
+ },
+/turf/open/floor/iron/dark,
+/area/station/engineering/supermatter/room)
"xj" = (
/obj/effect/turf_decal/stripes/line{
dir = 8
@@ -1001,6 +1033,11 @@
},
/turf/closed/wall/r_wall,
/area/station/engineering/supermatter)
+"ya" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/structure/sign/delam_procedure/directional/south,
+/turf/open/floor/iron/dark,
+/area/station/engineering/supermatter/room)
"yg" = (
/obj/structure/lattice/catwalk,
/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
@@ -1021,6 +1058,10 @@
},
/obj/machinery/light/directional/east,
/obj/machinery/airalarm/directional/east,
+/obj/effect/mapping_helpers/airalarm/unlocked,
+/obj/machinery/atmospherics/components/unary/thermomachine/heater{
+ dir = 8
+ },
/turf/open/floor/iron/dark,
/area/station/engineering/supermatter/room)
"yx" = (
@@ -1038,9 +1079,8 @@
/turf/open/space/basic,
/area/space/nearstation)
"zd" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
- dir = 4
- },
+/obj/machinery/atmospherics/pipe/smart/simple/pink/visible,
+/obj/machinery/meter,
/turf/open/floor/iron/dark,
/area/station/engineering/supermatter/room)
"zf" = (
@@ -1053,9 +1093,10 @@
req_access = list("engineering")
},
/obj/machinery/camera/directional/north{
- c_tag = "Engineering - Particle Accelerator Chamber";
+ c_tag = "Engineering - Emitters Room";
name = "engineering camera"
},
+/obj/structure/cable,
/turf/open/floor/plating,
/area/station/engineering/main)
"zj" = (
@@ -1078,7 +1119,7 @@
/turf/open/floor/engine,
/area/station/engineering/supermatter)
"Aj" = (
-/obj/effect/turf_decal/stripes/box,
+/obj/effect/turf_decal/stripes/red/box,
/obj/machinery/power/supermatter_crystal/engine,
/turf/open/floor/engine,
/area/station/engineering/supermatter)
@@ -1101,13 +1142,16 @@
/obj/machinery/igniter{
id = "teg_burn_igniter"
},
-/turf/open/floor/engine,
+/turf/open/floor/engine/vacuum,
/area/station/engineering/supermatter/room)
"AE" = (
/obj/effect/turf_decal/stripes/line{
dir = 6
},
/obj/machinery/light/directional/south,
+/obj/machinery/button/delam_scram{
+ pixel_y = -32
+ },
/turf/open/floor/iron/dark,
/area/station/engineering/supermatter/room)
"AH" = (
@@ -1172,6 +1216,7 @@
c_tag = "Engineering - Engine Room, West";
name = "engineering camera"
},
+/obj/machinery/status_display/ai/directional/west,
/obj/machinery/atmospherics/components/trinary/mixer/flipped{
dir = 1
},
@@ -1192,7 +1237,7 @@
},
/obj/effect/mapping_helpers/airlock/access/all/engineering/general,
/obj/effect/mapping_helpers/airlock/cyclelink_helper,
-/turf/open/floor/iron/dark/textured,
+/turf/open/floor/iron/dark/textured_large,
/area/station/engineering/main)
"Cw" = (
/obj/effect/turf_decal/stripes/line,
@@ -1212,6 +1257,7 @@
dir = 8
},
/obj/machinery/airalarm/directional/west,
+/obj/effect/mapping_helpers/airalarm/unlocked,
/obj/structure/table/reinforced,
/obj/item/storage/toolbox/mechanical{
pixel_y = 6
@@ -1238,15 +1284,14 @@
/turf/open/floor/iron/dark,
/area/station/engineering/main)
"DQ" = (
-/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{
- dir = 9
- },
+/obj/machinery/atmospherics/pipe/smart/manifold/orange/visible,
/turf/open/floor/iron/dark,
/area/station/engineering/supermatter/room)
"DV" = (
/obj/effect/turf_decal/stripes/line{
dir = 6
},
+/obj/structure/sign/warning/fire/directional/south,
/turf/open/floor/iron/dark,
/area/station/engineering/supermatter/room)
"Ee" = (
@@ -1291,7 +1336,7 @@
},
/obj/effect/mapping_helpers/airlock/access/all/engineering/general,
/turf/open/floor/plating,
-/area/station/maintenance/department/engine)
+/area/station/maintenance/department/engineering/central)
"Ew" = (
/obj/effect/turf_decal/stripes/line{
dir = 8
@@ -1303,14 +1348,18 @@
/turf/open/floor/iron/dark,
/area/station/engineering/supermatter/room)
"EY" = (
-/obj/machinery/atmospherics/pipe/smart/simple/violet/visible{
- dir = 9
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
},
-/turf/open/floor/iron/dark,
-/area/station/engineering/supermatter/room)
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/structure/cable,
+/turf/open/floor/plating,
+/area/station/engineering/supermatter)
"Fc" = (
/obj/machinery/atmospherics/components/binary/pump{
- name = "Burn to Hot";
+ name = "Burn to Hot Loop";
dir = 1
},
/turf/open/floor/iron/dark,
@@ -1353,6 +1402,9 @@
pixel_y = -6;
name = "Burn Chamber Ignition Switch"
},
+/obj/machinery/atmospherics/components/unary/thermomachine/heater{
+ dir = 8
+ },
/turf/open/floor/iron/dark,
/area/station/engineering/supermatter/room)
"FY" = (
@@ -1375,8 +1427,8 @@
/area/station/engineering/supermatter/room)
"Gd" = (
/obj/effect/turf_decal/stripes/line,
-/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{
- dir = 9
+/obj/machinery/atmospherics/pipe/smart/manifold/orange/visible{
+ dir = 8
},
/turf/open/floor/iron/dark,
/area/station/engineering/supermatter/room)
@@ -1392,12 +1444,8 @@
/turf/open/floor/iron/dark,
/area/station/engineering/main)
"Gk" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/effect/turf_decal/stripes/line,
/obj/machinery/atmospherics/pipe/smart/simple/orange/visible,
-/turf/open/floor/iron/dark,
+/turf/open/floor/iron/dark/smooth_large,
/area/station/engineering/main)
"Gm" = (
/obj/effect/turf_decal/delivery/red,
@@ -1424,9 +1472,7 @@
/obj/effect/turf_decal/stripes/line{
dir = 10
},
-/obj/machinery/button/delam_scram{
- pixel_y = -32
- },
+/obj/machinery/incident_display/delam/directional/south,
/turf/open/floor/iron/dark,
/area/station/engineering/supermatter/room)
"GE" = (
@@ -1441,10 +1487,10 @@
/obj/effect/turf_decal/stripes/line{
dir = 5
},
-/obj/machinery/atmospherics/pipe/smart/simple/general/visible/layer2{
+/obj/machinery/atmospherics/pipe/smart/simple/pink/visible/layer2{
dir = 4
},
-/obj/machinery/atmospherics/pipe/smart/simple/general/visible/layer4{
+/obj/machinery/atmospherics/pipe/smart/simple/pink/visible/layer4{
dir = 4
},
/obj/machinery/atmospherics/components/unary/portables_connector/visible{
@@ -1504,7 +1550,7 @@
/obj/machinery/atmospherics/pipe/smart/simple/dark/visible/layer4{
dir = 5
},
-/obj/machinery/atmospherics/components/binary/valve/digital/on{
+/obj/machinery/atmospherics/components/binary/pump{
name = "Cold Loop to Space";
dir = 4
},
@@ -1560,6 +1606,11 @@
},
/turf/open/floor/iron/dark,
/area/station/engineering/supermatter/room)
+"Jp" = (
+/obj/structure/window/reinforced/plasma/spawner/directional/south,
+/obj/effect/turf_decal/delivery/red,
+/turf/open/floor/iron/dark/smooth_large,
+/area/station/engineering/supermatter)
"Jq" = (
/obj/effect/turf_decal/tile/yellow/fourcorners,
/obj/machinery/camera/autoname/directional/east,
@@ -1570,8 +1621,14 @@
/turf/open/floor/iron/dark,
/area/station/engineering/main)
"Ju" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
- dir = 8
+/obj/machinery/atmospherics/components/binary/pump{
+ name = "Mix to TEG Hot Loop"
+ },
+/turf/open/floor/iron/dark,
+/area/station/engineering/supermatter/room)
+"Kb" = (
+/obj/machinery/atmospherics/pipe/smart/manifold/pink/visible{
+ dir = 4
},
/turf/open/floor/iron/dark,
/area/station/engineering/supermatter/room)
@@ -1605,15 +1662,12 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/components/binary/pump{
- name = "Mix to SM Loop"
+ name = "Gas Director"
},
/turf/open/floor/iron/dark,
/area/station/engineering/supermatter/room)
"KS" = (
-/obj/machinery/atmospherics/components/binary/pump{
- name = "Cold";
- dir = 8
- },
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
/turf/open/floor/iron/dark,
/area/station/engineering/supermatter/room)
"Ln" = (
@@ -1660,10 +1714,10 @@
/turf/open/floor/plating/airless,
/area/space/nearstation)
"ML" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
+/obj/machinery/atmospherics/components/unary/vent_pump/high_volume/on{
dir = 1
},
-/turf/open/floor/engine,
+/turf/open/floor/engine/vacuum,
/area/station/engineering/supermatter/room)
"MM" = (
/obj/structure/lattice,
@@ -1686,11 +1740,9 @@
/turf/open/floor/iron/dark,
/area/station/engineering/supermatter/room)
"Np" = (
-/obj/effect/turf_decal/stripes/end{
- dir = 8
- },
+/obj/machinery/light/small/directional/west,
/obj/structure/closet/radiation,
-/turf/open/floor/iron/dark,
+/turf/open/floor/iron/dark/smooth_large,
/area/station/engineering/main)
"NA" = (
/obj/structure/lattice/catwalk,
@@ -1703,7 +1755,7 @@
},
/obj/effect/spawner/structure/window/reinforced/plasma,
/turf/open/floor/plating,
-/area/station/maintenance/department/engine)
+/area/station/maintenance/department/engineering/central)
"NW" = (
/obj/effect/turf_decal/stripes/line,
/obj/effect/turf_decal/stripes/line{
@@ -1719,6 +1771,8 @@
/obj/effect/turf_decal/stripes/line{
dir = 4
},
+/obj/machinery/airalarm/directional/east,
+/obj/effect/mapping_helpers/airalarm/unlocked,
/obj/structure/table/reinforced,
/obj/item/storage/toolbox/mechanical{
pixel_y = 6
@@ -1761,11 +1815,11 @@
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 1
},
-/turf/open/floor/iron/dark/textured,
+/turf/open/floor/iron/dark/textured_large,
/area/station/engineering/main)
"OL" = (
/obj/effect/turf_decal/stripes/line,
-/obj/machinery/atmospherics/pipe/smart/manifold/pink/visible{
+/obj/machinery/atmospherics/pipe/smart/manifold/yellow/visible{
dir = 4
},
/obj/machinery/meter,
@@ -1798,8 +1852,8 @@
/obj/effect/turf_decal/stripes/corner{
dir = 4
},
-/obj/machinery/atmospherics/pipe/smart/manifold/pink/visible{
- dir = 1
+/obj/machinery/atmospherics/pipe/smart/simple/pink/visible{
+ dir = 4
},
/turf/open/floor/iron/dark,
/area/station/engineering/supermatter/room)
@@ -1812,7 +1866,7 @@
id = "burn_vent";
name = "Burn Chamber Vent"
},
-/turf/open/floor/engine,
+/turf/open/floor/engine/vacuum,
/area/station/engineering/supermatter/room)
"Qy" = (
/obj/effect/turf_decal/stripes/line{
@@ -1822,6 +1876,17 @@
/obj/structure/closet/radiation,
/turf/open/floor/iron/dark,
/area/station/engineering/supermatter/room)
+"QM" = (
+/obj/effect/spawner/structure/window/reinforced/plasma,
+/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{
+ dir = 9
+ },
+/obj/machinery/door/poddoor/shutters/radiation/preopen{
+ id = "eng_burn";
+ name = "Burn Chamber Radiation Shutters"
+ },
+/turf/open/floor/plating,
+/area/station/engineering/supermatter/room)
"Rn" = (
/obj/structure/cable/layer1,
/turf/open/floor/iron/dark,
@@ -1848,7 +1913,7 @@
/area/station/engineering/supermatter/room)
"RD" = (
/turf/closed/wall/r_wall,
-/area/station/maintenance/department/engine)
+/area/station/maintenance/department/engineering/central)
"RM" = (
/obj/effect/turf_decal/tile/yellow/fourcorners,
/obj/machinery/light/directional/south,
@@ -1861,7 +1926,7 @@
/obj/effect/turf_decal/stripes/line{
dir = 9
},
-/obj/machinery/atmospherics/pipe/smart/manifold/general/visible{
+/obj/machinery/atmospherics/pipe/smart/manifold/pink/visible{
dir = 1
},
/turf/open/floor/iron/dark,
@@ -1888,7 +1953,6 @@
/area/space/nearstation)
"SE" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/structure/cable/multilayer/connected,
/turf/open/floor/iron/dark,
/area/station/engineering/supermatter/room)
@@ -1916,10 +1980,10 @@
dir = 4
},
/obj/machinery/atmospherics/components/binary/pump/layer2{
- name = "Ports to Space Loop"
+ name = "Ports to Cold Loop"
},
/obj/machinery/atmospherics/components/binary/pump/layer4{
- name = "Ports to Space Loop"
+ name = "Ports to Cold Loop"
},
/turf/open/floor/iron/dark,
/area/station/engineering/supermatter/room)
@@ -1929,7 +1993,7 @@
},
/obj/machinery/atmospherics/components/binary/pump{
dir = 8;
- name = "Hot to Waste"
+ name = "Hot Loop to Waste"
},
/turf/open/floor/iron/dark,
/area/station/engineering/supermatter/room)
@@ -1967,14 +2031,17 @@
/turf/closed/wall/r_wall,
/area/station/engineering/supermatter)
"Uf" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold/orange/visible{
+ dir = 8
+ },
/turf/open/floor/iron/dark,
/area/station/engineering/supermatter/room)
"Uo" = (
-/obj/effect/turf_decal/stripes/line,
-/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{
- dir = 6
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/visible{
+ dir = 4
},
/turf/open/floor/iron/dark,
/area/station/engineering/supermatter/room)
@@ -1997,7 +2064,7 @@
/area/station/engineering/supermatter/room)
"Ux" = (
/obj/effect/turf_decal/tile/yellow/fourcorners,
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
/turf/open/floor/iron,
/area/station/engineering/main)
"UC" = (
@@ -2025,13 +2092,17 @@
/turf/open/floor/iron/dark,
/area/station/engineering/supermatter/room)
"Vf" = (
-/obj/effect/spawner/structure/window/reinforced/plasma,
+/obj/effect/turf_decal/stripes/end,
+/obj/structure/window/reinforced/plasma/spawner/directional/south,
+/obj/structure/cable,
+/obj/machinery/power/energy_accumulator/tesla_coil/anchored,
/turf/open/floor/plating,
/area/station/engineering/supermatter)
"Vg" = (
/obj/effect/turf_decal/stripes/line{
dir = 6
},
+/obj/structure/cable,
/turf/open/floor/plating,
/area/station/engineering/main)
"Vr" = (
@@ -2045,11 +2116,12 @@
dir = 5
},
/obj/structure/extinguisher_cabinet/directional/north,
+/obj/machinery/space_heater,
/turf/open/floor/iron/dark,
/area/station/engineering/supermatter/room)
"Vv" = (
/obj/effect/turf_decal/tile/yellow/fourcorners,
-/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
dir = 1
},
/turf/open/floor/iron,
@@ -2069,9 +2141,9 @@
/obj/effect/turf_decal/stripes/line{
dir = 4
},
-/obj/machinery/atmospherics/components/binary/valve/digital/on{
+/obj/machinery/atmospherics/components/binary/pump{
name = "Space to Cold Loop";
- dir = 4
+ dir = 8
},
/turf/open/floor/iron/dark,
/area/station/engineering/supermatter/room)
@@ -2082,7 +2154,7 @@
/area/station/engineering/supermatter/room)
"VQ" = (
/obj/effect/turf_decal/stripes/line,
-/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{
+/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{
dir = 10
},
/obj/machinery/meter,
@@ -2145,9 +2217,6 @@
dir = 6
},
/obj/machinery/light/small/directional/east,
-/obj/machinery/atmospherics/components/unary/thermomachine/freezer{
- dir = 1
- },
/turf/open/floor/iron/dark,
/area/station/engineering/supermatter/room)
"XF" = (
@@ -2158,15 +2227,16 @@
/turf/open/floor/iron/dark,
/area/station/engineering/supermatter/room)
"XG" = (
-/obj/effect/turf_decal/delivery/red,
-/turf/open/floor/iron/dark/smooth_large,
-/area/station/engineering/supermatter)
-"XM" = (
-/obj/effect/turf_decal/stripes/end{
+/obj/machinery/atmospherics/components/binary/valve/digital{
+ name = "SM Loop Cooling";
dir = 4
},
-/obj/structure/closet/radiation,
/turf/open/floor/iron/dark,
+/area/station/engineering/supermatter/room)
+"XM" = (
+/obj/machinery/light/small/directional/east,
+/obj/structure/closet/radiation,
+/turf/open/floor/iron/dark/smooth_large,
/area/station/engineering/main)
"Yh" = (
/obj/structure/lattice,
@@ -2233,15 +2303,10 @@
/turf/open/floor/iron/dark,
/area/station/engineering/supermatter/room)
"Zk" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/effect/turf_decal/stripes/line,
-/obj/machinery/light/small/directional/north,
/obj/machinery/firealarm/directional/north{
pixel_x = 5
},
-/turf/open/floor/iron/dark,
+/turf/open/floor/iron/dark/smooth_large,
/area/station/engineering/main)
"Zl" = (
/obj/machinery/atmospherics/pipe/bridge_pipe/violet/visible,
@@ -2253,15 +2318,23 @@
"Zo" = (
/obj/effect/turf_decal/stripes/line,
/obj/machinery/light/directional/south,
-/obj/machinery/incident_display/delam/directional/south,
+/obj/machinery/button/door/directional/south{
+ id = "sm_vent";
+ name = "Supermatter Vent Control";
+ req_access = list("engineering");
+ pixel_x = 6
+ },
+/obj/machinery/button/door/directional/south{
+ id = "eng_sm";
+ name = "Radiation Shutters Control";
+ req_access = list("engineering");
+ pixel_x = -6
+ },
/turf/open/floor/iron/dark,
/area/station/engineering/supermatter/room)
"ZK" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/machinery/atmospherics/components/binary/pump{
- name = "Waste"
+/obj/machinery/atmospherics/pipe/smart/manifold/orange/visible{
+ dir = 1
},
/turf/open/floor/iron/dark,
/area/station/engineering/supermatter/room)
@@ -2269,15 +2342,16 @@
/obj/effect/turf_decal/stripes/line{
dir = 8
},
-/obj/machinery/atmospherics/pipe/smart/simple/general/visible,
+/obj/machinery/atmospherics/pipe/smart/simple/pink/visible,
/turf/open/floor/iron/dark,
/area/station/engineering/supermatter/room)
"ZX" = (
/obj/effect/turf_decal/stripes/line{
dir = 1
},
-/obj/machinery/atmospherics/components/binary/valve/digital{
- dir = 4
+/obj/machinery/atmospherics/components/binary/pump{
+ name = "Mix to SM Loop";
+ dir = 8
},
/turf/open/floor/iron/dark,
/area/station/engineering/supermatter/room)
@@ -2569,13 +2643,13 @@ GE
RM
TQ
Zk
-ev
+TQ
TI
xu
UX
-zd
-UX
UX
+XG
+XG
zj
eL
sA
@@ -2603,9 +2677,9 @@ XF
aU
aU
iV
-YV
+Kb
Tm
-YV
+zd
Go
Fr
Tm
@@ -2623,7 +2697,7 @@ As
As
AH
Vv
-ev
+TQ
lb
TQ
oB
@@ -2635,7 +2709,7 @@ Dj
Zl
ix
sA
-EY
+hQ
LC
gW
MO
@@ -2663,9 +2737,9 @@ qa
dp
vD
Kp
-UX
-LC
-kn
+wS
+lq
+ya
fy
fy
sW
@@ -2684,14 +2758,14 @@ TQ
TQ
TQ
db
-UX
+KS
aU
mw
Bq
vn
Iu
-ZK
Kg
+Uo
KB
AE
fy
@@ -2747,9 +2821,9 @@ Ni
sG
DV
fy
+EY
iR
it
-iR
Vf
Ln
xB
@@ -2776,9 +2850,9 @@ HG
In
uh
Gg
+Gg
Gm
-XG
-Vf
+Jp
kv
Aj
zR
@@ -2803,10 +2877,10 @@ Tw
BE
Gv
fy
+EY
iR
it
-iR
-Vf
+eZ
Ae
Ef
Pa
@@ -2827,7 +2901,7 @@ ZX
UX
aU
FZ
-zj
+ZK
pN
uU
fy
@@ -2852,10 +2926,10 @@ TQ
TQ
TQ
oO
-UX
+wR
aU
mg
-Tm
+lQ
ci
nT
Rz
@@ -2881,7 +2955,7 @@ TQ
Wc
IW
UX
-aU
+gK
TS
VQ
kg
@@ -2903,12 +2977,12 @@ As
As
jc
Vv
-ev
+TQ
lb
TQ
UW
Yr
-wR
+KS
SE
Ur
VM
@@ -2937,17 +3011,17 @@ gm
xD
DQ
UX
-Uf
+UX
Vy
Yt
TM
Mk
WR
WB
-hG
+WB
rB
UX
-Uo
+kn
ot
nr
oZ
@@ -2961,22 +3035,22 @@ rg
sC
TQ
ky
-ev
+TQ
TI
-UX
-UX
+hG
+Ga
Ju
-KS
+WT
vG
-tw
+mN
bi
Ga
Ga
Fc
WT
-Ga
+Uf
Gd
-IB
+QM
AB
PM
Xb
@@ -3081,7 +3155,7 @@ tU
tU
tU
tU
-vj
+tU
vj
Yh
UC
diff --git a/_maps/~monkestation/RandomEngines/BoxStation/supermatter.dmm b/_maps/~monkestation/RandomEngines/BoxStation/supermatter.dmm
index 5c9c33e95dc2..828e93827900 100644
--- a/_maps/~monkestation/RandomEngines/BoxStation/supermatter.dmm
+++ b/_maps/~monkestation/RandomEngines/BoxStation/supermatter.dmm
@@ -108,6 +108,12 @@
},
/turf/open/floor/engine,
/area/station/engineering/supermatter/room)
+"cZ" = (
+/obj/effect/turf_decal/stripes/red/line{
+ dir = 1
+ },
+/turf/open/floor/engine,
+/area/station/engineering/supermatter)
"dw" = (
/obj/effect/turf_decal/stripes/line{
dir = 4
@@ -153,7 +159,7 @@
},
/obj/effect/mapping_helpers/airlock/access/all/engineering/general,
/turf/open/floor/plating,
-/area/station/maintenance/department/engine)
+/area/station/maintenance/department/engineering/central)
"ez" = (
/obj/structure/reflector/box/anchored{
dir = 1
@@ -249,7 +255,6 @@
/area/station/engineering/main)
"hr" = (
/obj/effect/turf_decal/delivery,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible,
/turf/open/floor/iron/dark/smooth_large,
/area/station/engineering/supermatter/room)
"hA" = (
@@ -279,7 +284,7 @@
"ik" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/structure/cable,
-/turf/open/floor/catwalk_floor/iron_dark,
+/turf/open/floor/plating,
/area/station/engineering/supermatter/room)
"iy" = (
/obj/effect/turf_decal/stripes/line{
@@ -357,7 +362,6 @@
/turf/open/floor/plating,
/area/station/engineering/main)
"ld" = (
-/obj/machinery/meter,
/obj/effect/turf_decal/stripes/line,
/obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible,
/turf/open/floor/engine,
@@ -372,6 +376,15 @@
/obj/structure/girder,
/turf/open/floor/engine,
/area/station/engineering/supermatter/room)
+"lM" = (
+/obj/effect/turf_decal/stripes/red/line{
+ dir = 9
+ },
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/station/engineering/supermatter)
"mb" = (
/obj/structure/cable,
/turf/open/floor/engine,
@@ -433,6 +446,10 @@
},
/turf/open/floor/iron/dark,
/area/station/engineering/supermatter/room)
+"oi" = (
+/obj/effect/spawner/structure/window/reinforced/plasma,
+/turf/open/floor/plating,
+/area/station/engineering/main)
"ou" = (
/obj/machinery/light/small/directional/south,
/obj/structure/cable,
@@ -443,7 +460,7 @@
/turf/open/floor/iron/dark,
/area/station/engineering/main)
"oS" = (
-/obj/effect/turf_decal/stripes/box,
+/obj/effect/turf_decal/stripes/red/box,
/obj/machinery/power/supermatter_crystal/engine,
/turf/open/floor/engine,
/area/station/engineering/supermatter)
@@ -476,6 +493,9 @@
/turf/open/floor/engine,
/area/station/engineering/supermatter/room)
"pJ" = (
+/obj/effect/turf_decal/stripes/red/line{
+ dir = 10
+ },
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 4
},
@@ -488,13 +508,6 @@
},
/turf/open/floor/engine,
/area/station/engineering/supermatter/room)
-"pU" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/turf/open/floor/engine,
-/area/station/engineering/supermatter/room)
"pW" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/purple/visible,
/obj/effect/turf_decal/delivery/red,
@@ -514,7 +527,7 @@
/turf/open/floor/iron/dark/textured,
/area/station/engineering/supermatter/room)
"qm" = (
-/turf/open/floor/catwalk_floor/iron_dark,
+/turf/open/floor/plating,
/area/station/engineering/supermatter/room)
"qt" = (
/obj/effect/turf_decal/stripes/line{
@@ -609,7 +622,7 @@
/area/station/engineering/supermatter/room)
"uQ" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/catwalk_floor/iron_dark,
+/turf/open/floor/plating,
/area/station/engineering/supermatter/room)
"uV" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -635,12 +648,6 @@
},
/turf/open/floor/engine,
/area/station/engineering/supermatter/room)
-"wc" = (
-/obj/effect/turf_decal/delivery,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible,
-/obj/machinery/meter,
-/turf/open/floor/iron/dark/smooth_large,
-/area/station/engineering/supermatter/room)
"wE" = (
/obj/item/radio/intercom/directional/east,
/turf/open/floor/engine,
@@ -674,6 +681,9 @@
/turf/open/space/basic,
/area/space/nearstation)
"yF" = (
+/obj/effect/turf_decal/stripes/red/line{
+ dir = 4
+ },
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 4
},
@@ -750,7 +760,7 @@
},
/obj/effect/mapping_helpers/airlock/access/all/engineering/general,
/turf/open/floor/plating,
-/area/station/maintenance/department/engine)
+/area/station/maintenance/department/engineering/central)
"AT" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/effect/turf_decal/stripes/line,
@@ -1039,7 +1049,7 @@
},
/obj/structure/cable/layer1,
/turf/open/floor/iron/dark/textured,
-/area/station/engineering/supermatter/room)
+/area/station/engineering/main)
"IA" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible,
/obj/structure/cable,
@@ -1047,9 +1057,7 @@
/turf/open/floor/engine,
/area/station/engineering/supermatter/room)
"IC" = (
-/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{
- dir = 4
- },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible,
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/engine,
/area/station/engineering/supermatter/room)
@@ -1080,6 +1088,15 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/engine,
/area/station/engineering/supermatter/room)
+"Kk" = (
+/obj/effect/turf_decal/stripes/red/line{
+ dir = 5
+ },
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 8
+ },
+/turf/open/floor/engine,
+/area/station/engineering/supermatter)
"Kl" = (
/obj/structure/grille,
/turf/open/floor/plating/airless,
@@ -1124,6 +1141,15 @@
},
/turf/open/floor/engine,
/area/station/engineering/supermatter/room)
+"Mj" = (
+/obj/effect/turf_decal/stripes/red/line{
+ dir = 8
+ },
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 8
+ },
+/turf/open/floor/engine,
+/area/station/engineering/supermatter)
"Mu" = (
/obj/effect/turf_decal/stripes/line,
/obj/effect/turf_decal/stripes/line{
@@ -1146,9 +1172,13 @@
/obj/structure/cable,
/turf/open/floor/iron/dark,
/area/station/engineering/main)
+"MM" = (
+/obj/effect/turf_decal/stripes/red/line,
+/turf/open/floor/engine,
+/area/station/engineering/supermatter)
"MT" = (
/turf/closed/wall/r_wall,
-/area/station/maintenance/department/engine)
+/area/station/maintenance/department/engineering/central)
"MV" = (
/turf/open/floor/engine,
/area/station/engineering/supermatter/room)
@@ -1172,7 +1202,7 @@
"NA" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/structure/cable,
-/turf/open/floor/catwalk_floor/iron_dark,
+/turf/open/floor/plating,
/area/station/engineering/supermatter/room)
"NW" = (
/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
@@ -1184,7 +1214,7 @@
"Oj" = (
/obj/effect/spawner/structure/window/reinforced/plasma,
/turf/open/floor/plating,
-/area/station/maintenance/department/engine)
+/area/station/maintenance/department/engineering/central)
"Ok" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible,
/turf/closed/wall/r_wall,
@@ -1204,9 +1234,11 @@
dir = 1
},
/obj/machinery/light_switch/directional/north{
- pixel_x = -8
+ pixel_x = -5
+ },
+/obj/machinery/firealarm/directional/north{
+ pixel_x = 5
},
-/obj/machinery/firealarm/directional/north,
/obj/structure/table/reinforced,
/obj/item/clothing/gloves/color/black,
/obj/item/tank/internals/emergency_oxygen/engi{
@@ -1322,6 +1354,7 @@
"Sf" = (
/obj/effect/turf_decal/stripes/corner,
/obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible,
+/obj/machinery/meter,
/turf/open/floor/engine,
/area/station/engineering/supermatter/room)
"Sh" = (
@@ -1435,7 +1468,7 @@
/area/station/engineering/supermatter/room)
"Vr" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/turf/open/floor/catwalk_floor/iron_dark,
+/turf/open/floor/plating,
/area/station/engineering/supermatter/room)
"VC" = (
/obj/structure/rack,
@@ -1469,7 +1502,7 @@
},
/obj/effect/spawner/structure/window/reinforced/plasma,
/turf/open/floor/plating,
-/area/station/maintenance/department/engine)
+/area/station/maintenance/department/engineering/central)
"Xo" = (
/obj/effect/turf_decal/stripes/line{
dir = 4
@@ -1492,6 +1525,9 @@
/turf/open/floor/engine,
/area/station/engineering/supermatter/room)
"XU" = (
+/obj/effect/turf_decal/stripes/red/line{
+ dir = 6
+ },
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
dir = 8
},
@@ -1521,10 +1557,6 @@
/area/station/engineering/supermatter)
"YW" = (
/obj/effect/turf_decal/bot,
-/obj/machinery/atmospherics/components/unary/portables_connector/visible{
- dir = 1
- },
-/obj/machinery/portable_atmospherics/canister,
/turf/open/floor/iron/dark/smooth_large,
/area/station/engineering/supermatter/room)
"YZ" = (
@@ -1800,12 +1832,12 @@ Kl
xP
"}
(10,1,1) = {"
-BL
-cs
+GP
+oi
Iz
-cs
-BL
-BL
+oi
+GP
+GP
BL
ny
BL
@@ -1944,7 +1976,7 @@ BL
Qi
TL
IC
-wc
+hr
YW
HS
ze
@@ -2004,8 +2036,8 @@ fc
co
kz
XU
-XU
-XU
+Mj
+Kk
Tk
fd
BW
@@ -2031,9 +2063,9 @@ Pd
pv
IK
PZ
-YV
+cZ
oS
-YV
+MM
FL
rr
pW
@@ -2061,7 +2093,7 @@ dy
kz
pJ
yF
-yF
+lM
Kw
CW
iH
@@ -2222,7 +2254,7 @@ xP
(25,1,1) = {"
BL
vH
-pU
+gu
QL
gu
HQ
@@ -2253,7 +2285,7 @@ Oj
Au
WL
MT
-MT
+BL
BL
bF
xv
@@ -2280,9 +2312,9 @@ xP
xP
xP
xP
-xP
MT
UU
+xv
aW
aW
aW
@@ -2308,9 +2340,9 @@ xP
xP
xP
xP
-xP
eb
xv
+xv
OZ
OZ
Ve
@@ -2336,17 +2368,17 @@ xP
xP
xP
xP
-xP
MT
-BL
-BL
-BL
-BL
-BL
-BL
-BL
-BL
-Kd
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
+MT
Kd
Kd
Kd
diff --git a/_maps/~monkestation/RandomEngines/BoxStation/teg.dmm b/_maps/~monkestation/RandomEngines/BoxStation/teg.dmm
index 4a4598097b02..29a94d0a1a0c 100644
--- a/_maps/~monkestation/RandomEngines/BoxStation/teg.dmm
+++ b/_maps/~monkestation/RandomEngines/BoxStation/teg.dmm
@@ -349,7 +349,7 @@
/area/station/engineering/atmospherics_engine)
"md" = (
/turf/closed/wall/r_wall,
-/area/station/maintenance/department/engine)
+/area/station/maintenance/department/engineering/central)
"mh" = (
/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
dir = 4
@@ -560,7 +560,7 @@
},
/obj/effect/spawner/structure/window/reinforced/plasma,
/turf/open/floor/plating,
-/area/station/maintenance/department/engine)
+/area/station/maintenance/department/engineering/central)
"tP" = (
/obj/effect/turf_decal/stripes/line{
dir = 8
@@ -982,9 +982,8 @@
/turf/open/floor/iron/dark,
/area/station/engineering/atmospherics_engine)
"HY" = (
-/obj/structure/sign/warning/secure_area,
-/turf/closed/wall/r_wall,
-/area/station/maintenance/department/engine)
+/turf/open/floor/plating,
+/area/station/maintenance/department/engineering/central)
"Im" = (
/obj/structure/sign/warning/secure_area,
/turf/closed/wall/r_wall,
@@ -1108,7 +1107,7 @@
},
/obj/effect/mapping_helpers/airlock/access/all/engineering/general,
/turf/open/floor/plating,
-/area/station/maintenance/department/engine)
+/area/station/maintenance/department/engineering/central)
"Mu" = (
/obj/machinery/atmospherics/components/binary/valve/digital{
name = "Space to Cold Loop"
@@ -1154,7 +1153,7 @@
"Ot" = (
/obj/effect/spawner/structure/window/reinforced/plasma,
/turf/open/floor/plating,
-/area/station/maintenance/department/engine)
+/area/station/maintenance/department/engineering/central)
"OD" = (
/obj/effect/turf_decal/stripes/line{
dir = 1
@@ -2186,7 +2185,7 @@ ml
ml
ml
ml
-ml
+HY
md
Gk
lb
@@ -2214,7 +2213,7 @@ ml
ml
ml
ml
-ml
+HY
md
So
IL
@@ -2242,17 +2241,17 @@ ml
ml
ml
ml
-ml
-HY
-Vv
-Vv
-Vv
-Vv
-Vv
-Vv
-Vv
-Vv
-ml
+md
+md
+md
+md
+md
+md
+md
+md
+md
+md
+md
ml
dh
ml
diff --git a/code/__DEFINES/antagonists.dm b/code/__DEFINES/antagonists.dm
index 9da5143c6100..65aaa36fbb9f 100644
--- a/code/__DEFINES/antagonists.dm
+++ b/code/__DEFINES/antagonists.dm
@@ -331,6 +331,10 @@ GLOBAL_LIST_INIT(human_invader_antagonists, list(
#define ANTAG_GROUP_SYNDICATE "Syndicate"
#define ANTAG_GROUP_WIZARDS "Wizard Federation"
#define ANTAG_GROUP_XENOS "Xenomorph Infestation"
+#define ANTAG_GROUP_FUGITIVES "Escaped Fugitives"
+#define ANTAG_GROUP_HUNTERS "Bounty Hunters"
+#define ANTAG_GROUP_PARADOX "Spacetime Aberrations"
+#define ANTAG_GROUP_CREW "Deviant Crew"
#define HUNTER_PACK_COPS "Spacepol Officers"
#define HUNTER_PACK_RUSSIAN "Russian Smugglers"
diff --git a/code/__DEFINES/colors.dm b/code/__DEFINES/colors.dm
index 14715f7a7a90..6d73b04a78e6 100644
--- a/code/__DEFINES/colors.dm
+++ b/code/__DEFINES/colors.dm
@@ -33,6 +33,13 @@
#define COLOR_HALF_TRANSPARENT_BLACK "#0000007A"
#define COLOR_RED "#FF0000"
+#define COLOR_CHRISTMAS_RED "#D6001C"
+#define COLOR_OLD_GLORY_RED "#B22234"
+#define COLOR_FRENCH_RED "#EF4135"
+#define COLOR_ETHIOPIA_RED "#DA121A"
+#define COLOR_UNION_JACK_RED "#C8102E"
+#define COLOR_MEDIUM_DARK_RED "#CC0000"
+#define COLOR_PINK_RED "EF3340"
#define COLOR_SYNDIE_RED "#F10303"
#define COLOR_SYNDIE_RED_HEAD "#760500"
#define COLOR_MOSTLY_PURE_RED "#FF3300"
@@ -50,7 +57,10 @@
#define COLOR_YELLOW "#FFFF00"
#define COLOR_VIVID_YELLOW "#FBFF23"
+#define COLOR_TANGERINE_YELLOW "#FFCC00"
#define COLOR_VERY_SOFT_YELLOW "#FAE48E"
+#define COLOR_GOLD "#FFD700"
+#define COLOR_ETHIOPIA_YELLOW "#FCDD09"
#define COLOR_OLIVE "#808000"
#define COLOR_ASSISTANT_OLIVE "#828163"
@@ -63,6 +73,9 @@
#define COLOR_VERY_PALE_LIME_GREEN "#DDFFD3"
#define COLOR_VERY_DARK_LIME_GREEN "#003300"
#define COLOR_GREEN "#008000"
+#define COLOR_CHRISTMAS_GREEN "#00873E"
+#define COLOR_IRISH_GREEN "#169B62"
+#define COLOR_ETHIOPIA_GREEN "#078930"
#define COLOR_DARK_MODERATE_LIME_GREEN "#44964A"
#define COLOR_PAI_GREEN "#00FF88"
#define COLOR_PALE_GREEN "#20e28e"
@@ -72,6 +85,10 @@
#define COLOR_DARK_CYAN "#00A2FF"
#define COLOR_TEAL "#008080"
#define COLOR_BLUE "#0000FF"
+#define COLOR_OLD_GLORY_BLUE "#3C3B6E"
+#define COLOR_FRENCH_BLUE "#0055A4"
+#define COLOR_UNION_JACK_BLUE "#012169"
+#define COLOR_TRUE_BLUE "#0066CC"
#define COLOR_STRONG_BLUE "#1919c8"
#define COLOR_CENTCOM_BLUE "#134975"
#define COLOR_BRIGHT_BLUE "#2CB2E8"
@@ -99,6 +116,7 @@
#define COLOR_DARK_PURPLE "#551A8B"
#define COLOR_ORANGE "#FF9900"
+#define COLOR_IRISH_ORANGE "#FF883E"
#define COLOR_ENGINEERING_ORANGE "#FFA62B"
#define COLOR_MOSTLY_PURE_ORANGE "#ff8000"
#define COLOR_TAN_ORANGE "#FF7B00"
@@ -248,12 +266,13 @@
#define CIRCUIT_COLOR_ENGINEERING "#F8D700"
#define CIRCUIT_COLOR_SUPPLY "#C47749"
-/// Highly Saturated Colors
-#define COLOR_BRIGHT_RED "#FF6666"
-#define COLOR_BRIGHT_YELLOW "#EAFF51"
-#define COLOR_BRIGHT_GREEN "#41FC66"
-#define COLOR_BRIGHT_TEAL "#42FFF2"
-#define COLOR_BRIGHT_PURPLE "#5D5DFC"
+/// Colors for pride week
+#define COLOR_PRIDE_RED "#FF6666"
+#define COLOR_PRIDE_ORANGE "#FC9F3C"
+#define COLOR_PRIDE_YELLOW "#EAFF51"
+#define COLOR_PRIDE_GREEN "#41FC66"
+#define COLOR_PRIDE_BLUE "#42FFF2"
+#define COLOR_PRIDE_PURPLE "#5D5DFC"
/// The default color for admin say, used as a fallback when the preference is not enabled
#define DEFAULT_ASAY_COLOR COLOR_MOSTLY_PURE_RED
diff --git a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_mouse.dm b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_mouse.dm
index 09ac2c73e2cb..9ff14135e717 100644
--- a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_mouse.dm
+++ b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_mouse.dm
@@ -28,3 +28,5 @@
#define COMSIG_MOUSEDROPPED_ONTO "mousedropped_onto"
///from base of mob/MouseWheelOn(): (/atom, delta_x, delta_y, params)
#define COMSIG_MOUSE_SCROLL_ON "mousescroll_on"
+/// From /atom/movable/screen/click(): (atom/target, atom/location, control, params, mob/user)
+#define COMSIG_SCREEN_ELEMENT_CLICK "screen_element_click"
diff --git a/code/__DEFINES/dcs/signals/signals_storage.dm b/code/__DEFINES/dcs/signals/signals_storage.dm
index b30039dc12f2..45b6ec6bfe3f 100644
--- a/code/__DEFINES/dcs/signals/signals_storage.dm
+++ b/code/__DEFINES/dcs/signals/signals_storage.dm
@@ -5,3 +5,5 @@
/// Sent after dumping into some other storage object: (atom/dest_object, mob/user)
#define COMSIG_STORAGE_DUMP_POST_TRANSFER "storage_dump_into_storage"
+/// Sent to the STORAGE when an ITEM is STORED INSIDE.
+#define COMSIG_STORAGE_STORED_ITEM "storage_storing_item"
diff --git a/code/__DEFINES/holiday.dm b/code/__DEFINES/holiday.dm
new file mode 100644
index 000000000000..1c35940e7188
--- /dev/null
+++ b/code/__DEFINES/holiday.dm
@@ -0,0 +1 @@
+#define HOLIDAY_HAT_CHANCE 20
diff --git a/code/__DEFINES/interaction_flags.dm b/code/__DEFINES/interaction_flags.dm
index 0b4e95887294..6ce2928b741b 100644
--- a/code/__DEFINES/interaction_flags.dm
+++ b/code/__DEFINES/interaction_flags.dm
@@ -20,6 +20,14 @@
#define INTERACT_ATOM_ALLOW_USER_LOCATION (1<<9)
/// ignores mobility check
#define INTERACT_ATOM_IGNORE_MOBILITY (1<<10)
+// Bypass all adjacency checks for mouse drop
+#define INTERACT_ATOM_MOUSEDROP_IGNORE_ADJACENT (1<<11)
+/// Bypass all can_perform_action checks for mouse drop
+#define INTERACT_ATOM_MOUSEDROP_IGNORE_USABILITY (1<<12)
+/// Bypass all adjacency and other checks for mouse drop
+#define INTERACT_ATOM_MOUSEDROP_IGNORE_CHECKS (INTERACT_ATOM_MOUSEDROP_IGNORE_ADJACENT | INTERACT_ATOM_MOUSEDROP_IGNORE_USABILITY)
+/// calls try_interact() on attack_paw() and returns that.
+#define INTERACT_ATOM_ATTACK_PAW (1<<13)
/// attempt pickup on attack_hand for items
#define INTERACT_ITEM_ATTACK_HAND_PICKUP (1<<0)
diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm
index c743a6d5a673..db9e10b6ae17 100644
--- a/code/__DEFINES/is_helpers.dm
+++ b/code/__DEFINES/is_helpers.dm
@@ -286,7 +286,7 @@ GLOBAL_LIST_INIT(glass_sheet_types, typecacheof(list(
GLOBAL_LIST_INIT(book_types, typecacheof(list(
/obj/item/book,
/obj/item/spellbook,
-)))
+ /obj/item/infuser_book)))
// Jobs
#define is_job(job_type) (istype(job_type, /datum/job))
diff --git a/code/__DEFINES/jobs.dm b/code/__DEFINES/jobs.dm
index 88005dacbd4a..65b0d3c49837 100644
--- a/code/__DEFINES/jobs.dm
+++ b/code/__DEFINES/jobs.dm
@@ -207,8 +207,11 @@
#define JOB_ASSIGN_QUIRKS (1<<7)
/// Whether this job can be an intern.
#define JOB_CAN_BE_INTERN (1<<8)
-/// Whether this job is enabled/disabled by the spooktober config
-#define JOB_SPOOKTOBER (1<<9)
+/// This job cannot have more slots opened by the Head of Personnel (but admins or other random events can still do this).
+#define JOB_CANNOT_OPEN_SLOTS (1<<9)
+
+/// Combination flag for jobs which are considered regular crew members of the station.
+#define STATION_JOB_FLAGS (JOB_ANNOUNCE_ARRIVAL|JOB_CREW_MANIFEST|JOB_EQUIP_RANK|JOB_CREW_MEMBER|JOB_NEW_PLAYER_JOINABLE|JOB_REOPEN_ON_ROUNDSTART_LOSS|JOB_ASSIGN_QUIRKS|JOB_CAN_BE_INTERN)
#define FACTION_NONE "None"
#define FACTION_STATION "Station"
diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm
index fb0c39de245c..714d416b75b8 100644
--- a/code/__DEFINES/mobs.dm
+++ b/code/__DEFINES/mobs.dm
@@ -590,14 +590,15 @@
///Squash flags. For squashable element
-///Whether or not the squashing requires the squashed mob to be lying down
+/// Squashing will not occur if the mob is not lying down (bodyposition is LYING_DOWN)
#define SQUASHED_SHOULD_BE_DOWN (1<<0)
-///Whether or not to gib when the squashed mob is moved over
+/// If present, outright gibs the squashed mob instead of just dealing damage
#define SQUASHED_SHOULD_BE_GIBBED (1<<1)
-
-
+/// If squashing always passes if the mob is dead
+#define SQUASHED_ALWAYS_IF_DEAD (1<<2)
/// Don't squash our mob if its not located in a turf
#define SQUASHED_DONT_SQUASH_IN_CONTENTS (1<<3)
+
/*
* Defines for "AI emotions", allowing the AI to expression emotions
* with status displays via emotes.
diff --git a/code/__DEFINES/time.dm b/code/__DEFINES/time.dm
index 229433bc0f86..8348f1d0fe3e 100644
--- a/code/__DEFINES/time.dm
+++ b/code/__DEFINES/time.dm
@@ -36,6 +36,7 @@
#define FESTIVE_SEASON "Festive Season"
#define GARBAGEDAY "Garbage Day"
#define MONKEYDAY "Monkey Day"
+#define PRIDE_WEEK "Pride Week"
#define MOTH_WEEK "Moth Week"
#define IAN_HOLIDAY "Ian's Birthday"
/*
diff --git a/code/__DEFINES/traits/declarations.dm b/code/__DEFINES/traits/declarations.dm
index 6f5d4e3e78a3..281c2ba5f246 100644
--- a/code/__DEFINES/traits/declarations.dm
+++ b/code/__DEFINES/traits/declarations.dm
@@ -125,13 +125,13 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
/// This human is immune to the effects of being exploded. (ex_act)
#define TRAIT_BOMBIMMUNE "bomb_immunity"
/// This mob won't get gibbed by nukes going off
-/* #define TRAIT_NUKEIMMUNE "nuke_immunity" */
+#define TRAIT_NUKEIMMUNE "nuke_immunity"
/// Can't be given viruses
#define TRAIT_VIRUSIMMUNE "virus_immunity"
/// Won't become a husk under any circumstances
/* #define TRAIT_UNHUSKABLE "trait_unhuskable" */
/// Reduces the chance viruses will spread to this mob, and if the mob has a virus, slows its advancement
-/* #define TRAIT_VIRUS_RESISTANCE "virus_resistance" */
+#define TRAIT_VIRUS_RESISTANCE "virus_resistance"
#define TRAIT_GENELESS "geneless"
#define TRAIT_PIERCEIMMUNE "pierce_immunity"
#define TRAIT_NODISMEMBER "dismember_immunity"
@@ -1022,9 +1022,9 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
/// Isn't attacked harmfully by blob structures
#define TRAIT_BLOB_ALLY "blob_ally"
/// Has the chuuni component
-/* #define TRAIT_CHUUNIBYOU "chuunibyou" */
+#define TRAIT_CHUUNIBYOU "chuunibyou"
/// Has splattercasting
-/* #define TRAIT_SPLATTERCASTER "splattercaster" */
+#define TRAIT_SPLATTERCASTER "splattercaster"
///Traits given by station traits
/* #define STATION_TRAIT_ASSISTANT_GIMMICKS "station_trait_assistant_gimmicks" */
@@ -1154,7 +1154,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
/// This atom can have spells cast from it if a mob is within it
/// This means the "caster" of the spell is changed to the mob's loc
/// Note this doesn't mean all spells are guaranteed to work or the mob is guaranteed to cast
-/* #define TRAIT_CASTABLE_LOC "castable_loc" */
+#define TRAIT_CASTABLE_LOC "castable_loc"
/// Needs above trait to work.
/// This trait makes it so that any cast spells will attempt to transfer to the location's location.
diff --git a/code/__DEFINES/turfs.dm b/code/__DEFINES/turfs.dm
index 48844e079c16..492248acae60 100644
--- a/code/__DEFINES/turfs.dm
+++ b/code/__DEFINES/turfs.dm
@@ -96,3 +96,14 @@
#define TURF_PATHING_PASS_PROC 1
/// Turf is never passable
#define TURF_PATHING_PASS_NO 2
+
+/// Define the alpha for holiday/colored tile decals
+#define DECAL_ALPHA 60
+/// Generate horizontal striped color turf decals
+#define PATTERN_DEFAULT "default"
+/// Generate vertical striped color turf decals
+#define PATTERN_VERTICAL_STRIPE "vertical"
+/// Generate random color turf decals
+#define PATTERN_RANDOM "random"
+/// Generate rainbow color turf decals
+#define PATTERN_RAINBOW "rainbow"
diff --git a/code/__DEFINES/~monkestation/blueshift.dm b/code/__DEFINES/~monkestation/blueshift.dm
index c327e4e56a0f..a52313a85ad5 100644
--- a/code/__DEFINES/~monkestation/blueshift.dm
+++ b/code/__DEFINES/~monkestation/blueshift.dm
@@ -270,14 +270,6 @@ See the examinemore module for information.
#define BOOT_UNSEAL_MESSAGE "relax their grip on your legs"
#define BOOT_SEAL_MESSAGE "seal around your feet"
-/// Colors for pride week
-#define COLOR_PRIDE_RED "#FF6666"
-#define COLOR_PRIDE_ORANGE "#FC9F3C"
-#define COLOR_PRIDE_YELLOW "#EAFF51"
-#define COLOR_PRIDE_GREEN "#41FC66"
-#define COLOR_PRIDE_BLUE "#42FFF2"
-#define COLOR_PRIDE_PURPLE "#5D5DFC"
-
/// Trait that changes the ending effects of twitch leaving your system
#define TRAIT_TWITCH_ADAPTED "twitch_adapted"
diff --git a/code/__DEFINES/~monkestation/dcs/signals/signals_object.dm b/code/__DEFINES/~monkestation/dcs/signals/signals_object.dm
new file mode 100644
index 000000000000..7e3bfcc3e769
--- /dev/null
+++ b/code/__DEFINES/~monkestation/dcs/signals/signals_object.dm
@@ -0,0 +1,2 @@
+//flag to block the qdel that normally happens when a projectile is blocked
+#define PROJECTILE_INTERRUPT_BLOCK_QDEL (4<<0)
diff --git a/code/__DEFINES/~monkestation/jobs.dm b/code/__DEFINES/~monkestation/jobs.dm
index 2a2c5ae5e3a4..1902ca9ced9b 100644
--- a/code/__DEFINES/~monkestation/jobs.dm
+++ b/code/__DEFINES/~monkestation/jobs.dm
@@ -1 +1,3 @@
#define JOB_SECURITY_ASSISTANT "Security Assistant"
+/// Whether this job is enabled/disabled by the spooktober config
+#define JOB_SPOOKTOBER (1<<16)
diff --git a/code/__HELPERS/icons.dm b/code/__HELPERS/icons.dm
index 0a743ee3a43d..54892b25294b 100644
--- a/code/__HELPERS/icons.dm
+++ b/code/__HELPERS/icons.dm
@@ -730,6 +730,10 @@ world
} \
current_layer = base_layer + appearance.layer + current_layer / 1000; \
} \
+ /* If we are using topdown rendering, chop that part off so things layer together as expected */ \
+ if((current_layer >= TOPDOWN_LAYER && current_layer < EFFECTS_LAYER) || current_layer > TOPDOWN_LAYER + EFFECTS_LAYER) { \
+ current_layer -= TOPDOWN_LAYER; \
+ } \
for (var/index_to_compare_to in 1 to layers.len) { \
var/compare_to = layers[index_to_compare_to]; \
if (current_layer < layers[compare_to]) { \
@@ -741,9 +745,10 @@ world
}
var/static/icon/flat_template = icon('icons/blanks/32x32.dmi', "nothing")
+ var/icon/flat = icon(flat_template)
if(!appearance || appearance.alpha <= 0)
- return icon(flat_template)
+ return flat
if(start)
if(!defdir)
@@ -771,15 +776,20 @@ world
var/base_icon_dir //We'll use this to get the icon state to display if not null BUT NOT pass it to overlays as the dir we have
- //Try to remove/optimize this section ASAP, CPU hog.
- //Determines if there's directionals.
- if(render_icon && curdir != SOUTH)
- if (
- !length(icon_states(icon(curicon, curstate, NORTH))) \
- && !length(icon_states(icon(curicon, curstate, EAST))) \
- && !length(icon_states(icon(curicon, curstate, WEST))) \
- )
- base_icon_dir = SOUTH
+ if(render_icon)
+ //Try to remove/optimize this section if you can, it's a CPU hog.
+ //Determines if there're directionals.
+ if (curdir != SOUTH)
+ // icon states either have 1, 4 or 8 dirs. We only have to check
+ // one of NORTH, EAST or WEST to know that this isn't a 1-dir icon_state since they just have SOUTH.
+ if(!length(icon_states(icon(curicon, curstate, NORTH))))
+ base_icon_dir = SOUTH
+
+ var/list/icon_dimensions = get_icon_dimensions(curicon)
+ var/icon_width = icon_dimensions["width"]
+ var/icon_height = icon_dimensions["height"]
+ if(icon_width != 32 || icon_height != 32)
+ flat.Scale(icon_width, icon_height)
if(!base_icon_dir)
base_icon_dir = curdir
@@ -787,7 +797,6 @@ world
var/curblend = appearance.blend_mode || defblend
if(appearance.overlays.len || appearance.underlays.len)
- var/icon/flat = icon(flat_template)
// Layers will be a sorted list of icons/overlays, based on the order in which they are displayed
var/list/layers = list()
var/image/copy
diff --git a/code/__HELPERS/matrices.dm b/code/__HELPERS/matrices.dm
index 6b7e5543d579..9fe3db3ada11 100644
--- a/code/__HELPERS/matrices.dm
+++ b/code/__HELPERS/matrices.dm
@@ -68,6 +68,20 @@
//doesn't have an object argument because this is "Stacking" with the animate call above
//3 billion% intentional
+/// Similar to shake but more spasm-y and jerk-y
+/atom/proc/spasm_animation(loops = -1)
+ var/list/transforms = list(
+ matrix(transform).Translate(-1, 0),
+ matrix(transform).Translate(0, 1),
+ matrix(transform).Translate(1, 0),
+ matrix(transform).Translate(0, -1),
+ )
+
+ animate(src, transform = transforms[1], time = 0.2, loop = loops)
+ animate(transform = transforms[2], time = 0.1)
+ animate(transform = transforms[3], time = 0.2)
+ animate(transform = transforms[4], time = 0.3)
+
/**
* Shear the transform on either or both axes.
* * x - X axis shearing
diff --git a/code/__HELPERS/paths/jps.dm b/code/__HELPERS/paths/jps.dm
index 9997f1b7b032..ef64a8d169cc 100644
--- a/code/__HELPERS/paths/jps.dm
+++ b/code/__HELPERS/paths/jps.dm
@@ -56,7 +56,7 @@
/datum/pathfind/jps
/// The movable we are pathing
- var/atom/movable/caller
+ var/atom/movable/requester
/// The turf we're trying to path to (note that this won't track a moving target)
var/turf/end
/// The open list/stack we pop nodes out from (TODO: make this a normal list and macro-ize the heap operations to reduce proc overhead)
@@ -73,9 +73,9 @@
///Defines how we handle diagonal moves. See __DEFINES/path.dm
var/diagonal_handling = DIAGONAL_REMOVE_CLUNKY
-/datum/pathfind/jps/proc/setup(atom/movable/caller, list/access, max_distance, simulated_only, avoid, list/datum/callback/on_finish, atom/goal, mintargetdist, skip_first, diagonal_handling)
- src.caller = caller
- src.pass_info = new(caller, access)
+/datum/pathfind/jps/proc/setup(atom/movable/requester, list/access, max_distance, simulated_only, avoid, list/datum/callback/on_finish, atom/goal, mintargetdist, skip_first, diagonal_handling)
+ src.requester = requester
+ src.pass_info = new(requester, access)
src.max_distance = max_distance
src.simulated_only = simulated_only
src.avoid = avoid
@@ -89,12 +89,12 @@
/datum/pathfind/jps/Destroy(force)
. = ..()
- caller = null
+ requester = null
end = null
open = null
/datum/pathfind/jps/start()
- start = start || get_turf(caller)
+ start = start || get_turf(requester)
. = ..()
if(!.)
return .
@@ -116,7 +116,7 @@
. = ..()
if(!.)
return .
- if(QDELETED(caller))
+ if(QDELETED(requester))
return FALSE
while(!open.is_empty() && !path)
diff --git a/code/__HELPERS/paths/path.dm b/code/__HELPERS/paths/path.dm
index 294c921a1ff9..01db1ee108e7 100644
--- a/code/__HELPERS/paths/path.dm
+++ b/code/__HELPERS/paths/path.dm
@@ -4,7 +4,7 @@
* It will yield until a path is returned, using magic
*
* Arguments:
- * * caller: The movable atom that's trying to find the path
+ * * requester: The movable atom that's trying to find the path
* * end: What we're trying to path to. It doesn't matter if this is a turf or some other atom, we're gonna just path to the turf it's on anyway
* * max_distance: The maximum number of steps we can take in a given path to search (default: 30, 0 = infinite)
* * mintargetdistance: Minimum distance to the target before path returns, could be used to get near a target, but not right to it - for an AI mob with a gun, for example.
@@ -14,16 +14,16 @@
* * skip_first: Whether or not to delete the first item in the path. This would be done because the first item is the starting tile, which can break movement for some creatures.
* * diagonal_handling: defines how we handle diagonal moves. see __DEFINES/path.dm
*/
-/proc/get_path_to(atom/movable/caller, atom/end, max_distance = 30, mintargetdist, access=list(), simulated_only = TRUE, turf/exclude, skip_first=TRUE, diagonal_handling=DIAGONAL_REMOVE_CLUNKY)
+/proc/get_path_to(atom/movable/requester, atom/end, max_distance = 30, mintargetdist, access=list(), simulated_only = TRUE, turf/exclude, skip_first=TRUE, diagonal_handling=DIAGONAL_REMOVE_CLUNKY)
var/list/hand_around = list()
// We're guarenteed that list will be the first list in pathfinding_finished's argset because of how callback handles the arguments list
var/datum/callback/await = list(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(pathfinding_finished), hand_around))
- if(!SSpathfinder.pathfind(caller, end, max_distance, mintargetdist, access, simulated_only, exclude, skip_first, diagonal_handling, await))
+ if(!SSpathfinder.pathfind(requester, end, max_distance, mintargetdist, access, simulated_only, exclude, skip_first, diagonal_handling, await))
return list()
UNTIL(length(hand_around))
var/list/return_val = hand_around[1]
- if(!islist(return_val) || (QDELETED(caller) || QDELETED(end))) // It's trash, just hand back empty to make it easy
+ if(!islist(return_val) || (QDELETED(requester) || QDELETED(end))) // It's trash, just hand back empty to make it easy
return list()
return return_val
@@ -37,7 +37,7 @@
* It will yield until a path is returned, using magic
*
* Arguments:
- * * caller: The movable atom that's trying to find the path
+ * * requester: The movable atom that's trying to find the path
* * end: What we're trying to path to. It doesn't matter if this is a turf or some other atom, we're gonna just path to the turf it's on anyway
* * max_distance: The maximum number of steps we can take in a given path to search (default: 30, 0 = infinite)
* * mintargetdistance: Minimum distance to the target before path returns, could be used to get near a target, but not right to it - for an AI mob with a gun, for example.
@@ -47,29 +47,29 @@
* * exclude: If we want to avoid a specific turf, like if we're a mulebot who already got blocked by some turf
* * skip_first: Whether or not to delete the first item in the path. This would be done because the first item is the starting tile, which can break movement for some creatures.
*/
-/proc/get_swarm_path_to(atom/movable/caller, atom/end, max_distance = 30, mintargetdist, age = MAP_REUSE_INSTANT, access = list(), simulated_only = TRUE, turf/exclude, skip_first=TRUE)
+/proc/get_swarm_path_to(atom/movable/requester, atom/end, max_distance = 30, mintargetdist, age = MAP_REUSE_INSTANT, access = list(), simulated_only = TRUE, turf/exclude, skip_first=TRUE)
var/list/hand_around = list()
// We're guarenteed that list will be the first list in pathfinding_finished's argset because of how callback handles the arguments list
var/datum/callback/await = list(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(pathfinding_finished), hand_around))
- if(!SSpathfinder.swarmed_pathfind(caller, end, max_distance, mintargetdist, age, access, simulated_only, exclude, skip_first, await))
+ if(!SSpathfinder.swarmed_pathfind(requester, end, max_distance, mintargetdist, age, access, simulated_only, exclude, skip_first, await))
return list()
UNTIL(length(hand_around))
var/list/return_val = hand_around[1]
- if(!islist(return_val) || (QDELETED(caller) || QDELETED(end))) // It's trash, just hand back empty to make it easy
+ if(!islist(return_val) || (QDELETED(requester) || QDELETED(end))) // It's trash, just hand back empty to make it easy
return list()
return return_val
-/proc/get_sssp(atom/movable/caller, max_distance = 30, access = list(), simulated_only = TRUE, turf/exclude)
+/proc/get_sssp(atom/movable/requester, max_distance = 30, access = list(), simulated_only = TRUE, turf/exclude)
var/list/hand_around = list()
// We're guarenteed that list will be the first list in pathfinding_finished's argset because of how callback handles the arguments list
var/datum/callback/await = list(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(pathfinding_finished), hand_around))
- if(!SSpathfinder.build_map(caller, get_turf(caller), max_distance, access, simulated_only, exclude, await))
+ if(!SSpathfinder.build_map(requester, get_turf(requester), max_distance, access, simulated_only, exclude, await))
return null
UNTIL(length(hand_around))
var/datum/path_map/return_val = hand_around[1]
- if(!istype(return_val, /datum/path_map) || (QDELETED(caller))) // It's trash, just hand back null to make it easy
+ if(!istype(return_val, /datum/path_map) || (QDELETED(requester))) // It's trash, just hand back null to make it easy
return null
return return_val
@@ -202,7 +202,7 @@
return modified_path
/**
- * For seeing if we can actually move between 2 given turfs while accounting for our access and the caller's pass_flags
+ * For seeing if we can actually move between 2 given turfs while accounting for our access and the requester's pass_flags
*
* Assumes destinantion turf is non-dense - check and shortcircuit in code invoking this proc to avoid overhead.
* Makes some other assumptions, such as assuming that unless declared, non dense objects will not block movement.
@@ -315,7 +315,7 @@
/// Let's avoid this
var/camera_type
- /// Weakref to the caller used to generate this info
+ /// Weakref to the requester used to generate this info
/// Should not use this almost ever, it's for context and to allow for proc chains that
/// Require a movable
var/datum/weakref/caller_ref = null
diff --git a/code/__HELPERS/paths/sssp.dm b/code/__HELPERS/paths/sssp.dm
index f735c6646948..78b1c62dde58 100644
--- a/code/__HELPERS/paths/sssp.dm
+++ b/code/__HELPERS/paths/sssp.dm
@@ -201,8 +201,8 @@
/// Our current position in the working queue
var/working_index
-/datum/pathfind/sssp/proc/setup(atom/movable/caller, list/access, turf/center, max_distance, simulated_only, turf/avoid, list/datum/callback/on_finish)
- src.pass_info = new(caller, access)
+/datum/pathfind/sssp/proc/setup(atom/movable/requester, list/access, turf/center, max_distance, simulated_only, turf/avoid, list/datum/callback/on_finish)
+ src.pass_info = new(requester, access)
src.start = center
src.max_distance = max_distance
src.simulated_only = simulated_only
diff --git a/code/_globalvars/lists/maintenance_loot.dm b/code/_globalvars/lists/maintenance_loot.dm
index dd15e825f550..bcb83d5d97e5 100644
--- a/code/_globalvars/lists/maintenance_loot.dm
+++ b/code/_globalvars/lists/maintenance_loot.dm
@@ -197,9 +197,12 @@ GLOBAL_LIST_INIT(uncommon_loot, list(//uncommon: useful items
/obj/item/pen/screwdriver = 1,
) = 8,
+//monkestation edit start
list(//artifacts
/obj/effect/artifact_spawner = 4,
+ /obj/item/a_gift/anything/wiz_name = 2,
) = 8,
+//monkestation edit end
list(//construction and crafting
/obj/item/beacon = 1,
@@ -349,14 +352,15 @@ GLOBAL_LIST_INIT(rarity_loot, list(//rare: really good items
) = 1,
list(//misc
- /obj/item/book/granter/crafting_recipe/maint_gun/pipegun_prime = 1,
+ /obj/item/book/granter/crafting_recipe/maint_gun/pipegun_prime = 1, //monkestation edit: added maint_gun
/obj/item/book/granter/crafting_recipe/trash_cannon = 1,
- /obj/item/book/granter/crafting_recipe/maint_gun/laser_musket_prime = 1,
+ /obj/item/book/granter/crafting_recipe/maint_gun/laser_musket_prime = 1, //monkestation edit
/obj/item/book/granter/sign_language = 1,
/obj/item/disk/nuclear/fake = 1,
/obj/item/skillchip/brainwashing = 1,
/obj/item/tattoo_kit = 1,
/obj/item/folder/ancient_paperwork = 1,
+ /obj/item/seeds/tree/money = 1, //monkestation edit
) = 1,
))
diff --git a/code/_globalvars/traits/_traits.dm b/code/_globalvars/traits/_traits.dm
index ad5832caf686..c11a1b6a1cf5 100644
--- a/code/_globalvars/traits/_traits.dm
+++ b/code/_globalvars/traits/_traits.dm
@@ -33,6 +33,7 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_AREA_SENSITIVE" = TRAIT_AREA_SENSITIVE,
"TRAIT_ASHSTORM_IMMUNE" = TRAIT_ASHSTORM_IMMUNE,
"TRAIT_BLOCKING_EXPLOSIVES" = TRAIT_BLOCKING_EXPLOSIVES,
+ "TRAIT_CASTABLE_LOC" = TRAIT_CASTABLE_LOC,
"TRAIT_DEL_ON_SPACE_DUMP" = TRAIT_DEL_ON_SPACE_DUMP,
"TRAIT_FISH_CASE_COMPATIBILE" = TRAIT_FISH_CASE_COMPATIBILE,
"TRAIT_FISH_SAFE_STORAGE" = TRAIT_FISH_SAFE_STORAGE,
@@ -56,7 +57,6 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_VOIDSTORM_IMMUNE" = TRAIT_VOIDSTORM_IMMUNE,
"TRAIT_WEATHER_IMMUNE" = TRAIT_WEATHER_IMMUNE,
/* "TRAIT_BOULDER_BREAKER" = TRAIT_BOULDER_BREAKER, */
- /* "TRAIT_CASTABLE_LOC" = TRAIT_CASTABLE_LOC, */
/* "TRAIT_CHASM_STOPPER" = TRAIT_CHASM_STOPPER, */
/* "TRAIT_HAS_LABEL" = TRAIT_HAS_LABEL, */
/* "TRAIT_IMMERSED" = TRAIT_IMMERSED, */
@@ -179,6 +179,7 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_CHEF_KISS" = TRAIT_CHEF_KISS,
"TRAIT_CHUNKYFINGERS" = TRAIT_CHUNKYFINGERS,
"TRAIT_CHUNKYFINGERS_IGNORE_BATON" = TRAIT_CHUNKYFINGERS_IGNORE_BATON,
+ "TRAIT_CHUUNIBYOU" = TRAIT_CHUUNIBYOU,
"TRAIT_CLEANBOT_WHISPERER" = TRAIT_CLEANBOT_WHISPERER,
"TRAIT_CLIFF_WALKER" = TRAIT_CLIFF_WALKER,
"TRAIT_CLOWN_ENJOYER" = TRAIT_CLOWN_ENJOYER,
@@ -365,6 +366,7 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_NO_TRANSFORM" = TRAIT_NO_TRANSFORM,
"TRAIT_NO_UNDERWEAR" = TRAIT_NO_UNDERWEAR,
"TRAIT_NO_ZOMBIFY" = TRAIT_NO_ZOMBIFY,
+ "TRAIT_NUKEIMMUNE" = TRAIT_NUKEIMMUNE,
"TRAIT_OCCULTIST" = TRAIT_OCCULTIST,
"TRAIT_OIL_FRIED" = TRAIT_OIL_FRIED,
"TRAIT_ON_ELEVATED_SURFACE" = TRAIT_ON_ELEVATED_SURFACE,
@@ -443,6 +445,7 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_SPECIAL_TRAUMA_BOOST" = TRAIT_SPECIAL_TRAUMA_BOOST,
"TRAIT_SPIDER_CONSUMED" = TRAIT_SPIDER_CONSUMED,
"TRAIT_SPIRITUAL" = TRAIT_SPIRITUAL,
+ "TRAIT_SPLATTERCASTER" = TRAIT_SPLATTERCASTER,
"TRAIT_SPRAY_PAINTABLE" = TRAIT_SPRAY_PAINTABLE,
"TRAIT_SPRINTING" = TRAIT_SPRINTING,
"TRAIT_STABLEHEART" = TRAIT_STABLEHEART,
@@ -491,6 +494,7 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_VENTCRAWLER_ALWAYS" = TRAIT_VENTCRAWLER_ALWAYS,
"TRAIT_VENTCRAWLER_NUDE" = TRAIT_VENTCRAWLER_NUDE,
"TRAIT_VIRUSIMMUNE" = TRAIT_VIRUSIMMUNE,
+ "TRAIT_VIRUS_RESISTANCE" = TRAIT_VIRUS_RESISTANCE,
"TRAIT_VORACIOUS" = TRAIT_VORACIOUS,
"TRAIT_WAS_EVOLVED" = TRAIT_WAS_EVOLVED,
"TRAIT_WATER_BREATHING" = TRAIT_WATER_BREATHING,
@@ -516,7 +520,6 @@ GLOBAL_LIST_INIT(traits_by_type, list(
/* "TRAIT_BOXING_READY" = TRAIT_BOXING_READY, */
/* "TRAIT_BRAWLING_KNOCKDOWN_BLOCKED" = TRAIT_BRAWLING_KNOCKDOWN_BLOCKED, */
/* "TRAIT_CATLIKE_GRACE" = TRAIT_CATLIKE_GRACE, */
- /* "TRAIT_CHUUNIBYOU" = TRAIT_CHUUNIBYOU, */
/* "TRAIT_DETECTIVES_TASTE" = TRAIT_DETECTIVES_TASTE, */
/* "TRAIT_DISCO_DANCER" = TRAIT_DISCO_DANCER, */
/* "TRAIT_DISPLAY_JOB_IN_BINARY" = TRAIT_DISPLAY_JOB_IN_BINARY, */
@@ -559,7 +562,6 @@ GLOBAL_LIST_INIT(traits_by_type, list(
/* "TRAIT_NO_STAGGER" = TRAIT_NO_STAGGER, */
/* "TRAIT_NO_THROWING" = TRAIT_NO_THROWING, */
/* "TRAIT_NO_TWOHANDING" = TRAIT_NO_TWOHANDING, */
- /* "TRAIT_NUKEIMMUNE" = TRAIT_NUKEIMMUNE, */
/* "TRAIT_OFF_BALANCE_TACKLER" = TRAIT_OFF_BALANCE_TACKLER, */
/* "TRAIT_OVERDOSEIMMUNE" = TRAIT_OVERDOSEIMMUNE, */
/* "TRAIT_PAPER_MASTER" = TRAIT_PAPER_MASTER, */
@@ -578,7 +580,6 @@ GLOBAL_LIST_INIT(traits_by_type, list(
/* "TRAIT_SLOW_FLIP" = TRAIT_SLOW_FLIP, */
/* "TRAIT_SPEECH_BOOSTER" = TRAIT_SPEECH_BOOSTER, */
/* "TRAIT_SPELLS_LOTTERY" = TRAIT_SPELLS_LOTTERY, */
- /* "TRAIT_SPLATTERCASTER" = TRAIT_SPLATTERCASTER, */
/* "TRAIT_STIMMED" = TRAIT_STIMMED, */
/* "TRAIT_STIMULATED" = TRAIT_STIMULATED, */
/* "TRAIT_STRENGTH" = TRAIT_STRENGTH, */
@@ -595,7 +596,6 @@ GLOBAL_LIST_INIT(traits_by_type, list(
/* "TRAIT_TOSS_GUN_HARD" = TRAIT_TOSS_GUN_HARD, */
/* "TRAIT_UNHUSKABLE" = TRAIT_UNHUSKABLE, */
/* "TRAIT_USER_SCOPED" = TRAIT_USER_SCOPED, */
- /* "TRAIT_VIRUS_RESISTANCE" = TRAIT_VIRUS_RESISTANCE, */
/* "TRAIT_WOUND_LICKER" = TRAIT_WOUND_LICKER, */
/* "TRAIT_XRAY_HEARING" = TRAIT_XRAY_HEARING, */
),
diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm
index cedbeb28f2d7..302cd10c28f0 100644
--- a/code/_onclick/hud/alert.dm
+++ b/code/_onclick/hud/alert.dm
@@ -1059,6 +1059,9 @@ or shoot a gun to move around via Newton's 3rd Law of Motion."
return 1
/atom/movable/screen/alert/Click(location, control, params)
+ SHOULD_CALL_PARENT(TRUE)
+
+ ..()
if(!usr || !usr.client)
return FALSE
if(usr != owner)
diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm
index 4a312e7fb442..1ee09a05f3fb 100644
--- a/code/_onclick/hud/hud.dm
+++ b/code/_onclick/hud/hud.dm
@@ -220,10 +220,13 @@ GLOBAL_LIST_INIT(available_ui_styles, list(
QDEL_LIST(static_inventory)
QDEL_LIST(team_finder_arrows)
+ // all already deleted by static inventory clear
inv_slots.Cut()
action_intent = null
zone_select = null
pull_icon = null
+ rest_icon = null
+ hand_slots.Cut()
QDEL_LIST(toggleable_inventory)
QDEL_LIST(hotkeybuttons)
diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm
index 87fee0d97f30..13c02c7f9533 100644
--- a/code/_onclick/hud/screen_objects.dm
+++ b/code/_onclick/hud/screen_objects.dm
@@ -35,12 +35,24 @@
/// If FALSE, this will not be cleared when calling /client/clear_screen()
var/clear_with_screen = TRUE
+ /// If TRUE, clicking the screen element will fall through and perform a default "Click" call
+ /// Obviously this requires your Click override, if any, to call parent on their own.
+ /// This is set to FALSE to default to dissade you from doing this.
+ /// Generally we don't want default Click stuff, which results in bugs like using Telekinesis on a screen element
+ /// or trying to point your gun at your screen.
+ var/default_click = FALSE
/atom/movable/screen/Destroy()
master = null
hud = null
return ..()
+/atom/movable/screen/Click(location, control, params)
+ if(flags_1 & INITIALIZED_1)
+ SEND_SIGNAL(src, COMSIG_SCREEN_ELEMENT_CLICK, location, control, params, usr)
+ if(default_click)
+ return ..()
+
/atom/movable/screen/examine(mob/user)
return list()
@@ -646,9 +658,6 @@
icon_state = "mood5"
screen_loc = ui_mood
-/atom/movable/screen/mood/attack_tk()
- return
-
/atom/movable/screen/splash
icon = 'icons/blanks/blank_title.png'
icon_state = ""
diff --git a/code/_onclick/other_mobs.dm b/code/_onclick/other_mobs.dm
index 5f1667d38c35..5a124d14493c 100644
--- a/code/_onclick/other_mobs.dm
+++ b/code/_onclick/other_mobs.dm
@@ -194,7 +194,8 @@
/atom/proc/attack_paw(mob/user, list/modifiers)
if(SEND_SIGNAL(src, COMSIG_ATOM_ATTACK_PAW, user, modifiers) & COMPONENT_CANCEL_ATTACK_CHAIN)
return TRUE
- return FALSE
+ if(interaction_flags_atom & INTERACT_ATOM_ATTACK_PAW)
+ . = _try_interact(user)
/*
diff --git a/code/controllers/subsystem/explosions.dm b/code/controllers/subsystem/explosions.dm
index 5d11d479dd26..46cced9ef7bb 100644
--- a/code/controllers/subsystem/explosions.dm
+++ b/code/controllers/subsystem/explosions.dm
@@ -353,9 +353,8 @@ SUBSYSTEM_DEF(explosions)
if(adminlog)
message_admins("Explosion with size (Devast: [devastation_range], Heavy: [heavy_impact_range], Light: [light_impact_range], Flame: [flame_range]) in [ADMIN_VERBOSEJMP(epicenter)]. Possible cause: [explosion_cause]. Last fingerprints: [who_did_it].")
log_game("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range], [flame_range]) in [loc_name(epicenter)]. Possible cause: [explosion_cause]. Last fingerprints: [who_did_it_game_log].")
-
//monkestation edit start
- deadchat_broadcast("Explosion with size: Devast: [devastation_range], Heavy: [heavy_impact_range], Light: [light_impact_range], Flame: [flame_range].", \
+ deadchat_broadcast("Explosion with size: Devast: [devastation_range], Heavy: [heavy_impact_range], Light: [light_impact_range], Flame: [flame_range].", \
turf_target = epicenter, message_type = DEADCHAT_ANNOUNCEMENT)
//monkestation edit end
diff --git a/code/controllers/subsystem/job.dm b/code/controllers/subsystem/job.dm
index 562d0361a27c..7a9915fdd229 100644
--- a/code/controllers/subsystem/job.dm
+++ b/code/controllers/subsystem/job.dm
@@ -100,6 +100,7 @@ SUBSYSTEM_DEF(job)
new_overflow.allow_bureaucratic_error = FALSE
new_overflow.spawn_positions = cap
new_overflow.total_positions = cap
+ new_overflow.job_flags |= JOB_CANNOT_OPEN_SLOTS
if(new_overflow.type == overflow_role)
return
@@ -107,6 +108,8 @@ SUBSYSTEM_DEF(job)
old_overflow.allow_bureaucratic_error = initial(old_overflow.allow_bureaucratic_error)
old_overflow.spawn_positions = initial(old_overflow.spawn_positions)
old_overflow.total_positions = initial(old_overflow.total_positions)
+ if(!(initial(old_overflow.job_flags) & JOB_CANNOT_OPEN_SLOTS))
+ old_overflow.job_flags &= ~JOB_CANNOT_OPEN_SLOTS
overflow_role = new_overflow.type
JobDebug("Overflow role set to : [new_overflow.type]")
diff --git a/code/controllers/subsystem/mapping.dm b/code/controllers/subsystem/mapping.dm
index 6fa3c952c07a..133d28e3033f 100644
--- a/code/controllers/subsystem/mapping.dm
+++ b/code/controllers/subsystem/mapping.dm
@@ -260,7 +260,7 @@ SUBSYSTEM_DEF(mapping)
var/list/ice_ruins = levels_by_trait(ZTRAIT_ICE_RUINS)
if (ice_ruins.len)
// needs to be whitelisted for underground too so place_below ruins work
- seedRuins(ice_ruins, CONFIG_GET(number/icemoon_budget), list(/area/icemoon/surface/outdoors/unexplored), themed_ruins[ZTRAIT_ICE_RUINS], clear_below = TRUE, mineral_budget = 4)
+ seedRuins(ice_ruins, CONFIG_GET(number/icemoon_budget), list(/area/icemoon/surface/outdoors/unexplored, /area/icemoon/underground/unexplored), themed_ruins[ZTRAIT_ICE_RUINS], clear_below = TRUE)
var/list/ice_ruins_underground = levels_by_trait(ZTRAIT_ICE_RUINS_UNDERGROUND)
if (ice_ruins_underground.len)
diff --git a/code/controllers/subsystem/pathfinder.dm b/code/controllers/subsystem/pathfinder.dm
index fa1a7af5c859..e7d8b7b14469 100644
--- a/code/controllers/subsystem/pathfinder.dm
+++ b/code/controllers/subsystem/pathfinder.dm
@@ -61,9 +61,9 @@ SUBSYSTEM_DEF(pathfinder)
currentmaps.len--
/// Initiates a pathfind. Returns true if we're good, FALSE if something's failed
-/datum/controller/subsystem/pathfinder/proc/pathfind(atom/movable/caller, atom/end, max_distance = 30, mintargetdist, access = list(), simulated_only = TRUE, turf/exclude, skip_first = TRUE, diagonal_handling = DIAGONAL_REMOVE_CLUNKY, list/datum/callback/on_finish)
+/datum/controller/subsystem/pathfinder/proc/pathfind(atom/movable/requester, atom/end, max_distance = 30, mintargetdist, access = list(), simulated_only = TRUE, turf/exclude, skip_first = TRUE, diagonal_handling = DIAGONAL_REMOVE_CLUNKY, list/datum/callback/on_finish)
var/datum/pathfind/jps/path = new()
- path.setup(caller, access, max_distance, simulated_only, exclude, on_finish, end, mintargetdist, skip_first, diagonal_handling)
+ path.setup(requester, access, max_distance, simulated_only, exclude, on_finish, end, mintargetdist, skip_first, diagonal_handling)
if(path.start())
active_pathing += path
return TRUE
@@ -71,21 +71,21 @@ SUBSYSTEM_DEF(pathfinder)
/// Initiates a swarmed pathfind. Returns TRUE if we're good, FALSE if something's failed
/// If a valid pathmap exists for the TARGET turf we'll use that, otherwise we have to build a new one
-/datum/controller/subsystem/pathfinder/proc/swarmed_pathfind(atom/movable/caller, atom/end, max_distance = 30, mintargetdist = 0, age = MAP_REUSE_INSTANT, access = list(), simulated_only = TRUE, turf/exclude, skip_first = TRUE, list/datum/callback/on_finish)
+/datum/controller/subsystem/pathfinder/proc/swarmed_pathfind(atom/movable/requester, atom/end, max_distance = 30, mintargetdist = 0, age = MAP_REUSE_INSTANT, access = list(), simulated_only = TRUE, turf/exclude, skip_first = TRUE, list/datum/callback/on_finish)
var/turf/target = get_turf(end)
- var/datum/can_pass_info/pass_info = new(caller, access)
+ var/datum/can_pass_info/pass_info = new(requester, access)
// If there's a map we can use already, use it
var/datum/path_map/valid_map = get_valid_map(pass_info, target, simulated_only, exclude, age, include_building = TRUE)
if(valid_map && valid_map.expand(max_distance))
- path_map_passalong(on_finish, get_turf(caller), mintargetdist, skip_first, valid_map)
+ path_map_passalong(on_finish, get_turf(requester), mintargetdist, skip_first, valid_map)
return TRUE
// Otherwise we're gonna make a new one, and turn it into a path for the callbacks passed into us
var/list/datum/callback/pass_in = list()
- pass_in += CALLBACK(GLOBAL_PROC, /proc/path_map_passalong, on_finish, get_turf(caller), mintargetdist, skip_first)
+ pass_in += CALLBACK(GLOBAL_PROC, /proc/path_map_passalong, on_finish, get_turf(requester), mintargetdist, skip_first)
// And to allow subsequent calls to reuse the same map, we'll put a placeholder in the cache, and fill it up when the pathing finishes
var/datum/path_map/empty = new()
- empty.pass_info = new(caller, access)
+ empty.pass_info = new(requester, access)
empty.start = target
empty.pass_space = simulated_only
empty.avoid = exclude
@@ -133,9 +133,9 @@ SUBSYSTEM_DEF(pathfinder)
source_to_maps[target] -= same_target
/// Initiates a SSSP run. Returns true if we're good, FALSE if something's failed
-/datum/controller/subsystem/pathfinder/proc/build_map(atom/movable/caller, turf/source, max_distance = 30, access = list(), simulated_only = TRUE, turf/exclude, list/datum/callback/on_finish)
+/datum/controller/subsystem/pathfinder/proc/build_map(atom/movable/requester, turf/source, max_distance = 30, access = list(), simulated_only = TRUE, turf/exclude, list/datum/callback/on_finish)
var/datum/pathfind/sssp/path = new()
- path.setup(caller, access, source, max_distance, simulated_only, exclude, on_finish)
+ path.setup(requester, access, source, max_distance, simulated_only, exclude, on_finish)
if(path.start())
active_pathing += path
return TRUE
@@ -160,7 +160,7 @@ SUBSYSTEM_DEF(pathfinder)
/// Optionally takes a max age to accept (defaults to 0 seconds) and a minimum acceptable range
/// If include_building is true and we can only find a building path, ew'll use that instead. tho we will wait for it to finish first
/datum/controller/subsystem/pathfinder/proc/get_valid_map(datum/can_pass_info/pass_info, turf/target, simulated_only = TRUE, turf/exclude, age = MAP_REUSE_INSTANT, min_range = -INFINITY, include_building = FALSE)
- // Walk all the maps that match our caller's turf OR our target's
+ // Walk all the maps that match our requester's turf OR our target's
// Then hold onto em. If their cache time is short we can reuse/expand them, if not we'll have to make a new one
var/oldest_time = world.time - age
/// Backup return value used if no finished pathmaps are found
@@ -189,7 +189,7 @@ SUBSYSTEM_DEF(pathfinder)
/// Takes a set of pathfind info, returns all valid pathmaps that would work
/// Takes an optional minimum range arg
/datum/controller/subsystem/pathfinder/proc/get_valid_maps(datum/can_pass_info/pass_info, turf/target, simulated_only = TRUE, turf/exclude, age = MAP_REUSE_INSTANT, min_range = -INFINITY, include_building = FALSE)
- // Walk all the maps that match our caller's turf OR our target's
+ // Walk all the maps that match our requester's turf OR our target's
// Then hold onto em. If their cache time is short we can reuse/expand them, if not we'll have to make a new one
var/list/valid_maps = list()
var/oldest_time = world.time - age
diff --git a/code/datums/actions/cooldown_action.dm b/code/datums/actions/cooldown_action.dm
index ed4309c36e1c..62794c8dfee2 100644
--- a/code/datums/actions/cooldown_action.dm
+++ b/code/datums/actions/cooldown_action.dm
@@ -222,7 +222,7 @@
return PreActivate(user)
/// Intercepts client owner clicks to activate the ability
-/datum/action/cooldown/proc/InterceptClickOn(mob/living/caller, params, atom/target)
+/datum/action/cooldown/proc/InterceptClickOn(mob/living/user, params, atom/target)
if(!IsAvailable(feedback = TRUE))
return FALSE
if(!target)
@@ -233,8 +233,8 @@
// And if we reach here, the action was complete successfully
if(unset_after_click)
- unset_click_ability(caller, refund_cooldown = FALSE)
- caller.next_click = world.time + click_cd_override
+ unset_click_ability(user, refund_cooldown = FALSE)
+ user.next_click = world.time + click_cd_override
return TRUE
diff --git a/code/datums/actions/innate_action.dm b/code/datums/actions/innate_action.dm
index c5271033bc6b..09d90736729a 100644
--- a/code/datums/actions/innate_action.dm
+++ b/code/datums/actions/innate_action.dm
@@ -76,17 +76,17 @@
on_who.click_intercept = null
/// Handles whenever a mob clicks on something
-/datum/action/innate/proc/InterceptClickOn(mob/living/caller, params, atom/clicked_on)
+/datum/action/innate/proc/InterceptClickOn(mob/living/user, params, atom/clicked_on)
if(!IsAvailable(feedback = TRUE))
- unset_ranged_ability(caller)
+ unset_ranged_ability(user)
return FALSE
if(!clicked_on)
return FALSE
- return do_ability(caller, clicked_on)
+ return do_ability(user, clicked_on)
/// Actually goes through and does the click ability
-/datum/action/innate/proc/do_ability(mob/living/caller, atom/clicked_on)
+/datum/action/innate/proc/do_ability(mob/living/user, atom/clicked_on)
return FALSE
/datum/action/innate/Remove(mob/removed_from)
diff --git a/code/datums/components/bloody_spreader.dm b/code/datums/components/bloody_spreader.dm
new file mode 100644
index 000000000000..2a90a1e27c80
--- /dev/null
+++ b/code/datums/components/bloody_spreader.dm
@@ -0,0 +1,46 @@
+/datum/component/bloody_spreader
+ dupe_mode = COMPONENT_DUPE_UNIQUE_PASSARGS
+ // How many bloodening instances are left. Deleted on zero.
+ var/blood_left
+ // We will spread this blood DNA to targets!
+ var/list/blood_dna
+ // Blood splashed around everywhere will carry these diseases. Oh no...
+ var/list/diseases
+
+/datum/component/bloody_spreader/Initialize(blood_left, list/blood_dna, list/diseases)
+ if(!isatom(parent))
+ return COMPONENT_INCOMPATIBLE
+ var/list/signals_to_add = list(COMSIG_ATOM_ENTERED, COMSIG_ATOM_BLOB_ACT, COMSIG_ATOM_HULK_ATTACK, COMSIG_ATOM_ATTACKBY)
+ if(ismovable(parent))
+ signals_to_add += list(COMSIG_MOVABLE_BUMP, COMSIG_MOVABLE_IMPACT)
+ if(isitem(parent))
+ //monkestation temp edit: replaced COMSIG_ITEM_ATTACK_ATOM with COMSIG_ITEM_ATTACK_OBJ
+ signals_to_add += list(COMSIG_ITEM_ATTACK, COMSIG_ITEM_ATTACK_OBJ, COMSIG_ITEM_HIT_REACT, COMSIG_ITEM_ATTACK_SELF, COMSIG_ITEM_EQUIPPED, COMSIG_ITEM_DROPPED)
+ var/atom/atom_parent = parent
+ if(atom_parent.atom_storage)
+ signals_to_add += list(COMSIG_STORAGE_STORED_ITEM)
+ else if(isstructure(parent))
+ signals_to_add += list(COMSIG_ATOM_ATTACK_HAND)
+
+ RegisterSignals(parent, signals_to_add, PROC_REF(spread_yucky_blood))
+
+ if(isclothing(parent))
+ parent.AddComponent(/datum/component/bloodysoles)
+
+ src.blood_left = blood_left
+ src.blood_dna = blood_dna
+ src.diseases = diseases
+
+/datum/component/bloody_spreader/proc/spread_yucky_blood(atom/parent, atom/bloody_fool)
+ SIGNAL_HANDLER
+ bloody_fool.add_blood_DNA(blood_dna, diseases)
+
+/datum/component/bloody_spreader/InheritComponent(/datum/component/new_comp, i_am_original, blood_left = 0)
+
+ if(!i_am_original)
+ return
+
+ if(src.blood_left >= INFINITY)
+ return
+
+ src.blood_left += blood_left
diff --git a/code/datums/components/chuunibyou.dm b/code/datums/components/chuunibyou.dm
index 00396a289b83..54e65a1400cc 100644
--- a/code/datums/components/chuunibyou.dm
+++ b/code/datums/components/chuunibyou.dm
@@ -47,6 +47,7 @@
RegisterSignal(parent, COMSIG_MOB_PRE_INVOCATION, PROC_REF(on_pre_invocation))
RegisterSignal(parent, COMSIG_LIVING_TRY_SPEECH, PROC_REF(on_try_speech))
RegisterSignal(parent, COMSIG_MOB_AFTER_SPELL_CAST, PROC_REF(on_after_spell_cast))
+ ADD_TRAIT(parent, TRAIT_CHUUNIBYOU, REF(src))
/datum/component/chuunibyou/UnregisterFromParent()
. = ..()
@@ -56,6 +57,7 @@
COMSIG_LIVING_TRY_SPEECH,
COMSIG_MOB_AFTER_SPELL_CAST,
))
+ REMOVE_TRAIT(parent, TRAIT_CHUUNIBYOU, REF(src))
/// signal sent when the parent tries to speak. we let speech pass if we are casting a spell so mimes still chuuni their spellcasts
/// (this may end in the mime dying)
diff --git a/code/datums/components/crafting/crafting.dm b/code/datums/components/crafting/crafting.dm
index 4b3e84a26ab6..55c5cb598cc7 100644
--- a/code/datums/components/crafting/crafting.dm
+++ b/code/datums/components/crafting/crafting.dm
@@ -10,7 +10,7 @@
C.icon = H.ui_style
H.static_inventory += C
CL.screen += C
- RegisterSignal(C, COMSIG_CLICK, PROC_REF(component_ui_interact))
+ RegisterSignal(C, COMSIG_SCREEN_ELEMENT_CLICK, PROC_REF(component_ui_interact))
#define COOKING TRUE
#define CRAFTING FALSE
diff --git a/code/datums/components/lock_on_cursor.dm b/code/datums/components/lock_on_cursor.dm
index 624028a4671d..7174256d8529 100644
--- a/code/datums/components/lock_on_cursor.dm
+++ b/code/datums/components/lock_on_cursor.dm
@@ -43,6 +43,7 @@
datum/callback/on_click_callback,
datum/callback/on_lock,
datum/callback/can_target_callback,
+ catcher_default_click = TRUE, //monkestation edit
)
if(!ismob(parent))
return COMPONENT_INCOMPATIBLE
diff --git a/code/datums/components/mind_linker.dm b/code/datums/components/mind_linker.dm
index 73011707cd95..8cc2fb266590 100644
--- a/code/datums/components/mind_linker.dm
+++ b/code/datums/components/mind_linker.dm
@@ -10,10 +10,6 @@
var/network_name = "Mind Link"
/// The color of the network when talking in chat
var/chat_color
- /// The message sent to someone when linked up.
- var/link_message
- /// The message sent to someone when unlinked.
- var/unlink_message
/// A list of all signals that will call qdel() on our component if triggered. Optional.
var/list/signals_which_destroy_us
/// A callback invoked after an unlink is done. Optional.
@@ -24,25 +20,25 @@
var/speech_action_icon_state = "link_speech"
/// The icon background for the speech action handed out.
var/speech_action_background_icon_state = "bg_alien"
- /// The master's linking action, which allows them to link people to the network.
- var/datum/action/linker_action
+ /// The border icon state for the speech action handed out.
+ var/speech_action_overlay_state = "bg_alien_border"
/// The master's speech action. The owner of the link shouldn't lose this as long as the link remains.
- var/datum/action/innate/linked_speech/master_speech
+ VAR_FINAL/datum/action/innate/linked_speech/master_speech
/// An assoc list of [mob/living]s to [datum/action/innate/linked_speech]s. All the mobs that are linked to our network.
- var/list/mob/living/linked_mobs = list()
+ VAR_FINAL/list/mob/living/linked_mobs = list()
/datum/component/mind_linker/Initialize(
+ // Customization related settings
network_name = "Mind Link",
chat_color = "#008CA2",
- linker_action_path,
- link_message,
- unlink_message,
- signals_which_destroy_us,
- datum/callback/post_unlink_callback,
speech_action_icon = 'icons/mob/actions/actions_slime.dmi',
speech_action_icon_state = "link_speech",
speech_action_background_icon_state = "bg_alien",
- )
+ speech_action_overlay_state = "bg_alien_border",
+ // Optional
+ signals_which_destroy_us,
+ datum/callback/post_unlink_callback,
+)
if(!isliving(parent))
return COMPONENT_INCOMPATIBLE
@@ -51,24 +47,15 @@
src.network_name = network_name
src.chat_color = chat_color
- src.link_message = link_message || "You are now connected to [owner.real_name]'s [network_name]."
- src.unlink_message = unlink_message || "You are no longer connected to [owner.real_name]'s [network_name]."
+ src.speech_action_icon = speech_action_icon
+ src.speech_action_icon_state = speech_action_icon_state
+ src.speech_action_background_icon_state = speech_action_background_icon_state
if(islist(signals_which_destroy_us))
src.signals_which_destroy_us = signals_which_destroy_us
if(post_unlink_callback)
src.post_unlink_callback = post_unlink_callback
- src.speech_action_icon = speech_action_icon
- src.speech_action_icon_state = speech_action_icon_state
- src.speech_action_background_icon_state = speech_action_background_icon_state
-
- if(ispath(linker_action_path))
- linker_action = new linker_action_path(src)
- linker_action.Grant(owner)
- else
- stack_trace("[type] was created without a valid linker_action_path. No one will be able to link to it.")
-
master_speech = new(src)
master_speech.Grant(owner)
@@ -78,7 +65,6 @@
for(var/mob/living/remaining_mob as anything in linked_mobs)
unlink_mob(remaining_mob)
linked_mobs.Cut()
- QDEL_NULL(linker_action)
QDEL_NULL(master_speech)
post_unlink_callback = null
return ..()
@@ -99,10 +85,6 @@
/datum/component/mind_linker/proc/link_mob(mob/living/to_link)
if(QDELETED(to_link) || to_link.stat == DEAD)
return FALSE
- if(HAS_TRAIT(to_link, TRAIT_MINDSHIELD)) // Mindshield implant - no dice
- return FALSE
- if(to_link.can_block_magic(MAGIC_RESISTANCE_MIND, charge_cost = 0))
- return FALSE
if(linked_mobs[to_link])
return FALSE
@@ -110,20 +92,19 @@
if(to_link == owner)
return FALSE
- to_chat(to_link, span_notice(link_message))
- to_chat(owner, span_notice("You connect [to_link]'s mind to your [network_name]."))
-
- for(var/mob/living/other_link as anything in linked_mobs)
- to_chat(other_link, span_notice("You feel a new presence within [owner.real_name]'s [network_name]."))
-
var/datum/action/innate/linked_speech/new_link = new(src)
new_link.Grant(to_link)
linked_mobs[to_link] = new_link
- RegisterSignals(to_link, list(COMSIG_LIVING_DEATH, COMSIG_QDELETING, COMSIG_MINDSHIELD_IMPLANTED), PROC_REF(unlink_mob))
+ RegisterSignals(to_link, list(COMSIG_LIVING_DEATH, COMSIG_QDELETING), PROC_REF(sig_unlink_mob))
return TRUE
+/datum/component/mind_linker/proc/sig_unlink_mob(mob/living/to_unlink)
+ SIGNAL_HANDLER
+
+ unlink_mob(to_unlink)
+
/**
* Unlinks [to_unlink] from our network, deleting their speech action
* and cleaning up anything involved.
@@ -131,25 +112,17 @@
* Also invokes post_unlink_callback, if supplied.
*/
/datum/component/mind_linker/proc/unlink_mob(mob/living/to_unlink)
- SIGNAL_HANDLER
-
if(!linked_mobs[to_unlink])
- return
+ return FALSE
- to_chat(to_unlink, span_warning(unlink_message))
post_unlink_callback?.Invoke(to_unlink)
- UnregisterSignal(to_unlink, list(COMSIG_LIVING_DEATH, COMSIG_QDELETING, COMSIG_MINDSHIELD_IMPLANTED))
+ UnregisterSignal(to_unlink, list(COMSIG_LIVING_DEATH, COMSIG_QDELETING))
var/datum/action/innate/linked_speech/old_link = linked_mobs[to_unlink]
linked_mobs -= to_unlink
qdel(old_link)
-
- var/mob/living/owner = parent
-
- to_chat(owner, span_warning("You feel someone disconnect from your [network_name]."))
- for(var/mob/living/other_link as anything in linked_mobs)
- to_chat(other_link, span_warning("You feel a pressence disappear from [owner.real_name]'s [network_name]."))
+ return TRUE
/**
* Signal proc sent from any signals given to us initialize.
@@ -164,6 +137,84 @@
qdel(src)
+/// Subtype of mind linker (I know) which is more active rather than passive,
+/// which involves the master linking people manually rather than people being added automatically.
+/datum/component/mind_linker/active_linking
+ /// The message sent to someone when linked up.
+ var/link_message
+ /// The message sent to someone when unlinked.
+ var/unlink_message
+ /// The master's linking action, which allows them to link people to the network.
+ VAR_FINAL/datum/action/linker_action
+
+/datum/component/mind_linker/active_linking/Initialize(
+ // Customization related settings
+ network_name = "Mind Link",
+ chat_color = "#008CA2",
+ speech_action_icon = 'icons/mob/actions/actions_slime.dmi',
+ speech_action_icon_state = "link_speech",
+ speech_action_background_icon_state = "bg_alien",
+ speech_action_overlay_state = "bg_alien_border",
+ // Optional
+ signals_which_destroy_us,
+ datum/callback/post_unlink_callback,
+ // Optional for this subtype
+ link_message,
+ unlink_message,
+ // Required for this subtype
+ linker_action_path,
+)
+
+ . = ..()
+ if(. == COMPONENT_INCOMPATIBLE)
+ return
+
+ var/mob/living/owner = parent
+ src.link_message = link_message || "You are now connected to [owner.real_name]'s [network_name]."
+ src.unlink_message = unlink_message || "You are no longer connected to [owner.real_name]'s [network_name]."
+
+ if(ispath(linker_action_path))
+ linker_action = new linker_action_path(src)
+ linker_action.Grant(owner)
+ else
+ stack_trace("[type] was created without a valid linker_action_path. No one will be able to link to it.")
+
+ to_chat(owner, span_boldnotice("You establish a [network_name], allowing you to link minds to communicate telepathically."))
+
+/datum/component/mind_linker/active_linking/Destroy()
+ QDEL_NULL(linker_action)
+ return ..()
+
+/datum/component/mind_linker/active_linking/link_mob(mob/living/to_link)
+ if(HAS_TRAIT(to_link, TRAIT_MINDSHIELD)) // Mindshield implant - no dice
+ return FALSE
+ if(to_link.can_block_magic(MAGIC_RESISTANCE_MIND, charge_cost = 0))
+ return FALSE
+
+ . = ..()
+ if(!.)
+ return
+
+ RegisterSignal(to_link, COMSIG_MINDSHIELD_IMPLANTED, PROC_REF(sig_unlink_mob))
+ var/mob/living/owner = parent
+ to_chat(to_link, span_notice(link_message))
+ to_chat(owner, span_notice("You connect [to_link]'s mind to your [network_name]."))
+ for(var/mob/living/other_link as anything in linked_mobs)
+ to_chat(other_link, span_notice("You feel a new presence within [owner.real_name]'s [network_name]."))
+
+/datum/component/mind_linker/active_linking/unlink_mob(mob/living/to_unlink)
+ . = ..()
+ if(!.)
+ return
+
+ UnregisterSignal(to_unlink, COMSIG_MINDSHIELD_IMPLANTED)
+ var/mob/living/owner = parent
+ to_chat(to_unlink, span_warning(unlink_message))
+ to_chat(owner, span_warning("You feel someone disconnect from your [network_name]."))
+ for(var/mob/living/other_link as anything in linked_mobs)
+ to_chat(other_link, span_warning("You feel a pressence disappear from [owner.real_name]'s [network_name]."))
+
+// Used in mind linker to talk to everyone in the network.
/datum/action/innate/linked_speech
name = "Mind Link Speech"
desc = "Send a psychic message to everyone connected to your Link."
diff --git a/code/datums/components/plumbing/_plumbing.dm b/code/datums/components/plumbing/_plumbing.dm
index d51f233f0ec8..ed3991a70e5f 100644
--- a/code/datums/components/plumbing/_plumbing.dm
+++ b/code/datums/components/plumbing/_plumbing.dm
@@ -334,7 +334,7 @@
tile_covered = should_hide
parent_obj.update_appearance()
-/datum/component/plumbing/proc/change_ducting_layer(obj/caller, obj/changer, new_layer = DUCT_LAYER_DEFAULT)
+/datum/component/plumbing/proc/change_ducting_layer(obj/user, obj/changer, new_layer = DUCT_LAYER_DEFAULT)
SIGNAL_HANDLER
ducting_layer = new_layer
@@ -393,7 +393,7 @@
demand_connects = NORTH
supply_connects = SOUTH
-/datum/component/plumbing/manifold/change_ducting_layer(obj/caller, obj/changer, new_layer)
+/datum/component/plumbing/manifold/change_ducting_layer(obj/user, obj/changer, new_layer)
return
#define READY 2
diff --git a/code/datums/components/scope.dm b/code/datums/components/scope.dm
index 7f66a930d24e..2e10f7663a73 100644
--- a/code/datums/components/scope.dm
+++ b/code/datums/components/scope.dm
@@ -152,8 +152,16 @@
/atom/movable/screen/fullscreen/cursor_catcher/scope/calculate_params()
var/list/modifiers = params2list(mouse_params)
- var/icon_x = text2num(LAZYACCESS(modifiers, VIS_X)) || view_list[1]*world.icon_size/2
- var/icon_y = text2num(LAZYACCESS(modifiers, VIS_Y)) || view_list[2]*world.icon_size/2
+ var/icon_x = text2num(LAZYACCESS(modifiers, VIS_X))
+ if(isnull(icon_x))
+ icon_x = text2num(LAZYACCESS(modifiers, ICON_X))
+ if(isnull(icon_x))
+ icon_x = view_list[1]*world.icon_size/2
+ var/icon_y = text2num(LAZYACCESS(modifiers, VIS_Y))
+ if(isnull(icon_y))
+ icon_y = text2num(LAZYACCESS(modifiers, ICON_Y))
+ if(isnull(icon_y))
+ icon_y = view_list[2]*world.icon_size/2
given_x = round(range_modifier * (icon_x - view_list[1]*world.icon_size/2))
given_y = round(range_modifier * (icon_y - view_list[2]*world.icon_size/2))
given_turf = locate(owner.x+round(given_x/world.icon_size, 1),owner.y+round(given_y/world.icon_size, 1),owner.z)
diff --git a/code/datums/components/shielded.dm b/code/datums/components/shielded.dm
index 13fc5d0412d7..26198b0f33f1 100644
--- a/code/datums/components/shielded.dm
+++ b/code/datums/components/shielded.dm
@@ -186,5 +186,5 @@
. = COMPONENT_NO_AFTERATTACK
adjust_charge(charge_recovery)
- to_chat(user, span_notice("You charge \the [parent]. It can now absorb [current_charges] hits."))
+ to_chat(user, span_notice("You charge \the [parent]. It can now absorb [current_charges] [lose_multiple_charges ? "damage" : "hits"].")) //monke edit: adds the multiple charges check
qdel(recharge_rune)
diff --git a/code/datums/components/shrink.dm b/code/datums/components/shrink.dm
index 67cd3d39e23c..5b017e4cca63 100644
--- a/code/datums/components/shrink.dm
+++ b/code/datums/components/shrink.dm
@@ -1,6 +1,8 @@
/datum/component/shrink
var/olddens
var/oldopac
+ /// Tracks the squashable component we apply when we make the small mob squashable
+ var/datum/component/squashable/newsquash
dupe_mode = COMPONENT_DUPE_HIGHLANDER
/datum/component/shrink/Initialize(shrink_time)
@@ -24,13 +26,23 @@
if(ishuman(C))
var/mob/living/carbon/human/H = C
H.physiology.damage_resistance -= 100//carbons take double damage while shrunk
+ if(!L.GetComponent(/datum/component/squashable))
+ newsquash = L.AddComponent( \
+ /datum/component/squashable, \
+ squash_chance = 75, \
+ squash_damage = 10, \
+ squash_flags = SQUASHED_ALWAYS_IF_DEAD|SQUASHED_DONT_SQUASH_IN_CONTENTS, \
+ )
else
parent_atom.set_density(FALSE) // this is handled by the UNDENSE trait on mobs
parent_atom.visible_message(span_warning("[parent_atom] shrinks down to a tiny size!"),
span_userdanger("Everything grows bigger!"))
- QDEL_IN(src, shrink_time)
+ if(shrink_time >= 0) // negative shrink time is permanent
+ QDEL_IN(src, shrink_time)
/datum/component/shrink/Destroy()
+ if(newsquash)
+ qdel(newsquash)
var/atom/parent_atom = parent
parent_atom.transform = parent_atom.transform.Scale(2,2)
parent_atom.set_opacity(oldopac)
diff --git a/code/datums/components/singularity.dm b/code/datums/components/singularity.dm
index 56a6723f21f4..b956e6345d50 100644
--- a/code/datums/components/singularity.dm
+++ b/code/datums/components/singularity.dm
@@ -286,7 +286,7 @@
if (STAGE_ONE)
steps = 1
if (STAGE_TWO)
- steps = 3//Yes this is right
+ steps = 2//Now THIS is right
if (STAGE_THREE)
steps = 3
if (STAGE_FOUR)
diff --git a/code/datums/components/splattercasting.dm b/code/datums/components/splattercasting.dm
index 1721c8fbf53c..2a0eb0dc2c36 100644
--- a/code/datums/components/splattercasting.dm
+++ b/code/datums/components/splattercasting.dm
@@ -21,10 +21,12 @@
RegisterSignal(parent, COMSIG_MOB_SPELL_PROJECTILE, PROC_REF(on_spell_projectile))
RegisterSignal(parent, COMSIG_MOB_BEFORE_SPELL_CAST, PROC_REF(on_before_spell_cast))
RegisterSignal(parent, COMSIG_MOB_AFTER_SPELL_CAST, PROC_REF(on_after_spell_cast))
+ ADD_TRAIT(parent, TRAIT_SPLATTERCASTER, REF(src))
/datum/component/splattercasting/UnregisterFromParent()
. = ..()
UnregisterSignal(parent, list(COMSIG_SPECIES_LOSS, COMSIG_MOB_SPELL_PROJECTILE, COMSIG_MOB_BEFORE_SPELL_CAST, COMSIG_MOB_AFTER_SPELL_CAST))
+ REMOVE_TRAIT(parent, TRAIT_SPLATTERCASTER, REF(src))
///signal sent when a spell casts a projectile
/datum/component/splattercasting/proc/on_species_change(mob/living/carbon/source, datum/species/lost_species)
diff --git a/code/datums/components/squashable.dm b/code/datums/components/squashable.dm
index b79cccff471f..d4fbbcba61f7 100644
--- a/code/datums/components/squashable.dm
+++ b/code/datums/components/squashable.dm
@@ -44,10 +44,10 @@
if((squash_flags & SQUASHED_DONT_SQUASH_IN_CONTENTS) && !isturf(parent_as_living.loc))
return
- if(squash_flags & SQUASHED_SHOULD_BE_DOWN && parent_as_living.body_position != LYING_DOWN)
+ if((squash_flags & SQUASHED_SHOULD_BE_DOWN) && parent_as_living.body_position != LYING_DOWN)
return
- var/should_squash = prob(squash_chance)
+ var/should_squash = ((squash_flags & SQUASHED_ALWAYS_IF_DEAD) && parent_as_living.stat == DEAD) || prob(squash_chance)
if(should_squash && on_squash_callback)
if(on_squash_callback.Invoke(parent_as_living, crossing_movable))
diff --git a/code/datums/diseases/_MobProcs.dm b/code/datums/diseases/_MobProcs.dm
index 666711762c19..ce0e6169a73d 100644
--- a/code/datums/diseases/_MobProcs.dm
+++ b/code/datums/diseases/_MobProcs.dm
@@ -64,7 +64,7 @@
if(ishuman(src))
var/mob/living/carbon/human/infecting_human = src
- if(infecting_human.reagents.has_reagent(/datum/reagent/medicine/antipathogenic/spaceacillin) && prob(75))
+ if(HAS_TRAIT(infecting_human, TRAIT_VIRUS_RESISTANCE) && prob(75))
return
switch(target_zone)
@@ -95,10 +95,8 @@
disease.try_infect(src)
/mob/living/proc/AirborneContractDisease(datum/disease/disease, force_spread)
- if(ishuman(src))
- var/mob/living/carbon/human/infecting_human = src
- if(infecting_human.reagents.has_reagent(/datum/reagent/medicine/antipathogenic/spaceacillin) && prob(75))
- return
+ if(HAS_TRAIT(src, TRAIT_VIRUS_RESISTANCE) && prob(75))
+ return
if(((disease.spread_flags & DISEASE_SPREAD_AIRBORNE) || force_spread) && prob((50*disease.spreading_modifier) - 1))
ForceContractDisease(disease)
diff --git a/code/datums/diseases/_disease.dm b/code/datums/diseases/_disease.dm
index 4bf7af82207c..129e9b9b5fb5 100644
--- a/code/datums/diseases/_disease.dm
+++ b/code/datums/diseases/_disease.dm
@@ -69,7 +69,7 @@ GLOBAL_LIST_INIT(inspectable_diseases, list())
///Proc to process the disease and decide on whether to advance, cure or make the sympthoms appear. Returns a boolean on whether to continue acting on the symptoms or not.
/datum/disease/proc/stage_act(seconds_per_tick, times_fired)
- var/slowdown = affected_mob.reagents.has_reagent(/datum/reagent/medicine/antipathogenic/spaceacillin) ? 0.5 : 1 // spaceacillin slows stage speed by 50%
+ var/slowdown = HAS_TRAIT(affected_mob, TRAIT_VIRUS_RESISTANCE) ? 0.5 : 1 // spaceacillin slows stage speed by 50%
if(has_cure())
if(SPT_PROB(cure_chance, seconds_per_tick))
@@ -106,7 +106,7 @@ GLOBAL_LIST_INIT(inspectable_diseases, list())
if(!(spread_flags & DISEASE_SPREAD_AIRBORNE) && !force_spread)
return
- if(affected_mob.reagents.has_reagent(/datum/reagent/medicine/antipathogenic/spaceacillin) || (affected_mob.satiety > 0 && prob(affected_mob.satiety/10)))
+ if(HAS_TRAIT(affected_mob, TRAIT_VIRUS_RESISTANCE) || (affected_mob.satiety > 0 && prob(affected_mob.satiety/10)))
return
affected_mob.spread_airborne_diseases()
diff --git a/code/datums/elements/bugkiller_reagent.dm b/code/datums/elements/bugkiller_reagent.dm
new file mode 100644
index 000000000000..57f2ae65d920
--- /dev/null
+++ b/code/datums/elements/bugkiller_reagent.dm
@@ -0,0 +1,88 @@
+/// Simple element to be applied to reagents
+/// When those reagents are exposed to mobs with the bug biotype, causes toxins damage
+/// If this delivers the killing blow on a non-humanoid mob, it applies a special status effect that does a funny animation
+/datum/element/bugkiller_reagent
+
+/datum/element/bugkiller_reagent/Attach(datum/target)
+ . = ..()
+ if(!istype(target, /datum/reagent))
+ return
+
+ RegisterSignal(target, COMSIG_REAGENT_EXPOSE_MOB, PROC_REF(on_expose))
+
+/datum/element/bugkiller_reagent/Detach(datum/source, ...)
+ . = ..()
+ UnregisterSignal(source, COMSIG_REAGENT_EXPOSE_MOB)
+
+/datum/element/bugkiller_reagent/proc/on_expose(
+ datum/reagent/source,
+ mob/living/exposed_mob,
+ methods = TOUCH,
+ reac_volume,
+ show_message = TRUE,
+ touch_protection = 0,
+)
+ SIGNAL_HANDLER
+
+ if(exposed_mob.stat == DEAD)
+ return
+ if(!(exposed_mob.mob_biotypes & MOB_BUG))
+ return
+
+ // capping damage so splashing a beaker on a moth is not an instant crit
+ var/damage = min(round(0.4 * reac_volume * (1 - touch_protection), 0.1), 12)
+ if(damage < 1)
+ return
+
+ if(!(exposed_mob.mob_biotypes & MOB_HUMANOID) && exposed_mob.health <= damage)
+ // no-ops if they are already in the process of dying
+ exposed_mob.apply_status_effect(/datum/status_effect/bugkiller_death)
+ return
+
+ if(exposed_mob.apply_damage(damage, TOX) && damage >= 6)
+ // yes i know it's not burn damage. the burning is on the inside.
+ to_chat(exposed_mob, span_danger("You feel a burning sensation."))
+
+/// If bugkiller delivers a lethal dosage, applies this effect which does a funny animation THEN kills 'em
+/// Also makes it so simplemobs / basicmobs no longer delete when they die (if they do)
+/datum/status_effect/bugkiller_death
+ id = "bugkiller_death"
+ alert_type = /atom/movable/screen/alert/status_effect/bugkiller_death
+ /// How many times the spasm loops
+ var/spasm_loops = 0
+
+/datum/status_effect/bugkiller_death/on_creation(mob/living/new_other, duration = 4 SECONDS)
+ src.duration = duration
+ src.spasm_loops = ROUND_UP(duration / 0.8) // one spasm ~= 0.8 deciseconds (yes deciseconds)
+ return ..()
+
+/datum/status_effect/bugkiller_death/on_apply()
+ if(owner.stat == DEAD)
+ return FALSE
+ playsound(owner, 'sound/voice/human/malescream_1.ogg', 25, TRUE, extrarange = SILENCED_SOUND_EXTRARANGE, frequency = 5)
+ to_chat(owner, span_userdanger("The world begins to go dark..."))
+ owner.spasm_animation(spasm_loops)
+ owner.adjust_eye_blur(duration)
+ return TRUE
+
+/datum/status_effect/bugkiller_death/on_remove()
+ if(owner.stat == DEAD || QDELETED(owner))
+ return
+
+ if(isbasicmob(owner))
+ var/mob/living/basic/basic_owner = owner
+ basic_owner.basic_mob_flags &= ~DEL_ON_DEATH
+ basic_owner.basic_mob_flags |= FLIP_ON_DEATH
+
+ if(isanimal(owner))
+ var/mob/living/simple_animal/simple_owner = owner
+ simple_owner.del_on_death = FALSE
+ simple_owner.flip_on_death = TRUE
+
+ owner.investigate_log("died to being sprayed with bugkiller.", INVESTIGATE_DEATHS)
+ owner.death()
+
+/atom/movable/screen/alert/status_effect/bugkiller_death
+ name = "Overwhelming Toxicity"
+ desc = "Don't go into the light!"
+ icon_state = "paralysis"
diff --git a/code/datums/greyscale/json_configs/mutant_organs.json b/code/datums/greyscale/json_configs/mutant_organs.json
index 93dd66c9e64c..2e4aa1da8842 100644
--- a/code/datums/greyscale/json_configs/mutant_organs.json
+++ b/code/datums/greyscale/json_configs/mutant_organs.json
@@ -1,4 +1,18 @@
{
+ "appendix": [
+ {
+ "type": "icon_state",
+ "icon_state": "appendix",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "appendix_insides",
+ "blend_mode": "overlay",
+ "color_ids": [ 2 ]
+ }
+ ],
"brain": [
{
"type": "icon_state",
diff --git a/code/datums/helper_datums/teleport.dm b/code/datums/helper_datums/teleport.dm
index 6ea1a8121f09..bee48a2bb493 100644
--- a/code/datums/helper_datums/teleport.dm
+++ b/code/datums/helper_datums/teleport.dm
@@ -65,8 +65,9 @@
return FALSE
if(!forced)
- if(!check_teleport_valid(teleatom, destination, channel))
- teleatom.balloon_alert(teleatom, "something holds you back!")
+ if(!check_teleport_valid(teleatom, destturf, channel, original_destination = destination))
+ if(ismob(teleatom))
+ teleatom.balloon_alert(teleatom, "something holds you back!")
return FALSE
if(isobserver(teleatom))
@@ -184,7 +185,7 @@
return pick(turfs)
/// Validates that the teleport being attempted is valid or not
-/proc/check_teleport_valid(atom/teleported_atom, atom/destination, channel)
+/proc/check_teleport_valid(atom/teleported_atom, atom/destination, channel, atom/original_destination = null)
var/area/origin_area = get_area(teleported_atom)
var/turf/origin_turf = get_turf(teleported_atom)
@@ -194,6 +195,11 @@
if(HAS_TRAIT(teleported_atom, TRAIT_NO_TELEPORT))
return FALSE
+ // prevent unprecise teleports from landing you outside of the destination's reserved area
+ if(is_reserved_level(destination_turf.z) && istype(original_destination) \
+ && SSmapping.get_reservation_from_turf(destination_turf) != SSmapping.get_reservation_from_turf(get_turf(original_destination)))
+ return FALSE
+
if((origin_area.area_flags & NOTELEPORT) || (destination_area.area_flags & NOTELEPORT))
return FALSE
diff --git a/code/datums/holocall.dm b/code/datums/holocall.dm
index 78ec5f133066..2a93ac55ed05 100644
--- a/code/datums/holocall.dm
+++ b/code/datums/holocall.dm
@@ -34,10 +34,10 @@
///calls from a head of staff autoconnect, if the receiving pad is not secure.
var/head_call = FALSE
-//creates a holocall made by `caller` from `calling_pad` to `callees`
-/datum/holocall/New(mob/living/caller, obj/machinery/holopad/calling_pad, list/callees, elevated_access = FALSE)
+//creates a holocall made by `caller_user` from `calling_pad` to `callees`
+/datum/holocall/New(mob/living/caller_user, obj/machinery/holopad/calling_pad, list/callees, elevated_access = FALSE)
call_start_time = world.time
- user = caller
+ user = caller_user
calling_pad.outgoing_call = src
calling_holopad = calling_pad
head_call = elevated_access
diff --git a/code/datums/materials/meat.dm b/code/datums/materials/meat.dm
index 162f0f2643e8..b9000dfd173c 100644
--- a/code/datums/materials/meat.dm
+++ b/code/datums/materials/meat.dm
@@ -18,25 +18,45 @@
/datum/material/meat/on_removed(atom/source, amount, material_flags)
. = ..()
qdel(source.GetComponent(/datum/component/edible))
+ qdel(source.GetComponent(/datum/component/blood_walk))
+ qdel(source.GetComponent(/datum/component/bloody_spreader))
/datum/material/meat/on_applied_obj(obj/O, amount, material_flags)
. = ..()
- make_edible(O, amount, material_flags)
+ make_meaty(O, amount, material_flags)
/datum/material/meat/on_applied_turf(turf/T, amount, material_flags)
. = ..()
- make_edible(T, amount, material_flags)
+ make_meaty(T, amount, material_flags)
-/datum/material/meat/proc/make_edible(atom/source, amount, material_flags)
+/datum/material/meat/proc/make_meaty(atom/source, amount, material_flags)
var/nutriment_count = 3 * (amount / SHEET_MATERIAL_AMOUNT)
var/oil_count = 2 * (amount / SHEET_MATERIAL_AMOUNT)
source.AddComponent(/datum/component/edible, \
initial_reagents = list(/datum/reagent/consumable/nutriment = nutriment_count, /datum/reagent/consumable/cooking_oil = oil_count), \
foodtypes = RAW | MEAT | GROSS, \
eat_time = 3 SECONDS, \
- tastes = list("Fleshy"))
+ tastes = list("Meaty"))
+ source.AddComponent(
+ /datum/component/bloody_spreader,\
+ blood_left = (nutriment_count + oil_count) * 0.3,\
+ blood_dna = list("meaty DNA" = "MT-"),\
+ diseases = null,\
+ )
+
+ // Turfs can't handle the meaty goodness of blood walk.
+ if(!ismovable(source))
+ return
+
+ source.AddComponent(
+ /datum/component/blood_walk,\
+ blood_type = /obj/effect/decal/cleanable/blood,\
+ blood_spawn_chance = 35,\
+ max_blood = (nutriment_count + oil_count) * 0.3,\
+ )
+
/datum/material/meat/mob_meat
init_flags = MATERIAL_INIT_BESPOKE
var/subjectname = ""
diff --git a/code/datums/mood.dm b/code/datums/mood.dm
index 98016776eb40..9cce6e98a8f3 100644
--- a/code/datums/mood.dm
+++ b/code/datums/mood.dm
@@ -292,7 +292,7 @@
mood_screen_object.color = "#4b96c4"
hud.infodisplay += mood_screen_object
RegisterSignal(hud, COMSIG_QDELETING, PROC_REF(unmodify_hud))
- RegisterSignal(mood_screen_object, COMSIG_CLICK, PROC_REF(hud_click))
+ RegisterSignal(mood_screen_object, COMSIG_SCREEN_ELEMENT_CLICK, PROC_REF(hud_click))
/// Removes the mood HUD object
/datum/mood/proc/unmodify_hud(datum/source)
@@ -518,10 +518,9 @@
holder.layer = LOW_MOB_LAYER
holder.icon_state = null
if(initial(type.mood_change) > 0)
- holder.icon_state = "hud_good_mood"
+ flick("hud_good_mood", holder)
else
- holder.icon_state = "hud_bad_mood"
- addtimer(VARSET_CALLBACK(holder, icon_state, null), 19, (TIMER_UNIQUE|TIMER_OVERRIDE))
+ flick("hud_bad_mood", holder)
//MONKESTATION ADDITION END
#undef MINOR_INSANITY_PEN
diff --git a/code/datums/mutations/cold.dm b/code/datums/mutations/cold.dm
index f999eed421d5..57c4f854fc7a 100644
--- a/code/datums/mutations/cold.dm
+++ b/code/datums/mutations/cold.dm
@@ -18,6 +18,7 @@
item_type = /obj/item/stack/sheet/mineral/snow
delete_old = FALSE
+ delete_on_failure = FALSE
/datum/mutation/human/cryokinesis
name = "Cryokinesis"
diff --git a/code/datums/proximity_monitor/fields/gravity.dm b/code/datums/proximity_monitor/fields/gravity.dm
index ac9b143c2083..f970b0d53b6f 100644
--- a/code/datums/proximity_monitor/fields/gravity.dm
+++ b/code/datums/proximity_monitor/fields/gravity.dm
@@ -1,3 +1,4 @@
+// Proximity monitor applies forced gravity to all turfs in range.
/datum/proximity_monitor/advanced/gravity
edge_is_a_field = TRUE
var/gravity_value = 0
@@ -10,7 +11,9 @@
/datum/proximity_monitor/advanced/gravity/setup_field_turf(turf/target)
. = ..()
- if (isnull(modified_turfs[target]))
+ if(!isnull(modified_turfs[target]))
+ return
+ if(HAS_TRAIT(target, TRAIT_FORCED_GRAVITY))
return
target.AddElement(/datum/element/forced_gravity, gravity_value, can_override = TRUE)
modified_turfs[target] = gravity_value
@@ -19,7 +22,8 @@
. = ..()
if(isnull(modified_turfs[target]))
return
- target.RemoveElement(/datum/element/forced_gravity, modified_turfs[target])
+ var/grav_value = modified_turfs[target] || 0
+ target.RemoveElement(/datum/element/forced_gravity, grav_value)
modified_turfs -= target
// Subtype which pops up a balloon alert when a mob enters the field
diff --git a/code/datums/station_traits/_station_trait.dm b/code/datums/station_traits/_station_trait.dm
index 44aaffb24910..b979aaf5330e 100644
--- a/code/datums/station_traits/_station_trait.dm
+++ b/code/datums/station_traits/_station_trait.dm
@@ -55,3 +55,15 @@
REMOVE_TRAIT(SSstation, trait_to_give, STATION_TRAIT)
qdel(src)
+
+///Called by decals if they can be colored, to see if we got some cool colors for them. Only takes the first station trait
+/proc/request_station_colors(atom/thing_to_color, pattern)
+ for(var/datum/station_trait/trait in SSstation.station_traits)
+ var/decal_color = trait.get_decal_color(thing_to_color, pattern || PATTERN_DEFAULT)
+ if(decal_color)
+ return decal_color
+ return null
+
+///Return a color for the decals, if any
+/datum/station_trait/proc/get_decal_color(thing_to_color, pattern)
+ return
diff --git a/code/datums/station_traits/neutral_traits.dm b/code/datums/station_traits/neutral_traits.dm
index 1600bdc6c19a..78955436f5a4 100644
--- a/code/datums/station_traits/neutral_traits.dm
+++ b/code/datums/station_traits/neutral_traits.dm
@@ -308,12 +308,12 @@
flags_inv = 0
armor_type = /datum/armor/none
var/static/list/hat_colors = list(
- COLOR_BRIGHT_RED,
- COLOR_BRIGHT_ORANGE,
- COLOR_BRIGHT_YELLOW,
- COLOR_BRIGHT_GREEN,
- COLOR_BRIGHT_TEAL,
- COLOR_BRIGHT_PURPLE,
+ COLOR_PRIDE_RED,
+ COLOR_PRIDE_ORANGE,
+ COLOR_PRIDE_YELLOW,
+ COLOR_PRIDE_GREEN,
+ COLOR_PRIDE_BLUE,
+ COLOR_PRIDE_PURPLE,
)
/obj/item/clothing/head/costume/party/Initialize(mapload)
diff --git a/code/datums/status_effects/debuffs/debuffs.dm b/code/datums/status_effects/debuffs/debuffs.dm
index d1d29681131c..4fe68d281eae 100644
--- a/code/datums/status_effects/debuffs/debuffs.dm
+++ b/code/datums/status_effects/debuffs/debuffs.dm
@@ -852,6 +852,9 @@
icon_state = "antalert"
/atom/movable/screen/alert/status_effect/ants/Click()
+ . = ..()
+ if(!.)
+ return
var/mob/living/living = owner
if(!istype(living) || !living.can_resist() || living != owner)
return
diff --git a/code/datums/status_effects/wound_effects.dm b/code/datums/status_effects/wound_effects.dm
index ed0b7b555e46..8965d22ad197 100644
--- a/code/datums/status_effects/wound_effects.dm
+++ b/code/datums/status_effects/wound_effects.dm
@@ -29,6 +29,7 @@
id = "limp"
status_type = STATUS_EFFECT_REPLACE
tick_interval = 0
+ on_remove_on_mob_delete = TRUE
alert_type = /atom/movable/screen/alert/status_effect/limp
var/msg_stage = 0//so you dont get the most intense messages immediately
/// The left leg of the limping person
@@ -138,9 +139,9 @@
/datum/status_effect/wound
id = "wound"
status_type = STATUS_EFFECT_MULTIPLE
+ on_remove_on_mob_delete = TRUE
var/obj/item/bodypart/linked_limb
var/datum/wound/linked_wound
- alert_type = NONE
/datum/status_effect/wound/on_creation(mob/living/new_owner, incoming_wound)
linked_wound = incoming_wound
diff --git a/code/datums/storage/storage.dm b/code/datums/storage/storage.dm
index 01a37b4c80c6..5fffb2f0adb5 100644
--- a/code/datums/storage/storage.dm
+++ b/code/datums/storage/storage.dm
@@ -404,6 +404,8 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches)
if(!can_insert(to_insert, user, force = force))
return FALSE
+ SEND_SIGNAL(resolve_location, COMSIG_STORAGE_STORED_ITEM, to_insert, user, force)
+
to_insert.item_flags |= IN_STORAGE
to_insert.forceMove(resolve_location)
item_insertion_feedback(user, to_insert, override)
diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm
index 453e9fe19940..b9c8cdad258d 100644
--- a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm
+++ b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm
@@ -585,8 +585,6 @@
var/mob/living/basic/space_dragon/S = new (pick(spawn_locs))
player_mind.transfer_to(S)
- player_mind.set_assigned_role(SSjob.GetJobType(/datum/job/space_dragon))
- player_mind.special_role = ROLE_SPACE_DRAGON
player_mind.add_antag_datum(/datum/antagonist/space_dragon)
playsound(S, 'sound/magic/ethereal_exit.ogg', 50, TRUE, -1)
diff --git a/code/game/machinery/botlaunchpad.dm b/code/game/machinery/botlaunchpad.dm
index a4ad07e70bc2..60de1657ce8a 100644
--- a/code/game/machinery/botlaunchpad.dm
+++ b/code/game/machinery/botlaunchpad.dm
@@ -1,11 +1,11 @@
/obj/machinery/botpad
- name = "Bot pad"
+ name = "orbital bot pad"
desc = "A lighter version of the orbital mech pad modified to launch bots. Requires linking to a remote to function."
icon = 'icons/obj/telescience.dmi'
icon_state = "botpad"
circuit = /obj/item/circuitboard/machine/botpad
// ID of the console, used for linking up
- var/id = "botlauncher"
+ // var/id = "botlauncher" MONKESTATION removal
var/obj/item/botpad_remote/connected_remote
var/datum/weakref/launched_bot // we need this to recall the bot
@@ -44,6 +44,9 @@
user.balloon_alert(user, "too many bots on the pad!")
return
possible_bot = robot // We don't change the launched_bot var here because we are not sure if there is another bot on the pad.
+ if(QDELETED(possible_bot)) //MONKESTATION addition
+ user.balloon_alert(user, "no bots detected on the pad!")
+ return
launched_bot = WEAKREF(possible_bot)
podspawn(list(
"target" = get_turf(src),
@@ -56,15 +59,15 @@
/obj/machinery/botpad/proc/recall(mob/living/user)
var/atom/our_bot = launched_bot?.resolve()
if(isnull(our_bot))
- user.balloon_alert(user, "no bots detected on the pad!")
+ user.balloon_alert(user, "no bot to send back to the pad!")
return
user.balloon_alert(user, "bot sent back to pad")
if(isbasicbot(our_bot))
var/mob/living/basic/bot/basic_bot = our_bot
- basic_bot.summon_bot(src)
- return
- var/mob/living/simple_animal/bot/simple_bot = our_bot
- simple_bot.call_bot(src, get_turf(src))
+ basic_bot.summon_bot(user, get_turf(src))
+ else
+ var/mob/living/simple_animal/bot/simple_bot = our_bot
+ simple_bot.call_bot(user, get_turf(src))
/obj/structure/closet/supplypod/botpod
style = STYLE_SEETHROUGH
diff --git a/code/game/machinery/dna_infuser/dna_infuser.dm b/code/game/machinery/dna_infuser/dna_infuser.dm
index b151ce9bdc69..286d4879594f 100644
--- a/code/game/machinery/dna_infuser/dna_infuser.dm
+++ b/code/game/machinery/dna_infuser/dna_infuser.dm
@@ -154,6 +154,7 @@
skillchip.set_metadata(chip)
// monkestation end
check_tier_progression(target)
+ return TRUE
/// Picks a random mutated organ from the infuser entry which is also compatible with the target mob.
/// Tries to return a typepath of a valid mutant organ if all of the following criteria are true:
diff --git a/code/game/machinery/dna_infuser/infuser_book.dm b/code/game/machinery/dna_infuser/infuser_book.dm
index 84a78a4899a7..ea5dbcbf4117 100644
--- a/code/game/machinery/dna_infuser/infuser_book.dm
+++ b/code/game/machinery/dna_infuser/infuser_book.dm
@@ -8,12 +8,22 @@
throw_speed = 2
throw_range = 5
w_class = WEIGHT_CLASS_TINY
+ drop_sound = 'sound/items/handling/book_drop.ogg'
+ pickup_sound = 'sound/items/handling/book_pickup.ogg'
/obj/item/infuser_book/ui_interact(mob/user, datum/tgui/ui)
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
ui = new(user, src, "InfuserBook")
ui.open()
+ playsound(src, SFX_PAGE_TURN, 30, TRUE)
+
+/obj/item/infuser_book/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state)
+ . = ..()
+ if(.)
+ return
+ if(action == "play_flip_sound")
+ playsound(src, SFX_PAGE_TURN, 30, TRUE)
/obj/item/infuser_book/ui_static_data(mob/user)
var/list/data = list()
diff --git a/code/game/machinery/dna_infuser/infuser_entries/infuser_tier_one_entries.dm b/code/game/machinery/dna_infuser/infuser_entries/infuser_tier_one_entries.dm
index fa345e5bae49..d24a951d76b5 100644
--- a/code/game/machinery/dna_infuser/infuser_entries/infuser_tier_one_entries.dm
+++ b/code/game/machinery/dna_infuser/infuser_entries/infuser_tier_one_entries.dm
@@ -75,3 +75,33 @@
infusion_desc = "skittish"
tier = DNA_MUTANT_TIER_ONE
status_effect_type = /datum/status_effect/organ_set_bonus/rat
+
+/datum/infuser_entry/roach
+ name = "Roach"
+ infuse_mob_name = "cockroach"
+ desc = "It seems as if you're a fan of ancient literature by your interest in this. Assuredly, merging cockroach DNA into your genome \
+ will not cause you to become incapable of leaving your bed. These creatures are incredibly resilient against many things \
+ humans are weak to, and we can use that! Who wouldn't like to survive a nuclear blast? \
+ NOTE: Squished roaches will not work for the infuser, if that wasn't obvious. Try spraying them with some pestkiller from botany!"
+ threshold_desc = "you will no longer be gibbed by explosions, and gain incredible resistance to viruses and radiation."
+ qualities = list(
+ "resilience to attacks from behind",
+ "healthier organs",
+ "get over disgust very quickly",
+ "the ability to survive a nuclear apocalypse",
+ "harder to pick yourself up from falling over",
+ "avoid toxins at all costs",
+ "always down to find a snack",
+ )
+ input_obj_or_mob = list(
+ /mob/living/basic/cockroach,
+ )
+ output_organs = list(
+ /obj/item/organ/internal/heart/roach,
+ /obj/item/organ/internal/stomach/roach,
+ /obj/item/organ/internal/liver/roach,
+ /obj/item/organ/internal/appendix/roach,
+ )
+ infusion_desc = "kafkaesque" // Gregor Samsa !!
+ tier = DNA_MUTANT_TIER_ONE
+ status_effect_type = /datum/status_effect/organ_set_bonus/roach
diff --git a/code/game/machinery/dna_infuser/organ_sets/roach_organs.dm b/code/game/machinery/dna_infuser/organ_sets/roach_organs.dm
new file mode 100644
index 000000000000..49b7f01c7c76
--- /dev/null
+++ b/code/game/machinery/dna_infuser/organ_sets/roach_organs.dm
@@ -0,0 +1,226 @@
+#define ROACH_ORGAN_COLOR "#7c4200"
+// Yeah i'm lazy and we don't use any of the other color slots
+#define ROACH_COLORS ROACH_ORGAN_COLOR + ROACH_ORGAN_COLOR + ROACH_ORGAN_COLOR
+
+/datum/armor/roach_internal_armor
+ bomb = 100
+ bio = 90
+
+/datum/status_effect/organ_set_bonus/roach
+ id = "organ_set_bonus_roach"
+ organs_needed = 4
+ bonus_activate_text = span_notice("Roach DNA is deeply infused with you! \
+ You feel increasingly resistant to explosives, radiation, and viral agents.")
+ bonus_deactivate_text = span_notice("You are no longer majority roach, \
+ and you feel much more vulnerable to nuclear apocalypses.")
+ // - Immunity to nuke gibs
+ // - Nukes come with radiation (not actually but yknow)
+ bonus_traits = list(TRAIT_NUKEIMMUNE, TRAIT_RADIMMUNE, TRAIT_VIRUS_RESISTANCE)
+ /// Armor type attached to the owner's physiology
+ var/datum/armor/given_armor = /datum/armor/roach_internal_armor
+ /// Storing biotypes pre-organ bonus applied so we don't remove bug from mobs which should have it.
+ var/old_biotypes = NONE
+
+/datum/status_effect/organ_set_bonus/roach/enable_bonus()
+ . = ..()
+ if(!ishuman(owner))
+ return
+
+ var/mob/living/carbon/human/human_owner = owner
+ human_owner.physiology.armor = human_owner.physiology.armor.add_other_armor(given_armor)
+
+ old_biotypes = human_owner.mob_biotypes
+ human_owner.mob_biotypes |= MOB_BUG
+
+/datum/status_effect/organ_set_bonus/roach/disable_bonus()
+ . = ..()
+ if(!ishuman(owner) || QDELETED(owner))
+ return
+
+ var/mob/living/carbon/human/human_owner = owner
+ human_owner.physiology.armor = human_owner.physiology.armor.subtract_other_armor(given_armor)
+
+ if(!(old_biotypes & MOB_BUG)) // only remove bug if it wasn't there before
+ human_owner.mob_biotypes &= ~MOB_BUG
+
+/// Roach heart:
+/// Reduces damage taken from brute attacks from behind,
+/// but increases duration of knockdowns
+/obj/item/organ/internal/heart/roach
+ name = "mutated roach-heart"
+ desc = "Roach DNA infused into what was once a normal heart."
+ maxHealth = 2 * STANDARD_ORGAN_THRESHOLD
+
+ icon = 'icons/obj/medical/organs/infuser_organs.dmi'
+ icon_state = "heart"
+ greyscale_config = /datum/greyscale_config/mutant_organ
+ greyscale_colors = ROACH_COLORS
+
+ /// Timer ID for resetting the damage resistance applied from attacks from behind
+ var/defense_timerid
+ /// Bodypart overlay applied to the chest the heart is in
+ var/datum/bodypart_overlay/simple/roach_shell/roach_shell
+
+/obj/item/organ/internal/heart/roach/Initialize(mapload)
+ . = ..()
+ AddElement(/datum/element/noticable_organ, "has hardened, somewhat translucent skin.")
+ AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/roach)
+ roach_shell = new()
+
+/obj/item/organ/internal/heart/roach/Destroy()
+ QDEL_NULL(roach_shell)
+ return ..()
+
+/obj/item/organ/internal/heart/roach/on_insert(mob/living/carbon/organ_owner, special)
+ . = ..()
+ if(!ishuman(organ_owner))
+ return
+
+ var/mob/living/carbon/human/human_owner = organ_owner
+
+ RegisterSignal(human_owner, COMSIG_MOB_APPLY_DAMAGE, PROC_REF(modify_damage))
+ human_owner.physiology.knockdown_mod *= 3
+
+ var/obj/item/bodypart/chest/chest = human_owner.get_bodypart(BODY_ZONE_CHEST)
+ chest.add_bodypart_overlay(roach_shell)
+ human_owner.update_body_parts()
+
+/obj/item/organ/internal/heart/roach/on_remove(mob/living/carbon/organ_owner, special)
+ . = ..()
+ if(!ishuman(organ_owner) || QDELETED(organ_owner))
+ return
+
+ var/mob/living/carbon/human/human_owner = organ_owner
+
+ UnregisterSignal(human_owner, COMSIG_MOB_APPLY_DAMAGE)
+ human_owner.physiology.knockdown_mod /= 3
+
+ if(defense_timerid)
+ reset_damage(human_owner)
+
+ var/obj/item/bodypart/chest/chest = human_owner.get_bodypart(BODY_ZONE_CHEST)
+ chest.remove_bodypart_overlay(roach_shell)
+ human_owner.update_body_parts()
+
+/**
+ * Signal proc for [COMSIG_MOB_APPLY_DAMAGE]
+ *
+ * Being hit with brute damage in the back will impart a large damage resistance bonus for a very short period.
+ */
+/obj/item/organ/internal/heart/roach/proc/modify_damage(datum/source, damage, damagetype, def_zone, blocked, wound_bonus, bare_wound_bonus, sharpness, attack_direction, obj/item/attacking_item)
+ SIGNAL_HANDLER
+
+ if(!ishuman(owner) || !attack_direction || damagetype != BRUTE || owner.stat >= UNCONSCIOUS)
+ return
+
+ var/mob/living/carbon/human/human_owner = owner
+ // No tactical spinning
+ if(human_owner.flags_1 & IS_SPINNING_1)
+ return
+
+ // If we're lying down, or were attacked from the back, we get armor.
+ var/should_armor_up = (human_owner.body_position == LYING_DOWN) || (human_owner.dir & attack_direction)
+ if(!should_armor_up)
+ return
+
+ // Take 50% less damage from attack behind us
+ if(!defense_timerid)
+ human_owner.physiology.brute_mod /= 2
+ human_owner.visible_message(span_warning("[human_owner]'s back hardens against the blow!"))
+ playsound(human_owner, 'sound/effects/constructform.ogg', 25, vary = TRUE, extrarange = SHORT_RANGE_SOUND_EXTRARANGE)
+
+ defense_timerid = addtimer(CALLBACK(src, PROC_REF(reset_damage), owner), 5 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE)
+
+/obj/item/organ/internal/heart/roach/proc/reset_damage(mob/living/carbon/human/human_owner)
+ defense_timerid = null
+ if(!QDELETED(human_owner))
+ human_owner.physiology.brute_mod *= 2
+ human_owner.visible_message(span_warning("[human_owner]'s back softens again."))
+
+// Simple overlay so we can add a roach shell to guys with roach hearts
+/datum/bodypart_overlay/simple/roach_shell
+ icon_state = "roach_shell"
+ layers = EXTERNAL_FRONT|EXTERNAL_BEHIND
+
+/datum/bodypart_overlay/simple/roach_shell/get_image(image_layer, obj/item/bodypart/limb)
+ return image(
+ icon = icon,
+ icon_state = "[icon_state]_[mutant_bodyparts_layertext(image_layer)]",
+ layer = image_layer,
+ )
+
+/// Roach stomach:
+/// Makes disgust a non-issue, very slightly worse at passing off reagents
+/// Also makes you more hungry
+/obj/item/organ/internal/stomach/roach
+ name = "mutated roach-stomach"
+ desc = "Roach DNA infused into what was once a normal stomach."
+ maxHealth = 2 * STANDARD_ORGAN_THRESHOLD
+ disgust_metabolism = 32 // Demolishes any disgust we have
+ metabolism_efficiency = 0.033 // Slightly worse at transferring reagents
+// hunger_modifier = 3 //monkestation temp removal
+
+ icon = 'icons/obj/medical/organs/infuser_organs.dmi'
+ icon_state = "stomach"
+ greyscale_config = /datum/greyscale_config/mutant_organ
+ greyscale_colors = ROACH_COLORS
+
+/obj/item/organ/internal/stomach/roach/Initialize(mapload)
+ . = ..()
+ AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/roach)
+
+/// Roach liver:
+/// Purges toxins at a higher threshold, but takes more damage from them if not purged
+/obj/item/organ/internal/liver/roach
+ name = "mutated roach-liver"
+ desc = "Roach DNA infused into what was once a normal liver."
+ maxHealth = 2 * STANDARD_ORGAN_THRESHOLD
+ toxTolerance = 5 // More tolerance for toxins
+ liver_resistance = 0.25 // But if they manage to get in you're screwed
+
+ icon = 'icons/obj/medical/organs/infuser_organs.dmi'
+ icon_state = "liver"
+ greyscale_config = /datum/greyscale_config/mutant_organ
+ greyscale_colors = ROACH_COLORS
+
+/obj/item/organ/internal/liver/roach/Initialize(mapload)
+ . = ..()
+ AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/roach)
+
+/obj/item/organ/internal/liver/roach/on_insert(mob/living/carbon/organ_owner, special)
+ . = ..()
+ if(!ishuman(organ_owner))
+ return
+
+ var/mob/living/carbon/human/human_owner = owner
+ human_owner.physiology.tox_mod *= 2
+
+/obj/item/organ/internal/liver/roach/on_remove(mob/living/carbon/organ_owner, special)
+ . = ..()
+ if(!ishuman(organ_owner) || QDELETED(organ_owner))
+ return
+
+ var/mob/living/carbon/human/human_owner = organ_owner
+ human_owner.physiology.tox_mod /= 2
+
+/// Roach appendix:
+/// No appendicitus! weee!
+/obj/item/organ/internal/appendix/roach
+ name = "mutated roach-appendix"
+ desc = "Roach DNA infused into what was once a normal appendix. It could get worse?"
+ maxHealth = 2 * STANDARD_ORGAN_THRESHOLD
+
+ icon = 'icons/obj/medical/organs/infuser_organs.dmi'
+ icon_state = "appendix"
+ greyscale_config = /datum/greyscale_config/mutant_organ
+ greyscale_colors = ROACH_COLORS
+
+/obj/item/organ/internal/appendix/roach/Initialize(mapload)
+ . = ..()
+ AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/roach)
+
+/obj/item/organ/internal/appendix/roach/become_inflamed()
+ return
+
+#undef ROACH_ORGAN_COLOR
+#undef ROACH_COLORS
diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm
index 6e45bb3b4db9..a0d432cefd9a 100644
--- a/code/game/machinery/doors/door.dm
+++ b/code/game/machinery/doors/door.dm
@@ -563,7 +563,7 @@
. = ..()
/// Signal proc for [COMSIG_ATOM_MAGICALLY_UNLOCKED]. Open up when someone casts knock.
-/obj/machinery/door/proc/on_magic_unlock(datum/source, datum/action/cooldown/spell/aoe/knock/spell, mob/living/caster)
+/obj/machinery/door/proc/on_magic_unlock(datum/source, datum/action/cooldown/spell/aoe/knock/spell, atom/caster)
SIGNAL_HANDLER
INVOKE_ASYNC(src, PROC_REF(open))
diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm
index ff5bad76dc2b..2ba217ac02e7 100644
--- a/code/game/machinery/hologram.dm
+++ b/code/game/machinery/hologram.dm
@@ -291,9 +291,9 @@ Possible to do for anyone motivated enough:
for(var/I in holo_calls)
var/datum/holocall/HC = I
var/list/call_data = list(
- caller = HC.user,
- connected = HC.connected_holopad == src ? TRUE : FALSE,
- ref = REF(HC)
+ "caller" = HC.user,
+ "connected" = HC.connected_holopad == src ? TRUE : FALSE,
+ "ref" = REF(HC)
)
data["holo_calls"] += list(call_data)
return data
diff --git a/code/game/machinery/porta_turret/portable_turret.dm b/code/game/machinery/porta_turret/portable_turret.dm
index bfbd2400b287..79141c5598da 100644
--- a/code/game/machinery/porta_turret/portable_turret.dm
+++ b/code/game/machinery/porta_turret/portable_turret.dm
@@ -708,13 +708,13 @@ DEFINE_BITFIELD(turret_flags, list(
remote_controller = null
return TRUE
-/obj/machinery/porta_turret/proc/InterceptClickOn(mob/living/caller, params, atom/A)
+/obj/machinery/porta_turret/proc/InterceptClickOn(mob/living/user, params, atom/A)
if(!manual_control)
return FALSE
- if(!can_interact(caller))
+ if(!can_interact(user))
remove_control()
return FALSE
- log_combat(caller,A,"fired with manual turret control at")
+ log_combat(user,A,"fired with manual turret control at")
target(A)
return TRUE
diff --git a/code/game/objects/effects/cursor_catcher.dm b/code/game/objects/effects/cursor_catcher.dm
index 779cad0e2a0f..3229cd44b708 100644
--- a/code/game/objects/effects/cursor_catcher.dm
+++ b/code/game/objects/effects/cursor_catcher.dm
@@ -3,6 +3,7 @@
icon_state = "fullscreen_blocker" // Fullscreen semi transparent icon
plane = HUD_PLANE
mouse_opacity = MOUSE_OPACITY_ICON
+ default_click = TRUE
/// The mob whose cursor we are tracking.
var/mob/owner
/// Client view size of the scoping mob.
@@ -54,7 +55,11 @@
/atom/movable/screen/fullscreen/cursor_catcher/proc/calculate_params()
var/list/modifiers = params2list(mouse_params)
var/icon_x = text2num(LAZYACCESS(modifiers, VIS_X))
+ if(isnull(icon_x))
+ icon_x = text2num(LAZYACCESS(modifiers, ICON_X))
var/icon_y = text2num(LAZYACCESS(modifiers, VIS_Y))
+ if(isnull(icon_y))
+ icon_y = text2num(LAZYACCESS(modifiers, ICON_Y))
var/our_x = round(icon_x / world.icon_size)
var/our_y = round(icon_y / world.icon_size)
given_turf = locate(owner.x + our_x - round(view_list[1]/2), owner.y + our_y - round(view_list[2]/2), owner.z)
diff --git a/code/game/objects/effects/decals/decal.dm b/code/game/objects/effects/decals/decal.dm
index fa6a178b5944..cf42e3a2c0d8 100644
--- a/code/game/objects/effects/decals/decal.dm
+++ b/code/game/objects/effects/decals/decal.dm
@@ -45,6 +45,10 @@
plane = FLOOR_PLANE
layer = TURF_DECAL_LAYER
anchored = TRUE
+ /// Does this decal change colors on holidays
+ var/use_holiday_colors = FALSE
+ /// The pattern used when recoloring the decal. If null, it'll use the def of the station or holiday.
+ var/pattern
// This is with the intent of optimizing mapload
// See spawners for more details since we use the same pattern
@@ -55,6 +59,13 @@
stack_trace("Warning: [src]([type]) initialized multiple times!")
flags_1 |= INITIALIZED_1
+ // If the tile uses holiday colors, apply them here
+ if(use_holiday_colors)
+ var/current_holiday_color = request_holiday_colors(src, pattern)
+ if(current_holiday_color)
+ color = current_holiday_color
+ alpha = DECAL_ALPHA
+
var/turf/T = loc
if(!istype(T)) //you know this will happen somehow
CRASH("Turf decal initialized in an object/nullspace")
diff --git a/code/game/objects/effects/decals/turfdecal/tilecoloring.dm b/code/game/objects/effects/decals/turfdecal/tilecoloring.dm
index 24bb508d4775..b63c88567645 100644
--- a/code/game/objects/effects/decals/turfdecal/tilecoloring.dm
+++ b/code/game/objects/effects/decals/turfdecal/tilecoloring.dm
@@ -3,11 +3,10 @@
icon_state = "tile_corner"
layer = TURF_PLATING_DECAL_LAYER
alpha = 110
+ use_holiday_colors = TRUE
-/obj/effect/turf_decal/tile/Initialize(mapload)
- if (check_holidays(APRIL_FOOLS))
- color = "#[random_short_color()]"
- return ..()
+/obj/effect/turf_decal/tile/neutral/tram
+ pattern = PATTERN_VERTICAL_STRIPE
/// Automatically generates all subtypes for a decal with the given path.
#define TILE_DECAL_SUBTYPE_HELPER(path)\
@@ -37,18 +36,21 @@
}\
##path/diagonal_edge {\
icon_state = "diagonal_edge";\
+}\
+##path/tram {\
+ icon_state = "tile_tram";\
}
/// Blue tiles
/obj/effect/turf_decal/tile/blue
- name = "blue corner"
+ name = "blue tile decal"
color = "#52B4E9"
TILE_DECAL_SUBTYPE_HELPER(/obj/effect/turf_decal/tile/blue)
/// Dark blue tiles
/obj/effect/turf_decal/tile/dark_blue
- name = "dark blue corner"
+ name = "dark blue tile decal"
color = "#486091"
TILE_DECAL_SUBTYPE_HELPER(/obj/effect/turf_decal/tile/dark_blue)
@@ -56,7 +58,7 @@ TILE_DECAL_SUBTYPE_HELPER(/obj/effect/turf_decal/tile/dark_blue)
/// Green tiles
/obj/effect/turf_decal/tile/green
- name = "green corner"
+ name = "green tile decal"
color = "#9FED58"
TILE_DECAL_SUBTYPE_HELPER(/obj/effect/turf_decal/tile/green)
@@ -64,7 +66,7 @@ TILE_DECAL_SUBTYPE_HELPER(/obj/effect/turf_decal/tile/green)
/// Dark green tiles
/obj/effect/turf_decal/tile/dark_green
- name = "dark green corner"
+ name = "dark green tile decal"
color = "#439C1E"
TILE_DECAL_SUBTYPE_HELPER(/obj/effect/turf_decal/tile/dark_green)
@@ -72,7 +74,7 @@ TILE_DECAL_SUBTYPE_HELPER(/obj/effect/turf_decal/tile/dark_green)
/// Yellow tiles
/obj/effect/turf_decal/tile/yellow
- name = "yellow corner"
+ name = "yellow tile decal"
color = "#EFB341"
TILE_DECAL_SUBTYPE_HELPER(/obj/effect/turf_decal/tile/yellow)
@@ -80,7 +82,7 @@ TILE_DECAL_SUBTYPE_HELPER(/obj/effect/turf_decal/tile/yellow)
/// Red tiles
/obj/effect/turf_decal/tile/red
- name = "red corner"
+ name = "red tile decal"
color = "#DE3A3A"
TILE_DECAL_SUBTYPE_HELPER(/obj/effect/turf_decal/tile/red)
@@ -88,7 +90,7 @@ TILE_DECAL_SUBTYPE_HELPER(/obj/effect/turf_decal/tile/red)
/// Dark red tiles
/obj/effect/turf_decal/tile/dark_red
- name = "dark red corner"
+ name = "dark red tile decal"
color = "#B11111"
TILE_DECAL_SUBTYPE_HELPER(/obj/effect/turf_decal/tile/dark_red)
@@ -96,7 +98,7 @@ TILE_DECAL_SUBTYPE_HELPER(/obj/effect/turf_decal/tile/dark_red)
/// Bar tiles
/obj/effect/turf_decal/tile/bar
- name = "bar corner"
+ name = "bar tile decal"
color = "#791500"
alpha = 130
@@ -105,7 +107,7 @@ TILE_DECAL_SUBTYPE_HELPER(/obj/effect/turf_decal/tile/bar)
/// Purple tiles
/obj/effect/turf_decal/tile/purple
- name = "purple corner"
+ name = "purple tile decal"
color = "#D381C9"
TILE_DECAL_SUBTYPE_HELPER(/obj/effect/turf_decal/tile/purple)
@@ -113,7 +115,7 @@ TILE_DECAL_SUBTYPE_HELPER(/obj/effect/turf_decal/tile/purple)
/// Brown tiles
/obj/effect/turf_decal/tile/brown
- name = "brown corner"
+ name = "brown tile decal"
color = "#A46106"
TILE_DECAL_SUBTYPE_HELPER(/obj/effect/turf_decal/tile/brown)
@@ -121,7 +123,7 @@ TILE_DECAL_SUBTYPE_HELPER(/obj/effect/turf_decal/tile/brown)
/// Neutral tiles
/obj/effect/turf_decal/tile/neutral
- name = "neutral corner"
+ name = "neutral tile decal"
color = "#D4D4D4"
alpha = 50
@@ -130,22 +132,35 @@ TILE_DECAL_SUBTYPE_HELPER(/obj/effect/turf_decal/tile/neutral)
/// Dark tiles
/obj/effect/turf_decal/tile/dark
- name = "dark corner"
+ name = "dark tile decal"
color = "#0e0f0f"
TILE_DECAL_SUBTYPE_HELPER(/obj/effect/turf_decal/tile/dark)
-/// Random tiles
+/// Date-specific tiles
+/obj/effect/turf_decal/tile/holiday
+ name = "ERROR tile decal"
+ color = "#FF0000"
-/obj/effect/turf_decal/tile/random // so many colors
- name = "colorful corner"
- color = "#E300FF" //bright pink as default for mapping
+/obj/effect/turf_decal/tile/holiday/Initialize(mapload)
+ color = request_holiday_colors(src, pattern)
+ alpha = DECAL_ALPHA
+ return ..()
-TILE_DECAL_SUBTYPE_HELPER(/obj/effect/turf_decal/tile/random)
+/// Pattern tiles
+/obj/effect/turf_decal/tile/holiday/rainbow
+ name = "rainbow tile decal"
+ color = "#75C9EB" //bright blue as default for mapping
+ pattern = PATTERN_RAINBOW
-/obj/effect/turf_decal/tile/random/Initialize(mapload)
- color = "#[random_short_color()]"
- return ..()
+TILE_DECAL_SUBTYPE_HELPER(/obj/effect/turf_decal/tile/holiday/rainbow)
+
+/obj/effect/turf_decal/tile/holiday/random // so many colors
+ name = "colorful tile decal"
+ color = "#E300FF" //bright pink as default for mapping
+ pattern = PATTERN_RANDOM
+
+TILE_DECAL_SUBTYPE_HELPER(/obj/effect/turf_decal/tile/holiday/random)
#undef TILE_DECAL_SUBTYPE_HELPER
@@ -154,10 +169,29 @@ TILE_DECAL_SUBTYPE_HELPER(/obj/effect/turf_decal/tile/random)
layer = TURF_PLATING_DECAL_LAYER
alpha = 110
icon_state = "trimline_box"
+ use_holiday_colors = TRUE
+
+/obj/effect/turf_decal/trimline/tram
+ pattern = PATTERN_VERTICAL_STRIPE
+
+/obj/effect/turf_decal/trimline/tram/filled/corner/Initialize(mapload)
+ if(use_holiday_colors)
+ var/current_holiday_color = request_holiday_colors(src, pattern)
+ if(current_holiday_color)
+ color = current_holiday_color
+ alpha = DECAL_ALPHA
+ else
+ color = "#ffc875"
+ return ..()
-/obj/effect/turf_decal/trimline/Initialize(mapload)
- if(check_holidays(APRIL_FOOLS))
- color = "#[random_short_color()]"
+/obj/effect/turf_decal/trimline/tram/filled/line/Initialize(mapload)
+ if(use_holiday_colors)
+ var/current_holiday_color = request_holiday_colors(src, pattern)
+ if(current_holiday_color)
+ color = current_holiday_color
+ alpha = DECAL_ALPHA
+ else
+ color = "#ffc875"
return ..()
/// Automatically generates all trimlines for a decal with the given path.
@@ -285,6 +319,13 @@ TRIMLINE_SUBTYPE_HELPER(/obj/effect/turf_decal/trimline/brown)
TRIMLINE_SUBTYPE_HELPER(/obj/effect/turf_decal/trimline/neutral)
+/// Tram trimlines
+/obj/effect/turf_decal/trimline/tram
+ color = "#D4D4D4"
+ alpha = 50
+
+TRIMLINE_SUBTYPE_HELPER(/obj/effect/turf_decal/trimline/tram)
+
/// Dark trimlines
/obj/effect/turf_decal/trimline/dark
color = "#0e0f0f"
@@ -292,3 +333,4 @@ TRIMLINE_SUBTYPE_HELPER(/obj/effect/turf_decal/trimline/neutral)
TRIMLINE_SUBTYPE_HELPER(/obj/effect/turf_decal/trimline/dark)
#undef TRIMLINE_SUBTYPE_HELPER
+#undef DECAL_ALPHA
diff --git a/code/game/objects/items/botpad_remote.dm b/code/game/objects/items/botpad_remote.dm
index 70a74ad3be6b..5987ea406980 100644
--- a/code/game/objects/items/botpad_remote.dm
+++ b/code/game/objects/items/botpad_remote.dm
@@ -1,12 +1,12 @@
/obj/item/botpad_remote
- name = "Bot pad controller"
- desc = "Use this device to control the connected bot pad."
- desc_controls = "Left-click for launch, right-click for recall."
+ name = "orbital bot pad controller"
+ desc = "Use this device to control the connected orbital bot pad."
+ desc_controls = "Use in hand to launch, right-click to recall back to the pad."
icon = 'icons/obj/device.dmi'
icon_state = "botpad_controller"
w_class = WEIGHT_CLASS_SMALL
// ID of the remote, used for linking up
- var/id = "botlauncher"
+ // var/id = "botlauncher" MONKESTATION removal
var/obj/machinery/botpad/connected_botpad
/obj/item/botpad_remote/Destroy()
@@ -39,7 +39,7 @@
else if(!connected_botpad && istype(buffered_remote, /obj/machinery/botpad))
connected_botpad = buffered_remote
connected_botpad.connected_remote = src
- connected_botpad.id = id
+ // connected_botpad.id = id MONKESTATION REMOVAL
multitool.buffer = null
to_chat(user, span_notice("You connect the controller to the pad with data from the [multitool.name]'s buffer."))
else
@@ -52,7 +52,9 @@
if(connected_botpad.panel_open)
user?.balloon_alert(user, "close the panel!")
return
+/* MONKESTATION REMOVAL START
if(!(locate(/mob/living/simple_animal/bot) in get_turf(connected_botpad)))
user?.balloon_alert(user, "no bots detected on the pad!")
return
+ MONKESTATION REMOVAL END */
connected_botpad.launch(user)
diff --git a/code/game/objects/items/cigs_lighters.dm b/code/game/objects/items/cigs_lighters.dm
index 18c414f3033b..e65fcf02d60d 100644
--- a/code/game/objects/items/cigs_lighters.dm
+++ b/code/game/objects/items/cigs_lighters.dm
@@ -173,7 +173,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
var/choke_forever = FALSE
/// When choking, what is the maximum amount of time we COULD choke for
var/choke_time_max = 30 SECONDS // I am mean
- /// What type of pollution does this produce on smoking, changed to weed pollution sometimes
+ /// What type of pollution does this produce on smoking, changed to weed pollution sometimes, monkestation edit
var/pollution_type = /datum/pollutant/smoke
/// The particle effect of the smoke rising out of the cigarette when lit
VAR_PRIVATE/obj/effect/abstract/particle_holder/cig_smoke
diff --git a/code/game/objects/items/circuitboards/machines/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machines/machine_circuitboards.dm
index 0fc652a4f473..220cb6b22df0 100644
--- a/code/game/objects/items/circuitboards/machines/machine_circuitboards.dm
+++ b/code/game/objects/items/circuitboards/machines/machine_circuitboards.dm
@@ -1040,7 +1040,7 @@
req_components = list()
/obj/item/circuitboard/machine/botpad
- name = "Bot launchpad"
+ name = "Bot Orbital Pad"
greyscale_colors = CIRCUIT_COLOR_SCIENCE
build_path = /obj/machinery/botpad
req_components = list()
diff --git a/code/game/objects/items/devices/aicard.dm b/code/game/objects/items/devices/aicard.dm
index 71b6080f6cea..c748d70e6fcf 100644
--- a/code/game/objects/items/devices/aicard.dm
+++ b/code/game/objects/items/devices/aicard.dm
@@ -14,6 +14,10 @@
var/flush = FALSE
var/mob/living/silicon/ai/AI
+/obj/item/aicard/Initialize(mapload)
+ . = ..()
+ ADD_TRAIT(src, TRAIT_CASTABLE_LOC, INNATE_TRAIT)
+
/obj/item/aicard/Destroy(force)
if(AI)
AI.ghostize(can_reenter_corpse = FALSE)
diff --git a/code/game/objects/items/food/meatslab.dm b/code/game/objects/items/food/meatslab.dm
index 4d4cf0bbac0b..50b777885464 100644
--- a/code/game/objects/items/food/meatslab.dm
+++ b/code/game/objects/items/food/meatslab.dm
@@ -4,6 +4,28 @@
icon = 'icons/obj/food/meat.dmi'
var/subjectname = ""
var/subjectjob = null
+ var/blood_decal_type = /obj/effect/decal/cleanable/blood
+
+/obj/item/food/meat/Initialize(mapload)
+ . = ..()
+
+ if(!blood_decal_type)
+ return
+
+ AddComponent(
+ /datum/component/blood_walk,\
+ blood_type = blood_decal_type,\
+ blood_spawn_chance = 45,\
+ max_blood = custom_materials[custom_materials[1]],\
+ )
+
+ AddComponent(
+ /datum/component/bloody_spreader,\
+ blood_left = custom_materials[custom_materials[1]],\
+ blood_dna = list("meaty DNA" = "MT-"),\
+ diseases = null,\
+ )
+
/obj/item/food/meat/slab
name = "meat"
@@ -54,6 +76,7 @@
tastes = list("slime" = 1, "jelly" = 1)
foodtypes = MEAT | RAW | TOXIC
venue_value = FOOD_MEAT_MUTANT_RARE
+ blood_decal_type = null
/obj/item/food/meat/slab/human/mutant/golem
icon_state = "golemmeat"
@@ -65,6 +88,7 @@
tastes = list("rock" = 1)
foodtypes = MEAT | RAW | GROSS
venue_value = FOOD_MEAT_MUTANT_RARE
+ blood_decal_type = null
/obj/item/food/meat/slab/human/mutant/golem/adamantine
icon_state = "agolemmeat"
@@ -87,6 +111,7 @@
tastes = list("salad" = 1, "wood" = 1)
foodtypes = VEGETABLES
venue_value = FOOD_MEAT_MUTANT_RARE
+ blood_decal_type = /obj/effect/decal/cleanable/food/plant_smudge
/obj/item/food/meat/slab/human/mutant/shadow
icon_state = "shadowmeat"
@@ -105,6 +130,7 @@
tastes = list("maggots" = 1, "the inside of a reactor" = 1)
foodtypes = MEAT | RAW | GROSS | BUGS | GORE
venue_value = FOOD_MEAT_MUTANT
+ blood_decal_type = /obj/effect/decal/cleanable/insectguts
/obj/item/food/meat/slab/human/mutant/moth
icon_state = "mothmeat"
@@ -120,6 +146,7 @@
tastes = list("bone" = 1)
foodtypes = GROSS | GORE
venue_value = FOOD_MEAT_MUTANT_RARE
+ blood_decal_type = null
/obj/item/food/meat/slab/human/mutant/skeleton/make_processable()
return //skeletons dont have cutlets
@@ -138,6 +165,7 @@
tastes = list("pure electricity" = 2, "glass" = 1) //MONKE EDIT: "meat" to "glass"
foodtypes = RAW | MEAT | TOXIC | GORE
venue_value = FOOD_MEAT_MUTANT
+ blood_decal_type = null
////////////////////////////////////// OTHER MEATS ////////////////////////////////////////////////////////
@@ -169,6 +197,7 @@
name = "bug meat"
icon_state = "spidermeat"
foodtypes = RAW | MEAT | BUGS
+ blood_decal_type = /obj/effect/decal/cleanable/insectguts
/obj/item/food/meat/slab/mouse
name = "mouse meat"
@@ -214,6 +243,7 @@
food_reagents = list(/datum/reagent/consumable/nutriment = 2)
tastes = list("tomato" = 1)
foodtypes = FRUIT
+ blood_decal_type = /obj/effect/decal/cleanable/food/tomato_smudge
/obj/item/food/meat/slab/killertomato/make_grillable()
AddComponent(/datum/component/grillable, /obj/item/food/meat/steak/killertomato, rand(70 SECONDS, 85 SECONDS), TRUE, TRUE)
@@ -255,6 +285,7 @@
bite_consumption = 4
tastes = list("meat" = 1, "acid" = 1)
foodtypes = RAW | MEAT
+ blood_decal_type = /obj/effect/decal/cleanable/xenoblood
/obj/item/food/meat/slab/xeno/make_processable()
AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/meat/rawcutlet/xeno, 3, 3 SECONDS, table_required = TRUE, screentip_verb = "Cut")
@@ -273,6 +304,7 @@
)
tastes = list("cobwebs" = 1)
foodtypes = RAW | MEAT | TOXIC
+ blood_decal_type = /obj/effect/decal/cleanable/insectguts
/obj/item/food/meat/slab/spider/make_processable()
AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/meat/rawcutlet/spider, 3, 3 SECONDS, table_required = TRUE, screentip_verb = "Cut")
@@ -489,10 +521,12 @@
/obj/item/food/meat/steak/xeno
name = "xeno steak"
tastes = list("meat" = 1, "acid" = 1)
+ blood_decal_type = /obj/effect/decal/cleanable/xenoblood
/obj/item/food/meat/steak/spider
name = "spider steak"
tastes = list("cobwebs" = 1)
+ blood_decal_type = /obj/effect/decal/cleanable/insectguts
/obj/item/food/meat/steak/goliath
name = "goliath steak"
@@ -595,6 +629,7 @@
name = "raw killer tomato cutlet"
tastes = list("tomato" = 1)
foodtypes = FRUIT
+ blood_decal_type = /obj/effect/decal/cleanable/food/tomato_smudge
/obj/item/food/meat/rawcutlet/killertomato/make_grillable()
AddComponent(/datum/component/grillable, /obj/item/food/meat/cutlet/killertomato, rand(35 SECONDS, 50 SECONDS), TRUE, TRUE)
@@ -613,6 +648,7 @@
/obj/item/food/meat/rawcutlet/xeno
name = "raw xeno cutlet"
tastes = list("meat" = 1, "acid" = 1)
+ blood_decal_type = /obj/effect/decal/cleanable/xenoblood
/obj/item/food/meat/rawcutlet/xeno/make_grillable()
AddComponent(/datum/component/grillable, /obj/item/food/meat/cutlet/xeno, rand(35 SECONDS, 50 SECONDS), TRUE, TRUE, /datum/pollutant/food/fried_meat)
@@ -620,6 +656,7 @@
/obj/item/food/meat/rawcutlet/spider
name = "raw spider cutlet"
tastes = list("cobwebs" = 1)
+ blood_decal_type = /obj/effect/decal/cleanable/insectguts
/obj/item/food/meat/rawcutlet/spider/make_grillable()
AddComponent(/datum/component/grillable, /obj/item/food/meat/cutlet/spider, rand(35 SECONDS, 50 SECONDS), TRUE, TRUE, /datum/pollutant/food/fried_meat)
@@ -696,6 +733,7 @@
name = "killer tomato cutlet"
tastes = list("tomato" = 1)
foodtypes = FRUIT
+ blood_decal_type = /obj/effect/decal/cleanable/food/tomato_smudge
/obj/item/food/meat/cutlet/bear
name = "bear cutlet"
@@ -704,10 +742,12 @@
/obj/item/food/meat/cutlet/xeno
name = "xeno cutlet"
tastes = list("meat" = 1, "acid" = 1)
+ blood_decal_type = /obj/effect/decal/cleanable/xenoblood
/obj/item/food/meat/cutlet/spider
name = "spider cutlet"
tastes = list("cobwebs" = 1)
+ blood_decal_type = /obj/effect/decal/cleanable/insectguts
/obj/item/food/meat/cutlet/gondola
name = "gondola cutlet"
diff --git a/code/game/objects/items/his_grace.dm b/code/game/objects/items/his_grace.dm
index 96f07bd8a233..fe0e12d4d50d 100644
--- a/code/game/objects/items/his_grace.dm
+++ b/code/game/objects/items/his_grace.dm
@@ -164,22 +164,8 @@
if(!awakened)
return
- var/static/list/transforms
- if(!transforms)
- var/matrix/M1 = matrix()
- var/matrix/M2 = matrix()
- var/matrix/M3 = matrix()
- var/matrix/M4 = matrix()
- M1.Translate(-1, 0)
- M2.Translate(0, 1)
- M3.Translate(1, 0)
- M4.Translate(0, -1)
- transforms = list(M1, M2, M3, M4)
- animate(src, transform=transforms[1], time=0.2, loop=-1)
- animate(transform=transforms[2], time=0.1)
- animate(transform=transforms[3], time=0.2)
- animate(transform=transforms[4], time=0.3)
+ spasm_animation()
/obj/item/his_grace/proc/drowse() //Good night, Mr. Grace.
if(!awakened || ascended)
diff --git a/code/game/objects/items/stacks/tiles/tile_types.dm b/code/game/objects/items/stacks/tiles/tile_types.dm
index e47cbd0ebdda..2677016f9f93 100644
--- a/code/game/objects/items/stacks/tiles/tile_types.dm
+++ b/code/game/objects/items/stacks/tiles/tile_types.dm
@@ -1026,6 +1026,33 @@
/obj/item/stack/tile/noslip/thirty
amount = 30
+/obj/item/stack/tile/noslip/tram
+ name = "high-traction platform tile"
+ singular_name = "high-traction platform tile"
+ desc = "A titanium-aluminium induction plate that powers the tram."
+ icon_state = "tile_noslip"
+ inhand_icon_state = "tile-noslip"
+ turf_type = /turf/open/floor/noslip/tram
+ merge_type = /obj/item/stack/tile/noslip/tram
+
+/obj/item/stack/tile/noslip/tram_platform
+ name = "tram platform tiles"
+ singular_name = "tram platform"
+ desc = "A tile used for tram platforms."
+ icon_state = "darkiron_catwalk"
+ inhand_icon_state = "tile-neon"
+ turf_type = /turf/open/floor/noslip/tram_platform
+ merge_type = /obj/item/stack/tile/noslip/tram_platform
+
+/obj/item/stack/tile/noslip/tram_plate
+ name = "high-traction platform tile"
+ singular_name = "high-traction platform tile"
+ desc = "A high-traction tile used for tram platforms."
+ icon_state = "darkiron_plate"
+ inhand_icon_state = "tile-neon"
+ turf_type = /turf/open/floor/noslip/tram_plate
+ merge_type = /obj/item/stack/tile/noslip/tram_plate
+
//Circuit
/obj/item/stack/tile/circuit
name = "blue circuit tile"
diff --git a/code/game/objects/items/storage/backpack.dm b/code/game/objects/items/storage/backpack.dm
index 57d4a2219dd0..37e6720dd06e 100644
--- a/code/game/objects/items/storage/backpack.dm
+++ b/code/game/objects/items/storage/backpack.dm
@@ -255,6 +255,7 @@
throwforce = 15
attack_verb_continuous = list("MEATS", "MEAT MEATS")
attack_verb_simple = list("MEAT", "MEAT MEAT")
+ custom_materials = list(/datum/material/meat = SHEET_MATERIAL_AMOUNT * 25) // MEAT
///Sounds used in the squeak component
var/list/meat_sounds = list('sound/effects/blobattack.ogg' = 1)
///Reagents added to the edible component, ingested when you EAT the MEAT
@@ -271,13 +272,26 @@
/obj/item/storage/backpack/meat/Initialize(mapload)
. = ..()
- AddComponent(/datum/component/edible,\
+ AddComponent(
+ /datum/component/edible,\
initial_reagents = meat_reagents,\
foodtypes = foodtypes,\
tastes = tastes,\
eatverbs = eatverbs,\
)
AddComponent(/datum/component/squeak, meat_sounds)
+ AddComponent(
+ /datum/component/blood_walk,\
+ blood_type = /obj/effect/decal/cleanable/blood,\
+ blood_spawn_chance = 15,\
+ max_blood = 300,\
+ )
+ AddComponent(
+ /datum/component/bloody_spreader,\
+ blood_left = INFINITY,\
+ blood_dna = list("MEAT DNA" = "MT+"),\
+ diseases = null,\
+ )
/*
* Satchel Types
diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm
index 61da8337811f..e0dcefc072dd 100644
--- a/code/game/objects/items/storage/belt.dm
+++ b/code/game/objects/items/storage/belt.dm
@@ -639,7 +639,7 @@
/obj/item/storage/belt/wands/Initialize(mapload)
. = ..()
- atom_storage.max_slots = 6
+ atom_storage.max_slots = 7
atom_storage.set_holdable(list(
/obj/item/gun/magic/wand,
))
@@ -651,6 +651,7 @@
new /obj/item/gun/magic/wand/teleport(src)
new /obj/item/gun/magic/wand/door(src)
new /obj/item/gun/magic/wand/fireball(src)
+ new /obj/item/gun/magic/wand/shrink(src)
for(var/obj/item/gun/magic/wand/W in contents) //All wands in this pack come in the best possible condition
W.max_charges = initial(W.max_charges)
diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm
index 728e1504531b..e9d319803b7b 100644
--- a/code/game/objects/structures/crates_lockers/closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets.dm
@@ -813,7 +813,7 @@ GLOBAL_LIST_EMPTY(roundstart_station_closets)
return COMSIG_CARBON_SHOVE_HANDLED
/// Signal proc for [COMSIG_ATOM_MAGICALLY_UNLOCKED]. Unlock and open up when we get knock casted.
-/obj/structure/closet/proc/on_magic_unlock(datum/source, datum/action/cooldown/spell/aoe/knock/spell, mob/living/caster)
+/obj/structure/closet/proc/on_magic_unlock(datum/source, datum/action/cooldown/spell/aoe/knock/spell, atom/caster)
SIGNAL_HANDLER
locked = FALSE
diff --git a/code/game/turfs/open/floor/misc_floor.dm b/code/game/turfs/open/floor/misc_floor.dm
index 4e83c9acb054..81249fe0ace6 100644
--- a/code/game/turfs/open/floor/misc_floor.dm
+++ b/code/game/turfs/open/floor/misc_floor.dm
@@ -155,6 +155,14 @@
/turf/open/floor/noslip/MakeSlippery(wet_setting, min_wet_time, wet_time_to_add, max_wet_time, permanent)
return
+/turf/open/floor/noslip/tram/Initialize(mapload)
+ . = ..()
+ var/current_holiday_color = request_holiday_colors(src, PATTERN_VERTICAL_STRIPE)
+ if(current_holiday_color)
+ color = current_holiday_color
+ else
+ color = "#EFB341"
+
/turf/open/floor/oldshuttle
icon = 'icons/turf/shuttleold.dmi'
icon_state = "floor"
diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm
index 6e84fae33a9b..4386545f07d3 100755
--- a/code/game/turfs/turf.dm
+++ b/code/game/turfs/turf.dm
@@ -652,6 +652,11 @@ GLOBAL_LIST_EMPTY(station_turfs)
/turf/AllowDrop()
return TRUE
+// monkestation start: fix runtime from turf.drop_location()
+/turf/drop_location()
+ return src
+// monkestation end
+
/turf/proc/add_vomit_floor(mob/living/M, toxvomit = NONE, purge_ratio = 0.1)
var/obj/effect/decal/cleanable/vomit/V = new /obj/effect/decal/cleanable/vomit(src, M.get_static_viruses())
@@ -743,16 +748,16 @@ GLOBAL_LIST_EMPTY(station_turfs)
* Returns adjacent turfs to this turf that are reachable, in all cardinal directions
*
* Arguments:
- * * caller: The movable, if one exists, being used for mobility checks to see what tiles it can reach
+ * * source: The movable, if one exists, being used for mobility checks to see what tiles it can reach
* * access: A list that decides if we can gain access to doors that would otherwise block a turf
* * simulated_only: Do we only worry about turfs with simulated atmos, most notably things that aren't space?
* * no_id: When true, doors with public access will count as impassible
*/
-/turf/proc/reachableAdjacentTurfs(atom/movable/caller, list/access, simulated_only, no_id = FALSE)
+/turf/proc/reachableAdjacentTurfs(atom/movable/source, list/access, simulated_only, no_id = FALSE)
var/static/space_type_cache = typecacheof(/turf/open/space)
. = list()
- var/datum/can_pass_info/pass_info = new(caller, access, no_id)
+ var/datum/can_pass_info/pass_info = new(source, access, no_id)
for(var/iter_dir in GLOB.cardinals)
var/turf/turf_to_check = get_step(src,iter_dir)
if(!turf_to_check || (simulated_only && space_type_cache[turf_to_check.type]))
diff --git a/code/modules/admin/verbs/secrets.dm b/code/modules/admin/verbs/secrets.dm
index 2adf60b77cbd..a172f3d84542 100644
--- a/code/modules/admin/verbs/secrets.dm
+++ b/code/modules/admin/verbs/secrets.dm
@@ -1,4 +1,4 @@
-GLOBAL_DATUM(everyone_a_traitor, /datum/everyone_is_a_traitor_controller)
+GLOBAL_DATUM(everyone_an_antag, /datum/everyone_is_an_antag_controller)
/client/proc/secrets() //Creates a verb for admins to open up the ui
set name = "Secrets"
@@ -453,24 +453,35 @@ GLOBAL_DATUM(everyone_a_traitor, /datum/everyone_is_a_traitor_controller)
for(var/i in GLOB.human_list)
var/mob/living/carbon/human/H = i
INVOKE_ASYNC(H, TYPE_PROC_REF(/mob/living/carbon, monkeyize))
- if("traitor_all")
+ if("antag_all")
if(!is_funmin)
return
if(!SSticker.HasRoundStarted())
tgui_alert(usr,"The game hasn't started yet!")
return
- if(GLOB.everyone_a_traitor)
- tgui_alert(usr, "The everyone is a traitor secret has already been triggered")
+ if(GLOB.everyone_an_antag)
+ var/are_we_antagstacking = tgui_alert(usr, "The everyone is antag secret has already been triggered. Do you want to stack antags?", "DANGER ZONE. Are you sure about this?", list("Confirm", "Abort"))
+ if(are_we_antagstacking != "Confirm")
+ return
+
+ var/chosen_antag = tgui_input_list(usr, "Choose antag", "Chose antag", list(ROLE_TRAITOR, ROLE_CHANGELING, ROLE_HERETIC, ROLE_CULTIST, ROLE_NINJA, ROLE_WIZARD, ROLE_NIGHTMARE))
+ if(!chosen_antag)
return
- var/objective = tgui_input_text(holder, "Enter an objective", "Objective")
+ var/objective = tgui_input_text(usr, "Enter an objective", "Objective")
if(!objective)
return
- GLOB.everyone_a_traitor = new /datum/everyone_is_a_traitor_controller(objective)
- SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Traitor All", "[objective]"))
+ var/confirmation = tgui_alert(usr, "Make everyone in to [chosen_antag] with objective: [objective]", "Are you sure about this?", list("Confirm", "Abort"))
+ if(confirmation != "Confirm")
+ return
+ var/keep_generic_objecives = tgui_alert(usr, "Generate normal objectives?", "Give default objectives?", list("Yes", "No"))
+ keep_generic_objecives = (keep_generic_objecives != "Yes") ? FALSE : TRUE
+
+ GLOB.everyone_an_antag = new /datum/everyone_is_an_antag_controller(chosen_antag, objective, keep_generic_objecives)
+ SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("[chosen_antag] All", "[objective]"))
for(var/mob/living/player in GLOB.player_list)
- GLOB.everyone_a_traitor.make_traitor(null, player)
- message_admins(span_adminnotice("[key_name_admin(holder)] used everyone is a traitor secret. Objective is [objective]"))
- log_admin("[key_name(holder)] used everyone is a traitor secret. Objective is [objective]")
+ GLOB.everyone_an_antag.make_antag(null, player)
+ message_admins(span_adminnotice("[key_name_admin(holder)] used everyone is antag secret. Antag is [chosen_antag]. Objective is [objective]. Generate default objectives: [keep_generic_objecives]"))
+ log_admin("[key_name(holder)] used everyone is antag secret: [chosen_antag] . Objective is [objective]. Generate default objectives: [keep_generic_objecives]. ")
if("massbraindamage")
if(!is_funmin)
return
@@ -623,38 +634,79 @@ GLOBAL_DATUM(everyone_a_traitor, /datum/everyone_is_a_traitor_controller)
T.flick_overlay_static(portal_appearance[GET_TURF_PLANE_OFFSET(T) + 1], 15)
playsound(T, 'sound/magic/lightningbolt.ogg', rand(80, 100), TRUE)
-///Makes sure latejoining crewmembers also become traitors.
-/datum/everyone_is_a_traitor_controller
+/datum/everyone_is_an_antag_controller
+ var/chosen_antag = ""
var/objective = ""
+ var/keep_generic_objecives
-/datum/everyone_is_a_traitor_controller/New(objective)
+/datum/everyone_is_an_antag_controller/New(chosen_antag, objective, keep_generic_objecives)
+ . = ..()
+ src.chosen_antag = chosen_antag
src.objective = objective
- RegisterSignal(SSdcs, COMSIG_GLOB_CREWMEMBER_JOINED, PROC_REF(make_traitor))
+ src.keep_generic_objecives = keep_generic_objecives
+ RegisterSignal(SSdcs, COMSIG_GLOB_CREWMEMBER_JOINED, PROC_REF(make_antag_delay))
-/datum/everyone_is_a_traitor_controller/Destroy()
+/datum/everyone_is_an_antag_controller/Destroy()
UnregisterSignal(SSdcs, COMSIG_GLOB_CREWMEMBER_JOINED)
return ..()
-/datum/everyone_is_a_traitor_controller/proc/make_traitor(datum/source, mob/living/player)
+/datum/everyone_is_an_antag_controller/proc/assign_admin_objective_and_antag(mob/living/player, datum/antagonist/antag_datum)
+ var/datum/objective/new_objective = new(objective)
+ new_objective.team = player
+ new_objective.team_explanation_text = objective
+ antag_datum.objectives += new_objective
+ player.mind.add_antag_datum(antag_datum)
+
+/datum/everyone_is_an_antag_controller/proc/make_antag_delay(datum/source, mob/living/player)
SIGNAL_HANDLER
+ INVOKE_ASYNC(src, PROC_REF(make_antag), source, player)
+
+
+/datum/everyone_is_an_antag_controller/proc/make_antag(datum/source, mob/living/player)
if(player.stat == DEAD || !player.mind)
return
- if(is_special_character(player))
- return
+ sleep(1)
if(ishuman(player))
- var/datum/antagonist/traitor/traitor_datum = new(give_objectives = FALSE)
- var/datum/objective/new_objective = new
- new_objective.owner = player
- new_objective.explanation_text = objective
- traitor_datum.objectives += new_objective
- player.mind.add_antag_datum(traitor_datum)
- var/datum/uplink_handler/uplink = traitor_datum.uplink_handler
- uplink.has_progression = FALSE
- uplink.has_objectives = FALSE
+ switch(chosen_antag)
+ if(ROLE_TRAITOR)
+ var/datum/antagonist/traitor/antag_datum = new(give_objectives = keep_generic_objecives)
+ assign_admin_objective_and_antag(player, antag_datum)
+ var/datum/uplink_handler/uplink = antag_datum.uplink_handler
+ uplink.has_progression = FALSE
+ uplink.has_objectives = FALSE
+ if(ROLE_CHANGELING)
+ var/datum/antagonist/changeling/antag_datum = new
+ antag_datum.give_objectives = keep_generic_objecives
+ assign_admin_objective_and_antag(player, antag_datum)
+ if(ROLE_HERETIC)
+ var/datum/antagonist/heretic/antag_datum = new
+ antag_datum.give_objectives = keep_generic_objecives
+ assign_admin_objective_and_antag(player, antag_datum)
+ if(ROLE_CULTIST)
+ var/datum/antagonist/cult/antag_datum = new
+ assign_admin_objective_and_antag(player, antag_datum)
+ if(ROLE_NINJA)
+ var/datum/antagonist/ninja/antag_datum = new
+ antag_datum.give_objectives = keep_generic_objecives
+ for(var/obj/item/item_to_drop in player)
+ if(!istype(item_to_drop, /obj/item/implant)) //avoid removing implanted uplinks
+ player.dropItemToGround(item_to_drop, FALSE)
+ assign_admin_objective_and_antag(player, antag_datum)
+ if(ROLE_WIZARD)
+ var/datum/antagonist/wizard/antag_datum = new
+ antag_datum.give_objectives = keep_generic_objecives
+ antag_datum.move_to_lair = FALSE
+ for(var/obj/item/item_to_drop in player) //avoid deleting player's items
+ if(!istype(item_to_drop, /obj/item/implant))
+ player.dropItemToGround(item_to_drop, FALSE)
+ assign_admin_objective_and_antag(player, antag_datum)
+ if(ROLE_NIGHTMARE)
+ var/datum/antagonist/nightmare/antag_datum = new
+ assign_admin_objective_and_antag(player, antag_datum)
+ player.set_species(/datum/species/shadow/nightmare)
+
else if(isAI(player))
- var/datum/antagonist/malf_ai/malfunction_datum = new(give_objectives = FALSE)
- var/datum/objective/new_objective = new
- new_objective.owner = player
- new_objective.explanation_text = objective
- malfunction_datum.objectives += new_objective
- player.mind.add_antag_datum(malfunction_datum)
+ var/datum/antagonist/malf_ai/antag_datum = new
+ antag_datum.give_objectives = keep_generic_objecives
+ assign_admin_objective_and_antag(player, antag_datum)
+
diff --git a/code/modules/antagonists/brainwashing/brainwashing.dm b/code/modules/antagonists/brainwashing/brainwashing.dm
index e74e7b32f7f9..7f60de3a1436 100644
--- a/code/modules/antagonists/brainwashing/brainwashing.dm
+++ b/code/modules/antagonists/brainwashing/brainwashing.dm
@@ -35,7 +35,7 @@
roundend_category = "brainwashed victims"
show_in_antagpanel = TRUE
antag_hud_name = "brainwashed"
- antagpanel_category = "Other"
+ antagpanel_category = ANTAG_GROUP_CREW
show_name_in_check_antagonists = TRUE
count_against_dynamic_roll_chance = FALSE
ui_name = "AntagInfoBrainwashed"
diff --git a/code/modules/antagonists/cult/blood_magic.dm b/code/modules/antagonists/cult/blood_magic.dm
index 1acb4fff68a0..2f72953f4a05 100644
--- a/code/modules/antagonists/cult/blood_magic.dm
+++ b/code/modules/antagonists/cult/blood_magic.dm
@@ -226,12 +226,12 @@
enable_text = span_cult("You prepare to horrify a target...")
disable_text = span_cult("You dispel the magic...")
-/datum/action/innate/cult/blood_spell/horror/InterceptClickOn(mob/living/caller, params, atom/clicked_on)
- var/turf/caller_turf = get_turf(caller)
+/datum/action/innate/cult/blood_spell/horror/InterceptClickOn(mob/living/user, params, atom/clicked_on)
+ var/turf/caller_turf = get_turf(user)
if(!isturf(caller_turf))
return FALSE
- if(!ishuman(clicked_on) || get_dist(caller, clicked_on) > 7)
+ if(!ishuman(clicked_on) || get_dist(user, clicked_on) > 7)
return FALSE
var/mob/living/carbon/human/human_clicked = clicked_on
@@ -240,23 +240,23 @@
return ..()
-/datum/action/innate/cult/blood_spell/horror/do_ability(mob/living/caller, mob/living/carbon/human/clicked_on)
+/datum/action/innate/cult/blood_spell/horror/do_ability(mob/living/user, mob/living/carbon/human/clicked_on)
clicked_on.set_hallucinations_if_lower(240 SECONDS)
- SEND_SOUND(caller, sound('sound/effects/ghost.ogg', FALSE, TRUE, 50))
+ SEND_SOUND(user, sound('sound/effects/ghost.ogg', FALSE, TRUE, 50))
var/image/sparkle_image = image('icons/effects/cult/effects.dmi', clicked_on, "bloodsparkles", ABOVE_MOB_LAYER)
clicked_on.add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/cult, "cult_apoc", sparkle_image, NONE)
addtimer(CALLBACK(clicked_on, TYPE_PROC_REF(/atom/, remove_alt_appearance), "cult_apoc", TRUE), 4 MINUTES, TIMER_OVERRIDE|TIMER_UNIQUE)
- to_chat(caller, span_cultbold("[clicked_on] has been cursed with living nightmares!"))
+ to_chat(user, span_cultbold("[clicked_on] has been cursed with living nightmares!"))
charges--
desc = base_desc
desc += "
Has [charges] use\s remaining."
build_all_button_icons()
if(charges <= 0)
- to_chat(caller, span_cult("You have exhausted the spell's power!"))
+ to_chat(user, span_cult("You have exhausted the spell's power!"))
qdel(src)
return TRUE
diff --git a/code/modules/antagonists/cult/cult_comms.dm b/code/modules/antagonists/cult/cult_comms.dm
index 2aeb662aa38e..19716589e1af 100644
--- a/code/modules/antagonists/cult/cult_comms.dm
+++ b/code/modules/antagonists/cult/cult_comms.dm
@@ -284,8 +284,8 @@
/datum/action/innate/cult/master/cultmark/IsAvailable(feedback = FALSE)
return ..() && COOLDOWN_FINISHED(src, cult_mark_cooldown)
-/datum/action/innate/cult/master/cultmark/InterceptClickOn(mob/caller, params, atom/clicked_on)
- var/turf/caller_turf = get_turf(caller)
+/datum/action/innate/cult/master/cultmark/InterceptClickOn(mob/user, params, atom/clicked_on)
+ var/turf/caller_turf = get_turf(user)
if(!isturf(caller_turf))
return FALSE
@@ -294,8 +294,8 @@
return ..()
-/datum/action/innate/cult/master/cultmark/do_ability(mob/living/caller, atom/clicked_on)
- var/datum/antagonist/cult/cultist = caller.mind.has_antag_datum(/datum/antagonist/cult, TRUE)
+/datum/action/innate/cult/master/cultmark/do_ability(mob/living/user, atom/clicked_on)
+ var/datum/antagonist/cult/cultist = user.mind.has_antag_datum(/datum/antagonist/cult, TRUE)
if(!cultist)
CRASH("[type] was casted by someone without a cult antag datum.")
@@ -304,17 +304,17 @@
CRASH("[type] was casted by a cultist without a cult team datum.")
if(cult_team.blood_target)
- to_chat(caller, span_cult("The cult has already designated a target!"))
+ to_chat(user, span_cult("The cult has already designated a target!"))
return FALSE
- if(cult_team.set_blood_target(clicked_on, caller, cult_mark_duration))
- unset_ranged_ability(caller, span_cult("The marking rite is complete! It will last for [DisplayTimeText(cult_mark_duration)] seconds."))
+ if(cult_team.set_blood_target(clicked_on, user, cult_mark_duration))
+ unset_ranged_ability(user, span_cult("The marking rite is complete! It will last for [DisplayTimeText(cult_mark_duration)] seconds."))
COOLDOWN_START(src, cult_mark_cooldown, cult_mark_cooldown_duration)
build_all_button_icons()
addtimer(CALLBACK(src, PROC_REF(build_all_button_icons)), cult_mark_cooldown_duration + 1)
return TRUE
- unset_ranged_ability(caller, span_cult("The marking rite failed!"))
+ unset_ranged_ability(user, span_cult("The marking rite failed!"))
return TRUE
/datum/action/innate/cult/ghostmark //Ghost version
@@ -414,44 +414,44 @@
/datum/action/innate/cult/master/pulse/IsAvailable(feedback = FALSE)
return ..() && COOLDOWN_FINISHED(src, pulse_cooldown)
-/datum/action/innate/cult/master/pulse/InterceptClickOn(mob/living/caller, params, atom/clicked_on)
- var/turf/caller_turf = get_turf(caller)
+/datum/action/innate/cult/master/pulse/InterceptClickOn(mob/living/user, params, atom/clicked_on)
+ var/turf/caller_turf = get_turf(user)
if(!isturf(caller_turf))
return FALSE
if(!(clicked_on in view(7, caller_turf)))
return FALSE
- if(clicked_on == caller)
+ if(clicked_on == user)
return FALSE
return ..()
-/datum/action/innate/cult/master/pulse/do_ability(mob/living/caller, atom/clicked_on)
+/datum/action/innate/cult/master/pulse/do_ability(mob/living/user, atom/clicked_on)
var/atom/throwee = throwee_ref?.resolve()
if(QDELETED(throwee))
- to_chat(caller, span_cult("You lost your target!"))
+ to_chat(user, span_cult("You lost your target!"))
throwee = null
throwee_ref = null
return FALSE
if(throwee)
if(get_dist(throwee, clicked_on) >= 16)
- to_chat(caller, span_cult("You can't teleport [clicked_on.p_them()] that far!"))
+ to_chat(user, span_cult("You can't teleport [clicked_on.p_them()] that far!"))
return FALSE
var/turf/throwee_turf = get_turf(throwee)
playsound(throwee_turf, 'sound/magic/exit_blood.ogg')
- new /obj/effect/temp_visual/cult/sparks(throwee_turf, caller.dir)
+ new /obj/effect/temp_visual/cult/sparks(throwee_turf, user.dir)
throwee.visible_message(
span_warning("A pulse of magic whisks [throwee] away!"),
span_cult("A pulse of blood magic whisks you away..."),
)
if(!do_teleport(throwee, clicked_on, channel = TELEPORT_CHANNEL_CULT))
- to_chat(caller, span_cult("The teleport fails!"))
+ to_chat(user, span_cult("The teleport fails!"))
throwee.visible_message(
span_warning("...Except they don't go very far"),
span_cult("...Except you don't appear to have moved very far."),
@@ -459,15 +459,15 @@
return FALSE
throwee_turf.Beam(clicked_on, icon_state = "sendbeam", time = 0.4 SECONDS)
- new /obj/effect/temp_visual/cult/sparks(get_turf(clicked_on), caller.dir)
+ new /obj/effect/temp_visual/cult/sparks(get_turf(clicked_on), user.dir)
throwee.visible_message(
span_warning("[throwee] appears suddenly in a pulse of magic!"),
span_cult("...And you appear elsewhere."),
)
COOLDOWN_START(src, pulse_cooldown, pulse_cooldown_duration)
- to_chat(caller, span_cult("A pulse of blood magic surges through you as you shift [throwee] through time and space."))
- caller.click_intercept = null
+ to_chat(user, span_cult("A pulse of blood magic surges through you as you shift [throwee] through time and space."))
+ user.click_intercept = null
throwee_ref = null
build_all_button_icons()
addtimer(CALLBACK(src, PROC_REF(build_all_button_icons)), pulse_cooldown_duration + 1)
@@ -479,13 +479,13 @@
var/mob/living/living_clicked = clicked_on
if(!IS_CULTIST(living_clicked))
return FALSE
- SEND_SOUND(caller, sound('sound/weapons/thudswoosh.ogg'))
- to_chat(caller, span_cultbold("You reach through the veil with your mind's eye and seize [clicked_on]! Click anywhere nearby to teleport [clicked_on.p_them()]!"))
+ SEND_SOUND(user, sound('sound/weapons/thudswoosh.ogg'))
+ to_chat(user, span_cultbold("You reach through the veil with your mind's eye and seize [clicked_on]! Click anywhere nearby to teleport [clicked_on.p_them()]!"))
throwee_ref = WEAKREF(clicked_on)
return TRUE
if(istype(clicked_on, /obj/structure/destructible/cult))
- to_chat(caller, span_cultbold("You reach through the veil with your mind's eye and lift [clicked_on]! Click anywhere nearby to teleport it!"))
+ to_chat(user, span_cultbold("You reach through the veil with your mind's eye and lift [clicked_on]! Click anywhere nearby to teleport it!"))
throwee_ref = WEAKREF(clicked_on)
return TRUE
diff --git a/code/modules/antagonists/fugitive/fugitive.dm b/code/modules/antagonists/fugitive/fugitive.dm
index 1ef9989dc607..7f2cc4a9f3d5 100644
--- a/code/modules/antagonists/fugitive/fugitive.dm
+++ b/code/modules/antagonists/fugitive/fugitive.dm
@@ -5,6 +5,8 @@
job_rank = ROLE_FUGITIVE
silent = TRUE //greet called by the event
show_in_antagpanel = FALSE
+ show_to_ghosts = TRUE
+ antagpanel_category = ANTAG_GROUP_FUGITIVES
prevent_roundtype_conversion = FALSE
antag_hud_name = "fugitive"
suicide_cry = "FOR FREEDOM!!"
diff --git a/code/modules/antagonists/fugitive/hunters/hunter.dm b/code/modules/antagonists/fugitive/hunters/hunter.dm
index 32d18998e748..fd81d588d9fe 100644
--- a/code/modules/antagonists/fugitive/hunters/hunter.dm
+++ b/code/modules/antagonists/fugitive/hunters/hunter.dm
@@ -4,6 +4,8 @@
roundend_category = "Fugitive"
silent = TRUE //greet called by the spawn
show_in_antagpanel = FALSE
+ show_to_ghosts = TRUE
+ antagpanel_category = ANTAG_GROUP_HUNTERS
prevent_roundtype_conversion = FALSE
antag_hud_name = "fugitive_hunter"
suicide_cry = "FOR GLORY!!"
diff --git a/code/modules/antagonists/fugitive/hunters/hunter_gear.dm b/code/modules/antagonists/fugitive/hunters/hunter_gear.dm
index 596420ba8f4c..47dbcbb21b25 100644
--- a/code/modules/antagonists/fugitive/hunters/hunter_gear.dm
+++ b/code/modules/antagonists/fugitive/hunters/hunter_gear.dm
@@ -138,6 +138,19 @@
if(gored)
name = gored.real_name
+ AddComponent(
+ /datum/component/blood_walk,\
+ blood_type = /obj/effect/decal/cleanable/blood,\
+ blood_spawn_chance = 66.6,\
+ max_blood = INFINITY,\
+ )
+
+ AddComponent(/datum/component/bloody_spreader,\
+ blood_left = INFINITY,\
+ blood_dna = list("meaty DNA" = "MT-"),\
+ diseases = null,\
+ )
+
/obj/structure/bouncy_castle/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0)
switch(damage_type)
if(BRUTE)
diff --git a/code/modules/antagonists/heretic/items/heretic_blades.dm b/code/modules/antagonists/heretic/items/heretic_blades.dm
index c83fde235797..ac2a6400ae56 100644
--- a/code/modules/antagonists/heretic/items/heretic_blades.dm
+++ b/code/modules/antagonists/heretic/items/heretic_blades.dm
@@ -90,6 +90,23 @@
inhand_icon_state = "flesh_blade"
after_use_message = "The Marshal hears your call..."
+/obj/item/melee/sickly_blade/flesh/Initialize(mapload)
+ . = ..()
+
+ AddComponent(
+ /datum/component/blood_walk,\
+ blood_type = /obj/effect/decal/cleanable/blood,\
+ blood_spawn_chance = 66.6,\
+ max_blood = INFINITY,\
+ )
+
+ AddComponent(
+ /datum/component/bloody_spreader,\
+ blood_left = INFINITY,\
+ blood_dna = list("Unknown DNA" = "X*"),\
+ diseases = null,\
+ )
+
// Path of Void's blade
/obj/item/melee/sickly_blade/void
name = "\improper void blade"
diff --git a/code/modules/antagonists/heretic/knowledge/moon_lore.dm b/code/modules/antagonists/heretic/knowledge/moon_lore.dm
index 05195b9eb00a..b8eb5849076e 100644
--- a/code/modules/antagonists/heretic/knowledge/moon_lore.dm
+++ b/code/modules/antagonists/heretic/knowledge/moon_lore.dm
@@ -162,7 +162,7 @@
"upgraded path of moon blades", \
)
target.emote(pick("giggle", "laugh"))
- target.mob_mood.set_sanity(target.mob_mood.sanity - 10)
+ target.mob_mood?.set_sanity(target.mob_mood.sanity - 10)
/datum/heretic_knowledge/spell/moon_ringleader
name = "Ringleaders Rise"
diff --git a/code/modules/antagonists/heretic/magic/aggressive_spread.dm b/code/modules/antagonists/heretic/magic/aggressive_spread.dm
index c15ae041a47a..de1233382f64 100644
--- a/code/modules/antagonists/heretic/magic/aggressive_spread.dm
+++ b/code/modules/antagonists/heretic/magic/aggressive_spread.dm
@@ -17,11 +17,7 @@
aoe_radius = 3
/datum/action/cooldown/spell/aoe/rust_conversion/get_things_to_cast_on(atom/center)
- var/list/things = list()
- for(var/turf/nearby_turf in range(aoe_radius, center))
- things += nearby_turf
-
- return things
+ return RANGE_TURFS(aoe_radius, center)
/datum/action/cooldown/spell/aoe/rust_conversion/cast_on_thing_in_aoe(turf/victim, atom/caster)
// We have less chance of rusting stuff that's further
diff --git a/code/modules/antagonists/heretic/magic/furious_steel.dm b/code/modules/antagonists/heretic/magic/furious_steel.dm
index 5899ca53fd44..da54c1904b15 100644
--- a/code/modules/antagonists/heretic/magic/furious_steel.dm
+++ b/code/modules/antagonists/heretic/magic/furious_steel.dm
@@ -43,12 +43,12 @@
unset_click_ability(source, refund_cooldown = TRUE)
-/datum/action/cooldown/spell/pointed/projectile/furious_steel/InterceptClickOn(mob/living/caller, params, atom/target)
+/datum/action/cooldown/spell/pointed/projectile/furious_steel/InterceptClickOn(mob/living/user, params, atom/target)
// Let the caster prioritize using items like guns over blade casts
- if(caller.get_active_held_item())
+ if(user.get_active_held_item())
return FALSE
// Let the caster prioritize melee attacks like punches and shoves over blade casts
- if(get_dist(caller, target) <= 1)
+ if(get_dist(user, target) <= 1)
return FALSE
return ..()
diff --git a/code/modules/antagonists/heretic/magic/moon_parade.dm b/code/modules/antagonists/heretic/magic/moon_parade.dm
index 409e55bf9261..b2bfa13d48a2 100644
--- a/code/modules/antagonists/heretic/magic/moon_parade.dm
+++ b/code/modules/antagonists/heretic/magic/moon_parade.dm
@@ -86,7 +86,7 @@
victim.add_mood_event("Moon Insanity", /datum/mood_event/moon_insanity)
victim.cause_hallucination(/datum/hallucination/delusion/preset/moon, name)
- victim.mob_mood.set_sanity(victim.mob_mood.sanity - 20)
+ victim.mob_mood?.set_sanity(victim.mob_mood.sanity - 20)
/obj/projectile/moon_parade/Destroy()
for(var/mob/living/leftover_mob as anything in mobs_hit)
diff --git a/code/modules/antagonists/heretic/magic/rust_charge.dm b/code/modules/antagonists/heretic/magic/rust_charge.dm
index 0d693b0de86e..e944b827582b 100644
--- a/code/modules/antagonists/heretic/magic/rust_charge.dm
+++ b/code/modules/antagonists/heretic/magic/rust_charge.dm
@@ -46,4 +46,4 @@
SSexplosions.med_mov_atom += target
INVOKE_ASYNC(src, PROC_REF(DestroySurroundings), source)
- hit_target(source, target, charge_damage)
+ try_hit_target(source, target) // monkestation edit: fix runtime error
diff --git a/code/modules/antagonists/hypnotized/hypnotized.dm b/code/modules/antagonists/hypnotized/hypnotized.dm
index 2ee17b671aaa..4f1f49aa3be7 100644
--- a/code/modules/antagonists/hypnotized/hypnotized.dm
+++ b/code/modules/antagonists/hypnotized/hypnotized.dm
@@ -6,7 +6,7 @@
antag_hud_name = "brainwashed"
ui_name = "AntagInfoBrainwashed"
show_in_antagpanel = TRUE
- antagpanel_category = "Other"
+ antagpanel_category = ANTAG_GROUP_CREW
show_name_in_check_antagonists = TRUE
count_against_dynamic_roll_chance = FALSE
diff --git a/code/modules/antagonists/malf_ai/malf_ai.dm b/code/modules/antagonists/malf_ai/malf_ai.dm
index 863b32e28d8f..6adcf901aaa3 100644
--- a/code/modules/antagonists/malf_ai/malf_ai.dm
+++ b/code/modules/antagonists/malf_ai/malf_ai.dm
@@ -57,8 +57,6 @@
/// Generates a complete set of malf AI objectives up to the traitor objective limit.
/datum/antagonist/malf_ai/proc/forge_ai_objectives()
- objectives.Cut()
-
if(prob(PROB_SPECIAL))
forge_special_objective()
diff --git a/code/modules/antagonists/malf_ai/malf_ai_modules.dm b/code/modules/antagonists/malf_ai/malf_ai_modules.dm
index 4fef406a5fbe..9b48f836afef 100644
--- a/code/modules/antagonists/malf_ai/malf_ai_modules.dm
+++ b/code/modules/antagonists/malf_ai/malf_ai_modules.dm
@@ -442,19 +442,19 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module))
. = ..()
desc = "[desc] It has [uses] use\s remaining."
-/datum/action/innate/ai/ranged/override_machine/do_ability(mob/living/caller, atom/clicked_on)
- if(caller.incapacitated())
- unset_ranged_ability(caller)
+/datum/action/innate/ai/ranged/override_machine/do_ability(mob/living/user, atom/clicked_on)
+ if(user.incapacitated())
+ unset_ranged_ability(user)
return FALSE
if(!ismachinery(clicked_on))
- to_chat(caller, span_warning("You can only animate machines!"))
+ to_chat(user, span_warning("You can only animate machines!"))
return FALSE
var/obj/machinery/clicked_machine = clicked_on
if(!clicked_machine.can_be_overridden() || is_type_in_typecache(clicked_machine, GLOB.blacklisted_malf_machines))
- to_chat(caller, span_warning("That machine can't be overridden!"))
+ to_chat(user, span_warning("That machine can't be overridden!"))
return FALSE
- caller.playsound_local(caller, 'sound/misc/interference.ogg', 50, FALSE, use_reverb = FALSE)
+ user.playsound_local(user, 'sound/misc/interference.ogg', 50, FALSE, use_reverb = FALSE)
adjust_uses(-1)
if(uses)
@@ -462,15 +462,15 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module))
build_all_button_icons()
clicked_machine.audible_message(span_userdanger("You hear a loud electrical buzzing sound coming from [clicked_machine]!"))
- addtimer(CALLBACK(src, PROC_REF(animate_machine), caller, clicked_machine), 5 SECONDS) //kabeep!
- unset_ranged_ability(caller, span_danger("Sending override signal..."))
+ addtimer(CALLBACK(src, PROC_REF(animate_machine), user, clicked_machine), 5 SECONDS) //kabeep!
+ unset_ranged_ability(user, span_danger("Sending override signal..."))
return TRUE
-/datum/action/innate/ai/ranged/override_machine/proc/animate_machine(mob/living/caller, obj/machinery/to_animate)
+/datum/action/innate/ai/ranged/override_machine/proc/animate_machine(mob/living/user, obj/machinery/to_animate)
if(QDELETED(to_animate))
return
- new /mob/living/simple_animal/hostile/mimic/copy/machine(get_turf(to_animate), to_animate, caller, TRUE)
+ new /mob/living/simple_animal/hostile/mimic/copy/machine(get_turf(to_animate), to_animate, user, TRUE)
/// Destroy RCDs: Detonates all non-cyborg RCDs on the station.
/datum/ai_module/destructive/destroy_rcd
@@ -519,38 +519,38 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module))
..()
desc = "[desc] It has [uses] use\s remaining."
-/datum/action/innate/ai/ranged/overload_machine/proc/detonate_machine(mob/living/caller, obj/machinery/to_explode)
+/datum/action/innate/ai/ranged/overload_machine/proc/detonate_machine(mob/living/user, obj/machinery/to_explode)
if(QDELETED(to_explode))
return
var/turf/machine_turf = get_turf(to_explode)
- message_admins("[ADMIN_LOOKUPFLW(caller)] overloaded [to_explode.name] ([to_explode.type]) at [ADMIN_VERBOSEJMP(machine_turf)].")
- caller.log_message("overloaded [to_explode.name] ([to_explode.type])", LOG_ATTACK)
+ message_admins("[ADMIN_LOOKUPFLW(user)] overloaded [to_explode.name] ([to_explode.type]) at [ADMIN_VERBOSEJMP(machine_turf)].")
+ user.log_message("overloaded [to_explode.name] ([to_explode.type])", LOG_ATTACK)
explosion(to_explode, heavy_impact_range = 2, light_impact_range = 3)
if(!QDELETED(to_explode)) //to check if the explosion killed it before we try to delete it
qdel(to_explode)
-/datum/action/innate/ai/ranged/overload_machine/do_ability(mob/living/caller, atom/clicked_on)
- if(caller.incapacitated())
- unset_ranged_ability(caller)
+/datum/action/innate/ai/ranged/overload_machine/do_ability(mob/living/user, atom/clicked_on)
+ if(user.incapacitated())
+ unset_ranged_ability(user)
return FALSE
if(!ismachinery(clicked_on))
- to_chat(caller, span_warning("You can only overload machines!"))
+ to_chat(user, span_warning("You can only overload machines!"))
return FALSE
var/obj/machinery/clicked_machine = clicked_on
if(is_type_in_typecache(clicked_machine, GLOB.blacklisted_malf_machines))
- to_chat(caller, span_warning("You cannot overload that device!"))
+ to_chat(user, span_warning("You cannot overload that device!"))
return FALSE
- caller.playsound_local(caller, SFX_SPARKS, 50, 0)
+ user.playsound_local(user, SFX_SPARKS, 50, 0)
adjust_uses(-1)
if(uses)
desc = "[initial(desc)] It has [uses] use\s remaining."
build_all_button_icons()
clicked_machine.audible_message(span_userdanger("You hear a loud electrical buzzing sound coming from [clicked_machine]!"))
- addtimer(CALLBACK(src, PROC_REF(detonate_machine), caller, clicked_machine), 5 SECONDS) //kaboom!
- unset_ranged_ability(caller, span_danger("Overcharging machine..."))
+ addtimer(CALLBACK(src, PROC_REF(detonate_machine), user, clicked_machine), 5 SECONDS) //kaboom!
+ unset_ranged_ability(user, span_danger("Overcharging machine..."))
return TRUE
/// Blackout: Overloads a random number of lights across the station. Three uses.
@@ -1050,7 +1050,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module))
. = ..()
desc = "[desc] It has [uses] use\s remaining."
-/datum/action/innate/ai/ranged/emag/do_ability(mob/living/caller, atom/clicked_on)
+/datum/action/innate/ai/ranged/emag/do_ability(mob/living/user, atom/clicked_on)
// Only things with of or subtyped of any of these types may be remotely emagged
var/static/list/compatable_typepaths = list(
@@ -1062,13 +1062,13 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module))
/mob/living/silicon,
)
- if (!isAI(caller))
+ if (!isAI(user))
return FALSE
- var/mob/living/silicon/ai/ai_caller = caller
+ var/mob/living/silicon/ai/ai_caller = user
if(ai_caller.incapacitated())
- unset_ranged_ability(caller)
+ unset_ranged_ability(user)
return FALSE
if (!ai_caller.can_see(clicked_on))
@@ -1147,15 +1147,15 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module))
. = ..()
desc = "[desc] It has [uses] use\s remaining."
-/datum/action/innate/ai/ranged/core_tilt/do_ability(mob/living/caller, atom/clicked_on)
+/datum/action/innate/ai/ranged/core_tilt/do_ability(mob/living/user, atom/clicked_on)
if (!COOLDOWN_FINISHED(src, time_til_next_tilt))
- caller.balloon_alert(caller, "on cooldown!")
+ user.balloon_alert(user, "on cooldown!")
return FALSE
- if (!isAI(caller))
+ if (!isAI(user))
return FALSE
- var/mob/living/silicon/ai/ai_caller = caller
+ var/mob/living/silicon/ai/ai_caller = user
if (ai_caller.incapacitated() || !isturf(ai_caller.loc))
return FALSE
@@ -1198,8 +1198,8 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module))
return ai_caller.fall_and_crush(target, MALF_AI_ROLL_DAMAGE, MALF_AI_ROLL_CRIT_CHANCE, null, paralyze_time, picked_dir, rotation = get_rotation_from_dir(picked_dir))
/// Used in our radial menu, state-checking proc after the radial menu sleeps
-/datum/action/innate/ai/ranged/core_tilt/proc/radial_check(mob/living/silicon/ai/caller)
- if (QDELETED(caller) || caller.incapacitated() || caller.stat == DEAD)
+/datum/action/innate/ai/ranged/core_tilt/proc/radial_check(mob/living/silicon/ai/user)
+ if (QDELETED(user) || user.incapacitated() || user.stat == DEAD)
return FALSE
if (uses <= 0)
@@ -1240,14 +1240,14 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module))
. = ..()
desc = "[desc] It has [uses] use\s remaining."
-/datum/action/innate/ai/ranged/remote_vendor_tilt/do_ability(mob/living/caller, atom/clicked_on)
+/datum/action/innate/ai/ranged/remote_vendor_tilt/do_ability(mob/living/user, atom/clicked_on)
- if (!isAI(caller))
+ if (!isAI(user))
return FALSE
- var/mob/living/silicon/ai/ai_caller = caller
+ var/mob/living/silicon/ai/ai_caller = user
if(ai_caller.incapacitated())
- unset_ranged_ability(caller)
+ unset_ranged_ability(user)
return FALSE
if(!isvendor(clicked_on))
@@ -1268,7 +1268,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module))
clicked_vendor.balloon_alert(ai_caller, "inoperable!")
return FALSE
- var/picked_dir_string = show_radial_menu(ai_caller, clicked_vendor, GLOB.all_radial_directions, custom_check = CALLBACK(src, PROC_REF(radial_check), caller, clicked_vendor))
+ var/picked_dir_string = show_radial_menu(ai_caller, clicked_vendor, GLOB.all_radial_directions, custom_check = CALLBACK(src, PROC_REF(radial_check), user, clicked_vendor))
if (isnull(picked_dir_string))
return FALSE
var/picked_dir = text2dir(picked_dir_string)
@@ -1288,7 +1288,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module))
desc = "[initial(desc)] It has [uses] use\s remaining."
build_all_button_icons()
- unset_ranged_ability(caller, span_danger("Tilting..."))
+ unset_ranged_ability(user, span_danger("Tilting..."))
return TRUE
/datum/action/innate/ai/ranged/remote_vendor_tilt/proc/do_vendor_tilt(obj/machinery/vending/vendor, turf/target)
@@ -1301,8 +1301,8 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module))
vendor.tilt(target, MALF_VENDOR_TIPPING_CRIT_CHANCE)
/// Used in our radial menu, state-checking proc after the radial menu sleeps
-/datum/action/innate/ai/ranged/remote_vendor_tilt/proc/radial_check(mob/living/silicon/ai/caller, obj/machinery/vending/clicked_vendor)
- if (QDELETED(caller) || caller.incapacitated() || caller.stat == DEAD)
+/datum/action/innate/ai/ranged/remote_vendor_tilt/proc/radial_check(mob/living/silicon/ai/user, obj/machinery/vending/clicked_vendor)
+ if (QDELETED(user) || user.incapacitated() || user.stat == DEAD)
return FALSE
if (QDELETED(clicked_vendor))
@@ -1311,8 +1311,8 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module))
if (uses <= 0)
return FALSE
- if (!caller.can_see(clicked_vendor))
- to_chat(caller, span_warning("Lost sight of [clicked_vendor]!"))
+ if (!user.can_see(clicked_vendor))
+ to_chat(user, span_warning("Lost sight of [clicked_vendor]!"))
return FALSE
return TRUE
diff --git a/code/modules/antagonists/nukeop/equipment/nuclear_bomb/_nuclear_bomb.dm b/code/modules/antagonists/nukeop/equipment/nuclear_bomb/_nuclear_bomb.dm
index 82d59ba02925..a94821f71f86 100644
--- a/code/modules/antagonists/nukeop/equipment/nuclear_bomb/_nuclear_bomb.dm
+++ b/code/modules/antagonists/nukeop/equipment/nuclear_bomb/_nuclear_bomb.dm
@@ -618,6 +618,9 @@ GLOBAL_VAR(station_nuke_source)
* Helper proc that handles gibbing someone who has been nuked.
*/
/proc/nuke_gib(mob/living/gibbed, atom/source)
+ if(HAS_TRAIT(gibbed, TRAIT_NUKEIMMUNE))
+ return FALSE
+
if(istype(gibbed.loc, /obj/structure/closet/secure_closet/freezer))
var/obj/structure/closet/secure_closet/freezer/freezer = gibbed.loc
if(!freezer.jones)
diff --git a/code/modules/antagonists/obsessed/obsessed.dm b/code/modules/antagonists/obsessed/obsessed.dm
index 585867d5767b..a079f95cfa0e 100644
--- a/code/modules/antagonists/obsessed/obsessed.dm
+++ b/code/modules/antagonists/obsessed/obsessed.dm
@@ -1,8 +1,9 @@
/datum/antagonist/obsessed
name = "Obsessed"
show_in_antagpanel = TRUE
- antagpanel_category = "Other"
+ antagpanel_category = ANTAG_GROUP_CREW
job_rank = ROLE_OBSESSED
+ show_to_ghosts = TRUE
antag_hud_name = "obsessed"
show_name_in_check_antagonists = TRUE
roundend_category = "obsessed"
diff --git a/code/modules/antagonists/paradox_clone/paradox_clone.dm b/code/modules/antagonists/paradox_clone/paradox_clone.dm
index 8ec0a75e8c9f..0773d949d25c 100644
--- a/code/modules/antagonists/paradox_clone/paradox_clone.dm
+++ b/code/modules/antagonists/paradox_clone/paradox_clone.dm
@@ -2,7 +2,9 @@
name = "\improper Paradox Clone"
roundend_category = "Paradox Clone"
job_rank = ROLE_PARADOX_CLONE
+ antagpanel_category = ANTAG_GROUP_PARADOX
antag_hud_name = "paradox_clone"
+ show_to_ghosts = TRUE
suicide_cry = "THERE CAN BE ONLY ONE!!"
preview_outfit = /datum/outfit/paradox_clone
diff --git a/code/modules/antagonists/space_dragon/carp_rift.dm b/code/modules/antagonists/space_dragon/carp_rift.dm
index 88df5c03a197..a2a6eb12ad0b 100644
--- a/code/modules/antagonists/space_dragon/carp_rift.dm
+++ b/code/modules/antagonists/space_dragon/carp_rift.dm
@@ -18,13 +18,13 @@
if(!dragon)
return
var/area/rift_location = get_area(owner)
- if(!(rift_location.area_flags & VALID_TERRITORY))
- to_chat(owner, span_warning("You can't summon a rift here! Try summoning somewhere secure within the station!"))
+ if(!(rift_location in dragon.chosen_rift_areas))
+ owner.balloon_alert(owner, "can't summon a rift here!")
return
for(var/obj/structure/carp_rift/rift as anything in dragon.rift_list)
var/area/used_location = get_area(rift)
if(used_location == rift_location)
- to_chat(owner, span_warning("You've already summoned a rift in this area! You have to summon again somewhere else!"))
+ owner.balloon_alert(owner, "already summoned a rift here!")
return
var/turf/rift_spawn_turf = get_turf(dragon)
if(isopenspaceturf(rift_spawn_turf))
@@ -70,7 +70,7 @@
light_color = LIGHT_COLOR_PURPLE
light_outer_range = 10
anchored = TRUE
- density = FALSE
+ density = TRUE
plane = MASSIVE_OBJ_PLANE
/// The amount of time the rift has charged for.
var/time_charged = 0
@@ -83,11 +83,13 @@
/// Current charge state of the rift.
var/charge_state = CHARGE_ONGOING
/// The interval for adding additional space carp spawns to the rift.
- var/carp_interval = 60
+ var/carp_interval = 45
/// The time since an extra carp was added to the ghost role spawning pool.
var/last_carp_inc = 0
/// A list of all the ckeys which have used this carp rift to spawn in as carps.
var/list/ckey_list = list()
+ /// Gravity aura for the rift, makes all turfs nearby forced grav.
+ var/datum/proximity_monitor/advanced/gravity/warns_on_entrance/gravity_aura
/datum/armor/structure_carp_rift
energy = 100
@@ -101,14 +103,25 @@
AddComponent( \
/datum/component/aura_healing, \
- range = 0, \
+ range = 1, \
simple_heal = 5, \
limit_to_trait = TRAIT_HEALS_FROM_CARP_RIFTS, \
healing_color = COLOR_BLUE, \
)
+ gravity_aura = new(
+ /* host = */src,
+ /* range = */15,
+ /* ignore_if_not_on_turf = */TRUE,
+ /* gravity = */1,
+ )
+
START_PROCESSING(SSobj, src)
+/obj/structure/carp_rift/Destroy()
+ QDEL_NULL(gravity_aura)
+ return ..()
+
// Carp rifts always take heavy explosion damage. Discourages the use of maxcaps
// and favours more weaker explosives to destroy the portal
// as they have the same effect on the portal.
@@ -239,12 +252,13 @@
to_chat(user, span_warning("The rift already summoned enough carp!"))
return FALSE
- if(!dragon)
+ if(isnull(dragon))
return
var/mob/living/newcarp = new dragon.minion_to_spawn(loc)
newcarp.faction = dragon.owner.current.faction
newcarp.AddElement(/datum/element/nerfed_pulling, GLOB.typecache_general_bad_things_to_easily_move)
newcarp.AddElement(/datum/element/prevent_attacking_of_types, GLOB.typecache_general_bad_hostile_attack_targets, "this tastes awful!")
+ dragon.wavespeak?.link_mob(newcarp)
if(!is_listed)
ckey_list += user.ckey
diff --git a/code/modules/antagonists/space_dragon/space_dragon.dm b/code/modules/antagonists/space_dragon/space_dragon.dm
index 66d1e13461aa..3338c62612b1 100644
--- a/code/modules/antagonists/space_dragon/space_dragon.dm
+++ b/code/modules/antagonists/space_dragon/space_dragon.dm
@@ -21,9 +21,13 @@
/// Whether or not Space Dragon has completed their objective, and thus triggered the ending sequence.
var/objective_complete = FALSE
/// What mob to spawn from ghosts using this dragon's rifts
- var/minion_to_spawn = /mob/living/basic/carp
+ var/minion_to_spawn = /mob/living/basic/carp/advanced
/// What AI mobs to spawn from this dragon's rifts
var/ai_to_spawn = /mob/living/basic/carp
+ /// Wavespeak mind linker, to allow telepathy between dragon and carps
+ var/datum/component/mind_linker/wavespeak
+ /// What areas are we allowed to place rifts in?
+ var/list/chosen_rift_areas = list()
/datum/antagonist/space_dragon/greet()
. = ..()
@@ -33,16 +37,42 @@
Today, we will snuff out one of those lights.")
to_chat(owner, span_boldwarning("You have five minutes to find a safe location to place down the first rift. If you take longer than five minutes to place a rift, you will be returned from whence you came."))
owner.announce_objectives()
- SEND_SOUND(owner.current, sound('sound/magic/demon_attack1.ogg'))
+ owner.current.playsound_local(get_turf(owner.current), 'sound/magic/demon_attack1.ogg', 80)
/datum/antagonist/space_dragon/forge_objectives()
+ var/static/list/area/allowed_areas
+ if(!allowed_areas)
+ // Areas that will prove a challeng for the dragon and are provocative to the crew.
+ allowed_areas = typecacheof(list(
+ /area/station/command,
+ /area/station/engineering,
+ /area/station/science,
+ /area/station/security,
+ ))
+
+ var/list/possible_areas = typecache_filter_list(get_sorted_areas(), allowed_areas)
+ for(var/area/possible_area as anything in possible_areas)
+ if(initial(possible_area.outdoors) || !(possible_area.area_flags & VALID_TERRITORY))
+ possible_areas -= possible_area
+
+ for(var/i in 1 to 5)
+ chosen_rift_areas += pick_n_take(possible_areas)
+
var/datum/objective/summon_carp/summon = new
- summon.dragon = src
objectives += summon
+ summon.owner = owner
+ summon.update_explanation_text()
/datum/antagonist/space_dragon/on_gain()
forge_objectives()
rift_ability = new()
+ owner.special_role = ROLE_SPACE_DRAGON
+ owner.set_assigned_role(SSjob.GetJobType(/datum/job/space_dragon))
+ return ..()
+
+/datum/antagonist/space_dragon/on_removal()
+ owner.special_role = null
+ owner.set_assigned_role(SSjob.GetJobType(/datum/job/unassigned))
return ..()
/datum/antagonist/space_dragon/apply_innate_effects(mob/living/mob_override)
@@ -52,6 +82,15 @@
antag.faction |= FACTION_CARP
// Give the ability over if we have one
rift_ability?.Grant(antag)
+ wavespeak = antag.AddComponent( \
+ /datum/component/mind_linker, \
+ network_name = "Wavespeak", \
+ chat_color = "#635BAF", \
+ signals_which_destroy_us = list(COMSIG_LIVING_DEATH), \
+ speech_action_icon = 'icons/mob/actions/actions_space_dragon.dmi', \
+ speech_action_icon_state = "wavespeak", \
+ )
+ RegisterSignal(wavespeak, COMSIG_QDELETING, PROC_REF(clear_wavespeak))
/datum/antagonist/space_dragon/remove_innate_effects(mob/living/mob_override)
var/mob/living/antag = mob_override || owner.current
@@ -59,11 +98,14 @@
UnregisterSignal(antag, COMSIG_LIVING_DEATH)
antag.faction -= FACTION_CARP
rift_ability?.Remove(antag)
+ QDEL_NULL(wavespeak)
/datum/antagonist/space_dragon/Destroy()
rift_list = null
carp = null
QDEL_NULL(rift_ability)
+ QDEL_NULL(wavespeak)
+ chosen_rift_areas.Cut()
return ..()
/datum/antagonist/space_dragon/get_preview_icon()
@@ -77,6 +119,10 @@
return icon
+/datum/antagonist/space_dragon/proc/clear_wavespeak()
+ SIGNAL_HANDLER
+ wavespeak = null
+
/**
* Checks to see if we need to do anything with the current state of the dragon's rifts.
*
@@ -133,8 +179,7 @@
objective_complete = TRUE
permanant_empower()
var/datum/objective/summon_carp/main_objective = locate() in objectives
- if(main_objective)
- main_objective.completed = TRUE
+ main_objective?.completed = TRUE
priority_announce("A large amount of lifeforms have been detected approaching [station_name()] at extreme speeds. \
Remaining crew are advised to evacuate as soon as possible.", "[command_name()] Wildlife Observations", has_important_message = TRUE)
sound_to_playing_players('sound/creatures/space_dragon_roar.ogg')
@@ -178,8 +223,19 @@
owner.current.remove_movespeed_modifier(/datum/movespeed_modifier/dragon_rage)
/datum/objective/summon_carp
- var/datum/antagonist/space_dragon/dragon
- explanation_text = "Summon and protect the rifts to flood the station with carp."
+ explanation_text = "Summon 3 rifts in order to flood the station with carp."
+
+/datum/objective/summon_carp/update_explanation_text()
+ var/datum/antagonist/space_dragon/dragon_owner = owner.has_antag_datum(/datum/antagonist/space_dragon)
+ if(isnull(dragon_owner))
+ return
+
+ var/list/converted_names = list()
+ for(var/area/possible_area as anything in dragon_owner.chosen_rift_areas)
+ converted_names += possible_area.get_original_area_name()
+
+ explanation_text = initial(explanation_text)
+ explanation_text += " Your possible rift locations are: [english_list(converted_names)]"
/datum/antagonist/space_dragon/roundend_report()
var/list/parts = list()
@@ -198,7 +254,17 @@
parts += "The [name] was successful!"
else
parts += "The [name] has failed!"
- if(carp.len)
- parts += "The [name] was assisted by:"
- parts += printplayerlist(carp)
+
+ if(length(carp))
+ parts += "
The [name] was assisted by:"
+ parts += "