diff --git a/_maps/RandomRuins/SpaceRuins/advancedlab.dmm b/_maps/RandomRuins/SpaceRuins/advancedlab.dmm
new file mode 100644
index 0000000000..39e29018ea
--- /dev/null
+++ b/_maps/RandomRuins/SpaceRuins/advancedlab.dmm
@@ -0,0 +1,582 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"a" = (
+/turf/template_noop,
+/area/template_noop)
+"b" = (
+/turf/closed/wall,
+/area/ruin/space/has_grav/powered/advancedlab)
+"c" = (
+/obj/structure/fans/tiny,
+/obj/machinery/door/airlock/external,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/powered/advancedlab)
+"d" = (
+/obj/machinery/vending/assist,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/powered/advancedlab)
+"e" = (
+/obj/machinery/vending/snack/random,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/powered/advancedlab)
+"f" = (
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/powered/advancedlab)
+"g" = (
+/obj/machinery/light{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/powered/advancedlab)
+"h" = (
+/obj/structure/table/glass,
+/obj/item/crowbar/advanced,
+/obj/item/multitool/advanced{
+ pixel_x = 4;
+ pixel_y = -1
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/powered/advancedlab)
+"i" = (
+/obj/machinery/computer/rdconsole,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/powered/advancedlab)
+"j" = (
+/obj/structure/chair/comfy/beige,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/powered/advancedlab)
+"k" = (
+/obj/structure/table/glass,
+/obj/item/screwdriver/advanced{
+ pixel_y = 8
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/powered/advancedlab)
+"l" = (
+/obj/structure/table/glass,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/powered/advancedlab)
+"m" = (
+/obj/structure/table/glass,
+/obj/item/gps{
+ gpstag = "Abductor Replication Lab";
+ pixel_x = -2;
+ pixel_y = 3
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/powered/advancedlab)
+"n" = (
+/obj/structure/chair/comfy/beige{
+ icon_state = "comfychair";
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/powered/advancedlab)
+"o" = (
+/obj/structure/table/glass,
+/obj/item/weldingtool/advanced{
+ pixel_x = 4;
+ pixel_y = 4
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/powered/advancedlab)
+"p" = (
+/obj/machinery/light{
+ dir = 1
+ },
+/obj/structure/table/glass,
+/obj/item/paper{
+ name = "Note to finder";
+ pixel_x = -1;
+ pixel_y = 3;
+ info = "As of yet, our experiments have seen a fair bit of success. Unfortunately, our business partners have stopped funding us as they realised they utterly hate each other. To whoever finds this place, they are yours. Use them how you will. I leave you with the next generation of greytiding."
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/powered/advancedlab)
+"q" = (
+/obj/machinery/light{
+ dir = 8
+ },
+/obj/structure/table/glass,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/powered/advancedlab)
+"r" = (
+/obj/structure/table/glass,
+/obj/item/wirecutters/advanced{
+ pixel_y = 7
+ },
+/obj/item/wrench/advanced{
+ pixel_x = -1;
+ pixel_y = 3
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/powered/advancedlab)
+"s" = (
+/obj/structure/chair/comfy/beige{
+ icon_state = "comfychair";
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/powered/advancedlab)
+"t" = (
+/obj/machinery/light/small,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/powered/advancedlab)
+"u" = (
+/obj/machinery/light/small{
+ icon_state = "bulb";
+ dir = 4
+ },
+/obj/structure/closet,
+/obj/item/clothing/suit/hooded/wintercoat/miner,
+/obj/item/clothing/shoes/sneakers/brown,
+/obj/item/clothing/under/pants/classicjeans,
+/obj/item/clothing/neck/scarf,
+/obj/item/clothing/neck/stripedgreenscarf,
+/obj/item/toy/tennis/rainbow,
+/obj/item/toy/tennis,
+/obj/item/clothing/suit/hooded/wintercoat/miner,
+/obj/item/clothing/shoes/sneakers/brown,
+/obj/item/clothing/under/pants/classicjeans,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/powered/advancedlab)
+"v" = (
+/obj/machinery/vending/boozeomat{
+ req_access = null;
+ shut_up = 1
+ },
+/turf/closed/wall,
+/area/ruin/space/has_grav/powered/advancedlab)
+"w" = (
+/obj/machinery/door/airlock/command{
+ name = "Dorms"
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/powered/advancedlab)
+"x" = (
+/obj/machinery/light{
+ dir = 4
+ },
+/obj/structure/table/glass,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/powered/advancedlab)
+"y" = (
+/obj/machinery/light/small{
+ icon_state = "bulb";
+ dir = 1
+ },
+/turf/open/floor/wood,
+/area/ruin/space/has_grav/powered/advancedlab)
+"z" = (
+/obj/machinery/door/airlock/security{
+ name = "Visiting Business Partners"
+ },
+/turf/open/floor/wood,
+/area/ruin/space/has_grav/powered/advancedlab)
+"A" = (
+/turf/open/floor/wood,
+/area/ruin/space/has_grav/powered/advancedlab)
+"B" = (
+/obj/structure/bed,
+/obj/item/bedsheet/syndie,
+/turf/open/floor/wood,
+/area/ruin/space/has_grav/powered/advancedlab)
+"C" = (
+/obj/structure/closet{
+ name = "Clothes"
+ },
+/obj/item/clothing/head/chameleon,
+/obj/item/clothing/gloves/combat,
+/obj/item/clothing/suit/chameleon,
+/obj/item/clothing/under/chameleon,
+/obj/item/clothing/shoes/chameleon,
+/turf/open/floor/wood,
+/area/ruin/space/has_grav/powered/advancedlab)
+"D" = (
+/obj/machinery/light/small,
+/turf/open/floor/wood,
+/area/ruin/space/has_grav/powered/advancedlab)
+"E" = (
+/obj/structure/table/wood,
+/obj/item/radio/headset/chameleon,
+/turf/open/floor/wood,
+/area/ruin/space/has_grav/powered/advancedlab)
+"F" = (
+/obj/structure/falsewall,
+/turf/open/floor/wood,
+/area/ruin/space/has_grav/powered/advancedlab)
+"G" = (
+/obj/structure/table/wood,
+/turf/open/floor/wood,
+/area/ruin/space/has_grav/powered/advancedlab)
+"H" = (
+/obj/structure/table/wood,
+/obj/item/radio/headset/headset_cent/alt{
+ keyslot2 = null
+ },
+/turf/open/floor/wood,
+/area/ruin/space/has_grav/powered/advancedlab)
+"I" = (
+/obj/structure/closet{
+ name = "Official Clothing"
+ },
+/obj/item/clothing/under/rank/centcom_commander,
+/obj/item/clothing/head/centhat,
+/obj/item/clothing/gloves/combat,
+/obj/item/clothing/suit/armor/vest,
+/obj/item/clothing/shoes/sneakers/brown,
+/turf/open/floor/wood,
+/area/ruin/space/has_grav/powered/advancedlab)
+"J" = (
+/obj/machinery/door/airlock/command{
+ name = "Dorms"
+ },
+/turf/open/floor/wood,
+/area/ruin/space/has_grav/powered/advancedlab)
+"K" = (
+/obj/machinery/door/airlock/command{
+ name = "Visiting Officials"
+ },
+/turf/open/floor/wood,
+/area/ruin/space/has_grav/powered/advancedlab)
+"L" = (
+/obj/structure/bed,
+/obj/item/bedsheet/centcom,
+/turf/open/floor/wood,
+/area/ruin/space/has_grav/powered/advancedlab)
+"M" = (
+/obj/structure/lattice,
+/obj/effect/spawner/structure/window/reinforced,
+/turf/open/space/basic,
+/area/ruin/space/has_grav/powered/advancedlab)
+"N" = (
+/obj/structure/extinguisher_cabinet,
+/turf/closed/wall,
+/area/ruin/space/has_grav/powered/advancedlab)
+"O" = (
+/obj/structure/reagent_dispensers/water_cooler,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/powered/advancedlab)
+"P" = (
+/obj/structure/lattice,
+/turf/template_noop,
+/area/space/nearstation)
+"Q" = (
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/powered/advancedlab)
+"R" = (
+/obj/machinery/light/small{
+ icon_state = "bulb";
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/powered/advancedlab)
+"T" = (
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/open/floor/wood,
+/area/ruin/space/has_grav/powered/advancedlab)
+
+(1,1,1) = {"
+a
+b
+b
+b
+b
+b
+b
+b
+b
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(2,1,1) = {"
+a
+b
+d
+j
+l
+q
+s
+O
+b
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(3,1,1) = {"
+a
+b
+e
+j
+m
+l
+s
+f
+b
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(4,1,1) = {"
+a
+c
+f
+j
+l
+l
+s
+f
+M
+M
+M
+M
+M
+M
+a
+a
+a
+a
+"}
+(5,1,1) = {"
+a
+b
+f
+f
+n
+n
+f
+f
+w
+f
+Q
+f
+f
+M
+a
+a
+a
+a
+"}
+(6,1,1) = {"
+a
+b
+f
+f
+f
+f
+f
+f
+M
+M
+M
+M
+f
+M
+a
+a
+a
+a
+"}
+(7,1,1) = {"
+a
+b
+g
+f
+f
+f
+f
+f
+b
+P
+P
+M
+R
+M
+a
+a
+a
+a
+"}
+(8,1,1) = {"
+a
+N
+f
+f
+f
+f
+f
+u
+b
+P
+P
+M
+f
+M
+a
+a
+a
+a
+"}
+(9,1,1) = {"
+a
+b
+f
+f
+f
+f
+f
+b
+b
+b
+b
+M
+J
+M
+b
+a
+a
+a
+"}
+(10,1,1) = {"
+a
+b
+h
+k
+o
+r
+f
+b
+y
+A
+A
+F
+T
+A
+b
+a
+a
+a
+"}
+(11,1,1) = {"
+a
+b
+i
+f
+f
+f
+t
+b
+z
+v
+b
+b
+b
+K
+b
+a
+a
+a
+"}
+(12,1,1) = {"
+a
+b
+p
+f
+f
+f
+f
+b
+A
+C
+b
+G
+A
+A
+b
+a
+a
+a
+"}
+(13,1,1) = {"
+a
+b
+l
+l
+x
+l
+f
+b
+A
+D
+b
+H
+A
+D
+b
+a
+a
+a
+"}
+(14,1,1) = {"
+a
+b
+b
+b
+b
+b
+b
+b
+B
+E
+b
+I
+A
+L
+b
+a
+a
+a
+"}
+(15,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+b
+b
+b
+b
+b
+b
+b
+b
+a
+a
+a
+"}
diff --git a/_maps/map_files/PubbyStation/PubbyStation.dmm b/_maps/map_files/PubbyStation/PubbyStation.dmm
index e25fc7ccc1..ee97af14fc 100644
--- a/_maps/map_files/PubbyStation/PubbyStation.dmm
+++ b/_maps/map_files/PubbyStation/PubbyStation.dmm
@@ -17,6 +17,13 @@
/obj/structure/grille,
/turf/open/space,
/area/space/nearstation)
+"abD" = (
+/obj/machinery/atmospherics/components/unary/portables_connector/visible{
+ dir = 4
+ },
+/obj/machinery/portable_atmospherics/canister/nitrous_oxide,
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
"abI" = (
/obj/structure/lattice,
/turf/open/space,
@@ -14549,6 +14556,18 @@
},
/turf/open/space,
/area/solar/port)
+"aIA" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/purple{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/purple{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/aft)
"aIC" = (
/obj/machinery/door/airlock/maintenance{
req_access_txt = "12"
@@ -15277,13 +15296,6 @@
},
/turf/open/floor/plating,
/area/maintenance/department/cargo)
-"aKm" = (
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 4
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
"aKn" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -16688,6 +16700,19 @@
/turf/open/floor/plating,
/area/maintenance/disposal)
"aNV" = (
+/obj/machinery/mineral/stacking_unit_console{
+ dir = 2;
+ machinedir = 8;
+ pixel_x = -32;
+ pixel_y = 32
+ },
+/obj/machinery/conveyor{
+ dir = 4;
+ id = "garbagestacked"
+ },
+/turf/open/floor/plating,
+/area/maintenance/disposal)
+"aNW" = (
/obj/machinery/conveyor{
dir = 4;
id = "garbagestacked"
@@ -24173,6 +24198,17 @@
/obj/item/caution,
/turf/open/floor/plating,
/area/maintenance/department/cargo)
+"beT" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/door/airlock/public/glass{
+ name = "Monastery Transit"
+ },
+/turf/open/floor/plasteel/white{
+ heat_capacity = 1e+006
+ },
+/area/chapel/dock)
"beU" = (
/obj/structure/lattice/catwalk,
/obj/structure/cable{
@@ -29405,6 +29441,13 @@
dir = 1
},
/obj/effect/landmark/start/chemist,
+/obj/machinery/button/door{
+ id = "chemistry_shutters";
+ name = "Shutters Control";
+ pixel_x = 26;
+ pixel_y = 4;
+ req_access_txt = "5; 33"
+ },
/obj/effect/turf_decal/tile/yellow{
dir = 1
},
@@ -29446,6 +29489,15 @@
},
/turf/open/floor/plasteel/white,
/area/medical/chemistry)
+"brp" = (
+/obj/item/twohanded/required/kirbyplants{
+ icon_state = "plant-03"
+ },
+/obj/structure/extinguisher_cabinet{
+ pixel_x = -24
+ },
+/turf/open/floor/plasteel/dark,
+/area/science/lab)
"brq" = (
/obj/structure/sink/kitchen{
desc = "A sink used for washing one's hands and face. It looks rusty and home-made";
@@ -31928,27 +31980,13 @@
/turf/open/floor/plasteel/white,
/area/medical/chemistry)
"bwW" = (
-/obj/structure/rack,
-/obj/item/stack/packageWrap,
-/obj/item/hand_labeler,
-/obj/item/clothing/glasses/science,
-/obj/item/clothing/glasses/science,
-/obj/effect/turf_decal/tile/yellow,
-/obj/effect/turf_decal/tile/yellow{
- dir = 4
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "chemistry_shutters";
+ name = "chemistry shutters"
},
-/obj/effect/turf_decal/tile/yellow{
- dir = 8
- },
-/turf/open/floor/plasteel/white,
+/obj/effect/spawner/structure/window/reinforced,
+/turf/open/floor/plating,
/area/medical/chemistry)
-"bxa" = (
-/obj/structure/table/glass,
-/obj/item/book/manual/wiki/research_and_development,
-/obj/item/disk/tech_disk,
-/obj/item/disk/design_disk,
-/turf/open/floor/plasteel/dark,
-/area/science/lab)
"bxc" = (
/obj/structure/disposalpipe/segment{
dir = 6
@@ -32457,17 +32495,19 @@
/turf/open/floor/plasteel,
/area/science/xenobiology)
"bxY" = (
-/obj/structure/closet/emcloset,
/obj/machinery/light/small{
dir = 1
},
-/turf/open/floor/plasteel/dark,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/turf/open/floor/plasteel/white,
/area/hallway/secondary/entry)
"bxZ" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 1
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 4
},
-/turf/open/floor/plasteel/dark,
+/turf/open/floor/plasteel/white,
/area/hallway/secondary/entry)
"bya" = (
/obj/structure/extinguisher_cabinet{
@@ -32476,7 +32516,7 @@
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 1
},
-/turf/open/floor/plasteel/dark,
+/turf/open/floor/plasteel/white,
/area/hallway/secondary/entry)
"byb" = (
/obj/structure/table,
@@ -33190,17 +33230,14 @@
/area/space/nearstation)
"bzz" = (
/obj/effect/turf_decal/stripes/line,
-/obj/structure/chair{
- dir = 4
- },
-/obj/structure/sign/departments/holy{
- pixel_x = -32
- },
-/turf/open/floor/plasteel/dark,
+/turf/open/floor/plasteel/white,
/area/hallway/secondary/entry)
"bzA" = (
/obj/effect/turf_decal/stripes/line,
-/turf/open/floor/plasteel/dark,
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 1
+ },
+/turf/open/floor/plasteel/white,
/area/hallway/secondary/entry)
"bzB" = (
/obj/effect/turf_decal/stripes/line,
@@ -33211,7 +33248,7 @@
network = list("monastery");
pixel_x = 28
},
-/turf/open/floor/plasteel/dark,
+/turf/open/floor/plasteel/white,
/area/hallway/secondary/entry)
"bzC" = (
/obj/structure/table,
@@ -33744,8 +33781,9 @@
/obj/structure/transit_tube/curved/flipped{
dir = 4
},
-/turf/open/space/basic,
-/area/space/nearstation)
+/obj/effect/spawner/structure/window/reinforced,
+/turf/open/floor/plating,
+/area/hallway/secondary/entry)
"bAJ" = (
/obj/structure/transit_tube/horizontal,
/obj/structure/window/reinforced/fulltile,
@@ -37156,6 +37194,7 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
+/obj/machinery/door/firedoor,
/obj/effect/turf_decal/tile/purple{
dir = 1
},
@@ -37280,19 +37319,6 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/aft)
-"bHp" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/machinery/door/firedoor,
-/obj/effect/turf_decal/tile/purple{
- dir = 1
- },
-/obj/effect/turf_decal/tile/purple{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/hallway/primary/aft)
"bHq" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
@@ -37482,6 +37508,7 @@
dir = 8;
layer = 2.9
},
+/obj/structure/lattice,
/turf/open/space/basic,
/area/space/nearstation)
"bHP" = (
@@ -38063,14 +38090,6 @@
},
/turf/open/floor/plasteel/dark,
/area/chapel/dock)
-"bIY" = (
-/obj/structure/lattice,
-/obj/structure/window/reinforced{
- dir = 8;
- layer = 2.9
- },
-/turf/open/space/basic,
-/area/space/nearstation)
"bIZ" = (
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
@@ -38626,15 +38645,15 @@
/area/chapel/dock)
"bKe" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on,
-/turf/open/floor/plasteel/dark,
+/obj/structure/closet/emcloset,
+/turf/open/floor/plasteel/white{
+ heat_capacity = 1e+006
+ },
/area/chapel/dock)
"bKf" = (
-/obj/structure/chair,
-/turf/open/floor/plasteel/dark,
-/area/chapel/dock)
-"bKg" = (
-/obj/structure/closet/emcloset,
-/turf/open/floor/plasteel/dark,
+/turf/open/floor/plasteel/white{
+ heat_capacity = 1e+006
+ },
/area/chapel/dock)
"bKh" = (
/obj/machinery/door/window/eastright{
@@ -39148,19 +39167,11 @@
/turf/open/floor/plasteel/dark,
/area/chapel/dock)
"bLr" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 9
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
+/turf/open/floor/plasteel/white{
+ heat_capacity = 1e+006
},
-/turf/open/floor/plasteel/dark,
/area/chapel/dock)
-"bLs" = (
-/obj/structure/lattice,
-/obj/structure/window/reinforced{
- dir = 8;
- layer = 2.9
- },
-/turf/open/space,
-/area/space/nearstation)
"bLt" = (
/obj/effect/decal/cleanable/oil{
icon_state = "floor6"
@@ -39651,7 +39662,9 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
-/turf/open/floor/plasteel/dark,
+/turf/open/floor/plasteel/white{
+ heat_capacity = 1e+006
+ },
/area/chapel/dock)
"bMx" = (
/obj/effect/turf_decal/stripes/line,
@@ -39661,16 +39674,13 @@
/obj/machinery/light/small{
dir = 4
},
-/turf/open/floor/plasteel/dark,
-/area/chapel/dock)
-"bMy" = (
-/obj/structure/window/reinforced{
- dir = 8;
- layer = 2.9
+/obj/structure/chair{
+ dir = 1
},
-/obj/structure/lattice,
-/turf/open/space,
-/area/space/nearstation)
+/turf/open/floor/plasteel/white{
+ heat_capacity = 1e+006
+ },
+/area/chapel/dock)
"bMA" = (
/obj/effect/landmark/event_spawn,
/turf/open/floor/engine,
@@ -40522,19 +40532,6 @@
},
/turf/open/floor/plasteel/dark,
/area/chapel/dock)
-"bOy" = (
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/plasteel/dark,
-/area/chapel/dock)
"bOz" = (
/obj/structure/chair/comfy/black{
dir = 1
@@ -42245,12 +42242,6 @@
/obj/structure/flora/ausbushes,
/turf/open/floor/plating/asteroid,
/area/chapel/asteroid/monastery)
-"bSn" = (
-/obj/structure/window/reinforced{
- dir = 8
- },
-/turf/open/space,
-/area/space/nearstation)
"bSo" = (
/obj/machinery/disposal/bin,
/obj/structure/disposalpipe/trunk{
@@ -44063,7 +44054,8 @@
/turf/open/floor/engine/co2,
/area/engine/atmos)
"bWh" = (
-/turf/open/floor/plating/asteroid,
+/obj/effect/turf_decal/sand,
+/turf/open/floor/plasteel,
/area/chapel/office)
"bWi" = (
/obj/structure/flora/ausbushes/leafybush,
@@ -44784,12 +44776,6 @@
},
/turf/closed/wall/r_wall,
/area/engine/atmos)
-"bXI" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/plasteel/dark,
-/area/chapel/main/monastery)
"bXJ" = (
/turf/open/floor/plasteel/dark,
/area/chapel/main/monastery)
@@ -45111,6 +45097,24 @@
},
/turf/open/floor/plasteel,
/area/engine/engineering)
+"bYM" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/yellow{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/yellow{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
"bYN" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -45183,15 +45187,15 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
/obj/effect/turf_decal/tile/yellow{
dir = 1
},
/obj/effect/turf_decal/tile/yellow{
dir = 4
},
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 1
+ },
/turf/open/floor/plasteel,
/area/engine/engineering)
"bYR" = (
@@ -46454,13 +46458,6 @@
},
/turf/open/floor/plasteel/dark,
/area/chapel/main/monastery)
-"ccL" = (
-/obj/item/flashlight/lantern{
- icon_state = "lantern-on"
- },
-/obj/effect/turf_decal/sand,
-/turf/open/floor/plasteel,
-/area/chapel/asteroid/monastery)
"ccM" = (
/obj/structure/chair,
/turf/open/floor/plating/asteroid,
@@ -46693,6 +46690,7 @@
/obj/effect/turf_decal/tile/yellow{
dir = 8
},
+/obj/machinery/power/port_gen/pacman,
/turf/open/floor/plasteel,
/area/engine/engineering)
"cdK" = (
@@ -46861,6 +46859,15 @@
},
/turf/open/floor/plating/asteroid,
/area/chapel/asteroid/monastery)
+"cep" = (
+/obj/structure/sign/poster/official/random{
+ pixel_x = -32
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/aft)
"ceq" = (
/obj/machinery/power/emitter,
/turf/open/floor/plating,
@@ -47121,22 +47128,6 @@
},
/turf/open/floor/plasteel/dark,
/area/chapel/main/monastery)
-"cfp" = (
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/plasteel/dark,
-/area/chapel/main/monastery)
"cfr" = (
/obj/structure/transit_tube_pod,
/obj/structure/transit_tube/station/reverse{
@@ -47244,7 +47235,6 @@
/turf/open/floor/plating,
/area/chapel/main/monastery)
"cfL" = (
-/obj/structure/flora/ausbushes/fernybush,
/obj/machinery/camera{
c_tag = "Monastery Asteroid Starboard Aft";
dir = 1;
@@ -47253,11 +47243,6 @@
/obj/effect/turf_decal/sand,
/turf/open/floor/plasteel,
/area/chapel/asteroid/monastery)
-"cfM" = (
-/obj/structure/flora/ausbushes,
-/obj/effect/turf_decal/sand,
-/turf/open/floor/plasteel,
-/area/chapel/asteroid/monastery)
"cfN" = (
/turf/closed/mineral,
/area/chapel/asteroid/monastery)
@@ -47430,6 +47415,13 @@
},
/turf/open/floor/plating,
/area/engine/engineering)
+"cgt" = (
+/obj/effect/spawner/structure/window/plasma/reinforced,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
+ dir = 9
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
"cgu" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 4
@@ -50165,6 +50157,19 @@
},
/turf/open/floor/plasteel/dark,
/area/chapel/dock)
+"cqI" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/chapel/dock)
"cqS" = (
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
@@ -50906,6 +50911,22 @@
/obj/machinery/vending/wardrobe/chap_wardrobe,
/turf/open/floor/carpet,
/area/chapel/office)
+"cua" = (
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/chapel/main/monastery)
"cuc" = (
/obj/machinery/light,
/obj/machinery/camera{
@@ -50926,13 +50947,6 @@
},
/turf/open/floor/plasteel/dark,
/area/science/xenobiology)
-"cui" = (
-/obj/structure/lattice,
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 4
- },
-/turf/open/space,
-/area/space/nearstation)
"cuk" = (
/obj/structure/closet{
name = "beekeeping wardrobe"
@@ -51548,15 +51562,6 @@
},
/turf/open/floor/plasteel/dark,
/area/chapel/main/monastery)
-"cvM" = (
-/obj/item/twohanded/required/kirbyplants{
- icon_state = "plant-10"
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 9
- },
-/turf/open/floor/plasteel/dark,
-/area/chapel/main/monastery)
"cvR" = (
/obj/machinery/light/small{
dir = 8
@@ -51854,6 +51859,22 @@
},
/turf/open/space/basic,
/area/space/nearstation)
+"cxj" = (
+/obj/structure/table,
+/obj/item/clothing/glasses/meson/engine,
+/obj/item/clothing/glasses/meson/engine,
+/obj/item/clothing/glasses/meson/engine,
+/obj/item/pipe_dispenser,
+/obj/item/pipe_dispenser,
+/obj/item/pipe_dispenser,
+/obj/machinery/light,
+/obj/effect/turf_decal/delivery,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
"cxk" = (
/obj/structure/window/reinforced{
dir = 1;
@@ -52081,13 +52102,6 @@
},
/turf/open/floor/plasteel/dark,
/area/library/lounge)
-"cyp" = (
-/obj/machinery/conveyor{
- dir = 8;
- id = "garbage"
- },
-/turf/open/floor/plating,
-/area/maintenance/disposal)
"cyy" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 5
@@ -52406,6 +52420,12 @@
},
/turf/open/floor/plasteel/dark,
/area/library)
+"cAp" = (
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 6
+ },
+/turf/open/floor/plasteel,
+/area/engine/atmos)
"cAr" = (
/obj/machinery/light/small{
dir = 8
@@ -52557,15 +52577,6 @@
},
/turf/open/floor/plasteel/dark,
/area/library)
-"cAQ" = (
-/obj/structure/cable{
- icon_state = "1-8"
- },
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
"cAS" = (
/obj/machinery/vending/wardrobe/curator_wardrobe,
/turf/open/floor/plasteel/dark,
@@ -52881,23 +52892,6 @@
},
/turf/open/floor/plasteel,
/area/science/explab)
-"cKV" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
-/obj/machinery/airalarm{
- dir = 4;
- pixel_x = -23
- },
-/obj/effect/turf_decal/tile/blue{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/hallway/primary/aft)
-"cLw" = (
-/obj/structure/cable{
- icon_state = "1-8"
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
"cOp" = (
/obj/item/clothing/mask/gas,
/obj/item/clothing/mask/gas,
@@ -52907,6 +52901,13 @@
/obj/structure/table,
/turf/open/floor/plasteel,
/area/science/xenobiology)
+"cOA" = (
+/obj/effect/spawner/structure/window/plasma/reinforced,
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
"cPy" = (
/obj/machinery/atmospherics/components/binary/pump{
dir = 2
@@ -52941,6 +52942,14 @@
},
/turf/open/floor/plasteel/white,
/area/science/xenobiology)
+"cQZ" = (
+/obj/machinery/door/airlock/maintenance,
+/turf/open/floor/plating,
+/area/maintenance/department/engine)
+"cRJ" = (
+/obj/machinery/status_display/supply,
+/turf/closed/wall,
+/area/quartermaster/warehouse)
"cSJ" = (
/obj/item/reagent_containers/glass/beaker/cryoxadone{
pixel_x = -2;
@@ -52996,6 +53005,15 @@
},
/turf/open/floor/plasteel/dark,
/area/science/lab)
+"cUT" = (
+/obj/machinery/atmospherics/pipe/simple/green/visible{
+ dir = 9
+ },
+/obj/effect/turf_decal/stripes/corner{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
"cXW" = (
/obj/structure/grille,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
@@ -53048,13 +53066,6 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/aft)
-"dgj" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 6
- },
-/obj/machinery/meter,
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
"dgz" = (
/obj/effect/turf_decal/stripes/line{
dir = 4
@@ -53076,6 +53087,13 @@
},
/turf/open/floor/plating,
/area/maintenance/department/security/brig)
+"dhu" = (
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
+ dir = 6
+ },
+/obj/structure/lattice/catwalk,
+/turf/open/space/basic,
+/area/space/nearstation)
"dhz" = (
/obj/structure/disposalpipe/segment,
/obj/structure/cable{
@@ -53120,6 +53138,12 @@
},
/turf/open/floor/plasteel/dark,
/area/science/explab)
+"dlI" = (
+/obj/structure/cable/yellow{
+ icon_state = "2-4"
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
"dmP" = (
/obj/structure/chair{
dir = 8
@@ -53191,10 +53215,6 @@
},
/turf/open/floor/plasteel/dark,
/area/chapel/office)
-"dps" = (
-/obj/machinery/status_display/ai,
-/turf/closed/wall,
-/area/quartermaster/qm)
"dqw" = (
/obj/machinery/door/airlock/maintenance{
req_access_txt = "0";
@@ -53230,13 +53250,6 @@
/obj/machinery/reagentgrinder,
/turf/open/floor/plating,
/area/maintenance/department/cargo)
-"dsz" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 5
- },
-/obj/structure/lattice/catwalk,
-/turf/open/space/basic,
-/area/space/nearstation)
"dtm" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -53302,6 +53315,24 @@
/obj/item/stack/sheet/mineral/wood,
/turf/open/floor/plating,
/area/maintenance/department/engine)
+"dzA" = (
+/obj/effect/spawner/lootdrop/maintenance,
+/obj/structure/rack,
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/open/floor/plating{
+ icon_state = "panelscorched"
+ },
+/area/maintenance/department/chapel/monastery)
+"dAa" = (
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple,
+/obj/structure/lattice/catwalk,
+/turf/open/space/basic,
+/area/space/nearstation)
"dAF" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/sign/warning/vacuum/external,
@@ -53316,54 +53347,30 @@
icon_state = "platingdmg1"
},
/area/maintenance/department/engine)
-"dEy" = (
-/obj/machinery/airalarm{
- dir = 1;
- pixel_y = -22
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"dFJ" = (
-/turf/open/floor/engine,
+"dFF" = (
+/turf/closed/wall/r_wall,
/area/engine/supermatter)
-"dHr" = (
+"dGd" = (
/obj/machinery/atmospherics/pipe/manifold/cyan/visible,
-/obj/machinery/button/door{
- id = "engsm";
- name = "Radiation Shutters Control";
- pixel_y = 24;
- req_access_txt = "10"
- },
+/obj/machinery/meter,
/obj/effect/turf_decal/stripes/line{
dir = 1
},
/turf/open/floor/engine,
/area/engine/engineering)
-"dHZ" = (
-/obj/structure/chair/office/light{
- dir = 1
- },
-/obj/effect/landmark/start/chemist,
-/obj/machinery/button/door{
- id = "chemistry_shutters";
- name = "Shutters Control";
- pixel_x = 26;
- pixel_y = 4;
- req_access_txt = "5; 33"
- },
-/obj/effect/turf_decal/tile/yellow{
- dir = 1
- },
-/obj/effect/turf_decal/tile/yellow{
+"dGp" = (
+/obj/machinery/atmospherics/pipe/heat_exchanging/junction{
dir = 4
},
-/turf/open/floor/plasteel/white,
-/area/medical/chemistry)
-"dJk" = (
-/obj/effect/spawner/structure/window/reinforced,
-/obj/machinery/atmospherics/pipe/simple/orange/visible,
-/turf/open/floor/plating,
-/area/engine/atmos)
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"dHF" = (
+/obj/machinery/atmospherics/pipe/manifold/cyan/visible,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
"dJm" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -53423,12 +53430,18 @@
/obj/machinery/shieldwallgen/xenobiologyaccess,
/turf/open/floor/plating,
/area/maintenance/department/engine)
-"dSp" = (
-/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/engine_waste{
- dir = 1
+"dPZ" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
},
-/turf/open/floor/plating/airless,
+/turf/open/floor/plasteel,
/area/engine/engineering)
+"dRs" = (
+/obj/structure/lattice,
+/obj/structure/grille,
+/turf/open/space/basic,
+/area/space)
"dSr" = (
/obj/item/chair,
/turf/open/floor/wood,
@@ -53439,6 +53452,25 @@
},
/turf/open/floor/plasteel,
/area/hallway/secondary/exit/departure_lounge)
+"dUk" = (
+/obj/machinery/cryopod{
+ dir = 1
+ },
+/turf/open/floor/plasteel/dark,
+/area/security/prison)
+"dVt" = (
+/obj/structure/chair/office/light{
+ dir = 1
+ },
+/obj/effect/landmark/start/chemist,
+/obj/effect/turf_decal/tile/yellow{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/yellow{
+ dir = 4
+ },
+/turf/open/floor/plasteel/white,
+/area/medical/chemistry)
"dVI" = (
/obj/machinery/atmospherics/components/binary/pump{
dir = 4;
@@ -53505,10 +53537,6 @@
/obj/structure/chair/office/light,
/turf/open/floor/plasteel/white,
/area/science/xenobiology)
-"eex" = (
-/obj/machinery/status_display/supply,
-/turf/closed/wall,
-/area/quartermaster/office)
"eeQ" = (
/obj/machinery/door/firedoor,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
@@ -53544,13 +53572,6 @@
},
/turf/open/floor/plating,
/area/maintenance/department/engine)
-"eiV" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 4
- },
-/obj/structure/lattice,
-/turf/open/space/basic,
-/area/space/nearstation)
"ekU" = (
/obj/effect/decal/cleanable/cobweb{
icon_state = "cobweb2"
@@ -53561,23 +53582,12 @@
/obj/structure/chair/office/dark,
/turf/open/floor/wood,
/area/lawoffice)
-"epj" = (
-/obj/machinery/cryopod{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/crew_quarters/dorms)
"epJ" = (
/obj/structure/sign/poster/contraband/random{
pixel_y = 32
},
/turf/open/floor/carpet,
/area/maintenance/department/crew_quarters/dorms)
-"epV" = (
-/obj/structure/chair,
-/obj/effect/turf_decal/stripes/corner,
-/turf/open/floor/plasteel,
-/area/engine/engineering)
"eqD" = (
/obj/structure/sign/poster/contraband/random{
pixel_x = -32
@@ -53587,6 +53597,20 @@
icon_state = "wood-broken"
},
/area/maintenance/department/crew_quarters/dorms)
+"eqM" = (
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
+ dir = 5
+ },
+/obj/structure/lattice/catwalk,
+/turf/open/space/basic,
+/area/space/nearstation)
+"erV" = (
+/obj/effect/turf_decal/tile/purple,
+/obj/effect/turf_decal/tile/purple{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/aft)
"eta" = (
/obj/machinery/door/airlock/engineering{
name = "Engineering Supplies";
@@ -53605,6 +53629,40 @@
},
/turf/open/floor/plasteel/dark,
/area/engine/engineering)
+"eue" = (
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"eux" = (
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
+ dir = 4
+ },
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/obj/effect/turf_decal/delivery,
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"euN" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/item/twohanded/required/kirbyplants{
+ icon_state = "plant-10"
+ },
+/turf/open/floor/plasteel/dark,
+/area/chapel/main/monastery)
"euQ" = (
/obj/structure/sign/warning/vacuum/external{
pixel_y = 32
@@ -53614,10 +53672,20 @@
},
/turf/open/floor/plating,
/area/maintenance/department/science)
-"eyj" = (
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/turf/open/floor/plating,
-/area/engine/engineering)
+"eyT" = (
+/obj/machinery/jukebox,
+/turf/open/floor/plasteel/dark,
+/area/crew_quarters/bar)
+"ezo" = (
+/obj/effect/spawner/lootdrop/maintenance{
+ lootcount = 2;
+ name = "2maintenance loot spawner"
+ },
+/obj/structure/rack,
+/turf/open/floor/plating{
+ icon_state = "panelscorched"
+ },
+/area/maintenance/department/chapel/monastery)
"ezF" = (
/obj/structure/table/wood,
/obj/item/paper_bin,
@@ -53649,23 +53717,6 @@
},
/turf/open/floor/plasteel,
/area/hallway/secondary/exit/departure_lounge)
-"eAH" = (
-/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{
- dir = 4
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 5
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"eAZ" = (
-/obj/structure/lattice,
-/obj/machinery/atmospherics/pipe/simple/green/visible,
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 4
- },
-/turf/open/space,
-/area/space/nearstation)
"eCw" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -53704,19 +53755,6 @@
},
/turf/open/floor/plasteel/white,
/area/medical/sleeper)
-"eFG" = (
-/obj/machinery/mineral/stacking_unit_console{
- dir = 2;
- machinedir = 8;
- pixel_x = -32;
- pixel_y = 32
- },
-/obj/machinery/conveyor{
- dir = 4;
- id = "garbagestacked"
- },
-/turf/open/floor/plating,
-/area/maintenance/disposal)
"eHI" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on,
/turf/open/floor/plasteel,
@@ -53741,6 +53779,17 @@
},
/turf/open/floor/plasteel/dark,
/area/hallway/secondary/exit/departure_lounge)
+"eMz" = (
+/obj/machinery/atmospherics/pipe/simple/general/visible{
+ dir = 4
+ },
+/obj/machinery/door/airlock/engineering/glass{
+ name = "Supermatter Engine";
+ req_access_txt = "10"
+ },
+/obj/machinery/door/firedoor,
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
"eMC" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 5
@@ -53760,6 +53809,15 @@
/obj/structure/lattice,
/turf/closed/wall,
/area/space/nearstation)
+"eOA" = (
+/obj/structure/window/reinforced,
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/obj/structure/lattice,
+/obj/structure/lattice,
+/turf/open/space/basic,
+/area/space/nearstation)
"eOZ" = (
/obj/structure/closet,
/obj/item/clothing/suit/judgerobe,
@@ -53767,6 +53825,19 @@
/obj/item/gavelhammer,
/turf/open/floor/plating,
/area/maintenance/department/security/brig)
+"ePS" = (
+/obj/machinery/firealarm{
+ dir = 8;
+ pixel_x = -28
+ },
+/obj/machinery/light{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/aft)
"ePU" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -53794,18 +53865,6 @@
icon_state = "platingdmg3"
},
/area/maintenance/department/security/brig)
-"eRp" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/machinery/door/firedoor,
-/turf/open/floor/plasteel,
-/area/hallway/primary/aft)
-"eSB" = (
-/obj/machinery/computer/cryopod{
- dir = 1;
- pixel_y = -26
- },
-/turf/open/floor/plasteel/dark,
-/area/security/prison)
"eSL" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/item/beacon,
@@ -53827,6 +53886,10 @@
},
/turf/open/floor/plasteel/dark,
/area/engine/engineering)
+"eVW" = (
+/obj/machinery/portable_atmospherics/canister/toxins,
+/turf/open/floor/plating,
+/area/engine/engineering)
"eWi" = (
/obj/structure/cable{
icon_state = "0-4"
@@ -53856,6 +53919,12 @@
/obj/item/stack/cable_coil/cut/random,
/turf/open/floor/plating,
/area/maintenance/department/cargo)
+"fbu" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
+ dir = 6
+ },
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
"fdQ" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -53940,12 +54009,6 @@
},
/turf/open/floor/plasteel/white,
/area/science/explab)
-"fjD" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 9
- },
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
"fkH" = (
/obj/effect/turf_decal/stripes/line{
dir = 6
@@ -53958,16 +54021,20 @@
},
/turf/open/floor/plasteel,
/area/science/explab)
+"flP" = (
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/engine/atmos)
"fmh" = (
/turf/open/floor/wood,
/area/maintenance/department/engine)
-"fmL" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/machinery/light{
- dir = 8;
- light_color = "#e8eaff"
+"fml" = (
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 9
},
-/turf/open/floor/plasteel/dark,
+/turf/closed/wall/r_wall,
/area/engine/engineering)
"fmU" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
@@ -54008,12 +54075,6 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plating,
/area/maintenance/department/engine)
-"frj" = (
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 6
- },
-/turf/closed/wall/r_wall,
-/area/engine/engineering)
"ftp" = (
/turf/open/floor/plating{
icon_state = "platingdmg1"
@@ -54063,6 +54124,10 @@
},
/turf/open/floor/plasteel,
/area/quartermaster/sorting)
+"fwo" = (
+/obj/machinery/door/airlock/maintenance,
+/turf/open/floor/plating,
+/area/chapel/main/monastery)
"fwr" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 8
@@ -54076,21 +54141,6 @@
},
/turf/open/floor/plating,
/area/maintenance/department/cargo)
-"fxC" = (
-/obj/machinery/atmospherics/pipe/simple/green/visible,
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
-"fym" = (
-/obj/machinery/door/airlock/engineering/glass/critical{
- heat_proof = 1;
- name = "Supermatter Chamber";
- req_access_txt = "10"
- },
-/obj/effect/mapping_helpers/airlock/cyclelink_helper{
- dir = 1
- },
-/turf/open/floor/engine,
-/area/engine/supermatter)
"fyF" = (
/obj/structure/cable/yellow{
icon_state = "0-4"
@@ -54159,12 +54209,6 @@
},
/turf/open/floor/plasteel/dark,
/area/science/mixing)
-"fBZ" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 8
- },
-/turf/open/floor/engine,
-/area/engine/supermatter)
"fFv" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/firealarm{
@@ -54173,6 +54217,14 @@
},
/turf/open/floor/plasteel/dark,
/area/engine/engineering)
+"fGt" = (
+/obj/structure/chair/stool,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/effect/landmark/start/station_engineer,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
"fIu" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -54245,19 +54297,9 @@
/obj/structure/bookcase/random/religion,
/turf/open/floor/plasteel/dark,
/area/library/lounge)
-"fZK" = (
-/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
- dir = 4
- },
-/obj/machinery/light{
- dir = 4;
- light_color = "#e8eaff"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
+"fWE" = (
/turf/open/floor/engine,
-/area/engine/engineering)
+/area/engine/supermatter)
"gam" = (
/obj/machinery/door/airlock/medical/glass{
name = "Service Door";
@@ -54270,6 +54312,18 @@
},
/turf/open/floor/plasteel,
/area/crew_quarters/kitchen)
+"gaJ" = (
+/obj/machinery/status_display/ai,
+/turf/closed/wall,
+/area/quartermaster/qm)
+"gaQ" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/effect/turf_decal/tile/yellow,
+/obj/effect/turf_decal/tile/yellow{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
"gcj" = (
/obj/machinery/vending/kink,
/obj/effect/turf_decal/tile/blue{
@@ -54317,6 +54371,13 @@
},
/turf/open/floor/plasteel,
/area/hallway/secondary/exit/departure_lounge)
+"gfh" = (
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
+ dir = 6
+ },
+/obj/structure/lattice,
+/turf/open/space/basic,
+/area/space/nearstation)
"gfi" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -54326,11 +54387,18 @@
},
/turf/open/floor/plating,
/area/maintenance/department/cargo)
-"ggg" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 6
+"gih" = (
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
+ dir = 4
},
-/turf/open/floor/plasteel/dark,
+/obj/machinery/light{
+ dir = 1;
+ light_color = "#d1dfff"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/engine,
/area/engine/engineering)
"giI" = (
/obj/machinery/light/small{
@@ -54375,6 +54443,12 @@
},
/turf/open/floor/plating,
/area/maintenance/department/security/brig)
+"gkN" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
"gkR" = (
/obj/item/twohanded/required/kirbyplants/random,
/obj/structure/extinguisher_cabinet{
@@ -54504,6 +54578,14 @@
heat_capacity = 1e+006
},
/area/hallway/secondary/exit/departure_lounge)
+"gvO" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/open/floor/plasteel/white{
+ heat_capacity = 1e+006
+ },
+/area/chapel/dock)
"gwn" = (
/obj/structure/sign/warning{
pixel_y = 32
@@ -54556,24 +54638,6 @@
/obj/item/flashlight/lamp/green,
/turf/open/floor/carpet,
/area/lawoffice)
-"gBb" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple,
-/obj/structure/lattice/catwalk,
-/turf/open/space/basic,
-/area/space/nearstation)
-"gDR" = (
-/obj/machinery/camera{
- c_tag = "Central Primary Hallway Escape";
- dir = 4
- },
-/obj/effect/turf_decal/tile/blue{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/hallway/primary/aft)
"gDZ" = (
/obj/effect/turf_decal/box/corners{
dir = 1
@@ -54593,11 +54657,6 @@
},
/turf/open/floor/plasteel/dark,
/area/science/explab)
-"gEo" = (
-/obj/machinery/atmospherics/pipe/manifold4w/general/visible,
-/obj/machinery/meter,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
"gFo" = (
/obj/structure/window/reinforced,
/obj/structure/table/glass,
@@ -54631,17 +54690,39 @@
/turf/open/floor/plating,
/area/maintenance/department/security/brig)
"gGA" = (
-/obj/structure/table/glass,
-/obj/machinery/reagentgrinder,
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/effect/turf_decal/tile/yellow,
-/obj/effect/turf_decal/tile/yellow{
- dir = 4
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "chemistry_shutters";
+ name = "chemistry shutters"
},
-/turf/open/floor/plasteel/white,
+/obj/effect/spawner/structure/window/reinforced,
+/turf/open/floor/plating,
/area/medical/chemistry)
+"gHp" = (
+/obj/machinery/atmospherics/pipe/manifold/orange/visible{
+ dir = 8
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/machinery/light{
+ dir = 8;
+ light_color = "#e8eaff"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"gHy" = (
+/obj/machinery/computer/cryopod{
+ dir = 1;
+ pixel_y = -26
+ },
+/turf/open/floor/plasteel/dark,
+/area/security/prison)
"gHZ" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/cable{
@@ -54692,6 +54773,13 @@
/obj/effect/spawner/lootdrop/maintenance,
/turf/open/floor/plating,
/area/maintenance/department/security/brig)
+"gLn" = (
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/obj/structure/lattice,
+/turf/open/space/basic,
+/area/space/nearstation)
"gLF" = (
/obj/machinery/vending/snack/random,
/obj/effect/turf_decal/tile/neutral{
@@ -54743,12 +54831,6 @@
},
/turf/open/floor/wood,
/area/lawoffice)
-"gQf" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 10
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"gSH" = (
/turf/closed/wall,
/area/lawoffice)
@@ -54766,6 +54848,21 @@
},
/turf/open/floor/plating,
/area/maintenance/department/cargo)
+"gUS" = (
+/obj/machinery/atmospherics/pipe/manifold/cyan/visible,
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/obj/machinery/camera{
+ c_tag = "Engineering Supermatter Fore";
+ dir = 1;
+ network = list("ss13","engine")
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
"gVc" = (
/turf/open/floor/wood{
icon_state = "wood-broken4"
@@ -54778,31 +54875,10 @@
},
/turf/open/floor/plating,
/area/maintenance/department/science)
-"gXZ" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/machinery/camera{
- c_tag = "Engineering Supermatter Fore";
- dir = 4;
- network = list("ss13","engine")
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
"gYo" = (
/obj/structure/grille,
/turf/open/space/basic,
/area/space/nearstation)
-"haA" = (
-/obj/structure/table,
-/obj/item/stack/sheet/metal/fifty,
-/obj/item/stack/rods/fifty,
-/obj/item/clothing/glasses/welding,
-/obj/effect/turf_decal/tile/yellow,
-/obj/effect/turf_decal/tile/yellow{
- dir = 8
- },
-/obj/effect/turf_decal/stripes/line,
-/turf/open/floor/plasteel,
-/area/engine/engineering)
"heC" = (
/obj/machinery/power/apc/highcap/five_k{
dir = 8;
@@ -54849,24 +54925,6 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/aft)
-"hjk" = (
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/orange/visible,
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"hjD" = (
-/obj/structure/cable/yellow{
- icon_state = "1-2"
- },
-/obj/effect/turf_decal/tile/yellow,
-/obj/effect/turf_decal/tile/yellow{
- dir = 8
- },
-/obj/effect/turf_decal/stripes/line,
-/turf/open/floor/plasteel,
-/area/engine/engineering)
"hkQ" = (
/obj/machinery/light{
dir = 4
@@ -54889,26 +54947,6 @@
},
/turf/open/floor/wood,
/area/lawoffice)
-"hon" = (
-/obj/machinery/atmospherics/components/binary/pump/on{
- dir = 4;
- name = "Gas to Filter"
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"hoS" = (
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 6
- },
-/obj/structure/cable/yellow{
- icon_state = "1-2"
- },
-/obj/structure/cable/yellow{
- icon_state = "1-4"
- },
-/obj/effect/turf_decal/stripes/corner,
-/turf/open/floor/engine,
-/area/engine/engineering)
"hqo" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
@@ -54924,6 +54962,13 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/central)
+"hrx" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
"hvW" = (
/obj/machinery/door/poddoor/preopen{
id = "xenobio4";
@@ -54959,18 +55004,18 @@
/obj/machinery/portable_atmospherics/canister/toxins,
/turf/open/floor/plating,
/area/security/execution/transfer)
+"hxh" = (
+/obj/machinery/airalarm{
+ dir = 1;
+ pixel_y = -22
+ },
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
"hxn" = (
/obj/structure/chair,
/obj/item/clothing/glasses/regular,
/turf/open/floor/plating,
/area/maintenance/department/science)
-"hyh" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 9
- },
-/obj/structure/lattice/catwalk,
-/turf/open/space/basic,
-/area/space/nearstation)
"hzc" = (
/obj/effect/turf_decal/stripes/line{
dir = 1
@@ -55000,6 +55045,21 @@
},
/turf/open/floor/plating,
/area/maintenance/solars/port)
+"hCg" = (
+/obj/machinery/conveyor{
+ dir = 8;
+ id = "garbage"
+ },
+/turf/open/floor/plating,
+/area/maintenance/disposal)
+"hDy" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/machinery/holopad,
+/obj/effect/turf_decal/bot,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
"hDG" = (
/obj/machinery/door/airlock/engineering{
name = "Auxillary Base Construction";
@@ -55032,43 +55092,20 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/central)
-"hGB" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 1
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"hHr" = (
/obj/structure/chair/comfy/black{
dir = 4
},
/turf/open/floor/plating,
/area/maintenance/department/security/brig)
-"hIZ" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 1
- },
-/obj/effect/turf_decal/tile/blue{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/hallway/primary/aft)
-"hKp" = (
-/obj/structure/cable/yellow{
- icon_state = "0-8"
- },
-/obj/machinery/atmospherics/pipe/manifold/general/visible{
- dir = 8
- },
-/obj/structure/window/plasma/reinforced{
+"hJO" = (
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
dir = 4
},
-/obj/machinery/power/rad_collector/anchored,
-/turf/open/floor/engine,
-/area/engine/supermatter)
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple,
+/obj/structure/lattice,
+/turf/open/space/basic,
+/area/space/nearstation)
"hOx" = (
/obj/structure/cable{
icon_state = "2-4"
@@ -55106,17 +55143,6 @@
icon_state = "platingdmg3"
},
/area/maintenance/department/science)
-"hQy" = (
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/obj/machinery/door/poddoor/shutters/preopen{
- id = "engsm";
- name = "Radiation Chamber Shutters"
- },
-/obj/item/tank/internals/plasma,
-/turf/open/floor/plating,
-/area/engine/supermatter)
"hQz" = (
/obj/structure/closet/emcloset/anchored,
/obj/structure/cable/yellow{
@@ -55128,29 +55154,14 @@
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/engine,
/area/engine/engineering)
-"hSt" = (
-/obj/machinery/atmospherics/components/binary/pump/on{
- dir = 4;
- name = "Gas to Cooling Loop"
+"hRQ" = (
+/obj/structure/window/reinforced{
+ dir = 8;
+ layer = 2.9
},
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"hSC" = (
-/obj/machinery/atmospherics/pipe/simple/cyan/visible,
-/obj/structure/cable/yellow{
- icon_state = "1-2"
- },
-/obj/structure/cable/yellow{
- icon_state = "1-4"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
+/obj/structure/lattice,
+/turf/open/space,
+/area/space/nearstation)
"hSM" = (
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 8
@@ -55175,18 +55186,23 @@
},
/turf/open/floor/plating,
/area/maintenance/department/science)
+"hUf" = (
+/obj/machinery/atmospherics/pipe/simple/general/visible{
+ dir = 9
+ },
+/turf/closed/wall/r_wall,
+/area/engine/supermatter)
+"hUi" = (
+/obj/machinery/atmospherics/pipe/manifold4w/general/visible,
+/obj/machinery/meter,
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
"hUt" = (
/obj/structure/closet/crate{
icon_state = "crateopen"
},
/turf/open/floor/plating,
/area/maintenance/department/cargo)
-"hUw" = (
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 9
- },
-/turf/closed/wall/r_wall,
-/area/engine/engineering)
"hUJ" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -55202,17 +55218,25 @@
},
/turf/open/floor/plating,
/area/maintenance/department/engine)
+"hWa" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 1
+ },
+/turf/open/floor/plasteel/white,
+/area/hallway/secondary/entry)
+"hXm" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 1
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
"hXt" = (
/obj/structure/girder,
/turf/open/floor/plating,
/area/maintenance/department/science)
-"hXK" = (
-/obj/structure/chair/office/dark{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/open/floor/plasteel,
-/area/engine/engineering)
"hYe" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/effect/turf_decal/tile/red{
@@ -55254,20 +55278,15 @@
},
/turf/open/floor/plasteel/dark,
/area/hallway/secondary/exit/departure_lounge)
+"iaZ" = (
+/turf/open/space/basic,
+/area/hallway/secondary/entry)
"ick" = (
/obj/structure/cable{
icon_state = "4-8"
},
/turf/open/floor/plasteel/dark,
/area/library)
-"iej" = (
-/obj/machinery/atmospherics/pipe/manifold/cyan/visible,
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/obj/effect/turf_decal/stripes/line,
-/turf/open/floor/engine,
-/area/engine/engineering)
"igE" = (
/obj/structure/table/reinforced,
/obj/machinery/button/door{
@@ -55316,30 +55335,24 @@
icon_state = "platingdmg3"
},
/area/maintenance/department/science)
+"ikm" = (
+/obj/machinery/atmospherics/components/binary/pump{
+ dir = 4;
+ name = "Mix to Gas"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
"ikB" = (
/obj/structure/closet/secure_closet/medical2,
/turf/open/floor/plating,
/area/maintenance/department/science)
-"ikO" = (
-/obj/machinery/atmospherics/pipe/simple/green/visible{
- dir = 9
- },
-/obj/effect/turf_decal/stripes/corner{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"ilD" = (
/obj/machinery/processor/slime,
/turf/open/floor/plasteel/white,
/area/science/xenobiology)
-"imE" = (
-/obj/effect/turf_decal/tile/purple,
-/obj/effect/turf_decal/tile/purple{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/hallway/primary/aft)
"ioj" = (
/obj/effect/turf_decal/stripes/line{
dir = 10
@@ -55356,40 +55369,13 @@
},
/turf/open/floor/plasteel/white,
/area/medical/sleeper)
-"iop" = (
-/obj/machinery/atmospherics/pipe/manifold/orange/visible{
- dir = 8
- },
-/obj/structure/cable/yellow{
- icon_state = "1-2"
- },
-/obj/machinery/light{
- dir = 8;
- light_color = "#e8eaff"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"ioF" = (
-/obj/structure/closet/secure_closet/engineering_electrical,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/effect/turf_decal/stripes/corner{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/engine/engineering)
"iqc" = (
/turf/open/floor/plasteel/stairs/right,
/area/maintenance/department/crew_quarters/dorms)
-"irM" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/engine/engineering)
+"irs" = (
+/obj/structure/lattice,
+/turf/open/space/basic,
+/area/space)
"itl" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -55422,13 +55408,6 @@
},
/turf/open/floor/plasteel/dark,
/area/science/xenobiology)
-"iwe" = (
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
-/obj/effect/turf_decal/tile/blue{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/hallway/primary/aft)
"iyg" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -55445,11 +55424,6 @@
},
/turf/open/floor/plasteel/dark,
/area/engine/engineering)
-"izm" = (
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/turf/open/floor/plating,
-/area/engine/engineering)
"izB" = (
/obj/machinery/door/airlock/external{
name = "Escape Pod"
@@ -55532,6 +55506,20 @@
},
/turf/open/floor/plasteel/white,
/area/storage/emergency/port)
+"iHe" = (
+/obj/machinery/camera{
+ c_tag = "Central Primary Hallway Escape";
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/aft)
+"iHI" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plasteel/white,
+/area/hallway/secondary/entry)
"iJi" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 5
@@ -55545,13 +55533,6 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/quartermaster/sorting)
-"iLh" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 9
- },
-/obj/effect/turf_decal/delivery,
-/turf/open/floor/engine,
-/area/engine/engineering)
"iLl" = (
/obj/machinery/disposal/bin,
/obj/structure/disposalpipe/trunk{
@@ -55613,6 +55594,22 @@
},
/turf/open/floor/plating,
/area/security/execution/transfer)
+"iSi" = (
+/obj/machinery/atmospherics/components/binary/pump{
+ dir = 1;
+ name = "Cooling Loop Bypass"
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-8"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
"iSz" = (
/obj/structure/cable{
icon_state = "2-8"
@@ -55625,9 +55622,14 @@
},
/turf/open/floor/plating,
/area/maintenance/department/security/brig)
-"iTF" = (
-/obj/structure/sign/warning/electricshock,
-/turf/closed/wall/r_wall,
+"iSL" = (
+/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/atmospherics/pipe/simple/orange/visible,
+/turf/open/floor/plating,
+/area/engine/atmos)
+"iTE" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/engine,
/area/engine/supermatter)
"iVJ" = (
/obj/effect/spawner/lootdrop/organ_spawner,
@@ -55694,6 +55696,16 @@
icon_state = "platingdmg3"
},
/area/maintenance/department/crew_quarters/dorms)
+"jjA" = (
+/obj/machinery/atmospherics/components/binary/pump/on{
+ dir = 4;
+ name = "Gas to Cooling Loop"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
"jjC" = (
/obj/structure/rack,
/obj/item/storage/briefcase{
@@ -55706,6 +55718,18 @@
},
/turf/open/floor/wood,
/area/lawoffice)
+"jkm" = (
+/obj/structure/closet/emcloset,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 6
+ },
+/turf/open/floor/plasteel/white,
+/area/hallway/secondary/entry)
+"jrb" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/machinery/door/firedoor,
+/turf/open/floor/plasteel,
+/area/hallway/primary/aft)
"jrG" = (
/obj/effect/turf_decal/stripes/corner{
dir = 1
@@ -55761,6 +55785,17 @@
},
/turf/open/floor/plasteel/dark,
/area/science/xenobiology)
+"jtv" = (
+/obj/machinery/camera{
+ c_tag = "Engineering Supermatter Starboard";
+ dir = 8;
+ network = list("ss13","engine")
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
"jvi" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -55806,17 +55841,6 @@
/obj/structure/sign/warning/vacuum/external,
/turf/open/floor/plating,
/area/hallway/secondary/entry)
-"jzE" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 4
- },
-/obj/machinery/door/airlock/engineering/glass{
- name = "Supermatter Engine";
- req_access_txt = "10"
- },
-/obj/machinery/door/firedoor,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
"jAy" = (
/obj/effect/turf_decal/stripes/line{
dir = 1
@@ -55895,15 +55919,39 @@
/obj/machinery/atmospherics/pipe/simple/purple/visible,
/turf/closed/wall/r_wall,
/area/maintenance/disposal/incinerator)
+"jOw" = (
+/obj/structure/closet/secure_closet/engineering_electrical,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/effect/turf_decal/stripes/corner{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
"jOB" = (
/turf/open/floor/plating,
/area/storage/emergency/starboard)
+"jOX" = (
+/obj/machinery/door/airlock/public/glass{
+ name = "Monastery Transit"
+ },
+/turf/open/floor/plasteel/white{
+ heat_capacity = 1e+006
+ },
+/area/chapel/dock)
"jPf" = (
/obj/structure/closet,
/obj/effect/spawner/lootdrop/maintenance,
/obj/item/kitchen/knife,
/turf/open/floor/plasteel,
/area/maintenance/department/engine)
+"jPC" = (
+/obj/structure/lattice,
+/obj/machinery/atmospherics/pipe/simple/green/visible,
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 4
+ },
+/turf/open/space,
+/area/space/nearstation)
"jQh" = (
/obj/item/stack/sheet/animalhide/xeno,
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
@@ -55913,6 +55961,15 @@
icon_state = "platingdmg1"
},
/area/maintenance/department/science)
+"jQn" = (
+/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
"jRG" = (
/obj/structure/disposalpipe/segment{
dir = 5
@@ -55923,6 +55980,13 @@
},
/turf/open/floor/plating,
/area/maintenance/department/science)
+"jTc" = (
+/obj/machinery/atmospherics/components/binary/pump/on{
+ dir = 4;
+ name = "Gas to Filter"
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
"jTh" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -55944,16 +56008,6 @@
},
/turf/open/floor/carpet,
/area/lawoffice)
-"jTU" = (
-/obj/machinery/atmospherics/pipe/simple/cyan/visible,
-/obj/structure/cable/yellow{
- icon_state = "1-4"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"jUV" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -55974,12 +56028,6 @@
/obj/item/stack/ore/iron,
/turf/open/floor/plating,
/area/maintenance/department/science)
-"jXF" = (
-/obj/machinery/cryopod{
- dir = 1
- },
-/turf/open/floor/plasteel/dark,
-/area/security/prison)
"jXV" = (
/obj/machinery/light/small{
dir = 1
@@ -56004,20 +56052,14 @@
icon_state = "platingdmg3"
},
/area/maintenance/department/engine)
-"jZG" = (
-/obj/machinery/door/poddoor/shutters/preopen{
- id = "chemistry_shutters";
- name = "chemistry shutters"
- },
-/obj/effect/spawner/structure/window/reinforced,
-/turf/open/floor/plating,
-/area/medical/chemistry)
-"kaR" = (
-/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{
- dir = 8
+"kec" = (
+/obj/machinery/atmospherics/pipe/simple/green/visible,
+/obj/machinery/light{
+ dir = 8;
+ light_color = "#e8eaff"
},
/obj/effect/turf_decal/stripes/line{
- dir = 1
+ dir = 8
},
/turf/open/floor/engine,
/area/engine/engineering)
@@ -56075,10 +56117,6 @@
icon_state = "platingdmg3"
},
/area/maintenance/department/science)
-"klb" = (
-/obj/machinery/status_display/supply,
-/turf/closed/wall,
-/area/quartermaster/sorting)
"klo" = (
/obj/structure/dresser,
/obj/structure/mirror{
@@ -56097,22 +56135,10 @@
/obj/item/clothing/under/rank/clown/sexy,
/turf/open/floor/plasteel/dark,
/area/maintenance/department/crew_quarters/dorms)
-"kmd" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 1
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
"kmn" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel/white,
/area/science/mixing)
-"koz" = (
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/hallway/primary/aft)
"kpK" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 5
@@ -56132,6 +56158,12 @@
},
/turf/open/floor/plating,
/area/maintenance/department/engine)
+"ksC" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/aft)
"kvj" = (
/obj/effect/turf_decal/tile/neutral{
dir = 1
@@ -56145,6 +56177,20 @@
},
/turf/open/floor/plasteel,
/area/hallway/secondary/exit/departure_lounge)
+"kvu" = (
+/obj/machinery/atmospherics/pipe/simple/orange/visible,
+/obj/structure/cable/yellow{
+ icon_state = "2-8"
+ },
+/obj/effect/turf_decal/stripes/corner{
+ dir = 1
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"kvx" = (
+/obj/machinery/light,
+/turf/open/floor/plasteel/white,
+/area/hallway/secondary/entry)
"kwm" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 5
@@ -56205,12 +56251,22 @@
},
/turf/open/floor/plasteel/dark,
/area/hallway/secondary/exit/departure_lounge)
+"kBe" = (
+/obj/structure/reflector/double/anchored{
+ dir = 9
+ },
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
"kDf" = (
/obj/machinery/light/small{
dir = 2
},
/turf/open/floor/carpet/black,
/area/chapel/office)
+"kDI" = (
+/obj/effect/spawner/structure/window/plasma/reinforced,
+/turf/open/floor/plating,
+/area/engine/supermatter)
"kDJ" = (
/obj/machinery/light{
dir = 8
@@ -56343,6 +56399,11 @@
},
/turf/open/floor/engine,
/area/science/xenobiology)
+"kNK" = (
+/obj/effect/spawner/structure/window/plasma/reinforced,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/plating,
+/area/engine/engineering)
"kPi" = (
/obj/structure/table,
/obj/machinery/microwave,
@@ -56416,20 +56477,10 @@
},
/turf/open/floor/plating,
/area/storage/emergency/port)
-"kTj" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/engine/engineering)
-"kTR" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 4
- },
-/obj/effect/turf_decal/delivery,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
+"kVA" = (
+/obj/machinery/status_display/supply,
+/turf/closed/wall,
+/area/quartermaster/sorting)
"kWQ" = (
/obj/machinery/atmospherics/pipe/simple/orange/visible,
/obj/structure/cable/yellow{
@@ -56443,16 +56494,15 @@
},
/turf/open/floor/engine,
/area/engine/engineering)
-"kYM" = (
-/obj/structure/extinguisher_cabinet{
- pixel_x = 27
+"kYR" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
},
-/obj/effect/turf_decal/tile/purple,
-/obj/effect/turf_decal/tile/purple{
- dir = 8
+/obj/machinery/light,
+/turf/open/floor/plasteel/white{
+ heat_capacity = 1e+006
},
-/turf/open/floor/plasteel,
-/area/hallway/primary/aft)
+/area/hallway/secondary/entry)
"lcU" = (
/obj/effect/turf_decal/stripes/line{
dir = 5
@@ -56480,29 +56530,14 @@
},
/turf/open/floor/plating,
/area/security/execution/transfer)
-"lfx" = (
-/obj/structure/table,
-/obj/item/clothing/suit/hooded/wintercoat/engineering,
-/obj/item/clothing/glasses/meson,
-/obj/item/clothing/glasses/meson,
-/obj/item/clothing/glasses/meson,
-/obj/effect/turf_decal/delivery,
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/effect/turf_decal/stripes/line,
-/turf/open/floor/plasteel,
-/area/engine/engineering)
+"lfZ" = (
+/obj/machinery/status_display/supply,
+/turf/closed/wall,
+/area/quartermaster/office)
"lhA" = (
/obj/machinery/atmospherics/pipe/manifold/general/visible,
/turf/open/floor/plasteel/dark,
/area/science/xenobiology)
-"lhP" = (
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 9
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
"liR" = (
/obj/machinery/atmospherics/pipe/simple/green/visible{
dir = 4
@@ -56517,18 +56552,30 @@
/obj/machinery/atmospherics/pipe/simple/general/hidden,
/turf/open/floor/plating,
/area/maintenance/department/cargo)
-"ljG" = (
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 6
+"llS" = (
+/turf/open/floor/plasteel/white{
+ heat_capacity = 1e+006
},
-/turf/open/floor/plasteel,
-/area/engine/atmos)
+/area/hallway/secondary/entry)
"lms" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 9
},
/turf/closed/wall,
/area/maintenance/department/engine)
+"lmv" = (
+/obj/machinery/atmospherics/pipe/simple/green/visible{
+ dir = 4
+ },
+/obj/machinery/light{
+ dir = 1;
+ light_color = "#d1dfff"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
"lnn" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/effect/turf_decal/tile/neutral,
@@ -56537,32 +56584,17 @@
},
/turf/open/floor/plasteel,
/area/storage/primary)
-"lnr" = (
-/obj/machinery/atmospherics/pipe/manifold/cyan/visible,
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 6
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"loz" = (
-/obj/structure/closet/radiation,
-/obj/effect/turf_decal/tile/yellow{
- dir = 8
- },
-/obj/effect/turf_decal/tile/yellow,
-/obj/effect/turf_decal/stripes/line{
- dir = 10
- },
-/turf/open/floor/plasteel,
-/area/engine/engineering)
"lqc" = (
/obj/item/toy/gun,
/obj/effect/decal/cleanable/oil,
/turf/open/floor/plating,
/area/maintenance/department/security/brig)
+"lqo" = (
+/obj/machinery/light/small{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/maintenance/department/chapel/monastery)
"lqy" = (
/obj/machinery/door/airlock/grunge{
name = "Library"
@@ -56572,13 +56604,13 @@
/obj/machinery/door/firedoor,
/turf/open/floor/plasteel/dark,
/area/library/lounge)
-"lrM" = (
-/obj/structure/cable{
- icon_state = "2-8"
+"lxh" = (
+/obj/structure/lattice,
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 4
},
-/obj/effect/turf_decal/stripes/line,
-/turf/open/floor/plasteel,
-/area/engine/engineering)
+/turf/open/space,
+/area/space/nearstation)
"lzJ" = (
/obj/structure/closet/crate/bin,
/turf/open/floor/carpet,
@@ -56612,6 +56644,24 @@
},
/turf/open/floor/plating,
/area/maintenance/department/engine)
+"lCR" = (
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"lCY" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/structure/disposalpipe/segment,
+/obj/machinery/door/firedoor,
+/turf/open/floor/plasteel,
+/area/hallway/primary/aft)
+"lDW" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/effect/turf_decal/stripes/corner,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
"lEn" = (
/obj/structure/window/reinforced{
dir = 1
@@ -56682,12 +56732,6 @@
/obj/item/wrench,
/turf/open/floor/plating,
/area/maintenance/department/science)
-"lJI" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/structure/disposalpipe/segment,
-/obj/machinery/door/firedoor,
-/turf/open/floor/plasteel,
-/area/hallway/primary/aft)
"lKL" = (
/obj/machinery/door/airlock/abandoned{
name = "Starboard Emergency Storage";
@@ -56722,6 +56766,13 @@
},
/turf/open/floor/plating,
/area/maintenance/department/science)
+"lQy" = (
+/obj/structure/lattice,
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 9
+ },
+/turf/open/space,
+/area/space/nearstation)
"lQQ" = (
/obj/machinery/door/poddoor/preopen{
id = "bridgespace";
@@ -56747,13 +56798,6 @@
},
/turf/open/floor/plating,
/area/maintenance/department/engine)
-"lRX" = (
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 9
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
"lTC" = (
/obj/item/shard,
/obj/effect/turf_decal/stripes/line{
@@ -56764,10 +56808,6 @@
},
/turf/open/floor/plating,
/area/maintenance/department/engine)
-"lUO" = (
-/obj/structure/sign/warning/radiation,
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
"lWy" = (
/turf/open/floor/plating,
/area/maintenance/department/science)
@@ -56789,28 +56829,11 @@
},
/turf/open/floor/plasteel,
/area/engine/engineering)
-"lXb" = (
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 8;
- name = "Gas to Mix"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"lXc" = (
/obj/structure/table,
/obj/item/clothing/head/beret,
/turf/open/floor/plating,
/area/maintenance/department/security/brig)
-"lXJ" = (
-/obj/machinery/atmospherics/components/unary/portables_connector/visible{
- dir = 4
- },
-/obj/machinery/portable_atmospherics/canister/nitrous_oxide,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
"mal" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -56851,10 +56874,32 @@
},
/turf/open/floor/plasteel,
/area/engine/engineering)
-"mci" = (
-/obj/machinery/portable_atmospherics/canister/toxins,
+"mbD" = (
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
/turf/open/floor/plating,
/area/engine/engineering)
+"mcf" = (
+/obj/structure/table/glass,
+/obj/machinery/reagentgrinder,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/yellow,
+/obj/effect/turf_decal/tile/yellow{
+ dir = 4
+ },
+/turf/open/floor/plasteel/white,
+/area/medical/chemistry)
+"mdi" = (
+/obj/machinery/rnd/production/circuit_imprinter,
+/obj/machinery/camera{
+ c_tag = "Engineering Starboard Aft";
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
"mdL" = (
/obj/structure/table,
/obj/item/paper_bin,
@@ -56871,19 +56916,19 @@
/obj/machinery/status_display/evac,
/turf/closed/wall/r_wall,
/area/engine/supermatter)
-"mfC" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
+"mfg" = (
+/obj/structure/window/reinforced{
+ dir = 8
},
-/turf/open/floor/plasteel,
-/area/hallway/primary/aft)
-"mgz" = (
-/obj/structure/cable{
- icon_state = "4-8"
+/turf/open/space,
+/area/space/nearstation)
+"mfx" = (
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
+ dir = 10
},
-/obj/effect/turf_decal/stripes/line,
-/turf/open/floor/plasteel,
-/area/engine/engineering)
+/obj/structure/lattice,
+/turf/open/space/basic,
+/area/space/nearstation)
"mhl" = (
/obj/machinery/power/emitter,
/obj/machinery/light{
@@ -56891,39 +56936,14 @@
},
/turf/open/floor/plating,
/area/engine/engineering)
-"mhn" = (
-/obj/machinery/door/firedoor,
-/obj/structure/sign/poster/random{
- pixel_x = 32
+"mlb" = (
+/obj/structure/cable{
+ icon_state = "1-8"
},
-/obj/effect/turf_decal/tile/purple,
-/obj/effect/turf_decal/tile/purple{
- dir = 8
+/obj/structure/cable{
+ icon_state = "1-2"
},
-/turf/open/floor/plasteel,
-/area/hallway/primary/aft)
-"miw" = (
-/obj/machinery/atmospherics/pipe/manifold/cyan/visible,
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/obj/machinery/camera{
- c_tag = "Engineering Supermatter Fore";
- dir = 1;
- network = list("ss13","engine")
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 10
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"mjn" = (
-/obj/machinery/jukebox,
-/turf/open/floor/plasteel/dark,
-/area/crew_quarters/bar)
-"mjK" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
-/turf/closed/wall/r_wall,
+/turf/open/floor/plating,
/area/engine/engineering)
"mlr" = (
/obj/structure/lattice,
@@ -56932,6 +56952,26 @@
},
/turf/open/space/basic,
/area/space/nearstation)
+"mlx" = (
+/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"mlS" = (
+/obj/machinery/door/airlock/engineering/glass/critical{
+ heat_proof = 1;
+ name = "Supermatter Chamber";
+ req_access_txt = "10"
+ },
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 1
+ },
+/turf/open/floor/engine,
+/area/engine/supermatter)
"mmv" = (
/obj/machinery/door/airlock/engineering{
name = "Engineering Supplies";
@@ -56979,19 +57019,6 @@
},
/turf/open/floor/plasteel/white,
/area/science/xenobiology)
-"mqp" = (
-/obj/machinery/firealarm{
- dir = 8;
- pixel_x = -28
- },
-/obj/machinery/light{
- dir = 8
- },
-/obj/effect/turf_decal/tile/blue{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/hallway/primary/aft)
"msX" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/cable{
@@ -57030,6 +57057,21 @@
},
/turf/open/floor/plasteel,
/area/science/xenobiology)
+"mvA" = (
+/obj/effect/spawner/structure/window/plasma/reinforced,
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"mvY" = (
+/obj/machinery/atmospherics/components/binary/pump{
+ dir = 2;
+ name = "Gas to Filter"
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/engine,
+/area/engine/supermatter)
"mwg" = (
/obj/structure/closet/crate{
icon_state = "crateopen"
@@ -57097,6 +57139,12 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/closed/wall,
/area/maintenance/department/engine)
+"mAi" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 1
+ },
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
"mCe" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/machinery/door/poddoor/preopen{
@@ -57105,6 +57153,27 @@
},
/turf/open/floor/plating,
/area/security/checkpoint/engineering)
+"mCP" = (
+/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{
+ dir = 8
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"mCU" = (
+/obj/structure/table,
+/obj/item/stack/sheet/metal/fifty,
+/obj/item/stack/rods/fifty,
+/obj/item/clothing/glasses/welding,
+/obj/effect/turf_decal/tile/yellow,
+/obj/effect/turf_decal/tile/yellow{
+ dir = 8
+ },
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
"mDW" = (
/obj/machinery/power/smes{
charge = 5e+006
@@ -57112,16 +57181,6 @@
/obj/structure/cable,
/turf/open/floor/plating,
/area/tcommsat/computer)
-"mEu" = (
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 4
- },
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/obj/effect/turf_decal/delivery,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
"mES" = (
/obj/machinery/door/airlock/maintenance/abandoned{
name = "Surgical Room"
@@ -57151,6 +57210,10 @@
},
/turf/open/floor/plating/airless,
/area/space/nearstation)
+"mLc" = (
+/obj/structure/sign/warning/electricshock,
+/turf/closed/wall/r_wall,
+/area/engine/supermatter)
"mLB" = (
/obj/structure/cable{
icon_state = "1-4"
@@ -57190,6 +57253,16 @@
},
/turf/open/floor/plasteel/dark,
/area/science/xenobiology)
+"mVj" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/door/firedoor,
+/turf/open/floor/plasteel,
+/area/hallway/primary/aft)
"mVM" = (
/turf/open/floor/plating/airless,
/area/space/nearstation)
@@ -57202,6 +57275,20 @@
"mZE" = (
/turf/open/space/basic,
/area/space/nearstation)
+"mZK" = (
+/obj/machinery/atmospherics/pipe/simple/cyan/visible,
+/obj/structure/cable/yellow{
+ icon_state = "1-4"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
+"mZV" = (
+/obj/machinery/atmospherics/pipe/simple/cyan/visible,
+/turf/closed/wall/r_wall,
+/area/engine/supermatter)
"naq" = (
/obj/structure/disposaloutlet{
dir = 4
@@ -57211,14 +57298,14 @@
},
/turf/open/floor/engine,
/area/science/xenobiology)
-"ncm" = (
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 4
+"ndf" = (
+/obj/machinery/atmospherics/components/binary/pump{
+ dir = 8;
+ name = "Gas to Mix"
},
-/obj/structure/cable/yellow{
- icon_state = "4-8"
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
},
-/obj/effect/turf_decal/stripes/line,
/turf/open/floor/engine,
/area/engine/engineering)
"ndI" = (
@@ -57263,10 +57350,37 @@
/obj/structure/lattice,
/turf/open/space,
/area/space/nearstation)
+"ngg" = (
+/obj/machinery/atmospherics/pipe/simple/green/visible,
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
"ngp" = (
/obj/item/chair/stool,
/turf/open/floor/carpet,
/area/maintenance/department/crew_quarters/dorms)
+"nhW" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
+/obj/machinery/airalarm{
+ dir = 4;
+ pixel_x = -23
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/aft)
+"nif" = (
+/obj/structure/table/glass,
+/obj/item/book/manual/wiki/engineering_hacking{
+ pixel_x = 3;
+ pixel_y = 3
+ },
+/obj/item/book/manual/wiki/engineering_construction,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
"nih" = (
/obj/structure/closet,
/obj/effect/spawner/lootdrop/costume,
@@ -57290,6 +57404,30 @@
},
/turf/open/floor/plasteel/dark,
/area/hallway/secondary/exit/departure_lounge)
+"nkk" = (
+/obj/structure/disposalpipe/segment{
+ dir = 9
+ },
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 9
+ },
+/obj/structure/chair{
+ dir = 8;
+ name = "Defense"
+ },
+/obj/machinery/camera{
+ c_tag = "Atmospherics Starboard";
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/purple,
+/obj/effect/turf_decal/tile/purple{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/aft)
"nku" = (
/obj/machinery/door/airlock/centcom{
name = "Crematorium";
@@ -57299,6 +57437,21 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel/dark,
/area/chapel/office)
+"nnf" = (
+/obj/structure/rack,
+/obj/item/stack/packageWrap,
+/obj/item/hand_labeler,
+/obj/item/clothing/glasses/science,
+/obj/item/clothing/glasses/science,
+/obj/effect/turf_decal/tile/yellow,
+/obj/effect/turf_decal/tile/yellow{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/yellow{
+ dir = 8
+ },
+/turf/open/floor/plasteel/white,
+/area/medical/chemistry)
"nnh" = (
/obj/structure/chair{
dir = 8
@@ -57320,13 +57473,6 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plating,
/area/maintenance/department/engine)
-"nqu" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 10
- },
-/obj/structure/lattice,
-/turf/open/space/basic,
-/area/space/nearstation)
"nqV" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -57337,6 +57483,19 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel/dark,
/area/science/xenobiology)
+"nqW" = (
+/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
+ dir = 4
+ },
+/obj/machinery/light{
+ dir = 4;
+ light_color = "#e8eaff"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
"nsy" = (
/obj/structure/table,
/obj/item/stack/sheet/metal/fifty,
@@ -57366,14 +57525,6 @@
},
/turf/closed/wall/r_wall,
/area/science/mixing)
-"nsJ" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple,
-/obj/structure/lattice,
-/turf/open/space/basic,
-/area/space/nearstation)
"ntj" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -57410,6 +57561,10 @@
},
/turf/open/floor/plasteel/white/corner,
/area/hallway/primary/central)
+"nyN" = (
+/obj/machinery/power/supermatter_crystal/engine,
+/turf/open/floor/engine,
+/area/engine/supermatter)
"nyO" = (
/obj/item/twohanded/required/kirbyplants{
icon_state = "plant-22"
@@ -57436,12 +57591,6 @@
/obj/machinery/door/firedoor,
/turf/open/floor/plasteel/dark,
/area/engine/engineering)
-"nAY" = (
-/obj/structure/chair/stool,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/effect/landmark/start/station_engineer,
-/turf/open/floor/plasteel,
-/area/engine/engineering)
"nBw" = (
/obj/machinery/computer/crew{
dir = 1
@@ -57514,6 +57663,15 @@
/obj/structure/table/reinforced,
/turf/open/floor/plasteel,
/area/science/xenobiology)
+"nIq" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/machinery/camera{
+ c_tag = "Engineering Supermatter Fore";
+ dir = 4;
+ network = list("ss13","engine")
+ },
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
"nIU" = (
/obj/structure/disposalpipe/segment{
dir = 9
@@ -57537,6 +57695,17 @@
},
/turf/open/floor/engine,
/area/science/explab)
+"nKF" = (
+/obj/machinery/door/firedoor,
+/obj/structure/sign/poster/random{
+ pixel_x = 32
+ },
+/obj/effect/turf_decal/tile/purple,
+/obj/effect/turf_decal/tile/purple{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/aft)
"nLl" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
@@ -57572,6 +57741,17 @@
},
/turf/open/floor/plasteel,
/area/tcommsat/computer)
+"nNn" = (
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/effect/turf_decal/tile/yellow,
+/obj/effect/turf_decal/tile/yellow{
+ dir = 8
+ },
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
"nNJ" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -57606,6 +57786,13 @@
/obj/item/chair,
/turf/open/floor/plating,
/area/maintenance/department/security/brig)
+"nPW" = (
+/obj/machinery/atmospherics/pipe/simple/general/visible{
+ dir = 6
+ },
+/obj/machinery/meter,
+/turf/closed/wall/r_wall,
+/area/engine/supermatter)
"nQc" = (
/obj/structure/table,
/obj/item/stack/sheet/metal/fifty,
@@ -57616,13 +57803,9 @@
},
/turf/open/floor/plating,
/area/maintenance/department/engine)
-"nRM" = (
-/obj/structure/chair/stool,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/obj/effect/landmark/start/station_engineer,
-/turf/open/floor/plasteel,
+"nQf" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
+/turf/closed/wall/r_wall,
/area/engine/engineering)
"nSj" = (
/obj/structure/grille/broken,
@@ -57636,16 +57819,6 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/wood,
/area/lawoffice)
-"nTr" = (
-/obj/effect/turf_decal/tile/blue{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/hallway/primary/aft)
-"nUQ" = (
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/engine,
-/area/engine/supermatter)
"nVU" = (
/obj/item/twohanded/spear,
/turf/open/floor/plating,
@@ -57658,6 +57831,13 @@
/obj/structure/table_frame/wood,
/turf/open/floor/wood,
/area/maintenance/department/engine)
+"nYe" = (
+/obj/machinery/atmospherics/components/binary/pump{
+ dir = 8;
+ name = "Mix to Engine"
+ },
+/turf/open/floor/plasteel,
+/area/engine/atmos)
"nYn" = (
/obj/structure/sign/warning/docking,
/obj/effect/spawner/structure/window/reinforced,
@@ -57684,6 +57864,23 @@
},
/turf/open/floor/plating,
/area/maintenance/department/cargo)
+"obl" = (
+/obj/structure/sign/warning/radiation,
+/turf/closed/wall/r_wall,
+/area/engine/supermatter)
+"obG" = (
+/obj/machinery/atmospherics/pipe/manifold/cyan/visible,
+/obj/machinery/button/door{
+ id = "engsm";
+ name = "Radiation Shutters Control";
+ pixel_y = 24;
+ req_access_txt = "10"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
"obP" = (
/obj/structure/table,
/obj/item/paper_bin,
@@ -57693,6 +57890,11 @@
initial_gas_mix = "o2=0.01;n2=0.01"
},
/area/maintenance/department/science)
+"ocy" = (
+/obj/effect/spawner/structure/window/plasma/reinforced,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plating,
+/area/engine/engineering)
"oep" = (
/obj/structure/table/glass,
/obj/item/paper_bin,
@@ -57725,6 +57927,10 @@
},
/turf/open/floor/plating,
/area/maintenance/department/security/brig)
+"oge" = (
+/obj/effect/spawner/structure/window/plasma/reinforced,
+/turf/open/floor/plating,
+/area/engine/engineering)
"ohR" = (
/obj/item/chair,
/turf/open/floor/plating,
@@ -57739,6 +57945,18 @@
},
/turf/open/floor/plating,
/area/maintenance/department/engine)
+"ona" = (
+/obj/machinery/atmospherics/pipe/manifold/green/visible{
+ dir = 8
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-8"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
"onX" = (
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/public/glass{
@@ -57796,6 +58014,12 @@
/obj/structure/window/reinforced,
/turf/open/floor/plasteel,
/area/science/xenobiology)
+"oto" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/turf/open/floor/plasteel/white,
+/area/hallway/secondary/entry)
"ous" = (
/obj/effect/turf_decal/stripes/line,
/obj/machinery/button/door{
@@ -57818,6 +58042,14 @@
},
/turf/open/floor/plating/airless,
/area/space/nearstation)
+"ovE" = (
+/obj/machinery/light/small{
+ dir = 8
+ },
+/turf/open/floor/plating{
+ icon_state = "panelscorched"
+ },
+/area/maintenance/department/chapel/monastery)
"ovM" = (
/obj/machinery/atmospherics/pipe/simple/cyan/hidden{
dir = 4
@@ -57843,11 +58075,17 @@
},
/turf/open/floor/plasteel/dark,
/area/chapel/office)
-"oxw" = (
-/obj/structure/cable/yellow{
- icon_state = "4-8"
+"oxt" = (
+/obj/structure/table/glass,
+/obj/item/book/manual/wiki/research_and_development,
+/obj/item/disk/tech_disk,
+/obj/item/disk/design_disk,
+/turf/open/floor/plasteel/dark,
+/area/science/lab)
+"oyE" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
},
-/obj/effect/turf_decal/stripes/line,
/turf/open/floor/engine,
/area/engine/engineering)
"oyF" = (
@@ -57875,6 +58113,19 @@
},
/turf/closed/wall/r_wall,
/area/science/xenobiology)
+"oBY" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
+ dir = 4
+ },
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/obj/machinery/meter,
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
"oCn" = (
/obj/structure/chair/office/dark{
dir = 1
@@ -57945,6 +58196,15 @@
},
/turf/open/floor/plating,
/area/maintenance/department/security/brig)
+"oFi" = (
+/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 5
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
"oFo" = (
/obj/structure/closet/emcloset/anchored,
/obj/structure/sign/warning/vacuum/external{
@@ -57961,23 +58221,6 @@
/obj/item/stack/sheet/mineral/wood,
/turf/open/floor/plasteel,
/area/maintenance/department/engine)
-"oHa" = (
-/obj/machinery/power/emitter/anchored{
- dir = 8;
- state = 2
- },
-/obj/structure/cable{
- icon_state = "0-4"
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
-"oJr" = (
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 1
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
"oKa" = (
/obj/structure/rack,
/obj/effect/spawner/lootdrop/maintenance{
@@ -57993,18 +58236,6 @@
icon_state = "platingdmg3"
},
/area/maintenance/department/science)
-"oKv" = (
-/obj/machinery/atmospherics/components/unary/portables_connector/visible,
-/obj/machinery/portable_atmospherics/canister/nitrogen,
-/obj/effect/turf_decal/bot,
-/turf/open/floor/engine,
-/area/engine/engineering)
-"oKJ" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 6
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"oLR" = (
/obj/effect/turf_decal/tile/red{
dir = 4
@@ -58111,6 +58342,12 @@
icon_state = "platingdmg3"
},
/area/maintenance/department/security/brig)
+"oTD" = (
+/obj/machinery/atmospherics/components/unary/portables_connector/visible,
+/obj/machinery/portable_atmospherics/canister/nitrogen,
+/obj/effect/turf_decal/bot,
+/turf/open/floor/engine,
+/area/engine/engineering)
"oUa" = (
/obj/effect/turf_decal/stripes/line{
dir = 4
@@ -58126,14 +58363,6 @@
},
/turf/open/floor/plasteel,
/area/engine/engineering)
-"oWu" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/obj/machinery/holopad,
-/obj/effect/turf_decal/bot,
-/turf/open/floor/plasteel,
-/area/engine/engineering)
"oWw" = (
/obj/item/flashlight,
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
@@ -58154,22 +58383,6 @@
},
/turf/open/floor/plasteel/white,
/area/security/execution/transfer)
-"oXq" = (
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 1;
- name = "Cooling Loop Bypass"
- },
-/obj/structure/cable/yellow{
- icon_state = "1-2"
- },
-/obj/structure/cable/yellow{
- icon_state = "1-8"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"oYj" = (
/obj/effect/turf_decal/loading_area{
dir = 4
@@ -58182,12 +58395,6 @@
},
/turf/open/floor/plating,
/area/maintenance/department/engine)
-"paU" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 6
- },
-/turf/open/floor/plating/airless,
-/area/engine/engineering)
"pbm" = (
/obj/machinery/door/airlock/external{
name = "Pod Docking Bay"
@@ -58223,6 +58430,19 @@
},
/turf/open/floor/plating,
/area/science/explab)
+"peb" = (
+/obj/structure/cable/yellow{
+ icon_state = "0-8"
+ },
+/obj/machinery/atmospherics/pipe/manifold/general/visible{
+ dir = 8
+ },
+/obj/structure/window/plasma/reinforced{
+ dir = 4
+ },
+/obj/machinery/power/rad_collector/anchored,
+/turf/open/floor/engine,
+/area/engine/supermatter)
"pfz" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/cable{
@@ -58243,13 +58463,12 @@
},
/turf/open/floor/plasteel,
/area/science/xenobiology)
-"pgH" = (
-/obj/machinery/atmospherics/pipe/simple/cyan/visible,
-/obj/effect/turf_decal/stripes/line{
- dir = 4
+"pga" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 9
},
-/turf/open/floor/engine,
-/area/engine/engineering)
+/turf/open/floor/plasteel/white,
+/area/hallway/secondary/entry)
"phJ" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
@@ -58271,13 +58490,6 @@
/obj/structure/piano,
/turf/open/floor/plasteel/dark,
/area/maintenance/department/crew_quarters/dorms)
-"pmB" = (
-/obj/machinery/atmospherics/pipe/simple/green/visible{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/orange/visible,
-/turf/open/floor/plasteel,
-/area/engine/atmos)
"pnU" = (
/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{
dir = 4;
@@ -58286,14 +58498,16 @@
},
/turf/open/floor/circuit/telecomms,
/area/science/xenobiology)
-"poP" = (
-/obj/structure/lattice,
-/obj/machinery/atmospherics/pipe/simple/cyan/visible,
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
+"ppi" = (
+/obj/item/radio/intercom{
+ name = "Station Intercom (General)";
+ pixel_x = 29
+ },
+/obj/effect/turf_decal/stripes/line{
dir = 4
},
-/turf/open/space,
-/area/space/nearstation)
+/turf/open/floor/engine,
+/area/engine/engineering)
"pps" = (
/turf/closed/wall,
/area/engine/break_room)
@@ -58312,18 +58526,20 @@
},
/turf/open/floor/engine,
/area/engine/supermatter)
-"psd" = (
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 2;
- name = "Gas to Filter"
+"ptk" = (
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/stripes/line,
/turf/open/floor/engine,
-/area/engine/supermatter)
-"puw" = (
-/obj/structure/sign/warning/fire,
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
+/area/engine/engineering)
+"puO" = (
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
+ dir = 10
+ },
+/obj/structure/lattice/catwalk,
+/turf/open/space/basic,
+/area/space/nearstation)
"pvK" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/structure/cable{
@@ -58358,17 +58574,13 @@
},
/turf/open/space/basic,
/area/space/nearstation)
-"pxD" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+"pBs" = (
+/obj/machinery/atmospherics/pipe/simple/cyan/visible,
+/obj/effect/turf_decal/stripes/line{
dir = 4
},
-/obj/machinery/door/poddoor/shutters/preopen{
- id = "chemistry_shutters";
- name = "chemistry shutters"
- },
-/obj/effect/spawner/structure/window/reinforced,
-/turf/open/floor/plating,
-/area/medical/chemistry)
+/turf/open/floor/engine,
+/area/engine/engineering)
"pBD" = (
/obj/structure/cable{
icon_state = "0-8"
@@ -58379,22 +58591,6 @@
/obj/machinery/shieldwallgen/xenobiologyaccess,
/turf/open/floor/plating,
/area/maintenance/department/engine)
-"pBJ" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 10
- },
-/obj/structure/lattice/catwalk,
-/turf/open/space/basic,
-/area/space/nearstation)
-"pCo" = (
-/obj/structure/reflector/single/anchored{
- dir = 6
- },
-/obj/machinery/light/small{
- dir = 1
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
"pDP" = (
/obj/machinery/vending/assist,
/obj/effect/turf_decal/tile/neutral{
@@ -58451,6 +58647,29 @@
},
/turf/open/floor/wood,
/area/crew_quarters/heads/hop)
+"pIk" = (
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
+ dir = 4
+ },
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/engine,
+/area/engine/engineering)
+"pJx" = (
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
+ dir = 6
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-4"
+ },
+/obj/effect/turf_decal/stripes/corner,
+/turf/open/floor/engine,
+/area/engine/engineering)
"pKd" = (
/obj/effect/spawner/lootdrop/maintenance{
lootcount = 2;
@@ -58510,6 +58729,12 @@
dir = 1
},
/area/hallway/secondary/exit/departure_lounge)
+"pPu" = (
+/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/engine_waste{
+ dir = 1
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"pQw" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
@@ -58590,19 +58815,6 @@
/obj/structure/cable,
/turf/open/floor/wood,
/area/lawoffice)
-"pYh" = (
-/obj/machinery/atmospherics/pipe/simple/orange/visible,
-/turf/closed/wall/r_wall,
-/area/engine/engineering)
-"pYw" = (
-/obj/item/twohanded/required/kirbyplants{
- icon_state = "plant-03"
- },
-/obj/structure/extinguisher_cabinet{
- pixel_x = -24
- },
-/turf/open/floor/plasteel/dark,
-/area/science/lab)
"pYC" = (
/obj/structure/sign/warning{
pixel_y = -32
@@ -58617,12 +58829,25 @@
},
/turf/open/floor/plasteel/white,
/area/medical/virology)
+"qbm" = (
+/obj/machinery/light{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/aft)
"qbp" = (
/obj/machinery/atmospherics/pipe/manifold/general/visible{
dir = 8
},
/turf/open/floor/plasteel/dark,
/area/engine/engineering)
+"qbV" = (
+/obj/structure/lattice,
+/turf/open/space,
+/area/space)
"qbZ" = (
/obj/structure/rack,
/obj/item/clothing/mask/gas,
@@ -58677,18 +58902,6 @@
/obj/item/stack/sheet/mineral/wood,
/turf/open/floor/plating,
/area/maintenance/department/engine)
-"qeY" = (
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
-"qhE" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 1
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/engine/engineering)
"qjx" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/effect/turf_decal/stripes/line,
@@ -58698,38 +58911,10 @@
},
/turf/open/floor/plasteel,
/area/construction/mining/aux_base)
-"qkM" = (
-/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{
- dir = 4
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 9
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"qnT" = (
/obj/machinery/iv_drip,
/turf/open/floor/plating,
/area/maintenance/department/science)
-"qpd" = (
-/obj/machinery/atmospherics/pipe/manifold/green/visible{
- dir = 8
- },
-/obj/structure/cable/yellow{
- icon_state = "1-8"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"qpS" = (
-/obj/structure/cable{
- icon_state = "2-4"
- },
-/obj/effect/turf_decal/stripes/line,
-/turf/open/floor/plasteel,
-/area/engine/engineering)
"qtA" = (
/obj/machinery/atmospherics/pipe/simple/general/visible{
dir = 4
@@ -58870,21 +59055,6 @@
/obj/effect/decal/cleanable/cobweb,
/turf/open/floor/plating,
/area/maintenance/department/science)
-"qLI" = (
-/obj/structure/table,
-/obj/item/stack/sheet/glass/fifty{
- layer = 4
- },
-/obj/item/stack/cable_coil,
-/obj/effect/turf_decal/tile/yellow,
-/obj/effect/turf_decal/tile/yellow{
- dir = 8
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 6
- },
-/turf/open/floor/plasteel,
-/area/engine/engineering)
"qMi" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/machinery/atmospherics/pipe/simple/general/visible,
@@ -58921,10 +59091,10 @@
},
/turf/open/floor/plating,
/area/maintenance/department/engine)
-"qOS" = (
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/open/floor/plating,
+"qPh" = (
+/obj/structure/chair,
+/obj/effect/turf_decal/stripes/corner,
+/turf/open/floor/plasteel,
/area/engine/engineering)
"qPB" = (
/obj/structure/chair/stool,
@@ -58933,22 +59103,8 @@
},
/turf/open/floor/plasteel/dark,
/area/maintenance/department/crew_quarters/dorms)
-"qRl" = (
-/obj/item/radio/intercom{
- name = "Station Intercom (General)";
- pixel_x = 29
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"qTV" = (
-/obj/item/radio/intercom{
- name = "Station Intercom (General)";
- pixel_x = -27
- },
-/obj/effect/turf_decal/tile/blue{
+"qUe" = (
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 8
},
/turf/open/floor/plasteel,
@@ -58978,6 +59134,12 @@
},
/turf/open/floor/plasteel/dark,
/area/science/xenobiology)
+"qWB" = (
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/aft)
"qWG" = (
/obj/structure/closet/emcloset/anchored,
/turf/open/floor/plating,
@@ -59054,6 +59216,13 @@
},
/turf/open/floor/plasteel/white,
/area/medical/sleeper)
+"rax" = (
+/obj/machinery/conveyor{
+ dir = 1;
+ id = "garbage"
+ },
+/turf/open/floor/plating,
+/area/maintenance/disposal)
"reH" = (
/obj/item/reagent_containers/food/drinks/bottle/vodka,
/obj/structure/disposalpipe/segment{
@@ -59209,6 +59378,23 @@
},
/turf/open/floor/plasteel/dark,
/area/crew_quarters/bar)
+"rwf" = (
+/obj/machinery/power/emitter/anchored{
+ dir = 8;
+ state = 2
+ },
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"rwt" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
+ dir = 9
+ },
+/obj/effect/turf_decal/delivery,
+/turf/open/floor/engine,
+/area/engine/engineering)
"rxa" = (
/obj/machinery/atmospherics/components/unary/portables_connector/visible{
dir = 1
@@ -59243,6 +59429,13 @@
icon_state = "panelscorched"
},
/area/maintenance/department/engine)
+"rAZ" = (
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
+ dir = 9
+ },
+/obj/structure/lattice/catwalk,
+/turf/open/space/basic,
+/area/space/nearstation)
"rBh" = (
/obj/structure/mopbucket,
/obj/item/mop,
@@ -59257,6 +59450,19 @@
/obj/item/reagent_containers/blood/random,
/turf/open/floor/plating,
/area/maintenance/department/science)
+"rEt" = (
+/obj/machinery/atmospherics/pipe/simple/cyan/visible,
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-4"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
"rFq" = (
/obj/structure/chair,
/obj/item/reagent_containers/food/snacks/donkpocket,
@@ -59264,6 +59470,24 @@
icon_state = "platingdmg3"
},
/area/maintenance/department/science)
+"rGz" = (
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/aft)
+"rHv" = (
+/obj/machinery/door/airlock/public/glass{
+ name = "Monastery Transit"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/turf/open/floor/plasteel/white{
+ heat_capacity = 1e+006
+ },
+/area/hallway/secondary/entry)
"rHA" = (
/turf/open/floor/plasteel,
/area/construction/mining/aux_base)
@@ -59322,6 +59546,16 @@
/obj/item/ammo_casing/shotgun/improvised,
/turf/open/floor/plating,
/area/maintenance/department/security/brig)
+"rMt" = (
+/obj/structure/extinguisher_cabinet{
+ pixel_x = 27
+ },
+/obj/effect/turf_decal/tile/purple,
+/obj/effect/turf_decal/tile/purple{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/aft)
"rMV" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
@@ -59333,6 +59567,16 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/maintenance/department/science)
+"rPd" = (
+/obj/item/radio/intercom{
+ name = "Station Intercom (General)";
+ pixel_x = -27
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/aft)
"rPg" = (
/obj/machinery/atmospherics/components/unary/thermomachine/freezer{
dir = 8
@@ -59347,13 +59591,12 @@
/obj/item/trash/can,
/turf/open/floor/wood,
/area/maintenance/department/engine)
-"rTd" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/structure/cable/yellow{
- icon_state = "4-8"
+"rTZ" = (
+/obj/machinery/cryopod{
+ dir = 8
},
/turf/open/floor/plasteel,
-/area/engine/engineering)
+/area/crew_quarters/dorms)
"rWE" = (
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
@@ -59380,6 +59623,14 @@
},
/turf/open/floor/plating,
/area/storage/emergency/starboard)
+"saW" = (
+/obj/machinery/door/airlock/public/glass{
+ name = "Monastery Transit"
+ },
+/turf/open/floor/plasteel/white{
+ heat_capacity = 1e+006
+ },
+/area/hallway/secondary/entry)
"sbk" = (
/obj/structure/girder,
/turf/open/floor/plating,
@@ -59422,6 +59673,17 @@
},
/turf/open/space,
/area/space/nearstation)
+"sdZ" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"sfr" = (
+/obj/machinery/atmospherics/pipe/simple/green/visible,
+/turf/closed/wall/r_wall,
+/area/engine/supermatter)
"sgc" = (
/obj/machinery/vending/cigarette,
/obj/effect/turf_decal/tile/neutral{
@@ -59436,51 +59698,23 @@
},
/turf/open/floor/plasteel/dark,
/area/hallway/secondary/exit/departure_lounge)
-"shH" = (
-/turf/closed/wall/r_wall,
-/area/space/nearstation)
+"sho" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/open/floor/plasteel/white{
+ heat_capacity = 1e+006
+ },
+/area/hallway/secondary/entry)
"sij" = (
/obj/structure/closet,
/obj/item/reagent_containers/food/snacks/meat/slab/monkey,
/turf/open/floor/plating,
/area/maintenance/department/engine)
-"sjC" = (
-/obj/effect/turf_decal/stripes/line,
-/obj/effect/turf_decal/tile/yellow,
-/obj/effect/turf_decal/tile/yellow{
- dir = 8
- },
-/obj/machinery/power/port_gen/pacman,
-/turf/open/floor/plasteel,
-/area/engine/engineering)
"skw" = (
/obj/machinery/atmospherics/pipe/simple/cyan/hidden,
/turf/closed/wall,
/area/maintenance/department/security/brig)
-"slJ" = (
-/obj/machinery/atmospherics/pipe/simple/green/visible{
- dir = 4
- },
-/obj/machinery/light{
- dir = 1;
- light_color = "#d1dfff"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"smv" = (
-/obj/machinery/atmospherics/components/binary/pump/on{
- dir = 8;
- name = "Cooling Loop to Gas"
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"spz" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plating,
@@ -59526,12 +59760,6 @@
},
/turf/open/floor/plating,
/area/maintenance/solars/starboard)
-"svA" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 6
- },
-/turf/closed/wall/r_wall,
-/area/engine/engineering)
"svN" = (
/obj/effect/spawner/lootdrop/maintenance,
/obj/structure/sign/departments/restroom{
@@ -59539,11 +59767,6 @@
},
/turf/open/floor/plating,
/area/maintenance/department/science)
-"swg" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple,
-/obj/structure/lattice/catwalk,
-/turf/open/space/basic,
-/area/space/nearstation)
"sww" = (
/obj/effect/decal/cleanable/blood/old,
/obj/item/reagent_containers/food/snacks/meat/slab/monkey,
@@ -59578,6 +59801,12 @@
},
/turf/open/floor/plating,
/area/security/execution/transfer)
+"sAF" = (
+/obj/structure/chair/stool,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/effect/landmark/start/station_engineer,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
"sAK" = (
/obj/item/clothing/mask/gas/plaguedoctor,
/turf/open/floor/plating,
@@ -59615,6 +59844,17 @@
},
/turf/open/floor/plating,
/area/maintenance/department/security/brig)
+"sHX" = (
+/obj/machinery/atmospherics/components/binary/pump/on{
+ dir = 8;
+ name = "Cooling Loop to Gas"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/engine,
+/area/engine/engineering)
"sJp" = (
/obj/machinery/atmospherics/pipe/simple/general/visible,
/obj/effect/turf_decal/stripes/line,
@@ -59636,6 +59876,21 @@
},
/turf/open/floor/plasteel,
/area/engine/engineering)
+"sKw" = (
+/obj/structure/table,
+/obj/item/stack/sheet/glass/fifty{
+ layer = 4
+ },
+/obj/item/stack/cable_coil,
+/obj/effect/turf_decal/tile/yellow,
+/obj/effect/turf_decal/tile/yellow{
+ dir = 8
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
"sNz" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -59649,6 +59904,12 @@
},
/turf/open/floor/plating,
/area/security/execution/transfer)
+"sOQ" = (
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/open/space/basic,
+/area/space)
"sQt" = (
/obj/machinery/door/airlock/external{
name = "Supply Dock Airlock";
@@ -59659,6 +59920,37 @@
},
/turf/open/floor/plating,
/area/quartermaster/storage)
+"sQG" = (
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
+ dir = 4
+ },
+/obj/structure/lattice,
+/turf/open/space/basic,
+/area/space/nearstation)
+"sQV" = (
+/obj/machinery/atmospherics/pipe/manifold/cyan/visible,
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/engine,
+/area/engine/engineering)
+"sRH" = (
+/obj/structure/lattice,
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/obj/structure/window/reinforced,
+/turf/open/space,
+/area/space/nearstation)
+"sTg" = (
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/obj/structure/lattice,
+/obj/structure/lattice,
+/turf/open/space/basic,
+/area/space/nearstation)
"sUP" = (
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
dir = 8
@@ -59685,19 +59977,6 @@
},
/turf/open/floor/engine,
/area/engine/engineering)
-"sWW" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 4
- },
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/obj/machinery/meter,
-/obj/effect/turf_decal/stripes/line{
- dir = 9
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"sXi" = (
/obj/machinery/disposal/bin,
/obj/structure/disposalpipe/trunk{
@@ -59712,16 +59991,6 @@
/obj/structure/disposalpipe/segment,
/turf/closed/wall/r_wall,
/area/science/xenobiology)
-"sYQ" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/door/firedoor,
-/turf/open/floor/plasteel,
-/area/hallway/primary/aft)
"sZh" = (
/obj/structure/closet/crate,
/turf/open/floor/plating,
@@ -59759,13 +60028,16 @@
},
/turf/open/floor/plasteel,
/area/science/xenobiology)
-"tbw" = (
-/obj/structure/lattice,
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 9
+"tcC" = (
+/obj/machinery/door/firedoor,
+/obj/structure/sign/poster/official/random{
+ pixel_x = -32
},
-/turf/open/space,
-/area/space/nearstation)
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/aft)
"tcY" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -59813,10 +60085,6 @@
},
/turf/open/floor/plasteel/white,
/area/science/xenobiology)
-"tdL" = (
-/obj/machinery/atmospherics/pipe/simple/cyan/visible,
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
"tfw" = (
/obj/structure/cable{
icon_state = "0-2";
@@ -59862,17 +60130,6 @@
},
/turf/open/floor/plasteel/white,
/area/medical/sleeper)
-"tkL" = (
-/obj/machinery/atmospherics/pipe/simple/green/visible,
-/obj/machinery/light{
- dir = 8;
- light_color = "#e8eaff"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"tlc" = (
/obj/machinery/recharger,
/obj/structure/table,
@@ -59891,12 +60148,14 @@
},
/turf/open/floor/engine,
/area/engine/engineering)
-"tlV" = (
-/obj/structure/reflector/double/anchored{
- dir = 9
+"tmi" = (
+/obj/structure/lattice,
+/obj/machinery/atmospherics/pipe/simple/cyan/visible,
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 4
},
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
+/turf/open/space,
+/area/space/nearstation)
"tnY" = (
/obj/machinery/button/door{
id = "aux_base_shutters";
@@ -59918,15 +60177,13 @@
icon_state = "panelscorched"
},
/area/maintenance/department/security/brig)
-"tqO" = (
-/obj/structure/sign/poster/official/random{
- pixel_x = -32
- },
-/obj/effect/turf_decal/tile/blue{
+"tpX" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/machinery/light{
dir = 8
},
-/turf/open/floor/plasteel,
-/area/hallway/primary/aft)
+/turf/open/floor/plasteel/white,
+/area/hallway/secondary/entry)
"tqX" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/cable{
@@ -59938,6 +60195,13 @@
},
/turf/open/floor/plating,
/area/science/xenobiology)
+"ttX" = (
+/obj/effect/spawner/structure/window/plasma/reinforced,
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 9
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
"tue" = (
/obj/structure/cable{
icon_state = "2-4"
@@ -59994,14 +60258,19 @@
},
/turf/open/floor/plating,
/area/maintenance/department/security/brig)
-"tzH" = (
-/obj/machinery/door/poddoor/shutters/preopen{
- id = "research_shutters_2";
- name = "research shutters"
+"tzh" = (
+/obj/structure/chair/office/dark{
+ dir = 4
},
-/obj/effect/spawner/structure/window/reinforced,
-/turf/open/floor/plating,
-/area/science/lab)
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"tAv" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
+ dir = 6
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"tAK" = (
/obj/structure/table,
/obj/structure/window/reinforced{
@@ -60019,13 +60288,6 @@
/obj/item/wrench,
/turf/open/floor/plating,
/area/maintenance/department/cargo)
-"tDE" = (
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 8;
- name = "Mix to Engine"
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
"tHk" = (
/obj/machinery/door/firedoor,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
@@ -60041,33 +60303,13 @@
},
/turf/open/floor/plasteel/dark,
/area/engine/engineering)
-"tJr" = (
-/obj/structure/plasticflaps/opaque,
-/obj/effect/turf_decal/delivery,
-/obj/machinery/door/poddoor/shutters/preopen{
- id = "research_shutters_2";
- name = "research shutters"
+"tMA" = (
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
+ dir = 5
},
-/turf/open/floor/plasteel,
-/area/science/lab)
-"tLP" = (
-/obj/machinery/status_display/supply,
-/turf/closed/wall,
-/area/quartermaster/warehouse)
-"tOD" = (
-/obj/machinery/atmospherics/pipe/simple/green/visible,
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"tQT" = (
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
+/obj/structure/lattice,
+/turf/open/space/basic,
+/area/space/nearstation)
"tRc" = (
/obj/structure/ore_box,
/turf/open/floor/plating{
@@ -60100,6 +60342,11 @@
},
/turf/open/floor/plasteel/white,
/area/science/xenobiology)
+"uaa" = (
+/turf/open/floor/plating{
+ icon_state = "panelscorched"
+ },
+/area/maintenance/department/chapel/monastery)
"uaC" = (
/obj/structure/chair/comfy/black{
dir = 8
@@ -60112,13 +60359,6 @@
},
/turf/open/floor/plating,
/area/maintenance/department/security/brig)
-"uaO" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 6
- },
-/obj/structure/lattice/catwalk,
-/turf/open/space/basic,
-/area/space/nearstation)
"uaP" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 8
@@ -60132,14 +60372,6 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/closed/wall/r_wall,
/area/science/mixing)
-"udl" = (
-/obj/structure/lattice,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 4
- },
-/turf/open/space,
-/area/space/nearstation)
"uek" = (
/obj/structure/rack,
/obj/effect/spawner/lootdrop/maintenance{
@@ -60168,21 +60400,27 @@
icon_state = "panelscorched"
},
/area/maintenance/department/science)
-"ueX" = (
-/obj/structure/table/glass,
-/obj/item/book/manual/wiki/engineering_hacking{
- pixel_x = 3;
- pixel_y = 3
- },
-/obj/item/book/manual/wiki/engineering_construction,
-/turf/open/floor/plasteel,
-/area/engine/engineering)
"ufa" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
/turf/open/floor/plasteel/dark,
/area/science/xenobiology)
+"ufr" = (
+/obj/machinery/atmospherics/pipe/simple/green/visible{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/orange/visible,
+/turf/open/floor/plasteel,
+/area/engine/atmos)
+"ufx" = (
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "research_shutters_2";
+ name = "research shutters"
+ },
+/obj/effect/spawner/structure/window/reinforced,
+/turf/open/floor/plating,
+/area/science/lab)
"ugC" = (
/obj/structure/chair/office/light{
icon_state = "officechair_white";
@@ -60215,16 +60453,6 @@
},
/turf/closed/wall,
/area/maintenance/department/engine)
-"ukp" = (
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 4;
- name = "Mix to Gas"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"ulu" = (
/obj/machinery/disposal/bin,
/obj/structure/disposalpipe/trunk{
@@ -60287,13 +60515,12 @@
"uoS" = (
/turf/open/floor/plating,
/area/construction/mining/aux_base)
-"upc" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
+"upg" = (
+/obj/machinery/atmospherics/pipe/simple/general/visible{
dir = 6
},
-/obj/structure/lattice,
-/turf/open/space/basic,
-/area/space/nearstation)
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
"uqJ" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/cable,
@@ -60362,44 +60589,17 @@
},
/turf/open/floor/circuit/telecomms,
/area/science/xenobiology)
+"uwT" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
"uwX" = (
/obj/machinery/field/generator,
/turf/open/floor/plating,
/area/maintenance/department/engine)
-"uxP" = (
-/obj/structure/disposalpipe/segment{
- dir = 9
- },
-/obj/structure/cable{
- icon_state = "1-8"
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 9
- },
-/obj/structure/chair{
- dir = 8;
- name = "Defense"
- },
-/obj/machinery/camera{
- c_tag = "Atmospherics Starboard";
- dir = 8
- },
-/obj/effect/turf_decal/tile/purple,
-/obj/effect/turf_decal/tile/purple{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/hallway/primary/aft)
-"uzh" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/door/airlock/engineering/glass/critical{
- heat_proof = 1;
- name = "Supermatter Chamber";
- req_access_txt = "10"
- },
-/obj/effect/mapping_helpers/airlock/cyclelink_helper,
-/turf/open/floor/engine,
-/area/engine/supermatter)
"uzn" = (
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
/obj/structure/cable{
@@ -60413,6 +60613,10 @@
},
/turf/open/floor/plasteel,
/area/tcommsat/computer)
+"uAL" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on,
+/turf/open/floor/plasteel/white,
+/area/hallway/secondary/entry)
"uAU" = (
/obj/structure/table/wood,
/obj/item/folder/blue,
@@ -60434,6 +60638,11 @@
},
/turf/open/floor/engine,
/area/science/explab)
+"uBu" = (
+/turf/open/floor/plating{
+ icon_state = "platingdmg3"
+ },
+/area/maintenance/department/chapel/monastery)
"uCS" = (
/obj/machinery/door/poddoor/shutters{
id = "aux_base_shutters";
@@ -60442,6 +60651,16 @@
/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel,
/area/construction/mining/aux_base)
+"uDr" = (
+/obj/effect/spawner/structure/window/plasma/reinforced,
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 1
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"uER" = (
+/turf/closed/wall/r_wall,
+/area/space/nearstation)
"uHG" = (
/obj/structure/cable{
icon_state = "1-4"
@@ -60454,12 +60673,6 @@
},
/turf/open/floor/plating,
/area/maintenance/department/engine)
-"uIB" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/junction{
- dir = 4
- },
-/turf/closed/wall/r_wall,
-/area/engine/engineering)
"uLF" = (
/obj/structure/cable{
icon_state = "1-4"
@@ -60496,6 +60709,12 @@
/obj/effect/turf_decal/plaque,
/turf/open/floor/plating,
/area/maintenance/department/engine)
+"uQa" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 8
+ },
+/turf/open/floor/engine,
+/area/engine/supermatter)
"uQR" = (
/obj/item/ammo_casing/shotgun/beanbag,
/turf/open/floor/plating,
@@ -60535,6 +60754,14 @@
/obj/item/stamp/law,
/turf/open/floor/carpet,
/area/lawoffice)
+"uWe" = (
+/obj/machinery/atmospherics/components/binary/pump{
+ dir = 2;
+ name = "External Gas to Loop"
+ },
+/obj/effect/turf_decal/delivery,
+/turf/open/floor/engine,
+/area/engine/engineering)
"uXG" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -60557,12 +60784,28 @@
},
/turf/open/floor/plating,
/area/maintenance/solars/starboard)
+"uZs" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
"vay" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
/turf/open/floor/plating,
/area/maintenance/department/engine)
+"vbQ" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/plasteel/white,
+/area/hallway/secondary/entry)
+"vdb" = (
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple,
+/obj/structure/lattice,
+/turf/open/space/basic,
+/area/space/nearstation)
"veM" = (
/obj/machinery/suit_storage_unit/rd,
/obj/machinery/light{
@@ -60580,6 +60823,15 @@
},
/turf/open/floor/plasteel/dark,
/area/science/mixing)
+"vfn" = (
+/obj/structure/plasticflaps/opaque,
+/obj/effect/turf_decal/delivery,
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "research_shutters_2";
+ name = "research shutters"
+ },
+/turf/open/floor/plasteel,
+/area/science/lab)
"vgp" = (
/obj/machinery/door/firedoor,
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
@@ -60597,6 +60849,14 @@
},
/turf/open/floor/plasteel,
/area/science/xenobiology)
+"vgX" = (
+/obj/structure/lattice,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 4
+ },
+/turf/open/space,
+/area/space/nearstation)
"vhk" = (
/obj/structure/chair,
/turf/open/floor/carpet,
@@ -60610,31 +60870,6 @@
},
/turf/open/floor/plasteel,
/area/engine/engineering)
-"vli" = (
-/obj/structure/table,
-/obj/item/clothing/glasses/meson/engine,
-/obj/item/clothing/glasses/meson/engine,
-/obj/item/clothing/glasses/meson/engine,
-/obj/item/pipe_dispenser,
-/obj/item/pipe_dispenser,
-/obj/item/pipe_dispenser,
-/obj/machinery/light,
-/obj/effect/turf_decal/delivery,
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/effect/turf_decal/stripes/line,
-/turf/open/floor/plasteel,
-/area/engine/engineering)
-"vlC" = (
-/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{
- dir = 4
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"vlF" = (
/obj/item/coin/silver,
/obj/effect/decal/cleanable/oil{
@@ -60669,20 +60904,6 @@
},
/turf/open/floor/plating,
/area/maintenance/department/engine)
-"voh" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 5
- },
-/obj/structure/lattice,
-/turf/open/space/basic,
-/area/space/nearstation)
-"vor" = (
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/obj/structure/cable/yellow{
- icon_state = "1-2"
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
"vpz" = (
/obj/structure/girder,
/turf/open/floor/plating{
@@ -60700,31 +60921,6 @@
},
/turf/open/floor/plating,
/area/maintenance/department/cargo)
-"vsw" = (
-/obj/machinery/camera{
- c_tag = "Engineering Supermatter Starboard";
- dir = 8;
- network = list("ss13","engine")
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"vsG" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/obj/machinery/door/airlock/maintenance{
- name = "Research Lab Maintenance";
- req_access_txt = "0";
- req_one_access_txt = "7;29"
- },
-/turf/open/floor/plating,
-/area/maintenance/department/engine)
"vsJ" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/effect/turf_decal/tile/neutral{
@@ -60758,6 +60954,13 @@
/obj/item/clothing/mask/gas,
/turf/open/floor/plating,
/area/maintenance/department/science)
+"vvr" = (
+/obj/effect/spawner/structure/window/plasma/reinforced,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
"vxp" = (
/obj/machinery/door/window/eastright{
base_state = "left";
@@ -60771,17 +60974,12 @@
/obj/item/assembly/mousetrap,
/turf/open/floor/engine,
/area/science/explab)
-"vxr" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/light{
- dir = 4;
- light_color = "#e8eaff"
- },
-/obj/effect/turf_decal/stripes/line{
+"vyN" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/turf/open/floor/plasteel,
-/area/engine/engineering)
+/turf/closed/wall/r_wall,
+/area/crew_quarters/heads/hor)
"vzz" = (
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/public/glass{
@@ -60792,15 +60990,6 @@
},
/turf/open/floor/plasteel,
/area/crew_quarters/fitness/recreation)
-"vzA" = (
-/obj/machinery/light{
- dir = 8
- },
-/obj/effect/turf_decal/tile/blue{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/hallway/primary/aft)
"vzP" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plating,
@@ -60831,19 +61020,6 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/plating,
/area/maintenance/department/security/brig)
-"vBE" = (
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 4
- },
-/obj/machinery/light{
- dir = 1;
- light_color = "#d1dfff"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"vCC" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -60869,16 +61045,36 @@
},
/turf/open/floor/plating,
/area/maintenance/department/security/brig)
-"vKq" = (
-/obj/machinery/door/firedoor,
-/obj/structure/sign/poster/official/random{
+"vIn" = (
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 6
+ },
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"vIU" = (
+/obj/structure/transit_tube/horizontal,
+/obj/structure/sign/departments/holy{
pixel_x = -32
},
-/obj/effect/turf_decal/tile/blue{
+/turf/open/floor/plating,
+/area/hallway/secondary/entry)
+"vJS" = (
+/obj/structure/closet/radiation,
+/obj/effect/turf_decal/tile/yellow{
dir = 8
},
+/obj/effect/turf_decal/tile/yellow,
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
/turf/open/floor/plasteel,
-/area/hallway/primary/aft)
+/area/engine/engineering)
+"vMv" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel/dark,
+/area/chapel/main/monastery)
"vMx" = (
/obj/structure/disposalpipe/segment{
dir = 6
@@ -60888,6 +61084,19 @@
},
/turf/open/floor/plasteel/dark,
/area/science/xenobiology)
+"vMH" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 1
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"vMQ" = (
+/obj/structure/sign/warning/fire,
+/turf/closed/wall/r_wall,
+/area/engine/supermatter)
"vOw" = (
/obj/machinery/door/airlock/grunge{
name = "Library"
@@ -60902,6 +61111,13 @@
/obj/machinery/door/firedoor,
/turf/open/floor/plasteel/dark,
/area/library)
+"vPU" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
+ dir = 4
+ },
+/obj/effect/turf_decal/delivery,
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
"vRi" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
@@ -60970,16 +61186,20 @@
},
/turf/open/floor/plasteel/dark,
/area/science/mixing)
-"vVO" = (
-/obj/machinery/atmospherics/pipe/simple/orange/visible,
-/obj/structure/cable/yellow{
- icon_state = "2-8"
+"vYi" = (
+/obj/structure/cable{
+ icon_state = "4-8"
},
-/obj/effect/turf_decal/stripes/corner{
- dir = 1
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
},
-/turf/open/floor/engine,
-/area/engine/engineering)
+/obj/machinery/door/airlock/maintenance{
+ name = "Research Lab Maintenance";
+ req_access_txt = "0";
+ req_one_access_txt = "7;29"
+ },
+/turf/open/floor/plating,
+/area/maintenance/department/engine)
"vYN" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 8;
@@ -60989,22 +61209,16 @@
},
/turf/open/floor/circuit/telecomms,
/area/science/xenobiology)
-"wbB" = (
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 2;
- name = "External Gas to Loop"
+"waN" = (
+/obj/effect/spawner/lootdrop/maintenance{
+ lootcount = 3;
+ name = "3maintenance loot spawner"
},
-/obj/effect/turf_decal/delivery,
-/turf/open/floor/engine,
-/area/engine/engineering)
-"wbF" = (
-/obj/machinery/rnd/production/circuit_imprinter,
-/obj/machinery/camera{
- c_tag = "Engineering Starboard Aft";
- dir = 8
+/obj/structure/rack,
+/turf/open/floor/plating{
+ icon_state = "panelscorched"
},
-/turf/open/floor/plasteel,
-/area/engine/engineering)
+/area/maintenance/department/chapel/monastery)
"wcs" = (
/turf/open/floor/plasteel/dark,
/area/engine/engineering)
@@ -61041,24 +61255,10 @@
},
/turf/open/floor/plasteel,
/area/science/xenobiology)
-"wfG" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/turf/closed/wall/r_wall,
-/area/crew_quarters/heads/hor)
"wfO" = (
/mob/living/simple_animal/hostile/retaliate/poison/snake,
/turf/open/floor/plating,
/area/maintenance/department/engine)
-"wfP" = (
-/obj/machinery/atmospherics/pipe/manifold/cyan/visible,
-/obj/machinery/meter,
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"wig" = (
/obj/machinery/vending/cigarette,
/turf/open/floor/plating{
@@ -61073,22 +61273,14 @@
/turf/open/floor/plating,
/area/maintenance/department/engine)
"wjm" = (
-/obj/structure/cable{
+/obj/machinery/atmospherics/pipe/manifold/cyan/visible,
+/obj/structure/cable/yellow{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
- dir = 4
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
},
-/obj/effect/turf_decal/tile/yellow{
- dir = 1
- },
-/obj/effect/turf_decal/tile/yellow{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
- dir = 1
- },
-/turf/open/floor/plasteel,
+/turf/open/floor/engine,
/area/engine/engineering)
"wkZ" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
@@ -61117,6 +61309,27 @@
},
/turf/open/floor/plasteel/white,
/area/science/explab)
+"wlZ" = (
+/obj/machinery/light/small,
+/turf/open/floor/plating{
+ icon_state = "panelscorched"
+ },
+/area/maintenance/department/chapel/monastery)
+"wmA" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/open/floor/plasteel/white,
+/area/hallway/secondary/entry)
+"wnw" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/aft)
"wnJ" = (
/obj/structure/sign/warning,
/turf/closed/wall,
@@ -61150,6 +61363,17 @@
},
/turf/open/floor/wood,
/area/lawoffice)
+"wsx" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/light{
+ dir = 4;
+ light_color = "#e8eaff"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
"wun" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -61177,6 +61401,9 @@
},
/turf/open/floor/plating,
/area/maintenance/department/security/brig)
+"wwK" = (
+/turf/open/floor/plasteel/white,
+/area/hallway/secondary/entry)
"wxb" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -61224,15 +61451,21 @@
},
/turf/open/floor/plating,
/area/maintenance/department/crew_quarters/bar)
-"wDl" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/effect/turf_decal/stripes/corner,
-/turf/open/floor/plasteel,
-/area/engine/engineering)
"wDm" = (
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plating,
/area/maintenance/department/security/brig)
+"wDH" = (
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "engsm";
+ name = "Radiation Chamber Shutters"
+ },
+/obj/item/tank/internals/plasma,
+/turf/open/floor/plating,
+/area/engine/supermatter)
"wDZ" = (
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
dir = 1
@@ -61260,18 +61493,6 @@
},
/turf/open/floor/plating,
/area/maintenance/department/science)
-"wHI" = (
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 9
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
-"wIo" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple,
-/obj/structure/lattice,
-/turf/open/space/basic,
-/area/space/nearstation)
"wIv" = (
/obj/machinery/power/apc/highcap/five_k{
dir = 8;
@@ -61306,12 +61527,6 @@
},
/turf/open/floor/plating,
/area/crew_quarters/heads/cmo)
-"wLK" = (
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
"wMF" = (
/obj/effect/spawner/lootdrop/three_course_meal,
/obj/effect/spawner/lootdrop/three_course_meal,
@@ -61327,10 +61542,6 @@
/obj/structure/grille,
/turf/open/floor/plating,
/area/maintenance/department/engine)
-"wMX" = (
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/turf/open/floor/plating,
-/area/engine/supermatter)
"wNq" = (
/obj/structure/cable{
icon_state = "1-4"
@@ -61401,6 +61612,12 @@
},
/turf/open/floor/plating,
/area/maintenance/department/security/brig)
+"wSU" = (
+/obj/machinery/light{
+ dir = 8
+ },
+/turf/open/floor/plasteel/white,
+/area/hallway/secondary/entry)
"wTD" = (
/obj/structure/table/wood,
/obj/item/folder/red,
@@ -61443,6 +61660,16 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/central)
+"wXe" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/door/airlock/engineering/glass/critical{
+ heat_proof = 1;
+ name = "Supermatter Chamber";
+ req_access_txt = "10"
+ },
+/obj/effect/mapping_helpers/airlock/cyclelink_helper,
+/turf/open/floor/engine,
+/area/engine/supermatter)
"wXu" = (
/obj/machinery/disposal/bin,
/obj/structure/window/reinforced{
@@ -61460,10 +61687,6 @@
},
/turf/open/floor/plating,
/area/maintenance/department/security/brig)
-"wYK" = (
-/obj/machinery/power/supermatter_crystal/engine,
-/turf/open/floor/engine,
-/area/engine/supermatter)
"xah" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -61511,18 +61734,15 @@
/obj/structure/sign/warning/vacuum/external,
/turf/open/floor/plating,
/area/hallway/secondary/exit/departure_lounge)
-"xer" = (
-/obj/machinery/conveyor{
- dir = 1;
- id = "garbage"
- },
-/turf/open/floor/plating,
-/area/maintenance/disposal)
"xeB" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/structure/disposalpipe/segment,
/turf/open/floor/wood,
/area/lawoffice)
+"xgB" = (
+/obj/machinery/atmospherics/pipe/simple/orange/visible,
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
"xgG" = (
/obj/effect/turf_decal/stripes/line{
dir = 5
@@ -61547,12 +61767,11 @@
dir = 1
},
/area/hallway/secondary/exit/departure_lounge)
-"xhI" = (
-/obj/structure/cable/yellow{
- icon_state = "2-4"
- },
-/turf/open/floor/plasteel,
-/area/engine/engineering)
+"xiY" = (
+/obj/structure/lattice,
+/obj/structure/lattice,
+/turf/open/space/basic,
+/area/space/nearstation)
"xja" = (
/obj/machinery/light/small{
dir = 4
@@ -61600,10 +61819,34 @@
},
/turf/open/floor/plasteel/dark,
/area/science/xenobiology)
+"xkf" = (
+/obj/effect/landmark/carpspawn,
+/obj/structure/lattice,
+/turf/open/space/basic,
+/area/space)
+"xkL" = (
+/obj/structure/table,
+/obj/item/clothing/suit/hooded/wintercoat/engineering,
+/obj/item/clothing/glasses/meson,
+/obj/item/clothing/glasses/meson,
+/obj/item/clothing/glasses/meson,
+/obj/effect/turf_decal/delivery,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
"xlA" = (
/obj/machinery/door/airlock/maintenance/abandoned,
/turf/open/floor/plating,
/area/maintenance/department/science)
+"xlY" = (
+/obj/effect/landmark/xeno_spawn,
+/turf/open/floor/plating{
+ icon_state = "platingdmg1"
+ },
+/area/maintenance/department/chapel/monastery)
"xmp" = (
/obj/machinery/door/firedoor,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
@@ -61658,6 +61901,20 @@
/obj/item/broken_bottle,
/turf/open/floor/plating,
/area/maintenance/solars/port)
+"xuW" = (
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple,
+/obj/structure/lattice/catwalk,
+/turf/open/space/basic,
+/area/space/nearstation)
+"xvK" = (
+/obj/structure/reflector/single/anchored{
+ dir = 6
+ },
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
"xvO" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
@@ -61715,6 +61972,10 @@
icon_state = "panelscorched"
},
/area/maintenance/department/security/brig)
+"xyT" = (
+/obj/machinery/light/small,
+/turf/open/floor/plating,
+/area/maintenance/department/chapel/monastery)
"xzp" = (
/obj/effect/turf_decal/tile/blue,
/obj/effect/turf_decal/tile/blue{
@@ -61722,13 +61983,6 @@
},
/turf/open/floor/plasteel/dark,
/area/science/xenobiology)
-"xzR" = (
-/obj/machinery/atmospherics/pipe/manifold/cyan/visible,
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"xCV" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/cable{
@@ -61813,13 +62067,6 @@
/obj/structure/disposalpipe/junction/flip,
/turf/open/space/basic,
/area/space/nearstation)
-"xNy" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"xOC" = (
/obj/machinery/door/airlock/external{
name = "Construction Zone";
@@ -61862,6 +62109,12 @@
},
/turf/open/floor/plasteel,
/area/hallway/secondary/exit/departure_lounge)
+"xVT" = (
+/obj/machinery/atmospherics/pipe/simple/orange/visible{
+ dir = 9
+ },
+/turf/open/floor/plasteel,
+/area/engine/atmos)
"xWl" = (
/obj/item/pen,
/obj/item/paper_bin{
@@ -61873,6 +62126,10 @@
},
/turf/open/floor/plasteel,
/area/science/xenobiology)
+"xXh" = (
+/obj/effect/spawner/structure/window/reinforced,
+/turf/open/floor/plating,
+/area/maintenance/department/chapel/monastery)
"ybX" = (
/obj/structure/table,
/obj/effect/spawner/lootdrop/maintenance,
@@ -61910,6 +62167,21 @@
},
/turf/open/floor/plating,
/area/maintenance/department/cargo)
+"yjy" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/machinery/light{
+ dir = 8;
+ light_color = "#e8eaff"
+ },
+/turf/open/floor/plasteel/dark,
+/area/engine/engineering)
+"ykV" = (
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/orange/visible,
+/turf/open/floor/plasteel,
+/area/engine/atmos)
"ymb" = (
/obj/machinery/camera{
c_tag = "Engineering Telecomms Access";
@@ -75971,7 +76243,7 @@ cfN
bOw
bOw
bOw
-bOw
+bQg
bOw
ccu
cbG
@@ -76228,7 +76500,7 @@ bOw
bOw
bOw
bOw
-bOw
+bQg
bUC
bOw
cbG
@@ -76480,12 +76752,12 @@ bOv
bNs
bNs
bWh
-bOw
-bOw
-bOw
-bOw
-bOw
-bOw
+bQg
+bQg
+bQg
+bQg
+bQg
+bQg
bOw
bOw
cbG
@@ -76736,7 +77008,7 @@ bQQ
bNs
bNs
bQe
-bOw
+bQg
bOw
bOw
bOw
@@ -76993,7 +77265,7 @@ bNs
bNs
bOw
bOw
-bOw
+bQg
bOw
bOw
bOw
@@ -77250,7 +77522,7 @@ bOw
bOw
bOw
bOw
-bOw
+bQg
bOw
bOw
bOw
@@ -77507,7 +77779,7 @@ bOw
bOw
bOw
bOw
-bOw
+bQg
bOw
bOw
bUC
@@ -77524,7 +77796,7 @@ ctL
cgg
cfE
cfE
-cfp
+cua
cfE
cuW
cfE
@@ -77763,8 +78035,8 @@ bOw
bOw
bOw
bOw
-bOw
-bOw
+bQg
+bQg
bOw
bWV
bWV
@@ -78020,7 +78292,7 @@ bOw
bOw
bOw
bOw
-bOw
+bQg
bOw
bOw
bWV
@@ -78277,7 +78549,7 @@ bOw
bQd
bOw
bQd
-bOw
+bQg
bQd
bWV
bWV
@@ -78534,7 +78806,7 @@ bOw
bQe
bOw
bOw
-bOw
+bQg
bQe
bWV
bXJ
@@ -78794,7 +79066,7 @@ bQf
bQf
bQf
bWW
-bXI
+vMv
bZn
bZn
bZn
@@ -79036,10 +79308,10 @@ bGG
bHL
bIW
bKc
-bOy
+cqI
bMt
bLn
-bOy
+cqI
bPo
bQg
bQg
@@ -79305,7 +79577,7 @@ bOw
bQe
bOw
bOw
-bOw
+bQg
bQe
bWV
bXJ
@@ -79562,7 +79834,7 @@ bOw
bQd
bOw
bQd
-bOw
+bQg
bWi
bWV
bWV
@@ -79789,7 +80061,7 @@ aaa
aaa
aaa
aaa
-aaa
+btK
aaa
aaa
aaa
@@ -79819,7 +80091,7 @@ bOw
bOw
bOw
bOw
-bOw
+bQg
bOw
bOw
bWV
@@ -80044,9 +80316,9 @@ aaa
aaa
aaa
aaa
-aZx
-aZx
-aZx
+iaZ
+bsl
+btL
aZx
aaa
aaa
@@ -80060,11 +80332,11 @@ aaa
aaa
aaa
aaa
-aaa
-bGI
+irs
+aqG
bGE
bKf
-bLn
+gvO
bMw
bNy
bNw
@@ -80076,7 +80348,7 @@ bOw
bSm
bOw
bOw
-bOw
+bQg
bOw
bOw
bWV
@@ -80301,9 +80573,9 @@ aaa
aaa
aaa
aaa
+iaZ
aZx
-baJ
-bon
+bcX
aZx
aaa
aaa
@@ -80316,12 +80588,12 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-bGI
+irs
+irs
+aqG
bGE
-bKg
-bLn
+bKf
+gvO
bMx
bNz
bHM
@@ -80333,7 +80605,7 @@ bOw
bOw
bOw
bOw
-bOw
+bQg
bOw
bOw
bOw
@@ -80348,7 +80620,7 @@ ccJ
cdw
cel
ceM
-cfp
+cua
cfE
cfE
chn
@@ -80559,8 +80831,8 @@ aaa
jzz
aZx
jzz
-baK
-bon
+bsl
+btM
aZx
aaa
aaa
@@ -80572,17 +80844,17 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-bGI
-bHM
-bGE
+irs
+irs
+irs
+aqG
bGE
+jOX
+beT
bHM
bNA
bHM
-abI
+bSZ
bQi
bQR
bNs
@@ -80590,7 +80862,7 @@ bNs
bOw
bOw
bOw
-bOw
+bQg
bOw
bOw
bOw
@@ -80615,8 +80887,8 @@ cvc
cho
cvk
cdx
-cvc
-cvM
+euN
+csS
cfm
cwe
fWv
@@ -80822,23 +81094,23 @@ aZx
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-bIY
-bIY
-bLs
-bMy
+mZE
+bVp
+bVp
+bVp
+bVp
+bVp
+gLn
+sTg
+gLn
+gLn
+eOA
+aZx
+llS
+kYR
+aZx
bNB
-bMy
+hRQ
abI
aby
abI
@@ -80847,15 +81119,15 @@ bNs
bNs
bNs
bOw
-bOw
-bOw
-bOw
-bOw
-bOw
-bOw
-bOw
-bOw
-bOw
+bQg
+bQg
+bQg
+bQg
+bQg
+bQg
+bQg
+bQg
+bQg
bQg
cbR
bXJ
@@ -80873,7 +81145,7 @@ ciF
cuQ
cfm
cfm
-cfm
+fwo
cfm
cwe
ckp
@@ -81079,29 +81351,29 @@ aZx
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aby
-aby
-aaa
-aaa
+bGI
+aZx
+aZx
+aZx
+aZx
+aZx
+aZx
+aZx
+aZx
+aZx
+aZx
+aZx
+llS
+sho
+aZx
amC
aaa
aht
aby
aby
abI
-bSn
-bSZ
+mfg
+sRH
cqS
bNs
bQe
@@ -81112,8 +81384,8 @@ bQg
bQg
bQg
bOw
-bOw
-ccL
+bQe
+bQg
bWV
csT
cen
@@ -81130,7 +81402,7 @@ chq
ciX
cfm
cfN
-cfN
+cwA
cfN
cwe
cwe
@@ -81336,21 +81608,21 @@ aZx
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+bGI
+aZx
+jkm
+tpX
+iHI
+iHI
+iHI
+tpX
+iHI
+hWa
+wwK
+wSU
+llS
+wmA
+aZx
amB
aht
aht
@@ -81359,7 +81631,7 @@ aaa
abI
abI
abI
-abI
+sRH
bNs
bNs
bNs
@@ -81370,7 +81642,7 @@ bXL
bNs
bOw
bOw
-bOw
+bQg
bWV
csU
bWV
@@ -81387,7 +81659,7 @@ chr
chL
cfm
cfN
-cfN
+xyT
cfN
cfN
cfN
@@ -81593,21 +81865,21 @@ aZx
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+bGI
+aZx
+oto
+wwK
+wwK
+wwK
+uAL
+vbQ
+vbQ
+vbQ
+vbQ
+vbQ
+vbQ
+pga
+aZx
amC
aaa
aht
@@ -81617,7 +81889,7 @@ aaa
aaa
abI
aaa
-aaa
+sOQ
bQR
bNs
bNs
@@ -81627,7 +81899,7 @@ bXM
bNs
bOw
bOw
-bOw
+bQg
bOw
ccM
cdD
@@ -81644,7 +81916,7 @@ chs
ciY
cfm
cfN
-cfN
+cwA
cfN
cfN
cfN
@@ -81850,21 +82122,21 @@ aZx
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+bGI
+aZx
+oto
+wwK
+aZx
+aZx
+aZx
+aZx
+aZx
+aZx
+aZx
+aZx
+aZx
+aZx
+aZx
amB
aht
aht
@@ -81884,12 +82156,12 @@ bXN
bNs
bOw
bOw
-bOw
-bOw
-bOw
-bQe
-bOw
-bOw
+bQg
+bQg
+bQg
+bQg
+bQg
+bQg
cfL
cfm
cfm
@@ -81901,7 +82173,7 @@ cht
cfm
cfm
cfN
-cfN
+cwA
cfN
cfN
cfN
@@ -82107,21 +82379,21 @@ aZx
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+aqG
+aZx
+oto
+wwK
+aZx
+irs
+irs
+irs
+irs
+irs
+irs
+irs
+irs
+irs
+irs
amD
aaa
aht
@@ -82144,10 +82416,10 @@ bOw
bUC
bOw
bOw
-bOw
+bQe
bOw
bUC
-cfM
+bQg
cfm
cgO
chu
@@ -82158,7 +82430,7 @@ chu
ciZ
cfm
cfN
-cfN
+cwA
cfN
cfN
cfN
@@ -82363,12 +82635,12 @@ bon
aZx
aaa
aaa
-btK
-aaa
-aaa
-aaa
-aaa
-aaa
+irs
+aqG
+aZx
+oto
+wwK
+aZx
bBV
bDf
bDf
@@ -82415,8 +82687,8 @@ cfm
cfm
cfm
cfN
-cfN
-cfN
+cwA
+cjm
cfN
cfN
cfN
@@ -82619,16 +82891,16 @@ bnp
bon
aZx
aZx
-bsl
-btL
aZx
-aaa
-aaa
-aaa
+aZx
+aZx
+aZx
+oto
+kvx
bAI
-bBW
+qbV
abI
-aaa
+irs
abI
aaa
bva
@@ -82654,11 +82926,11 @@ abI
ahi
bSZ
crO
-crO
-crO
-crO
-crO
-crO
+arF
+arF
+arF
+arF
+arF
crO
crO
crO
@@ -82672,8 +82944,8 @@ cfN
cfN
cfN
cfN
-cfN
-cfN
+wlZ
+cjm
cfN
cfN
aaa
@@ -82806,7 +83078,7 @@ aeU
afo
afG
aeU
-eSB
+gHy
agy
agL
agZ
@@ -82876,12 +83148,12 @@ bnp
baK
bbR
bbR
+bbR
+bbR
+bbR
aZx
-bcX
-aZx
-aYG
-aZx
-aYG
+rHv
+saW
bAJ
bBX
bBX
@@ -82929,9 +83201,9 @@ cfN
cfN
cfN
cfN
-cfN
-cfN
-aaa
+uaa
+cjm
+irs
aaa
aaa
aaa
@@ -83133,13 +83405,13 @@ bnq
baM
baK
baK
-bsl
-btM
+baK
+baK
+baK
aZx
-aYG
bxY
bzz
-bAK
+vIU
bBX
bDg
bEj
@@ -83173,23 +83445,23 @@ caZ
cbS
ccN
bIZ
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cjm
+cjm
+cjm
+cjm
+cjm
+cjm
+cjm
+cjm
+cjm
cfN
cfN
cfN
cfN
-aaa
-aaa
-aaa
-aaa
+uBu
+cjm
+cjm
+irs
aaa
aaa
aaa
@@ -83320,7 +83592,7 @@ lGp
aeU
afI
aeU
-jXF
+dUk
agy
agN
agY
@@ -83429,24 +83701,24 @@ bIZ
cba
cbT
bDi
-bIZ
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cQZ
+cwA
+cwA
+cwA
+cwA
+lqo
+cwA
+cwA
+cwA
+cwA
+uaa
+ovE
+uaa
+uBu
+xlY
+ezo
+cjm
+aht
aaa
aaa
aaa
@@ -83687,23 +83959,23 @@ cbb
bDi
ccO
bIZ
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cjm
+cjm
+xXh
+xXh
+cjm
+cjm
+cjm
+xXh
+xXh
+cjm
+cjm
+cjm
+cjm
+waN
+dzA
+cjm
+aht
aaa
aaa
aaa
@@ -83944,23 +84216,23 @@ bva
bNK
bva
bva
-aaa
-cFB
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+irs
+xkf
+dRs
+dRs
+aht
+aht
+mau
+fon
+fon
+aht
+aht
+aht
+cjm
+cjm
+cjm
+cjm
+aht
aaa
aaa
aaa
@@ -84213,11 +84485,11 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+dRs
+dRs
+irs
+irs
+xiY
aaa
aaa
aaa
@@ -88824,9 +89096,9 @@ eQN
tcY
cam
cam
-sjC
+cdI
bXk
-mci
+eVW
cbX
ceq
mhl
@@ -89081,7 +89353,7 @@ bpL
fQf
cbW
cbd
-cdI
+gaQ
cri
cbX
cbX
@@ -90619,9 +90891,9 @@ bXh
bXZ
bYK
bZz
-nAY
+sAF
cbd
-nRM
+fGt
cam
cdM
bXq
@@ -90631,8 +90903,8 @@ cfQ
bXk
qWG
bXk
-paU
-dSp
+tAv
+pPu
cdm
aaa
aht
@@ -90884,22 +91156,22 @@ qtO
bXk
bXk
bXk
-svA
-mjK
-mjK
-mjK
-wHI
-eyj
-eyj
+fbu
+nQf
+nQf
+nQf
+cgt
+oge
+oge
bXk
-shH
-shH
-shH
-shH
-shH
-shH
-shH
-shH
+uER
+uER
+uER
+uER
+uER
+uER
+uER
+uER
fon
fon
mau
@@ -91131,23 +91403,23 @@ bVH
bWr
bXj
qGZ
-bYQ
+bYM
bZD
caj
cbf
ccb
cah
cdO
-ioF
+jOw
ceX
-qOS
+ocy
cfS
fFv
-fmL
-gXZ
-kmd
-lXJ
-lXJ
+yjy
+nIq
+mAi
+abD
+abD
bXk
aaa
aht
@@ -91400,10 +91672,10 @@ mwG
nAs
cfT
wcs
-ggg
+upg
qbp
qbp
-gEo
+hUi
dMG
bXk
aaa
@@ -91647,14 +91919,14 @@ bXk
bYc
bYO
bZA
-xhI
+dlI
cbh
cbh
cbh
cbh
cbh
-hjD
-vor
+nNn
+mvA
cfU
tIS
iCs
@@ -91904,21 +92176,21 @@ bXk
bYd
bYP
bZF
-rTd
-wDl
-vxr
-irM
-irM
+uZs
+lDW
+wsx
+uwT
+uwT
qFu
cet
ulY
cfV
cgu
cgU
-izm
+kNK
chw
-eyj
-jzE
+oge
+eMz
bXk
bXk
bXk
@@ -92159,31 +92431,31 @@ bVK
bWu
bXk
bYe
-bYQ
+bYM
bZA
can
cbi
ccc
-eyj
+oge
cdR
-tQT
+vvr
bXk
bXk
-sWW
+oBY
cgv
-lXb
+ndf
cgv
uaP
cgv
-ukp
+ikm
cgV
cgv
cgv
-gQf
+gkN
bXk
aht
fon
-shH
+uER
fon
aaa
aaa
@@ -92420,27 +92692,27 @@ bYR
bZA
can
cbj
-eyj
+oge
cbX
wcs
iyJ
cfa
-eyj
+oge
twv
-hoS
+pJx
sWj
dnS
-hSC
-jTU
-fZK
-pgH
-pgH
+rEt
+mZK
+nqW
+pBs
+pBs
uRk
ciG
bXk
aaa
fon
-shH
+uER
fon
aaa
aaa
@@ -92676,7 +92948,7 @@ bYf
bYS
bZA
can
-qpS
+eue
ccd
ccX
ccX
@@ -92684,20 +92956,20 @@ ceu
cbX
cfu
tlN
-ncm
+pIk
cCI
uoq
-hQy
+wDH
chA
meF
-oKv
-wbB
-xzR
+oTD
+uWe
+dHF
hQC
bXk
aht
fon
-shH
+uER
fon
aht
aaa
@@ -92898,7 +93170,7 @@ bmz
bnG
boN
bpW
-dHZ
+brk
bsK
buk
bvs
@@ -92934,27 +93206,27 @@ bYT
bZB
caq
cbk
-eyj
+oge
ccY
cdT
ccY
cbX
-eyj
-vlC
-iej
-qeY
+oge
+jQn
+sQV
+dFF
fyO
fyO
fyO
-qeY
-oKv
-wbB
-wfP
+dFF
+oTD
+uWe
+dGd
hQC
bXk
aaa
fon
-shH
+uER
fon
aaa
aaa
@@ -93190,28 +93462,28 @@ bYh
bYU
bZE
car
-mgz
-eyj
+sdZ
+oge
cbX
wcs
wcs
cfd
bXk
tlN
-ncm
-lUO
+pIk
+obl
mpd
-hKp
-hKp
+peb
+peb
cit
-qeY
-puw
-vBE
+dFF
+vMQ
+gih
hQC
bXk
aht
fon
-shH
+uER
fon
aaa
aaa
@@ -93412,7 +93684,7 @@ bkh
bkh
boN
bpW
-brk
+dVt
bsM
bum
bvt
@@ -93453,22 +93725,22 @@ cda
wcs
wcs
wcs
-eyj
-eAH
-lnr
-qeY
-fBZ
-fBZ
-fBZ
+oge
+oFi
+wjm
+dFF
+uQa
+uQa
+uQa
cgY
ciI
-tdL
-dHr
+mZV
+obG
hQC
bXk
aaa
fon
-shH
+uER
fon
aaa
aaa
@@ -93649,7 +93921,7 @@ aSS
aUg
aVf
aWi
-mjn
+eyT
aYe
aZb
bag
@@ -93672,8 +93944,8 @@ bpV
brm
bsN
bun
-gGA
-bwW
+mcf
+nnf
byA
bAi
bpY
@@ -93702,30 +93974,30 @@ bWz
bVN
bYf
bYW
-oWu
+hDy
cam
-vli
+cxj
ckJ
cey
cdW
wcs
cdW
-eyj
-kTR
-mEu
-wMX
-dFJ
-wYK
-dFJ
-uzh
-nUQ
-fym
-hon
+oge
+vPU
+eux
+kDI
+fWE
+nyN
+fWE
+wXe
+iTE
+mlS
+jTc
hQC
bXk
aht
fon
-shH
+uER
fon
aaa
aaa
@@ -93929,12 +94201,12 @@ bpY
bpY
bpY
bpY
-pxD
-jZG
+gGA
+bwW
bpY
bpY
bpY
-vsG
+vYi
bva
bva
bva
@@ -93961,28 +94233,28 @@ bUT
bYX
bZA
cam
-lfx
+xkL
bXk
-pCo
+xvK
wcs
wcs
-tlV
-eyj
-qkM
-miw
-qeY
+kBe
+oge
+mlx
+gUS
+dFF
prQ
prQ
prQ
-dgj
-psd
-fxC
+nPW
+mvY
+sfr
dZj
hQC
bXk
aaa
fon
-shH
+uER
fon
aaa
aaa
@@ -94182,17 +94454,17 @@ bls
aBI
aBI
bmB
-vKq
-nTr
-gDR
-vzA
+tcC
+qWB
+iHe
+qbm
bvu
-hIZ
-tqO
-mqp
-cKV
-iwe
-qTV
+wnw
+cep
+ePS
+nhW
+rGz
+rPd
xDj
blt
jCv
@@ -94215,31 +94487,31 @@ bVO
bWA
mCe
bYj
-bYQ
+bYM
bZA
cam
-mgz
-eyj
+sdZ
+oge
cbX
wcs
wcs
-dEy
+hxh
bXk
tlN
-ncm
-puw
+pIk
+vMQ
fyF
cZt
cZt
-fjD
-qeY
-iTF
-slJ
+hUf
+dFF
+mLc
+lmv
hQC
bXk
aht
fon
-shH
+uER
fon
aaa
aaa
@@ -94447,11 +94719,11 @@ gkS
tTl
tTl
tTl
-koz
+qUe
dgg
phJ
phJ
-lJI
+lCY
bAk
bIt
bJB
@@ -94472,31 +94744,31 @@ bVP
bWB
mCe
bYk
-wjm
+bYQ
bZF
cbm
-mgz
-eyj
-oHa
-oHa
+sdZ
+oge
+rwf
+rwf
eWi
cbX
-eyj
-vlC
+oge
+jQn
cgx
-qeY
+dFF
fyO
fyO
fyO
-qeY
+dFF
cBS
cjt
-kaR
+mCP
hQC
bXk
aaa
fon
-shH
+uER
fon
aht
aaa
@@ -94696,19 +94968,19 @@ blu
aDZ
aDZ
bjm
-mhn
+nKF
cqi
cqi
cqi
cqi
cqi
-imE
-kYM
-mfC
+erV
+rMt
+ksC
fdQ
bmD
bmD
-eRp
+jrb
bAl
bIu
bJC
@@ -94732,28 +95004,28 @@ bYl
bYO
bZA
cam
-lrM
+lCR
ccd
-cAQ
-cAQ
-cLw
+mlb
+mlb
+mbD
cbX
cfu
jBn
-oxw
+ptk
meF
chA
chA
woh
cCI
cBS
-iLh
+rwt
liR
hQC
bXk
aht
fon
-shH
+uER
fon
aaa
aaa
@@ -94956,18 +95228,18 @@ bKM
cCl
cCl
cCl
-tJr
-tzH
-tzH
+vfn
+ufx
+ufx
byD
bAm
dhz
-uxP
+nkk
bDA
bEQ
bGa
-bHp
-sYQ
+bHg
+mVj
bJD
bBo
bBo
@@ -94990,27 +95262,27 @@ bYY
bZA
cam
cbn
-eyj
+oge
cbX
wcs
cfP
cff
-eyj
+oge
cfX
-vVO
-iop
+kvu
+gHp
kWQ
-oXq
-qpd
-tkL
-tOD
-tOD
-ikO
+iSi
+ona
+kec
+ngg
+ngg
+cUT
hQC
bXk
aaa
fon
-shH
+uER
fon
aaa
aaa
@@ -95211,14 +95483,14 @@ bmC
cqi
boP
bqb
-pYw
+brp
gFo
cSK
duF
-bxa
+oxt
byE
bBp
-wfG
+vyN
bBp
bBp
bBp
@@ -95248,22 +95520,22 @@ bZG
cax
cbo
ccc
-eyj
+oge
cdR
-oJr
+uDr
bXq
bXq
cfY
-xNy
-smv
-xNy
-hGB
-hSt
+hrx
+sHX
+hrx
+hXm
+jjA
civ
civ
-vsw
-qRl
-oKJ
+jtv
+ppi
+oyE
bXk
aht
fon
@@ -95505,19 +95777,19 @@ bZF
cal
cbp
cci
-kTj
-kTj
-qhE
-loz
-frj
-lRX
-eyj
-uIB
-eyj
-eyj
-uIB
-eyj
-eyj
+dPZ
+dPZ
+vMH
+vJS
+vIn
+ttX
+oge
+dGp
+oge
+oge
+dGp
+oge
+oge
bXk
bXk
bXk
@@ -95757,24 +96029,24 @@ bVU
bWG
bXq
bYo
-hXK
+tzh
bZI
-hXK
+tzh
cbq
cbd
cam
cam
cam
-haA
-aKm
-upc
-wIo
-hyh
-upc
-voh
-pBJ
-wIo
-voh
+mCU
+cOA
+gfh
+vdb
+rAZ
+gfh
+tMA
+puO
+vdb
+tMA
cdm
aaa
aaa
@@ -96015,23 +96287,23 @@ bWH
bXk
bTE
bZc
-ueX
+nif
cCU
bZJ
-wbF
+mdi
cCV
ceb
-epV
-qLI
-aKm
-eiV
-upc
-dsz
-eiV
-eiV
-uaO
-voh
-eiV
+qPh
+sKw
+cOA
+sQG
+gfh
+eqM
+sQG
+sQG
+dhu
+tMA
+sQG
cdm
aaa
aaa
@@ -96271,29 +96543,29 @@ bJN
bJN
bJN
bJN
-frj
-pYh
-pYh
-pYh
-pYh
-pYh
-pYh
-pYh
-pYh
-hUw
-nqu
-nsJ
-gBb
-nsJ
-nsJ
-gBb
-nsJ
-nsJ
-dsz
+vIn
+xgB
+xgB
+xgB
+xgB
+xgB
+xgB
+xgB
+xgB
+fml
+mfx
+hJO
+dAa
+hJO
+hJO
+dAa
+hJO
+hJO
+eqM
aht
aht
fon
-shH
+uER
fon
aaa
aaa
@@ -96528,7 +96800,7 @@ bVV
bWI
bXr
bKQ
-udl
+vgX
bZK
abI
abI
@@ -96537,20 +96809,20 @@ abI
aaa
aaa
aaa
-uaO
-wIo
-nsJ
-gBb
-nsJ
-nsJ
-gBb
-nsJ
-nsJ
-hyh
+dhu
+vdb
+hJO
+dAa
+hJO
+hJO
+dAa
+hJO
+hJO
+rAZ
aaa
aaa
fon
-shH
+uER
fon
aaa
aaa
@@ -96785,7 +97057,7 @@ bQI
bWJ
bXs
bJN
-cui
+lxh
bJP
bJP
bJP
@@ -96794,20 +97066,20 @@ bJP
abI
abI
aht
-pBJ
-wIo
-nsJ
-gBb
-nsJ
-nsJ
-gBb
-nsJ
-nsJ
-dsz
+puO
+vdb
+hJO
+dAa
+hJO
+hJO
+dAa
+hJO
+hJO
+eqM
aht
aht
fon
-shH
+uER
fon
aaa
aaa
@@ -97022,7 +97294,7 @@ bCK
bDG
bEW
bAt
-bHg
+aIA
cqw
cqD
bKO
@@ -97042,7 +97314,7 @@ bMf
fuR
bXt
bYp
-eAZ
+jPC
bZL
caz
cbs
@@ -97051,20 +97323,20 @@ bJP
aaa
aaa
aaa
-uaO
-wIo
-nsJ
-gBb
-nsJ
-nsJ
-gBb
-nsJ
-nsJ
-hyh
+dhu
+vdb
+hJO
+dAa
+hJO
+hJO
+dAa
+hJO
+hJO
+rAZ
aaa
aaa
fon
-shH
+uER
fon
aaa
aaa
@@ -97299,7 +97571,7 @@ bVW
bWL
bXu
bLW
-cui
+lxh
bMi
caA
cbt
@@ -97308,20 +97580,20 @@ bJP
aaa
aaa
aaa
-pBJ
-swg
-hyh
-pBJ
-hyh
-pBJ
-hyh
-pBJ
-hyh
+puO
+xuW
+rAZ
+puO
+rAZ
+puO
+rAZ
+puO
+rAZ
cdm
aht
aht
fon
-shH
+uER
fon
aaa
aaa
@@ -97556,7 +97828,7 @@ bVX
bWM
bXv
bWc
-poP
+tmi
bZL
caB
cbs
@@ -97793,7 +98065,7 @@ bAt
bAt
bAu
bAu
-bHp
+bHg
cqx
bJJ
bKQ
@@ -97808,12 +98080,12 @@ bQI
bQI
bTM
bUs
-ljG
-hjk
-pmB
+cAp
+ykV
+ufr
bXw
-dJk
-tbw
+iSL
+lQy
bJP
bJP
bJP
@@ -98065,7 +98337,7 @@ bMf
bMf
bTN
bUt
-wLK
+flP
bOk
bWK
bXt
@@ -98321,8 +98593,8 @@ bRx
bQJ
bPQ
bTO
-ljG
-lhP
+cAp
+xVT
bOk
bWL
bXx
@@ -98336,21 +98608,21 @@ bJP
aaa
aaa
fon
-shH
-shH
-shH
-shH
-shH
-shH
-shH
-shH
-shH
-shH
+uER
+uER
+uER
+uER
+uER
+uER
+uER
+uER
+uER
+uER
fon
aaa
aht
-shH
-shH
+uER
+uER
fon
aaa
aaa
@@ -98578,7 +98850,7 @@ bPQ
bPQ
bPQ
bTP
-wLK
+flP
bVh
bVY
bWM
@@ -98606,7 +98878,7 @@ fon
fon
aaa
aht
-shH
+uER
fon
fon
aaa
@@ -98835,7 +99107,7 @@ bQK
bQK
bPQ
bTQ
-wLK
+flP
bKX
bOk
bWN
@@ -99092,7 +99364,7 @@ bRy
bSf
bSR
bTM
-wLK
+flP
bKX
bVZ
bWO
@@ -99349,7 +99621,7 @@ bRz
bMf
bSS
bTR
-tDE
+nYe
bKX
bWa
bMf
@@ -99806,7 +100078,7 @@ aHn
aIi
aJi
aKe
-klb
+kVA
aMi
aNJ
fwl
@@ -100844,7 +101116,7 @@ lAs
eeQ
aUs
aLf
-eex
+lfZ
aLf
aLf
aUl
@@ -101368,7 +101640,7 @@ bcA
bdF
beJ
bfB
-dps
+gaJ
aZv
aUC
biz
@@ -102105,7 +102377,7 @@ apX
apX
avl
fIu
-epj
+rTZ
aIh
azA
dbi
@@ -102639,7 +102911,7 @@ aNP
aPb
aNO
aNP
-tLP
+cRJ
aTq
aSk
aTm
@@ -107517,7 +107789,7 @@ aaa
aaa
aLn
aNT
-xer
+rax
aQo
aPg
aRu
@@ -107775,7 +108047,7 @@ aaa
aLm
aLm
aNU
-cyp
+hCg
dqY
aRv
sZh
@@ -108031,8 +108303,8 @@ aaa
aaa
aLm
aME
-eFG
-cyp
+aNV
+hCg
dqY
aRw
sqQ
@@ -108288,8 +108560,8 @@ aaa
aaa
aLo
aMF
-aNV
-cyp
+aNW
+hCg
cvf
aQn
sqQ
@@ -108546,8 +108818,8 @@ aaa
aLo
aMG
aNX
-cyp
-xer
+hCg
+rax
aRy
aSn
aSn
diff --git a/code/__DEFINES/citadel_defines.dm b/code/__DEFINES/citadel_defines.dm
index b71b7b8efa..6e21fbe06a 100644
--- a/code/__DEFINES/citadel_defines.dm
+++ b/code/__DEFINES/citadel_defines.dm
@@ -40,7 +40,7 @@
#define BALLS_SACK_SIZE_DEF 8
#define BALLS_SACK_SIZE_MAX 40
-#define CUM_RATE 5
+#define CUM_RATE 0.035
#define CUM_RATE_MULT 1
#define CUM_EFFICIENCY 1//amount of nutrition required per life()
@@ -115,22 +115,22 @@
//xenobio console upgrade stuff
#define XENOBIO_UPGRADE_MONKEYS 1
-#define XENOBIO_UPGRADE_SLIMEBASIC 2
+#define XENOBIO_UPGRADE_SLIMEBASIC 2
#define XENOBIO_UPGRADE_SLIMEADV 4
//stamina stuff
-#define STAMINA_SOFTCRIT 100 //softcrit for stamina damage. prevents standing up, prevents performing actions that cost stamina, etc, but doesn't force a rest or stop movement
-#define STAMINA_CRIT 140 //crit for stamina damage. forces a rest, and stops movement until stamina goes back to stamina softcrit
-#define STAMINA_SOFTCRIT_TRADITIONAL 0 //same as STAMINA_SOFTCRIT except for the more traditional health calculations
+#define STAMINA_SOFTCRIT 100 //softcrit for stamina damage. prevents standing up, prevents performing actions that cost stamina, etc, but doesn't force a rest or stop movement
+#define STAMINA_CRIT 140 //crit for stamina damage. forces a rest, and stops movement until stamina goes back to stamina softcrit
+#define STAMINA_SOFTCRIT_TRADITIONAL 0 //same as STAMINA_SOFTCRIT except for the more traditional health calculations
#define STAMINA_CRIT_TRADITIONAL -40 //ditto, but for STAMINA_CRIT
-#define MIN_MELEE_STAMCOST 1.25 //Minimum cost for swinging items around. Will be extra useful when stats and skills are introduced.
+#define MIN_MELEE_STAMCOST 1.25 //Minimum cost for swinging items around. Will be extra useful when stats and skills are introduced.
#define CRAWLUNDER_DELAY 30 //Delay for crawling under a standing mob
//Citadel toggles because bitflag memes
-#define MEDIHOUND_SLEEPER 1
-#define EATING_NOISES 2
-#define DIGESTION_NOISES 4
+#define MEDIHOUND_SLEEPER (1<<0)
+#define EATING_NOISES (1<<1)
+#define DIGESTION_NOISES (1<<2)
#define TOGGLES_CITADEL (EATING_NOISES|DIGESTION_NOISES)
diff --git a/code/__DEFINES/components.dm b/code/__DEFINES/components.dm
index 8d86826ac2..e01bf5669b 100644
--- a/code/__DEFINES/components.dm
+++ b/code/__DEFINES/components.dm
@@ -73,6 +73,8 @@
#define COMSIG_ATOM_CANREACH "atom_can_reach" //from internal loop in atom/movable/proc/CanReach(): (list/next)
#define COMPONENT_BLOCK_REACH 1
#define COMSIG_ATOM_SCREWDRIVER_ACT "atom_screwdriver_act" //from base of atom/screwdriver_act(): (mob/living/user, obj/item/I)
+#define COMSIG_ATOM_INTERCEPT_TELEPORT "intercept_teleport" //called when teleporting into a protected turf: (channel, turf/origin)
+ #define COMPONENT_BLOCK_TELEPORT 1
/////////////////
#define COMSIG_ATOM_ATTACK_GHOST "atom_attack_ghost" //from base of atom/attack_ghost(): (mob/dead/observer/ghost)
#define COMSIG_ATOM_ATTACK_HAND "atom_attack_hand" //from base of atom/attack_hand(): (mob/user)
diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm
index 73711fe02d..2ba1563001 100644
--- a/code/__DEFINES/misc.dm
+++ b/code/__DEFINES/misc.dm
@@ -455,6 +455,13 @@ GLOBAL_LIST_INIT(pda_reskins, list(PDA_SKIN_CLASSIC = 'icons/obj/pda.dmi', PDA_S
#define SUMMON_GUNS "guns"
#define SUMMON_MAGIC "magic"
+#define TELEPORT_CHANNEL_BLUESPACE "bluespace" //Classic bluespace teleportation, requires a sender but no receiver
+#define TELEPORT_CHANNEL_QUANTUM "quantum" //Quantum-based teleportation, requires both sender and receiver, but is free from normal disruption
+#define TELEPORT_CHANNEL_WORMHOLE "wormhole" //Wormhole teleportation, is not disrupted by bluespace fluctuations but tends to be very random or unsafe
+#define TELEPORT_CHANNEL_MAGIC "magic" //Magic teleportation, does whatever it wants (unless there's antimagic)
+#define TELEPORT_CHANNEL_CULT "cult" //Cult teleportation, does whatever it wants (unless there's holiness)
+#define TELEPORT_CHANNEL_FREE "free" //Anything else
+
//Run the world with this parameter to enable a single run though of the game setup and tear down process with unit tests in between
#define TEST_RUN_PARAMETER "test-run"
//Force the log directory to be something specific in the data/logs folder
diff --git a/code/__DEFINES/radio.dm b/code/__DEFINES/radio.dm
index 897d107939..928f364a81 100644
--- a/code/__DEFINES/radio.dm
+++ b/code/__DEFINES/radio.dm
@@ -1,5 +1,55 @@
// Radios use a large variety of predefined frequencies.
+//say based modes like binary are in living/say.dm
+
+#define RADIO_CHANNEL_COMMON "Common"
+#define RADIO_KEY_COMMON ";"
+
+#define RADIO_CHANNEL_SECURITY "Security"
+#define RADIO_KEY_SECURITY "s"
+#define RADIO_TOKEN_SECURITY ":s"
+
+#define RADIO_CHANNEL_ENGINEERING "Engineering"
+#define RADIO_KEY_ENGINEERING "e"
+#define RADIO_TOKEN_ENGINEERING ":e"
+
+#define RADIO_CHANNEL_COMMAND "Command"
+#define RADIO_KEY_COMMAND "c"
+#define RADIO_TOKEN_COMMAND ":c"
+
+#define RADIO_CHANNEL_SCIENCE "Science"
+#define RADIO_KEY_SCIENCE "n"
+#define RADIO_TOKEN_SCIENCE ":n"
+
+#define RADIO_CHANNEL_MEDICAL "Medical"
+#define RADIO_KEY_MEDICAL "m"
+#define RADIO_TOKEN_MEDICAL ":m"
+
+#define RADIO_CHANNEL_SUPPLY "Supply"
+#define RADIO_KEY_SUPPLY "u"
+#define RADIO_TOKEN_SUPPLY ":u"
+
+#define RADIO_CHANNEL_SERVICE "Service"
+#define RADIO_KEY_SERVICE "v"
+#define RADIO_TOKEN_SERVICE ":v"
+
+#define RADIO_CHANNEL_AI_PRIVATE "AI Private"
+#define RADIO_KEY_AI_PRIVATE "o"
+#define RADIO_TOKEN_AI_PRIVATE ":o"
+
+
+#define RADIO_CHANNEL_SYNDICATE "Syndicate"
+#define RADIO_KEY_SYNDICATE "t"
+#define RADIO_TOKEN_SYNDICATE ":t"
+
+#define RADIO_CHANNEL_CENTCOM "CentCom"
+#define RADIO_KEY_CENTCOM "y"
+#define RADIO_TOKEN_CENTCOM ":y"
+
+#define RADIO_CHANNEL_CTF_RED "Red Team"
+#define RADIO_CHANNEL_CTF_BLUE "Blue Team"
+
+
#define MIN_FREE_FREQ 1201 // -------------------------------------------------
// Frequencies are always odd numbers and range from 1201 to 1599.
diff --git a/code/__DEFINES/say.dm b/code/__DEFINES/say.dm
index 82fbfdb848..e655408db1 100644
--- a/code/__DEFINES/say.dm
+++ b/code/__DEFINES/say.dm
@@ -6,17 +6,43 @@
//Message modes. Each one defines a radio channel, more or less.
#define MODE_HEADSET "headset"
#define MODE_ROBOT "robot"
+
#define MODE_R_HAND "right hand"
+#define MODE_KEY_R_HAND "r"
+
#define MODE_L_HAND "left hand"
+#define MODE_KEY_L_HAND "l"
+
#define MODE_INTERCOM "intercom"
+#define MODE_KEY_INTERCOM "i"
+
#define MODE_BINARY "binary"
+#define MODE_KEY_BINARY "b"
+#define MODE_TOKEN_BINARY ":b"
+
#define MODE_WHISPER "whisper"
#define MODE_WHISPER_CRIT "whispercrit"
+
#define MODE_DEPARTMENT "department"
+#define MODE_KEY_DEPARTMENT "h"
+#define MODE_TOKEN_DEPARTMENT ":h"
+
+#define MODE_ADMIN "admin"
+#define MODE_KEY_ADMIN "p"
+
+#define MODE_DEADMIN "deadmin"
+#define MODE_KEY_DEADMIN "d"
+
#define MODE_ALIEN "alientalk"
#define MODE_HOLOPAD "holopad"
+
#define MODE_CHANGELING "changeling"
+#define MODE_KEY_CHANGELING "g"
+#define MODE_TOKEN_CHANGELING ":g"
+
#define MODE_VOCALCORDS "cords"
+#define MODE_KEY_VOCALCORDS "x"
+
#define MODE_MONKEY "monkeyhive"
//Spans. Robot speech, italics, etc. Applied in compose_message().
diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm
index 7bcb4881f0..e23d8dba76 100644
--- a/code/__DEFINES/traits.dm
+++ b/code/__DEFINES/traits.dm
@@ -128,6 +128,7 @@
#define TRAIT_HEAVY_SLEEPER "heavy_sleeper"
#define TRAIT_NIGHT_VISION "night_vision"
#define TRAIT_LIGHT_STEP "light_step"
+#define TRAIT_SILENT_STEP "silent_step"
#define TRAIT_SPEEDY_STEP "speedy_step"
#define TRAIT_SPIRITUAL "spiritual"
#define TRAIT_VORACIOUS "voracious"
diff --git a/code/controllers/subsystem/vote.dm b/code/controllers/subsystem/vote.dm
index f432e44b18..2f56c69384 100644
--- a/code/controllers/subsystem/vote.dm
+++ b/code/controllers/subsystem/vote.dm
@@ -87,17 +87,20 @@ SUBSYSTEM_DEF(vote)
/datum/controller/subsystem/vote/proc/announce_result()
var/list/winners = get_result()
var/text
+ var/was_roundtype_vote = mode == "roundtype"
if(winners.len > 0)
if(question)
text += "[question]"
else
text += "[capitalize(mode)] Vote"
- stored_gamemode_votes = list()
+ if(was_roundtype_vote)
+ stored_gamemode_votes = list()
for(var/i=1,i<=choices.len,i++)
var/votes = choices[choices[i]]
if(!votes)
votes = 0
- stored_gamemode_votes[choices[i]] = votes
+ if(was_roundtype_vote)
+ stored_gamemode_votes[choices[i]] = votes
text += "\n[choices[i]]: [obfuscated ? "???" : votes]" //CIT CHANGE - adds obfuscated votes
if(mode != "custom")
if(winners.len > 1 && !obfuscated) //CIT CHANGE - adds obfuscated votes
diff --git a/code/datums/action.dm b/code/datums/action.dm
index f64a549b29..fd33ef79b5 100644
--- a/code/datums/action.dm
+++ b/code/datums/action.dm
@@ -494,6 +494,7 @@
else
to_chat(owner, "Your hands are full!")
+//MGS Box
/datum/action/item_action/agent_box
name = "Deploy Box"
desc = "Find inner peace, here, in the box."
@@ -502,21 +503,27 @@
icon_icon = 'icons/mob/actions/actions_items.dmi'
button_icon_state = "deploy_box"
var/cooldown = 0
- var/obj/structure/closet/cardboard/agent/box
+ var/boxtype = /obj/structure/closet/cardboard/agent
+//Handles open and closing the box
/datum/action/item_action/agent_box/Trigger()
- if(!..())
+ . = ..()
+ if(!.)
return FALSE
- if(QDELETED(box))
- if(cooldown < world.time - 100)
- box = new(owner.drop_location())
- owner.forceMove(box)
- cooldown = world.time
- owner.playsound_local(box, 'sound/misc/box_deploy.ogg', 50, TRUE)
- else
- owner.forceMove(box.drop_location())
+ if(istype(owner.loc, /obj/structure/closet/cardboard/agent))
+ var/obj/structure/closet/cardboard/agent/box = owner.loc
+ owner.playsound_local(box, 'sound/misc/box_deploy.ogg', 50, TRUE)
+ box.open()
+ return
+ //Box closing from here on out.
+ if(!isturf(owner.loc)) //Don't let the player use this to escape mechs/welded closets.
+ to_chat(owner, "You need more space to activate this implant.")
+ return
+ if(cooldown < world.time - 100)
+ var/box = new boxtype(owner.drop_location())
+ owner.forceMove(box)
+ cooldown = world.time
owner.playsound_local(box, 'sound/misc/box_deploy.ogg', 50, TRUE)
- QDEL_NULL(box)
//Preset for spells
/datum/action/spell_action
diff --git a/code/datums/components/footstep.dm b/code/datums/components/footstep.dm
index bfcc49f453..e6c9f20de6 100644
--- a/code/datums/components/footstep.dm
+++ b/code/datums/components/footstep.dm
@@ -14,15 +14,18 @@
var/turf/open/T = get_turf(parent)
if(!istype(T))
return
-
+
var/mob/living/LM = parent
var/v = volume
var/e = e_range
if(!T.footstep || LM.buckled || LM.lying || !LM.canmove || LM.resting || LM.buckled || LM.throwing || LM.movement_type & (VENTCRAWLING | FLYING))
- if (LM.lying && !(!T.footstep || LM.movement_type & (VENTCRAWLING | FLYING))) //play crawling sound if we're lying
+ if (LM.lying && !LM.buckled && !(!T.footstep || LM.movement_type & (VENTCRAWLING | FLYING))) //play crawling sound if we're lying
playsound(T, 'sound/effects/footstep/crawl1.ogg', 15 * v)
return
-
+
+ if(HAS_TRAIT(LM, TRAIT_SILENT_STEP))
+ return
+
if(iscarbon(LM))
var/mob/living/carbon/C = LM
if(!C.get_bodypart(BODY_ZONE_L_LEG) && !C.get_bodypart(BODY_ZONE_R_LEG))
@@ -31,18 +34,18 @@
v /= 2
e -= 5
steps++
-
+
if(steps >= 3)
steps = 0
-
+
else
return
-
+
if(prob(80) && !LM.has_gravity(T)) // don't need to step as often when you hop around
return
-
+
//begin playsound shenanigans//
-
+
//for barefooted non-clawed mobs like monkeys
if(isbarefoot(LM))
playsound(T, pick(GLOB.barefootstep[T.barefootstep][1]),
@@ -50,19 +53,19 @@
TRUE,
GLOB.barefootstep[T.barefootstep][3] + e)
return
-
+
//for xenomorphs, dogs, and other clawed mobs
if(isclawfoot(LM))
if(isalienadult(LM)) //xenos are stealthy and get quieter footsteps
v /= 3
e -= 5
-
+
playsound(T, pick(GLOB.clawfootstep[T.clawfootstep][1]),
GLOB.clawfootstep[T.clawfootstep][2] * v,
TRUE,
GLOB.clawfootstep[T.clawfootstep][3] + e)
return
-
+
//for megafauna and other large and imtimidating mobs such as the bloodminer
if(isheavyfoot(LM))
playsound(T, pick(GLOB.heavyfootstep[T.heavyfootstep][1]),
@@ -70,12 +73,12 @@
TRUE,
GLOB.heavyfootstep[T.heavyfootstep][3] + e)
return
-
+
//for slimes
- if(isslime(LM))
+ if(isslime(LM))
playsound(T, 'sound/effects/footstep/slime1.ogg', 15 * v)
return
-
+
//for (simple) humanoid mobs (clowns, russians, pirates, etc.)
if(isshoefoot(LM))
if(!ishuman(LM))
@@ -87,17 +90,17 @@
if(ishuman(LM)) //for proper humans, they're special
var/mob/living/carbon/human/H = LM
var/feetCover = (H.wear_suit && (H.wear_suit.body_parts_covered & FEET)) || (H.w_uniform && (H.w_uniform.body_parts_covered & FEET))
-
+
if (H.dna.features["taur"] == "Naga" || H.dna.features["taur"] == "Tentacle") //are we a naga or tentacle taur creature
playsound(T, 'sound/effects/footstep/crawl1.ogg', 15 * v)
return
-
+
if(H.shoes || feetCover) //are we wearing shoes
playsound(T, pick(GLOB.footstep[T.footstep][1]),
GLOB.footstep[T.footstep][2] * v,
TRUE,
GLOB.footstep[T.footstep][3] + e)
-
+
if((!H.shoes && !feetCover)) //are we NOT wearing shoes
playsound(T, pick(GLOB.barefootstep[T.barefootstep][1]),
GLOB.barefootstep[T.barefootstep][2] * v,
diff --git a/code/datums/helper_datums/teleport.dm b/code/datums/helper_datums/teleport.dm
index 0623e2f5f9..4d1986cccf 100644
--- a/code/datums/helper_datums/teleport.dm
+++ b/code/datums/helper_datums/teleport.dm
@@ -5,11 +5,19 @@
// effectout: effect to show right after teleportation
// asoundin: soundfile to play before teleportation
// asoundout: soundfile to play after teleportation
-// force_teleport: if false, teleport will use Move() proc (dense objects will prevent teleportation)
// no_effects: disable the default effectin/effectout of sparks
-/proc/do_teleport(atom/movable/teleatom, atom/destination, precision=null, force_teleport=TRUE, datum/effect_system/effectin=null, datum/effect_system/effectout=null, asoundin=null, asoundout=null, no_effects=FALSE)
+// forceMove: if false, teleport will use Move() proc (dense objects will prevent teleportation)
+// forced: whether or not to ignore no_teleport
+/proc/do_teleport(atom/movable/teleatom, atom/destination, precision=null, forceMove = TRUE, datum/effect_system/effectin=null, datum/effect_system/effectout=null, asoundin=null, asoundout=null, no_effects=FALSE, channel=TELEPORT_CHANNEL_BLUESPACE, forced = FALSE)
// teleporting most effects just deletes them
- if(iseffect(teleatom) && !istype(teleatom, /obj/effect/dummy/chameleon))
+ var/static/list/delete_atoms = typecacheof(list(
+ /obj/effect,
+ )) - typecacheof(list(
+ /obj/effect/dummy/chameleon,
+ /obj/effect/wisp,
+ /obj/effect/mob_spawn
+ ))
+ if(delete_atoms[teleatom.type])
qdel(teleatom)
return FALSE
@@ -17,25 +25,37 @@
// if the precision is not specified, default to 0, but apply BoH penalties
if (isnull(precision))
precision = 0
- if(istype(teleatom, /obj/item/storage/backpack/holding))
- precision = rand(1,100)
- var/static/list/bag_cache = typecacheof(/obj/item/storage/backpack/holding)
- var/list/bagholding = typecache_filter_list(teleatom.GetAllContents(), bag_cache)
- if(bagholding.len)
- precision = max(rand(1,100)*bagholding.len,100)
- if(isliving(teleatom))
- var/mob/living/MM = teleatom
- to_chat(MM, "The bluespace interface on your bag of holding interferes with the teleport!")
+ switch(channel)
+ if(TELEPORT_CHANNEL_BLUESPACE)
+ if(istype(teleatom, /obj/item/storage/backpack/holding))
+ precision = rand(1,100)
- // if effects are not specified and not explicitly disabled, sparks
- if ((!effectin || !effectout) && !no_effects)
- var/datum/effect_system/spark_spread/sparks = new
- sparks.set_up(5, 1, teleatom)
- if (!effectin)
- effectin = sparks
- if (!effectout)
- effectout = sparks
+ var/static/list/bag_cache = typecacheof(/obj/item/storage/backpack/holding)
+ var/list/bagholding = typecache_filter_list(teleatom.GetAllContents(), bag_cache)
+ if(bagholding.len)
+ precision = max(rand(1,100)*bagholding.len,100)
+ if(isliving(teleatom))
+ var/mob/living/MM = teleatom
+ to_chat(MM, "The bluespace interface on your bag of holding interferes with the teleport!")
+
+ // if effects are not specified and not explicitly disabled, sparks
+ if ((!effectin || !effectout) && !no_effects)
+ var/datum/effect_system/spark_spread/sparks = new
+ sparks.set_up(5, 1, teleatom)
+ if (!effectin)
+ effectin = sparks
+ if (!effectout)
+ effectout = sparks
+ if(TELEPORT_CHANNEL_QUANTUM)
+ // if effects are not specified and not explicitly disabled, rainbow sparks
+ if ((!effectin || !effectout) && !no_effects)
+ var/datum/effect_system/spark_spread/quantum/sparks = new
+ sparks.set_up(5, 1, teleatom)
+ if (!effectin)
+ effectin = sparks
+ if (!effectout)
+ effectout = sparks
// perform the teleport
var/turf/curturf = get_turf(teleatom)
@@ -45,11 +65,15 @@
return FALSE
var/area/A = get_area(curturf)
- if(A.noteleport)
+ var/area/B = get_area(destturf)
+ if(!forced && (A.noteleport || B.noteleport))
+ return FALSE
+
+ if(SEND_SIGNAL(destturf, COMSIG_ATOM_INTERCEPT_TELEPORT, channel, curturf, destturf))
return FALSE
tele_play_specials(teleatom, curturf, effectin, asoundin)
- var/success = force_teleport ? teleatom.forceMove(destturf) : teleatom.Move(destturf)
+ var/success = forceMove ? teleatom.forceMove(destturf) : teleatom.Move(destturf)
if (success)
log_game("[key_name(teleatom)] has teleported from [loc_name(curturf)] to [loc_name(destturf)]")
tele_play_specials(teleatom, destturf, effectout, asoundout)
diff --git a/code/datums/martial/krav_maga.dm b/code/datums/martial/krav_maga.dm
index 9e40a5a3dc..6379d481ca 100644
--- a/code/datums/martial/krav_maga.dm
+++ b/code/datums/martial/krav_maga.dm
@@ -197,7 +197,7 @@
name = "combat gloves plus"
desc = "These tactical gloves are fireproof and shock resistant, and using nanochip technology it teaches you the powers of krav maga."
icon_state = "combat"
- item_state = "blackglovesplus"
+ item_state = "blackgloves"
siemens_coefficient = 0
permeability_coefficient = 0.05
strip_delay = 80
diff --git a/code/datums/mutations/body.dm b/code/datums/mutations/body.dm
index 461c221ff8..a32220aa43 100644
--- a/code/datums/mutations/body.dm
+++ b/code/datums/mutations/body.dm
@@ -63,16 +63,14 @@
/datum/mutation/human/dwarfism/on_acquiring(mob/living/carbon/human/owner)
if(..())
return
- owner.resize = 0.8
- owner.update_transform()
+ owner.transform = owner.transform.Scale(1, 0.8)
owner.pass_flags |= PASSTABLE
owner.visible_message("[owner] suddenly shrinks!", "Everything around you seems to grow..")
/datum/mutation/human/dwarfism/on_losing(mob/living/carbon/human/owner)
if(..())
return
- owner.resize = 1.25
- owner.update_transform()
+ owner.transform = owner.transform.Scale(1, 1.25)
owner.pass_flags &= ~PASSTABLE
owner.visible_message("[owner] suddenly grows!", "Everything around you seems to shrink..")
diff --git a/code/datums/ruins/space.dm b/code/datums/ruins/space.dm
index 22fca23902..9762426608 100644
--- a/code/datums/ruins/space.dm
+++ b/code/datums/ruins/space.dm
@@ -305,3 +305,9 @@
suffix = "spacehermit.dmm"
name = "Space Hermit"
description = "A late awakening cryo pod in a crashed escape pod wakes up to find what befell of his fellow survivors. Contains all the necessary resources to actually make it out alive. Good luck."
+
+/datum/map_template/ruin/space/advancedlab
+ id = "advancedlab"
+ suffix = "advancedlab.dmm"
+ name = "Abductor Replication Lab"
+ description = "Some scientists tried and almost succeeded to recreate abductor tools. Somewhat slower and a bit less modern than their originals, these tools are the best you can get if you aren't an alien."
diff --git a/code/datums/saymode.dm b/code/datums/saymode.dm
index c4f485653e..3b6fae5aee 100644
--- a/code/datums/saymode.dm
+++ b/code/datums/saymode.dm
@@ -11,7 +11,7 @@
/datum/saymode/changeling
- key = "g"
+ key = MODE_KEY_CHANGELING
mode = MODE_CHANGELING
/datum/saymode/changeling/handle_message(mob/living/user, message, datum/language/language)
@@ -73,7 +73,7 @@
/datum/saymode/vocalcords
- key = "x"
+ key = MODE_KEY_VOCALCORDS
mode = MODE_VOCALCORDS
/datum/saymode/vocalcords/handle_message(mob/living/user, message, datum/language/language)
@@ -87,7 +87,7 @@
/datum/saymode/binary //everything that uses .b (silicons, drones, blobbernauts/spores, swarmers)
- key = "b"
+ key = MODE_KEY_BINARY
mode = MODE_BINARY
/datum/saymode/binary/handle_message(mob/living/user, message, datum/language/language)
diff --git a/code/datums/wires/_wires.dm b/code/datums/wires/_wires.dm
index f1b08ee18b..fab5a1313c 100644
--- a/code/datums/wires/_wires.dm
+++ b/code/datums/wires/_wires.dm
@@ -231,6 +231,9 @@
// Same for anyone with an abductor multitool.
else if(user.is_holding_item_of_type(/obj/item/multitool/abductor))
reveal_wires = TRUE
+ // and advanced multitool
+ else if(user.is_holding_item_of_type(/obj/item/multitool/advanced))
+ reveal_wires = TRUE
// Station blueprints do that too, but only if the wires are not randomized.
else if(user.is_holding_item_of_type(/obj/item/areaeditor/blueprints) && !randomize)
diff --git a/code/game/area/areas/ruins/space.dm b/code/game/area/areas/ruins/space.dm
index 00a7fed012..d5ceb833b7 100644
--- a/code/game/area/areas/ruins/space.dm
+++ b/code/game/area/areas/ruins/space.dm
@@ -467,3 +467,8 @@
/area/ruin/space/has_grav/powered/ancient_shuttle
name = "Ancient Shuttle"
icon_state = "yellow"
+
+// Abductor Replication Lab
+/area/ruin/space/has_grav/powered/advancedlab
+ name = "Abductor Replication Lab"
+ icon_state = "yellow"
diff --git a/code/game/communications.dm b/code/game/communications.dm
index 212a99f966..ed470473d9 100644
--- a/code/game/communications.dm
+++ b/code/game/communications.dm
@@ -91,35 +91,35 @@ GLOBAL_LIST_EMPTY(all_radios)
// use in maps, such as in intercoms.
GLOBAL_LIST_INIT(radiochannels, list(
- "Common" = FREQ_COMMON,
- "Science" = FREQ_SCIENCE,
- "Command" = FREQ_COMMAND,
- "Medical" = FREQ_MEDICAL,
- "Engineering" = FREQ_ENGINEERING,
- "Security" = FREQ_SECURITY,
- "CentCom" = FREQ_CENTCOM,
- "Syndicate" = FREQ_SYNDICATE,
- "Supply" = FREQ_SUPPLY,
- "Service" = FREQ_SERVICE,
- "AI Private" = FREQ_AI_PRIVATE,
- "Red Team" = FREQ_CTF_RED,
- "Blue Team" = FREQ_CTF_BLUE
+ RADIO_CHANNEL_COMMON = FREQ_COMMON,
+ RADIO_CHANNEL_SCIENCE = FREQ_SCIENCE,
+ RADIO_CHANNEL_COMMAND = FREQ_COMMAND,
+ RADIO_CHANNEL_MEDICAL = FREQ_MEDICAL,
+ RADIO_CHANNEL_ENGINEERING = FREQ_ENGINEERING,
+ RADIO_CHANNEL_SECURITY = FREQ_SECURITY,
+ RADIO_CHANNEL_CENTCOM = FREQ_CENTCOM,
+ RADIO_CHANNEL_SYNDICATE = FREQ_SYNDICATE,
+ RADIO_CHANNEL_SUPPLY = FREQ_SUPPLY,
+ RADIO_CHANNEL_SERVICE = FREQ_SERVICE,
+ RADIO_CHANNEL_AI_PRIVATE = FREQ_AI_PRIVATE,
+ RADIO_CHANNEL_CTF_RED = FREQ_CTF_RED,
+ RADIO_CHANNEL_CTF_BLUE = FREQ_CTF_BLUE
))
GLOBAL_LIST_INIT(reverseradiochannels, list(
- "[FREQ_COMMON]" = "Common",
- "[FREQ_SCIENCE]" = "Science",
- "[FREQ_COMMAND]" = "Command",
- "[FREQ_MEDICAL]" = "Medical",
- "[FREQ_ENGINEERING]" = "Engineering",
- "[FREQ_SECURITY]" = "Security",
- "[FREQ_CENTCOM]" = "CentCom",
- "[FREQ_SYNDICATE]" = "Syndicate",
- "[FREQ_SUPPLY]" = "Supply",
- "[FREQ_SERVICE]" = "Service",
- "[FREQ_AI_PRIVATE]" = "AI Private",
- "[FREQ_CTF_RED]" = "Red Team",
- "[FREQ_CTF_BLUE]" = "Blue Team"
+ "[FREQ_COMMON]" = RADIO_CHANNEL_COMMON,
+ "[FREQ_SCIENCE]" = RADIO_CHANNEL_SCIENCE,
+ "[FREQ_COMMAND]" = RADIO_CHANNEL_COMMAND,
+ "[FREQ_MEDICAL]" = RADIO_CHANNEL_MEDICAL,
+ "[FREQ_ENGINEERING]" = RADIO_CHANNEL_ENGINEERING,
+ "[FREQ_SECURITY]" = RADIO_CHANNEL_SECURITY,
+ "[FREQ_CENTCOM]" = RADIO_CHANNEL_CENTCOM,
+ "[FREQ_SYNDICATE]" = RADIO_CHANNEL_SYNDICATE,
+ "[FREQ_SUPPLY]" = RADIO_CHANNEL_SUPPLY,
+ "[FREQ_SERVICE]" = RADIO_CHANNEL_SERVICE,
+ "[FREQ_AI_PRIVATE]" = RADIO_CHANNEL_AI_PRIVATE,
+ "[FREQ_CTF_RED]" = RADIO_CHANNEL_CTF_RED,
+ "[FREQ_CTF_BLUE]" = RADIO_CHANNEL_CTF_BLUE
))
/datum/radio_frequency
diff --git a/code/game/gamemodes/clock_cult/clock_cult.dm b/code/game/gamemodes/clock_cult/clock_cult.dm
index 94ca86e0dd..808022d25f 100644
--- a/code/game/gamemodes/clock_cult/clock_cult.dm
+++ b/code/game/gamemodes/clock_cult/clock_cult.dm
@@ -52,7 +52,7 @@ Credit where due:
if(!istype(M))
return FALSE
if(M.mind)
- if(ishuman(M) && (M.mind.assigned_role in list("Captain", "Chaplain")))
+ if(M.mind.assigned_role in list("Captain", "Chaplain"))
return FALSE
if(M.mind.enslaved_to && !is_servant_of_ratvar(M.mind.enslaved_to))
return FALSE
@@ -275,7 +275,7 @@ Credit where due:
gloves = /obj/item/clothing/gloves/color/yellow
belt = /obj/item/storage/belt/utility/servant
backpack_contents = list(/obj/item/storage/box/engineer = 1, \
- /obj/item/clockwork/replica_fabricator = 1, /obj/item/stack/tile/brass/fifty = 1, /obj/item/paper/servant_primer = 1, /obj/item/reagent_containers/food/drinks/holyoil = 1)
+ /obj/item/clockwork/replica_fabricator = 1, /obj/item/stack/tile/brass/fifty = 1, /obj/item/paper/servant_primer = 1, /obj/item/reagent_containers/food/drinks/bottle/holyoil = 1)
id = /obj/item/pda
var/plasmaman //We use this to determine if we should activate internals in post_equip()
diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm
index 8f091b6372..e7cc3c53ae 100644
--- a/code/game/gamemodes/cult/cult.dm
+++ b/code/game/gamemodes/cult/cult.dm
@@ -16,7 +16,7 @@
if(!istype(M))
return FALSE
if(M.mind)
- if(ishuman(M) && (M.mind.assigned_role in list("Captain", "Chaplain")))
+ if(M.mind.assigned_role in list("Captain", "Chaplain"))
return FALSE
if(specific_cult && specific_cult.is_sacrifice_target(M.mind))
return FALSE
diff --git a/code/game/machinery/bank_machine.dm b/code/game/machinery/bank_machine.dm
index 71dcb89ce7..0b9ed6bb3f 100644
--- a/code/game/machinery/bank_machine.dm
+++ b/code/game/machinery/bank_machine.dm
@@ -6,7 +6,7 @@
var/siphoning = FALSE
var/next_warning = 0
var/obj/item/radio/radio
- var/radio_channel = "Common"
+ var/radio_channel = RADIO_CHANNEL_COMMON
var/minimum_time_between_warnings = 400
/obj/machinery/computer/bank_machine/Initialize()
diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm
index f32772b600..4f04335852 100644
--- a/code/game/machinery/cloning.dm
+++ b/code/game/machinery/cloning.dm
@@ -31,7 +31,7 @@
var/internal_radio = TRUE
var/obj/item/radio/radio
var/radio_key = /obj/item/encryptionkey/headset_med
- var/radio_channel = "Medical"
+ var/radio_channel = RADIO_CHANNEL_MEDICAL
var/obj/effect/countdown/clonepod/countdown
diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm
index 8d0cfb95e8..e38445f606 100644
--- a/code/game/machinery/computer/arcade.dm
+++ b/code/game/machinery/computer/arcade.dm
@@ -57,6 +57,7 @@
/obj/item/stack/tile/fakespace/loaded = ARCADE_WEIGHT_TRICK,
/obj/item/stack/tile/fakepit/loaded = ARCADE_WEIGHT_TRICK,
/obj/item/restraints/handcuffs/fake = ARCADE_WEIGHT_TRICK,
+ /obj/item/clothing/gloves/rapid/hug = ARCADE_WEIGHT_TRICK,
/obj/item/grenade/chem_grenade/glitter/pink = ARCADE_WEIGHT_TRICK,
/obj/item/grenade/chem_grenade/glitter/blue = ARCADE_WEIGHT_TRICK,
diff --git a/code/game/machinery/computer/camera_advanced.dm b/code/game/machinery/computer/camera_advanced.dm
index 86fcefb340..43582e39bf 100644
--- a/code/game/machinery/computer/camera_advanced.dm
+++ b/code/game/machinery/computer/camera_advanced.dm
@@ -361,14 +361,16 @@
return
button_icon_state = "warp_down"
owner.update_action_buttons()
+ QDEL_NULL(warping)
+ if(!do_teleport(user, T, channel = TELEPORT_CHANNEL_CULT, forced = TRUE))
+ to_chat(user, "Warp Failed. Something deflected our attempt to warp to [AR].")
+ return
T.visible_message("[user] warps in!")
playsound(user, 'sound/magic/magic_missile.ogg', 50, TRUE)
playsound(T, 'sound/magic/magic_missile.ogg', 50, TRUE)
- user.forceMove(get_turf(T))
user.setDir(SOUTH)
flash_color(user, flash_color = "#AF0AAF", flash_time = 5)
R.remove_eye_control(user)
- QDEL_NULL(warping)
/datum/action/innate/servant_warp/proc/is_canceled()
return !cancel
diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm
index bfa6b46134..1654768de0 100644
--- a/code/game/machinery/computer/cloning.dm
+++ b/code/game/machinery/computer/cloning.dm
@@ -1,4 +1,4 @@
-#define AUTOCLONING_MINIMAL_LEVEL 3
+#define AUTOCLONING_MINIMAL_LEVEL 4
/obj/machinery/computer/cloning
name = "cloning console"
diff --git a/code/game/machinery/iv_drip.dm b/code/game/machinery/iv_drip.dm
index 03c60be91c..84a688c724 100644
--- a/code/game/machinery/iv_drip.dm
+++ b/code/game/machinery/iv_drip.dm
@@ -63,7 +63,7 @@
if(91 to INFINITY)
filling_overlay.icon_state = "reagent100"
- filling_overlay.color = list("#0000", "#0000", "#0000", "#000f", mix_color_from_reagents(beaker.reagents.reagent_list))
+ filling_overlay.color = mix_color_from_reagents(beaker.reagents.reagent_list)
add_overlay(filling_overlay)
/obj/machinery/iv_drip/MouseDrop(mob/living/target)
diff --git a/code/game/machinery/launch_pad.dm b/code/game/machinery/launch_pad.dm
index 4016c32162..db59f3f413 100644
--- a/code/game/machinery/launch_pad.dm
+++ b/code/game/machinery/launch_pad.dm
@@ -127,7 +127,7 @@
if(first_inner)
log_msg += "empty"
log_msg += ")"
- do_teleport(ROI, dest, no_effects = !first)
+ do_teleport(ROI, dest, no_effects = !first, channel = TELEPORT_CHANNEL_BLUESPACE)
first = FALSE
if (first)
@@ -206,7 +206,7 @@
/obj/item/storage/briefcase/launchpad/PopulateContents()
new /obj/item/pen(src)
- new /obj/item/launchpad_remote(src, pad)
+ new /obj/item/launchpad_remote(src, pad)
/obj/item/storage/briefcase/launchpad/attack_self(mob/user)
if(!isturf(user.loc)) //no setting up in a locker
@@ -227,7 +227,7 @@
L.pad = src.pad
to_chat(user, "You link [pad] to [L].")
else
- return ..()
+ return ..()
/obj/item/launchpad_remote
name = "folder"
diff --git a/code/game/machinery/quantum_pad.dm b/code/game/machinery/quantum_pad.dm
index 7a8552607b..b5ef38b42c 100644
--- a/code/game/machinery/quantum_pad.dm
+++ b/code/game/machinery/quantum_pad.dm
@@ -36,7 +36,7 @@
to_chat(user, "The panel is screwed in, obstructing the linking device.")
else
to_chat(user, "The linking device is now able to be scanned with a multitool.")
-
+
/obj/machinery/quantumpad/RefreshParts()
var/E = 0
for(var/obj/item/stock_parts/capacitor/C in component_parts)
@@ -74,15 +74,26 @@
to_chat(user, "There is no quantum pad data saved in [I]'s buffer!")
return TRUE
+ else if(istype(I, /obj/item/quantum_keycard))
+ var/obj/item/quantum_keycard/K = I
+ if(K.qpad)
+ to_chat(user, "You insert [K] into [src]'s card slot, activating it.")
+ interact(user, K.qpad)
+ else
+ to_chat(user, "You insert [K] into [src]'s card slot, initiating the link procedure.")
+ if(do_after(user, 40, target = src))
+ to_chat(user, "You complete the link between [K] and [src].")
+ K.qpad = src
+
if(default_deconstruction_crowbar(I))
return
return ..()
-/obj/machinery/quantumpad/interact(mob/user)
- if(!linked_pad || QDELETED(linked_pad))
+/obj/machinery/quantumpad/interact(mob/user, obj/machinery/quantumpad/target_pad = linked_pad)
+ if(!target_pad || QDELETED(target_pad))
if(!map_pad_link_id || !initMappedLink())
- to_chat(user, "There is no linked pad!")
+ to_chat(user, "Target pad not found!")
return
if(world.time < last_teleport + teleport_cooldown)
@@ -93,18 +104,18 @@
to_chat(user, "[src] is charging up. Please wait.")
return
- if(linked_pad.teleporting)
- to_chat(user, "Linked pad is busy. Please wait.")
+ if(target_pad.teleporting)
+ to_chat(user, "Target pad is busy. Please wait.")
return
- if(linked_pad.stat & NOPOWER)
- to_chat(user, "Linked pad is not responding to ping.")
+ if(target_pad.stat & NOPOWER)
+ to_chat(user, "Target pad is not responding to ping.")
return
add_fingerprint(user)
- doteleport(user)
+ doteleport(user, target_pad)
/obj/machinery/quantumpad/proc/sparks()
- var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
+ var/datum/effect_system/spark_spread/quantum/s = new
s.set_up(5, 1, get_turf(src))
s.start()
@@ -117,8 +128,8 @@
if(linked_pad)
ghost.forceMove(get_turf(linked_pad))
-/obj/machinery/quantumpad/proc/doteleport(mob/user)
- if(linked_pad)
+/obj/machinery/quantumpad/proc/doteleport(mob/user, obj/machinery/quantumpad/target_pad = linked_pad)
+ if(target_pad)
playsound(get_turf(src), 'sound/weapons/flash.ogg', 25, 1)
teleporting = TRUE
@@ -130,7 +141,7 @@
to_chat(user, "[src] is unpowered!")
teleporting = FALSE
return
- if(!linked_pad || QDELETED(linked_pad) || linked_pad.stat & NOPOWER)
+ if(!target_pad || QDELETED(target_pad) || target_pad.stat & NOPOWER)
to_chat(user, "Linked pad is not responding to ping. Teleport aborted.")
teleporting = FALSE
return
@@ -141,26 +152,30 @@
// use a lot of power
use_power(10000 / power_efficiency)
sparks()
- linked_pad.sparks()
+ target_pad.sparks()
flick("qpad-beam", src)
playsound(get_turf(src), 'sound/weapons/emitter2.ogg', 25, 1, extrarange = 3, falloff = 5)
- flick("qpad-beam", linked_pad)
- playsound(get_turf(linked_pad), 'sound/weapons/emitter2.ogg', 25, 1, extrarange = 3, falloff = 5)
+ flick("qpad-beam", target_pad)
+ playsound(get_turf(target_pad), 'sound/weapons/emitter2.ogg', 25, 1, extrarange = 3, falloff = 5)
for(var/atom/movable/ROI in get_turf(src))
+ if(QDELETED(ROI))
+ continue //sleeps in CHECK_TICK
+
// if is anchored, don't let through
if(ROI.anchored)
if(isliving(ROI))
var/mob/living/L = ROI
- if(L.buckled)
- // TP people on office chairs
- if(L.buckled.anchored)
- continue
+ //only TP living mobs buckled to non anchored items
+ if(!L.buckled || L.buckled.anchored)
+ continue
else
continue
+ //Don't TP camera mobs
else if(!isobserver(ROI))
continue
- do_teleport(ROI, get_turf(linked_pad))
+ do_teleport(ROI, get_turf(target_pad),null,TRUE,null,null,null,null,TRUE, channel = TELEPORT_CHANNEL_QUANTUM)
+ CHECK_TICK
/obj/machinery/quantumpad/proc/initMappedLink()
. = FALSE
diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm
index cc83e6502a..1f1f13ee22 100644
--- a/code/game/machinery/teleporter.dm
+++ b/code/game/machinery/teleporter.dm
@@ -66,18 +66,18 @@
visible_message("Cannot authenticate locked on coordinates. Please reinstate coordinate matrix.")
return
if (ismovableatom(M))
- if(do_teleport(M, com.target))
+ if(do_teleport(M, com.target, channel = TELEPORT_CHANNEL_BLUESPACE))
use_power(5000)
- if(!calibrated && prob(30 - ((accurate) * 10))) //oh dear a problem
- log_game("[M] ([key_name(M)]) was turned into a fly person")
- if(ishuman(M))//don't remove people from the round randomly you jerks
- var/mob/living/carbon/human/human = M
- if(human.dna && human.dna.species.id == "human")
- to_chat(M, "You hear a buzzing in your ears.")
- human.set_species(/datum/species/fly)
- human.apply_effect((rand(120 - accurate * 40, 180 - accurate * 60)), EFFECT_IRRADIATE, 0)
- calibrated = 0
+ if(!calibrated && iscarbon(M) && prob(30 - ((accurate) * 10))) //oh dear a problem
+ var/mob/living/carbon/C = M
+ if(C.dna?.species && C.dna.species.id != "fly" && !HAS_TRAIT(C, TRAIT_RADIMMUNE))
+ to_chat(C, "You hear a buzzing in your ears.")
+ C.set_species(/datum/species/fly)
+ log_game("[C] ([key_name(C)]) was turned into a fly person")
+ C.apply_effect((rand(120 - accurate * 40, 180 - accurate * 60)), EFFECT_IRRADIATE, 0)
+
+ calibrated = FALSE
return
/obj/machinery/teleport/hub/update_icon()
diff --git a/code/game/mecha/equipment/tools/other_tools.dm b/code/game/mecha/equipment/tools/other_tools.dm
index 80c92c7922..a8ba9850ff 100644
--- a/code/game/mecha/equipment/tools/other_tools.dm
+++ b/code/game/mecha/equipment/tools/other_tools.dm
@@ -17,7 +17,7 @@
return
var/turf/T = get_turf(target)
if(T)
- do_teleport(chassis, T, 4)
+ do_teleport(chassis, T, 4, channel = TELEPORT_CHANNEL_BLUESPACE)
return 1
diff --git a/code/game/objects/effects/anomalies.dm b/code/game/objects/effects/anomalies.dm
index 91df57052e..fbe25c5d1b 100644
--- a/code/game/objects/effects/anomalies.dm
+++ b/code/game/objects/effects/anomalies.dm
@@ -190,11 +190,11 @@
/obj/effect/anomaly/bluespace/anomalyEffect()
..()
for(var/mob/living/M in range(1,src))
- do_teleport(M, locate(M.x, M.y, M.z), 4)
+ do_teleport(M, locate(M.x, M.y, M.z), 4, channel = TELEPORT_CHANNEL_BLUESPACE)
/obj/effect/anomaly/bluespace/Bumped(atom/movable/AM)
if(isliving(AM))
- do_teleport(AM, locate(AM.x, AM.y, AM.z), 8)
+ do_teleport(AM, locate(AM.x, AM.y, AM.z), 8, channel = TELEPORT_CHANNEL_BLUESPACE)
/obj/effect/anomaly/bluespace/detonate()
var/turf/T = safepick(get_area_turfs(impact_area))
diff --git a/code/game/objects/effects/blessing.dm b/code/game/objects/effects/blessing.dm
index 06ba2bb47c..5df90d65c7 100644
--- a/code/game/objects/effects/blessing.dm
+++ b/code/game/objects/effects/blessing.dm
@@ -16,3 +16,12 @@
I.alpha = 64
I.appearance_flags = RESET_ALPHA
add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/blessedAware, "blessing", I)
+ RegisterSignal(loc, COMSIG_ATOM_INTERCEPT_TELEPORT, .proc/block_cult_teleport)
+
+/obj/effect/blessing/Destroy()
+ UnregisterSignal(loc, COMSIG_ATOM_INTERCEPT_TELEPORT)
+ return ..()
+
+/obj/effect/blessing/proc/block_cult_teleport(datum/source, channel, turf/origin, turf/destination)
+ if(channel == TELEPORT_CHANNEL_CULT)
+ return COMPONENT_BLOCK_TELEPORT
\ No newline at end of file
diff --git a/code/game/objects/effects/effect_system/effects_sparks.dm b/code/game/objects/effects/effect_system/effects_sparks.dm
index 0656d9b3ca..19b0dc76dd 100644
--- a/code/game/objects/effects/effect_system/effects_sparks.dm
+++ b/code/game/objects/effects/effect_system/effects_sparks.dm
@@ -26,7 +26,7 @@
/obj/effect/particle_effect/sparks/Initialize()
. = ..()
- flick("sparks", src) // replay the animation
+ flick(icon_state, src) // replay the animation
playsound(src, "sparks", 100, TRUE)
var/turf/T = loc
if(isturf(T))
@@ -48,6 +48,8 @@
/datum/effect_system/spark_spread
effect_type = /obj/effect/particle_effect/sparks
+/datum/effect_system/spark_spread/quantum
+ effect_type = /obj/effect/particle_effect/sparks/quantum
//electricity
@@ -55,5 +57,9 @@
name = "lightning"
icon_state = "electricity"
+/obj/effect/particle_effect/sparks/quantum
+ name = "quantum sparks"
+ icon_state = "quantum_sparks"
+
/datum/effect_system/lightning_spread
effect_type = /obj/effect/particle_effect/sparks/electricity
diff --git a/code/game/objects/effects/portals.dm b/code/game/objects/effects/portals.dm
index d69cfd38ef..631b87cada 100644
--- a/code/game/objects/effects/portals.dm
+++ b/code/game/objects/effects/portals.dm
@@ -20,6 +20,7 @@
var/mech_sized = FALSE
var/obj/effect/portal/linked
var/hardlinked = TRUE //Requires a linked portal at all times. Destroy if there's no linked portal, if there is destroy it when this one is deleted.
+ var/teleport_channel = TELEPORT_CHANNEL_BLUESPACE
var/creator
var/turf/hard_target //For when a portal needs a hard target and isn't to be linked.
var/atmos_link = FALSE //Link source/destination atmos.
@@ -34,6 +35,7 @@
icon = 'icons/obj/objects.dmi'
icon_state = "anom"
mech_sized = TRUE
+ teleport_channel = TELEPORT_CHANNEL_WORMHOLE
/obj/effect/portal/Move(newloc)
for(var/T in newloc)
@@ -160,7 +162,7 @@
no_effect = TRUE
else
last_effect = world.time
- if(do_teleport(M, real_target, innate_accuracy_penalty, no_effects = no_effect))
+ if(do_teleport(M, real_target, innate_accuracy_penalty, no_effects = no_effect, channel = teleport_channel))
if(istype(M, /obj/item/projectile))
var/obj/item/projectile/P = M
P.ignore_source_check = TRUE
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index 384a1e4ee4..e17fe20977 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -579,6 +579,9 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
/obj/item/proc/get_belt_overlay() //Returns the icon used for overlaying the object on a belt
return mutable_appearance('icons/obj/clothing/belt_overlays.dmi', icon_state)
+/obj/item/proc/get_worn_belt_overlay(icon_file)
+ return
+
/obj/item/proc/update_slot_icon()
if(!ismob(loc))
return
diff --git a/code/game/objects/items/devices/multitool.dm b/code/game/objects/items/devices/multitool.dm
index f8b1d6e15b..a3ab9153ce 100644
--- a/code/game/objects/items/devices/multitool.dm
+++ b/code/game/objects/items/devices/multitool.dm
@@ -237,3 +237,10 @@
icon = 'icons/obj/abductor.dmi'
icon_state = "multitool"
toolspeed = 0.1
+
+/obj/item/multitool/advanced
+ name = "advanced multitool"
+ desc = "The reproduction of an abductor's multitool, this multitool is a classy silver."
+ icon = 'icons/obj/advancedtools.dmi'
+ icon_state = "multitool"
+ toolspeed = 0.2
diff --git a/code/game/objects/items/devices/quantum_keycard.dm b/code/game/objects/items/devices/quantum_keycard.dm
new file mode 100644
index 0000000000..37079722c0
--- /dev/null
+++ b/code/game/objects/items/devices/quantum_keycard.dm
@@ -0,0 +1,32 @@
+/obj/item/quantum_keycard
+ name = "quantum keycard"
+ desc = "A keycard able to link to a quantum pad's particle signature, allowing other quantum pads to travel there instead of their linked pad."
+ icon = 'icons/obj/device.dmi'
+ icon_state = "quantum_keycard"
+ item_state = "card-id"
+ lefthand_file = 'icons/mob/inhands/equipment/idcards_lefthand.dmi'
+ righthand_file = 'icons/mob/inhands/equipment/idcards_righthand.dmi'
+ w_class = WEIGHT_CLASS_TINY
+ var/obj/machinery/quantumpad/qpad
+
+/obj/item/quantum_keycard/examine(mob/user)
+ ..()
+ if(qpad)
+ to_chat(user, "It's currently linked to a quantum pad.")
+ to_chat(user, "Alt-click to unlink the keycard.")
+ else
+ to_chat(user, "Insert [src] into an active quantum pad to link it.")
+
+/obj/item/quantum_keycard/AltClick(mob/living/user)
+ if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user)))
+ return
+ to_chat(user, "You start pressing [src]'s unlink button...")
+ if(do_after(user, 40, target = src))
+ to_chat(user, "The keycard beeps twice and disconnects the quantum link.")
+ qpad = null
+
+/obj/item/quantum_keycard/update_icon()
+ if(qpad)
+ icon_state = "quantum_keycard_on"
+ else
+ icon_state = initial(icon_state)
diff --git a/code/game/objects/items/devices/radio/encryptionkey.dm b/code/game/objects/items/devices/radio/encryptionkey.dm
index dd7489d6b1..9adc0488aa 100644
--- a/code/game/objects/items/devices/radio/encryptionkey.dm
+++ b/code/game/objects/items/devices/radio/encryptionkey.dm
@@ -1,6 +1,6 @@
/obj/item/encryptionkey
name = "standard encryption key"
- desc = "An encryption key for a radio headset. Has no special codes in it. WHY DOES IT EXIST? ASK NANOTRASEN."
+ desc = "An encryption key for a radio headset."
icon = 'icons/obj/radio.dmi'
icon_state = "cypherkey"
w_class = WEIGHT_CLASS_TINY
@@ -9,124 +9,119 @@
var/independent = FALSE
var/list/channels = list()
+/obj/item/encryptionkey/Initialize()
+ . = ..()
+ if(!channels.len)
+ desc = "An encryption key for a radio headset. Has no special codes in it. You should probably tell a coder!"
+
+/obj/item/encryptionkey/examine(mob/user)
+ . = ..()
+ if(LAZYLEN(channels))
+ var/list/examine_text_list = list()
+ for(var/i in channels)
+ examine_text_list += "[GLOB.channel_tokens[i]] - [lowertext(i)]"
+
+ to_chat(user, "It can access the following channels; [jointext(examine_text_list, ", ")].")
+
/obj/item/encryptionkey/syndicate
name = "syndicate encryption key"
- desc = "An encryption key for a radio headset. To access the syndicate channel, use :t."
icon_state = "syn_cypherkey"
- channels = list("Syndicate" = 1)
- syndie = 1//Signifies that it de-crypts Syndicate transmissions
+ channels = list(RADIO_CHANNEL_SYNDICATE = 1)
+ syndie = TRUE //Signifies that it de-crypts Syndicate transmissions
/obj/item/encryptionkey/binary
name = "binary translator key"
- desc = "An encryption key for a radio headset. To access the binary channel, use :b."
icon_state = "bin_cypherkey"
translate_binary = TRUE
/obj/item/encryptionkey/headset_sec
name = "security radio encryption key"
- desc = "An encryption key for a radio headset. To access the security channel, use :s."
icon_state = "sec_cypherkey"
- channels = list("Security" = 1)
+ channels = list(RADIO_CHANNEL_SECURITY = 1)
/obj/item/encryptionkey/headset_eng
name = "engineering radio encryption key"
- desc = "An encryption key for a radio headset. To access the engineering channel, use :e."
icon_state = "eng_cypherkey"
- channels = list("Engineering" = 1)
+ channels = list(RADIO_CHANNEL_ENGINEERING = 1)
/obj/item/encryptionkey/headset_rob
name = "robotics radio encryption key"
- desc = "An encryption key for a radio headset. To access the engineering channel, use :e. For research, use :n."
icon_state = "rob_cypherkey"
- channels = list("Science" = 1, "Engineering" = 1)
+ channels = list(RADIO_CHANNEL_SCIENCE = 1, RADIO_CHANNEL_ENGINEERING = 1)
/obj/item/encryptionkey/headset_med
name = "medical radio encryption key"
- desc = "An encryption key for a radio headset. To access the medical channel, use :m."
icon_state = "med_cypherkey"
- channels = list("Medical" = 1)
+ channels = list(RADIO_CHANNEL_MEDICAL = 1)
/obj/item/encryptionkey/headset_sci
name = "science radio encryption key"
- desc = "An encryption key for a radio headset. To access the science channel, use :n."
icon_state = "sci_cypherkey"
- channels = list("Science" = 1)
+ channels = list(RADIO_CHANNEL_SCIENCE = 1)
/obj/item/encryptionkey/headset_medsci
name = "medical research radio encryption key"
- desc = "An encryption key for a radio headset. To access the medical channel, use :m. For science, use :n."
icon_state = "medsci_cypherkey"
- channels = list("Science" = 1, "Medical" = 1)
+ channels = list(RADIO_CHANNEL_SCIENCE = 1, RADIO_CHANNEL_MEDICAL = 1)
/obj/item/encryptionkey/headset_com
name = "command radio encryption key"
- desc = "An encryption key for a radio headset. To access the command channel, use :c."
icon_state = "com_cypherkey"
- channels = list("Command" = 1)
+ channels = list(RADIO_CHANNEL_COMMAND = 1)
/obj/item/encryptionkey/heads/captain
name = "\proper the captain's encryption key"
- desc = "An encryption key for a radio headset. Channels are as follows: :c - command, :s - security, :e - engineering, :u - supply, :v - service, :m - medical, :n - science."
icon_state = "cap_cypherkey"
- channels = list("Command" = 1, "Security" = 1, "Engineering" = 0, "Science" = 0, "Medical" = 0, "Supply" = 0, "Service" = 0)
+ channels = list(RADIO_CHANNEL_COMMAND = 1, RADIO_CHANNEL_SECURITY = 1, RADIO_CHANNEL_ENGINEERING = 0, RADIO_CHANNEL_SCIENCE = 0, RADIO_CHANNEL_MEDICAL = 0, RADIO_CHANNEL_SUPPLY = 0, RADIO_CHANNEL_SERVICE = 0)
/obj/item/encryptionkey/heads/rd
name = "\proper the research director's encryption key"
- desc = "An encryption key for a radio headset. To access the science channel, use :n. For command, use :c."
icon_state = "rd_cypherkey"
- channels = list("Science" = 1, "Command" = 1)
+ channels = list(RADIO_CHANNEL_SCIENCE = 1, RADIO_CHANNEL_COMMAND = 1)
/obj/item/encryptionkey/heads/hos
name = "\proper the head of security's encryption key"
- desc = "An encryption key for a radio headset. To access the security channel, use :s. For command, use :c."
icon_state = "hos_cypherkey"
- channels = list("Security" = 1, "Command" = 1)
+ channels = list(RADIO_CHANNEL_SECURITY = 1, RADIO_CHANNEL_COMMAND = 1)
/obj/item/encryptionkey/heads/ce
name = "\proper the chief engineer's encryption key"
- desc = "An encryption key for a radio headset. To access the engineering channel, use :e. For command, use :c."
icon_state = "ce_cypherkey"
- channels = list("Engineering" = 1, "Command" = 1)
+ channels = list(RADIO_CHANNEL_ENGINEERING = 1, RADIO_CHANNEL_COMMAND = 1)
/obj/item/encryptionkey/heads/cmo
name = "\proper the chief medical officer's encryption key"
- desc = "An encryption key for a radio headset. To access the medical channel, use :m. For command, use :c."
icon_state = "cmo_cypherkey"
- channels = list("Medical" = 1, "Command" = 1)
+ channels = list(RADIO_CHANNEL_MEDICAL = 1, RADIO_CHANNEL_COMMAND = 1)
/obj/item/encryptionkey/heads/hop
name = "\proper the head of personnel's encryption key"
- desc = "An encryption key for a radio headset. Channels are as follows: :u - supply, :v - service, :c - command."
icon_state = "hop_cypherkey"
- channels = list("Supply" = 1, "Service" = 1, "Command" = 1)
+ channels = list(RADIO_CHANNEL_SUPPLY = 1, RADIO_CHANNEL_SERVICE = 1, RADIO_CHANNEL_COMMAND = 1)
/obj/item/encryptionkey/headset_cargo
name = "supply radio encryption key"
- desc = "An encryption key for a radio headset. To access the supply channel, use :u."
icon_state = "cargo_cypherkey"
- channels = list("Supply" = 1)
+ channels = list(RADIO_CHANNEL_SUPPLY = 1)
/obj/item/encryptionkey/headset_mining
name = "mining radio encryption key"
- desc = "An encryption key for a radio headset. To access the supply channel, use :u. For science, use :n."
icon_state = "cargo_cypherkey"
- channels = list("Supply" = 1, "Science" = 1)
+ channels = list(RADIO_CHANNEL_SUPPLY = 1, RADIO_CHANNEL_SCIENCE = 1)
/obj/item/encryptionkey/headset_service
name = "service radio encryption key"
- desc = "An encryption key for a radio headset. To access the service channel, use :v."
icon_state = "srv_cypherkey"
- channels = list("Service" = 1)
+ channels = list(RADIO_CHANNEL_SERVICE = 1)
/obj/item/encryptionkey/headset_cent
name = "\improper CentCom radio encryption key"
- desc = "An encryption key for a radio headset. To access the CentCom channel, use :y."
icon_state = "cent_cypherkey"
independent = TRUE
- channels = list("CentCom" = 1)
+ channels = list(RADIO_CHANNEL_CENTCOM = 1)
/obj/item/encryptionkey/ai //ported from NT, this goes 'inside' the AI.
- channels = list("Command" = 1, "Security" = 1, "Engineering" = 1, "Science" = 1, "Medical" = 1, "Supply" = 1, "Service" = 1, "AI Private" = 1)
+ channels = list(RADIO_CHANNEL_COMMAND = 1, RADIO_CHANNEL_SECURITY = 1, RADIO_CHANNEL_ENGINEERING = 1, RADIO_CHANNEL_SCIENCE = 1, RADIO_CHANNEL_MEDICAL = 1, RADIO_CHANNEL_SUPPLY = 1, RADIO_CHANNEL_SERVICE = 1, RADIO_CHANNEL_AI_PRIVATE = 1)
/obj/item/encryptionkey/secbot
- channels = list("AI Private"=1,"Security"=1)
+ channels = list(RADIO_CHANNEL_AI_PRIVATE = 1, RADIO_CHANNEL_SECURITY = 1)
diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm
index ea9c6fb99e..cca5eb4217 100644
--- a/code/game/objects/items/devices/radio/headset.dm
+++ b/code/game/objects/items/devices/radio/headset.dm
@@ -1,3 +1,19 @@
+// Used for translating channels to tokens on examination
+GLOBAL_LIST_INIT(channel_tokens, list(
+ RADIO_CHANNEL_COMMON = RADIO_KEY_COMMON,
+ RADIO_CHANNEL_SCIENCE = RADIO_TOKEN_SCIENCE,
+ RADIO_CHANNEL_COMMAND = RADIO_TOKEN_COMMAND,
+ RADIO_CHANNEL_MEDICAL = RADIO_TOKEN_MEDICAL,
+ RADIO_CHANNEL_ENGINEERING = RADIO_TOKEN_ENGINEERING,
+ RADIO_CHANNEL_SECURITY = RADIO_TOKEN_SECURITY,
+ RADIO_CHANNEL_CENTCOM = RADIO_TOKEN_CENTCOM,
+ RADIO_CHANNEL_SYNDICATE = RADIO_TOKEN_SYNDICATE,
+ RADIO_CHANNEL_SUPPLY = RADIO_TOKEN_SUPPLY,
+ RADIO_CHANNEL_SERVICE = RADIO_TOKEN_SERVICE,
+ MODE_BINARY = MODE_TOKEN_BINARY,
+ RADIO_CHANNEL_AI_PRIVATE = RADIO_TOKEN_AI_PRIVATE
+))
+
/obj/item/radio/headset
name = "radio headset"
desc = "An updated, modular intercom that fits over the head. Takes encryption keys."
@@ -17,9 +33,24 @@
/obj/item/radio/headset/examine(mob/user)
..()
- to_chat(user, "To speak on the general radio frequency, use ; before speaking.")
- if (command)
- to_chat(user, "Alt-click to toggle the high-volume mode.")
+
+ if(item_flags & IN_INVENTORY && loc == user)
+ // construction of frequency description
+ var/list/avail_chans = list("Use [RADIO_KEY_COMMON] for the currently tuned frequency")
+ if(translate_binary)
+ avail_chans += "use [MODE_TOKEN_BINARY] for [MODE_BINARY]"
+ if(length(channels))
+ for(var/i in 1 to length(channels))
+ if(i == 1)
+ avail_chans += "use [MODE_TOKEN_DEPARTMENT] or [GLOB.channel_tokens[channels[i]]] for [lowertext(channels[i])]"
+ else
+ avail_chans += "use [GLOB.channel_tokens[channels[i]]] for [lowertext(channels[i])]"
+ to_chat(user, "A small screen on the headset displays the following available frequencies:\n[english_list(avail_chans)].")
+
+ if(command)
+ to_chat(user, "Alt-click to toggle the high-volume mode.")
+ else
+ to_chat(user, "A small screen on the headset flashes, it's too small to read without holding or wearing the headset.")
/obj/item/radio/headset/Initialize()
. = ..()
@@ -47,7 +78,7 @@
/obj/item/radio/headset/syndicate/alt //undisguised bowman with flash protection
name = "syndicate headset"
- desc = "A syndicate headset that can be used to hear all radio frequencies. Protects ears from flashbangs. \nTo access the syndicate channel, use ; before speaking."
+ desc = "A syndicate headset that can be used to hear all radio frequencies. Protects ears from flashbangs."
icon_state = "syndie_headset"
item_state = "syndie_headset"
@@ -72,13 +103,13 @@
/obj/item/radio/headset/headset_sec
name = "security radio headset"
- desc = "This is used by your elite security force.\nTo access the security channel, use :s."
+ desc = "This is used by your elite security force."
icon_state = "sec_headset"
keyslot = new /obj/item/encryptionkey/headset_sec
/obj/item/radio/headset/headset_sec/alt
name = "security bowman headset"
- desc = "This is used by your elite security force. Protects ears from flashbangs.\nTo access the security channel, use :s."
+ desc = "This is used by your elite security force. Protects ears from flashbangs."
icon_state = "sec_headset_alt"
item_state = "sec_headset_alt"
@@ -88,31 +119,31 @@
/obj/item/radio/headset/headset_eng
name = "engineering radio headset"
- desc = "When the engineers wish to chat like girls.\nTo access the engineering channel, use :e."
+ desc = "When the engineers wish to chat like girls."
icon_state = "eng_headset"
keyslot = new /obj/item/encryptionkey/headset_eng
/obj/item/radio/headset/headset_rob
name = "robotics radio headset"
- desc = "Made specifically for the roboticists, who cannot decide between departments.\nTo access the engineering channel, use :e. For research, use :n."
+ desc = "Made specifically for the roboticists, who cannot decide between departments."
icon_state = "rob_headset"
keyslot = new /obj/item/encryptionkey/headset_rob
/obj/item/radio/headset/headset_med
name = "medical radio headset"
- desc = "A headset for the trained staff of the medbay.\nTo access the medical channel, use :m."
+ desc = "A headset for the trained staff of the medbay."
icon_state = "med_headset"
keyslot = new /obj/item/encryptionkey/headset_med
/obj/item/radio/headset/headset_sci
name = "science radio headset"
- desc = "A sciency headset. Like usual.\nTo access the science channel, use :n."
+ desc = "A sciency headset. Like usual."
icon_state = "sci_headset"
keyslot = new /obj/item/encryptionkey/headset_sci
/obj/item/radio/headset/headset_medsci
name = "medical research radio headset"
- desc = "A headset that is a result of the mating between medical and science.\nTo access the medical channel, use :m. For science, use :n."
+ desc = "A headset that is a result of the mating between medical and science."
icon_state = "medsci_headset"
keyslot = new /obj/item/encryptionkey/headset_medsci
@@ -127,13 +158,13 @@
/obj/item/radio/headset/heads/captain
name = "\proper the captain's headset"
- desc = "The headset of the king.\nChannels are as follows: :c - command, :s - security, :e - engineering, :u - supply, :v - service, :m - medical, :n - science."
+ desc = "The headset of the king."
icon_state = "com_headset"
keyslot = new /obj/item/encryptionkey/heads/captain
/obj/item/radio/headset/heads/captain/alt
name = "\proper the captain's bowman headset"
- desc = "The headset of the boss. Protects ears from flashbangs.\nChannels are as follows: :c - command, :s - security, :e - engineering, :u - supply, :v - service, :m - medical, :n - science."
+ desc = "The headset of the boss. Protects ears from flashbangs."
icon_state = "com_headset_alt"
item_state = "com_headset_alt"
@@ -143,19 +174,19 @@
/obj/item/radio/headset/heads/rd
name = "\proper the research director's headset"
- desc = "Headset of the fellow who keeps society marching towards technological singularity.\nTo access the science channel, use :n. For command, use :c."
+ desc = "Headset of the fellow who keeps society marching towards technological singularity."
icon_state = "com_headset"
keyslot = new /obj/item/encryptionkey/heads/rd
/obj/item/radio/headset/heads/hos
name = "\proper the head of security's headset"
- desc = "The headset of the man in charge of keeping order and protecting the station.\nTo access the security channel, use :s. For command, use :c."
+ desc = "The headset of the man in charge of keeping order and protecting the station."
icon_state = "com_headset"
keyslot = new /obj/item/encryptionkey/heads/hos
/obj/item/radio/headset/heads/hos/alt
name = "\proper the head of security's bowman headset"
- desc = "The headset of the man in charge of keeping order and protecting the station. Protects ears from flashbangs.\nTo access the security channel, use :s. For command, use :c."
+ desc = "The headset of the man in charge of keeping order and protecting the station. Protects ears from flashbangs."
icon_state = "com_headset_alt"
item_state = "com_headset_alt"
@@ -165,43 +196,43 @@
/obj/item/radio/headset/heads/ce
name = "\proper the chief engineer's headset"
- desc = "The headset of the guy in charge of keeping the station powered and undamaged.\nTo access the engineering channel, use :e. For command, use :c."
+ desc = "The headset of the guy in charge of keeping the station powered and undamaged."
icon_state = "com_headset"
keyslot = new /obj/item/encryptionkey/heads/ce
/obj/item/radio/headset/heads/cmo
name = "\proper the chief medical officer's headset"
- desc = "The headset of the highly trained medical chief.\nTo access the medical channel, use :m. For command, use :c."
+ desc = "The headset of the highly trained medical chief."
icon_state = "com_headset"
keyslot = new /obj/item/encryptionkey/heads/cmo
/obj/item/radio/headset/heads/hop
name = "\proper the head of personnel's headset"
- desc = "The headset of the guy who will one day be captain.\nChannels are as follows: :u - supply, :v - service, :c - command."
+ desc = "The headset of the guy who will one day be captain."
icon_state = "com_headset"
keyslot = new /obj/item/encryptionkey/heads/hop
/obj/item/radio/headset/headset_cargo
name = "supply radio headset"
- desc = "A headset used by the QM and his slaves.\nTo access the supply channel, use :u."
+ desc = "A headset used by the QM and his slaves."
icon_state = "cargo_headset"
keyslot = new /obj/item/encryptionkey/headset_cargo
/obj/item/radio/headset/headset_cargo/mining
name = "mining radio headset"
- desc = "Headset used by shaft miners.\nTo access the supply channel, use :u. For science, use :n."
+ desc = "Headset used by shaft miners."
icon_state = "mine_headset"
keyslot = new /obj/item/encryptionkey/headset_mining
/obj/item/radio/headset/headset_srv
name = "service radio headset"
- desc = "Headset used by the service staff, tasked with keeping the station full, happy and clean.\nTo access the service channel, use :v."
+ desc = "Headset used by the service staff, tasked with keeping the station full, happy and clean."
icon_state = "srv_headset"
keyslot = new /obj/item/encryptionkey/headset_service
/obj/item/radio/headset/headset_cent
name = "\improper CentCom headset"
- desc = "A headset used by the upper echelons of Nanotrasen.\nTo access the CentCom channel, use :y."
+ desc = "A headset used by the upper echelons of Nanotrasen."
icon_state = "cent_headset"
keyslot = new /obj/item/encryptionkey/headset_com
keyslot2 = new /obj/item/encryptionkey/headset_cent
@@ -215,7 +246,7 @@
/obj/item/radio/headset/headset_cent/alt
name = "\improper CentCom bowman headset"
- desc = "A headset especially for emergency response personnel. Protects ears from flashbangs.\nTo access the CentCom channel, use :y."
+ desc = "A headset especially for emergency response personnel. Protects ears from flashbangs."
icon_state = "cent_headset_alt"
item_state = "cent_headset_alt"
keyslot = null
diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm
index 1d51aabf86..7c136f556e 100644
--- a/code/game/objects/items/devices/radio/radio.dm
+++ b/code/game/objects/items/devices/radio/radio.dm
@@ -221,7 +221,7 @@
// From the channel, determine the frequency and get a reference to it.
var/freq
if(channel && channels && channels.len > 0)
- if(channel == "department")
+ if(channel == MODE_DEPARTMENT)
channel = channels[1]
freq = secure_radio_connections[channel]
if (!channels[channel]) // if the channel is turned off, don't broadcast
diff --git a/code/game/objects/items/granters.dm b/code/game/objects/items/granters.dm
index 686c6fd511..71687f0d5a 100644
--- a/code/game/objects/items/granters.dm
+++ b/code/game/objects/items/granters.dm
@@ -421,7 +421,7 @@
//Crafting Recipe books
/obj/item/book/granter/crafting_recipe
- var/list/crafting_recipe_types = list()
+ var/list/crafting_recipe_types = list() //Use full /datum/crafting_recipe/what_you_craft
/obj/item/book/granter/crafting_recipe/on_reading_finished(mob/user)
. = ..()
@@ -430,4 +430,30 @@
for(var/crafting_recipe_type in crafting_recipe_types)
var/datum/crafting_recipe/R = crafting_recipe_type
user.mind.teach_crafting_recipe(crafting_recipe_type)
- to_chat(user,"You learned how to make [initial(R.name)].")
\ No newline at end of file
+ to_chat(user,"You learned how to make [initial(R.name)].")
+
+/obj/item/book/granter/crafting_recipe/cooking_sweets_101 //We start at 101 for 103 and 105
+ name = "Cooking Desserts 101"
+ desc = "A cook book that teaches you some more of the newest desserts. AI approved, and a best seller on Honkplanet."
+ crafting_recipe_types = list(/datum/crafting_recipe/food/mimetart, /datum/crafting_recipe/food/berrytart, /datum/crafting_recipe/food/cocolavatart, /datum/crafting_recipe/food/clowncake, /datum/crafting_recipe/food/vanillacake)
+ icon_state = "cooking_learing_sweets"
+ oneuse = FALSE
+ remarks = list("So that is how icing is made!", "Placing fruit on top? How simple...", "Huh layering cake seems harder then this...", "This book smells like candy", "A clown must have made this page, or they forgot to spell check it before printing...", "Wait, a way to cook slime to be safe?")
+
+//Later content when I have free time - Trilby Date:02-Aug-2019
+
+/obj/item/book/granter/crafting_recipe/under_the_oven //Illegal cook book
+ name = "Under The Oven"
+ desc = "A cook book that teaches you many illegal and fun candys. MALF AI approved, and a best seller on the blackmarket."
+ crafting_recipe_types = list()
+ icon_state = "cooking_learing_illegal"
+ oneuse = FALSE
+ remarks = list()
+
+/obj/item/book/granter/crafting_recipe/coldcooking //IceCream
+ name = "Cooking with Ice"
+ desc = "A cook book that teaches you many old icecream treats."
+ crafting_recipe_types = list()
+ icon_state = "cooking_learing_ice"
+ oneuse = FALSE
+ remarks = list()
\ No newline at end of file
diff --git a/code/game/objects/items/handcuffs.dm b/code/game/objects/items/handcuffs.dm
index 5e19577b46..a306b48385 100644
--- a/code/game/objects/items/handcuffs.dm
+++ b/code/game/objects/items/handcuffs.dm
@@ -26,6 +26,7 @@
gender = PLURAL
icon = 'icons/obj/items_and_weapons.dmi'
icon_state = "handcuff"
+ item_state = "handcuff"
lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi'
flags_1 = CONDUCT_1
@@ -103,7 +104,6 @@
desc = "A pair of restraints fashioned from long strands of flesh."
icon = 'icons/obj/mining.dmi'
icon_state = "sinewcuff"
- item_state = "sinewcuff"
breakouttime = 300 //Deciseconds = 30s
cuffsound = 'sound/weapons/cablecuff.ogg'
@@ -164,14 +164,6 @@
/obj/item/restraints/handcuffs/cable/white
item_color = "white"
-/obj/item/restraints/handcuffs/alien
- icon_state = "handcuffAlien"
-
-/obj/item/restraints/handcuffs/fake
- name = "fake handcuffs"
- desc = "Fake handcuffs meant for gag purposes."
- breakouttime = 10 //Deciseconds = 1s
-
/obj/item/restraints/handcuffs/cable/attackby(obj/item/I, mob/user, params)
..()
if(istype(I, /obj/item/stack/rods))
@@ -206,7 +198,7 @@
/obj/item/restraints/handcuffs/cable/zipties
name = "zipties"
desc = "Plastic, disposable zipties that can be used to restrain temporarily but are destroyed after use."
- icon_state = "cuff"
+ item_state = "zipties"
lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi'
materials = list()
@@ -217,11 +209,25 @@
/obj/item/restraints/handcuffs/cable/zipties/used
desc = "A pair of broken zipties."
icon_state = "cuff_used"
- item_state = "cuff"
/obj/item/restraints/handcuffs/cable/zipties/used/attack()
return
+/obj/item/restraints/handcuffs/alien
+ icon_state = "handcuffAlien"
+
+/obj/item/restraints/handcuffs/fake
+ name = "fake handcuffs"
+ desc = "Fake handcuffs meant for gag purposes."
+ breakouttime = 10 //Deciseconds = 1s
+
+/obj/item/restraints/handcuffs/fake/kinky
+ name = "kinky handcuffs"
+ desc = "Fake handcuffs meant for erotic roleplay."
+ icon = 'modular_citadel/icons/obj/items_and_weapons.dmi'
+ icon_state = "handcuffgag"
+ item_state = "kinkycuff"
+
//Legcuffs
/obj/item/restraints/legcuffs
@@ -230,6 +236,7 @@
gender = PLURAL
icon = 'icons/obj/items_and_weapons.dmi'
icon_state = "handcuff"
+ item_state = "legcuff"
lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi'
flags_1 = CONDUCT_1
diff --git a/code/game/objects/items/melee/misc.dm b/code/game/objects/items/melee/misc.dm
index 0d45960767..daeceb7f87 100644
--- a/code/game/objects/items/melee/misc.dm
+++ b/code/game/objects/items/melee/misc.dm
@@ -89,6 +89,12 @@
if(istype(B))
playsound(B, 'sound/items/sheath.ogg', 25, 1)
+/obj/item/melee/sabre/get_belt_overlay()
+ return mutable_appearance('icons/obj/clothing/belt_overlays.dmi', "sabre")
+
+/obj/item/melee/sabre/get_worn_belt_overlay(icon_file)
+ return mutable_appearance(icon_file, "-sabre")
+
/obj/item/melee/sabre/suicide_act(mob/living/user)
user.visible_message("[user] is trying to cut off all [user.p_their()] limbs with [src]! it looks like [user.p_theyre()] trying to commit suicide!")
var/i = 0
@@ -147,13 +153,19 @@
flags_1 = CONDUCT_1
obj_flags = UNIQUE_RENAME
w_class = WEIGHT_CLASS_BULKY
- sharpness = IS_SHARP_ACCURATE //It cant be sharpend cook -_-
+ sharpness = IS_SHARP_ACCURATE //It cant be sharpend cook -_-
attack_verb = list("slashed", "cut", "pierces", "pokes")
/obj/item/melee/rapier/Initialize()
. = ..()
AddComponent(/datum/component/butchering, 20, 65, 0)
+/obj/item/melee/rapier/get_belt_overlay()
+ return mutable_appearance('icons/obj/clothing/belt_overlays.dmi', "rapier")
+
+/obj/item/melee/rapier/get_worn_belt_overlay(icon_file)
+ return mutable_appearance(icon_file, "-rapier")
+
/obj/item/melee/classic_baton
name = "police baton"
desc = "A wooden truncheon for beating criminal scum."
diff --git a/code/game/objects/items/scrolls.dm b/code/game/objects/items/scrolls.dm
index 07f6edb828..28a4664a24 100644
--- a/code/game/objects/items/scrolls.dm
+++ b/code/game/objects/items/scrolls.dm
@@ -66,7 +66,8 @@
to_chat(user, "The spell matrix was unable to locate a suitable teleport destination for an unknown reason. Sorry.")
return
- user.forceMove(pick(L))
-
- smoke.start()
- uses--
+ if(do_teleport(user, pick(L), forceMove = TRUE, channel = TELEPORT_CHANNEL_MAGIC, forced = TRUE))
+ smoke.start()
+ uses--
+ else
+ to_chat(user, "The spell matrix was disrupted by something near the destination.")
diff --git a/code/game/objects/items/stacks/bscrystal.dm b/code/game/objects/items/stacks/bscrystal.dm
index 522e1a1153..49a735af9c 100644
--- a/code/game/objects/items/stacks/bscrystal.dm
+++ b/code/game/objects/items/stacks/bscrystal.dm
@@ -33,7 +33,7 @@
use(1)
/obj/item/stack/ore/bluespace_crystal/proc/blink_mob(mob/living/L)
- do_teleport(L, get_turf(L), blink_range, asoundin = 'sound/effects/phasein.ogg')
+ do_teleport(L, get_turf(L), blink_range, asoundin = 'sound/effects/phasein.ogg', channel = TELEPORT_CHANNEL_BLUESPACE)
/obj/item/stack/ore/bluespace_crystal/throw_impact(atom/hit_atom)
if(!..()) // not caught in mid-air
diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm
index 5594059463..c65129ec85 100644
--- a/code/game/objects/items/stacks/sheets/sheet_types.dm
+++ b/code/game/objects/items/stacks/sheets/sheet_types.dm
@@ -415,6 +415,8 @@ GLOBAL_LIST_INIT(brass_recipes, list ( \
new/datum/stack_recipe("brass window - directional", /obj/structure/window/reinforced/clockwork/unanchored, time = 0, on_floor = TRUE, window_checks = TRUE), \
new/datum/stack_recipe("brass window - fulltile", /obj/structure/window/reinforced/clockwork/fulltile/unanchored, 2, time = 0, on_floor = TRUE, window_checks = TRUE), \
new/datum/stack_recipe("brass chair", /obj/structure/chair/brass, 1, time = 0, one_per_turf = TRUE, on_floor = TRUE), \
+ new/datum/stack_recipe("brass bar stool", /obj/structure/chair/stool/bar/brass, 1, time = 0, one_per_turf = TRUE, on_floor = TRUE), \
+ new/datum/stack_recipe("brass stool", /obj/structure/chair/stool/brass, 1, time = 0, one_per_turf = TRUE, on_floor = TRUE), \
new/datum/stack_recipe("brass table frame", /obj/structure/table_frame/brass, 1, time = 5, one_per_turf = TRUE, on_floor = TRUE), \
null,
new/datum/stack_recipe("sender - pressure sensor", /obj/structure/destructible/clockwork/trap/trigger/pressure_sensor, 2, time = 20, one_per_turf = TRUE, on_floor = TRUE), \
@@ -426,7 +428,7 @@ GLOBAL_LIST_INIT(brass_recipes, list ( \
new/datum/stack_recipe("receiver - steam vent", /obj/structure/destructible/clockwork/trap/steam_vent, 3, time = 30, one_per_turf = TRUE, on_floor = TRUE, placement_checks = STACK_CHECK_CARDINALS), \
new/datum/stack_recipe("receiver - power nullifier", /obj/structure/destructible/clockwork/trap/power_nullifier, 5, time = 20, one_per_turf = TRUE, on_floor = TRUE, placement_checks = STACK_CHECK_CARDINALS), \
null,
- new/datum/stack_recipe("brass flask", /obj/item/reagent_containers/food/drinks/holyoil/null), \
+ new/datum/stack_recipe("brass flask", /obj/item/reagent_containers/food/drinks/bottle/holyoil/empty), \
))
@@ -478,6 +480,8 @@ GLOBAL_LIST_INIT(bronze_recipes, list ( \
new/datum/stack_recipe("bronze boots", /obj/item/clothing/shoes/bronze), \
null,
new/datum/stack_recipe("bronze chair", /obj/structure/chair/bronze, 1, time = 0, one_per_turf = TRUE, on_floor = TRUE), \
+ new/datum/stack_recipe("bronze bar stool", /obj/structure/chair/stool/bar/bronze, 1, time = 0, one_per_turf = TRUE, on_floor = TRUE), \
+ new/datum/stack_recipe("bronze stool", /obj/structure/chair/stool/bronze, 1, time = 0, one_per_turf = TRUE, on_floor = TRUE), \
))
/obj/item/stack/tile/bronze
diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm
index b746058588..d71b91c8dc 100755
--- a/code/game/objects/items/storage/belt.dm
+++ b/code/game/objects/items/storage/belt.dm
@@ -10,6 +10,7 @@
attack_verb = list("whipped", "lashed", "disciplined")
max_integrity = 300
var/content_overlays = FALSE //If this is true, the belt will gain overlays based on what it's holding
+ var/worn_overlays = FALSE //worn counterpart of the above.
/obj/item/storage/belt/suicide_act(mob/living/carbon/user)
user.visible_message("[user] begins belting [user.p_them()]self with \the [src]! It looks like [user.p_theyre()] trying to commit suicide!")
@@ -23,6 +24,12 @@
add_overlay(M)
..()
+/obj/item/storage/belt/worn_overlays(isinhands, icon_file)
+ . = ..()
+ if(!isinhands && worn_overlays)
+ for(var/obj/item/I in contents)
+ . += I.get_worn_belt_overlay(icon_file)
+
/obj/item/storage/belt/Initialize()
. = ..()
update_icon()
@@ -653,9 +660,10 @@
icon_state = "sheath"
item_state = "sheath"
w_class = WEIGHT_CLASS_BULKY
+ content_overlays = TRUE
+ worn_overlays = TRUE
var/list/fitting_swords = list(/obj/item/melee/sabre, /obj/item/melee/baton/stunsword)
var/starting_sword = /obj/item/melee/sabre
- var/sword_overlay
/obj/item/storage/belt/sabre/ComponentInitialize()
. = ..()
@@ -682,27 +690,13 @@
to_chat(user, "[src] is empty.")
/obj/item/storage/belt/sabre/update_icon()
- icon_state = initial(icon_state)
- item_state = initial(item_state)
- sword_overlay = null
- if(contents.len)
- var/obj/item/I = contents[1]
- sword_overlay = initial(I.icon_state)
- add_overlay("-[sword_overlay]")
- item_state += "-[I.icon_state]"
- if(loc && isliving(loc))
+ . = ..()
+ if(isliving(loc))
var/mob/living/L = loc
L.regenerate_icons()
- ..()
-
-/obj/item/storage/belt/sabre/worn_overlays(isinhands, icon_file)
- . = ..()
- if(!isinhands)
- . += mutable_appearance(icon_file, "-[sword_overlay]")
/obj/item/storage/belt/sabre/PopulateContents()
new starting_sword(src)
- update_icon()
/obj/item/storage/belt/sabre/rapier
name = "rapier sheath"
diff --git a/code/game/objects/items/storage/boxes.dm b/code/game/objects/items/storage/boxes.dm
index 5a4d85885b..903c319644 100644
--- a/code/game/objects/items/storage/boxes.dm
+++ b/code/game/objects/items/storage/boxes.dm
@@ -1131,6 +1131,7 @@
name = "Nanotrasen MRE Ration Kit Menu 0"
desc = "A package containing food suspended in an outdated bluespace pocket which lasts for centuries. If you're lucky you may even be able to enjoy the meal without getting food poisoning."
icon_state = "mre"
+ illustration = null
var/can_expire = TRUE
var/spawner_chance = 2
var/expiration_date
@@ -1184,7 +1185,7 @@
/obj/item/storage/box/mre/menu3
name = "\improper Nanotrasen MRE Ration Kit Menu 3"
- desc = "The holy grail of MREs. This item contains the fabled MRE pizza and a sample of coffee instant type 2. Any NT employee lucky enough to get their hands on one of these is truly blessed."
+ desc = "The holy grail of MREs. This item contains the fabled MRE pizza, spicy nachos and a sample of coffee instant type 2. Any NT employee lucky enough to get their hands on one of these is truly blessed."
icon_state = "menu3"
can_expire = FALSE //always fresh, never expired.
spawner_chance = 1
@@ -1192,11 +1193,29 @@
/obj/item/storage/box/mre/menu3/PopulateContents()
new /obj/item/reagent_containers/food/snacks/pizzaslice/pepperoni(src)
new /obj/item/reagent_containers/food/snacks/breadslice/plain(src)
- new /obj/item/reagent_containers/food/snacks/cheesewedge(src)
+ new /obj/item/reagent_containers/food/snacks/cubannachos(src)
new /obj/item/reagent_containers/food/snacks/grown/chili(src)
new /obj/item/reagent_containers/food/drinks/coffee/type2(src)
new /obj/item/tank/internals/emergency_oxygen(src)
+/obj/item/storage/box/mre/menu4
+ name = "\improper Nanotrasen MRE Ration Kit Menu 4"
+
+/obj/item/storage/box/mre/menu4/safe
+ spawner_chance = 0
+ desc = "A package containing food suspended in a bluespace pocket capable of lasting till the end of time."
+ can_expire = FALSE
+
+/obj/item/storage/box/mre/menu4/PopulateContents()
+ if(prob(66))
+ new /obj/item/reagent_containers/food/snacks/salad/boiledrice(src)
+ else
+ new /obj/item/reagent_containers/food/snacks/salad/ricebowl(src)
+ new /obj/item/reagent_containers/food/snacks/burger/tofu(src)
+ new /obj/item/reagent_containers/food/snacks/salad/fruit(src)
+ new /obj/item/reagent_containers/food/snacks/cracker(src)
+ new /obj/item/tank/internals/emergency_oxygen(src)
+
//Where do I put this?
/obj/item/secbat
name = "Secbat box"
diff --git a/code/game/objects/items/teleprod.dm b/code/game/objects/items/teleprod.dm
index 341c85fa1c..40392c19c3 100644
--- a/code/game/objects/items/teleprod.dm
+++ b/code/game/objects/items/teleprod.dm
@@ -10,7 +10,7 @@
. = ..()
if(!. || !istype(M) || M.anchored)
return
- do_teleport(M, get_turf(M), 15)
+ do_teleport(M, get_turf(M), 15, channel = TELEPORT_CHANNEL_BLUESPACE)
/obj/item/melee/baton/cattleprod/teleprod/clowning_around(mob/living/user)
user.visible_message("[user] accidentally hits [user.p_them()]self with [src]!", \
@@ -18,7 +18,7 @@
SEND_SIGNAL(user, COMSIG_LIVING_MINOR_SHOCK)
user.Knockdown(stunforce*3)
playsound(loc, 'sound/weapons/egloves.ogg', 50, 1, -1)
- if(do_teleport(user, get_turf(user), 50))
+ if(do_teleport(user, get_turf(user), 50, channel = TELEPORT_CHANNEL_BLUESPACE))
deductcharge(hitcost)
else
deductcharge(hitcost * 0.25)
diff --git a/code/game/objects/items/tools/crowbar.dm b/code/game/objects/items/tools/crowbar.dm
index 97375221d4..70bfebb799 100644
--- a/code/game/objects/items/tools/crowbar.dm
+++ b/code/game/objects/items/tools/crowbar.dm
@@ -90,4 +90,12 @@
var/obj/item/wirecutters/power/cutjaws = new /obj/item/wirecutters/power(drop_location())
to_chat(user, "You attach the cutting jaws to [src].")
qdel(src)
- user.put_in_active_hand(cutjaws)
\ No newline at end of file
+ user.put_in_active_hand(cutjaws)
+
+/obj/item/crowbar/advanced
+ name = "advanced crowbar"
+ desc = "A scientist's almost successful reproduction of an abductor's crowbar, it uses the same technology combined with a handle that can't quite hold it."
+ icon = 'icons/obj/advancedtools.dmi'
+ usesound = 'sound/weapons/sonic_jackhammer.ogg'
+ icon_state = "crowbar"
+ toolspeed = 0.2
\ No newline at end of file
diff --git a/code/game/objects/items/tools/screwdriver.dm b/code/game/objects/items/tools/screwdriver.dm
index e5808de088..68946f73cd 100644
--- a/code/game/objects/items/tools/screwdriver.dm
+++ b/code/game/objects/items/tools/screwdriver.dm
@@ -141,4 +141,14 @@
name = "powered screwdriver"
desc = "An electrical screwdriver, designed to be both precise and quick."
usesound = 'sound/items/drill_use.ogg'
- toolspeed = 0.5
\ No newline at end of file
+ toolspeed = 0.5
+
+/obj/item/screwdriver/advanced
+ name = "advanced screwdriver"
+ desc = "A classy silver screwdriver with an alien alloy tip, it works almost as well as the real thing."
+ icon = 'icons/obj/advancedtools.dmi'
+ icon_state = "screwdriver_a"
+ item_state = "screwdriver_nuke"
+ usesound = 'sound/items/pshoom.ogg'
+ toolspeed = 0.2
+ random_color = FALSE
\ No newline at end of file
diff --git a/code/game/objects/items/tools/weldingtool.dm b/code/game/objects/items/tools/weldingtool.dm
index 718035a9a5..9b622a14c4 100644
--- a/code/game/objects/items/tools/weldingtool.dm
+++ b/code/game/objects/items/tools/weldingtool.dm
@@ -377,4 +377,18 @@
nextrefueltick = world.time + 10
reagents.add_reagent("welding_fuel", 1)
+/obj/item/weldingtool/advanced
+ name = "advanced welding tool"
+ desc = "A modern welding tool combined with an alien welding tool, it never runs out of fuel and works almost as fast."
+ icon = 'icons/obj/advancedtools.dmi'
+ icon_state = "welder"
+ toolspeed = 0.2
+ light_intensity = 0
+ change_icons = 0
+
+/obj/item/weldingtool/advanced/process()
+ if(get_fuel() <= max_fuel)
+ reagents.add_reagent("welding_fuel", 1)
+ ..()
+
#undef WELDER_FUEL_BURN_INTERVAL
diff --git a/code/game/objects/items/tools/wirecutters.dm b/code/game/objects/items/tools/wirecutters.dm
index 1a35196bd8..527891afdb 100644
--- a/code/game/objects/items/tools/wirecutters.dm
+++ b/code/game/objects/items/tools/wirecutters.dm
@@ -82,7 +82,6 @@
icon = 'icons/obj/abductor.dmi'
icon_state = "cutters"
toolspeed = 0.1
-
random_color = FALSE
/obj/item/wirecutters/cyborg
@@ -126,3 +125,11 @@
return
else
..()
+
+/obj/item/wirecutters/advanced
+ name = "advanced wirecutters"
+ desc = "A set of reproduction alien wirecutters, they have a silver handle with an exceedingly sharp blade."
+ icon = 'icons/obj/advancedtools.dmi'
+ icon_state = "cutters"
+ toolspeed = 0.2
+ random_color = FALSE
\ No newline at end of file
diff --git a/code/game/objects/items/tools/wrench.dm b/code/game/objects/items/tools/wrench.dm
index 4fd99e9adf..8ff960825a 100644
--- a/code/game/objects/items/tools/wrench.dm
+++ b/code/game/objects/items/tools/wrench.dm
@@ -112,4 +112,12 @@
user.dust()
- return OXYLOSS
\ No newline at end of file
+ return OXYLOSS
+
+/obj/item/wrench/advanced
+ name = "advanced wrench"
+ desc = "A wrench that uses the same magnetic technology that abductor tools use, but slightly more ineffeciently."
+ icon = 'icons/obj/advancedtools.dmi'
+ icon_state = "wrench"
+ usesound = 'sound/effects/empulse.ogg'
+ toolspeed = 0.2
\ No newline at end of file
diff --git a/code/game/objects/structures/beds_chairs/chair.dm b/code/game/objects/structures/beds_chairs/chair.dm
index e944eb32da..88d141a9ad 100644
--- a/code/game/objects/structures/beds_chairs/chair.dm
+++ b/code/game/objects/structures/beds_chairs/chair.dm
@@ -317,9 +317,6 @@
new stack_type(get_turf(loc))
qdel(src)
-
-
-
/obj/item/chair/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
if(attack_type == UNARMED_ATTACK && prob(hit_reaction_chance))
owner.visible_message("[owner] fends off [attack_text] with [src]!")
@@ -338,7 +335,6 @@
C.Knockdown(20)
smash(user)
-
/obj/item/chair/stool
name = "stool"
icon_state = "stool_toppled"
@@ -352,6 +348,70 @@
item_state = "stool_bar"
origin_type = /obj/structure/chair/stool/bar
+//////////////////////////
+//Brass & Bronze stools!//
+//////////////////////////
+
+/obj/structure/chair/stool/bar/brass
+ name = "brass bar stool"
+ desc = "A brass bar stool with red silk for a pillow."
+ icon_state = "barbrass"
+ item_chair = /obj/item/chair/stool/bar/brass
+ buildstacktype = /obj/item/stack/tile/brass
+ buildstackamount = 1
+
+/obj/structure/chair/stool/bar/bronze
+ name = "bronze bar stool"
+ desc = "A bronze bar stool with red silk for a pillow."
+ icon_state = "barbrass"
+ item_chair = /obj/item/chair/stool/bar/bronze
+ buildstacktype = /obj/item/stack/tile/bronze
+ buildstackamount = 1
+
+/obj/structure/chair/stool/brass
+ name = "brass stool"
+ desc = "A brass stool with a silk top for comfort."
+ icon_state = "stoolbrass"
+ item_chair = /obj/item/chair/stool/brass
+ buildstacktype = /obj/item/stack/tile/brass
+ buildstackamount = 1
+
+/obj/structure/chair/stool/bronze
+ name = "bronze stool"
+ desc = "A bronze stool with a silk top for comfort."
+ icon_state = "stoolbrass"
+ item_chair = /obj/item/chair/stool/bronze
+ buildstacktype = /obj/item/stack/tile/bronze
+ buildstackamount = 1
+
+/obj/item/chair/stool/brass
+ name = "brass stool"
+ icon_state = "stoolbrass_toppled"
+ item_state = "stoolbrass"
+ origin_type = /obj/structure/chair/stool/brass
+
+/obj/item/chair/stool/bar/brass
+ name = "brass bar stool"
+ icon_state = "barbrass_toppled"
+ item_state = "stoolbrass_bar"
+ origin_type = /obj/structure/chair/stool/bar/brass
+
+/obj/item/chair/stool/bronze
+ name = "bronze stool"
+ icon_state = "stoolbrass_toppled"
+ item_state = "stoolbrass"
+ origin_type = /obj/structure/chair/stool/bronze
+
+/obj/item/chair/stool/bar/bronze
+ name = "bronze bar stool"
+ icon_state = "barbrass_toppled"
+ item_state = "stoolbrass_bar"
+ origin_type = /obj/structure/chair/stool/bar/bronze
+
+/////////////////////////////////
+//End of Brass & Bronze stools!//
+/////////////////////////////////
+
/obj/item/chair/stool/narsie_act()
return //sturdy enough to ignore a god
diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm
index 2c4463928c..eedb49f2c3 100644
--- a/code/game/objects/structures/crates_lockers/closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets.dm
@@ -34,7 +34,8 @@
var/delivery_icon = "deliverycloset" //which icon to use when packagewrapped. null to be unwrappable.
var/anchorable = TRUE
var/icon_welded = "welded"
-
+ var/obj/item/electronics/airlock/lockerelectronics //Installed electronics
+ var/lock_in_use = FALSE //Someone is doing some stuff with the lock here, better not proceed further
/obj/structure/closet/Initialize(mapload)
. = ..()
@@ -42,47 +43,56 @@
PopulateContents()
if(mapload && !opened) // if closed, any item at the crate's loc is put in the contents
take_contents()
+ if(secure)
+ lockerelectronics = new(src)
+ lockerelectronics.accesses = req_access
//USE THIS TO FILL IT, NOT INITIALIZE OR NEW
/obj/structure/closet/proc/PopulateContents()
return
/obj/structure/closet/Destroy()
- dump_contents()
+ dump_contents(override = FALSE)
return ..()
/obj/structure/closet/update_icon()
cut_overlays()
- if(!opened)
+ if(opened & icon_door_override)
+ add_overlay("[icon_door]_open")
layer = OBJ_LAYER
- if(icon_door)
- add_overlay("[icon_door]_door")
- else
- add_overlay("[icon_state]_door")
- if(welded)
- add_overlay(icon_welded)
- if(secure && !broken)
- if(locked)
- add_overlay("locked")
- else
- add_overlay("unlocked")
-
+ return
+ else if(opened)
+ add_overlay("[icon_state]_open")
+ return
+ if(icon_door)
+ add_overlay("[icon_door]_door")
else
layer = BELOW_OBJ_LAYER
- if(icon_door_override)
- add_overlay("[icon_door]_open")
- else
- add_overlay("[icon_state]_open")
+ add_overlay("[icon_state]_door")
+ if(welded)
+ add_overlay("welded")
+ if(!secure)
+ return
+ if(broken)
+ add_overlay("off")
+ add_overlay("sparking")
+ else if(locked)
+ add_overlay("locked")
+ else
+ add_overlay("unlocked")
/obj/structure/closet/examine(mob/user)
..()
if(welded)
- to_chat(user, "It's welded shut.")
+ to_chat(user, "It's welded shut.")
if(anchored)
to_chat(user, "It is bolted to the ground.")
if(opened)
to_chat(user, "The parts are welded together.")
else if(secure && !opened)
+ else if(broken)
+ to_chat(user, "The lock is screwed in.")
+ else if(secure)
to_chat(user, "Alt-click to [locked ? "unlock" : "lock"].")
if(isliving(user))
var/mob/living/L = user
@@ -117,9 +127,37 @@
return FALSE
return TRUE
-/obj/structure/closet/proc/dump_contents()
+/obj/structure/closet/proc/can_lock(mob/living/user, var/check_access = TRUE) //set check_access to FALSE if you only need to check if a locker has a functional lock rather than access
+ if(!secure)
+ return FALSE
+ if(broken)
+ to_chat(user, "[src] is broken!")
+ return FALSE
+ if(QDELETED(lockerelectronics) && !locked) //We want to be able to unlock it regardless of electronics, but only lockable with electronics
+ to_chat(user, "[src] is missing locker electronics!")
+ return FALSE
+ if(!check_access)
+ return TRUE
+ if(allowed(user))
+ return TRUE
+ to_chat(user, "Access denied.")
+
+/obj/structure/closet/proc/togglelock(mob/living/user)
+ add_fingerprint(user)
+ if(opened)
+ return
+ if(!can_lock(user))
+ return
+ locked = !locked
+ user.visible_message("[user] [locked ? null : "un"]locks [src].",
+ "You [locked ? null : "un"]lock [src].")
+ update_icon()
+
+/obj/structure/closet/proc/dump_contents(var/override = TRUE) //Override is for not revealing the locker electronics when you open the locker, for example
var/atom/L = drop_location()
for(var/atom/movable/AM in src)
+ if(AM == lockerelectronics && override)
+ continue
AM.forceMove(L)
if(throwing) // you keep some momentum when getting out of a thrown closet
step(AM, dir)
@@ -207,6 +245,73 @@
else
return open(user)
+/obj/structure/closet/proc/bust_open()
+ welded = FALSE //applies to all lockers
+ locked = FALSE //applies to critter crates and secure lockers only
+ broken = TRUE //applies to secure lockers only
+ open()
+
+/obj/structure/closet/proc/handle_lock_addition(mob/user, obj/item/electronics/airlock/E)
+ add_fingerprint(user)
+ if(lock_in_use)
+ to_chat(user, "Wait for work on [src] to be done first!")
+ return
+ if(secure)
+ to_chat(user, "This locker already has a lock!")
+ return
+ if(broken)
+ to_chat(user, "Unscrew the broken lock first!")
+ return
+ if(!istype(E))
+ return
+ user.visible_message("[user] begins installing a lock on [src]...","You begin installing a lock on [src]...")
+ lock_in_use = TRUE
+ playsound(loc, 'sound/items/screwdriver.ogg', 50, 1)
+ if(!do_after(user, 60, target = src))
+ lock_in_use = FALSE
+ return
+ lock_in_use = FALSE
+ to_chat(user, "You finish the lock on [src]!")
+ E.forceMove(src)
+ lockerelectronics = E
+ req_access = E.accesses
+ secure = TRUE
+ update_icon()
+ return TRUE
+
+/obj/structure/closet/proc/handle_lock_removal(mob/user, obj/item/screwdriver/S)
+ if(lock_in_use)
+ to_chat(user, "Wait for work on [src] to be done first!")
+ return
+ if(locked)
+ to_chat(user, "Unlock it first!")
+ return
+ if(!secure)
+ to_chat(user, "[src] doesn't have a lock that you can remove!")
+ return
+ if(!istype(S))
+ return
+ var/brokenword = broken ? "broken " : null
+ user.visible_message("[user] begins removing the [brokenword]lock on [src]...","You begin removing the [brokenword]lock on [src]...")
+ playsound(loc, S.usesound, 50, 1)
+ lock_in_use = TRUE
+ if(!do_after(user, 100 * S.toolspeed, target = src))
+ lock_in_use = FALSE
+ return
+ to_chat(user, "You remove the [brokenword]lock from [src]!")
+ if(!QDELETED(lockerelectronics))
+ lockerelectronics.add_fingerprint(user)
+ lockerelectronics.forceMove(user.loc)
+ lockerelectronics = null
+ req_access = null
+ secure = FALSE
+ broken = FALSE
+ locked = FALSE
+ lock_in_use = FALSE
+ update_icon()
+ return TRUE
+
+
/obj/structure/closet/deconstruct(disassembled = TRUE)
if(ispath(material_drop) && material_drop_amount && !(flags_1 & NODECONSTRUCT_1))
new material_drop(loc, material_drop_amount)
@@ -247,7 +352,11 @@
deconstruct(TRUE)
return
if(user.transferItemToLoc(W, drop_location())) // so we put in unlit welder too
- return
+ return TRUE
+ else if(istype(W, /obj/item/electronics/airlock))
+ handle_lock_addition(user, W)
+ else if(istype(W, /obj/item/screwdriver))
+ handle_lock_removal(user, W)
else if(istype(W, /obj/item/weldingtool) && can_weld_shut)
if(!W.tool_start_check(user, amount=0))
return
@@ -258,7 +367,7 @@
return
welded = !welded
after_weld(welded)
- user.visible_message("[user] [welded ? "welds shut" : "unwelded"] \the [src].",
+ user.visible_message("[user] [welded ? "welds shut" : "unwelds"] \the [src].",
"You [welded ? "weld" : "unwelded"] \the [src] with \the [W].",
"You hear welding.")
update_icon()
@@ -401,20 +510,12 @@
if(user.loc == src) //so we don't get the message if we resisted multiple times and succeeded.
to_chat(user, "You fail to break out of [src]!")
-/obj/structure/closet/proc/bust_open()
- welded = FALSE //applies to all lockers
- locked = FALSE //applies to critter crates and secure lockers only
- broken = TRUE //applies to secure lockers only
- open()
-
/obj/structure/closet/AltClick(mob/user)
..()
- if(!user.canUseTopic(src, BE_CLOSE) || !isturf(loc))
+ if(!user.canUseTopic(src, be_close=TRUE) || !isturf(loc))
+ to_chat(user, "You can't do that right now!")
return
- if(opened || !secure)
- return
- else
- togglelock(user)
+ togglelock(user)
/obj/structure/closet/CtrlShiftClick(mob/living/user)
if(!HAS_TRAIT(user, TRAIT_SKITTISH))
@@ -423,20 +524,6 @@
return
dive_into(user)
-/obj/structure/closet/proc/togglelock(mob/living/user, silent)
- if(secure && !broken)
- if(allowed(user))
- if(iscarbon(user))
- add_fingerprint(user)
- locked = !locked
- user.visible_message("[user] [locked ? null : "un"]locks [src].",
- "You [locked ? null : "un"]lock [src].")
- update_icon()
- else if(!silent)
- to_chat(user, "Access Denied")
- else if(secure && broken)
- to_chat(user, "\The [src] is broken!")
-
/obj/structure/closet/emag_act(mob/user)
if(secure && !broken)
user.visible_message("Sparks fly from [src]!",
@@ -445,6 +532,9 @@
playsound(src, "sparks", 50, 1)
broken = TRUE
locked = FALSE
+ if(!QDELETED(lockerelectronics))
+ qdel(lockerelectronics)
+ lockerelectronics = null
update_icon()
/obj/structure/closet/get_remote_view_fullscreens(mob/user)
@@ -458,16 +548,19 @@
if (!(. & EMP_PROTECT_CONTENTS))
for(var/obj/O in src)
O.emp_act(severity)
- if(secure && !broken && !(. & EMP_PROTECT_SELF))
- if(prob(50 / severity))
- locked = !locked
- update_icon()
- if(prob(20 / severity) && !opened)
- if(!locked)
- open()
- else
- req_access = list()
- req_access += pick(get_all_accesses())
+ if(!secure || broken)
+ return ..()
+ if(prob(50 / severity))
+ locked = !locked
+ update_icon()
+ if(prob(20 / severity) && !opened)
+ if(!locked)
+ open()
+ else
+ req_access = list()
+ req_access += pick(get_all_accesses())
+ if(!QDELETED(lockerelectronics))
+ lockerelectronics.accesses = req_access
/obj/structure/closet/contents_explosion(severity, target)
for(var/atom/A in contents)
diff --git a/code/game/objects/structures/crates_lockers/closets/bodybag.dm b/code/game/objects/structures/crates_lockers/closets/bodybag.dm
index 502b23354c..1c34850274 100644
--- a/code/game/objects/structures/crates_lockers/closets/bodybag.dm
+++ b/code/game/objects/structures/crates_lockers/closets/bodybag.dm
@@ -49,6 +49,12 @@
return 1
return 0
+/obj/structure/closet/body_bag/handle_lock_addition()
+ return
+
+/obj/structure/closet/body_bag/handle_lock_removal()
+ return
+
/obj/structure/closet/body_bag/MouseDrop(over_object, src_location, over_location)
. = ..()
if(over_object == usr && Adjacent(usr) && (in_range(src, usr) || usr.contents.Find(src)))
diff --git a/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm b/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm
index 82b0d1a441..aad68b2166 100644
--- a/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm
+++ b/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm
@@ -57,6 +57,11 @@
I.alpha = 0
animate(I, pixel_z = 32, alpha = 255, time = 5, easing = ELASTIC_EASING)
+/obj/structure/closet/cardboard/handle_lock_addition() //Whoever heard of a lockable cardboard box anyway
+ return
+
+/obj/structure/closet/cardboard/handle_lock_removal()
+ return
/obj/structure/closet/cardboard/metal
name = "large metal box"
diff --git a/code/game/objects/structures/crates_lockers/closets/job_closets.dm b/code/game/objects/structures/crates_lockers/closets/job_closets.dm
index d6d2f18e5a..d2ab9ea6fb 100644
--- a/code/game/objects/structures/crates_lockers/closets/job_closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets/job_closets.dm
@@ -358,3 +358,8 @@
new /obj/item/clothing/shoes/workboots/mining(src)
new /obj/item/storage/backpack/satchel/explorer(src)
+/obj/structure/closet/coffin/handle_lock_addition()
+ return
+
+/obj/structure/closet/coffin/handle_lock_removal()
+ return
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/personal.dm b/code/game/objects/structures/crates_lockers/closets/secure/personal.dm
index eb764fc230..e44d3c9079 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/personal.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/personal.dm
@@ -4,6 +4,18 @@
req_access = list(ACCESS_ALL_PERSONAL_LOCKERS)
var/registered_name = null
+/obj/structure/closet/secure_closet/personal/examine(mob/user)
+ ..()
+ if(registered_name)
+ to_chat(user, "The display reads, \"Owned by [registered_name]\".")
+
+/obj/structure/closet/secure_closet/personal/check_access(obj/item/card/id/I)
+ . = ..()
+ if(!I || !istype(I))
+ return
+ if(registered_name == I.registered_name)
+ return TRUE
+
/obj/structure/closet/secure_closet/personal/PopulateContents()
..()
if(prob(50))
@@ -33,21 +45,21 @@
/obj/structure/closet/secure_closet/personal/attackby(obj/item/W, mob/user, params)
var/obj/item/card/id/I = W.GetID()
- if(istype(I))
- if(broken)
- to_chat(user, "It appears to be broken.")
- return
- if(!I || !I.registered_name)
- return
- if(allowed(user) || !registered_name || (istype(I) && (registered_name == I.registered_name)))
- //they can open all lockers, or nobody owns this, or they own this locker
- locked = !locked
- update_icon()
-
- if(!registered_name)
- registered_name = I.registered_name
- desc = "Owned by [I.registered_name]."
- else
- to_chat(user, "Access Denied.")
- else
+ if(!I || !istype(I))
return ..()
+ if(!can_lock(user, FALSE)) //Can't do anything if there isn't a lock!
+ return
+ if(I.registered_name && !registered_name)
+ to_chat(user, "You claim [src].")
+ registered_name = I.registered_name
+ else
+ ..()
+
+/obj/structure/closet/secure_closet/personal/handle_lock_addition() //If lock construction is successful we don't care what access the electronics had, so we override it
+ if(..())
+ req_access = list(ACCESS_ALL_PERSONAL_LOCKERS)
+ lockerelectronics.accesses = req_access
+
+/obj/structure/closet/secure_closet/personal/handle_lock_removal()
+ if(..())
+ registered_name = null
diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm
index 067b1b0eb1..6caa7d834b 100644
--- a/code/game/objects/structures/crates_lockers/crates.dm
+++ b/code/game/objects/structures/crates_lockers/crates.dm
@@ -54,6 +54,12 @@
manifest = null
update_icon()
+/obj/structure/closet/crate/handle_lock_addition()
+ return
+
+/obj/structure/closet/crate/handle_lock_removal()
+ return
+
/obj/structure/closet/crate/proc/tear_manifest(mob/user)
to_chat(user, "You tear the manifest off of [src].")
playsound(src, 'sound/items/poster_ripped.ogg', 75, 1)
diff --git a/code/game/objects/structures/dresser.dm b/code/game/objects/structures/dresser.dm
index 461e19adf1..cdca354563 100644
--- a/code/game/objects/structures/dresser.dm
+++ b/code/game/objects/structures/dresser.dm
@@ -79,4 +79,4 @@
var/n_color = input(H, "Choose your [garment_type]'\s color.", "Character Preference", default_color) as color|null
if(!n_color || !H.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
return default_color
- return n_color
+ return sanitize_hexcolor(n_color)
diff --git a/code/game/objects/structures/femur_breaker.dm b/code/game/objects/structures/femur_breaker.dm
new file mode 100644
index 0000000000..e3002a8fae
--- /dev/null
+++ b/code/game/objects/structures/femur_breaker.dm
@@ -0,0 +1,175 @@
+#define BREAKER_ANIMATION_LENGTH 32
+#define BREAKER_SLAT_RAISED 1
+#define BREAKER_SLAT_MOVING 2
+#define BREAKER_SLAT_DROPPED 3
+#define BREAKER_ACTIVATE_DELAY 30
+#define BREAKER_WRENCH_DELAY 10
+#define BREAKER_ACTION_INUSE 5
+#define BREAKER_ACTION_WRENCH 6
+
+/obj/structure/femur_breaker
+ name = "femur breaker"
+ desc = "A large structure used to break the femurs of traitors and treasonists."
+ icon = 'icons/obj/femur_breaker.dmi'
+ icon_state = "breaker_raised"
+ can_buckle = TRUE
+ anchored = TRUE
+ density = TRUE
+ max_buckled_mobs = 1
+ buckle_lying = TRUE
+ buckle_prevents_pull = TRUE
+ layer = ABOVE_MOB_LAYER
+ var/slat_status = BREAKER_SLAT_RAISED
+ var/current_action = 0 // What's currently happening to the femur breaker
+
+/obj/structure/femur_breaker/examine(mob/user)
+ ..()
+
+ var/msg = ""
+
+ msg += "It is [anchored ? "secured to the floor." : "unsecured."]
"
+
+ if (slat_status == BREAKER_SLAT_RAISED)
+ msg += "The breaker slat is in a neutral position."
+ else
+ msg += "The breaker slat is lowered, and must be raised."
+
+ if (LAZYLEN(buckled_mobs))
+ msg += "
"
+ msg += "Someone appears to be strapped in. You can help them unbuckle, or activate the femur breaker."
+
+ to_chat(user, msg)
+
+ return msg
+
+/obj/structure/femur_breaker/attack_hand(mob/user)
+ add_fingerprint(user)
+
+ // Currently being used
+ if (current_action)
+ return
+
+ switch (slat_status)
+ if (BREAKER_SLAT_MOVING)
+ return
+ if (BREAKER_SLAT_DROPPED)
+ slat_status = BREAKER_SLAT_MOVING
+ icon_state = "breaker_raise"
+ addtimer(CALLBACK(src, .proc/raise_slat), BREAKER_ANIMATION_LENGTH)
+ return
+ if (BREAKER_SLAT_RAISED)
+ if (LAZYLEN(buckled_mobs))
+ if (user.a_intent == INTENT_HARM)
+ user.visible_message("[user] begins to pull the lever!",
+ "You begin to the pull the lever.")
+ current_action = BREAKER_ACTION_INUSE
+
+ if (do_after(user, BREAKER_ACTIVATE_DELAY, target = src) && slat_status == BREAKER_SLAT_RAISED)
+ current_action = 0
+ slat_status = BREAKER_SLAT_MOVING
+ icon_state = "breaker_drop"
+ drop_slat(user)
+ else
+ current_action = 0
+ else
+ var/mob/living/carbon/human/H = buckled_mobs[1]
+
+ if (H)
+ H.regenerate_icons()
+
+ unbuckle_all_mobs()
+ else //HERE
+ slat_status = BREAKER_SLAT_DROPPED
+ icon_state = "breaker_drop"
+
+/obj/structure/femur_breaker/proc/damage_leg(mob/living/carbon/human/H)
+ H.emote("scream")
+ H.apply_damage(150, BRUTE, pick(BODY_ZONE_L_LEG, BODY_ZONE_R_LEG))
+ H.adjustBruteLoss(rand(5,20) + (max(0, H.health))) //Make absolutely sure they end up in crit, so that they can succumb if they wish.
+
+/obj/structure/femur_breaker/proc/raise_slat()
+ slat_status = BREAKER_SLAT_RAISED
+ icon_state = "breaker_raised"
+
+/obj/structure/femur_breaker/proc/drop_slat(mob/user)
+ if (buckled_mobs.len)
+ var/mob/living/carbon/human/H = buckled_mobs[1]
+
+ if (!H)
+ return
+
+ playsound(src, 'sound/effects/femur_breaker.ogg', 100, FALSE)
+ H.Stun(BREAKER_ANIMATION_LENGTH)
+ addtimer(CALLBACK(src, .proc/damage_leg, H), BREAKER_ANIMATION_LENGTH, TIMER_UNIQUE)
+ log_combat(user, H, "femur broke", src)
+
+ slat_status = BREAKER_SLAT_DROPPED
+ icon_state = "breaker"
+
+/obj/structure/femur_breaker/buckle_mob(mob/living/M, force = FALSE, check_loc = TRUE)
+ if (!anchored)
+ to_chat(usr, "The [src] needs to be wrenched to the floor!")
+ return FALSE
+
+ if (!istype(M, /mob/living/carbon/human))
+ to_chat(usr, "It doesn't look like [M.p_they()] can fit into this properly!")
+ return FALSE
+
+ if (slat_status != BREAKER_SLAT_RAISED)
+ to_chat(usr, "The femur breaker must be in its neutral position before buckling someone in!")
+ return FALSE
+
+ return ..(M, force, FALSE)
+
+/obj/structure/femur_breaker/post_buckle_mob(mob/living/M)
+ if (!istype(M, /mob/living/carbon/human))
+ return
+
+ var/mob/living/carbon/human/H = M
+
+ if (H.dna)
+ if (H.dna.species)
+ var/datum/species/S = H.dna.species
+
+ if (!istype(S))
+ unbuckle_all_mobs()
+ else
+ unbuckle_all_mobs()
+ else
+ unbuckle_all_mobs()
+
+ ..()
+
+/obj/structure/femur_breaker/can_be_unfasten_wrench(mob/user, silent)
+ if (LAZYLEN(buckled_mobs))
+ if (!silent)
+ to_chat(user, "Can't unfasten, someone's strapped in!")
+ return FAILED_UNFASTEN
+
+ if (current_action)
+ return FAILED_UNFASTEN
+
+ return ..()
+
+/obj/structure/femur_breaker/wrench_act(mob/living/user, obj/item/I)
+ if (current_action)
+ return
+
+ current_action = BREAKER_ACTION_WRENCH
+
+ if (do_after(user, BREAKER_WRENCH_DELAY, target = src))
+ current_action = 0
+ default_unfasten_wrench(user, I, 0)
+ setDir(SOUTH)
+ return TRUE
+ else
+ current_action = 0
+
+#undef BREAKER_ANIMATION_LENGTH
+#undef BREAKER_SLAT_RAISED
+#undef BREAKER_SLAT_MOVING
+#undef BREAKER_SLAT_DROPPED
+#undef BREAKER_ACTIVATE_DELAY
+#undef BREAKER_WRENCH_DELAY
+#undef BREAKER_ACTION_INUSE
+#undef BREAKER_ACTION_WRENCH
diff --git a/code/game/turfs/open.dm b/code/game/turfs/open.dm
index cff219c63e..f6d234b346 100644
--- a/code/game/turfs/open.dm
+++ b/code/game/turfs/open.dm
@@ -272,7 +272,7 @@
return 0
if(ishuman(C) && (lube&NO_SLIP_WHEN_WALKING))
var/mob/living/carbon/human/H = C
- if(!H.sprinting && H.getStaminaLoss() >= 20)
+ if(!H.sprinting && H.getStaminaLoss() <= 20)
return 0
if(!(lube&SLIDE_ICE))
to_chat(C, "You slipped[ O ? " on the [O.name]" : ""]!")
diff --git a/code/modules/admin/create_mob.dm b/code/modules/admin/create_mob.dm
index fad7410a6a..f66cda42dc 100644
--- a/code/modules/admin/create_mob.dm
+++ b/code/modules/admin/create_mob.dm
@@ -15,9 +15,9 @@
H.real_name = random_unique_name(H.gender)
H.name = H.real_name
H.underwear = random_underwear(H.gender)
- H.undie_color = random_color()
+ H.undie_color = random_short_color()
H.undershirt = random_undershirt(H.gender)
- H.shirt_color = random_color()
+ H.shirt_color = random_short_color()
H.skin_tone = random_skin_tone()
H.hair_style = random_hair_style(H.gender)
H.facial_hair_style = random_facial_hair_style(H.gender)
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index 6fa118ab7f..d881044757 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -1882,14 +1882,14 @@
return
var/mob/M = locate(href_list["CentComReply"])
- usr.client.admin_headset_message(M, "CentCom")
+ usr.client.admin_headset_message(M, RADIO_CHANNEL_CENTCOM)
else if(href_list["SyndicateReply"])
if(!check_rights(R_ADMIN))
return
var/mob/M = locate(href_list["SyndicateReply"])
- usr.client.admin_headset_message(M, "Syndicate")
+ usr.client.admin_headset_message(M, RADIO_CHANNEL_SYNDICATE)
else if(href_list["HeadsetMessage"])
if(!check_rights(R_ADMIN))
diff --git a/code/modules/admin/verbs/borgpanel.dm b/code/modules/admin/verbs/borgpanel.dm
index 6295d4be43..c0445d588d 100644
--- a/code/modules/admin/verbs/borgpanel.dm
+++ b/code/modules/admin/verbs/borgpanel.dm
@@ -62,7 +62,7 @@
.["laws"] = borg.laws ? borg.laws.get_law_list(include_zeroth = TRUE) : list()
.["channels"] = list()
for (var/k in GLOB.radiochannels)
- if (k == "Common")
+ if (k == RADIO_CHANNEL_COMMON)
continue
.["channels"] += list(list("name" = k, "installed" = (k in borg.radio.channels)))
.["cell"] = borg.cell ? list("missing" = FALSE, "maxcharge" = borg.cell.maxcharge, "charge" = borg.cell.charge) : list("missing" = TRUE, "maxcharge" = 1, "charge" = 0)
@@ -164,15 +164,15 @@
if (channel in borg.radio.channels) // We're removing a channel
if (!borg.radio.keyslot) // There's no encryption key. This shouldn't happen but we can cope
borg.radio.channels -= channel
- if (channel == "Syndicate")
+ if (channel == RADIO_CHANNEL_SYNDICATE)
borg.radio.syndie = FALSE
- else if (channel == "CentCom")
+ else if (channel == RADIO_CHANNEL_CENTCOM)
borg.radio.independent = FALSE
else
borg.radio.keyslot.channels -= channel
- if (channel == "Syndicate")
+ if (channel == RADIO_CHANNEL_SYNDICATE)
borg.radio.keyslot.syndie = FALSE
- else if (channel == "CentCom")
+ else if (channel == RADIO_CHANNEL_CENTCOM)
borg.radio.keyslot.independent = FALSE
message_admins("[key_name_admin(user)] removed the [channel] radio channel from [ADMIN_LOOKUPFLW(borg)].")
log_admin("[key_name(user)] removed the [channel] radio channel from [key_name(borg)].")
@@ -180,9 +180,9 @@
if (!borg.radio.keyslot) // Assert that an encryption key exists
borg.radio.keyslot = new (borg.radio)
borg.radio.keyslot.channels[channel] = 1
- if (channel == "Syndicate")
+ if (channel == RADIO_CHANNEL_SYNDICATE)
borg.radio.keyslot.syndie = TRUE
- else if (channel == "CentCom")
+ else if (channel == RADIO_CHANNEL_CENTCOM)
borg.radio.keyslot.independent = TRUE
message_admins("[key_name_admin(user)] added the [channel] radio channel to [ADMIN_LOOKUPFLW(borg)].")
log_admin("[key_name(user)] added the [channel] radio channel to [key_name(borg)].")
diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm
index 52e76f95b6..a725399b0f 100644
--- a/code/modules/admin/verbs/randomverbs.dm
+++ b/code/modules/admin/verbs/randomverbs.dm
@@ -65,7 +65,7 @@
return
if (!sender)
- sender = input("Who is the message from?", "Sender") as null|anything in list("CentCom","Syndicate")
+ sender = input("Who is the message from?", "Sender") as null|anything in list(RADIO_CHANNEL_CENTCOM,RADIO_CHANNEL_SYNDICATE)
if(!sender)
return
diff --git a/code/modules/antagonists/changeling/changeling.dm b/code/modules/antagonists/changeling/changeling.dm
index a1b9b53fe9..252e2b5cbe 100644
--- a/code/modules/antagonists/changeling/changeling.dm
+++ b/code/modules/antagonists/changeling/changeling.dm
@@ -353,7 +353,7 @@
/datum/antagonist/changeling/greet()
if (you_are_greet)
to_chat(owner.current, "You are [changelingID], a changeling! You have absorbed and taken the form of a human.")
- to_chat(owner.current, "Use say \":g message\" to communicate with your fellow changelings.")
+ to_chat(owner.current, "Use say \"[MODE_TOKEN_CHANGELING] message\" to communicate with your fellow changelings.")
to_chat(owner.current, "You must complete the following tasks:")
owner.current.playsound_local(get_turf(owner.current), 'sound/ambience/antag/ling_aler.ogg', 100, FALSE, pressure_affected = FALSE)
diff --git a/code/modules/antagonists/changeling/powers/hivemind.dm b/code/modules/antagonists/changeling/powers/hivemind.dm
index 1d7382d947..f7718d7708 100644
--- a/code/modules/antagonists/changeling/powers/hivemind.dm
+++ b/code/modules/antagonists/changeling/powers/hivemind.dm
@@ -1,8 +1,8 @@
-//HIVEMIND COMMUNICATION (:g)
+//HIVEMIND COMMUNICATION //MODE_TOKEN_CHANGELING / :g
/obj/effect/proc_holder/changeling/hivemind_comms
name = "Hivemind Communication"
desc = "We tune our senses to the airwaves to allow us to discreetly communicate and exchange DNA with other changelings."
- helptext = "We will be able to talk with other changelings with :g. Exchanged DNA do not count towards absorb objectives."
+ helptext = "We will be able to talk with other changelings with :g. Exchanged DNA do not count towards absorb objectives." //MODE_TOKEN_CHANGELING needs to be manually updated here.
dna_cost = 1
chemical_cost = -1
action_icon = 'icons/mob/actions/actions_xeno.dmi'
@@ -20,7 +20,7 @@
..()
var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling)
changeling.changeling_speak = 1
- to_chat(user, "Use say \":g message\" to communicate with the other changelings.")
+ to_chat(user, "Use say \"[MODE_TOKEN_CHANGELING] message\" to communicate with the other changelings.")
var/obj/effect/proc_holder/changeling/hivemind_upload/S1 = new
if(!changeling.has_sting(S1))
changeling.purchasedpowers+=S1
diff --git a/code/modules/antagonists/changeling/powers/linglink.dm b/code/modules/antagonists/changeling/powers/linglink.dm
index 70df78e3b4..971c811074 100644
--- a/code/modules/antagonists/changeling/powers/linglink.dm
+++ b/code/modules/antagonists/changeling/powers/linglink.dm
@@ -56,8 +56,8 @@
if(M.lingcheck() == LINGHIVE_LING)
to_chat(M, "We can sense a foreign presence in the hivemind...")
target.mind.linglink = 1
- target.say(":g AAAAARRRRGGGGGHHHHH!!")
- to_chat(target, "You can now communicate in the changeling hivemind, say \":g message\" to communicate!")
+ target.say("[MODE_TOKEN_CHANGELING] AAAAARRRRGGGGGHHHHH!!")
+ to_chat(target, "You can now communicate in the changeling hivemind, say \"[MODE_TOKEN_CHANGELING] message\" to communicate!")
target.reagents.add_reagent("salbutamol", 40) // So they don't choke to death while you interrogate them
sleep(1800)
SSblackbox.record_feedback("nested tally", "changeling_powers", 1, list("[name]", "[i]"))
diff --git a/code/modules/antagonists/clockcult/clock_effects/spatial_gateway.dm b/code/modules/antagonists/clockcult/clock_effects/spatial_gateway.dm
index ea2ec4d6ef..5cf7ab7923 100644
--- a/code/modules/antagonists/clockcult/clock_effects/spatial_gateway.dm
+++ b/code/modules/antagonists/clockcult/clock_effects/spatial_gateway.dm
@@ -133,6 +133,9 @@
return FALSE
if(!uses)
return FALSE
+ if(!do_teleport(A, get_turf(linked_gateway), channel = TELEPORT_CHANNEL_CULT, forced = TRUE))
+ visible_message("[A] bounces off [src]!")
+ return FALSE
if(isliving(A))
var/mob/living/user = A
to_chat(user, "You pass through [src] and appear elsewhere!")
@@ -141,7 +144,6 @@
playsound(linked_gateway, 'sound/effects/empulse.ogg', 50, 1)
transform = matrix() * 1.5
linked_gateway.transform = matrix() * 1.5
- A.forceMove(get_turf(linked_gateway))
if(!no_cost)
uses = max(0, uses - 1)
linked_gateway.uses = max(0, linked_gateway.uses - 1)
diff --git a/code/modules/antagonists/clockcult/clock_helpers/slab_abilities.dm b/code/modules/antagonists/clockcult/clock_helpers/slab_abilities.dm
index 530c4c5662..23caa788d4 100644
--- a/code/modules/antagonists/clockcult/clock_helpers/slab_abilities.dm
+++ b/code/modules/antagonists/clockcult/clock_helpers/slab_abilities.dm
@@ -67,6 +67,7 @@
name = "replicant manacles"
desc = "Heavy manacles made out of freezing-cold metal. It looks like brass, but feels much more solid."
icon_state = "brass_manacles"
+ item_state = "brass_manacles"
item_flags = DROPDEL
/obj/item/restraints/handcuffs/clockwork/dropped(mob/user)
diff --git a/code/modules/antagonists/clockcult/clock_items/clockwork_armor.dm b/code/modules/antagonists/clockcult/clock_items/clockwork_armor.dm
index 54027266e5..0ac96c47f9 100644
--- a/code/modules/antagonists/clockcult/clock_items/clockwork_armor.dm
+++ b/code/modules/antagonists/clockcult/clock_items/clockwork_armor.dm
@@ -69,7 +69,7 @@
heat_protection = CHEST|GROIN|LEGS
resistance_flags = FIRE_PROOF | ACID_PROOF
armor = list("melee" = 60, "bullet" = 70, "laser" = -25, "energy" = 0, "bomb" = 60, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
- allowed = list(/obj/item/clockwork, /obj/item/clothing/glasses/wraith_spectacles, /obj/item/clothing/glasses/judicial_visor, /obj/item/mmi/posibrain/soul_vessel, /obj/item/reagent_containers/food/drinks/holyoil)
+ allowed = list(/obj/item/clockwork, /obj/item/clothing/glasses/wraith_spectacles, /obj/item/clothing/glasses/judicial_visor, /obj/item/mmi/posibrain/soul_vessel, /obj/item/reagent_containers/food/drinks/bottle/holyoil)
/obj/item/clothing/suit/armor/clockwork/Initialize()
. = ..()
diff --git a/code/modules/antagonists/clockcult/clock_scriptures/scripture_drivers.dm b/code/modules/antagonists/clockcult/clock_scriptures/scripture_drivers.dm
index 552a747651..6d6b1fa9d0 100644
--- a/code/modules/antagonists/clockcult/clock_scriptures/scripture_drivers.dm
+++ b/code/modules/antagonists/clockcult/clock_scriptures/scripture_drivers.dm
@@ -27,7 +27,7 @@
to_chat(invoker, "Stargazers can't be built off-station.")
return
return ..()
-
+
//Integration Cog: Creates an integration cog that can be inserted into APCs to passively siphon power.
/datum/clockwork_scripture/create_object/integration_cog
@@ -224,12 +224,14 @@
. = ..()
/datum/clockwork_scripture/abscond/scripture_effects()
- var/take_pulling = invoker.pulling && isliving(invoker.pulling) && get_clockwork_power(ABSCOND_ABDUCTION_COST)
+ var/mob/living/pulled_mob = (invoker.pulling && isliving(invoker.pulling) && get_clockwork_power(ABSCOND_ABDUCTION_COST)) ? invoker.pulling : null
var/turf/T
if(GLOB.ark_of_the_clockwork_justiciar)
T = get_step(GLOB.ark_of_the_clockwork_justiciar, SOUTH)
else
T = get_turf(pick(GLOB.servant_spawns))
+ if(!do_teleport(invoker, T, channel = TELEPORT_CHANNEL_CULT, forced = TRUE))
+ return
invoker.visible_message("[invoker] flickers and phases out of existence!", \
"You feel a dizzying sense of vertigo as you're yanked back to Reebe!")
T.visible_message("[invoker] flickers and phases into existence!")
@@ -237,10 +239,9 @@
playsound(T, 'sound/magic/magic_missile.ogg', 50, TRUE)
do_sparks(5, TRUE, invoker)
do_sparks(5, TRUE, T)
- if(take_pulling)
+ if(pulled_mob && do_teleport(pulled_mob, T, channel = TELEPORT_CHANNEL_CULT, forced = TRUE))
adjust_clockwork_power(-special_power_cost)
- invoker.pulling.forceMove(T)
- invoker.forceMove(T)
+ invoker.start_pulling(pulled_mob) //forcemove resets pulls, so we need to re-pull
if(invoker.client)
animate(invoker.client, color = client_color, time = 25)
diff --git a/code/modules/antagonists/clockcult/clock_structures/ark_of_the_clockwork_justicar.dm b/code/modules/antagonists/clockcult/clock_structures/ark_of_the_clockwork_justicar.dm
index 2b1d9d5f02..56b36d13e6 100644
--- a/code/modules/antagonists/clockcult/clock_structures/ark_of_the_clockwork_justicar.dm
+++ b/code/modules/antagonists/clockcult/clock_structures/ark_of_the_clockwork_justicar.dm
@@ -131,10 +131,8 @@
if(!M || !M.current)
continue
if(isliving(M.current) && M.current.stat != DEAD)
- if(isAI(M.current))
- M.current.forceMove(get_step(get_step(src, NORTH),NORTH)) // AI too fat, must make sure it always ends up a 2 tiles north instead of on the ark.
- else
- M.current.forceMove(get_turf(src))
+ var/turf/t_turf = isAI(M.current) ? get_step(get_step(src, NORTH),NORTH) : get_turf(src) // AI too fat, must make sure it always ends up a 2 tiles north instead of on the ark.
+ do_teleport(M, t_turf, channel = TELEPORT_CHANNEL_CULT, forced = TRUE)
M.current.overlay_fullscreen("flash", /obj/screen/fullscreen/flash)
M.current.clear_fullscreen("flash", 5)
playsound(src, 'sound/magic/clockwork/invoke_general.ogg', 50, FALSE)
diff --git a/code/modules/antagonists/cult/blood_magic.dm b/code/modules/antagonists/cult/blood_magic.dm
index a5fd516a42..f58ffc56d2 100644
--- a/code/modules/antagonists/cult/blood_magic.dm
+++ b/code/modules/antagonists/cult/blood_magic.dm
@@ -490,11 +490,12 @@
to_chat(user, "The target rune is blocked. Attempting to teleport to it would be massively unwise.")
return
uses--
- user.visible_message("Dust flows from [user]'s hand, and [user.p_they()] disappear[user.p_s()] with a sharp crack!", \
- "You speak the words of the talisman and find yourself somewhere else!", "You hear a sharp crack.")
+ var/turf/origin = get_turf(user)
var/mob/living/L = target
- L.forceMove(dest)
- dest.visible_message("There is a boom of outrushing air as something appears above the rune!", null, "You hear a boom.")
+ if(do_teleport(L, dest, channel = TELEPORT_CHANNEL_CULT))
+ origin.visible_message("Dust flows from [user]'s hand, and [user.p_they()] disappear[user.p_s()] with a sharp crack!", \
+ "You speak the words of the talisman and find yourself somewhere else!", "You hear a sharp crack.")
+ dest.visible_message("There is a boom of outrushing air as something appears above the rune!", null, "You hear a boom.")
..()
//Shackles
diff --git a/code/modules/antagonists/cult/cult_items.dm b/code/modules/antagonists/cult/cult_items.dm
index 9a17c3270b..dc2c29eb6d 100644
--- a/code/modules/antagonists/cult/cult_items.dm
+++ b/code/modules/antagonists/cult/cult_items.dm
@@ -568,7 +568,7 @@
var/mob/living/carbon/C = user
if(C.pulling)
var/atom/movable/pulled = C.pulling
- pulled.forceMove(T)
+ do_teleport(pulled, T, channel = TELEPORT_CHANNEL_CULT)
. = pulled
/obj/item/cult_shift/attack_self(mob/user)
@@ -593,13 +593,12 @@
new /obj/effect/temp_visual/dir_setting/cult/phase/out(mobloc, C.dir)
var/atom/movable/pulled = handle_teleport_grab(destination, C)
- C.forceMove(destination)
- if(pulled)
- C.start_pulling(pulled) //forcemove resets pulls, so we need to re-pull
-
- new /obj/effect/temp_visual/dir_setting/cult/phase(destination, C.dir)
- playsound(destination, 'sound/effects/phasein.ogg', 25, 1)
- playsound(destination, "sparks", 50, 1)
+ if(do_teleport(C, destination, channel = TELEPORT_CHANNEL_CULT))
+ if(pulled)
+ C.start_pulling(pulled) //forcemove resets pulls, so we need to re-pull
+ new /obj/effect/temp_visual/dir_setting/cult/phase(destination, C.dir)
+ playsound(destination, 'sound/effects/phasein.ogg', 25, 1)
+ playsound(destination, "sparks", 50, 1)
else
to_chat(C, "The veil cannot be torn here!")
diff --git a/code/modules/antagonists/cult/runes.dm b/code/modules/antagonists/cult/runes.dm
index be8d3b2e0a..a69694ced9 100644
--- a/code/modules/antagonists/cult/runes.dm
+++ b/code/modules/antagonists/cult/runes.dm
@@ -422,6 +422,7 @@ structure_check() searches for nearby cultist structures required for the invoca
return
var/movedsomething = FALSE
var/moveuserlater = FALSE
+ var/movesuccess = FALSE
for(var/atom/movable/A in T)
if(ishuman(A))
new /obj/effect/temp_visual/dir_setting/cult/phase/out(T, A.dir)
@@ -432,20 +433,26 @@ structure_check() searches for nearby cultist structures required for the invoca
continue
if(!A.anchored)
movedsomething = TRUE
- A.forceMove(target)
+ if(do_teleport(A, target, forceMove = TRUE, channel = TELEPORT_CHANNEL_CULT))
+ movesuccess = TRUE
if(movedsomething)
..()
- visible_message("There is a sharp crack of inrushing air, and everything above the rune disappears!", null, "You hear a sharp crack.")
- to_chat(user, "You[moveuserlater ? "r vision blurs, and you suddenly appear somewhere else":" send everything above the rune away"].")
if(moveuserlater)
- user.forceMove(target)
+ if(do_teleport(user, target, channel = TELEPORT_CHANNEL_CULT))
+ movesuccess = TRUE
+ if(movesuccess)
+ visible_message("There is a sharp crack of inrushing air, and everything above the rune disappears!", null, "You hear a sharp crack.")
+ to_chat(user, "You[moveuserlater ? "r vision blurs, and you suddenly appear somewhere else":" send everything above the rune away"].")
+ else
+ to_chat(user, "You[moveuserlater ? "r vision blurs briefly, but nothing happens":" try send everything above the rune away, but the teleportation fails"].")
if(is_mining_level(z) && !is_mining_level(target.z)) //No effect if you stay on lavaland
actual_selected_rune.handle_portal("lava")
else
var/area/A = get_area(T)
if(A.map_name == "Space")
actual_selected_rune.handle_portal("space", T)
- target.visible_message("There is a boom of outrushing air as something appears above the rune!", null, "You hear a boom.")
+ if(movesuccess)
+ target.visible_message("There is a boom of outrushing air as something appears above the rune!", null, "You hear a boom.")
else
fail_invoke()
diff --git a/code/modules/antagonists/nukeop/equipment/nuclear_challenge.dm b/code/modules/antagonists/nukeop/equipment/nuclear_challenge.dm
index c616459bd1..b274283621 100644
--- a/code/modules/antagonists/nukeop/equipment/nuclear_challenge.dm
+++ b/code/modules/antagonists/nukeop/equipment/nuclear_challenge.dm
@@ -62,7 +62,10 @@ GLOBAL_LIST_EMPTY(jam_on_wardec)
for(var/obj/machinery/computer/camera_advanced/shuttle_docker/D in GLOB.jam_on_wardec)
D.jammed = TRUE
- new uplink_type(get_turf(user), user.key, CHALLENGE_TELECRYSTALS + CEILING(PLAYER_SCALING * GLOB.player_list.len, 1))
+ var/list/nukeops = get_antag_minds(/datum/antagonist/nukeop)
+ var/actual_players = GLOB.joined_player_list.len - nukeops.len
+
+ new uplink_type(get_turf(user), user.key, CHALLENGE_TELECRYSTALS + CEILING(PLAYER_SCALING * actual_players, 1))
CONFIG_SET(number/shuttle_refuel_delay, max(CONFIG_GET(number/shuttle_refuel_delay), CHALLENGE_SHUTTLE_DELAY))
SSblackbox.record_feedback("amount", "nuclear_challenge_mode", 1)
@@ -72,7 +75,10 @@ GLOBAL_LIST_EMPTY(jam_on_wardec)
if(declaring_war)
to_chat(user, "You are already in the process of declaring war! Make your mind up.")
return FALSE
- if(GLOB.player_list.len < CHALLENGE_MIN_PLAYERS)
+
+ var/list/nukeops = get_antag_minds(/datum/antagonist/nukeop)
+ var/actual_players = GLOB.joined_player_list.len - nukeops.len
+ if(actual_players < CHALLENGE_MIN_PLAYERS)
to_chat(user, "The enemy crew is too small to be worth declaring war on.")
return FALSE
if(!user.onSyndieBase())
diff --git a/code/modules/antagonists/swarmer/swarmer.dm b/code/modules/antagonists/swarmer/swarmer.dm
index 9fb2c3e2b7..87cee7586d 100644
--- a/code/modules/antagonists/swarmer/swarmer.dm
+++ b/code/modules/antagonists/swarmer/swarmer.dm
@@ -488,7 +488,7 @@
S.set_up(4,0,get_turf(target))
S.start()
playsound(src,'sound/effects/sparks4.ogg',50,1)
- do_teleport(target, F, 0)
+ do_teleport(target, F, 0, channel = TELEPORT_CHANNEL_BLUESPACE)
/mob/living/simple_animal/hostile/swarmer/electrocute_act(shock_damage, obj/source, siemens_coeff = 1, safety = FALSE, tesla_shock = FALSE, illusion = FALSE, stun = TRUE)
if(!tesla_shock)
diff --git a/code/modules/antagonists/wizard/equipment/artefact.dm b/code/modules/antagonists/wizard/equipment/artefact.dm
index 86493f6322..08e00ea0f4 100644
--- a/code/modules/antagonists/wizard/equipment/artefact.dm
+++ b/code/modules/antagonists/wizard/equipment/artefact.dm
@@ -408,7 +408,7 @@
break
var/turf/potential_T = find_safe_turf()
if(T.z != potential_T.z || abs(get_dist_euclidian(potential_T,T)) > 50 - breakout)
- user.forceMove(potential_T)
+ do_teleport(user, potential_T, channel = TELEPORT_CHANNEL_MAGIC)
user.canmove = 0
T = potential_T
break
diff --git a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm
index 552b9dbd64..35b30107d8 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm
@@ -27,7 +27,7 @@
var/obj/item/radio/radio
var/radio_key = /obj/item/encryptionkey/headset_med
- var/radio_channel = "Medical"
+ var/radio_channel = RADIO_CHANNEL_MEDICAL
var/running_anim = FALSE
diff --git a/code/modules/cargo/exports/manifest.dm b/code/modules/cargo/exports/manifest.dm
index 02b060e0bf..d03f5a46ce 100644
--- a/code/modules/cargo/exports/manifest.dm
+++ b/code/modules/cargo/exports/manifest.dm
@@ -81,6 +81,7 @@
/datum/export/paperwork_correct
cost = 150
+ k_elasticity = 0
unit_name = "correct paperwork"
export_types = list(/obj/item/folder/paperwork_correct)
@@ -88,5 +89,6 @@
/datum/export/paperwork_incorrect
cost = -500 // Failed to meet NT standers
+ k_elasticity = 0
unit_name = "returned incorrect paperwork"
export_types = list(/obj/item/folder/paperwork)
diff --git a/code/modules/cargo/packs.dm b/code/modules/cargo/packs.dm
index 53a8ab42c3..5656287c52 100644
--- a/code/modules/cargo/packs.dm
+++ b/code/modules/cargo/packs.dm
@@ -2006,7 +2006,8 @@
/obj/item/storage/box/mre/menu1/safe,
/obj/item/storage/box/mre/menu2/safe,
/obj/item/storage/box/mre/menu2/safe,
- /obj/item/storage/box/mre/menu3)
+ /obj/item/storage/box/mre/menu3,
+ /obj/item/storage/box/mre/menu4/safe)
crate_name = "MRE crate (emergency rations)"
/datum/supply_pack/organic/pizza
@@ -2233,6 +2234,12 @@
/obj/item/clothing/neck/petcollar)
crate_name = "pug crate"
+/datum/supply_pack/organic/critter/kiwi
+ name = "Space kiwi Crate"
+ cost = 2000
+ contains = list( /mob/living/simple_animal/kiwi)
+ crate_name = "space kiwi crate"
+
/datum/supply_pack/critter/snake
name = "Snake Crate"
desc = "Tired of these MOTHER FUCKING snakes on this MOTHER FUCKING space station? Then this isn't the crate for you. Contains three poisonous snakes."
@@ -2610,6 +2617,13 @@
/obj/item/vending_refill/wardrobe/law_wardrobe)
crate_name = "security department supply crate"
+/datum/supply_pack/costumes_toys/kinkmate
+ name = "Kinkmate construction kit"
+ cost = 2000
+ contraband = TRUE
+ contains = list(/obj/item/vending_refill/kink, /obj/item/circuitboard/machine/kinkmate)
+ crate_name = "Kinkmate construction kit"
+
//////////////////////////////////////////////////////////////////////////////
//////////////////////////// Miscellaneous ///////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
@@ -2723,6 +2737,26 @@
crate_type = /obj/structure/closet/crate/wooden
crate_name = "festive wrapping paper crate"
+/datum/supply_pack/misc/paper_work
+ name = "Freelance Paper work"
+ desc = "The Nanotrasen Primary Bureaucratic Database Intelligence (PDBI) reports that the station has not completed its funding and grant paperwork this solar cycle. In order to gain further funding, your station is required to fill out (10) ten of these forms or no additional capital will be disbursed. We have sent you ten copies of the following form and we expect every one to be up to Nanotrasen Standards." // Disbursement. It's not a typo, look it up.
+ cost = 700 // Net of 0 credits
+ contains = list(/obj/item/folder/paperwork,
+ /obj/item/folder/paperwork,
+ /obj/item/folder/paperwork,
+ /obj/item/folder/paperwork,
+ /obj/item/folder/paperwork,
+ /obj/item/folder/paperwork,
+ /obj/item/folder/paperwork,
+ /obj/item/folder/paperwork,
+ /obj/item/folder/paperwork,
+ /obj/item/folder/paperwork,
+ /obj/item/pen/fountain,
+ /obj/item/pen/fountain,
+ /obj/item/pen/fountain,
+ /obj/item/pen/fountain,
+ /obj/item/pen/fountain)
+ crate_name = "Paperwork"
/datum/supply_pack/misc/funeral
name = "Funeral Supply crate"
@@ -2735,18 +2769,11 @@
crate_name = "coffin"
crate_type = /obj/structure/closet/crate/coffin
-/datum/supply_pack/misc/religious_supplies
- name = "Religious Supplies Crate"
- desc = "Keep your local chaplain happy and well-supplied, lest they call down judgement upon your cargo bay. Contains two bottles of holywater, bibles, chaplain robes, and burial garmets."
- cost = 4000 // it costs so much because the Space Church is ran by Space Jews
- contains = list(/obj/item/reagent_containers/food/drinks/bottle/holywater,
- /obj/item/reagent_containers/food/drinks/bottle/holywater,
- /obj/item/storage/book/bible/booze,
- /obj/item/storage/book/bible/booze,
- /obj/item/clothing/suit/hooded/chaplain_hoodie,
- /obj/item/clothing/suit/hooded/chaplain_hoodie
- )
- crate_name = "religious supplies crate"
+/datum/supply_pack/misc/jukebox
+ name = "Jukebox"
+ cost = 35000
+ contains = list(/obj/machinery/jukebox)
+ crate_name = "Jukebox"
/datum/supply_pack/misc/lewd
name = "Lewd Crate" // OwO
@@ -2779,26 +2806,18 @@
crate_name = "deluxe keg"
crate_type = /obj/structure/closet/crate
-/datum/supply_pack/misc/paper_work
- name = "Freelance Paper work"
- desc = "The Nanotrasen Primary Bureaucratic Database Intelligence (PDBI) reports that the station has not completed its funding and grant paperwork this solar cycle. In order to gain further funding, your station is required to fill out (10) ten of these forms or no additional capital will be disbursed. We have sent you ten copies of the following form and we expect every one to be up to Nanotrasen Standards." // Disbursement. It's not a typo, look it up.
- cost = 400 // Net of 0 credits
- contains = list(/obj/item/folder/paperwork,
- /obj/item/folder/paperwork,
- /obj/item/folder/paperwork,
- /obj/item/folder/paperwork,
- /obj/item/folder/paperwork,
- /obj/item/folder/paperwork,
- /obj/item/folder/paperwork,
- /obj/item/folder/paperwork,
- /obj/item/folder/paperwork,
- /obj/item/folder/paperwork,
- /obj/item/pen/fountain,
- /obj/item/pen/fountain,
- /obj/item/pen/fountain,
- /obj/item/pen/fountain,
- /obj/item/pen/fountain)
- crate_name = "Paperwork"
+/datum/supply_pack/misc/religious_supplies
+ name = "Religious Supplies Crate"
+ desc = "Keep your local chaplain happy and well-supplied, lest they call down judgement upon your cargo bay. Contains two bottles of holywater, bibles, chaplain robes, and burial garmets."
+ cost = 4000 // it costs so much because the Space Church is ran by Space Jews
+ contains = list(/obj/item/reagent_containers/food/drinks/bottle/holywater,
+ /obj/item/reagent_containers/food/drinks/bottle/holywater,
+ /obj/item/storage/book/bible/booze,
+ /obj/item/storage/book/bible/booze,
+ /obj/item/clothing/suit/hooded/chaplain_hoodie,
+ /obj/item/clothing/suit/hooded/chaplain_hoodie
+ )
+ crate_name = "religious supplies crate"
/datum/supply_pack/misc/randomised/promiscuous
name = "Promiscuous Organs"
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index 8493030a30..146ed9b6cb 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -72,11 +72,11 @@ GLOBAL_LIST_EMPTY(preferences_datums)
var/gender = MALE //gender of character (well duh)
var/age = 30 //age of character
var/underwear = "Nude" //underwear type
- var/undie_color = "#FFFFFF"
+ var/undie_color = "FFF"
var/undershirt = "Nude" //undershirt type
- var/shirt_color = "#FFFFFF"
+ var/shirt_color = "FFF"
var/socks = "Nude" //socks type
- var/socks_color = "#FFFFFF"
+ var/socks_color = "FFF"
var/backbag = DBACKPACK //backpack type
var/jumpsuit_style = PREF_SUIT //suit/skirt
var/hair_style = "Bald" //Hair type
@@ -1321,13 +1321,13 @@ GLOBAL_LIST_EMPTY(preferences_datums)
facial_hair_style = random_facial_hair_style(gender)
if("underwear")
underwear = random_underwear(gender)
- undie_color = random_color()
+ undie_color = random_short_color()
if("undershirt")
undershirt = random_undershirt(gender)
- shirt_color = random_color()
+ shirt_color = random_short_color()
if("socks")
socks = random_socks()
- socks_color = random_color()
+ socks_color = random_short_color()
if(BODY_ZONE_PRECISE_EYES)
eye_color = random_eye_color()
if("s_tone")
@@ -1442,7 +1442,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
if("undie_color")
var/n_undie_color = input(user, "Choose your underwear's color.", "Character Preference", undie_color) as color|null
if(n_undie_color)
- undie_color = n_undie_color
+ undie_color = sanitize_hexcolor(n_undie_color)
if("undershirt")
var/new_undershirt = input(user, "Choose your character's undershirt:", "Character Preference") as null|anything in GLOB.undershirt_list
@@ -1452,7 +1452,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
if("shirt_color")
var/n_shirt_color = input(user, "Choose your undershirt's color.", "Character Preference", shirt_color) as color|null
if(n_shirt_color)
- shirt_color = n_shirt_color
+ shirt_color = sanitize_hexcolor(n_shirt_color)
if("socks")
var/new_socks = input(user, "Choose your character's socks:", "Character Preference") as null|anything in GLOB.socks_list
@@ -1462,7 +1462,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
if("socks_color")
var/n_socks_color = input(user, "Choose your socks' color.", "Character Preference", socks_color) as color|null
if(n_socks_color)
- socks_color = n_socks_color
+ socks_color = sanitize_hexcolor(n_socks_color)
if("eyes")
var/new_eyes = input(user, "Choose your character's eye colour:", "Character Preference","#"+eye_color) as color|null
diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm
index bc36353ac5..1af24f8e61 100644
--- a/code/modules/clothing/gloves/miscellaneous.dm
+++ b/code/modules/clothing/gloves/miscellaneous.dm
@@ -72,9 +72,30 @@
M.adjustStaminaLoss(-2) //Restore 2/3 of the stamina used assuming empty stam buffer. With proper stamina buffer management, this results in a net gain of +.5 stamina per click.
if(warcry)
M.say("[warcry]", ignore_spam = TRUE, forced = "north star warcry")
+
.= FALSE
+
/obj/item/clothing/gloves/rapid/attack_self(mob/user)
var/input = stripped_input(user,"What do you want your battlecry to be? Max length of 6 characters.", ,"", 7)
if(input)
warcry = input
+
+/obj/item/clothing/gloves/rapid/hug
+ name = "Hugs of the North Star"
+ desc = "Just looking at these fills you with an urge to hug the shit out of people"
+ warcry = "owo" //Shouldn't ever come into play
+
+/obj/item/clothing/gloves/rapid/hug/Touch(mob/living/target,proximity = TRUE)
+ var/mob/living/M = loc
+
+ if(M.a_intent == INTENT_HELP)
+ if(target.health >= 0 && !HAS_TRAIT(target, TRAIT_FAKEDEATH)) //Can't hug people who are dying/dead
+ if(target.on_fire || target.lying ) //No spamming extinguishing, helping them up, or other non-hugging/patting help interactions
+ return
+ else
+ M.changeNext_move(CLICK_CD_RAPID)
+ . = FALSE
+
+/obj/item/clothing/gloves/rapid/hug/attack_self(mob/user)
+ return FALSE
\ No newline at end of file
diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm
index bf11d40caf..3c3c8f0e9d 100644
--- a/code/modules/clothing/suits/jobs.dm
+++ b/code/modules/clothing/suits/jobs.dm
@@ -177,3 +177,23 @@
armor = list("melee" = 25, "bullet" = 10, "laser" = 25, "energy" = 10, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 45)
cold_protection = CHEST|ARMS
heat_protection = CHEST|ARMS
+
+
+//Robotocist
+
+/obj/item/clothing/suit/hooded/techpriest
+ name = "techpriest robes"
+ desc = "For those who REALLY love their toasters."
+ icon_state = "techpriest"
+ item_state = "techpriest"
+ body_parts_covered = CHEST|GROIN|LEGS|ARMS
+ hoodtype = /obj/item/clothing/head/hooded/techpriest
+ mutantrace_variation = NO_MUTANTRACE_VARIATION
+
+/obj/item/clothing/head/hooded/techpriest
+ name = "techpriest's hood"
+ desc = "A hood for those who REALLY love their toasters."
+ icon_state = "techpriesthood"
+ item_state = "techpriesthood"
+ body_parts_covered = HEAD
+ flags_inv = HIDEHAIR|HIDEEARS
diff --git a/code/modules/crafting/recipes.dm b/code/modules/crafting/recipes.dm
index 3c614c6a9e..48ade24bbe 100644
--- a/code/modules/crafting/recipes.dm
+++ b/code/modules/crafting/recipes.dm
@@ -211,6 +211,12 @@
time = 40
category = CAT_ROBOT
+/datum/crafting_recipe/potatos
+ name = "Potat-OS"
+ reqs = list(/obj/item/stack/cable_coil = 1, /obj/item/stack/rods = 1, /obj/item/reagent_containers/food/snacks/grown/potato = 1, /obj/item/aicard = 1 )
+ result = /obj/item/aicard/potato
+ category = CAT_ROBOT
+
/datum/crafting_recipe/improvised_pneumatic_cannon //Pretty easy to obtain but
name = "Pneumatic Cannon"
result = /obj/item/pneumatic_cannon/ghetto
@@ -455,6 +461,12 @@
/obj/item/bikehorn = 1)
category = CAT_MISC
+/datum/crafting_recipe/toyneb
+ name = "Non-Euplastic Blade"
+ reqs = list(/obj/item/light/tube = 1, /obj/item/stack/cable_coil = 1, /obj/item/stack/sheet/plastic = 4)
+ result = /obj/item/toy/sword/cx
+ category = CAT_MISC
+
/datum/crafting_recipe/chemical_payload
name = "Chemical Payload (C4)"
result = /obj/item/bombcore/chemical
@@ -660,6 +672,15 @@
tools = list(TOOL_SCREWDRIVER, TOOL_WRENCH, TOOL_WELDER)
category = CAT_MISC
+/datum/crafting_recipe/femur_breaker
+ name = "Femur Breaker"
+ result = /obj/structure/femur_breaker
+ time = 150
+ reqs = list(/obj/item/stack/sheet/metal = 20,
+ /obj/item/stack/cable_coil = 30)
+ tools = list(TOOL_SCREWDRIVER, TOOL_WRENCH, TOOL_WELDER)
+ category = CAT_MISC
+
/datum/crafting_recipe/lizardhat
name = "Lizard Cloche Hat"
result = /obj/item/clothing/head/lizard
diff --git a/code/modules/events/meteor_wave.dm b/code/modules/events/meteor_wave.dm
index 798bcf82dd..af22ae3b96 100644
--- a/code/modules/events/meteor_wave.dm
+++ b/code/modules/events/meteor_wave.dm
@@ -15,6 +15,12 @@
var/list/wave_type
var/wave_name = "normal"
+/datum/round_event/meteor_wave/setup()
+ announceWhen = 1
+ startWhen = rand(300, 600) //Yeah for SOME REASON this is measured in seconds and not deciseconds???
+ endWhen = startWhen + 60
+
+
/datum/round_event/meteor_wave/New()
..()
if(!wave_type)
@@ -46,7 +52,7 @@
kill()
/datum/round_event/meteor_wave/announce(fake)
- priority_announce("Meteors have been detected on collision course with the station.", "Meteor Alert", 'sound/ai/meteors.ogg')
+ priority_announce("Meteors have been detected on collision course with the station. Estimated time until impact: [round(startWhen/60)] minutes.", "Meteor Alert", 'sound/ai/meteors.ogg')
/datum/round_event/meteor_wave/tick()
if(ISMULTIPLE(activeFor, 3))
diff --git a/code/modules/events/wizard/shuffle.dm b/code/modules/events/wizard/shuffle.dm
index ec253f13c3..7e37429223 100644
--- a/code/modules/events/wizard/shuffle.dm
+++ b/code/modules/events/wizard/shuffle.dm
@@ -27,7 +27,7 @@
for(var/mob/living/carbon/human/H in mobs)
if(!moblocs)
break //locs aren't always unique, so this may come into play
- do_teleport(H, moblocs[moblocs.len])
+ do_teleport(H, moblocs[moblocs.len], channel = TELEPORT_CHANNEL_MAGIC)
moblocs.len -= 1
for(var/mob/living/carbon/human/H in GLOB.alive_mob_list)
diff --git a/code/modules/events/wormholes.dm b/code/modules/events/wormholes.dm
index 412e54878a..bb601b7c82 100644
--- a/code/modules/events/wormholes.dm
+++ b/code/modules/events/wormholes.dm
@@ -63,4 +63,4 @@
hard_target = P.loc
if(!hard_target)
return
- do_teleport(M, hard_target, 1, 1, 0, 0) ///You will appear adjacent to the beacon
+ do_teleport(M, hard_target, 1, 1, 0, 0, channel = TELEPORT_CHANNEL_WORMHOLE) ///You will appear adjacent to the beacon
diff --git a/code/modules/food_and_drinks/drinks/drinks/bottle.dm b/code/modules/food_and_drinks/drinks/drinks/bottle.dm
index 0794d274b6..e72b624ae5 100644
--- a/code/modules/food_and_drinks/drinks/drinks/bottle.dm
+++ b/code/modules/food_and_drinks/drinks/drinks/bottle.dm
@@ -7,11 +7,12 @@
/obj/item/reagent_containers/food/drinks/bottle
amount_per_transfer_from_this = 10
volume = 100
+ force = 15
throwforce = 15
item_state = "broken_beer" //Generic held-item sprite until unique ones are made.
lefthand_file = 'icons/mob/inhands/misc/food_lefthand.dmi'
righthand_file = 'icons/mob/inhands/misc/food_righthand.dmi'
- var/const/duration = 13 //Directly relates to the 'knockdown' duration. Lowered by armor (i.e. helmets)
+ var/knockdown_duration = 13 //Directly relates to the 'knockdown' duration. Lowered by armor (i.e. helmets)
isGlass = TRUE
foodtype = ALCOHOL
@@ -61,46 +62,30 @@
to_chat(user, "You don't want to harm [target]!")
return
- force = 15 //Smashing bottles over someoen's head hurts.
-
var/obj/item/bodypart/affecting = user.zone_selected //Find what the player is aiming at
- var/armor_block = 0 //Get the target's armor values for normal attack damage.
- var/armor_duration = 0 //The more force the bottle has, the longer the duration.
+ var/headarmor = 0 // Target's head armor
+ var/armor_block = min(90, target.run_armor_check(affecting, "melee", null, null,armour_penetration)) // For normal attack damage
- //Calculating duration and calculating damage.
- if(ishuman(target))
+ //If they have a hat/helmet and the user is targeting their head.
+ if(affecting == BODY_ZONE_HEAD)
+ var/obj/item/I = target.get_item_by_slot(SLOT_HEAD)
+ if(I)
+ headarmor = I.armor.melee
- var/mob/living/carbon/human/H = target
- var/headarmor = 0 // Target's head armor
- armor_block = H.run_armor_check(affecting, "melee", null, null,armour_penetration) // For normal attack damage
-
- //If they have a hat/helmet and the user is targeting their head.
- if(istype(H.head, /obj/item/clothing/head) && affecting == BODY_ZONE_HEAD)
- headarmor = H.head.armor.melee
- else
- headarmor = 0
-
- //Calculate the knockdown duration for the target.
- armor_duration = (duration - headarmor) + force
-
- else
- //Only humans can have armor, right?
- armor_block = target.run_armor_check(affecting, "melee")
- if(affecting == BODY_ZONE_HEAD)
- armor_duration = duration + force
+ //Calculate the knockdown duration for the target.
+ var/armor_duration = (knockdown_duration - headarmor) + force
//Apply the damage!
- armor_block = min(90,armor_block)
target.apply_damage(force, BRUTE, affecting, armor_block)
// You are going to knock someone out for longer if they are not wearing a helmet.
var/head_attack_message = ""
- if(affecting == BODY_ZONE_HEAD && istype(target, /mob/living/carbon/))
+ if(affecting == BODY_ZONE_HEAD && iscarbon(target))
head_attack_message = " on the head"
//Knockdown the target for the duration that we calculated and divide it by 5.
if(armor_duration)
- target.apply_effect(min(armor_duration, 200) , EFFECT_KNOCKDOWN) // Never knockdown more than a flash!
+ target.Knockdown(min(armor_duration, 200)) // Never knockdown more than a flash!
//Display an attack message.
if(target != user)
@@ -202,17 +187,18 @@
desc = "A flask of holy water...it's been sitting in the Necropolis a while though."
list_reagents = list("hell_water" = 100)
-/obj/item/reagent_containers/food/drinks/holyoil
+/obj/item/reagent_containers/food/drinks/bottle/holyoil
name = "flask of zelus oil"
desc = "A brass flask of Zelus oil, a viscous fluid scenting of brass. Can be thrown to deal damage from afar."
icon_state = "zelusflask"
- list_reagents = list("holyoil" = 30) //Powerfull
+ list_reagents = list("holyoil" = 30)
volume = 30
foodtype = NONE
- force = 12 //Same as a toolbox
+ force = 18
throwforce = 18
+ knockdown_duration = 18
-/obj/item/reagent_containers/food/drinks/holyoil/null
+/obj/item/reagent_containers/food/drinks/bottle/holyoil/empty
list_reagents = list("holyoil" = 0)
/obj/item/reagent_containers/food/drinks/bottle/vermouth
diff --git a/code/modules/food_and_drinks/food/snacks_cake.dm b/code/modules/food_and_drinks/food/snacks_cake.dm
index 6d10a2c6ef..d66cfdd667 100644
--- a/code/modules/food_and_drinks/food/snacks_cake.dm
+++ b/code/modules/food_and_drinks/food/snacks_cake.dm
@@ -17,21 +17,21 @@
foodtype = GRAIN | DAIRY
/obj/item/reagent_containers/food/snacks/store/cake/plain
- name = "vanilla cake"
+ name = "plain cake"
desc = "A plain cake, not a lie."
icon_state = "plaincake"
custom_food_type = /obj/item/reagent_containers/food/snacks/customizable/cake
bonus_reagents = list("nutriment" = 10, "vitamin" = 2)
- tastes = list("vanilla" = 1, "sweetness" = 2,"cake" = 5)
+ tastes = list("sweetness" = 2,"cake" = 5)
foodtype = GRAIN | DAIRY | SUGAR
/obj/item/reagent_containers/food/snacks/cakeslice/plain
- name = "vanilla cake slice"
+ name = "plain cake slice"
desc = "Just a slice of cake, it is enough for everyone."
icon_state = "plaincake_slice"
filling_color = "#FFD700"
customfoodfilling = 1
- tastes = list("vanilla" = 1, "sweetness" = 2,"cake" = 5)
+ tastes = list("sweetness" = 2,"cake" = 5)
foodtype = GRAIN | DAIRY | SUGAR
/obj/item/reagent_containers/food/snacks/store/cake/carrot
@@ -147,7 +147,6 @@
tastes = list("cake" = 5, "sweetness" = 2, "sourness" = 2)
foodtype = GRAIN | DAIRY | FRUIT | SUGAR
-
/obj/item/reagent_containers/food/snacks/store/cake/chocolate
name = "chocolate cake"
desc = "A cake with added chocolate."
@@ -186,7 +185,6 @@
tastes = list("cake" = 5, "sweetness" = 1)
foodtype = GRAIN | DAIRY | JUNKFOOD | SUGAR
-
/obj/item/reagent_containers/food/snacks/store/cake/apple
name = "apple cake"
desc = "A cake centred with Apple."
@@ -248,7 +246,6 @@
/obj/item/reagent_containers/food/snacks/store/cake/bsvc // blackberry strawberries vanilla cake
name = "blackberry and strawberry vanilla cake"
desc = "A plain cake, filled with assortment of blackberries and strawberries!"
- icon = 'modular_citadel/icons/obj/food/cake.dmi'
icon_state = "blackbarry_strawberries_cake_vanilla_cake"
slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/bsvc
bonus_reagents = list("nutriment" = 14, "vitamin" = 4)
@@ -258,7 +255,6 @@
/obj/item/reagent_containers/food/snacks/cakeslice/bsvc
name = "blackberry and strawberry vanilla cake slice"
desc = "Just a slice of cake filled with assortment of blackberries and strawberries!"
- icon = 'modular_citadel/icons/obj/food/cake.dmi'
icon_state = "blackbarry_strawberries_cake_vanilla_slice"
filling_color = "#FFD700"
tastes = list("blackbarry" = 2, "strawberries" = 2, "vanilla" = 2, "sweetness" = 2,"cake" = 3)
@@ -267,7 +263,6 @@
/obj/item/reagent_containers/food/snacks/store/cake/bscc // blackbarry strawberries chocolate cake
name = "blackberry and strawberry chocolate cake"
desc = "A plain cake, filled with assortment of blackberries and strawberries!"
- icon = 'modular_citadel/icons/obj/food/cake.dmi'
icon_state = "blackbarry_strawberries_cake_coco_cake"
slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/bscc
bonus_reagents = list("nutriment" = 14, "vitamin" = 4, "cocoa" = 5)
@@ -277,7 +272,6 @@
/obj/item/reagent_containers/food/snacks/cakeslice/bscc
name = "blackberry and strawberry chocolate cake slice"
desc = "Just a slice of cake filled with assortment of blackberries and strawberries!"
- icon = 'modular_citadel/icons/obj/food/cake.dmi'
icon_state = "blackbarry_strawberries_cake_coco_cake_slice"
filling_color = "#FFD700"
tastes = list("blackberry" = 2, "strawberries" = 2, "chocolate" = 2, "sweetness" = 2,"cake" = 3)
@@ -286,7 +280,6 @@
/obj/item/reagent_containers/food/snacks/store/cake/holy_cake
name = "angel food cake"
desc = "A cake made for angels and chaplains alike! Contains holy water."
- icon = 'modular_citadel/icons/obj/food/cake.dmi'
icon_state = "holy_cake"
slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/holy_cake_slice
bonus_reagents = list("nutriment" = 1, "vitamin" = 3, "holy_water" = 10)
@@ -296,7 +289,6 @@
/obj/item/reagent_containers/food/snacks/cakeslice/holy_cake_slice
name = "angel food cake slice"
desc = "A slice of heavenly cake."
- icon = 'modular_citadel/icons/obj/food/cake.dmi'
icon_state = "holy_cake_slice"
filling_color = "#00FFFF"
tastes = list("cake" = 5, "sweetness" = 1, "clouds" = 1)
@@ -305,7 +297,6 @@
obj/item/reagent_containers/food/snacks/store/cake/pound_cake
name = "pound cake"
desc = "A condensed cake made for filling people up quickly."
- icon = 'modular_citadel/icons/obj/food/cake.dmi'
icon_state = "pound_cake"
slices_num = 7 //Its ment to feed the party
slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/pound_cake_slice
@@ -316,7 +307,6 @@ obj/item/reagent_containers/food/snacks/store/cake/pound_cake
/obj/item/reagent_containers/food/snacks/cakeslice/pound_cake_slice
name = "pound cake slice"
desc = "A slice of condensed cake made for filling people up quickly."
- icon = 'modular_citadel/icons/obj/food/cake.dmi'
icon_state = "pound_cake_slice"
filling_color = "#00FFFF"
tastes = list("cake" = 5, "sweetness" = 5, "batter" = 1)
@@ -325,7 +315,6 @@ obj/item/reagent_containers/food/snacks/store/cake/pound_cake
/obj/item/reagent_containers/food/snacks/store/cake/hardware_cake
name = "hardware cake"
desc = "A cake that is made with electronic boards and leaks acid..."
- icon = 'modular_citadel/icons/obj/food/cake.dmi'
icon_state = "hardware_cake"
slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/hardware_cake_slice
bonus_reagents = list("sacid" = 15, "oil" = 15)
@@ -335,8 +324,41 @@ obj/item/reagent_containers/food/snacks/store/cake/pound_cake
/obj/item/reagent_containers/food/snacks/cakeslice/hardware_cake_slice
name = "hardware cake slice"
desc = "A slice of electronic boards and some acid."
- icon = 'modular_citadel/icons/obj/food/cake.dmi'
icon_state = "hardware_cake_slice"
filling_color = "#00FFFF"
tastes = list("acid" = 1, "metal" = 1, "regret" = 10)
foodtype = GRAIN | GROSS
+
+/obj/item/reagent_containers/food/snacks/store/cake/vanilla_cake
+ name = "vanilla cake"
+ desc = "A vanilla frosted cake."
+ icon_state = "vanillacake"
+ slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/vanilla_slice
+ bonus_reagents = list("sugar" = 15, "vanilla" = 15)
+ tastes = list("caje" = 1, "sugar" = 1, "vanilla" = 10)
+ foodtype = GRAIN | SUGAR | DAIRY
+
+/obj/item/reagent_containers/food/snacks/cakeslice/vanilla_slice
+ name = "vanilla cake slice"
+ desc = "A slice of vanilla frosted cake."
+ icon_state = "vanillacake_slice"
+ filling_color = "#00FFFF"
+ tastes = list("cake" = 1, "sugar" = 1, "vanilla" = 10)
+ foodtype = GRAIN | SUGAR | DAIRY
+
+/obj/item/reagent_containers/food/snacks/store/cake/clown_cake
+ name = "clown cake"
+ desc = "A funny cake with a clown face on it."
+ icon_state = "clowncake"
+ slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/clown_slice
+ bonus_reagents = list("sugar" = 15, "laugher" = 15)
+ tastes = list("cake" = 1, "sugar" = 1, "joy" = 10)
+ foodtype = GRAIN | SUGAR | DAIRY
+
+/obj/item/reagent_containers/food/snacks/cakeslice/clown_slice
+ name = "clown cake slice"
+ desc = "A slice of bad jokes, and silly props."
+ icon_state = "clowncake_slice"
+ filling_color = "#00FFFF"
+ tastes = list("cake" = 1, "sugar" = 1, "joy" = 10)
+ foodtype = GRAIN | SUGAR | DAIRY
\ No newline at end of file
diff --git a/code/modules/food_and_drinks/food/snacks_frozen.dm b/code/modules/food_and_drinks/food/snacks_frozen.dm
index febfa527ca..c4f8ccf76b 100644
--- a/code/modules/food_and_drinks/food/snacks_frozen.dm
+++ b/code/modules/food_and_drinks/food/snacks_frozen.dm
@@ -88,7 +88,7 @@
/obj/item/reagent_containers/food/snacks/snowcones/orange
name = "orange flavored snowcone"
- desc = "A mix of different flavors dizzled on a snowball in a paper cup."
+ desc = "A orange flavor dizzled on a snowball in a paper cup."
icon_state = "orange_sc"
list_reagents = list("nutriment" = 1, "orangejuice" = 10)
tastes = list("ice" = 1, "water" = 1, "berries" = 5)
@@ -130,7 +130,7 @@
name = "mixed fruit flavored snowcone"
desc = "A mix of different flavors dizzled on a snowball in a paper cup."
icon_state = "fruitsalad_sc"
- list_reagents = list("nutriment" = 1, "lemonjuice" = 5, "limejuice" = 5, "lemonjuice" = 5, "orangejuice" = 5)
+ list_reagents = list("nutriment" = 1, "limejuice" = 5, "lemonjuice" = 5, "orangejuice" = 5)
tastes = list("ice" = 1, "water" = 1, "fruits" = 25)
foodtype = FRUIT
diff --git a/code/modules/food_and_drinks/food/snacks_other.dm b/code/modules/food_and_drinks/food/snacks_other.dm
index e36efe750b..c4b9451c7f 100644
--- a/code/modules/food_and_drinks/food/snacks_other.dm
+++ b/code/modules/food_and_drinks/food/snacks_other.dm
@@ -573,4 +573,14 @@
name = "Maintenance Peaches"
desc = "I have a mouth and I must eat."
icon_state = "peachcanmaint"
- tastes = list("peaches" = 1, "tin" = 7)
\ No newline at end of file
+ tastes = list("peaches" = 1, "tin" = 7)
+
+/obj/item/reagent_containers/food/snacks/chocolatestrawberry
+ name = "Chocolate dipped strawberries"
+ desc = "A strawberry dipped in a bit of chocolate."
+ icon_state = "chocolatestrawberry"
+ list_reagents = list("sugar" = 5, "nutriment" = 2)
+ filling_color = "#ffdf26"
+ w_class = WEIGHT_CLASS_NORMAL
+ tastes = list("strawberries" = 5, "chocolate" = 3)
+ foodtype = FRUIT | SUGAR
\ No newline at end of file
diff --git a/code/modules/food_and_drinks/food/snacks_pastry.dm b/code/modules/food_and_drinks/food/snacks_pastry.dm
index 238bb4f86a..9b87002738 100644
--- a/code/modules/food_and_drinks/food/snacks_pastry.dm
+++ b/code/modules/food_and_drinks/food/snacks_pastry.dm
@@ -308,7 +308,6 @@
tastes = list("bread" = 1, "egg" = 1, "cheese" = 1)
foodtype = GRAIN | MEAT | DAIRY
-
/obj/item/reagent_containers/food/snacks/sugarcookie
name = "sugar cookie"
desc = "Just like your little sister used to make."
@@ -369,6 +368,16 @@
tastes = list("cake" = 3, "blue cherry" = 1)
foodtype = GRAIN | FRUIT | SUGAR
+/obj/item/reagent_containers/food/snacks/strawberrycupcake
+ name = "Strawberry cupcake"
+ desc = "Strawberry inside a delicious cupcake."
+ icon_state = "strawberrycupcake"
+ bonus_reagents = list("nutriment" = 1, "vitamin" = 3)
+ list_reagents = list("nutriment" = 5, "vitamin" = 1)
+ filling_color = "#F0E68C"
+ tastes = list("cake" = 2, "strawberry" = 1)
+ foodtype = GRAIN | FRUIT | SUGAR
+
/obj/item/reagent_containers/food/snacks/honeybun
name = "honey bun"
desc = "A sticky pastry bun glazed with honey."
diff --git a/code/modules/food_and_drinks/food/snacks_pie.dm b/code/modules/food_and_drinks/food/snacks_pie.dm
index 13222cc22d..be6c11fd68 100644
--- a/code/modules/food_and_drinks/food/snacks_pie.dm
+++ b/code/modules/food_and_drinks/food/snacks_pie.dm
@@ -171,8 +171,6 @@
tastes = list("pie" = 1, "apple" = 1)
foodtype = GRAIN | FRUIT | SUGAR
-
-
/obj/item/reagent_containers/food/snacks/pie/cherrypie
name = "cherry pie"
desc = "Taste so good, make a grown man cry."
@@ -221,6 +219,33 @@
tastes = list("pie" = 1, "grape" = 1)
foodtype = GRAIN | FRUIT | SUGAR
+/obj/item/reagent_containers/food/snacks/pie/mimetart
+ name = "mime tart"
+ desc = "..."
+ icon_state = "mimetart"
+ bonus_reagents = list("nutriment" = 1, "vitamin" = 4, "nothing" = 10)
+ list_reagents = list("nutriment" = 5, "vitamin" = 5)
+ tastes = list("pie" = 1, "nothing" = 1)
+ foodtype = GRAIN
+
+/obj/item/reagent_containers/food/snacks/pie/berrytart
+ name = "berry tart"
+ desc = "A tasty dessert of many different small barries on a thin pie crust."
+ icon_state = "berrytart"
+ bonus_reagents = list("nutriment" = 1, "vitamin" = 4)
+ list_reagents = list("nutriment" = 3, "vitamin" = 5)
+ tastes = list("pie" = 1, "berries" = 2)
+ foodtype = GRAIN | FRUIT
+
+/obj/item/reagent_containers/food/snacks/pie/cocolavatart
+ name = "chocolate lava tart"
+ desc = "A tasty dessert made of chocaloate, with a liquid core."
+ icon_state = "cocolavatart"
+ bonus_reagents = list("nutriment" = 1, "vitamin" = 4)
+ list_reagents = list("nutriment" = 4, "vitamin" = 4)
+ tastes = list("pie" = 1, "grape" = 1)
+ foodtype = GRAIN | SUGAR
+
/obj/item/reagent_containers/food/snacks/pie/blumpkinpie
name = "blumpkin pie"
desc = "An odd blue pie made with toxic blumpkin."
@@ -290,4 +315,12 @@
filling_color = "#1E90FF"
list_reagents = list("nutriment" = 2, "vitamin" = 4)
tastes = list("nuts" = 1, "pie" = 1)
- foodtype = GRAIN
\ No newline at end of file
+ foodtype = GRAIN
+
+/obj/item/reagent_containers/food/snacks/pie/strawberrypie
+ name = "strawberry pie"
+ desc = "A strawberry.pie."
+ icon_state = "strawberrypie"
+ bonus_reagents = list("nutriment" = 6, "vitamin" = 6)
+ tastes = list("strawberry" = 1, "pie" = 1)
+ foodtype = GRAIN | FRUIT | SUGAR
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm
index 464b8ce26f..e26d15dbd3 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm
@@ -148,6 +148,27 @@
result = /obj/item/reagent_containers/food/snacks/store/cake/bsvc
subcategory = CAT_CAKE
+/datum/crafting_recipe/food/clowncake
+ name = "clown cake"
+ always_availible = FALSE
+ reqs = list(
+ /obj/item/reagent_containers/food/snacks/store/cake/plain = 1,
+ /obj/item/reagent_containers/food/snacks/sundae = 2,
+ /obj/item/reagent_containers/food/snacks/grown/banana = 5
+ )
+ result = /obj/item/reagent_containers/food/snacks/store/cake/clown_cake
+ subcategory = CAT_CAKE
+
+/datum/crafting_recipe/food/vanillacake
+ name = "vanilla cake"
+ always_availible = FALSE
+ reqs = list(
+ /obj/item/reagent_containers/food/snacks/store/cake/plain = 1,
+ /obj/item/reagent_containers/food/snacks/grown/vanillapod = 2
+ )
+ result = /obj/item/reagent_containers/food/snacks/store/cake/vanilla_cake
+ subcategory = CAT_CAKE
+
/datum/crafting_recipe/food/cak
name = "Living cat/cake hybrid"
reqs = list(
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_frozen.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_frozen.dm
index 08d5716779..73b09df68d 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_frozen.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_frozen.dm
@@ -211,7 +211,7 @@
subcategory = CAT_ICE
/datum/crafting_recipe/food/kiwi_sc
- name = "Soda water snowcone"
+ name = "Kiwi snowcone"
reqs = list(
/obj/item/reagent_containers/food/drinks/sillycup = 1,
/obj/item/reagent_containers/food/snacks/egg/kiwiEgg = 1,
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm
index a6240e5b48..71ba5dfe41 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm
@@ -258,7 +258,7 @@
subcategory = CAT_MISCFOOD
-/datum/crafting_recipe/food/lizardwine
+/datum/crafting_recipe/lizardwine //not a subtype of /datum/crafting_recipe/food due to a bug where the resulting bottle would contain 100u of lizardwine and 100u of ethanol.
name = "Lizard wine"
time = 40
reqs = list(
@@ -266,6 +266,7 @@
/datum/reagent/consumable/ethanol = 100
)
result = /obj/item/reagent_containers/food/drinks/bottle/lizardwine
+ category = CAT_FOOD
subcategory = CAT_MISCFOOD
@@ -331,3 +332,12 @@
)
result = /obj/item/reagent_containers/food/snacks/riceball
subcategory = CAT_MISCFOOD
+
+/datum/crafting_recipe/food/chocolatestrawberry
+ name = "Chocolate Strawberry"
+ reqs = list(
+ /obj/item/reagent_containers/food/snacks/chocolatebar = 1,
+ /obj/item/reagent_containers/food/snacks/grown/strawberries = 1
+ )
+ result = /obj/item/reagent_containers/food/snacks/chocolatestrawberry
+ subcategory = CAT_MISCFOOD
\ No newline at end of file
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm
index 2246d12df4..f3675ccb0d 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm
@@ -325,6 +325,15 @@ datum/crafting_recipe/food/donut/meat
result = /obj/item/reagent_containers/food/snacks/bluecherrycupcake
subcategory = CAT_PASTRY
+/datum/crafting_recipe/food/strawberrycupcake
+ name = "Strawberry cherry cupcake"
+ reqs = list(
+ /obj/item/reagent_containers/food/snacks/pastrybase = 1,
+ /obj/item/reagent_containers/food/snacks/grown/strawberries = 1
+ )
+ result = /obj/item/reagent_containers/food/snacks/strawberrycupcake
+ subcategory = CAT_PASTRY
+
/datum/crafting_recipe/food/honeybun
name = "Honey bun"
reqs = list(
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_pie.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pie.dm
index 79d761c2e2..a0a225c44f 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_pie.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pie.dm
@@ -160,6 +160,15 @@
result = /obj/item/reagent_containers/food/snacks/pie/frostypie
subcategory = CAT_PIE
+/datum/crafting_recipe/food/strawberrypie
+ name = "Strawberry pie"
+ reqs = list(
+ /obj/item/reagent_containers/food/snacks/pie/plain = 1,
+ /obj/item/reagent_containers/food/snacks/grown/strawberries = 1
+ )
+ result = /obj/item/reagent_containers/food/snacks/pie/strawberrypie
+ subcategory = CAT_PIE
+
/datum/crafting_recipe/food/baklava
name = "Baklava pie"
reqs = list(
@@ -168,4 +177,41 @@
/obj/item/seeds/wheat/oat = 3
)
result = /obj/item/reagent_containers/food/snacks/pie/baklava
+ subcategory = CAT_PIE
+
+/datum/crafting_recipe/food/mimetart
+ name = "Mime tart"
+ always_availible = FALSE
+ reqs = list(
+ /datum/reagent/consumable/milk = 5,
+ /datum/reagent/consumable/sugar = 5,
+ /obj/item/reagent_containers/food/snacks/pie/plain = 1,
+ /datum/reagent/consumable/nothing = 5
+ )
+ result = /obj/item/reagent_containers/food/snacks/pie/mimetart
+ subcategory = CAT_PIE
+
+/datum/crafting_recipe/food/berrytart
+ name = "Berry tart"
+ always_availible = FALSE
+ reqs = list(
+ /datum/reagent/consumable/milk = 5,
+ /datum/reagent/consumable/sugar = 5,
+ /obj/item/reagent_containers/food/snacks/pie/plain = 1,
+ /obj/item/reagent_containers/food/snacks/grown/berries = 3
+ )
+ result = /obj/item/reagent_containers/food/snacks/pie/berrytart
+ subcategory = CAT_PIE
+
+/datum/crafting_recipe/food/cocolavatart
+ name = "Chocolate Lava tart"
+ always_availible = FALSE
+ reqs = list(
+ /datum/reagent/consumable/milk = 5,
+ /datum/reagent/consumable/sugar = 5,
+ /obj/item/reagent_containers/food/snacks/pie/plain = 1,
+ /obj/item/reagent_containers/food/snacks/chocolatebar = 3,
+ /obj/item/slime_extract = 1
+ )
+ result = /obj/item/reagent_containers/food/snacks/pie/cocolavatart
subcategory = CAT_PIE
\ No newline at end of file
diff --git a/code/modules/hydroponics/grown/berries.dm b/code/modules/hydroponics/grown/berries.dm
index 19abdacf3a..f106a0dfe0 100644
--- a/code/modules/hydroponics/grown/berries.dm
+++ b/code/modules/hydroponics/grown/berries.dm
@@ -215,3 +215,22 @@
filling_color = "#7FFF00"
tastes = list("green grape" = 1)
distill_reagent = "cognac"
+
+// Strawberry
+/obj/item/seeds/strawberries
+ name = "pack of green grape seeds"
+ desc = "These seeds grow into strawberries vines."
+ icon_state = "seed-strawberry"
+ species = "strawberry"
+ plantname = "Strawberry Vine"
+ product = /obj/item/reagent_containers/food/snacks/grown/strawberries
+ reagents_add = list("vitamin" = 0.07, "nutriment" = 0.1, "sugar" = 0.1)
+ mutatelist = list()
+
+/obj/item/reagent_containers/food/snacks/grown/strawberries
+ seed = /obj/item/seeds/strawberries
+ name = "strawberry"
+ icon_state = "strawberries"
+ filling_color = "#7FFF00"
+ tastes = list("strawberries" = 1)
+ wine_power = 20
\ No newline at end of file
diff --git a/code/modules/hydroponics/plant_genes.dm b/code/modules/hydroponics/plant_genes.dm
index 17462c0626..db529e8ffb 100644
--- a/code/modules/hydroponics/plant_genes.dm
+++ b/code/modules/hydroponics/plant_genes.dm
@@ -290,15 +290,15 @@
var/teleport_radius = max(round(G.seed.potency / 10), 1)
var/turf/T = get_turf(target)
new /obj/effect/decal/cleanable/molten_object(T) //Leave a pile of goo behind for dramatic effect...
- do_teleport(target, T, teleport_radius)
+ do_teleport(target, T, teleport_radius, channel = TELEPORT_CHANNEL_BLUESPACE)
/datum/plant_gene/trait/teleport/on_slip(obj/item/reagent_containers/food/snacks/grown/G, mob/living/carbon/C)
var/teleport_radius = max(round(G.seed.potency / 10), 1)
var/turf/T = get_turf(C)
to_chat(C, "You slip through spacetime!")
- do_teleport(C, T, teleport_radius)
+ do_teleport(C, T, teleport_radius, channel = TELEPORT_CHANNEL_BLUESPACE)
if(prob(50))
- do_teleport(G, T, teleport_radius)
+ do_teleport(G, T, teleport_radius, channel = TELEPORT_CHANNEL_BLUESPACE)
else
new /obj/effect/decal/cleanable/molten_object(T) //Leave a pile of goo behind for dramatic effect...
qdel(G)
diff --git a/code/modules/jobs/job_types/captain.dm b/code/modules/jobs/job_types/captain.dm
deleted file mode 100755
index e6cf7d1c5c..0000000000
--- a/code/modules/jobs/job_types/captain.dm
+++ /dev/null
@@ -1,64 +0,0 @@
-/datum/job/captain
- title = "Captain"
- flag = CAPTAIN
-// auto_deadmin_role_flags = DEADMIN_POSITION_HEAD|DEADMIN_POSITION_SECURITY //:eyes:
- department_head = list("CentCom")
- department_flag = ENGSEC
- faction = "Station"
- total_positions = 1
- spawn_positions = 1
- supervisors = "Nanotrasen officials and Space law"
- selection_color = "#ccccff"
- req_admin_notify = 1
- minimal_player_age = 14
- exp_requirements = 180
- exp_type = EXP_TYPE_CREW
- exp_type_department = EXP_TYPE_COMMAND
-
- outfit = /datum/outfit/job/captain
-
- access = list() //See get_access()
- minimal_access = list() //See get_access()
-
- mind_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM)
-// mind_traits = list(TRAIT_DISK_VERIFIER)
-
- display_order = JOB_DISPLAY_ORDER_CAPTAIN
-
-/datum/job/captain/get_access()
- return get_all_accesses()
-
-/datum/job/captain/announce(mob/living/carbon/human/H)
- ..()
- SSticker.OnRoundstart(CALLBACK(GLOBAL_PROC, .proc/minor_announce, "Captain [H.nameless ? "" : "[H.real_name] "]on deck!"))
-
-/datum/outfit/job/captain
- name = "Captain"
- jobtype = /datum/job/captain
-
- id = /obj/item/card/id/gold
- belt = /obj/item/pda/captain
- glasses = /obj/item/clothing/glasses/sunglasses
- ears = /obj/item/radio/headset/heads/captain/alt
- gloves = /obj/item/clothing/gloves/color/captain
- uniform = /obj/item/clothing/under/rank/captain
- suit = /obj/item/clothing/suit/armor/vest/capcarapace
- shoes = /obj/item/clothing/shoes/sneakers/brown
- head = /obj/item/clothing/head/caphat
- backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1, /obj/item/station_charter=1)
-
- backpack = /obj/item/storage/backpack/captain
- satchel = /obj/item/storage/backpack/satchel/cap
- duffelbag = /obj/item/storage/backpack/duffelbag/captain
-
- implants = list(/obj/item/implant/mindshield)
- accessory = /obj/item/clothing/accessory/medal/gold/captain
-
- chameleon_extras = list(/obj/item/gun/energy/e_gun, /obj/item/stamp/captain)
-
-/datum/outfit/job/captain/hardsuit
- name = "Captain (Hardsuit)"
-
- mask = /obj/item/clothing/mask/gas/sechailer
- suit = /obj/item/clothing/suit/space/hardsuit/captain
- suit_store = /obj/item/tank/internals/oxygen
diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm
index a1ba493d46..0abb1cfa9e 100644
--- a/code/modules/mining/mine_items.dm
+++ b/code/modules/mining/mine_items.dm
@@ -68,6 +68,7 @@
/obj/machinery/computer/shuttle/mining
name = "mining shuttle console"
desc = "Used to call and send the mining shuttle."
+ req_access = list(ACCESS_MINING)
circuit = /obj/item/circuitboard/computer/mining_shuttle
shuttleId = "mining"
possible_destinations = "mining_home;mining_away;landing_zone_dock;mining_public"
diff --git a/code/modules/mob/dead/new_player/preferences_setup.dm b/code/modules/mob/dead/new_player/preferences_setup.dm
index 809bc2edde..b08fadefcb 100644
--- a/code/modules/mob/dead/new_player/preferences_setup.dm
+++ b/code/modules/mob/dead/new_player/preferences_setup.dm
@@ -6,11 +6,11 @@
else
gender = pick(MALE,FEMALE)
underwear = random_underwear(gender)
- undie_color = random_color()
+ undie_color = random_short_color()
undershirt = random_undershirt(gender)
- shirt_color = random_color()
+ shirt_color = random_short_color()
socks = random_socks()
- socks_color = random_color()
+ socks_color = random_short_color()
skin_tone = random_skin_tone()
hair_style = random_hair_style(gender)
facial_hair_style = random_facial_hair_style(gender)
diff --git a/code/modules/mob/dead/new_player/sprite_accessories/undershirt.dm b/code/modules/mob/dead/new_player/sprite_accessories/undershirt.dm
index bf63ea09d7..fb40563ccf 100644
--- a/code/modules/mob/dead/new_player/sprite_accessories/undershirt.dm
+++ b/code/modules/mob/dead/new_player/sprite_accessories/undershirt.dm
@@ -172,11 +172,13 @@
name = "Tank Top - Midriff"
icon_state = "tank_midriff"
has_color = TRUE
+ gender = FEMALE
/datum/sprite_accessory/underwear/top/tanktop_midriff_alt
name = "Tank Top - Midriff Halterneck"
icon_state = "tank_midriff_alt"
has_color = TRUE
+ gender = FEMALE
/datum/sprite_accessory/underwear/top/tankstripe
name = "Tank Top - Striped"
@@ -190,100 +192,122 @@
name = "Baby-Doll"
icon_state = "babydoll"
has_color = TRUE
+ gender = FEMALE
/datum/sprite_accessory/underwear/top/bra
name = "Bra"
icon_state = "bra"
has_color = TRUE
+ gender = FEMALE
/datum/sprite_accessory/underwear/top/bra_alt
name = "Bra - Alt"
icon_state = "bra_alt"
has_color = TRUE
+ gender = FEMALE
/datum/sprite_accessory/underwear/top/bra_thin
name = "Bra - Thin"
icon_state = "bra_thin"
has_color = TRUE
+ gender = FEMALE
/datum/sprite_accessory/underwear/top/bra_kinky
name = "Bra - Kinky Black"
icon_state = "bra_kinky"
+ gender = FEMALE
/datum/sprite_accessory/underwear/top/bra_freedom
name = "Bra - Freedom"
icon_state = "bra_assblastusa"
+ gender = FEMALE
/datum/sprite_accessory/underwear/top/bra_commie
name = "Bra - Commie"
icon_state = "bra_commie"
+ gender = FEMALE
/datum/sprite_accessory/underwear/top/bra_beekini
name = "Bra - Bee-kini"
icon_state = "bra_bee-kini"
+ gender = FEMALE
/datum/sprite_accessory/underwear/top/bra_uk
name = "Bra - UK"
icon_state = "bra_uk"
+ gender = FEMALE
/datum/sprite_accessory/underwear/top/bra_neko
name = "Bra - Neko"
icon_state = "bra_neko"
has_color = TRUE
+ gender = FEMALE
/datum/sprite_accessory/underwear/top/halterneck_bra
name = "Bra - Halterneck"
icon_state = "halterneck_bra"
has_color = TRUE
+ gender = FEMALE
/datum/sprite_accessory/underwear/top/sports_bra
name = "Bra, Sports"
icon_state = "sports_bra"
has_color = TRUE
+ gender = FEMALE
/datum/sprite_accessory/underwear/top/sports_bra_alt
name = "Bra, Sports - Alt"
icon_state = "sports_bra_alt"
has_color = TRUE
+ gender = FEMALE
/datum/sprite_accessory/underwear/top/bra_strapless
name = "Bra, Strapless"
icon_state = "bra_strapless"
has_color = TRUE
+ gender = FEMALE
/datum/sprite_accessory/underwear/top/bra_strapless_alt
name = "Bra, Strapless - Alt"
icon_state = "bra_blue"
has_color = TRUE
+ gender = FEMALE
/datum/sprite_accessory/underwear/top/striped_bra
name = "Bra - Striped"
icon_state = "striped_bra"
has_color = TRUE
+ gender = FEMALE
/datum/sprite_accessory/underwear/top/fishnet_sleeves
name = "Fishnet - sleeves"
icon_state = "fishnet_sleeves"
+ gender = FEMALE
/datum/sprite_accessory/underwear/top/fishnet_gloves
name = "Fishnet - gloves"
icon_state = "fishnet_gloves"
+ gender = FEMALE
/datum/sprite_accessory/underwear/top/fishnet_base
name = "Fishnet - top"
icon_state = "fishnet_body"
+ gender = FEMALE
/datum/sprite_accessory/underwear/top/swimsuit
name = "Swimsuit Top"
icon_state = "bra_swimming"
has_color = TRUE
+ gender = FEMALE
/datum/sprite_accessory/underwear/top/swimsuit_alt
name = "Swimsuit Top - Strapless"
icon_state = "bra_swimming_alt"
has_color = TRUE
+ gender = FEMALE
/datum/sprite_accessory/underwear/top/tubetop
name = "Tube Top"
icon_state = "tubetop"
- has_color = TRUE
\ No newline at end of file
+ has_color = TRUE
+ gender = FEMALE
\ No newline at end of file
diff --git a/code/modules/mob/dead/new_player/sprite_accessories/underwear.dm b/code/modules/mob/dead/new_player/sprite_accessories/underwear.dm
index 611547ad4e..3356804cb3 100644
--- a/code/modules/mob/dead/new_player/sprite_accessories/underwear.dm
+++ b/code/modules/mob/dead/new_player/sprite_accessories/underwear.dm
@@ -10,45 +10,55 @@
name = "Mankini"
icon_state = "mankini"
has_color = TRUE
+ gender = MALE
/datum/sprite_accessory/underwear/bottom/male_kinky
name = "Jockstrap"
icon_state = "jockstrap"
has_color = TRUE
+ gender = MALE
/datum/sprite_accessory/underwear/bottom/briefs
name = "Briefs"
icon_state = "briefs"
has_color = TRUE
+ gender = MALE
/datum/sprite_accessory/underwear/bottom/boxers
name = "Boxers"
icon_state = "boxers"
has_color = TRUE
+ gender = MALE
/datum/sprite_accessory/underwear/bottom/male_bee
name = "Boxers - Bee"
icon_state = "bee_shorts"
+ gender = MALE
/datum/sprite_accessory/underwear/bottom/male_hearts
name = "Boxers - Heart"
icon_state = "boxers_heart"
+ gender = MALE
/datum/sprite_accessory/underwear/bottom/male_stripe
name = "Boxers - Striped"
icon_state = "boxers_striped"
+ gender = MALE
/datum/sprite_accessory/underwear/bottom/male_commie
name = "Boxers - Striped Communist"
icon_state = "boxers_commie"
+ gender = MALE
/datum/sprite_accessory/underwear/bottom/male_usastripe
name = "Boxers - Striped Freedom"
icon_state = "boxers_assblastusa"
+ gender = MALE
/datum/sprite_accessory/underwear/bottom/male_uk
name = "Boxers - Striped UK"
icon_state = "boxers_uk"
+ gender = MALE
/datum/sprite_accessory/underwear/bottom/boxer_briefs
name = "Boxer Briefs"
@@ -59,60 +69,73 @@
name = "Panties"
icon_state = "panties"
has_color = TRUE
+ gender = FEMALE
/datum/sprite_accessory/underwear/bottom/panties_alt
name = "Panties - Alt"
icon_state = "panties_alt"
has_color = TRUE
+ gender = FEMALE
/datum/sprite_accessory/underwear/bottom/fishnet_lower
name = "Panties - Fishnet"
icon_state = "fishnet_lower"
+ gender = FEMALE
/datum/sprite_accessory/underwear/bottom/female_beekini
name = "Panties - Bee-kini"
icon_state = "panties_bee-kini"
+ gender = FEMALE
/datum/sprite_accessory/underwear/bottom/female_commie
name = "Panties - Commie"
icon_state = "panties_commie"
+ gender = FEMALE
/datum/sprite_accessory/underwear/bottom/female_usastripe
name = "Panties - Freedom"
icon_state = "panties_assblastusa"
+ gender = FEMALE
/datum/sprite_accessory/underwear/bottom/female_kinky
name = "Panties - Kinky Black"
icon_state = "panties_kinky"
+ gender = FEMALE
/datum/sprite_accessory/underwear/bottom/panties_uk
name = "Panties - UK"
icon_state = "panties_uk"
+ gender = FEMALE
/datum/sprite_accessory/underwear/bottom/panties_neko
name = "Panties - Neko"
icon_state = "panties_neko"
has_color = TRUE
+ gender = FEMALE
/datum/sprite_accessory/underwear/bottom/panties_slim
name = "Panties - Slim"
icon_state = "panties_slim"
has_color = TRUE
+ gender = FEMALE
/datum/sprite_accessory/underwear/bottom/striped_panties
name = "Panties - Striped"
icon_state = "striped_panties"
has_color = TRUE
+ gender = FEMALE
/datum/sprite_accessory/underwear/bottom/panties_swimsuit
name = "Panties - Swimsuit"
icon_state = "panties_swimming"
has_color = TRUE
+ gender = FEMALE
/datum/sprite_accessory/underwear/bottom/panties_thin
name = "Panties - Thin"
icon_state = "panties_thin"
has_color = TRUE
+ gender = FEMALE
/datum/sprite_accessory/underwear/bottom/longjon
name = "Long John Bottoms"
@@ -122,23 +145,28 @@
/datum/sprite_accessory/underwear/bottom/swimsuit_red
name = "Swimsuit, One Piece - Red"
icon_state = "swimming_red"
+ gender = FEMALE
/datum/sprite_accessory/underwear/bottom/swimsuit
name = "Swimsuit, One Piece - Black"
icon_state = "swimming_black"
+ gender = FEMALE
/datum/sprite_accessory/underwear/bottom/swimsuit_blue
name = "Swimsuit, One Piece - Striped Blue"
icon_state = "swimming_blue"
+ gender = FEMALE
/datum/sprite_accessory/underwear/bottom/thong
name = "Thong"
icon_state = "thong"
has_color = TRUE
+ gender = FEMALE
/datum/sprite_accessory/underwear/bottom/thong_babydoll
name = "Thong - Alt"
icon_state = "thong_babydoll"
has_color = TRUE
+ gender = FEMALE
diff --git a/code/modules/mob/dead/observer/say.dm b/code/modules/mob/dead/observer/say.dm
index d521ef179f..7eeab05466 100644
--- a/code/modules/mob/dead/observer/say.dm
+++ b/code/modules/mob/dead/observer/say.dm
@@ -4,14 +4,14 @@
return
var/message_mode = get_message_mode(message)
- if(client && (message_mode == "admin" || message_mode == "deadmin"))
+ if(client && (message_mode == MODE_ADMIN || message_mode == MODE_DEADMIN))
message = copytext(message, 3)
if(findtext(message, " ", 1, 2))
message = copytext(message, 2)
- if(message_mode == "admin")
+ if(message_mode == MODE_ADMIN)
client.cmd_admin_say(message)
- else if(message_mode == "deadmin")
+ else if(message_mode == MODE_DEADMIN)
client.dsay(message)
return
diff --git a/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm b/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm
index e1a7752e9d..d2788075e2 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm
@@ -59,15 +59,19 @@
/mob/living/carbon/alien/humanoid/update_inv_handcuffed()
remove_overlay(HANDCUFF_LAYER)
- var/cuff_icon = "aliencuff"
- var/dmi_file = 'icons/mob/alien.dmi'
-
- if(mob_size == MOB_SIZE_LARGE)
- cuff_icon = "aliencuff_[caste]"
- dmi_file = 'icons/mob/alienqueen.dmi'
if(handcuffed)
- overlays_standing[HANDCUFF_LAYER] = mutable_appearance(dmi_file, cuff_icon, -HANDCUFF_LAYER)
+ var/cuff_icon = handcuffed.item_state
+ var/dmi_file = 'icons/mob/alien.dmi'
+
+ if(mob_size == MOB_SIZE_LARGE)
+ cuff_icon += "_[caste]"
+ dmi_file = 'icons/mob/alienqueen.dmi'
+
+ var/mutable_appearance/cuffs = mutable_appearance(dmi_file, cuff_icon, -HANDCUFF_LAYER)
+ cuffs.color = handcuffed.color
+
+ overlays_standing[HANDCUFF_LAYER] = cuffs
apply_overlay(HANDCUFF_LAYER)
//Royals have bigger sprites, so inhand things must be handled differently.
diff --git a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm
index b4739f943e..1574305a83 100644
--- a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm
+++ b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm
@@ -63,7 +63,7 @@
-/obj/item/organ/body_egg/alien_embryo/proc/AttemptGrow(gib_on_success=TRUE)
+/obj/item/organ/body_egg/alien_embryo/proc/AttemptGrow(var/kill_on_sucess=TRUE)
if(!owner || bursting)
return
@@ -102,10 +102,12 @@
new_xeno.notransform = 0
new_xeno.invisibility = 0
- if(gib_on_success)
- new_xeno.visible_message("[new_xeno] bursts out of [owner] in a shower of gore!", "You exit [owner], your previous host.", "You hear organic matter ripping and tearing!")
- owner.gib(TRUE)
- else
+ if(kill_on_sucess) //ITS TOO LATE
+ new_xeno.visible_message("[new_xeno] bursts out of [owner]!", "You exit [owner], your previous host.", "You hear organic matter ripping and tearing!")
+ owner.apply_damage(rand(100,300),BRUTE,zone,FALSE) //Random high damage to torso so health sensors don't metagame.
+ owner.spill_organs(TRUE,FALSE,TRUE) //Lets still make the death gruesome and impossible to just simply defib someone.
+ owner.death(FALSE) //Just in case some freak occurance occurs where you somehow survive all your organs being removed from you and the 100-300 brute damage.
+ else //When it is removed via surgery at a late stage, rather than forced.
new_xeno.visible_message("[new_xeno] wriggles out of [owner]!", "You exit [owner], your previous host.")
owner.adjustBruteLoss(40)
owner.cut_overlay(overlay)
diff --git a/code/modules/mob/living/carbon/carbon_defines.dm b/code/modules/mob/living/carbon/carbon_defines.dm
index e9114d5298..a067be798f 100644
--- a/code/modules/mob/living/carbon/carbon_defines.dm
+++ b/code/modules/mob/living/carbon/carbon_defines.dm
@@ -11,8 +11,8 @@
var/silent = FALSE //Can't talk. Value goes down every life proc. //NOTE TO FUTURE CODERS: DO NOT INITIALIZE NUMERICAL VARS AS NULL OR I WILL MURDER YOU.
var/dreaming = 0 //How many dream images we have left to send
- var/obj/item/handcuffed = null //Whether or not the mob is handcuffed
- var/obj/item/legcuffed = null //Same as handcuffs but for legs. Bear traps use this.
+ var/obj/item/restraints/handcuffed //Whether or not the mob is handcuffed
+ var/obj/item/restraints/legcuffed //Same as handcuffs but for legs. Bear traps use this.
var/disgust = 0
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 67596a828a..69926f46f9 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -623,6 +623,7 @@
facial_hair_style = "Shaved"
hair_style = pick("Bedhead", "Bedhead 2", "Bedhead 3")
underwear = "Nude"
+ undershirt = "Nude"
update_body()
update_hair()
update_genitals()
diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm
index 56be62c75e..eee425063d 100644
--- a/code/modules/mob/living/carbon/human/say.dm
+++ b/code/modules/mob/living/carbon/human/say.dm
@@ -53,14 +53,14 @@
if(ears)
var/obj/item/radio/headset/dongle = ears
if(!istype(dongle))
- return 0
+ return FALSE
if(dongle.translate_binary)
- return 1
+ return TRUE
/mob/living/carbon/human/radio(message, message_mode, list/spans, language)
. = ..()
- if(. != 0)
- return .
+ if(.)
+ return
switch(message_mode)
if(MODE_HEADSET)
diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm
index 076b8efb66..9abfc5826f 100644
--- a/code/modules/mob/living/carbon/human/species.dm
+++ b/code/modules/mob/living/carbon/human/species.dm
@@ -500,7 +500,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
if(B)
var/mutable_appearance/MA = mutable_appearance(B.icon, B.icon_state, -BODY_LAYER)
if(UNDIE_COLORABLE(B))
- MA.color = H.undie_color
+ MA.color = "#[H.undie_color]"
standing += MA
if(H.undershirt)
@@ -516,7 +516,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
else
MA = mutable_appearance(T.icon, T.icon_state, -BODY_LAYER)
if(UNDIE_COLORABLE(T))
- MA.color = H.shirt_color
+ MA.color = "#[H.shirt_color]"
standing += MA
if(H.socks && H.get_num_legs(FALSE) >= 2)
@@ -529,7 +529,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
var/digilegs = (DIGITIGRADE in species_traits) ? "_d" : ""
var/mutable_appearance/MA = mutable_appearance(S.icon, "[S.icon_state][digilegs]", -BODY_LAYER)
if(UNDIE_COLORABLE(S))
- MA.color = H.socks_color
+ MA.color = "[H.socks_color]"
standing += MA
if(standing.len)
diff --git a/code/modules/mob/living/carbon/human/species_types/golems.dm b/code/modules/mob/living/carbon/human/species_types/golems.dm
index 2c663b4094..88dd59749c 100644
--- a/code/modules/mob/living/carbon/human/species_types/golems.dm
+++ b/code/modules/mob/living/carbon/human/species_types/golems.dm
@@ -420,7 +420,7 @@
H.visible_message("[H] teleports!", "You destabilize and teleport!")
new /obj/effect/particle_effect/sparks(get_turf(H))
playsound(get_turf(H), "sparks", 50, 1)
- do_teleport(H, get_turf(H), 6, asoundin = 'sound/weapons/emitter2.ogg')
+ do_teleport(H, get_turf(H), 6, asoundin = 'sound/weapons/emitter2.ogg', channel = TELEPORT_CHANNEL_BLUESPACE)
last_teleport = world.time
/datum/species/golem/bluespace/spec_hitby(atom/movable/AM, mob/living/carbon/human/H)
@@ -486,7 +486,7 @@
spark_system.set_up(10, 0, src)
spark_system.attach(H)
spark_system.start()
- do_teleport(H, get_turf(H), 12, asoundin = 'sound/weapons/emitter2.ogg')
+ do_teleport(H, get_turf(H), 12, asoundin = 'sound/weapons/emitter2.ogg', channel = TELEPORT_CHANNEL_BLUESPACE)
last_teleport = world.time
UpdateButtonIcon() //action icon looks unavailable
sleep(cooldown + 5)
diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm
index bb1b7ebe0e..72ff7e7a60 100644
--- a/code/modules/mob/living/carbon/human/update_icons.dm
+++ b/code/modules/mob/living/carbon/human/update_icons.dm
@@ -288,8 +288,10 @@ There are several things that need to be remembered:
S.alternate_worn_icon = 'modular_citadel/icons/mob/digishoes.dmi'
else
S.alternate_worn_icon = null
-
- overlays_standing[SHOES_LAYER] = shoes.build_worn_icon(state = shoes.icon_state, default_layer = SHOES_LAYER, default_icon_file = ((shoes.alternate_worn_icon) ? shoes.alternate_worn_icon : 'icons/mob/feet.dmi'))
+ var/t_state = shoes.item_state
+ if (!t_state)
+ t_state = shoes.icon_state
+ overlays_standing[SHOES_LAYER] = shoes.build_worn_icon(state = t_state, default_layer = SHOES_LAYER, default_icon_file = ((shoes.alternate_worn_icon) ? shoes.alternate_worn_icon : 'icons/mob/feet.dmi'))
var/mutable_appearance/shoes_overlay = overlays_standing[SHOES_LAYER]
if(OFFSET_SHOES in dna.species.offset_features)
shoes_overlay.pixel_x += dna.species.offset_features[OFFSET_SHOES][1]
@@ -471,14 +473,6 @@ There are several things that need to be remembered:
overlays_standing[BACK_LAYER] = back_overlay
apply_overlay(BACK_LAYER)
-/mob/living/carbon/human/update_inv_legcuffed()
- remove_overlay(LEGCUFF_LAYER)
- clear_alert("legcuffed")
- if(legcuffed)
- overlays_standing[LEGCUFF_LAYER] = mutable_appearance('icons/mob/mob.dmi', "legcuff1", -LEGCUFF_LAYER)
- apply_overlay(LEGCUFF_LAYER)
- throw_alert("legcuffed", /obj/screen/alert/restrained/legcuffed, new_master = src.legcuffed)
-
/proc/wear_female_version(t_color, icon, layer, type)
var/index = t_color
var/icon/female_clothing_icon = GLOB.female_clothing_icons[index]
diff --git a/code/modules/mob/living/carbon/monkey/update_icons.dm b/code/modules/mob/living/carbon/monkey/update_icons.dm
index 6311776596..e9bb9fc207 100644
--- a/code/modules/mob/living/carbon/monkey/update_icons.dm
+++ b/code/modules/mob/living/carbon/monkey/update_icons.dm
@@ -43,12 +43,15 @@
/mob/living/carbon/monkey/update_inv_legcuffed()
remove_overlay(LEGCUFF_LAYER)
+ clear_alert("legcuffed")
if(legcuffed)
- var/mutable_appearance/legcuff_overlay = mutable_appearance('icons/mob/mob.dmi', "legcuff1", -LEGCUFF_LAYER)
- legcuff_overlay.pixel_y = 8
- overlays_standing[LEGCUFF_LAYER] = legcuff_overlay
- apply_overlay(LEGCUFF_LAYER)
+ var/mutable_appearance/legcuffs = mutable_appearance('icons/mob/restraints.dmi', legcuffed.item_state, -LEGCUFF_LAYER)
+ legcuffs.color = handcuffed.color
+ legcuffs.pixel_y = 8
+ overlays_standing[HANDCUFF_LAYER] = legcuffs
+ apply_overlay(LEGCUFF_LAYER)
+ throw_alert("legcuffed", /obj/screen/alert/restrained/legcuffed, new_master = legcuffed)
//monkey HUD updates for items in our inventory
diff --git a/code/modules/mob/living/carbon/update_icons.dm b/code/modules/mob/living/carbon/update_icons.dm
index 87bf662c4f..5662f25993 100644
--- a/code/modules/mob/living/carbon/update_icons.dm
+++ b/code/modules/mob/living/carbon/update_icons.dm
@@ -176,9 +176,22 @@
/mob/living/carbon/update_inv_handcuffed()
remove_overlay(HANDCUFF_LAYER)
if(handcuffed)
- overlays_standing[HANDCUFF_LAYER] = mutable_appearance('icons/mob/mob.dmi', "handcuff1", -HANDCUFF_LAYER)
+ var/mutable_appearance/cuffs = mutable_appearance('icons/mob/restraints.dmi', handcuffed.item_state, -HANDCUFF_LAYER)
+ cuffs.color = handcuffed.color
+
+ overlays_standing[HANDCUFF_LAYER] = cuffs
apply_overlay(HANDCUFF_LAYER)
+/mob/living/carbon/update_inv_legcuffed()
+ remove_overlay(LEGCUFF_LAYER)
+ clear_alert("legcuffed")
+ if(legcuffed)
+ var/mutable_appearance/legcuffs = mutable_appearance('icons/mob/restraints.dmi', legcuffed.item_state, -LEGCUFF_LAYER)
+ legcuffs.color = legcuffed.color
+
+ overlays_standing[HANDCUFF_LAYER] = legcuffs
+ apply_overlay(LEGCUFF_LAYER)
+ throw_alert("legcuffed", /obj/screen/alert/restrained/legcuffed, new_master = legcuffed)
//mob HUD updates for items in our inventory
diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm
index 155ff15d5b..bfd27c11cc 100644
--- a/code/modules/mob/living/say.dm
+++ b/code/modules/mob/living/say.dm
@@ -2,61 +2,61 @@ GLOBAL_LIST_INIT(department_radio_prefixes, list(":", "."))
GLOBAL_LIST_INIT(department_radio_keys, list(
// Location
- "r" = "right hand",
- "l" = "left hand",
- "i" = "intercom",
+ MODE_KEY_R_HAND = MODE_R_HAND,
+ MODE_KEY_L_HAND = MODE_L_HAND,
+ MODE_KEY_INTERCOM = MODE_INTERCOM,
// Department
- "h" = "department",
- "c" = "Command",
- "n" = "Science",
- "m" = "Medical",
- "e" = "Engineering",
- "s" = "Security",
- "u" = "Supply",
- "v" = "Service",
+ MODE_KEY_DEPARTMENT = MODE_DEPARTMENT,
+ RADIO_KEY_COMMAND = RADIO_CHANNEL_COMMAND,
+ RADIO_KEY_SCIENCE = RADIO_CHANNEL_SCIENCE,
+ RADIO_KEY_MEDICAL = RADIO_CHANNEL_MEDICAL,
+ RADIO_KEY_ENGINEERING = RADIO_CHANNEL_ENGINEERING,
+ RADIO_KEY_SECURITY = RADIO_CHANNEL_SECURITY,
+ RADIO_KEY_SUPPLY = RADIO_CHANNEL_SUPPLY,
+ RADIO_KEY_SERVICE = RADIO_CHANNEL_SERVICE,
// Faction
- "t" = "Syndicate",
- "y" = "CentCom",
+ RADIO_KEY_SYNDICATE = RADIO_CHANNEL_SYNDICATE,
+ RADIO_KEY_CENTCOM = RADIO_CHANNEL_CENTCOM,
// Admin
- "p" = "admin",
- "d" = "deadmin",
+ MODE_KEY_ADMIN = MODE_ADMIN,
+ MODE_KEY_DEADMIN = MODE_DEADMIN,
// Misc
- "o" = "AI Private", // AI Upload channel
- "x" = "cords", // vocal cords, used by Voice of God
+ RADIO_KEY_AI_PRIVATE = RADIO_CHANNEL_AI_PRIVATE, // AI Upload channel
+ MODE_KEY_VOCALCORDS = MODE_VOCALCORDS, // vocal cords, used by Voice of God
//kinda localization -- rastaf0
//same keys as above, but on russian keyboard layout. This file uses cp1251 as encoding.
// Location
- "ê" = "right hand",
- "ä" = "left hand",
- "ø" = "intercom",
+ "ê" = MODE_R_HAND,
+ "ä" = MODE_L_HAND,
+ "ø" = MODE_INTERCOM,
// Department
- "ð" = "department",
- "ñ" = "Command",
- "ò" = "Science",
- "ü" = "Medical",
- "ó" = "Engineering",
- "û" = "Security",
- "ã" = "Supply",
- "ì" = "Service",
+ "ð" = MODE_DEPARTMENT,
+ "ñ" = RADIO_CHANNEL_COMMAND,
+ "ò" = RADIO_CHANNEL_SCIENCE,
+ "ü" = RADIO_CHANNEL_MEDICAL,
+ "ó" = RADIO_CHANNEL_ENGINEERING,
+ "û" = RADIO_CHANNEL_SECURITY,
+ "ã" = RADIO_CHANNEL_SUPPLY,
+ "ì" = RADIO_CHANNEL_SERVICE,
// Faction
- "Ã¥" = "Syndicate",
- "Ã" = "CentCom",
+ "Ã¥" = RADIO_CHANNEL_SYNDICATE,
+ "Ã" = RADIO_CHANNEL_CENTCOM,
// Admin
- "ç" = "admin",
- "â" = "deadmin",
+ "ç" = MODE_ADMIN,
+ "â" = MODE_ADMIN,
// Misc
- "ù" = "AI Private",
- "÷" = "cords"
+ "ù" = RADIO_CHANNEL_AI_PRIVATE,
+ "÷" = MODE_VOCALCORDS
))
/mob/living/proc/Ellipsis(original_msg, chance = 50, keep_words)
@@ -105,12 +105,12 @@ GLOBAL_LIST_INIT(department_radio_keys, list(
if(findtext(message, " ", 1, 2))
message = copytext(message, 2)
- if(message_mode == "admin")
+ if(message_mode == MODE_ADMIN)
if(client)
client.cmd_admin_say(message)
return
- if(message_mode == "deadmin")
+ if(message_mode == MODE_DEADMIN)
if(client)
client.dsay(message)
return
diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm
index ce99e301c5..91515e4511 100644
--- a/code/modules/mob/living/simple_animal/bot/bot.dm
+++ b/code/modules/mob/living/simple_animal/bot/bot.dm
@@ -61,7 +61,7 @@
var/mob/living/silicon/ai/calling_ai //Links a bot to the AI calling it.
var/obj/item/radio/Radio //The bot's radio, for speaking to people.
var/radio_key = null //which channels can the bot listen to
- var/radio_channel = "Common" //The bot's default radio channel
+ var/radio_channel = RADIO_CHANNEL_COMMON //The bot's default radio channel
var/auto_patrol = 0// set to make bot automatically patrol
var/turf/patrol_target // this is turf to navigate to (location of beacon)
var/turf/summon_target // The turf of a user summoning a bot.
diff --git a/code/modules/mob/living/simple_animal/bot/cleanbot.dm b/code/modules/mob/living/simple_animal/bot/cleanbot.dm
index bc8dd0c3ab..e09eb13886 100644
--- a/code/modules/mob/living/simple_animal/bot/cleanbot.dm
+++ b/code/modules/mob/living/simple_animal/bot/cleanbot.dm
@@ -9,7 +9,7 @@
health = 25
maxHealth = 25
radio_key = /obj/item/encryptionkey/headset_service
- radio_channel = "Service" //Service
+ radio_channel = RADIO_CHANNEL_SERVICE //Service
bot_type = CLEAN_BOT
model = "Cleanbot"
bot_core_type = /obj/machinery/bot_core/cleanbot
@@ -155,7 +155,7 @@
else
shuffle = TRUE //Shuffle the list the next time we scan so we dont both go the same way.
path = list()
-
+
if(!path || path.len == 0) //No path, need a new one
//Try to produce a path to the target, and ignore airlocks to which it has access.
path = get_path_to(src, target.loc, /turf/proc/Distance_cardinal, 0, 30, id=access_card)
diff --git a/code/modules/mob/living/simple_animal/bot/ed209bot.dm b/code/modules/mob/living/simple_animal/bot/ed209bot.dm
index 581711d271..0781c2907a 100644
--- a/code/modules/mob/living/simple_animal/bot/ed209bot.dm
+++ b/code/modules/mob/living/simple_animal/bot/ed209bot.dm
@@ -13,7 +13,7 @@
mob_size = MOB_SIZE_LARGE
radio_key = /obj/item/encryptionkey/headset_sec
- radio_channel = "Security"
+ radio_channel = RADIO_CHANNEL_SECURITY
bot_type = SEC_BOT
model = "ED-209"
bot_core = /obj/machinery/bot_core/secbot
diff --git a/code/modules/mob/living/simple_animal/bot/firebot.dm b/code/modules/mob/living/simple_animal/bot/firebot.dm
index d8c3bca72a..1c2a6393ae 100644
--- a/code/modules/mob/living/simple_animal/bot/firebot.dm
+++ b/code/modules/mob/living/simple_animal/bot/firebot.dm
@@ -16,7 +16,7 @@
spacewalk = TRUE
radio_key = /obj/item/encryptionkey/headset_eng
- radio_channel = "Engineering"
+ radio_channel = RADIO_CHANNEL_ENGINEERING
bot_type = FIRE_BOT
model = "Firebot"
bot_core = /obj/machinery/bot_core/firebot
diff --git a/code/modules/mob/living/simple_animal/bot/floorbot.dm b/code/modules/mob/living/simple_animal/bot/floorbot.dm
index 7e5cfe2110..4709680ad9 100644
--- a/code/modules/mob/living/simple_animal/bot/floorbot.dm
+++ b/code/modules/mob/living/simple_animal/bot/floorbot.dm
@@ -11,7 +11,7 @@
spacewalk = TRUE
radio_key = /obj/item/encryptionkey/headset_eng
- radio_channel = "Engineering"
+ radio_channel = RADIO_CHANNEL_ENGINEERING
bot_type = FLOOR_BOT
model = "Floorbot"
bot_core = /obj/machinery/bot_core/floorbot
diff --git a/code/modules/mob/living/simple_animal/bot/honkbot.dm b/code/modules/mob/living/simple_animal/bot/honkbot.dm
index d586cc694b..e069b46e9d 100644
--- a/code/modules/mob/living/simple_animal/bot/honkbot.dm
+++ b/code/modules/mob/living/simple_animal/bot/honkbot.dm
@@ -11,7 +11,6 @@
pass_flags = PASSMOB
radio_key = /obj/item/encryptionkey/headset_service //doesn't have security key
- radio_channel = "Service" //Doesn't even use the radio anyway.
bot_type = HONK_BOT
model = "Honkbot"
bot_core_type = /obj/machinery/bot_core/honkbot
diff --git a/code/modules/mob/living/simple_animal/bot/medbot.dm b/code/modules/mob/living/simple_animal/bot/medbot.dm
index 5a21d33d5a..5eaaaea175 100644
--- a/code/modules/mob/living/simple_animal/bot/medbot.dm
+++ b/code/modules/mob/living/simple_animal/bot/medbot.dm
@@ -17,7 +17,7 @@
status_flags = (CANPUSH | CANSTUN)
radio_key = /obj/item/encryptionkey/headset_med
- radio_channel = "Medical"
+ radio_channel = RADIO_CHANNEL_MEDICAL
bot_type = MED_BOT
model = "Medibot"
diff --git a/code/modules/mob/living/simple_animal/bot/mulebot.dm b/code/modules/mob/living/simple_animal/bot/mulebot.dm
index c45d435253..2efdf09f24 100644
--- a/code/modules/mob/living/simple_animal/bot/mulebot.dm
+++ b/code/modules/mob/living/simple_animal/bot/mulebot.dm
@@ -23,7 +23,7 @@
mob_size = MOB_SIZE_LARGE
radio_key = /obj/item/encryptionkey/headset_cargo
- radio_channel = "Supply"
+ radio_channel = RADIO_CHANNEL_SUPPLY
bot_type = MULE_BOT
model = "MULE"
diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm
index fca1f66546..b6ef509d54 100644
--- a/code/modules/mob/living/simple_animal/bot/secbot.dm
+++ b/code/modules/mob/living/simple_animal/bot/secbot.dm
@@ -11,7 +11,7 @@
pass_flags = PASSMOB
radio_key = /obj/item/encryptionkey/secbot //AI Priv + Security
- radio_channel = "Security" //Security channel
+ radio_channel = RADIO_CHANNEL_SECURITY //Security channel
bot_type = SEC_BOT
model = "Securitron"
bot_core_type = /obj/machinery/bot_core/secbot
@@ -61,7 +61,7 @@
/mob/living/simple_animal/bot/secbot/pingsky
name = "Officer Pingsky"
desc = "It's Officer Pingsky! Delegated to satellite guard duty for harbouring anti-human sentiment."
- radio_channel = "AI Private"
+ radio_channel = RADIO_CHANNEL_AI_PRIVATE
/mob/living/simple_animal/bot/secbot/Initialize()
. = ..()
diff --git a/code/modules/mob/living/simple_animal/guardian/types/explosive.dm b/code/modules/mob/living/simple_animal/guardian/types/explosive.dm
index 8fb1de18df..ff2f453207 100644
--- a/code/modules/mob/living/simple_animal/guardian/types/explosive.dm
+++ b/code/modules/mob/living/simple_animal/guardian/types/explosive.dm
@@ -22,7 +22,7 @@
var/mob/living/M = target
if(!M.anchored && M != summoner && !hasmatchingsummoner(M))
new /obj/effect/temp_visual/guardian/phase/out(get_turf(M))
- do_teleport(M, M, 10)
+ do_teleport(M, M, 10, channel = TELEPORT_CHANNEL_BLUESPACE)
for(var/mob/living/L in range(1, M))
if(hasmatchingsummoner(L)) //if the summoner matches don't hurt them
continue
diff --git a/code/modules/mob/living/simple_animal/guardian/types/support.dm b/code/modules/mob/living/simple_animal/guardian/types/support.dm
index 8ef70e439f..794683e69f 100644
--- a/code/modules/mob/living/simple_animal/guardian/types/support.dm
+++ b/code/modules/mob/living/simple_animal/guardian/types/support.dm
@@ -142,5 +142,5 @@
L.flash_act()
A.visible_message("[A] disappears in a flash of light!", \
"Your vision is obscured by a flash of light!")
- do_teleport(A, beacon, 0)
+ do_teleport(A, beacon, 0, channel = TELEPORT_CHANNEL_BLUESPACE)
new /obj/effect/temp_visual/guardian/phase(get_turf(A))
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm
index 7cf8defc0f..b529d826c9 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm
@@ -747,6 +747,12 @@ Difficulty: Very Hard
/obj/structure/closet/stasis/ex_act()
return
+/obj/structure/closet/stasis/handle_lock_addition()
+ return
+
+/obj/structure/closet/stasis/handle_lock_removal()
+ return
+
/obj/effect/proc_holder/spell/targeted/exit_possession
name = "Exit Possession"
desc = "Exits the body you are possessing."
diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm
index fc53483eda..a50af21d47 100644
--- a/code/modules/mob/living/simple_animal/parrot.dm
+++ b/code/modules/mob/living/simple_animal/parrot.dm
@@ -241,23 +241,23 @@
clearlist(available_channels)
for(var/ch in headset_to_add.channels)
switch(ch)
- if("Engineering")
- available_channels.Add(":e")
- if("Command")
- available_channels.Add(":c")
- if("Security")
- available_channels.Add(":s")
- if("Science")
- available_channels.Add(":n")
- if("Medical")
- available_channels.Add(":m")
- if("Supply")
- available_channels.Add(":u")
- if("Service")
- available_channels.Add(":v")
+ if(RADIO_CHANNEL_ENGINEERING)
+ available_channels.Add(RADIO_TOKEN_ENGINEERING)
+ if(RADIO_CHANNEL_COMMAND)
+ available_channels.Add(RADIO_TOKEN_COMMAND)
+ if(RADIO_CHANNEL_SECURITY)
+ available_channels.Add(RADIO_TOKEN_SECURITY)
+ if(RADIO_CHANNEL_SCIENCE)
+ available_channels.Add(RADIO_TOKEN_SCIENCE)
+ if(RADIO_CHANNEL_MEDICAL)
+ available_channels.Add(RADIO_TOKEN_MEDICAL)
+ if(RADIO_CHANNEL_SUPPLY)
+ available_channels.Add(RADIO_TOKEN_SUPPLY)
+ if(RADIO_CHANNEL_SERVICE)
+ available_channels.Add(RADIO_TOKEN_SERVICE)
if(headset_to_add.translate_binary)
- available_channels.Add(":b")
+ available_channels.Add(MODE_TOKEN_BINARY)
else
return ..()
diff --git a/code/modules/mob/living/simple_animal/simple_animal_vr.dm b/code/modules/mob/living/simple_animal/simple_animal_vr.dm
index 4d808a11a9..41ece5ed06 100644
--- a/code/modules/mob/living/simple_animal/simple_animal_vr.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal_vr.dm
@@ -105,6 +105,9 @@
var/mob/living/carbon/human/user = usr
if(!istype(user) || user.stat) return
+ if(!vore_active)
+ return
+
if(vore_selected.digest_mode == DM_HOLD)
var/confirm = alert(usr, "Enabling digestion on [name] will cause it to digest all stomach contents. Using this to break OOC prefs is against the rules. Digestion will disable itself after 20 minutes.", "Enabling [name]'s Digestion", "Enable", "Cancel")
if(confirm == "Enable")
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index f7d10bfb7b..84f0df3cc7 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -116,7 +116,7 @@
// vision_distance (optional) define how many tiles away the message can be seen.
// ignored_mob (optional) doesn't show any message to a given mob if TRUE.
-/atom/proc/visible_message(message, self_message, blind_message, vision_distance, ignored_mob)
+/atom/proc/visible_message(message, self_message, blind_message, vision_distance, ignored_mob, no_ghosts = FALSE)
var/turf/T = get_turf(src)
if(!T)
return
@@ -129,6 +129,8 @@
if(M == ignored_mob)
continue
var/msg = message
+ if(isobserver(M) && no_ghosts)
+ continue
if(M == src) //the src always see the main message or self message
if(self_message)
msg = self_message
diff --git a/code/modules/ninja/suit/n_suit_verbs/ninja_stealth.dm b/code/modules/ninja/suit/n_suit_verbs/ninja_stealth.dm
index 1c3fbd8147..94be922fdf 100644
--- a/code/modules/ninja/suit/n_suit_verbs/ninja_stealth.dm
+++ b/code/modules/ninja/suit/n_suit_verbs/ninja_stealth.dm
@@ -8,33 +8,37 @@ Contents:
/obj/item/clothing/suit/space/space_ninja/proc/toggle_stealth()
- var/mob/living/carbon/human/U = affecting
- if(!U)
+ if(!affecting)
return
if(stealth)
cancel_stealth()
else
if(cell.charge <= 0)
- to_chat(U, "You don't have enough power to enable Stealth!")
+ to_chat(affecting, "You don't have enough power to enable Stealth!")
return
stealth = !stealth
- animate(U, alpha = 50,time = 15)
- U.visible_message("[U.name] vanishes into thin air!", \
+ animate(affecting, alpha = 10,time = 15)
+ affecting.visible_message("[affecting.name] vanishes into thin air!", \
"You are now mostly invisible to normal detection.")
+ RegisterSignal(affecting, list(COMSIG_MOB_ITEM_ATTACK, COMSIG_MOB_ATTACK_RANGED, COMSIG_MOB_ATTACK_HAND, COMSIG_MOB_THROW, COMSIG_PARENT_ATTACKBY), .proc/reduce_stealth)
+ RegisterSignal(affecting, COMSIG_MOVABLE_BUMP, .proc/bumping_stealth)
+/obj/item/clothing/suit/space/space_ninja/proc/reduce_stealth()
+ affecting.alpha = min(affecting.alpha + 30, 80)
+
+/obj/item/clothing/suit/space/space_ninja/proc/bumping_stealth(datum/source, atom/A)
+ if(isliving(A))
+ affecting.alpha = min(affecting.alpha + 15, 80)
/obj/item/clothing/suit/space/space_ninja/proc/cancel_stealth()
- var/mob/living/carbon/human/U = affecting
- if(!U)
- return 0
- if(stealth)
- stealth = !stealth
- animate(U, alpha = 255, time = 15)
- U.visible_message("[U.name] appears from thin air!", \
- "You are now visible.")
- return 1
- return 0
-
+ if(!affecting || !stealth)
+ return FALSE
+ stealth = !stealth
+ UnregisterSignal(affecting, list(COMSIG_MOB_ITEM_ATTACK, COMSIG_MOB_ATTACK_RANGED, COMSIG_MOB_ATTACK_HAND, COMSIG_MOB_THROW, COMSIG_PARENT_ATTACKBY, COMSIG_MOVABLE_BUMP))
+ animate(affecting, alpha = 255, time = 15)
+ affecting.visible_message("[affecting.name] appears from thin air!", \
+ "You are now visible.")
+ return TRUE
/obj/item/clothing/suit/space/space_ninja/proc/stealth()
if(!s_busy)
diff --git a/code/modules/ninja/suit/shoes.dm b/code/modules/ninja/suit/shoes.dm
index 1b935a00de..115b14b63b 100644
--- a/code/modules/ninja/suit/shoes.dm
+++ b/code/modules/ninja/suit/shoes.dm
@@ -1,4 +1,3 @@
-
/obj/item/clothing/shoes/space_ninja
name = "ninja shoes"
desc = "A pair of running shoes. Excellent for running and even better for smashing skulls."
@@ -13,3 +12,12 @@
min_cold_protection_temperature = SHOES_MIN_TEMP_PROTECT
heat_protection = FEET
max_heat_protection_temperature = SHOES_MAX_TEMP_PROTECT
+
+/obj/item/clothing/shoes/space_ninja/equipped(mob/user, slot)
+ . = ..()
+ if(slot == SLOT_SHOES)
+ ADD_TRAIT(user, TRAIT_SILENT_STEP, "ninja_shoes_[REF(src)]")
+
+/obj/item/clothing/shoes/space_ninja/dropped(mob/user)
+ . = ..()
+ REMOVE_TRAIT(user, TRAIT_SILENT_STEP, "ninja_shoes_[REF(src)]")
diff --git a/code/modules/ninja/suit/suit.dm b/code/modules/ninja/suit/suit.dm
index b98ef764c0..ac1ef3b96a 100644
--- a/code/modules/ninja/suit/suit.dm
+++ b/code/modules/ninja/suit/suit.dm
@@ -149,12 +149,11 @@ Contents:
/obj/item/clothing/suit/space/space_ninja/examine(mob/user)
..()
- if(s_initialized)
- if(user == affecting)
- to_chat(user, "All systems operational. Current energy capacity: [DisplayEnergy(cell.charge)].")
- to_chat(user, "The CLOAK-tech device is [stealth?"active":"inactive"].")
- to_chat(user, "There are [s_bombs] smoke bomb\s remaining.")
- to_chat(user, "There are [a_boost] adrenaline booster\s remaining.")
+ if(s_initialized && user == affecting)
+ to_chat(user, "All systems operational. Current energy capacity: [DisplayEnergy(cell.charge)].\n\
+ The CLOAK-tech device is [stealth?"active":"inactive"].\n\
+ There are [s_bombs] smoke bomb\s remaining.\n\
+ There are [a_boost] adrenaline booster\s remaining.")
/obj/item/clothing/suit/space/space_ninja/ui_action_click(mob/user, action)
if(istype(action, /datum/action/item_action/initialize_ninja_suit))
diff --git a/code/modules/ninja/suit/suit_initialisation.dm b/code/modules/ninja/suit/suit_initialisation.dm
index 4b159557bc..3d80282fe7 100644
--- a/code/modules/ninja/suit/suit_initialisation.dm
+++ b/code/modules/ninja/suit/suit_initialisation.dm
@@ -48,7 +48,7 @@
/obj/item/clothing/suit/space/space_ninja/proc/ninitialize_seven(delay, mob/living/carbon/human/U)
to_chat(U, "All systems operational. Welcome to SpiderOS, [U.real_name].")
s_initialized = TRUE
- ntick()
+ START_PROCESSING(SSprocessing, src)
s_busy = FALSE
@@ -91,4 +91,5 @@
unlock_suit()
U.regenerate_icons()
s_initialized = FALSE
+ STOP_PROCESSING(SSprocessing, src)
s_busy = FALSE
diff --git a/code/modules/ninja/suit/suit_process.dm b/code/modules/ninja/suit/suit_process.dm
index 4a89a59f75..850fb837b4 100644
--- a/code/modules/ninja/suit/suit_process.dm
+++ b/code/modules/ninja/suit/suit_process.dm
@@ -1,20 +1,17 @@
-/obj/item/clothing/suit/space/space_ninja/proc/ntick(mob/living/carbon/human/U = affecting)
- //Runs in the background while the suit is initialized.
- //Requires charge or stealth to process.
- spawn while(s_initialized)
- if(!affecting)
- terminate()//Kills the suit and attached objects.
+/obj/item/clothing/suit/space/space_ninja/process()
+ if(!affecting || !s_initialized)
+ return PROCESS_KILL
- else if(cell.charge > 0)
- if(s_coold)
- s_coold--//Checks for ability s_cooldown first.
+ if(cell.charge > 0)
+ if(s_coold)
+ s_coold--//Checks for ability s_cooldown first.
- cell.charge -= s_cost//s_cost is the default energy cost each ntick, usually 5.
- if(stealth)//If stealth is active.
- cell.charge -= s_acost
+ cell.charge -= s_cost//s_cost is the default energy cost each tick, usually 5.
+ if(stealth)//If stealth is active.
+ cell.charge -= s_acost
+ affecting.alpha = max(affecting.alpha - 10, 10)
- else
- cell.charge = 0
+ else
+ cell.charge = 0
+ if(stealth)
cancel_stealth()
-
- sleep(10)//Checks every second.
diff --git a/code/modules/projectiles/guns/ballistic/shotgun.dm b/code/modules/projectiles/guns/ballistic/shotgun.dm
index bb6a144c93..856dfed78b 100644
--- a/code/modules/projectiles/guns/ballistic/shotgun.dm
+++ b/code/modules/projectiles/guns/ballistic/shotgun.dm
@@ -212,14 +212,41 @@
)
/obj/item/gun/ballistic/shotgun/automatic/combat/compact
- name = "compact combat shotgun"
- desc = "A compact version of the semi automatic combat shotgun. For close encounters."
+ name = "warden's combat shotgun"
+ desc = "A modified version of the semi automatic combat shotgun with a collapsible stock. For close encounters."
icon_state = "cshotgunc"
- mag_type = /obj/item/ammo_box/magazine/internal/shot/com/compact
+ mag_type = /obj/item/ammo_box/magazine/internal/shot/com
w_class = WEIGHT_CLASS_NORMAL
- unique_reskin = list("Tatical" = "cshotgunc",
- "Slick" = "cshotgunc_slick"
- )
+ var/stock = FALSE
+ recoil = 5
+ spread = 2
+
+/obj/item/gun/ballistic/shotgun/automatic/combat/compact/AltClick(mob/living/user)
+ if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user)))
+ return
+ toggle_stock(user)
+ . = ..()
+
+/obj/item/gun/ballistic/shotgun/automatic/combat/compact/examine(mob/user)
+ ..()
+ to_chat(user, "Alt-click to toggle the stock.")
+
+/obj/item/gun/ballistic/shotgun/automatic/combat/compact/proc/toggle_stock(mob/living/user)
+ stock = !stock
+ if(stock)
+ w_class = WEIGHT_CLASS_HUGE
+ to_chat(user, "You unfold the stock.")
+ recoil = 1
+ spread = 0
+ else
+ w_class = WEIGHT_CLASS_NORMAL
+ to_chat(user, "You fold the stock.")
+ recoil = 5
+ spread = 2
+ update_icon()
+
+/obj/item/gun/ballistic/shotgun/automatic/combat/compact/update_icon()
+ icon_state = "[current_skin ? unique_reskin[current_skin] : "cshotgun"][stock ? "" : "c"]"
//Dual Feed Shotgun
@@ -235,6 +262,7 @@
/obj/item/gun/ballistic/shotgun/automatic/dual_tube/examine(mob/user)
..()
to_chat(user, "Alt-click to pump it.")
+ . = ..()
/obj/item/gun/ballistic/shotgun/automatic/dual_tube/Initialize()
. = ..()
diff --git a/code/modules/projectiles/guns/magic/wand.dm b/code/modules/projectiles/guns/magic/wand.dm
index e3724fdf31..42033d8c88 100644
--- a/code/modules/projectiles/guns/magic/wand.dm
+++ b/code/modules/projectiles/guns/magic/wand.dm
@@ -131,7 +131,7 @@
no_den_usage = 1
/obj/item/gun/magic/wand/teleport/zap_self(mob/living/user)
- if(do_teleport(user, user, 10))
+ if(do_teleport(user, user, 10, channel = TELEPORT_CHANNEL_MAGIC))
var/datum/effect_system/smoke_spread/smoke = new
smoke.set_up(3, user.loc)
smoke.start()
diff --git a/code/modules/projectiles/projectile/energy/net_snare.dm b/code/modules/projectiles/projectile/energy/net_snare.dm
index f5d0607341..c8333a811c 100644
--- a/code/modules/projectiles/projectile/energy/net_snare.dm
+++ b/code/modules/projectiles/projectile/energy/net_snare.dm
@@ -42,10 +42,10 @@
/obj/effect/nettingportal/proc/pop(teletarget)
if(teletarget)
for(var/mob/living/L in get_turf(src))
- do_teleport(L, teletarget, 2)//teleport what's in the tile to the beacon
+ do_teleport(L, teletarget, 2, channel = TELEPORT_CHANNEL_BLUESPACE)//teleport what's in the tile to the beacon
else
for(var/mob/living/L in get_turf(src))
- do_teleport(L, L, 15) //Otherwise it just warps you off somewhere.
+ do_teleport(L, L, 15, channel = TELEPORT_CHANNEL_BLUESPACE) //Otherwise it just warps you off somewhere.
qdel(src)
diff --git a/code/modules/projectiles/projectile/magic.dm b/code/modules/projectiles/projectile/magic.dm
index dee88f176f..5b84608fad 100644
--- a/code/modules/projectiles/projectile/magic.dm
+++ b/code/modules/projectiles/projectile/magic.dm
@@ -67,7 +67,7 @@
teleloc = target.loc
for(var/atom/movable/stuff in teleloc)
if(!stuff.anchored && stuff.loc)
- if(do_teleport(stuff, stuff, 10))
+ if(do_teleport(stuff, stuff, 10, channel = TELEPORT_CHANNEL_MAGIC))
teleammount++
var/datum/effect_system/smoke_spread/smoke = new
smoke.set_up(max(round(4 - teleammount),0), stuff.loc) //Smoke drops off if a lot of stuff is moved for the sake of sanity
diff --git a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
index 211fddca26..a46a4d61e4 100644
--- a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
@@ -2076,7 +2076,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
/datum/reagent/consumable/ethanol/blazaam/on_mob_life(mob/living/carbon/M)
if(M.drunkenness > 40)
if(stored_teleports)
- do_teleport(M, get_turf(M), rand(1,3))
+ do_teleport(M, get_turf(M), rand(1,3), channel = TELEPORT_CHANNEL_WORMHOLE)
stored_teleports--
if(prob(10))
stored_teleports += rand(2,6)
diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm
index 840a57055c..db927411c0 100644
--- a/code/modules/reagents/chemistry/reagents/other_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm
@@ -346,7 +346,7 @@
//We only get 30u to start with...
/datum/reagent/fuel/holyoil/reaction_obj(obj/O, reac_volume)
- . = ..()
+ . = ..()
if(istype(O, /obj/item/stack/sheet/metal))
var/obj/item/stack/sheet/metal/M = O
reac_volume = min(reac_volume, M.amount)
@@ -989,7 +989,7 @@
/datum/reagent/bluespace/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
if(method == TOUCH || method == VAPOR)
- do_teleport(M, get_turf(M), (reac_volume / 5), asoundin = 'sound/effects/phasein.ogg') //4 tiles per crystal
+ do_teleport(M, get_turf(M), (reac_volume / 5), asoundin = 'sound/effects/phasein.ogg', channel = TELEPORT_CHANNEL_BLUESPACE) //4 tiles per crystal
..()
/datum/reagent/bluespace/on_mob_life(mob/living/carbon/M)
@@ -1001,7 +1001,7 @@
..()
/mob/living/proc/bluespace_shuffle()
- do_teleport(src, get_turf(src), 5, asoundin = 'sound/effects/phasein.ogg')
+ do_teleport(src, get_turf(src), 5, asoundin = 'sound/effects/phasein.ogg', channel = TELEPORT_CHANNEL_BLUESPACE)
/datum/reagent/aluminium
name = "Aluminium"
diff --git a/code/modules/research/designs/misc_designs.dm b/code/modules/research/designs/misc_designs.dm
index 59df0f6e85..d27c876f88 100644
--- a/code/modules/research/designs/misc_designs.dm
+++ b/code/modules/research/designs/misc_designs.dm
@@ -460,6 +460,16 @@
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
+/datum/design/quantum_keycard
+ name = "Quantum Keycard"
+ desc = "Allows for the construction of a quantum keycard."
+ id = "quantum_keycard"
+ build_type = PROTOLATHE
+ materials = list(MAT_GLASS = 500, MAT_METAL = 500, MAT_SILVER = 500, MAT_BLUESPACE = 1000)
+ build_path = /obj/item/quantum_keycard
+ category = list("Equipment")
+ departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
+
/datum/design/anomaly_neutralizer
name = "Anomaly Neutralizer"
desc = "An advanced tool capable of instantly neutralizing anomalies, designed to capture the fleeting aberrations created by the engine."
diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm
index ebd386513e..e56350a280 100644
--- a/code/modules/research/experimentor.dm
+++ b/code/modules/research/experimentor.dm
@@ -651,7 +651,7 @@
if(loc == user && !is_centcom_level(userturf.z)) //Because Nuke Ops bringing this back on their shuttle, then looting the ERT area is 2fun4you!
visible_message("[src] twists and bends, relocating itself!")
throwSmoke(userturf)
- do_teleport(user, userturf, 8, asoundin = 'sound/effects/phasein.ogg')
+ do_teleport(user, userturf, 8, asoundin = 'sound/effects/phasein.ogg', channel = TELEPORT_CHANNEL_BLUESPACE)
throwSmoke(get_turf(user))
warn_admins(user, "Teleport", 0)
diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm
index c6487c92f0..c70ee8a16b 100644
--- a/code/modules/research/techweb/all_nodes.dm
+++ b/code/modules/research/techweb/all_nodes.dm
@@ -221,13 +221,22 @@
//research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1500)
//export_price = 5000
+/datum/techweb_node/computer_board_gaming
+ id = "computer_board_gaming"
+ display_name = "Games and Toys"
+ description = "For the slackers on the station."
+ prereq_ids = list("comptech")
+ design_ids = list("arcade_battle", "arcade_orion", "slotmachine", "autoylathe")
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1000)
+ export_price = 5000
+
/////////////////////////Bluespace tech/////////////////////////
/datum/techweb_node/bluespace_basic //Bluespace-memery
id = "bluespace_basic"
display_name = "Basic Bluespace Theory"
description = "Basic studies into the mysterious alternate dimension known as bluespace."
prereq_ids = list("base", "datatheory")
- design_ids = list("beacon", "xenobioconsole", "telesci_gps")
+ design_ids = list("beacon", "xenobioconsole", "telesci_gps", "xenobio_monkeys")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
export_price = 5000
@@ -236,7 +245,7 @@
display_name = "Applied Bluespace Research"
description = "Using bluespace to make things faster and better."
prereq_ids = list("bluespace_basic", "engineering")
- design_ids = list("bs_rped","biobag_holding","minerbag_holding", "bluespacebeaker", "bluespacesyringe", "phasic_scanning", "bluespacesmartdart")
+ design_ids = list("bs_rped","biobag_holding","minerbag_holding", "bluespacebeaker", "bluespacesyringe", "phasic_scanning", "bluespacesmartdart", "xenobio_slimebasic")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000)
export_price = 5000
@@ -245,7 +254,7 @@
display_name = "Advanced Bluespace Research"
description = "Deeper understanding of how the Bluespace dimension works"
prereq_ids = list("practical_bluespace", "high_efficiency")
- design_ids = list("bluespace_matter_bin", "femto_mani", "triphasic_scanning", "bluespace_crystal")
+ design_ids = list("bluespace_matter_bin", "femto_mani", "triphasic_scanning", "bluespace_crystal", "xenobio_slimeadv")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 10000)
export_price = 5000
@@ -278,10 +287,10 @@
/datum/techweb_node/bluespace_warping
id = "bluespace_warping"
- display_name = "Bluespace Teleportation tech"
- description = "Traversing through space at an instant with Bluespace."
+ display_name = "Bluespace Travel"
+ description = "Application of Bluespace for static teleportation technology."
prereq_ids = list("adv_power", "adv_bluespace")
- design_ids = list( "tele_station", "tele_hub", "quantumpad", "launchpad", "launchpad_console", "teleconsole", "roastingstick")
+ design_ids = list("tele_station", "tele_hub", "quantumpad", "quantum_keycard", "launchpad", "launchpad_console", "teleconsole", "roastingstick")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
export_price = 5000
@@ -672,7 +681,7 @@
display_name = "Ballistic Weaponry"
description = "This isn't research.. This is reverse-engineering!"
prereq_ids = list("weaponry")
- design_ids = list("mag_oldsmg", "mag_oldsmg_ap", "mag_oldsmg_ic")
+ design_ids = list("mag_oldsmg", "mag_oldsmg_ap", "mag_oldsmg_ic", "mag_oldsmg_rubber", "mag_oldsmg_tx")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2750)
export_price = 5000
@@ -1049,6 +1058,15 @@
continue
boost_item_paths |= UI.item //allows deconning to unlock.
+/datum/techweb_node/advanced_illegl_ballistics
+ id = "advanced_illegal_ballistics"
+ display_name = "Advanced Illegal Ballistics"
+ description = "Advanced Ballistic for Illegal weaponds."
+ design_ids = list("10mm","10mmap","10mminc","10mmhp","pistolm9mm","m45","bolt_clip")
+ prereq_ids = list("ballistic_weapons","syndicate_basic","explosive_weapons")
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 25000) //This gives sec lethal mags/clips for guns form traitors or space.
+ export_price = 7000
+
//Helpers for debugging/balancing the techweb in its entirety!
/proc/total_techweb_exports()
var/list/datum/techweb_node/processing = list()
diff --git a/code/modules/research/xenobiology/crossbreeding/_status_effects.dm b/code/modules/research/xenobiology/crossbreeding/_status_effects.dm
index ad5bfa27dc..b9e7122d07 100644
--- a/code/modules/research/xenobiology/crossbreeding/_status_effects.dm
+++ b/code/modules/research/xenobiology/crossbreeding/_status_effects.dm
@@ -680,7 +680,7 @@ datum/status_effect/stabilized/blue/on_remove()
if(!F)
F = get_turf(owner)
range = 50
- if(do_teleport(owner, F, range))
+ if(do_teleport(owner, F, range, channel = TELEPORT_CHANNEL_BLUESPACE))
to_chat(owner, "[linked_extract] will take some time to re-align you on the bluespace axis.")
do_sparks(5,FALSE,owner)
owner.apply_status_effect(/datum/status_effect/bluespacestabilization)
diff --git a/code/modules/research/xenobiology/crossbreeding/burning.dm b/code/modules/research/xenobiology/crossbreeding/burning.dm
index 38362e6d64..363331e12d 100644
--- a/code/modules/research/xenobiology/crossbreeding/burning.dm
+++ b/code/modules/research/xenobiology/crossbreeding/burning.dm
@@ -144,7 +144,7 @@ Burning extracts:
user.visible_message("[src] sparks, and lets off a shockwave of bluespace energy!")
for(var/mob/living/L in range(1, get_turf(user)))
if(L != user)
- do_teleport(L, get_turf(L), 6, asoundin = 'sound/effects/phasein.ogg') //Somewhere between the effectiveness of fake and real BS crystal
+ do_teleport(L, get_turf(L), 6, asoundin = 'sound/effects/phasein.ogg', channel = TELEPORT_CHANNEL_BLUESPACE) //Somewhere between the effectiveness of fake and real BS crystal
new /obj/effect/particle_effect/sparks(get_turf(L))
playsound(get_turf(L), "sparks", 50, 1)
..()
diff --git a/code/modules/research/xenobiology/crossbreeding/consuming.dm b/code/modules/research/xenobiology/crossbreeding/consuming.dm
index b51a7b2553..0b2d60da8c 100644
--- a/code/modules/research/xenobiology/crossbreeding/consuming.dm
+++ b/code/modules/research/xenobiology/crossbreeding/consuming.dm
@@ -232,7 +232,7 @@ Consuming extracts:
L.Cut(I,I+1)
if(target)
- do_teleport(M, target, 0, asoundin = 'sound/effects/phasein.ogg')
+ do_teleport(M, target, 0, asoundin = 'sound/effects/phasein.ogg', channel = TELEPORT_CHANNEL_BLUESPACE)
new /obj/effect/particle_effect/sparks(get_turf(M))
playsound(get_turf(M), "sparks", 50, 1)
diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm
index ce36be8e42..7acbaaac1c 100644
--- a/code/modules/research/xenobiology/xenobiology.dm
+++ b/code/modules/research/xenobiology/xenobiology.dm
@@ -494,7 +494,7 @@
to_chat(user, "You feel your body vibrating...")
if(do_after(user, 25, target = user))
to_chat(user, "You teleport!")
- do_teleport(user, get_turf(user), 6, asoundin = 'sound/weapons/emitter2.ogg')
+ do_teleport(user, get_turf(user), 6, asoundin = 'sound/weapons/emitter2.ogg', channel = TELEPORT_CHANNEL_BLUESPACE)
return 300
if(SLIME_ACTIVATE_MAJOR)
@@ -510,7 +510,7 @@
if(teleport_x && teleport_y && teleport_z)
var/turf/T = locate(teleport_x, teleport_y, teleport_z)
to_chat(user, "You snap back to your anchor point!")
- do_teleport(user, T, asoundin = 'sound/weapons/emitter2.ogg')
+ do_teleport(user, T, asoundin = 'sound/weapons/emitter2.ogg', channel = TELEPORT_CHANNEL_BLUESPACE)
return 450
diff --git a/code/modules/spells/spell_types/area_teleport.dm b/code/modules/spells/spell_types/area_teleport.dm
index ab399f4e2a..7bede9f8be 100644
--- a/code/modules/spells/spell_types/area_teleport.dm
+++ b/code/modules/spells/spell_types/area_teleport.dm
@@ -58,7 +58,7 @@
var/success = 0
while(tempL.len)
attempt = pick(tempL)
- target.Move(attempt)
+ do_teleport(target, attempt, channel = TELEPORT_CHANNEL_MAGIC)
if(get_turf(target) == attempt)
success = 1
break
@@ -66,7 +66,7 @@
tempL.Remove(attempt)
if(!success)
- target.forceMove(L)
+ do_teleport(target, L, forceMove = TRUE, channel = TELEPORT_CHANNEL_MAGIC)
playsound(get_turf(user), sound2, 50,1)
return
diff --git a/code/modules/spells/spell_types/turf_teleport.dm b/code/modules/spells/spell_types/turf_teleport.dm
index 093285b74d..8a45f2be22 100644
--- a/code/modules/spells/spell_types/turf_teleport.dm
+++ b/code/modules/spells/spell_types/turf_teleport.dm
@@ -40,6 +40,5 @@
if(!picked || !isturf(picked))
return
- if(!target.Move(picked))
- target.forceMove(picked)
- playsound(get_turf(user), sound2, 50,1)
+ if(do_teleport(user, picked, forceMove = TRUE, channel = TELEPORT_CHANNEL_MAGIC))
+ playsound(get_turf(user), sound1, 50,1)
diff --git a/code/modules/station_goals/shield.dm b/code/modules/station_goals/shield.dm
index 98f5534d06..be88d0ecdc 100644
--- a/code/modules/station_goals/shield.dm
+++ b/code/modules/station_goals/shield.dm
@@ -133,6 +133,7 @@
mode = "M-SHIELD"
speed_process = TRUE
var/kill_range = 14
+ density = 0
/obj/machinery/satellite/meteor_shield/sci
name = "\improper Meteor Shield Satellite"
diff --git a/code/modules/surgery/bodyparts/robot_bodyparts.dm b/code/modules/surgery/bodyparts/robot_bodyparts.dm
index ab31d64034..a3f8b883b4 100644
--- a/code/modules/surgery/bodyparts/robot_bodyparts.dm
+++ b/code/modules/surgery/bodyparts/robot_bodyparts.dm
@@ -20,8 +20,8 @@
icon_state = "borg_l_arm"
status = BODYPART_ROBOTIC
- brute_reduction = 5
- burn_reduction = 4
+ brute_reduction = 2
+ burn_reduction = 1
light_brute_msg = ROBOTIC_LIGHT_BRUTE_MSG
medium_brute_msg = ROBOTIC_MEDIUM_BRUTE_MSG
@@ -41,8 +41,8 @@
icon_state = "borg_r_arm"
status = BODYPART_ROBOTIC
- brute_reduction = 5
- burn_reduction = 4
+ brute_reduction = 2
+ burn_reduction = 1
light_brute_msg = ROBOTIC_LIGHT_BRUTE_MSG
medium_brute_msg = ROBOTIC_MEDIUM_BRUTE_MSG
@@ -62,8 +62,8 @@
icon_state = "borg_l_leg"
status = BODYPART_ROBOTIC
- brute_reduction = 5
- burn_reduction = 4
+ brute_reduction = 2
+ burn_reduction = 1
light_brute_msg = ROBOTIC_LIGHT_BRUTE_MSG
medium_brute_msg = ROBOTIC_MEDIUM_BRUTE_MSG
@@ -83,8 +83,8 @@
icon_state = "borg_r_leg"
status = BODYPART_ROBOTIC
- brute_reduction = 5
- burn_reduction = 4
+ brute_reduction = 2
+ burn_reduction = 1
light_brute_msg = ROBOTIC_LIGHT_BRUTE_MSG
medium_brute_msg = ROBOTIC_MEDIUM_BRUTE_MSG
@@ -103,8 +103,8 @@
icon_state = "borg_chest"
status = BODYPART_ROBOTIC
- brute_reduction = 5
- burn_reduction = 4
+ brute_reduction = 2
+ burn_reduction = 1
light_brute_msg = ROBOTIC_LIGHT_BRUTE_MSG
medium_brute_msg = ROBOTIC_MEDIUM_BRUTE_MSG
@@ -268,38 +268,38 @@
burn_reduction = 0
max_damage = 20
-// Upgraded Surplus lims
+// Upgraded Surplus lims - Better then robotic lims
/obj/item/bodypart/l_arm/robot/surplus_upgraded
name = "reinforced surplus prosthetic left arm"
- desc = "A skeletal, robotic limb. This one is reinforced to provide better protection."
+ desc = "A skeletal, robotic limb. This one is reinforced to provide better protection, and is made of stronger parts."
icon = 'icons/mob/augmentation/surplus_augments.dmi'
- brute_reduction = 1
- burn_reduction = 1
- max_damage = 30
+ brute_reduction = 3
+ burn_reduction = 2
+ max_damage = 55
/obj/item/bodypart/r_arm/robot/surplus_upgraded
name = "reinforced surplus prosthetic right arm"
- desc = "A skeletal, robotic limb. This one is reinforced to provide better protection."
+ desc = "A skeletal, robotic limb. This one is reinforced to provide better protection, and is made of stronger parts."
icon = 'icons/mob/augmentation/surplus_augments.dmi'
- brute_reduction = 1
- burn_reduction = 1
- max_damage = 30
+ brute_reduction = 3
+ burn_reduction = 2
+ max_damage = 55
/obj/item/bodypart/l_leg/robot/surplus_upgraded
name = "reinforced surplus prosthetic left leg"
- desc = "A skeletal, robotic limb. This one is reinforced to provide better protection."
+ desc = "A skeletal, robotic limb. This one is reinforced to provide better protection, and is made of stronger parts."
icon = 'icons/mob/augmentation/surplus_augments.dmi'
- brute_reduction = 1
- burn_reduction = 1
- max_damage = 30
+ brute_reduction = 3
+ burn_reduction = 2
+ max_damage = 55
/obj/item/bodypart/r_leg/robot/surplus_upgraded
name = "reinforced surplus prosthetic right leg"
- desc = "A skeletal, robotic limb. This one is reinforced to provide better protection."
+ desc = "A skeletal, robotic limb. This one is reinforced to provide better protection, and is made of stronger parts."
icon = 'icons/mob/augmentation/surplus_augments.dmi'
- brute_reduction = 1
- burn_reduction = 1
- max_damage = 30
+ brute_reduction = 3
+ burn_reduction = 2
+ max_damage = 55
#undef ROBOTIC_LIGHT_BRUTE_MSG
#undef ROBOTIC_MEDIUM_BRUTE_MSG
diff --git a/code/modules/surgery/organs/eyes.dm b/code/modules/surgery/organs/eyes.dm
index 98abb2528a..55c8d95082 100644
--- a/code/modules/surgery/organs/eyes.dm
+++ b/code/modules/surgery/organs/eyes.dm
@@ -169,7 +169,6 @@
var/list/obj/effect/abstract/eye_lighting/eye_lighting
var/obj/effect/abstract/eye_lighting/on_mob
var/image/mob_overlay
- var/datum/component/mobhook
/obj/item/organ/eyes/robotic/glow/Initialize()
. = ..()
@@ -238,26 +237,18 @@
return
deactivate(silent = TRUE)
-/obj/item/organ/eyes/robotic/glow/Insert(mob/living/carbon/M, special = FALSE, drop_if_replaced = FALSE)
- . = ..()
- if (mobhook && mobhook.parent != M)
- QDEL_NULL(mobhook)
- if (!mobhook)
- mobhook = M.AddComponent(/datum/component/redirect, list(COMSIG_ATOM_DIR_CHANGE = CALLBACK(src, .proc/update_visuals)))
-
/obj/item/organ/eyes/robotic/glow/Remove(mob/living/carbon/M)
. = ..()
- QDEL_NULL(mobhook)
-
-/obj/item/organ/eyes/robotic/glow/Destroy()
- QDEL_NULL(mobhook) // mobhook is not our component
- return ..()
+ if(active)
+ UnregisterSignal(M, COMSIG_ATOM_DIR_CHANGE)
+ active = FALSE
/obj/item/organ/eyes/robotic/glow/proc/activate(silent = FALSE)
start_visuals()
if(!silent)
to_chat(owner, "Your [src] clicks and makes a whining noise, before shooting out a beam of light!")
active = TRUE
+ RegisterSignal(owner, COMSIG_ATOM_DIR_CHANGE, .proc/update_visuals)
cycle_mob_overlay()
/obj/item/organ/eyes/robotic/glow/proc/deactivate(silent = FALSE)
@@ -265,6 +256,7 @@
if(!silent)
to_chat(owner, "Your [src] shuts off!")
active = FALSE
+ UnregisterSignal(owner, COMSIG_ATOM_DIR_CHANGE)
remove_mob_overlay()
/obj/item/organ/eyes/robotic/glow/proc/update_visuals(datum/source, olddir, newdir)
diff --git a/code/modules/surgery/organs/vocal_cords.dm b/code/modules/surgery/organs/vocal_cords.dm
index 55ead3b5b4..ad13de0a01 100644
--- a/code/modules/surgery/organs/vocal_cords.dm
+++ b/code/modules/surgery/organs/vocal_cords.dm
@@ -3,7 +3,7 @@
#define COOLDOWN_MEME 300
#define COOLDOWN_NONE 100
-/obj/item/organ/vocal_cords //organs that are activated through speech with the :x channel
+/obj/item/organ/vocal_cords //organs that are activated through speech with the :x/MODE_KEY_VOCALCORDS channel
name = "vocal cords"
icon_state = "appendix"
zone = BODY_ZONE_PRECISE_MOUTH
diff --git a/code/modules/uplink/uplink_items.dm b/code/modules/uplink/uplink_items.dm
index 1831f38940..38c31a1294 100644
--- a/code/modules/uplink/uplink_items.dm
+++ b/code/modules/uplink/uplink_items.dm
@@ -290,6 +290,22 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
/datum/uplink_item/dangerous
category = "Conspicuous and Dangerous Weapons"
+/datum/uplink_item/dangerous/pistol
+ name = "Stechkin Pistol"
+ desc = "A small, easily concealable handgun that uses 10mm auto rounds in 8-round magazines and is compatible \
+ with suppressors."
+ item = /obj/item/gun/ballistic/automatic/pistol
+ cost = 7
+ exclude_modes = list(/datum/game_mode/nuclear/clown_ops)
+
+/datum/uplink_item/dangerous/revolver
+ name = "Syndicate Revolver"
+ desc = "A brutally simple syndicate revolver that fires .357 Magnum rounds and has 7 chambers."
+ item = /obj/item/gun/ballistic/revolver/syndie
+ cost = 13
+ surplus = 50
+ exclude_modes = list(/datum/game_mode/nuclear/clown_ops)
+
/datum/uplink_item/dangerous/rawketlawnchair
name = "84mm Rocket Propelled Grenade Launcher"
desc = "A reusable rocket propelled grenade launcher preloaded with a low-yield 84mm HE round. \
@@ -494,14 +510,6 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
surplus = 25
include_modes = list(/datum/game_mode/nuclear)
-/datum/uplink_item/dangerous/pistol
- name = "Stechkin Pistol"
- desc = "A small, easily concealable handgun that uses 10mm auto rounds in 8-round magazines and is compatible \
- with suppressors."
- item = /obj/item/gun/ballistic/automatic/pistol
- cost = 7
- exclude_modes = list(/datum/game_mode/nuclear/clown_ops)
-
/datum/uplink_item/dangerous/bolt_action
name = "Surplus Rifle"
desc = "A horribly outdated bolt action weapon. You've got to be desperate to use this."
@@ -509,14 +517,6 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
cost = 2
include_modes = list(/datum/game_mode/nuclear)
-/datum/uplink_item/dangerous/revolver
- name = "Syndicate Revolver"
- desc = "A brutally simple Syndicate revolver that fires .357 Magnum rounds and has 7 chambers."
- item = /obj/item/gun/ballistic/revolver/syndie
- cost = 13
- surplus = 50
- exclude_modes = list(/datum/game_mode/nuclear/clown_ops)
-
/datum/uplink_item/dangerous/foamsmg
name = "Toy Submachine Gun"
desc = "A fully-loaded Donksoft bullpup submachine gun that fires riot grade darts with a 20-round magazine."
@@ -563,6 +563,12 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
cost = 13
surplus = 0
+/datum/uplink_item/dangerous/phantomthief
+ name = "Syndicate Mask"
+ desc = "A cheap plastic mask fitted with an adrenaline autoinjector, which can be used by simply tensing your muscles"
+ item = /obj/item/clothing/glasses/phantomthief/syndicate
+ cost = 2
+
/datum/uplink_item/stealthy_weapons/dart_pistol
name = "Dart Pistol"
desc = "A miniaturized version of a normal syringe gun. It is very quiet when fired and can fit into any \
@@ -1307,6 +1313,19 @@ datum/uplink_item/stealthy_weapons/taeclowndo_shoes
/datum/uplink_item/device_tools
category = "Devices and Tools"
+/datum/uplink_item/device_tools/emag
+ name = "Cryptographic Sequencer"
+ desc = "The cryptographic sequencer, electromagnetic card, or emag, is a small card that unlocks hidden functions \
+ in electronic devices, subverts intended functions, and easily breaks security mechanisms."
+ item = /obj/item/card/emag
+ cost = 6
+
+/datum/uplink_item/device_tools/emagrecharge
+ name = "Electromagnet Charging Device"
+ desc = "A small device intended for recharging Cryptographic Sequencers. Using it will add five extra charges to the Cryptographic Sequencer."
+ item = /obj/item/emagrecharge
+ cost = 2
+
/datum/uplink_item/device_tools/cutouts
name = "Adaptive Cardboard Cutouts"
desc = "These cardboard cutouts are coated with a thin material that prevents discoloration and makes the images on them appear more lifelike. \
@@ -1375,19 +1394,6 @@ datum/uplink_item/stealthy_weapons/taeclowndo_shoes
cost = 1
exclude_modes = list(/datum/game_mode/nuclear)
-/datum/uplink_item/device_tools/emag
- name = "Cryptographic Sequencer"
- desc = "The cryptographic sequencer, electromagnetic card, or emag, is a small card that unlocks hidden functions \
- in electronic devices, subverts intended functions, and easily breaks security mechanisms."
- item = /obj/item/card/emag
- cost = 6
-
-/datum/uplink_item/device_tools/emagrecharge
- name = "Electromagnet Charging Device"
- desc = "A small device intended for recharging Cryptographic Sequencers. Using it will add five extra charges to the Cryptographic Sequencer."
- item = /obj/item/emagrecharge
- cost = 2
-
/datum/uplink_item/device_tools/fakenucleardisk
name = "Decoy Nuclear Authentication Disk"
desc = "It's just a normal disk. Visually it's identical to the real deal, but it won't hold up under closer scrutiny by the Captain. \
diff --git a/code/modules/vending/wardrobes.dm b/code/modules/vending/wardrobes.dm
index 4c5bbd2734..e86c8521a6 100644
--- a/code/modules/vending/wardrobes.dm
+++ b/code/modules/vending/wardrobes.dm
@@ -129,6 +129,7 @@
/obj/item/clothing/head/soft/black = 3,
/obj/item/clothing/mask/bandana/skull = 2)
premium = list(/obj/item/radio/headset/headset_rob = 2) //Cit change
+ contraband = list(/obj/item/clothing/suit/hooded/techpriest = 2)
refill_canister = /obj/item/vending_refill/wardrobe/robo_wardrobe
/obj/item/vending_refill/wardrobe/robo_wardrobe
@@ -239,7 +240,8 @@
/obj/item/clothing/under/rank/chef = 2,
/obj/item/clothing/under/rank/chef/skirt = 2,
/obj/item/clothing/head/chefhat = 2,
- /obj/item/reagent_containers/rag = 3)
+ /obj/item/reagent_containers/rag = 3,
+ /obj/item/book/granter/crafting_recipe/cooking_sweets_101 = 2)
refill_canister = /obj/item/vending_refill/wardrobe/chef_wardrobe
/obj/item/vending_refill/wardrobe/chef_wardrobe
diff --git a/config/spaceRuinBlacklist.txt b/config/spaceRuinBlacklist.txt
index cba9a01e73..deafa47969 100644
--- a/config/spaceRuinBlacklist.txt
+++ b/config/spaceRuinBlacklist.txt
@@ -49,3 +49,4 @@
#_maps/RandomRuins/SpaceRuins/bigape.dmm
#_maps/RandomRuins/SpaceRuins/arcade.dmm
#_maps/RandomRuins/SpaceRuins/spacehermit.dmm
+#_maps/RandomRuins/SpaceRuins/advancedlab.dmm
diff --git a/html/changelogs/AutoChangeLog-pr-8660.yml b/html/changelogs/AutoChangeLog-pr-8660.yml
new file mode 100644
index 0000000000..710c4489ea
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8660.yml
@@ -0,0 +1,4 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - code_imp: "Changes some files to be better"
diff --git a/html/changelogs/AutoChangeLog-pr-8673.yml b/html/changelogs/AutoChangeLog-pr-8673.yml
new file mode 100644
index 0000000000..6ff2c7135c
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8673.yml
@@ -0,0 +1,4 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - balance: "As all things are not"
diff --git a/html/changelogs/AutoChangeLog-pr-8774.yml b/html/changelogs/AutoChangeLog-pr-8774.yml
new file mode 100644
index 0000000000..7ba01cc6aa
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8774.yml
@@ -0,0 +1,4 @@
+author: "Sishen1542"
+delete-after: True
+changes:
+ - bugfix: "Removed the human check for cult conversion of captain/chaplain minds."
diff --git a/html/changelogs/AutoChangeLog-pr-8900.yml b/html/changelogs/AutoChangeLog-pr-8900.yml
new file mode 100644
index 0000000000..cbb910c3d5
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8900.yml
@@ -0,0 +1,4 @@
+author: "Seris02"
+delete-after: True
+changes:
+ - rscadd: "Abductor Replication Lab ruin and advanced tools"
diff --git a/html/changelogs/AutoChangeLog-pr-8908.yml b/html/changelogs/AutoChangeLog-pr-8908.yml
new file mode 100644
index 0000000000..d9cbd5abed
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8908.yml
@@ -0,0 +1,5 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - balance: "Improved the zelus flask to be more viable for bottle smashing than the average barman's selection."
+ - code_imp: "Very slight bottle smashing code clean up, stupid const vars."
diff --git a/html/changelogs/AutoChangeLog-pr-8912.yml b/html/changelogs/AutoChangeLog-pr-8912.yml
new file mode 100644
index 0000000000..5d5a7c38fc
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8912.yml
@@ -0,0 +1,6 @@
+author: "Ghommie (original PRs by ShizCalev and bobbahbrown)"
+delete-after: True
+changes:
+ - rscadd: "Headsets now dynamically show in their description how to speak on any channels they can use when held or worn."
+ - code_imp: "Radio channels names and keys now use defines."
+ - tweak: "The head arrival announcement will now be broadcast to the supply for the quartermaster."
diff --git a/html/changelogs/AutoChangeLog-pr-8913.yml b/html/changelogs/AutoChangeLog-pr-8913.yml
new file mode 100644
index 0000000000..ccac6aef16
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8913.yml
@@ -0,0 +1,4 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - rscadd: "Added new chairs"
diff --git a/html/changelogs/AutoChangeLog-pr-8942.yml b/html/changelogs/AutoChangeLog-pr-8942.yml
new file mode 100644
index 0000000000..a1b80ba839
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8942.yml
@@ -0,0 +1,4 @@
+author: "Chayse"
+delete-after: True
+changes:
+ - tweak: "Changed the Warden's compact combat shotgun to instead be a regular combat shotgun with a foldable stock and penalties for being folded."
diff --git a/html/changelogs/AutoChangeLog-pr-8986.yml b/html/changelogs/AutoChangeLog-pr-8986.yml
new file mode 100644
index 0000000000..810631f5f5
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8986.yml
@@ -0,0 +1,6 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - rscadd: "reworked ninja's stealth mode. Increased invisibility, but engaging in combat, attacking or throwing things, bumping people will temporarily lower it."
+ - rscadd: "Ninja shoes are even stealthier."
+ - code_imp: "cleaned up some 2014 tier processing code horror."
diff --git a/html/changelogs/AutoChangeLog-pr-8995.yml b/html/changelogs/AutoChangeLog-pr-8995.yml
new file mode 100644
index 0000000000..76669d7821
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8995.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - rscadd: "When you're jogging, you will only slip on water if you have more than 20% staminaloss, for real this time."
diff --git a/html/changelogs/AutoChangeLog-pr-8996.yml b/html/changelogs/AutoChangeLog-pr-8996.yml
new file mode 100644
index 0000000000..7c631e3301
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8996.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - imageadd: "Different cuffs now come with different worn overlays instead of a generic one."
diff --git a/html/changelogs/AutoChangeLog-pr-8998.yml b/html/changelogs/AutoChangeLog-pr-8998.yml
new file mode 100644
index 0000000000..981e746fc9
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8998.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - bugfix: "High luminosity eyes can now be properly deactivated and won't illuminate your surroundings again until turned back on."
diff --git a/html/changelogs/AutoChangeLog-pr-8999.yml b/html/changelogs/AutoChangeLog-pr-8999.yml
new file mode 100644
index 0000000000..182e3a8409
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8999.yml
@@ -0,0 +1,4 @@
+author: "BurgerBB"
+delete-after: True
+changes:
+ - balance: "Chestbursters no longer give and remove your brain. They just disembowel and kill you now."
diff --git a/html/changelogs/AutoChangeLog-pr-9009.yml b/html/changelogs/AutoChangeLog-pr-9009.yml
new file mode 100644
index 0000000000..21cf0c8d85
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9009.yml
@@ -0,0 +1,4 @@
+author: "BurgerBB"
+delete-after: True
+changes:
+ - bugfix: "Fixes WarOps miscalculating players."
diff --git a/html/changelogs/AutoChangeLog-pr-9014.yml b/html/changelogs/AutoChangeLog-pr-9014.yml
new file mode 100644
index 0000000000..f217b64afd
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9014.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - bugfix: "Fixes freshly cloned people starting with undershirts. Fixes random characters possibly rolling with undergarments of the opposite gender (Doesn't affect preferences' freedom of choice)."
diff --git a/html/changelogs/AutoChangeLog-pr-9018.yml b/html/changelogs/AutoChangeLog-pr-9018.yml
new file mode 100644
index 0000000000..7acb63b426
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9018.yml
@@ -0,0 +1,12 @@
+author: "Ghommie (original PRs by XDTM, optimumtact, Nichlas0010 and monster860)"
+delete-after: True
+changes:
+ - rscadd: "Added Quantum Keycards, devices that can link to a quantum pad, and can be used on any other quantum pad to teleport to its linked pad.
+spellchecking: Renamed \"Bluespace Teleportation Tech\" tech node to \"Bluespace Travel\"."
+ - tweak: "Moved roasting sticks from the \"Bluespace Travel\" to \"Practical Bluespace\"."
+ - rscadd: "Spraying holy water on tiles will now prevent cult-based teleportation from using them as a destination point."
+ - tweak: "Quantum, wormhole and magic teleportation is no longer disrupted by bags of holding."
+ - bugfix: "You are now also blocked from teleporting IN to no-teleport areas, not just out of them."
+ - tweak: "Quantum teleportation now makes pretty rainbow sparks instead of the normal ones."
+ - bugfix: "Non-bluespace teleportation (spells etc.) no longer makes sparks."
+ - bugfix: "Fixed teleportation deleting mob spawners like golem shells and ashwalker eggs."
diff --git a/html/changelogs/AutoChangeLog-pr-9019.yml b/html/changelogs/AutoChangeLog-pr-9019.yml
new file mode 100644
index 0000000000..8006c134e3
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9019.yml
@@ -0,0 +1,6 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - balance: "MRE menu 3 has cuban nachos instead of a chili now."
+ - bugfix: "Removed the illustration overlay from MREs, looks pretty weird otherwise."
+ - rscadd: "MRE menu 4, vegetarian."
diff --git a/html/changelogs/AutoChangeLog-pr-9021.yml b/html/changelogs/AutoChangeLog-pr-9021.yml
new file mode 100644
index 0000000000..e8809f1d7e
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9021.yml
@@ -0,0 +1,4 @@
+author: "Ghommie (by Floyd / Qustinnus, Arathian)"
+delete-after: True
+changes:
+ - rscadd: "The robotocist now has robe to show his love for toasters"
diff --git a/html/changelogs/AutoChangeLog-pr-9022.yml b/html/changelogs/AutoChangeLog-pr-9022.yml
new file mode 100644
index 0000000000..4fb48506e4
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9022.yml
@@ -0,0 +1,4 @@
+author: "Ghommie (by nemvar)"
+delete-after: True
+changes:
+ - tweak: "Dwarfs are now more robust."
diff --git a/html/changelogs/AutoChangeLog-pr-9024.yml b/html/changelogs/AutoChangeLog-pr-9024.yml
new file mode 100644
index 0000000000..1d75959c79
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9024.yml
@@ -0,0 +1,4 @@
+author: "Ghommie (by Arkatos)"
+delete-after: True
+changes:
+ - bugfix: "Fixed an issue with a Lizardwine drink crafting, where a final product would contain unwated 100u of Ethanol."
diff --git a/html/changelogs/AutoChangeLog-pr-9030.yml b/html/changelogs/AutoChangeLog-pr-9030.yml
new file mode 100644
index 0000000000..94c797433a
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9030.yml
@@ -0,0 +1,4 @@
+author: "CameronWoof"
+delete-after: True
+changes:
+ - bugfix: "Attaching a beaker that contains water to an IV stand no longer causes a visual glitch"
diff --git a/html/changelogs/AutoChangeLog-pr-9033.yml b/html/changelogs/AutoChangeLog-pr-9033.yml
new file mode 100644
index 0000000000..3e69bc9486
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9033.yml
@@ -0,0 +1,4 @@
+author: "EgoSumStultus"
+delete-after: True
+changes:
+ - bugfix: "fixed magpistol magazine sprites"
diff --git a/html/changelogs/AutoChangeLog-pr-9036.yml b/html/changelogs/AutoChangeLog-pr-9036.yml
new file mode 100644
index 0000000000..afd2882fc3
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9036.yml
@@ -0,0 +1,5 @@
+author: "Linzolle"
+delete-after: True
+changes:
+ - rscadd: "shoes can have a different icon used for their item and mob icons"
+ - bugfix: "combat gloves plus having no mob icon"
diff --git a/html/changelogs/AutoChangeLog-pr-9040.yml b/html/changelogs/AutoChangeLog-pr-9040.yml
new file mode 100644
index 0000000000..33958a2ece
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9040.yml
@@ -0,0 +1,4 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - rscadd: "new books/cooking"
diff --git a/html/changelogs/AutoChangeLog-pr-9042.yml b/html/changelogs/AutoChangeLog-pr-9042.yml
new file mode 100644
index 0000000000..38c4006383
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9042.yml
@@ -0,0 +1,4 @@
+author: "EgoSumStultus"
+delete-after: True
+changes:
+ - rscadd: "Added the Femur Breaker"
diff --git a/html/changelogs/AutoChangeLog-pr-9043.yml b/html/changelogs/AutoChangeLog-pr-9043.yml
new file mode 100644
index 0000000000..14c9331e5b
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9043.yml
@@ -0,0 +1,7 @@
+author: "chef"
+delete-after: True
+changes:
+ - rscadd: "Added main hallway approach to monastery"
+ - rscadd: "Added Maintenance hallway approach, with some maint loot"
+ - tweak: "moved the docking arm for the white ship"
+ - tweak: "changed placement of some grills and windows"
diff --git a/html/changelogs/AutoChangeLog-pr-9044.yml b/html/changelogs/AutoChangeLog-pr-9044.yml
new file mode 100644
index 0000000000..6133ea45e9
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9044.yml
@@ -0,0 +1,7 @@
+author: "Original by Citinited, port by Sishen1542"
+delete-after: True
+changes:
+ - rscadd: "You can now use an airlock electronics on a locker to add a lock, and can screwdriver an unlocked locker to remove its lock."
+ - rscadd: "You can now remove the locks on broken or emagged lockers."
+ - tweak: "Removing the lock from a personal locker now wipes that locker's ID details."
+ - tweak: "Broken lockers have had their appearance changed."
diff --git a/html/changelogs/AutoChangeLog-pr-9045.yml b/html/changelogs/AutoChangeLog-pr-9045.yml
new file mode 100644
index 0000000000..8917707ae3
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9045.yml
@@ -0,0 +1,8 @@
+author: "CameronWoof"
+delete-after: True
+changes:
+ - tweak: "Fluid-producing sexual organs no longer start full"
+ - tweak: "Sexual organ fluid capacity decreased from 50 to 15"
+ - tweak: "Sexual organ production rate decreased from 5u to 0.035u per two seconds."
+ - tweak: "Sexual fluid decals no longer contain reagents"
+ - tweak: "Sexual fluids cannot by synthesized (e.g., by the Odysseus)"
diff --git a/html/changelogs/AutoChangeLog-pr-9046.yml b/html/changelogs/AutoChangeLog-pr-9046.yml
new file mode 100644
index 0000000000..24e7035a88
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9046.yml
@@ -0,0 +1,4 @@
+author: "Sishen1542"
+delete-after: True
+changes:
+ - tweak: "density = 0"
diff --git a/html/changelogs/AutoChangeLog-pr-9050.yml b/html/changelogs/AutoChangeLog-pr-9050.yml
new file mode 100644
index 0000000000..3b12a12f17
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9050.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - bugfix: "fixes a few bad touchs on combat mode pushing."
diff --git a/html/changelogs/AutoChangeLog-pr-9061.yml b/html/changelogs/AutoChangeLog-pr-9061.yml
new file mode 100644
index 0000000000..4fc9d10ba5
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9061.yml
@@ -0,0 +1,5 @@
+author: "deathride58"
+delete-after: True
+changes:
+ - tweak: "The femur breaker now uses `*scream` instead of forced speech. This means that the femur breaker will no longer spam deadchat with \"AAAAAAAAAHHHHHHHHHH!!\""
+ - tweak: "The femur breaker will now guarantee that the victim falls into crit, which will make it harder to perform torture scenes with it since the victim can just succumb."
diff --git a/html/changelogs/AutoChangeLog-pr-9064.yml b/html/changelogs/AutoChangeLog-pr-9064.yml
new file mode 100644
index 0000000000..6e775c1eb4
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9064.yml
@@ -0,0 +1,4 @@
+author: "Cebutris"
+delete-after: True
+changes:
+ - rscadd: "Hugs of the North Star! Get them from the arcades (if you're lucky) and hug your friends at INCREDIBLE hihg speeds!"
diff --git a/html/changelogs/AutoChangeLog-pr-9069.yml b/html/changelogs/AutoChangeLog-pr-9069.yml
new file mode 100644
index 0000000000..0439515dd3
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9069.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - bugfix: "Fixes clock cult Abscond scripture not dragging pulled mobs into Reebe. Also fixes blood cult tele runes teleporting you from the source turf to the source turf."
diff --git a/html/changelogs/AutoChangeLog-pr-9070.yml b/html/changelogs/AutoChangeLog-pr-9070.yml
new file mode 100644
index 0000000000..2013550dd2
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9070.yml
@@ -0,0 +1,5 @@
+author: "Linzolle"
+delete-after: True
+changes:
+ - rscadd: "inhands sprite for rainbow knife"
+ - tweak: "colour of highlight on the regular knife when held in the right hand"
diff --git a/html/changelogs/AutoChangeLog-pr-9071.yml b/html/changelogs/AutoChangeLog-pr-9071.yml
new file mode 100644
index 0000000000..40ae43867f
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9071.yml
@@ -0,0 +1,4 @@
+author: "Yakumo Chen"
+delete-after: True
+changes:
+ - balance: "Autocloning now requires tier 4 parts"
diff --git a/html/changelogs/AutoChangeLog-pr-9078.yml b/html/changelogs/AutoChangeLog-pr-9078.yml
new file mode 100644
index 0000000000..2e202ec43a
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9078.yml
@@ -0,0 +1,7 @@
+author: "kappa-sama"
+delete-after: True
+changes:
+ - rscdel: "Removed racism"
+ - tweak: "Teleporter calibration actually matters to all roundstart players"
+ - balance: "Slows down teleportation with the console/hub/teleporter setup if you care for your species."
+ - balance: "Dedicated non-humans can now get hulk without having to become human."
diff --git a/html/changelogs/AutoChangeLog-pr-9081.yml b/html/changelogs/AutoChangeLog-pr-9081.yml
new file mode 100644
index 0000000000..c66148e446
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9081.yml
@@ -0,0 +1,4 @@
+author: "BurgerBB"
+delete-after: True
+changes:
+ - balance: "Central Command informs you when a Meteor Storm is about to hit 5 to 10 minutes before it happens."
diff --git a/html/changelogs/AutoChangeLog-pr-9083.yml b/html/changelogs/AutoChangeLog-pr-9083.yml
new file mode 100644
index 0000000000..74b4d95ca3
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9083.yml
@@ -0,0 +1,4 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - rscadd: "strawbarries and such"
diff --git a/html/changelogs/AutoChangeLog-pr-9084.yml b/html/changelogs/AutoChangeLog-pr-9084.yml
new file mode 100644
index 0000000000..c2569d10b4
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9084.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - bugfix: "fixes clock cult mass recall."
diff --git a/html/changelogs/AutoChangeLog-pr-9085.yml b/html/changelogs/AutoChangeLog-pr-9085.yml
new file mode 100644
index 0000000000..92f5dc4cf8
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9085.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - bugfix: "Fixes underwear colors a bit."
diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi
index 29086033c8..e13ce10347 100644
Binary files a/icons/effects/effects.dmi and b/icons/effects/effects.dmi differ
diff --git a/icons/mob/alien.dmi b/icons/mob/alien.dmi
index c50351eef3..21238366f1 100644
Binary files a/icons/mob/alien.dmi and b/icons/mob/alien.dmi differ
diff --git a/icons/mob/alienqueen.dmi b/icons/mob/alienqueen.dmi
index 115bd17cb0..1176f43edd 100644
Binary files a/icons/mob/alienqueen.dmi and b/icons/mob/alienqueen.dmi differ
diff --git a/icons/mob/custom_w.dmi b/icons/mob/custom_w.dmi
index d974d0ca6c..c22ff7f159 100644
Binary files a/icons/mob/custom_w.dmi and b/icons/mob/custom_w.dmi differ
diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi
index 3ca7290a0f..ea13294dfe 100644
Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ
diff --git a/icons/mob/inhands/equipment/kitchen_lefthand.dmi b/icons/mob/inhands/equipment/kitchen_lefthand.dmi
index 277a7d8f05..93cd988cff 100644
Binary files a/icons/mob/inhands/equipment/kitchen_lefthand.dmi and b/icons/mob/inhands/equipment/kitchen_lefthand.dmi differ
diff --git a/icons/mob/inhands/equipment/kitchen_righthand.dmi b/icons/mob/inhands/equipment/kitchen_righthand.dmi
index 0103bd19b5..075b4c2033 100644
Binary files a/icons/mob/inhands/equipment/kitchen_righthand.dmi and b/icons/mob/inhands/equipment/kitchen_righthand.dmi differ
diff --git a/icons/mob/inhands/equipment/security_lefthand.dmi b/icons/mob/inhands/equipment/security_lefthand.dmi
index 6ccdfba3fc..01f8e2ca27 100644
Binary files a/icons/mob/inhands/equipment/security_lefthand.dmi and b/icons/mob/inhands/equipment/security_lefthand.dmi differ
diff --git a/icons/mob/inhands/equipment/security_righthand.dmi b/icons/mob/inhands/equipment/security_righthand.dmi
index e3f930a13e..d2126fe22f 100644
Binary files a/icons/mob/inhands/equipment/security_righthand.dmi and b/icons/mob/inhands/equipment/security_righthand.dmi differ
diff --git a/icons/mob/mob.dmi b/icons/mob/mob.dmi
index 1649706279..9beedfb417 100644
Binary files a/icons/mob/mob.dmi and b/icons/mob/mob.dmi differ
diff --git a/icons/mob/restraints.dmi b/icons/mob/restraints.dmi
new file mode 100644
index 0000000000..fa7eb43aa3
Binary files /dev/null and b/icons/mob/restraints.dmi differ
diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi
index 835f3448b4..2a777b9af5 100644
Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ
diff --git a/icons/obj/advancedtools.dmi b/icons/obj/advancedtools.dmi
new file mode 100644
index 0000000000..974202dd58
Binary files /dev/null and b/icons/obj/advancedtools.dmi differ
diff --git a/icons/obj/chairs.dmi b/icons/obj/chairs.dmi
index 3754ff052c..9e8fb64aba 100644
Binary files a/icons/obj/chairs.dmi and b/icons/obj/chairs.dmi differ
diff --git a/icons/obj/clothing/belt_overlays.dmi b/icons/obj/clothing/belt_overlays.dmi
index d7bf32d7b1..717937c034 100644
Binary files a/icons/obj/clothing/belt_overlays.dmi and b/icons/obj/clothing/belt_overlays.dmi differ
diff --git a/icons/obj/clothing/belts.dmi b/icons/obj/clothing/belts.dmi
index 506cdffe8e..5290c43073 100644
Binary files a/icons/obj/clothing/belts.dmi and b/icons/obj/clothing/belts.dmi differ
diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi
index 568adb69b3..4b7b67b39f 100644
Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ
diff --git a/icons/obj/custom.dmi b/icons/obj/custom.dmi
index eb4f5813c8..bf976060c7 100644
Binary files a/icons/obj/custom.dmi and b/icons/obj/custom.dmi differ
diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi
index 55c33e5e83..032b0c27ad 100644
Binary files a/icons/obj/device.dmi and b/icons/obj/device.dmi differ
diff --git a/icons/obj/femur_breaker.dmi b/icons/obj/femur_breaker.dmi
new file mode 100644
index 0000000000..4b36f4b2b8
Binary files /dev/null and b/icons/obj/femur_breaker.dmi differ
diff --git a/icons/obj/food/food.dmi b/icons/obj/food/food.dmi
index 92b5203f5d..6fda702cb3 100644
Binary files a/icons/obj/food/food.dmi and b/icons/obj/food/food.dmi differ
diff --git a/icons/obj/food/piecake.dmi b/icons/obj/food/piecake.dmi
index 57dda21757..df1e61c849 100644
Binary files a/icons/obj/food/piecake.dmi and b/icons/obj/food/piecake.dmi differ
diff --git a/icons/obj/guns/projectile.dmi b/icons/obj/guns/projectile.dmi
index 7d44d35f55..0ac8ccf566 100644
Binary files a/icons/obj/guns/projectile.dmi and b/icons/obj/guns/projectile.dmi differ
diff --git a/icons/obj/hydroponics/growing_fruits.dmi b/icons/obj/hydroponics/growing_fruits.dmi
index d309884be0..9b0bc9816b 100644
Binary files a/icons/obj/hydroponics/growing_fruits.dmi and b/icons/obj/hydroponics/growing_fruits.dmi differ
diff --git a/icons/obj/hydroponics/harvest.dmi b/icons/obj/hydroponics/harvest.dmi
index a1ab5b08e5..61070621c2 100644
Binary files a/icons/obj/hydroponics/harvest.dmi and b/icons/obj/hydroponics/harvest.dmi differ
diff --git a/icons/obj/hydroponics/seeds.dmi b/icons/obj/hydroponics/seeds.dmi
index 5a2088c332..30be27486b 100644
Binary files a/icons/obj/hydroponics/seeds.dmi and b/icons/obj/hydroponics/seeds.dmi differ
diff --git a/icons/obj/iv_drip.dmi b/icons/obj/iv_drip.dmi
index 016513245e..f530688da7 100644
Binary files a/icons/obj/iv_drip.dmi and b/icons/obj/iv_drip.dmi differ
diff --git a/icons/obj/library.dmi b/icons/obj/library.dmi
index 140f6a4d9e..f28b8be5c5 100644
Binary files a/icons/obj/library.dmi and b/icons/obj/library.dmi differ
diff --git a/icons/obj/storage.dmi b/icons/obj/storage.dmi
index 2a6ec3955a..066842f089 100644
Binary files a/icons/obj/storage.dmi and b/icons/obj/storage.dmi differ
diff --git a/modular_citadel/code/game/objects/items/handcuffs.dm b/modular_citadel/code/game/objects/items/handcuffs.dm
deleted file mode 100644
index ed5e8a191e..0000000000
--- a/modular_citadel/code/game/objects/items/handcuffs.dm
+++ /dev/null
@@ -1,5 +0,0 @@
-/obj/item/restraints/handcuffs/fake/kinky
- name = "kinky handcuffs"
- desc = "Fake handcuffs meant for erotic roleplay."
- icon = 'modular_citadel/icons/obj/items_and_weapons.dmi'
- icon_state = "handcuffgag"
diff --git a/modular_citadel/code/game/objects/items/stunsword.dm b/modular_citadel/code/game/objects/items/stunsword.dm
index 1262b0018a..7a5398f7d2 100644
--- a/modular_citadel/code/game/objects/items/stunsword.dm
+++ b/modular_citadel/code/game/objects/items/stunsword.dm
@@ -7,6 +7,14 @@
lefthand_file = 'modular_citadel/icons/mob/inhands/stunsword_left.dmi'
righthand_file = 'modular_citadel/icons/mob/inhands/stunsword_right.dmi'
+/obj/item/melee/baton/stunsword/get_belt_overlay()
+ if(istype(loc, /obj/item/storage/belt/sabre))
+ return mutable_appearance('icons/obj/clothing/belt_overlays.dmi', "stunsword")
+ return ..()
+
+/obj/item/melee/baton/stunsword/get_worn_belt_overlay(icon_file)
+ return mutable_appearance(icon_file, "-stunsword")
+
/obj/item/ssword_kit
name = "stunsword kit"
desc = "a modkit for making a stunbaton into a stunsword"
diff --git a/modular_citadel/code/modules/arousal/organs/breasts.dm b/modular_citadel/code/modules/arousal/organs/breasts.dm
index 1223f0b616..9771dd0897 100644
--- a/modular_citadel/code/modules/arousal/organs/breasts.dm
+++ b/modular_citadel/code/modules/arousal/organs/breasts.dm
@@ -15,10 +15,6 @@
can_climax = TRUE
fluid_transfer_factor = 0.5
-/obj/item/organ/genital/breasts/Initialize()
- . = ..()
- reagents.add_reagent(fluid_id, fluid_max_volume)
-
/obj/item/organ/genital/breasts/on_life()
if(QDELETED(src))
return
@@ -26,6 +22,14 @@
return
reagents.maximum_volume = fluid_max_volume
if(fluid_id && producing)
+ if(reagents.total_volume == 0) // Apparently, 0.015 gets rounded down to zero and no reagents are created if we don't start it with 0.1 in the tank.
+ fluid_rate = 0.1
+ else
+ fluid_rate = CUM_RATE
+ if(reagents.total_volume >= 5)
+ fluid_mult = 0.5
+ else
+ fluid_mult = 1
generate_milk()
/obj/item/organ/genital/breasts/proc/generate_milk()
diff --git a/modular_citadel/code/modules/arousal/organs/genitals.dm b/modular_citadel/code/modules/arousal/organs/genitals.dm
index 63d6834409..c4fffea355 100644
--- a/modular_citadel/code/modules/arousal/organs/genitals.dm
+++ b/modular_citadel/code/modules/arousal/organs/genitals.dm
@@ -10,7 +10,7 @@
var/fluid_transfer_factor = 0.0 //How much would a partner get in them if they climax using this?
var/size = 2 //can vary between num or text, just used in icon_state strings
var/fluid_id = null
- var/fluid_max_volume = 50
+ var/fluid_max_volume = 15
var/fluid_efficiency = 1
var/fluid_rate = 1
var/fluid_mult = 1
diff --git a/modular_citadel/code/modules/arousal/organs/testicles.dm b/modular_citadel/code/modules/arousal/organs/testicles.dm
index 1e6b4d62d4..f4ef4b5064 100644
--- a/modular_citadel/code/modules/arousal/organs/testicles.dm
+++ b/modular_citadel/code/modules/arousal/organs/testicles.dm
@@ -16,14 +16,18 @@
can_climax = TRUE
var/sent_full_message = TRUE //defaults to 1 since they're full to start
-/obj/item/organ/genital/testicles/Initialize()
- . = ..()
- reagents.add_reagent(fluid_id, fluid_max_volume)
-
/obj/item/organ/genital/testicles/on_life()
if(QDELETED(src))
return
if(reagents && producing)
+ if(reagents.total_volume == 0) // Apparently, 0.015 gets rounded down to zero and no reagents are created if we don't start it with 0.1 in the tank.
+ fluid_rate = 0.1
+ else
+ fluid_rate = CUM_RATE
+ if(reagents.total_volume >= 5)
+ fluid_mult = 0.5
+ else
+ fluid_mult = 1
generate_cum()
/obj/item/organ/genital/testicles/proc/generate_cum()
diff --git a/modular_citadel/code/modules/arousal/organs/womb.dm b/modular_citadel/code/modules/arousal/organs/womb.dm
index 686d9059a0..3f190b72ac 100644
--- a/modular_citadel/code/modules/arousal/organs/womb.dm
+++ b/modular_citadel/code/modules/arousal/organs/womb.dm
@@ -9,14 +9,18 @@
fluid_id = "femcum"
producing = TRUE
-/obj/item/organ/genital/womb/Initialize()
- . = ..()
- reagents.add_reagent(fluid_id, fluid_max_volume)
-
/obj/item/organ/genital/womb/on_life()
if(QDELETED(src))
return
if(reagents && producing)
+ if(reagents.total_volume == 0) // Apparently, 0.015 gets rounded down to zero and no reagents are created if we don't start it with 0.1 in the tank.
+ fluid_rate = 0.1
+ else
+ fluid_rate = CUM_RATE
+ if(reagents.total_volume >= 5)
+ fluid_mult = 0.5
+ else
+ fluid_mult = 1
generate_femcum()
/obj/item/organ/genital/womb/proc/generate_femcum()
diff --git a/modular_citadel/code/modules/client/loadout/__donator.dm b/modular_citadel/code/modules/client/loadout/__donator.dm
index e75a63f540..e3dbbbd490 100644
--- a/modular_citadel/code/modules/client/loadout/__donator.dm
+++ b/modular_citadel/code/modules/client/loadout/__donator.dm
@@ -226,7 +226,7 @@
/datum/gear/darksabre
name = "Dark Sabre"
category = SLOT_IN_BACKPACK
- path = /obj/item/toy/sword/darksabre
+ path = /obj/item/toy/darksabre
ckeywhitelist = list("inferno707")
datum/gear/darksabresheath
diff --git a/modular_citadel/code/modules/custom_loadout/custom_items.dm b/modular_citadel/code/modules/custom_loadout/custom_items.dm
index 0ce4fbdd78..ece673587f 100644
--- a/modular_citadel/code/modules/custom_loadout/custom_items.dm
+++ b/modular_citadel/code/modules/custom_loadout/custom_items.dm
@@ -49,7 +49,7 @@
item_color = "steele"
medaltype = "medal-silver"
-/obj/item/toy/sword/darksabre
+/obj/item/toy/darksabre
name = "Kiara's Sabre"
desc = "This blade looks as dangerous as its owner."
icon = 'icons/obj/custom.dmi'
@@ -58,9 +58,13 @@
item_state = "darksabre"
lefthand_file = 'modular_citadel/icons/mob/inhands/stunsword_left.dmi'
righthand_file = 'modular_citadel/icons/mob/inhands/stunsword_right.dmi'
- w_class = WEIGHT_CLASS_SMALL
attack_verb = list("attacked", "struck", "hit")
+/obj/item/toy/darksabre/get_belt_overlay()
+ return mutable_appearance('icons/obj/custom.dmi', "darksheath-darksabre")
+
+/obj/item/toy/darksabre/get_worn_belt_overlay(icon_file)
+ return mutable_appearance(icon_file, "darksheath-darksabre")
/obj/item/storage/belt/sabre/darksabre
name = "Ornate Sheathe"
@@ -69,32 +73,8 @@
alternate_worn_icon = 'icons/mob/custom_w.dmi'
icon_state = "darksheath"
item_state = "darksheath"
- w_class = WEIGHT_CLASS_BULKY
-
-/obj/item/storage/belt/sabre/darksabre/ComponentInitialize()
- . = ..()
- GET_COMPONENT(STR, /datum/component/storage)
- STR.max_items = 1
- STR.rustle_sound = FALSE
- STR.max_w_class = WEIGHT_CLASS_BULKY
- STR.can_hold = typecacheof(list(
- /obj/item/toy/sword/darksabre
- ))
-
-/obj/item/storage/belt/sabre/darksabre/update_icon()
- icon_state = "darksheath"
- item_state = "darksheath"
- if(contents.len)
- icon_state += "-darksabre"
- item_state += "-darksabre"
- if(loc && isliving(loc))
- var/mob/living/L = loc
- L.regenerate_icons()
- ..()
-
-/obj/item/storage/belt/sabre/darksabre/PopulateContents()
- new /obj/item/toy/sword/darksabre(src)
- update_icon()
+ fitting_swords = list(/obj/item/toy/darksabre)
+ starting_sword = /obj/item/toy/darksabre
/obj/item/clothing/suit/armor/vest/darkcarapace
name = "Dark Armor"
diff --git a/modular_citadel/code/modules/jobs/job_types/captain.dm b/modular_citadel/code/modules/jobs/job_types/captain.dm
index 674cd9d09e..7135e86507 100644
--- a/modular_citadel/code/modules/jobs/job_types/captain.dm
+++ b/modular_citadel/code/modules/jobs/job_types/captain.dm
@@ -4,7 +4,6 @@
/datum/job/hop
minimal_player_age = 20
- head_announce = list("Service")
exp_type_department = EXP_TYPE_SERVICE
access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_COURT, ACCESS_WEAPONS,
diff --git a/modular_citadel/code/modules/mob/cit_emotes.dm b/modular_citadel/code/modules/mob/cit_emotes.dm
index aff1739ae4..a34b7b0526 100644
--- a/modular_citadel/code/modules/mob/cit_emotes.dm
+++ b/modular_citadel/code/modules/mob/cit_emotes.dm
@@ -185,22 +185,6 @@
emote_type = EMOTE_AUDIBLE
restraint_check = TRUE
-
-
-/datum/emote/living/dab/run_emote(mob/living/user, params)
- if (ishuman(user))
- var/def_zone = BODY_ZONE_CHEST
- var/luck = (rand(1,100))
- if(luck >= 65)
- user.adjustStaminaLoss(70)
- if(luck >= 80)
- def_zone = pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM)
- user.apply_damage(20, BRUTE, def_zone)
- if(luck >= 95)
- user.adjustBrainLoss(100)
- . = ..()
-
-
/datum/emote/living/mothsqueak
key = "msqueak"
key_third_person = "lets out a tiny squeak"
diff --git a/modular_citadel/code/modules/mob/living/carbon/human/species.dm b/modular_citadel/code/modules/mob/living/carbon/human/species.dm
index 1e86da47e1..1c7456a8d8 100644
--- a/modular_citadel/code/modules/mob/living/carbon/human/species.dm
+++ b/modular_citadel/code/modules/mob/living/carbon/human/species.dm
@@ -80,21 +80,23 @@
else
target.Move(target_shove_turf, shove_dir)
if(get_turf(target) == target_oldturf)
- var/thoushallnotpass = FALSE
- for(var/obj/O in target_shove_turf)
- if(O.density)
- shove_blocked = TRUE
+ if(target_shove_turf.density)
+ shove_blocked = TRUE
+ else
+ var/thoushallnotpass = FALSE
+ for(var/obj/O in target_shove_turf)
if(istype(O, /obj/structure/table))
target_table = O
- else
+ else if(!O.CanPass(src, target_shove_turf))
+ shove_blocked = TRUE
thoushallnotpass = TRUE
- if(thoushallnotpass)
- target_table = null
+ if(thoushallnotpass)
+ target_table = null
if(target.is_shove_knockdown_blocked())
return
- if(shove_blocked)
+ if(shove_blocked || target_table)
var/directional_blocked = FALSE
if(shove_dir in GLOB.cardinals) //Directional checks to make sure that we're not shoving through a windoor or something like that
var/target_turf = get_turf(target)
diff --git a/modular_citadel/code/modules/reagents/reagents/cit_reagents.dm b/modular_citadel/code/modules/reagents/reagents/cit_reagents.dm
index ee8268128a..c4c1cff1e7 100644
--- a/modular_citadel/code/modules/reagents/reagents/cit_reagents.dm
+++ b/modular_citadel/code/modules/reagents/reagents/cit_reagents.dm
@@ -8,6 +8,7 @@
data = list("donor"=null,"viruses"=null,"donor_DNA"=null,"blood_type"=null,"resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null)
reagent_state = LIQUID
color = "#FFFFFF" // rgb: 255, 255, 255
+ can_synth = FALSE
nutriment_factor = 0.5 * REAGENTS_METABOLISM
/datum/reagent/consumable/semen/reaction_turf(turf/T, reac_volume)
@@ -19,7 +20,6 @@
var/obj/effect/decal/cleanable/semen/S = locate() in T
if(!S)
S = new(T)
- S.reagents.add_reagent("semen", reac_volume)
if(data["blood_DNA"])
S.add_blood_DNA(list(data["blood_DNA"] = data["blood_type"]))
@@ -50,6 +50,7 @@
data = list("donor"=null,"viruses"=null,"donor_DNA"=null,"blood_type"=null,"resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null)
reagent_state = LIQUID
color = "#AAAAAA77"
+ can_synth = FALSE
nutriment_factor = 0.5 * REAGENTS_METABOLISM
/obj/effect/decal/cleanable/femcum
@@ -82,7 +83,6 @@
var/obj/effect/decal/cleanable/femcum/S = locate() in T
if(!S)
S = new(T)
- S.reagents.add_reagent("femcum", reac_volume)
if(data["blood_DNA"])
S.add_blood_DNA(list(data["blood_DNA"] = data["blood_type"]))
diff --git a/modular_citadel/code/modules/vore/eating/belly_obj_vr.dm b/modular_citadel/code/modules/vore/eating/belly_obj_vr.dm
index 22085d520c..c4b2fbf5b1 100644
--- a/modular_citadel/code/modules/vore/eating/belly_obj_vr.dm
+++ b/modular_citadel/code/modules/vore/eating/belly_obj_vr.dm
@@ -47,7 +47,7 @@
var/tmp/next_process = 0 // Waiting for this SSbellies times_fired to process again.
var/tmp/list/items_preserved = list() // Stuff that wont digest so we shouldn't process it again.
var/tmp/next_emote = 0 // When we're supposed to print our next emote, as a belly controller tick #
- var/tmp/recent_sound = FALSE // Prevent audio spam
+ var/tmp/recent_sound // Prevent audio spam
var/tmp/last_hearcheck = 0
var/tmp/list/hearing_mobs
@@ -167,12 +167,13 @@
to_chat(owner,"[thing] slides into your [lowertext(name)].")
//Sound w/ antispam flag setting
- if(is_wet && !recent_sound)
- for(var/mob/M in get_hearers_in_view(2, get_turf(owner)))
- if(M.client && (M.client.prefs.cit_toggles & EATING_NOISES))
- var/sound/devourments = GLOB.vore_sounds[vore_sound]
- playsound(get_turf(owner),devourments,50,0,-5,0,ignore_walls = FALSE,channel=CHANNEL_PRED)
- recent_sound = TRUE
+ if(is_wet && (world.time > recent_sound))
+ var/turf/source = get_turf(owner)
+ var/sound/eating = GLOB.vore_sounds[vore_sound]
+ for(var/mob/living/M in get_hearers_in_view(3, source))
+ if(M.client && M.client.prefs.cit_toggles & EATING_NOISES)
+ SEND_SOUND(M, eating)
+ recent_sound = (world.time + 20 SECONDS)
//Messages if it's a mob
if(isliving(thing))
@@ -187,7 +188,7 @@
var/atom/destination = drop_location()
//Don't bother if we don't have contents
if(!contents.len)
- return 0
+ return FALSE
var/count = 0
for(var/thing in contents)
@@ -206,10 +207,10 @@
SEND_SIGNAL(L, COMSIG_ADD_MOOD_EVENT, "emptyprey", /datum/mood_event/emptyprey)
AM.forceMove(destination) // Move the belly contents into the same location as belly's owner.
count++
- for(var/mob/M in get_hearers_in_view(2, get_turf(owner)))
+ for(var/mob/living/M in get_hearers_in_view(2, get_turf(owner)))
if(M.client && (M.client.prefs.cit_toggles & EATING_NOISES))
var/sound/releasement = GLOB.release_sounds[release_sound]
- playsound(get_turf(owner),releasement,50,0,-5,0,ignore_walls = FALSE,channel=CHANNEL_PRED)
+ SEND_SOUND(M, releasement)
//Clean up our own business
items_preserved.Cut()
@@ -233,10 +234,10 @@
M.forceMove(drop_location()) // Move the belly contents into the same location as belly's owner.
items_preserved -= M
if(!silent)
- for(var/mob/H in get_hearers_in_view(2, get_turf(owner)))
+ for(var/mob/living/H in get_hearers_in_view(2, get_turf(owner)))
if(H.client && (H.client.prefs.cit_toggles & EATING_NOISES))
var/sound/releasement = GLOB.release_sounds[release_sound]
- playsound(get_turf(owner),releasement,50,0,-5,0,ignore_walls = FALSE,channel=CHANNEL_PRED)
+ SEND_SOUND(H, releasement)
if(istype(M,/mob/living))
var/mob/living/ML = M
@@ -285,10 +286,6 @@
SEND_SIGNAL(prey, COMSIG_CLEAR_MOOD_EVENT, "emptyprey", /datum/mood_event/emptyprey)
prey.forceMove(src)
- var/sound/preyloop = sound('sound/vore/prey/loop.ogg', repeat = TRUE)
-
- if(is_wet)
- prey.playsound_local(loc,preyloop,70,0, channel = CHANNEL_PREYLOOP)
owner.updateVRPanel()
@@ -317,10 +314,12 @@
M.cure_blind("belly_[REF(src)]")
target.nom_mob(content, target.owner)
if(!silent)
- for(var/mob/M in get_hearers_in_view(5, get_turf(owner)))
- if(M.client && (M.client.prefs.cit_toggles & EATING_NOISES))
- var/sound/devourments = GLOB.vore_sounds[vore_sound]
- playsound(get_turf(owner),devourments,50,0,-5,0,ignore_walls = FALSE,channel=CHANNEL_PRED)
+ var/turf/source = get_turf(owner)
+ var/sound/eating = GLOB.vore_sounds[vore_sound]
+ for(var/mob/living/M in get_hearers_in_view(3, source))
+ if(M.client && M.client.prefs.cit_toggles & EATING_NOISES)
+ SEND_SOUND(M, eating)
+
owner.updateVRPanel()
for(var/mob/living/M in contents)
M.updateVRPanel()
@@ -524,22 +523,25 @@
struggle_outer_message = "" + struggle_outer_message + ""
struggle_user_message = "" + struggle_user_message + ""
+ var/turf/source = get_turf(owner)
+ var/sound/struggle_snuggle = sound(get_sfx("struggle_sound"))
+ var/sound/struggle_rustle = sound(get_sfx("rustle"))
+
if(is_wet)
- for(var/mob/M in get_hearers_in_view(2, get_turf(owner)))
- if(M.client && (M.client.prefs.cit_toggles & EATING_NOISES))
- playsound(get_turf(owner),"struggle_sound",35,0,-5,1,ignore_walls = FALSE,channel=CHANNEL_PRED)
- R.stop_sound_channel(CHANNEL_PRED)
- var/sound/prey_struggle = sound(get_sfx("prey_struggle"))
- R.playsound_local(get_turf(R),prey_struggle,45,0)
+ for(var/mob/living/M in get_hearers_in_view(3, source))
+ if(M.client && M.client.prefs.cit_toggles & EATING_NOISES)
+ SEND_SOUND(M, struggle_snuggle)
else
- for(var/mob/M in get_hearers_in_view(2, get_turf(owner)))
- if(M.client && (M.client.prefs.cit_toggles & EATING_NOISES))
- playsound(get_turf(owner),"rustle",35,0,-5,1,ignore_walls = FALSE,channel=CHANNEL_PRED)
+ for(var/mob/living/M in get_hearers_in_view(3, source))
+ if(M.client && M.client.prefs.cit_toggles & EATING_NOISES)
+ SEND_SOUND(M, struggle_rustle)
- for(var/mob/M in get_hearers_in_view(3, get_turf(owner)))
+ var/list/watching = hearers(3, owner)
+ for(var/mob/living/M in watching)
if(M.client && (M.client.prefs.cit_toggles & EATING_NOISES)) //Might as well censor the normies here too.
M.show_message(struggle_outer_message, 1) // visible
+
to_chat(R,struggle_user_message)
if(escapable) //If the stomach has escapable enabled.
diff --git a/modular_citadel/code/modules/vore/eating/bellymodes_vr.dm b/modular_citadel/code/modules/vore/eating/bellymodes_vr.dm
index 6b6a3d30cc..9356c25f57 100644
--- a/modular_citadel/code/modules/vore/eating/bellymodes_vr.dm
+++ b/modular_citadel/code/modules/vore/eating/bellymodes_vr.dm
@@ -26,10 +26,13 @@
if(isbelly(M.loc))
if(world.time > M.next_preyloop)
if(is_wet)
+ if(!M.client)
+ continue
M.stop_sound_channel(CHANNEL_PREYLOOP) // sanity just in case
- var/sound/preyloop = sound('sound/vore/prey/loop.ogg', repeat = TRUE)
- M.playsound_local(get_turf(src),preyloop,80,0, channel = CHANNEL_PREYLOOP)
- M.next_preyloop = world.time + 52 SECONDS
+ if(M.client.prefs.cit_toggles & DIGESTION_NOISES)
+ var/sound/preyloop = sound('sound/vore/prey/loop.ogg', repeat = TRUE)
+ M.playsound_local(get_turf(src),preyloop, 80,0, channel = CHANNEL_PREYLOOP)
+ M.next_preyloop = (world.time + 52 SECONDS)
/////////////////////////// Exit Early ////////////////////////////
@@ -63,12 +66,12 @@
if(prob(25))
if((world.time - NORMIE_HEARCHECK) > last_hearcheck)
LAZYCLEARLIST(hearing_mobs)
- for(var/mob/H in get_hearers_in_view(3, source))
+ for(var/mob/living/H in get_hearers_in_view(3, source))
if(!H.client || !(H.client.prefs.cit_toggles & DIGESTION_NOISES))
continue
LAZYADD(hearing_mobs, H)
last_hearcheck = world.time
- for(var/mob/H in hearing_mobs)
+ for(var/mob/living/H in hearing_mobs)
if(!isbelly(H.loc))
H.playsound_local(source, null, 45, falloff = 0, S = pred_digest)
else if(H in contents)
@@ -100,12 +103,12 @@
owner.nutrition += 400 // so eating dead mobs gives you *something*.
if((world.time - NORMIE_HEARCHECK) > last_hearcheck)
LAZYCLEARLIST(hearing_mobs)
- for(var/mob/H in get_hearers_in_view(3, source))
+ for(var/mob/living/H in get_hearers_in_view(3, source))
if(!H.client || !(H.client.prefs.cit_toggles & DIGESTION_NOISES))
continue
LAZYADD(hearing_mobs, H)
last_hearcheck = world.time
- for(var/mob/H in hearing_mobs)
+ for(var/mob/living/H in hearing_mobs)
if(!isbelly(H.loc))
H.playsound_local(source, null, 45, falloff = 0, S = pred_death)
else if(H in contents)
@@ -135,12 +138,12 @@
if(prob(25))
if((world.time - NORMIE_HEARCHECK) > last_hearcheck)
LAZYCLEARLIST(hearing_mobs)
- for(var/mob/H in get_hearers_in_view(3, source))
+ for(var/mob/living/H in get_hearers_in_view(3, source))
if(!H.client || !(H.client.prefs.cit_toggles & DIGESTION_NOISES))
continue
LAZYADD(hearing_mobs, H)
last_hearcheck = world.time
- for(var/mob/H in hearing_mobs)
+ for(var/mob/living/H in hearing_mobs)
if(!isbelly(H.loc))
H.playsound_local(source, null, 45, falloff = 0, S = pred_digest)
else if(H in contents)
@@ -159,12 +162,12 @@
if(prob(35))
if((world.time - NORMIE_HEARCHECK) > last_hearcheck)
LAZYCLEARLIST(hearing_mobs)
- for(var/mob/H in get_hearers_in_view(3, source))
+ for(var/mob/living/H in get_hearers_in_view(3, source))
if(!H.client || !(H.client.prefs.cit_toggles & DIGESTION_NOISES))
continue
LAZYADD(hearing_mobs, H)
last_hearcheck = world.time
- for(var/mob/H in hearing_mobs)
+ for(var/mob/living/H in hearing_mobs)
if(!isbelly(H.loc))
H.playsound_local(source, null, 45, falloff = 0, S = pred_digest)
else if(H in contents)
@@ -179,12 +182,12 @@
if(prob(10))//Less often than gurgles. People might leave this on forever.
if((world.time - NORMIE_HEARCHECK) > last_hearcheck)
LAZYCLEARLIST(hearing_mobs)
- for(var/mob/H in get_hearers_in_view(3, source))
+ for(var/mob/living/H in get_hearers_in_view(3, source))
if(!H.client || !(H.client.prefs.cit_toggles & DIGESTION_NOISES))
continue
LAZYADD(hearing_mobs, H)
last_hearcheck = world.time
- for(var/mob/H in hearing_mobs)
+ for(var/mob/living/H in hearing_mobs)
if(!isbelly(H.loc))
H.playsound_local(source, null, 45, falloff = 0, S = pred_digest)
else if(H in contents)
@@ -221,12 +224,12 @@
if(prob(55)) //if you're hearing this, you're a vore ho anyway.
if((world.time - NORMIE_HEARCHECK) > last_hearcheck)
LAZYCLEARLIST(hearing_mobs)
- for(var/mob/H in get_hearers_in_view(3, source))
+ for(var/mob/living/H in get_hearers_in_view(3, source))
if(!H.client || !(H.client.prefs.cit_toggles & DIGESTION_NOISES))
continue
LAZYADD(hearing_mobs, H)
last_hearcheck = world.time
- for(var/mob/H in hearing_mobs)
+ for(var/mob/living/H in hearing_mobs)
if(!isbelly(H.loc))
H.playsound_local(source, null, 45, falloff = 0, S = pred_digest)
else if(H in contents)
@@ -254,12 +257,12 @@
M.visible_message("You watch as [owner]'s guts loudly rumble as it finishes off a meal.")
if((world.time - NORMIE_HEARCHECK) > last_hearcheck)
LAZYCLEARLIST(hearing_mobs)
- for(var/mob/H in get_hearers_in_view(3, source))
+ for(var/mob/living/H in get_hearers_in_view(3, source))
if(!H.client || !(H.client.prefs.cit_toggles & DIGESTION_NOISES))
continue
LAZYADD(hearing_mobs, H)
last_hearcheck = world.time
- for(var/mob/H in hearing_mobs)
+ for(var/mob/living/H in hearing_mobs)
if(!isbelly(H.loc))
H.playsound_local(source, null, 45, falloff = 0, S = pred_death)
else if(H in contents)
diff --git a/modular_citadel/code/modules/vore/eating/living_vr.dm b/modular_citadel/code/modules/vore/eating/living_vr.dm
index a8a77895c8..d9adde04d1 100644
--- a/modular_citadel/code/modules/vore/eating/living_vr.dm
+++ b/modular_citadel/code/modules/vore/eating/living_vr.dm
@@ -60,18 +60,6 @@
B.can_taste = 1
return TRUE
-/*
-// Hide vore organs in contents
-//
-/datum/proc/view_variables_filter_contents(list/L)
- return 0
-
-/mob/living/view_variables_filter_contents(list/L)
- . = ..()
- var/len_before = L.len
- L -= vore_organs
- . += len_before - L.len*/
-
// Handle being clicked, perhaps with something to devour
//
@@ -121,21 +109,12 @@
/mob/living/proc/feed_grabbed_to_self(var/mob/living/user, var/mob/living/prey)
var/belly = user.vore_selected
return perform_the_nom(user, prey, user, belly)
-/*
-/mob/living/proc/eat_held_mob(var/mob/living/user, var/mob/living/prey, var/mob/living/pred)
- var/belly
- if(user != pred)
- belly = input("Choose Belly") in pred.vore_organs
- else
- belly = pred.vore_selected
- return perform_the_nom(user, prey, pred, belly)*/
/mob/living/proc/feed_self_to_grabbed(var/mob/living/user, var/mob/living/pred)
var/belly = input("Choose Belly") in pred.vore_organs
return perform_the_nom(user, user, pred, belly)
/mob/living/proc/feed_grabbed_to_other(var/mob/living/user, var/mob/living/prey, var/mob/living/pred)
-// return//disabled until I can make that toggle work
var/belly = input("Choose Belly") in pred.vore_organs
return perform_the_nom(user, prey, pred, belly)
@@ -182,9 +161,13 @@
// If we got this far, nom successful! Announce it!
user.visible_message(success_msg)
- for(var/mob/M in get_hearers_in_view(5, get_turf(user)))
+
+ // incredibly contentious eating noises time
+ var/turf/source = get_turf(user)
+ var/sound/eating = GLOB.vore_sounds[belly.vore_sound]
+ for(var/mob/living/M in get_hearers_in_view(3, source))
if(M.client && M.client.prefs.cit_toggles & EATING_NOISES)
- playsound(get_turf(user),"[belly.vore_sound]",50,0,-5,0,ignore_walls = FALSE,channel=CHANNEL_PRED)
+ SEND_SOUND(M, eating)
// Actually shove prey into the belly.
belly.nom_mob(prey, user)
@@ -214,41 +197,7 @@
//
//End vore code.
-/*
- //Handle case: /obj/item/holder
- if(/obj/item/holder/micro)
- var/obj/item/holder/H = I
- if(!isliving(user)) return 0 // Return 0 to continue upper procs
- var/mob/living/attacker = user // Typecast to living
-
- if (is_vore_predator(src))
- for (var/mob/living/M in H.contents)
- attacker.eat_held_mob(attacker, M, src)
- return 1 //Return 1 to exit upper procs
- else
- log_attack("[attacker] attempted to feed [H.contents] to [src] ([src.type]) but it failed.")
-
- // I just can't imagine this not being complained about
- //Handle case: /obj/item/radio/beacon
- if(/obj/item/radio/beacon)
- var/confirm = alert(user, "[src == user ? "Eat the beacon?" : "Feed the beacon to [src]?"]", "Confirmation", "Yes!", "Cancel")
- if(confirm == "Yes!")
- var/bellychoice = input("Which belly?","Select A Belly") in src.vore_organs
- var/datum/belly/B = src.vore_organs[bellychoice]
- src.visible_message("[user] is trying to stuff a beacon into [src]'s [bellychoice]!","[user] is trying to stuff a beacon into you!")
- if(do_after(user,30,src))
- user.drop_item()
- I.loc = src
- B.internal_contents += I
- src.visible_message("[src] is fed the beacon!","You're fed the beacon!")
- playsound(get_turf(src), B.vore_sound,50,0,-6,0)
- return 1
- else
- return 1 //You don't get to hit someone 'later'
-
- return 0
-*/
//
// Our custom resist catches for /mob/living
@@ -272,7 +221,7 @@
if(isbelly(loc))
src.stop_sound_channel(CHANNEL_PREYLOOP) // sanity just in case
var/sound/preyloop = sound('sound/vore/prey/loop.ogg', repeat = TRUE)
- src.playsound_local(get_turf(src),preyloop,80,0, channel = CHANNEL_PREYLOOP)
+ SEND_SOUND(src, preyloop)
else
to_chat(src, "You aren't inside anything, you clod.")
diff --git a/modular_citadel/code/modules/vore/eating/vorepanel_vr.dm b/modular_citadel/code/modules/vore/eating/vorepanel_vr.dm
index 6f484e7a51..ae7da895a6 100644
--- a/modular_citadel/code/modules/vore/eating/vorepanel_vr.dm
+++ b/modular_citadel/code/modules/vore/eating/vorepanel_vr.dm
@@ -57,7 +57,7 @@
/datum/vore_look/proc/gen_vui(var/mob/living/user)
var/dat
dat += "Remember to toggle the vore mode, it's to the left of your combat toggle. Open mouth means you're voracious!
"
- dat += "Remember that your prey is blind, use audible mode subtle messages to communicate to them with posts!
"
+ dat += "Remember that the prey is blind, use audible mode subtle messages to communicate to them with posts!
"
dat += "
"
var/atom/userloc = user.loc
if (isbelly(userloc))
@@ -554,7 +554,7 @@
if(href_list["b_releasesoundtest"])
var/sound/releasetest = GLOB.release_sounds[selected.release_sound]
if(releasetest)
- user << releasetest
+ SEND_SOUND(user, releasetest)
if(href_list["b_sound"])
var/choice = input(user,"Currently set to [selected.vore_sound]","Select Sound") as null|anything in GLOB.vore_sounds
@@ -567,7 +567,7 @@
if(href_list["b_soundtest"])
var/sound/voretest = GLOB.vore_sounds[selected.vore_sound]
if(voretest)
- user << voretest
+ SEND_SOUND(user, voretest)
if(href_list["b_tastes"])
selected.can_taste = !selected.can_taste
diff --git a/modular_citadel/icons/mob/muzzled_helmet.dmi b/modular_citadel/icons/mob/muzzled_helmet.dmi
index e321f8ae47..a318f394f8 100644
Binary files a/modular_citadel/icons/mob/muzzled_helmet.dmi and b/modular_citadel/icons/mob/muzzled_helmet.dmi differ
diff --git a/modular_citadel/icons/obj/food/cake.dmi b/modular_citadel/icons/obj/food/cake.dmi
deleted file mode 100644
index 840bfe714d..0000000000
Binary files a/modular_citadel/icons/obj/food/cake.dmi and /dev/null differ
diff --git a/modular_citadel/icons/obj/guns/cit_guns.dmi b/modular_citadel/icons/obj/guns/cit_guns.dmi
index cec9b076aa..bd48d8edbd 100644
Binary files a/modular_citadel/icons/obj/guns/cit_guns.dmi and b/modular_citadel/icons/obj/guns/cit_guns.dmi differ
diff --git a/sound/effects/femur_breaker.ogg b/sound/effects/femur_breaker.ogg
new file mode 100644
index 0000000000..140dc0477e
Binary files /dev/null and b/sound/effects/femur_breaker.ogg differ
diff --git a/tgstation.dme b/tgstation.dme
index aabcad82f6..e0c6f708d4 100755
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -862,6 +862,7 @@
#include "code\game\objects\items\devices\pipe_painter.dm"
#include "code\game\objects\items\devices\powersink.dm"
#include "code\game\objects\items\devices\pressureplates.dm"
+#include "code\game\objects\items\devices\quantum_keycard.dm"
#include "code\game\objects\items\devices\reverse_bear_trap.dm"
#include "code\game\objects\items\devices\scanners.dm"
#include "code\game\objects\items\devices\sensor_device.dm"
@@ -969,6 +970,7 @@
#include "code\game\objects\structures\electricchair.dm"
#include "code\game\objects\structures\extinguisher.dm"
#include "code\game\objects\structures\false_walls.dm"
+#include "code\game\objects\structures\femur_breaker.dm"
#include "code\game\objects\structures\fence.dm"
#include "code\game\objects\structures\fireaxe.dm"
#include "code\game\objects\structures\fireplace.dm"
@@ -2905,7 +2907,6 @@
#include "modular_citadel\code\game\objects\effects\temporary_visuals\projectiles\tracer.dm"
#include "modular_citadel\code\game\objects\items\balls.dm"
#include "modular_citadel\code\game\objects\items\boombox.dm"
-#include "modular_citadel\code\game\objects\items\handcuffs.dm"
#include "modular_citadel\code\game\objects\items\holy_weapons.dm"
#include "modular_citadel\code\game\objects\items\honk.dm"
#include "modular_citadel\code\game\objects\items\meat.dm"
@@ -2947,7 +2948,6 @@
#include "modular_citadel\code\modules\arousal\toys\dildos.dm"
#include "modular_citadel\code\modules\awaymissions\citadel_ghostrole_spawners.dm"
#include "modular_citadel\code\modules\cargo\console.dm"
-#include "modular_citadel\code\modules\cargo\packs.dm"
#include "modular_citadel\code\modules\client\client_defines.dm"
#include "modular_citadel\code\modules\client\client_procs.dm"
#include "modular_citadel\code\modules\client\preferences.dm"
@@ -2981,7 +2981,6 @@
#include "modular_citadel\code\modules\clothing\under\trek_under.dm"
#include "modular_citadel\code\modules\clothing\under\turtlenecks.dm"
#include "modular_citadel\code\modules\clothing\under\under.dm"
-#include "modular_citadel\code\modules\crafting\recipes.dm"
#include "modular_citadel\code\modules\custom_loadout\custom_items.dm"
#include "modular_citadel\code\modules\custom_loadout\load_to_mob.dm"
#include "modular_citadel\code\modules\custom_loadout\read_from_file.dm"
@@ -3006,7 +3005,6 @@
#include "modular_citadel\code\modules\mentor\mentorhelp.dm"
#include "modular_citadel\code\modules\mentor\mentorpm.dm"
#include "modular_citadel\code\modules\mentor\mentorsay.dm"
-#include "modular_citadel\code\modules\mining\mine_items.dm"
#include "modular_citadel\code\modules\mining\mining_ruins.dm"
#include "modular_citadel\code\modules\mob\cit_emotes.dm"
#include "modular_citadel\code\modules\mob\mob.dm"
@@ -3064,7 +3062,6 @@
#include "modular_citadel\code\modules\research\designs\xenobio_designs.dm"
#include "modular_citadel\code\modules\research\designs\weapon_designs\weapon_designs.dm"
#include "modular_citadel\code\modules\research\techweb\_techweb.dm"
-#include "modular_citadel\code\modules\research\techweb\all_nodes.dm"
#include "modular_citadel\code\modules\research\xenobiology\xenobio_camera.dm"
#include "modular_citadel\code\modules\vehicles\secway.dm"
#include "modular_citadel\code\modules\vore\hook-defs_vr.dm"