diff --git a/_maps/RandomRuins/AnywhereRuins/fountain_hall.dmm b/_maps/RandomRuins/AnywhereRuins/fountain_hall.dmm
index bddadc7b0c..f1b0582ec3 100644
--- a/_maps/RandomRuins/AnywhereRuins/fountain_hall.dmm
+++ b/_maps/RandomRuins/AnywhereRuins/fountain_hall.dmm
@@ -2,156 +2,172 @@
"a" = (
/turf/template_noop,
/area/template_noop)
-"b" = (
-/turf/closed/wall/mineral/cult,
-/area/ruin/unpowered)
"c" = (
/obj/structure/healingfountain,
-/turf/open/floor/engine/cult,
+/turf/open/floor/carpet/purple,
/area/ruin/unpowered)
"d" = (
/obj/structure/fluff/divine/conduit,
-/turf/open/floor/engine/cult,
+/turf/open/floor/mineral/plasma,
/area/ruin/unpowered)
"e" = (
/obj/structure/sacrificealtar,
-/turf/open/floor/engine/cult,
+/turf/open/floor/carpet/purple,
/area/ruin/unpowered)
"f" = (
-/turf/open/floor/engine/cult,
+/mob/living/simple_animal/butterfly,
+/turf/open/floor/carpet/purple,
/area/ruin/unpowered)
"g" = (
/mob/living/simple_animal/butterfly,
-/turf/open/floor/engine/cult,
+/turf/open/floor/carpet/red,
/area/ruin/unpowered)
"h" = (
/obj/structure/fans/tiny/invisible,
-/turf/open/floor/engine/cult,
+/turf/open/floor/carpet/red,
+/area/ruin/unpowered)
+"u" = (
+/turf/open/floor/carpet/purple,
+/area/ruin/unpowered)
+"G" = (
+/turf/closed/wall/mineral/cult{
+ sheet_amount = 0
+ },
+/area/ruin/unpowered)
+"J" = (
+/mob/living/simple_animal/butterfly,
+/turf/open/floor/carpet/royalblack,
+/area/ruin/unpowered)
+"T" = (
+/turf/open/floor/carpet/royalblack,
+/area/ruin/unpowered)
+"U" = (
+/turf/open/floor/carpet/red,
/area/ruin/unpowered)
(1,1,1) = {"
a
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
+G
+G
+G
+G
+G
+G
+G
+G
+G
+G
+G
+G
+G
+G
+G
"}
(2,1,1) = {"
a
-b
+G
d
-f
-f
+U
+T
+T
+T
+J
+T
+T
+T
+T
+T
+T
d
-f
-f
-d
-f
-f
-d
-f
-f
-d
-b
+G
"}
(3,1,1) = {"
-b
-b
+G
+G
e
g
-f
-f
+U
+d
g
-f
-f
-f
-f
-g
-f
-g
-f
-b
+U
+d
+U
+U
+d
+U
+U
+u
+G
"}
(4,1,1) = {"
-b
+G
c
f
-f
-f
-f
-f
-f
-f
-f
-f
-f
-f
-f
-f
+U
+T
+u
+T
+T
+u
+T
+T
+u
+T
+T
+T
h
"}
(5,1,1) = {"
-b
-b
+G
+G
e
-f
-f
-f
-f
g
-f
-f
-f
-f
-f
-f
-f
-b
+U
+d
+g
+U
+d
+U
+U
+d
+U
+U
+u
+G
"}
(6,1,1) = {"
a
-b
+G
d
-g
-f
+U
+T
+T
+T
+J
+T
+T
+T
+T
+T
+T
d
-f
-f
-d
-f
-f
-d
-f
-g
-d
-b
+G
"}
(7,1,1) = {"
a
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
+G
+G
+G
+G
+G
+G
+G
+G
+G
+G
+G
+G
+G
+G
+G
"}
diff --git a/_maps/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm b/_maps/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm
index a43e6129b7..7e9ce9db68 100644
--- a/_maps/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm
+++ b/_maps/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm
@@ -42,6 +42,10 @@
"ak" = (
/obj/structure/toilet,
/obj/effect/turf_decal/sand,
+/obj/item/reagent_containers/food/drinks/beer/light{
+ pixel_x = 9
+ },
+/obj/effect/decal/cleanable/vomit/old,
/turf/open/floor/plating,
/area/ruin/powered/beach)
"al" = (
@@ -191,7 +195,9 @@
/turf/open/floor/plasteel,
/area/ruin/powered/beach)
"aM" = (
-/obj/structure/reagent_dispensers/beerkeg,
+/obj/structure/reagent_dispensers/beerkeg{
+ reagent_id = /datum/reagent/consumable/ethanol/beer/light
+ },
/turf/open/floor/wood,
/area/ruin/powered/beach)
"aN" = (
@@ -371,7 +377,7 @@
/turf/open/floor/plating/beach/sand,
/area/ruin/powered/beach)
"bP" = (
-/obj/item/reagent_containers/food/drinks/beer,
+/obj/item/reagent_containers/food/drinks/beer/light,
/turf/open/floor/plating/beach/sand,
/area/ruin/powered/beach)
"bQ" = (
@@ -463,6 +469,7 @@
/obj/item/storage/box/drinkingglasses,
/obj/item/storage/box/beakers,
/obj/item/storage/box/donkpockets,
+/obj/item/soap,
/turf/open/floor/plating,
/area/ruin/powered/beach)
"hY" = (
@@ -537,6 +544,14 @@
},
/turf/open/floor/pod/light,
/area/ruin/powered/beach)
+"rV" = (
+/obj/effect/turf_decal/sand,
+/obj/item/reagent_containers/food/drinks/beer/light{
+ pixel_y = -3;
+ pixel_x = -9
+ },
+/turf/open/floor/plating,
+/area/ruin/powered/beach)
"sy" = (
/obj/effect/turf_decal/caution{
dir = 4
@@ -590,6 +605,11 @@
/obj/effect/turf_decal/sand,
/turf/open/floor/pod/light,
/area/ruin/powered/beach)
+"Gu" = (
+/obj/structure/table/wood,
+/obj/item/reagent_containers/food/drinks/beer/light,
+/turf/open/floor/wood,
+/area/ruin/powered/beach)
"HC" = (
/obj/structure/rack,
/obj/item/clothing/shoes/sandal,
@@ -964,7 +984,7 @@ ar
ar
ar
ar
-ar
+bP
ar
bR
bT
@@ -984,7 +1004,7 @@ as
aw
aC
aC
-aP
+Gu
aW
aK
Ga
@@ -1108,7 +1128,7 @@ aa
aa
bW
ak
-au
+rV
aj
aE
aC
diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_alien_nest.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_alien_nest.dmm
index a361fd59c0..6feb378515 100644
--- a/_maps/RandomRuins/LavaRuins/lavaland_surface_alien_nest.dmm
+++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_alien_nest.dmm
@@ -219,6 +219,7 @@
/obj/structure/alien/weeds,
/obj/effect/decal/cleanable/blood/gibs,
/mob/living/simple_animal/hostile/alien/drone,
+/obj/structure/alien/weeds/node,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/ruin/unpowered/xenonest)
"aZ" = (
@@ -535,6 +536,11 @@
/obj/effect/mob_spawn/alien/corpse/humanoid/queen,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/ruin/unpowered/xenonest)
+"wA" = (
+/obj/structure/alien/weeds,
+/obj/structure/alien/weeds/node,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/xenonest)
"yf" = (
/obj/structure/alien/weeds/node,
/mob/living/simple_animal/hostile/alien/sentinel,
@@ -551,6 +557,12 @@
/obj/effect/mob_spawn/alien/corpse/humanoid/drone,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/ruin/unpowered/xenonest)
+"QG" = (
+/obj/structure/alien/weeds,
+/obj/structure/bed/nest,
+/obj/structure/alien/weeds/node,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/xenonest)
"Uh" = (
/obj/structure/alien/weeds,
/obj/item/xenos_claw,
@@ -683,7 +695,7 @@ ac
ac
aj
ac
-am
+QG
ac
ac
ac
@@ -800,7 +812,7 @@ ac
ac
ac
ac
-ag
+wA
ag
ag
ar
@@ -884,7 +896,7 @@ aa
(7,1,1) = {"
ab
ac
-ag
+wA
ag
ag
ag
@@ -917,7 +929,7 @@ ac
ac
ZT
ac
-ag
+wA
ag
ac
ab
@@ -1349,7 +1361,7 @@ ar
lG
ag
ag
-ag
+wA
ad
ag
ag
@@ -1555,7 +1567,7 @@ ag
ac
aF
ag
-ag
+ar
ag
ag
ar
@@ -1603,7 +1615,7 @@ ao
ah
ac
ag
-ag
+wA
ag
ag
pE
@@ -1742,7 +1754,7 @@ ag
ag
ag
ag
-ac
+aw
ar
ag
bD
@@ -1791,9 +1803,9 @@ ac
ac
ac
ac
+wA
ag
-ag
-ac
+aw
ar
ag
bD
@@ -1828,7 +1840,7 @@ ac
ac
ag
Uh
-ag
+wA
aZ
be
bo
diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_biodome_winter.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_biodome_winter.dmm
index 0229068235..c7ae4c6eb4 100644
--- a/_maps/RandomRuins/LavaRuins/lavaland_surface_biodome_winter.dmm
+++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_biodome_winter.dmm
@@ -203,6 +203,12 @@
/area/ruin/powered/snow_biodome)
"aR" = (
/obj/structure/flora/tree/pine/xmas,
+/obj/item/a_gift{
+ pixel_y = -5
+ },
+/obj/item/a_gift{
+ pixel_x = 6
+ },
/turf/open/floor/plating/asteroid/snow{
initial_gas_mix = "o2=22;n2=82;TEMP=180"
},
@@ -295,6 +301,12 @@
},
/turf/open/floor/pod/dark,
/area/ruin/powered/snow_biodome)
+"gy" = (
+/obj/item/toy/snowball,
+/turf/open/floor/plating/asteroid/snow{
+ initial_gas_mix = "o2=22;n2=82;TEMP=180"
+ },
+/area/ruin/powered/snow_biodome)
"gz" = (
/obj/structure/chair/stool,
/turf/open/floor/pod/dark,
@@ -316,6 +328,13 @@
},
/turf/open/floor/pod/dark,
/area/ruin/powered/snow_biodome)
+"rl" = (
+/obj/structure/flora/bush,
+/obj/item/toy/snowball,
+/turf/open/floor/plating/asteroid/snow{
+ initial_gas_mix = "o2=22;n2=82;TEMP=180"
+ },
+/area/ruin/powered/snow_biodome)
"tb" = (
/obj/effect/mapping_helpers/no_lava,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
@@ -361,6 +380,11 @@
/obj/structure/closet/secure_closet/freezer/fridge,
/turf/open/floor/pod/dark,
/area/ruin/powered/snow_biodome)
+"IQ" = (
+/obj/structure/table/wood,
+/obj/item/reagent_containers/food/drinks/mug,
+/turf/open/floor/wood,
+/area/ruin/powered/snow_biodome)
"JZ" = (
/obj/structure/table,
/obj/machinery/microwave,
@@ -380,6 +404,7 @@
/area/ruin/powered/snow_biodome)
"Oj" = (
/obj/structure/table,
+/obj/item/reagent_containers/food/drinks/mug,
/turf/open/floor/pod/dark,
/area/ruin/powered/snow_biodome)
"PD" = (
@@ -407,6 +432,7 @@
"QK" = (
/obj/structure/table,
/obj/item/storage/fancy/cigarettes/cigpack_carp,
+/obj/item/reagent_containers/food/drinks/mug,
/turf/open/floor/pod/dark,
/area/ruin/powered/snow_biodome)
"QN" = (
@@ -417,6 +443,13 @@
/obj/effect/decal/cleanable/oil,
/turf/open/floor/pod/dark,
/area/ruin/powered/snow_biodome)
+"SL" = (
+/obj/structure/flora/grass/both,
+/obj/item/toy/snowball,
+/turf/open/floor/plating/asteroid/snow{
+ initial_gas_mix = "o2=22;n2=82;TEMP=180"
+ },
+/area/ruin/powered/snow_biodome)
"Ub" = (
/obj/structure/filingcabinet,
/turf/open/floor/pod/dark,
@@ -577,7 +610,7 @@ aB
ak
ak
ak
-aI
+rl
by
ak
ak
@@ -740,7 +773,7 @@ aI
az
ak
ak
-ak
+gy
ak
ak
aI
@@ -916,7 +949,7 @@ Wg
ag
ah
as
-aw
+IQ
aA
aA
at
@@ -924,7 +957,7 @@ aM
aP
ak
ak
-aQ
+SL
ak
ak
az
@@ -1077,7 +1110,7 @@ Wg
an
Wg
ay
-ak
+gy
ak
ak
ak
@@ -1114,6 +1147,7 @@ aI
ak
ap
ak
+gy
ak
ak
ak
@@ -1121,8 +1155,7 @@ ak
ak
ak
ak
-ak
-ak
+gy
ak
aI
ak
@@ -1240,7 +1273,7 @@ ak
ak
az
ak
-ak
+gy
ak
bB
ak
diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_envy.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_envy.dmm
index df9620cb67..a14a8d3a13 100644
--- a/_maps/RandomRuins/LavaRuins/lavaland_surface_envy.dmm
+++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_envy.dmm
@@ -11,7 +11,7 @@
"d" = (
/turf/closed/wall/rust,
/area/ruin/unpowered)
-"e" = (
+"f" = (
/obj/structure/mirror{
desc = "This mirror has been shattered. It looks like the bad luck energies spilling from it are taking immediate effect on your surroundings!";
icon_state = "mirror_broke";
@@ -22,17 +22,6 @@
/obj/effect/decal/cleanable/blood,
/turf/open/floor/plating,
/area/ruin/unpowered)
-"f" = (
-/obj/structure/mirror{
- desc = "This mirror has been shattered. It looks like the bad luck energies spilling from it are taking immediate effect on your surroundings!";
- icon_state = "mirror_broke";
- pixel_x = 28;
- broken = 1
- },
-/turf/open/floor/plating{
- icon_state = "panelscorched"
- },
-/area/ruin/unpowered)
"g" = (
/obj/effect/decal/cleanable/blood/tracks,
/obj/structure/mirror{
@@ -58,11 +47,12 @@
/obj/structure/mirror{
desc = "This mirror has been shattered. It looks like the bad luck energies spilling from it are taking immediate effect on your surroundings!";
icon_state = "mirror_broke";
- pixel_y = 28;
+ pixel_x = 28;
broken = 1
},
-/obj/item/kitchen/knife/envy,
-/turf/open/floor/plating,
+/turf/open/floor/plating{
+ icon_state = "panelscorched"
+ },
/area/ruin/unpowered)
"l" = (
/obj/structure/mirror{
@@ -106,6 +96,16 @@
/obj/effect/mapping_helpers/no_lava,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
+"T" = (
+/obj/structure/mirror{
+ desc = "This mirror has been shattered. It looks like the bad luck energies spilling from it are taking immediate effect on your surroundings!";
+ icon_state = "mirror_broke";
+ pixel_y = 28;
+ broken = 1
+ },
+/obj/item/kitchen/knife/envy,
+/turf/open/floor/plating,
+/area/ruin/unpowered)
(1,1,1) = {"
a
@@ -125,14 +125,8 @@ a
a
a
a
-a
-a
-a
"}
(2,1,1) = {"
-a
-a
-c
c
c
c
@@ -167,9 +161,6 @@ d
d
d
d
-d
-d
-d
c
a
"}
@@ -178,16 +169,13 @@ c
c
d
d
-d
-e
+f
g
g
g
m
m
m
-m
-m
o
m
j
@@ -201,14 +189,11 @@ d
d
d
d
-d
h
h
i
i
i
-i
-i
h
i
i
@@ -224,10 +209,7 @@ d
d
d
d
-d
-k
-i
-i
+T
i
i
i
@@ -245,12 +227,9 @@ d
d
d
d
-d
i
i
i
-j
-i
n
i
i
@@ -266,8 +245,7 @@ c
c
d
d
-d
-f
+k
j
l
l
@@ -276,8 +254,6 @@ l
l
l
l
-l
-l
j
d
c
@@ -299,9 +275,6 @@ d
d
d
d
-d
-d
-d
c
a
"}
@@ -322,8 +295,5 @@ c
c
c
c
-c
-c
-c
a
"}
diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_gluttony.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_gluttony.dmm
index d587d19b97..70ffdc85cd 100644
--- a/_maps/RandomRuins/LavaRuins/lavaland_surface_gluttony.dmm
+++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_gluttony.dmm
@@ -20,7 +20,7 @@
/turf/open/floor/plasteel/freezer,
/area/ruin/powered/gluttony)
"h" = (
-/obj/item/veilrender/vealrender,
+/obj/item/trash/boritos,
/turf/open/floor/plasteel/freezer,
/area/ruin/powered/gluttony)
"i" = (
@@ -65,6 +65,7 @@
/obj/machinery/light/small{
dir = 1
},
+/obj/item/trash/plate/alt,
/turf/open/floor/plasteel/freezer,
/area/ruin/powered/gluttony)
"v" = (
@@ -84,6 +85,28 @@
},
/turf/open/floor/plasteel/freezer,
/area/ruin/powered/gluttony)
+"B" = (
+/obj/item/veilrender/vealrender,
+/turf/open/floor/plasteel/freezer,
+/area/ruin/powered/gluttony)
+"E" = (
+/obj/machinery/light/small,
+/obj/item/trash/cheesie,
+/turf/open/floor/plasteel/freezer,
+/area/ruin/powered/gluttony)
+"G" = (
+/obj/item/trash/waffles,
+/turf/open/floor/plasteel/freezer,
+/area/ruin/powered/gluttony)
+"L" = (
+/obj/machinery/light/small,
+/obj/item/trash/plate/alt,
+/turf/open/floor/plasteel/freezer,
+/area/ruin/powered/gluttony)
+"N" = (
+/obj/item/trash/cheesie,
+/turf/open/floor/plasteel/freezer,
+/area/ruin/powered/gluttony)
"R" = (
/turf/closed/indestructible/riveted/uranium,
/area/ruin/powered/gluttony)
@@ -92,6 +115,10 @@
/obj/structure/fans/tiny/invisible,
/turf/open/floor/plasteel/freezer,
/area/ruin/powered/gluttony)
+"Z" = (
+/obj/item/trash/plate/alt,
+/turf/open/floor/plasteel/freezer,
+/area/ruin/powered/gluttony)
(1,1,1) = {"
a
@@ -191,7 +218,7 @@ b
b
c
R
-h
+j
i
o
R
@@ -213,9 +240,9 @@ b
b
c
R
-i
-i
-v
+h
+G
+L
R
c
b
@@ -258,7 +285,7 @@ c
c
R
t
-i
+N
m
R
c
@@ -305,10 +332,10 @@ g
g
i
p
-i
+G
z
l
-i
+Z
R
c
b
@@ -324,10 +351,10 @@ g
g
g
g
+B
n
i
-i
-i
+h
i
i
i
@@ -346,12 +373,12 @@ r
g
g
g
-i
+N
g
i
l
A
-i
+Z
q
R
c
@@ -368,7 +395,7 @@ R
R
R
g
-i
+h
v
R
R
@@ -391,7 +418,7 @@ c
R
r
i
-i
+q
R
c
c
@@ -435,7 +462,7 @@ c
R
j
i
-v
+E
R
c
b
diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_greed.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_greed.dmm
index df450b9803..671fdd54d6 100644
--- a/_maps/RandomRuins/LavaRuins/lavaland_surface_greed.dmm
+++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_greed.dmm
@@ -20,9 +20,7 @@
/area/ruin/powered/greed)
"f" = (
/obj/structure/cursed_slot_machine,
-/turf/open/floor/carpet{
- icon_state = "carpetsymbol"
- },
+/turf/open/floor/carpet/black,
/area/ruin/powered/greed)
"g" = (
/obj/structure/table/wood/poker,
@@ -41,11 +39,6 @@
icon_state = "carpetsymbol"
},
/area/ruin/powered/greed)
-"i" = (
-/turf/open/floor/carpet{
- icon_state = "carpetsymbol"
- },
-/area/ruin/powered/greed)
"j" = (
/obj/structure/table/wood/poker,
/obj/item/coin/adamantine,
@@ -57,28 +50,28 @@
/obj/machinery/computer/arcade/battle{
set_obj_flags = "EMAGGED"
},
-/turf/open/floor/engine/cult,
+/turf/open/floor/carpet/black,
/area/ruin/powered/greed)
"l" = (
/obj/item/coin/gold,
-/turf/open/floor/engine/cult,
+/turf/open/floor/carpet/black,
/area/ruin/powered/greed)
"m" = (
-/turf/open/floor/engine/cult,
+/turf/open/floor/carpet/black,
/area/ruin/powered/greed)
"n" = (
/obj/structure/table/wood/poker,
/obj/item/stack/spacecash/c1000,
-/turf/open/floor/engine/cult,
+/turf/open/floor/carpet,
/area/ruin/powered/greed)
"o" = (
/obj/item/storage/bag/money,
-/turf/open/floor/engine/cult,
+/turf/open/floor/carpet/black,
/area/ruin/powered/greed)
"p" = (
/obj/structure/table/wood/poker,
/obj/item/stack/ore/gold,
-/turf/open/floor/engine/cult,
+/turf/open/floor/carpet,
/area/ruin/powered/greed)
"q" = (
/obj/structure/table/wood/poker,
@@ -88,19 +81,19 @@
brightness = 3;
dir = 8
},
-/turf/open/floor/engine/cult,
+/turf/open/floor/carpet,
/area/ruin/powered/greed)
"r" = (
/obj/structure/table/wood/poker,
/obj/item/stack/spacecash/c500,
/obj/item/stack/spacecash/c100,
/obj/item/stack/spacecash/c1000,
-/turf/open/floor/engine/cult,
+/turf/open/floor/carpet,
/area/ruin/powered/greed)
"s" = (
/obj/structure/table/wood/poker,
/obj/item/stack/spacecash/c200,
-/turf/open/floor/engine/cult,
+/turf/open/floor/carpet,
/area/ruin/powered/greed)
"u" = (
/obj/structure/table/wood/poker,
@@ -110,25 +103,30 @@
/obj/machinery/light/small{
dir = 4
},
-/turf/open/floor/engine/cult,
+/turf/open/floor/carpet,
/area/ruin/powered/greed)
"v" = (
/obj/item/coin/gold,
/obj/machinery/light/small,
-/turf/open/floor/engine/cult,
+/turf/open/floor/carpet/black,
/area/ruin/powered/greed)
"w" = (
/obj/item/storage/bag/money,
/obj/machinery/light/small,
-/turf/open/floor/engine/cult,
+/turf/open/floor/carpet/black,
+/area/ruin/powered/greed)
+"H" = (
+/turf/open/floor/carpet/purple,
/area/ruin/powered/greed)
"J" = (
/obj/machinery/door/airlock/gold,
/obj/structure/fans/tiny/invisible,
-/turf/open/floor/engine/cult,
+/turf/open/floor/carpet/purple,
/area/ruin/powered/greed)
"W" = (
-/turf/closed/wall/mineral/cult,
+/turf/closed/wall/mineral/cult{
+ sheet_amount = 0
+ },
/area/ruin/powered/greed)
(1,1,1) = {"
@@ -337,7 +335,7 @@ a
c
W
f
-i
+m
m
l
m
@@ -345,7 +343,7 @@ o
m
m
m
-m
+H
J
a
a
diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm
index b66fbdf3d5..e582f6e9ce 100644
--- a/_maps/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm
+++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm
@@ -21,6 +21,7 @@
"f" = (
/obj/structure/table/wood,
/obj/item/storage/box/cups,
+/obj/item/reagent_containers/food/snacks/lollipop,
/turf/open/floor/wood{
initial_gas_mix = "o2=14;n2=23;TEMP=300"
},
@@ -181,11 +182,19 @@
initial_gas_mix = "o2=14;n2=23;TEMP=300"
},
/area/ruin/unpowered)
+"B" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/item/trash/candy,
+/turf/open/floor/wood{
+ initial_gas_mix = "o2=14;n2=23;TEMP=300"
+ },
+/area/ruin/unpowered)
"C" = (
/obj/structure/chair/wood/wings{
dir = 4
},
/obj/effect/decal/cleanable/dirt,
+/obj/item/reagent_containers/food/snacks/candy,
/turf/open/floor/plating{
initial_gas_mix = "o2=14;n2=23;TEMP=300"
},
@@ -214,6 +223,7 @@
/area/ruin/unpowered)
"G" = (
/obj/structure/table/wood,
+/obj/item/reagent_containers/food/snacks/lollipop,
/turf/open/floor/wood{
initial_gas_mix = "o2=14;n2=23;TEMP=300"
},
@@ -288,6 +298,35 @@
initial_gas_mix = "o2=14;n2=23;TEMP=300"
},
/area/ruin/unpowered)
+"R" = (
+/obj/structure/table/wood,
+/obj/effect/spawner/lootdrop/pizzaparty,
+/obj/effect/decal/cleanable/dirt,
+/obj/item/reagent_containers/food/snacks/candy,
+/turf/open/floor/wood{
+ initial_gas_mix = "o2=14;n2=23;TEMP=300"
+ },
+/area/ruin/unpowered)
+"V" = (
+/obj/item/reagent_containers/food/snacks/gumball,
+/turf/open/floor/wood{
+ initial_gas_mix = "o2=14;n2=23;TEMP=300"
+ },
+/area/ruin/unpowered)
+"X" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/item/toy/snappop,
+/turf/open/floor/wood{
+ initial_gas_mix = "o2=14;n2=23;TEMP=300"
+ },
+/area/ruin/unpowered)
+"Z" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/item/reagent_containers/food/snacks/gumball,
+/turf/open/floor/wood{
+ initial_gas_mix = "o2=14;n2=23;TEMP=300"
+ },
+/area/ruin/unpowered)
(1,1,1) = {"
a
@@ -359,8 +398,8 @@ b
c
c
e
-h
-h
+B
+Z
e
Q
e
@@ -397,8 +436,8 @@ b
d
f
n
-h
-h
+M
+X
c
e
M
@@ -417,7 +456,7 @@ b
d
g
o
-h
+B
h
C
J
@@ -435,7 +474,7 @@ b
b
b
e
-h
+Z
p
q
x
@@ -461,7 +500,7 @@ r
y
E
h
-h
+X
c
b
b
@@ -496,7 +535,7 @@ b
b
e
e
-h
+X
t
A
G
@@ -515,12 +554,12 @@ b
b
b
d
-k
+R
h
s
s
H
-h
+B
O
d
b
@@ -536,9 +575,9 @@ b
b
d
k
-h
+M
u
-s
+V
s
o
n
diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_pride.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_pride.dmm
index cf4938f369..f42aef243a 100644
--- a/_maps/RandomRuins/LavaRuins/lavaland_surface_pride.dmm
+++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_pride.dmm
@@ -3,8 +3,8 @@
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
"b" = (
-/turf/closed/mineral/volcanic/lava_land_surface,
-/area/lavaland/surface/outdoors)
+/turf/closed/wall/mineral/diamond,
+/area/ruin/powered/pride)
"c" = (
/turf/open/lava/smooth/lava_land_surface,
/area/lavaland/surface/outdoors)
@@ -23,6 +23,10 @@
"g" = (
/turf/open/floor/mineral/silver,
/area/ruin/powered/pride)
+"i" = (
+/obj/item/clothing/gloves/ring,
+/turf/open/floor/mineral/silver,
+/area/ruin/powered/pride)
"j" = (
/obj/structure/mirror{
pixel_x = -32
@@ -33,13 +37,8 @@
/turf/open/floor/mineral/silver,
/area/ruin/powered/pride)
"k" = (
-/obj/structure/mirror{
- pixel_x = 32
- },
-/obj/machinery/light/small{
- dir = 1
- },
-/turf/open/floor/mineral/silver,
+/obj/structure/mirror/magic/pride,
+/turf/closed/wall/mineral/diamond,
/area/ruin/powered/pride)
"l" = (
/obj/structure/mirror{
@@ -60,19 +59,65 @@
},
/turf/open/floor/mineral/silver,
/area/ruin/powered/pride)
+"o" = (
+/obj/structure/mirror{
+ pixel_x = -32
+ },
+/obj/item/lipstick/random,
+/turf/open/floor/mineral/silver,
+/area/ruin/powered/pride)
+"q" = (
+/obj/structure/mirror{
+ pixel_x = -32
+ },
+/obj/item/clothing/gloves/ring/silver,
+/turf/open/floor/mineral/silver,
+/area/ruin/powered/pride)
"r" = (
/obj/machinery/light/small,
/turf/open/floor/mineral/silver,
/area/ruin/powered/pride)
+"u" = (
+/obj/structure/mirror{
+ pixel_x = 32
+ },
+/obj/item/lipstick/random,
+/turf/open/floor/mineral/silver,
+/area/ruin/powered/pride)
+"D" = (
+/obj/item/clothing/head/wig/random,
+/turf/open/floor/mineral/silver,
+/area/ruin/powered/pride)
"G" = (
-/turf/closed/wall/mineral/diamond,
+/turf/closed/mineral/volcanic/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"I" = (
+/obj/item/clothing/gloves/ring/silver,
+/turf/open/floor/mineral/silver,
+/area/ruin/powered/pride)
+"J" = (
+/obj/structure/mirror{
+ pixel_x = 32
+ },
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/open/floor/mineral/silver,
+/area/ruin/powered/pride)
+"L" = (
+/obj/item/lipstick/random,
+/turf/open/floor/mineral/silver,
/area/ruin/powered/pride)
"O" = (
-/obj/structure/mirror/magic/pride,
-/turf/closed/wall/mineral/diamond,
+/obj/item/clothing/gloves/ring/diamond,
+/turf/open/floor/mineral/silver,
+/area/ruin/powered/pride)
+"V" = (
+/obj/item/clothing/head/wig,
+/turf/open/floor/mineral/silver,
/area/ruin/powered/pride)
"Y" = (
-/obj/machinery/door/airlock/diamond,
+/obj/machinery/door/airlock/silver/glass,
/turf/open/floor/mineral/silver{
blocks_air = 1
},
@@ -95,10 +140,6 @@ a
a
a
a
-a
-a
-a
-a
"}
(2,1,1) = {"
a
@@ -116,91 +157,71 @@ c
c
c
c
-c
-c
-c
-c
a
"}
(3,1,1) = {"
+G
+c
+c
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
b
-c
-c
-G
-G
-G
-G
-G
-G
-G
-G
-G
-G
-G
-G
-G
-G
-G
c
a
"}
(4,1,1) = {"
c
c
-G
-G
-G
+b
+b
j
-e
+q
e
l
e
e
l
e
-e
-l
-e
-e
-G
+o
+b
c
a
"}
(5,1,1) = {"
c
-G
-G
-G
-G
-G
-g
-g
-g
-g
-g
+b
+b
g
g
g
+L
g
+V
g
+L
+i
r
-G
+b
a
a
"}
(6,1,1) = {"
c
-G
-G
-G
-G
-G
+b
O
g
+k
g
g
-g
-g
+I
g
g
g
@@ -212,77 +233,61 @@ a
"}
(7,1,1) = {"
c
-G
-G
-G
-G
-G
-g
-g
-g
-g
-g
-g
+b
+b
g
g
+L
+D
g
+L
+i
g
+D
r
-G
-c
+b
+a
a
"}
(8,1,1) = {"
c
c
-G
-G
-G
-k
+b
+b
+J
f
f
m
f
f
m
+u
f
-f
-m
-f
-f
-G
+b
c
a
"}
(9,1,1) = {"
+G
+c
+c
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
b
-c
-c
-G
-G
-G
-G
-G
-G
-G
-G
-G
-G
-G
-G
-G
-G
-G
c
a
"}
(10,1,1) = {"
-b
-b
-c
-c
-c
-c
+G
+G
c
c
c
diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_sloth.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_sloth.dmm
index 3576cab5c7..aa56cce5ca 100644
--- a/_maps/RandomRuins/LavaRuins/lavaland_surface_sloth.dmm
+++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_sloth.dmm
@@ -641,4 +641,4 @@ a
a
a
a
-"}
+"}
\ No newline at end of file
diff --git a/_maps/RandomRuins/SpaceRuins/cloning_facility.dmm b/_maps/RandomRuins/SpaceRuins/cloning_facility.dmm
index 1fb4e60aff..d440e2d15b 100644
--- a/_maps/RandomRuins/SpaceRuins/cloning_facility.dmm
+++ b/_maps/RandomRuins/SpaceRuins/cloning_facility.dmm
@@ -69,7 +69,7 @@
/turf/open/floor/plasteel/white,
/area/ruin/space/has_grav/powered/ancient_shuttle)
"j" = (
-/obj/machinery/computer/prototype_cloning,
+/obj/machinery/computer/cloning/prototype,
/obj/machinery/light{
dir = 1
},
diff --git a/_maps/map_files/CogStation/CogStation.dmm b/_maps/map_files/CogStation/CogStation.dmm
index 8c558e000e..2f27c3f747 100644
--- a/_maps/map_files/CogStation/CogStation.dmm
+++ b/_maps/map_files/CogStation/CogStation.dmm
@@ -5534,11 +5534,10 @@
/turf/open/floor/plating,
/area/maintenance/disposal)
"ann" = (
-/obj/effect/turf_decal/plaque{
+/obj/effect/landmark/event_spawn,
+/turf/open/floor/goonplaque{
desc = "It reads 'In honor of spacemen past, whose work allowed this station to find its new home. The fact that you stand on a station originally built light years away is a definitive representation of the ingenuity of the human spirit.' Beneath this is the image of a spaceman rocketing upwards by means of what appears to be a match and flatulence."
},
-/obj/effect/landmark/event_spawn,
-/turf/open/floor/plasteel,
/area/hallway/secondary/entry)
"ano" = (
/obj/structure/disposalpipe/segment,
@@ -23461,6 +23460,17 @@
},
/turf/open/floor/plasteel/grimy,
/area/security/detectives_office)
+"aYG" = (
+/obj/effect/turf_decal/tile/blue,
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/obj/machinery/light,
+/obj/structure/disposalpipe/junction/flip{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/aft)
"aYH" = (
/obj/effect/turf_decal/tile/yellow{
dir = 8
@@ -24359,6 +24369,17 @@
},
/turf/open/floor/carpet,
/area/crew_quarters/bar)
+"bau" = (
+/obj/structure/disposalpipe/segment,
+/obj/machinery/camera{
+ c_tag = "Aft Maintenance - Port";
+ pixel_x = 22
+ },
+/obj/machinery/atmospherics/pipe/simple/orange/hidden{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/maintenance/aft)
"bav" = (
/obj/structure/chair/sofa/right,
/obj/machinery/firealarm{
@@ -26737,6 +26758,25 @@
/obj/effect/landmark/start/cargo_technician,
/turf/open/floor/plasteel,
/area/quartermaster/sorting)
+"bga" = (
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/obj/machinery/power/apc/highcap/five_k{
+ areastring = "/area/hallway/primary/aft";
+ dir = 1;
+ name = "Aft Primary Hallway APC";
+ pixel_x = 1;
+ pixel_y = 24
+ },
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/obj/machinery/atmospherics/pipe/simple/orange/hidden{
+ dir = 10
+ },
+/turf/open/floor/plating,
+/area/maintenance/aft)
"bgb" = (
/obj/structure/disposalpipe/sorting/mail{
sortType = 30
@@ -28064,6 +28104,13 @@
/obj/machinery/pipedispenser,
/turf/open/floor/plasteel,
/area/science/mixing)
+"biU" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/plating,
+/area/maintenance/aft)
"biV" = (
/turf/closed/wall,
/area/storage/primary)
@@ -29556,6 +29603,13 @@
},
/turf/closed/wall/r_wall,
/area/science/mixing)
+"blU" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/closet/cardboard,
+/turf/open/floor/plating,
+/area/maintenance/aft)
"blV" = (
/obj/machinery/computer/cargo{
dir = 8
@@ -31652,6 +31706,15 @@
dir = 1
},
/area/hallway/secondary/exit)
+"bqq" = (
+/obj/machinery/chem_master,
+/obj/effect/turf_decal/stripes/line,
+/obj/machinery/camera{
+ c_tag = "Medbay - Chemistry Lab";
+ network = list("ss13","rd")
+ },
+/turf/open/floor/plasteel,
+/area/medical/chemistry)
"bqr" = (
/obj/effect/turf_decal/tile/blue,
/obj/effect/turf_decal/tile/blue{
@@ -31663,8 +31726,13 @@
/turf/open/floor/plasteel,
/area/hallway/primary/aft)
"bqs" = (
-/obj/effect/spawner/structure/window/reinforced,
-/obj/structure/disposalpipe/segment,
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/orange/hidden,
/turf/open/floor/plating,
/area/maintenance/aft)
"bqt" = (
@@ -31744,16 +31812,8 @@
/turf/open/floor/plasteel,
/area/quartermaster/miningoffice)
"bqz" = (
-/obj/effect/turf_decal/tile/blue,
-/obj/effect/turf_decal/tile/blue{
- dir = 8
- },
-/obj/machinery/light,
-/obj/structure/disposalpipe/segment{
- dir = 9
- },
-/turf/open/floor/plasteel,
-/area/hallway/primary/aft)
+/turf/closed/wall,
+/area/medical/chemistry)
"bqA" = (
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
@@ -32318,6 +32378,15 @@
},
/turf/open/floor/plasteel,
/area/hallway/secondary/civilian)
+"brF" = (
+/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "chem1";
+ name = "chem lab shutters"
+ },
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/plating,
+/area/medical/chemistry)
"brG" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -32332,20 +32401,8 @@
/turf/open/floor/plasteel/grimy,
/area/crew_quarters/heads/hos)
"brH" = (
-/obj/structure/cable{
- icon_state = "2-8"
- },
-/obj/structure/closet/wardrobe/chemistry_white{
- anchored = 1
- },
-/obj/effect/turf_decal/trimline/yellow/filled/line,
-/obj/effect/turf_decal/trimline/yellow/filled/line{
- dir = 1
- },
-/obj/machinery/atmospherics/pipe/simple/orange/hidden{
- dir = 8
- },
-/turf/open/floor/plasteel/showroomfloor,
+/obj/structure/disposalpipe/segment,
+/turf/closed/wall,
/area/medical/chemistry)
"brI" = (
/obj/effect/turf_decal/tile/neutral{
@@ -32364,20 +32421,25 @@
/turf/open/floor/plasteel,
/area/hallway/primary/central)
"brJ" = (
+/obj/machinery/door/firedoor,
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/machinery/atmospherics/pipe/simple/cyan/hidden{
- dir = 10
+/obj/machinery/atmospherics/pipe/simple/orange/hidden,
+/obj/machinery/door/airlock/maintenance{
+ name = "Chemistry Maintenance";
+ req_access_txt = "5; 33"
},
-/turf/open/floor/plasteel/dark,
+/turf/open/floor/plating,
/area/medical/chemistry)
"brK" = (
-/obj/machinery/chem_heater,
-/obj/effect/turf_decal/trimline/yellow/filled/end{
- dir = 1
+/obj/structure/window/reinforced/spawner/east,
+/obj/machinery/chem_dispenser,
+/obj/machinery/airalarm{
+ pixel_y = 24
},
-/turf/open/floor/plasteel/showroomfloor,
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plasteel,
/area/medical/chemistry)
"brL" = (
/obj/structure/disposalpipe/segment,
@@ -32857,11 +32919,14 @@
/turf/open/floor/grass,
/area/hydroponics)
"bsG" = (
-/obj/item/kirbyplants{
- icon_state = "plant-03"
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/table,
+/obj/effect/decal/cleanable/cobweb,
+/obj/structure/sign/poster/contraband/borg_fancy_2{
+ pixel_y = 32
},
-/turf/open/floor/plasteel/white,
-/area/medical/medbay/lobby)
+/turf/open/floor/plasteel,
+/area/maintenance/aft)
"bsH" = (
/obj/structure/table/glass,
/obj/item/storage/box/syringes{
@@ -32899,26 +32964,40 @@
/turf/open/floor/grass,
/area/hydroponics)
"bsL" = (
-/obj/effect/turf_decal/trimline/yellow/filled/end,
-/obj/machinery/atmospherics/pipe/simple/orange/hidden{
- dir = 5
+/obj/structure/table,
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
},
-/turf/open/floor/plasteel/showroomfloor,
+/obj/machinery/reagentgrinder{
+ pixel_y = 8
+ },
+/obj/item/storage/box/syringes,
+/obj/item/storage/box/beakers{
+ pixel_x = -2;
+ pixel_y = -2
+ },
+/turf/open/floor/plasteel,
/area/medical/chemistry)
"bsM" = (
/turf/closed/wall,
/area/science/robotics/lab)
"bsN" = (
-/obj/structure/table/reinforced,
-/obj/machinery/door/window/eastright{
- base_state = "left";
- dir = 2;
- icon_state = "left";
- name = "Chemistry Desk";
- req_access_txt = "33"
+/obj/structure/table,
+/obj/effect/turf_decal/stripes/line,
+/obj/machinery/light{
+ dir = 1
},
-/obj/machinery/door/firedoor,
-/turf/open/floor/plating,
+/obj/item/stack/sheet/mineral/plasma,
+/obj/item/stack/cable_coil/random,
+/obj/item/grenade/chem_grenade,
+/obj/item/grenade/chem_grenade,
+/obj/item/grenade/chem_grenade,
+/obj/item/screwdriver{
+ pixel_x = -2;
+ pixel_y = 6
+ },
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/plasteel,
/area/medical/chemistry)
"bsO" = (
/obj/structure/disposalpipe/segment{
@@ -32926,9 +33005,22 @@
},
/turf/closed/wall/r_wall,
/area/hallway/secondary/civilian)
+"bsP" = (
+/obj/structure/disposalpipe/trunk{
+ dir = 1
+ },
+/obj/machinery/disposal/bin,
+/obj/effect/turf_decal/stripes/white/full,
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plasteel,
+/area/medical/chemistry)
"bsQ" = (
-/obj/machinery/smartfridge/chemistry/preloaded,
-/turf/closed/wall/r_wall,
+/obj/machinery/disposal/bin,
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/obj/structure/disposalpipe/trunk,
+/turf/open/floor/plasteel,
/area/medical/chemistry)
"bsR" = (
/obj/machinery/atmospherics/pipe/simple/cyan/hidden,
@@ -33130,6 +33222,14 @@
},
/turf/open/floor/plating,
/area/maintenance/department/chapel)
+"bts" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/light_construct/small{
+ icon_state = "bulb-construct-stage1";
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/maintenance/aft)
"btt" = (
/obj/structure/chair{
dir = 8
@@ -33159,11 +33259,12 @@
/turf/closed/wall,
/area/hallway/secondary/civilian)
"btv" = (
-/obj/machinery/atmospherics/pipe/simple/orange/hidden{
- dir = 8
+/obj/structure/cable{
+ icon_state = "4-8"
},
-/turf/closed/wall/r_wall,
-/area/router/medsci)
+/obj/effect/landmark/event_spawn,
+/turf/open/floor/plating,
+/area/maintenance/aft)
"btw" = (
/obj/structure/disposalpipe/segment,
/obj/structure/cable{
@@ -33444,6 +33545,10 @@
"bui" = (
/turf/open/floor/plasteel,
/area/hallway/secondary/exit)
+"buj" = (
+/obj/structure/closet/crate,
+/turf/open/floor/plating,
+/area/maintenance/aft)
"buk" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -33458,13 +33563,9 @@
/turf/open/floor/plating,
/area/router)
"bul" = (
-/obj/effect/spawner/structure/window/reinforced,
-/obj/machinery/door/poddoor/shutters/preopen{
- id = "chem1";
- name = "chem lab shutters"
- },
+/obj/structure/girder,
/turf/open/floor/plating,
-/area/medical/chemistry)
+/area/maintenance/aft)
"bum" = (
/obj/structure/closet/crate,
/obj/effect/spawner/lootdrop/maintenance,
@@ -34093,24 +34194,10 @@
/area/crew_quarters/heads/hop)
"bvK" = (
/obj/structure/cable{
- icon_state = "4-8"
+ icon_state = "1-4"
},
-/obj/structure/table/glass,
-/obj/item/stack/sheet/mineral/plasma,
-/obj/item/stack/cable_coil/random,
-/obj/item/grenade/chem_grenade,
-/obj/item/grenade/chem_grenade,
-/obj/item/grenade/chem_grenade,
-/obj/item/screwdriver{
- pixel_x = -2;
- pixel_y = 6
- },
-/obj/effect/turf_decal/trimline/yellow/filled/line,
-/obj/effect/turf_decal/trimline/yellow/filled/line{
- dir = 1
- },
-/turf/open/floor/plasteel/showroomfloor,
-/area/medical/chemistry)
+/turf/open/floor/plasteel/white,
+/area/medical/medbay/lobby)
"bvL" = (
/obj/effect/turf_decal/tile/bar,
/obj/effect/turf_decal/tile/bar{
@@ -34291,23 +34378,8 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/structure/table/glass,
-/obj/item/book/manual/wiki/chemistry,
-/obj/item/book/manual/wiki/chemistry{
- pixel_x = 3;
- pixel_y = 3
- },
-/obj/item/clothing/glasses/science,
-/obj/item/clothing/glasses/science{
- pixel_x = 2;
- pixel_y = 4
- },
-/obj/effect/turf_decal/trimline/yellow/filled/line,
-/obj/effect/turf_decal/trimline/yellow/filled/line{
- dir = 1
- },
-/turf/open/floor/plasteel/showroomfloor,
-/area/medical/chemistry)
+/turf/open/floor/plasteel/white,
+/area/medical/medbay/lobby)
"bwg" = (
/obj/structure/disposalpipe/segment{
dir = 9
@@ -35438,11 +35510,17 @@
/turf/open/floor/plating,
/area/maintenance/starboard/central)
"byw" = (
-/obj/structure/extinguisher_cabinet{
- pixel_x = -27
+/obj/machinery/airalarm{
+ pixel_y = 24
},
-/turf/open/floor/plasteel/dark,
-/area/medical/chemistry)
+/obj/machinery/light{
+ dir = 1
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel/white,
+/area/medical/medbay/lobby)
"byx" = (
/obj/machinery/telecomms/processor/preset_three,
/turf/open/floor/circuit/telecomms/mainframe,
@@ -35472,11 +35550,25 @@
/turf/open/floor/plasteel/dark/telecomms,
/area/tcommsat/server)
"byD" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
+/obj/machinery/camera{
+ c_tag = "Medbay - Lobby";
+ network = list("ss13","rd")
+ },
+/obj/effect/turf_decal/tile/yellow{
dir = 4
},
-/turf/open/floor/plasteel/dark,
-/area/medical/chemistry)
+/obj/effect/turf_decal/tile/yellow{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/blue,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel/white,
+/area/medical/medbay/lobby)
"byE" = (
/obj/effect/turf_decal/stripes/line{
dir = 4
@@ -35861,6 +35953,24 @@
},
/turf/open/floor/plasteel/white,
/area/gateway)
+"bzA" = (
+/obj/machinery/power/apc{
+ areastring = "/area/medical/chemistry";
+ dir = 1;
+ name = "Chemistry APC";
+ pixel_y = 24
+ },
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/obj/effect/turf_decal/tile/yellow{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 1
+ },
+/turf/open/floor/plasteel/white,
+/area/medical/chemistry)
"bzB" = (
/obj/machinery/atmospherics/pipe/simple/cyan/hidden{
dir = 6
@@ -35903,14 +36013,13 @@
/turf/open/floor/plating,
/area/router)
"bzG" = (
-/obj/machinery/chem_dispenser,
-/obj/item/radio/intercom{
- pixel_x = -25
+/obj/effect/turf_decal/tile/yellow{
+ dir = 4
},
-/obj/effect/turf_decal/trimline/yellow/filled/end{
+/obj/effect/turf_decal/tile/blue{
dir = 1
},
-/turf/open/floor/plasteel/showroomfloor,
+/turf/open/floor/plasteel/white,
/area/medical/chemistry)
"bzH" = (
/obj/structure/disposalpipe/segment,
@@ -35926,9 +36035,21 @@
/turf/open/floor/plasteel,
/area/hallway/primary/aft)
"bzJ" = (
-/obj/structure/sign/warning/biohazard,
-/turf/closed/wall/r_wall,
-/area/medical/chemistry)
+/obj/effect/turf_decal/tile/yellow{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/yellow{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/blue,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel/white,
+/area/medical/medbay/lobby)
"bzK" = (
/obj/machinery/disposal/bin{
name = "Chapel Corpse Delivery"
@@ -36332,27 +36453,60 @@
/turf/open/floor/plasteel,
/area/quartermaster/sorting)
"bAC" = (
-/obj/machinery/chem_master,
-/obj/machinery/requests_console{
- department = "Chemistry";
- departmentType = 2;
- pixel_x = -30;
- receive_ore_updates = 1
+/obj/effect/turf_decal/tile/yellow{
+ dir = 4
},
-/obj/effect/turf_decal/trimline/yellow/filled/end,
-/turf/open/floor/plasteel/showroomfloor,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 1
+ },
+/turf/open/floor/plasteel/white,
+/area/medical/chemistry)
+"bAD" = (
+/obj/machinery/door/firedoor,
+/obj/structure/table/reinforced,
+/obj/effect/turf_decal/delivery,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/door/window/eastleft{
+ name = "Chemistry Desk";
+ req_access_txt = "33"
+ },
+/turf/open/floor/plasteel/white,
/area/medical/chemistry)
"bAE" = (
-/obj/structure/table/glass,
-/obj/item/reagent_containers/glass/beaker/large{
- pixel_x = -3;
- pixel_y = 3
+/obj/structure/disposalpipe/segment,
+/obj/structure/chair/office/light{
+ dir = 8
},
-/obj/item/reagent_containers/glass/beaker/large,
-/obj/item/reagent_containers/dropper,
-/obj/item/reagent_containers/dropper,
-/obj/effect/turf_decal/trimline/yellow/filled/end,
-/turf/open/floor/plasteel/showroomfloor,
+/obj/machinery/button/door{
+ id = "chem1";
+ name = "Shutters Control Button";
+ pixel_x = -8;
+ pixel_y = 24;
+ req_access_txt = "29"
+ },
+/obj/effect/landmark/start/chemist,
+/obj/effect/turf_decal/tile/yellow{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/yellow{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 1
+ },
+/obj/structure/extinguisher_cabinet{
+ pixel_x = 5;
+ pixel_y = 32
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel/white,
/area/medical/chemistry)
"bAF" = (
/obj/machinery/gateway/centerstation,
@@ -36703,10 +36857,23 @@
/turf/open/floor/plating,
/area/maintenance/disposal)
"bBs" = (
-/obj/structure/sign/warning/nosmoking{
- pixel_y = -32
+/obj/structure/cable{
+ icon_state = "1-2"
},
-/turf/open/floor/plasteel/dark,
+/obj/machinery/atmospherics/pipe/simple/orange/hidden,
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/obj/effect/turf_decal/tile/yellow{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 1
+ },
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/turf/open/floor/plasteel/white,
/area/medical/chemistry)
"bBt" = (
/obj/structure/cable{
@@ -36890,16 +37057,25 @@
name = "Power Monitoring"
})
"bBP" = (
-/obj/structure/disposalpipe/segment,
-/turf/closed/wall,
-/area/science/robotics/lab)
-"bBQ" = (
-/obj/machinery/door/airlock/research{
- name = "Mech Bay";
- req_access_txt = "29"
+/obj/machinery/door/firedoor,
+/obj/structure/table/reinforced,
+/obj/effect/turf_decal/delivery,
+/obj/machinery/atmospherics/pipe/simple/orange/hidden{
+ dir = 8
},
-/turf/open/floor/plasteel/dark,
-/area/science/robotics/lab)
+/obj/machinery/door/window/eastright{
+ name = "Chemistry Desk";
+ req_access_txt = "33"
+ },
+/turf/open/floor/plasteel/white,
+/area/medical/chemistry)
+"bBQ" = (
+/obj/machinery/atmospherics/pipe/simple/cyan/hidden,
+/obj/machinery/light_switch{
+ pixel_x = -24
+ },
+/turf/open/floor/plasteel/showroomfloor,
+/area/medical/medbay/central)
"bBR" = (
/obj/structure/cable{
icon_state = "0-8"
@@ -37049,6 +37225,29 @@
},
/turf/open/floor/plasteel/dark,
/area/crew_quarters/heads/hop)
+"bCf" = (
+/obj/effect/turf_decal/tile/yellow{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 1
+ },
+/obj/effect/landmark/start/chemist,
+/turf/open/floor/plasteel/white,
+/area/medical/chemistry)
+"bCg" = (
+/obj/effect/turf_decal/tile/yellow{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 5
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 1
+ },
+/obj/effect/landmark/start/chemist,
+/turf/open/floor/plasteel/white,
+/area/medical/chemistry)
"bCh" = (
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
@@ -37370,6 +37569,22 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/plasteel,
/area/hallway/primary/aft)
+"bCY" = (
+/obj/effect/turf_decal/tile/yellow{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 9
+ },
+/obj/effect/turf_decal/tile/blue,
+/obj/effect/turf_decal/tile/blue{
+ dir = 1
+ },
+/obj/structure/sign/warning/nosmoking{
+ pixel_x = 32
+ },
+/turf/open/floor/plasteel/white,
+/area/medical/chemistry)
"bCZ" = (
/obj/machinery/conveyor{
dir = 8;
@@ -38634,6 +38849,20 @@
},
/turf/open/floor/plasteel,
/area/quartermaster/sorting)
+"bFE" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 8
+ },
+/obj/structure/table/glass,
+/obj/item/reagent_containers/glass/beaker/large{
+ pixel_x = -3;
+ pixel_y = 3
+ },
+/obj/item/reagent_containers/glass/beaker/large,
+/obj/item/reagent_containers/dropper,
+/obj/item/reagent_containers/dropper,
+/turf/open/floor/plasteel/white,
+/area/medical/chemistry)
"bFF" = (
/obj/machinery/light_switch{
pixel_y = 24
@@ -38643,6 +38872,10 @@
},
/turf/open/floor/plating,
/area/storage/tech)
+"bFG" = (
+/obj/effect/turf_decal/tile/blue,
+/turf/open/floor/plasteel/white,
+/area/medical/chemistry)
"bFH" = (
/obj/machinery/power/apc{
name = "Customs APC";
@@ -38907,20 +39140,9 @@
/turf/open/floor/plasteel/white,
/area/medical/medbay/central)
"bFZ" = (
-/obj/effect/turf_decal/tile/blue{
- dir = 4
- },
-/obj/effect/turf_decal/tile/blue{
- dir = 1
- },
-/obj/machinery/atmospherics/pipe/manifold/cyan/hidden{
- dir = 1
- },
-/obj/machinery/airalarm{
- pixel_y = 24
- },
+/obj/machinery/chem_heater,
/turf/open/floor/plasteel/white,
-/area/medical/medbay/central)
+/area/medical/chemistry)
"bGa" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
/turf/open/floor/plasteel/dark,
@@ -39633,48 +39855,26 @@
/turf/open/floor/plating,
/area/crew_quarters/locker)
"bHC" = (
-/obj/effect/turf_decal/tile/blue{
- dir = 1
- },
-/obj/machinery/firealarm{
- pixel_y = 26
- },
-/obj/effect/turf_decal/tile/purple{
- dir = 4
- },
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/cyan/hidden{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "4-8"
+/obj/effect/turf_decal/tile/yellow{
+ dir = 8
},
+/obj/effect/turf_decal/tile/blue,
/turf/open/floor/plasteel/white,
-/area/medical/medbay/central)
+/area/medical/chemistry)
+"bHD" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel,
+/area/maintenance/aft)
"bHE" = (
-/obj/effect/turf_decal/tile/blue{
- dir = 1
- },
-/obj/effect/turf_decal/tile/purple{
+/obj/effect/turf_decal/tile/yellow{
dir = 4
},
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/manifold/cyan/hidden{
- dir = 1
- },
-/obj/machinery/camera{
- c_tag = "Medbay - Starboard";
- network = list("ss13","rd")
- },
-/obj/structure/cable{
- icon_state = "4-8"
+/obj/effect/turf_decal/tile/yellow{
+ dir = 8
},
+/obj/effect/turf_decal/tile/blue,
/turf/open/floor/plasteel/white,
-/area/medical/medbay/central)
+/area/medical/chemistry)
"bHF" = (
/obj/structure/table/reinforced,
/obj/item/assembly/timer{
@@ -39696,23 +39896,11 @@
/turf/open/floor/plasteel/white,
/area/science/mixing)
"bHG" = (
-/obj/effect/turf_decal/tile/blue{
- dir = 1
- },
-/obj/effect/turf_decal/tile/purple{
- dir = 4
- },
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/cyan/hidden{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/plasteel/white,
-/area/medical/medbay/central)
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/landmark/event_spawn,
+/turf/open/floor/plasteel,
+/area/maintenance/aft)
"bHH" = (
/obj/structure/table,
/obj/machinery/recharger,
@@ -39727,33 +39915,15 @@
},
/area/gateway)
"bHI" = (
-/obj/effect/turf_decal/tile/blue{
- dir = 1
- },
-/obj/effect/turf_decal/tile/purple{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/cyan/hidden{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
/turf/open/floor/plasteel/white,
-/area/medical/medbay/central)
+/area/medical/medbay/lobby)
"bHJ" = (
-/obj/effect/turf_decal/tile/blue,
-/obj/effect/turf_decal/tile/blue{
- dir = 1
- },
-/obj/effect/turf_decal/tile/purple{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/cyan/hidden{
- dir = 10
+/obj/item/kirbyplants{
+ icon_state = "plant-03"
},
/turf/open/floor/plasteel/white,
-/area/medical/medbay/central)
+/area/medical/medbay/lobby)
"bHK" = (
/obj/structure/sign/warning/biohazard,
/turf/closed/wall,
@@ -39926,6 +40096,10 @@
/obj/structure/window/reinforced,
/turf/open/floor/plasteel/dark,
/area/science/robotics/lab)
+"bIi" = (
+/obj/machinery/smartfridge/chemistry/preloaded,
+/turf/closed/wall,
+/area/medical/chemistry)
"bIj" = (
/obj/machinery/door/window/southright,
/turf/open/floor/plasteel/dark,
@@ -40011,15 +40185,15 @@
/turf/open/floor/plasteel/white,
/area/medical/medbay/central)
"bIt" = (
-/obj/effect/turf_decal/tile/blue,
-/obj/effect/turf_decal/tile/purple{
- dir = 4
+/obj/structure/disposalpipe/segment,
+/obj/effect/turf_decal/tile/yellow{
+ dir = 8
},
-/obj/machinery/atmospherics/pipe/simple/cyan/hidden{
- dir = 5
+/obj/effect/turf_decal/tile/blue{
+ dir = 1
},
/turf/open/floor/plasteel/white,
-/area/medical/medbay/central)
+/area/medical/chemistry)
"bIu" = (
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/medical{
@@ -40152,6 +40326,26 @@
/obj/item/extinguisher,
/turf/open/floor/plasteel,
/area/science/xenobiology)
+"bIL" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/manifold/orange/hidden{
+ dir = 8
+ },
+/turf/open/floor/plasteel/white,
+/area/medical/chemistry)
+"bIM" = (
+/obj/machinery/shower{
+ desc = "The HS-451. Standard Nanotrasen Hygiene Division design, although it looks like this one was installed more recently.";
+ dir = 8;
+ name = "emergency shower";
+ pixel_y = -4
+ },
+/obj/structure/window/reinforced/spawner/north,
+/obj/effect/turf_decal/delivery,
+/turf/open/floor/plasteel,
+/area/medical/chemistry)
"bIN" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -40328,6 +40522,10 @@
/obj/structure/window/reinforced/spawner,
/turf/open/floor/plasteel/white,
/area/medical/medbay/central)
+"bJd" = (
+/obj/effect/landmark/event_spawn,
+/turf/open/floor/plasteel/white,
+/area/medical/chemistry)
"bJe" = (
/obj/structure/closet/secure_closet/personal/patient,
/obj/effect/turf_decal/tile/blue,
@@ -40342,20 +40540,14 @@
/turf/open/floor/plasteel/white,
/area/medical/medbay/central)
"bJf" = (
-/obj/structure/closet/secure_closet/personal/patient,
-/obj/effect/turf_decal/tile/blue,
-/obj/effect/turf_decal/tile/purple{
- dir = 8
+/obj/machinery/door/airlock/maintenance{
+ name = "Chemistry Maintenance";
+ req_access_txt = "5; 33"
},
-/obj/effect/turf_decal/tile/purple{
- dir = 4
- },
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/structure/window/reinforced/spawner,
-/turf/open/floor/plasteel/white,
-/area/medical/medbay/central)
+/obj/machinery/door/firedoor,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel,
+/area/medical/chemistry)
"bJg" = (
/obj/structure/table,
/obj/effect/turf_decal/tile/red{
@@ -43904,33 +44096,11 @@
/turf/open/floor/plasteel/showroomfloor,
/area/medical/morgue)
"bQp" = (
-/obj/machinery/airalarm{
- dir = 4;
- pixel_x = -23
- },
-/obj/machinery/power/apc{
- areastring = "/area/medical/chemistry";
- dir = 1;
- name = "Chemistry APC";
- pixel_y = 24
- },
-/obj/structure/cable{
- icon_state = "0-4"
- },
-/obj/structure/table/glass,
-/obj/machinery/reagentgrinder{
- pixel_y = 8
- },
-/obj/item/storage/box/syringes,
-/obj/item/storage/box/beakers{
- pixel_x = -2;
- pixel_y = -2
- },
-/obj/effect/turf_decal/trimline/yellow/filled/end{
- dir = 8
- },
-/turf/open/floor/plasteel/showroomfloor,
-/area/medical/chemistry)
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/reagent_dispensers/fueltank,
+/obj/machinery/light/small,
+/turf/open/floor/plasteel,
+/area/maintenance/aft)
"bQq" = (
/obj/effect/turf_decal/tile/yellow{
dir = 1
@@ -47830,11 +48000,11 @@
name = "Research Sector"
})
"bXL" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/plasteel/white,
-/area/medical/medbay/lobby)
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/rack,
+/obj/item/storage/belt/utility,
+/turf/open/floor/plasteel,
+/area/maintenance/aft)
"bXM" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/conveyor{
@@ -48328,6 +48498,12 @@
},
/turf/open/floor/plasteel/dark,
/area/science/robotics/lab)
+"bYK" = (
+/obj/machinery/atmospherics/pipe/simple/orange/hidden{
+ dir = 5
+ },
+/turf/open/floor/plasteel/white,
+/area/medical/medbay/lobby)
"bYL" = (
/obj/effect/turf_decal/tile/purple{
dir = 4
@@ -48958,6 +49134,18 @@
},
/turf/open/floor/plasteel,
/area/engine/atmos)
+"caj" = (
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 1
+ },
+/turf/open/floor/plasteel/white,
+/area/medical/medbay/central)
"cak" = (
/obj/structure/sign/warning/fire,
/turf/closed/wall/r_wall,
@@ -49056,9 +49244,12 @@
/turf/open/floor/engine/n2,
/area/engine/atmos)
"caz" = (
-/obj/structure/disposalpipe/segment,
-/turf/closed/wall,
-/area/science/explab)
+/obj/machinery/door/airlock/research{
+ name = "Mech Bay";
+ req_access_txt = "29"
+ },
+/turf/open/floor/plasteel/dark,
+/area/science/robotics/mechbay)
"caA" = (
/obj/structure/closet/radiation,
/turf/open/floor/plasteel,
@@ -49111,6 +49302,19 @@
},
/turf/open/floor/plasteel/dark,
/area/science/explab)
+"caH" = (
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue,
+/obj/machinery/atmospherics/pipe/simple/orange/hidden{
+ dir = 6
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 1
+ },
+/turf/open/floor/plasteel/white,
+/area/medical/medbay/central)
"caI" = (
/obj/structure/table/reinforced,
/obj/item/integrated_electronics/analyzer,
@@ -49359,6 +49563,17 @@
/obj/item/healthanalyzer,
/turf/open/floor/engine,
/area/science/explab)
+"cbm" = (
+/obj/machinery/door/firedoor,
+/obj/machinery/atmospherics/pipe/simple/orange/hidden{
+ dir = 8
+ },
+/obj/machinery/door/airlock/maintenance{
+ name = "Medbay Maintenance";
+ req_access_txt = "5"
+ },
+/turf/open/floor/plating,
+/area/medical/medbay/central)
"cbn" = (
/obj/structure/window/reinforced{
dir = 4;
@@ -49399,6 +49614,28 @@
/obj/item/pen,
/turf/open/floor/engine,
/area/science/explab)
+"cbr" = (
+/obj/machinery/atmospherics/pipe/simple/orange/hidden{
+ dir = 8
+ },
+/turf/open/floor/plasteel/white,
+/area/medical/medbay/lobby)
+"cbs" = (
+/obj/effect/turf_decal/tile/yellow{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/yellow{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/blue,
+/obj/machinery/atmospherics/pipe/simple/orange/hidden{
+ dir = 8
+ },
+/turf/open/floor/plasteel/white,
+/area/medical/medbay/lobby)
"cbt" = (
/obj/structure/disposalpipe/segment,
/turf/open/floor/engine,
@@ -49536,6 +49773,26 @@
/area/engine/supermatter{
name = "Thermo-Electric Generator"
})
+"cbK" = (
+/obj/effect/turf_decal/tile/yellow{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/yellow{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/blue,
+/obj/structure/sign/departments/chemistry{
+ pixel_x = 32;
+ pixel_y = -32
+ },
+/obj/machinery/atmospherics/pipe/simple/orange/hidden{
+ dir = 8
+ },
+/turf/open/floor/plasteel/white,
+/area/medical/medbay/lobby)
"cbL" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -49799,13 +50056,11 @@
/turf/open/floor/plasteel/stairs,
/area/maintenance/department/chapel)
"ccm" = (
-/obj/effect/spawner/structure/window/reinforced,
-/obj/machinery/door/poddoor/shutters/preopen{
- id = "robotics2";
- name = "robotics lab shutters"
+/obj/machinery/atmospherics/pipe/simple/orange/hidden{
+ dir = 8
},
-/turf/open/floor/plating,
-/area/router/medsci)
+/turf/closed/wall/r_wall,
+/area/science/robotics/lab)
"ccn" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/conveyor/auto{
@@ -50647,14 +50902,52 @@
/turf/closed/wall/r_wall,
/area/engine/teg_hot)
"cdW" = (
-/obj/machinery/airalarm{
- pixel_y = 24
+/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/atmospherics/pipe/simple/orange/hidden{
+ dir = 10
},
-/obj/machinery/light{
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "robotics2";
+ name = "robotics lab shutters"
+ },
+/turf/open/floor/plating,
+/area/science/robotics/lab)
+"cdX" = (
+/obj/structure/disposalpipe/segment{
+ dir = 5
+ },
+/obj/structure/chair/office/light{
+ dir = 8
+ },
+/obj/effect/landmark/start/chemist,
+/obj/effect/turf_decal/tile/yellow{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/blue,
+/obj/effect/turf_decal/tile/blue{
+ dir = 1
+ },
+/obj/item/radio/intercom{
+ broadcasting = 1;
+ frequency = 1485;
+ listening = 0;
+ name = "Station Intercom (Medical)";
+ pixel_y = -30
+ },
+/obj/machinery/atmospherics/pipe/simple/orange/hidden{
+ dir = 8
+ },
+/turf/open/floor/plasteel/white,
+/area/medical/chemistry)
+"cdY" = (
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/blue{
dir = 1
},
/turf/open/floor/plasteel/white,
-/area/medical/medbay/lobby)
+/area/medical/medbay/central)
"cdZ" = (
/turf/closed/wall/r_wall,
/area/medical/medbay/lobby)
@@ -52596,6 +52889,18 @@
},
/turf/open/floor/wood,
/area/library)
+"chV" = (
+/obj/machinery/firealarm{
+ dir = 8;
+ pixel_x = 26
+ },
+/obj/machinery/atmospherics/pipe/simple/orange/hidden,
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue,
+/turf/open/floor/plasteel/white,
+/area/medical/medbay/central)
"chW" = (
/obj/effect/turf_decal/tile/neutral{
dir = 4
@@ -53003,21 +53308,20 @@
/turf/open/floor/plasteel,
/area/quartermaster/warehouse)
"ciQ" = (
-/obj/structure/cable{
- icon_state = "0-4"
+/obj/structure/disposalpipe/segment{
+ dir = 10
},
/obj/structure/cable{
- icon_state = "4-8"
+ icon_state = "1-2"
},
-/obj/machinery/power/apc/highcap/five_k{
- areastring = "/area/hallway/primary/aft";
- dir = 1;
- name = "Aft Primary Hallway APC";
- pixel_x = 1;
- pixel_y = 24
+/obj/effect/turf_decal/tile/yellow{
+ dir = 8
},
-/turf/open/floor/plating,
-/area/maintenance/aft)
+/obj/machinery/atmospherics/pipe/manifold/orange/hidden{
+ dir = 4
+ },
+/turf/open/floor/plasteel/white,
+/area/medical/chemistry)
"ciR" = (
/obj/machinery/door/firedoor,
/obj/effect/turf_decal/tile/red,
@@ -53752,6 +54056,14 @@
/area/engine/engineering{
name = "Engine Room"
})
+"ckp" = (
+/obj/effect/turf_decal/tile/yellow{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/blue,
+/obj/effect/landmark/start/chemist,
+/turf/open/floor/plasteel/white,
+/area/medical/chemistry)
"ckq" = (
/obj/structure/closet/crate/hydroponics,
/obj/machinery/light_switch{
@@ -53886,9 +54198,15 @@
/turf/open/floor/plasteel,
/area/engine/teg_cold)
"ckD" = (
-/obj/machinery/chem_master,
-/obj/effect/turf_decal/trimline/yellow/filled/end,
-/turf/open/floor/plasteel/showroomfloor,
+/obj/effect/turf_decal/tile/yellow{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/blue,
+/obj/structure/sign/warning/fire{
+ pixel_x = 32;
+ pixel_y = -32
+ },
+/turf/open/floor/plasteel/white,
/area/medical/chemistry)
"ckE" = (
/obj/effect/decal/cleanable/dirt,
@@ -54134,6 +54452,17 @@
},
/turf/open/floor/plasteel/dark,
/area/science/xenobiology)
+"clc" = (
+/obj/machinery/vending/wardrobe/chem_wardrobe,
+/obj/effect/turf_decal/tile/blue,
+/obj/effect/turf_decal/tile/yellow{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/yellow{
+ dir = 4
+ },
+/turf/open/floor/plasteel/white,
+/area/medical/chemistry)
"cld" = (
/obj/effect/turf_decal/tile/neutral{
dir = 1
@@ -54760,6 +55089,14 @@
},
/turf/open/floor/plasteel/grimy,
/area/crew_quarters/bar)
+"cmB" = (
+/obj/structure/window/reinforced/spawner/west,
+/obj/effect/turf_decal/delivery,
+/obj/machinery/door/window/northright{
+ name = "Emergency Shower"
+ },
+/turf/open/floor/plasteel,
+/area/medical/chemistry)
"cmC" = (
/obj/machinery/atmospherics/pipe/simple/cyan/hidden{
dir = 4
@@ -54856,6 +55193,23 @@
},
/turf/open/floor/plasteel,
/area/quartermaster/miningoffice)
+"cmK" = (
+/obj/structure/disposalpipe/segment,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/orange/hidden,
+/obj/effect/turf_decal/tile/yellow{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 1
+ },
+/obj/machinery/light{
+ dir = 8
+ },
+/turf/open/floor/plasteel/white,
+/area/medical/chemistry)
"cmL" = (
/obj/effect/landmark/blobstart,
/turf/open/floor/plating,
@@ -54980,12 +55334,20 @@
/turf/open/floor/plasteel,
/area/security/checkpoint/supply)
"cmU" = (
-/obj/machinery/camera{
- c_tag = "Medbay - Lobby";
- network = list("ss13","rd")
+/obj/structure/disposalpipe/segment,
+/obj/structure/cable{
+ icon_state = "1-2"
},
+/obj/machinery/atmospherics/pipe/simple/orange/hidden,
+/obj/effect/turf_decal/tile/yellow{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/blue,
/turf/open/floor/plasteel/white,
-/area/medical/medbay/lobby)
+/area/medical/chemistry)
"cmV" = (
/obj/structure/disposalpipe/segment,
/obj/structure/cable{
@@ -55152,10 +55514,16 @@
name = "Research Observatory"
})
"cnk" = (
-/obj/structure/disposalpipe/segment,
-/obj/structure/lattice,
-/turf/open/space/basic,
-/area/space/nearstation)
+/obj/machinery/light,
+/obj/effect/turf_decal/tile/yellow{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/yellow{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/blue,
+/turf/open/floor/plasteel/white,
+/area/medical/chemistry)
"cnl" = (
/obj/machinery/atmospherics/pipe/simple/general/visible{
dir = 4
@@ -55291,6 +55659,21 @@
/area/science/server{
name = "Computer Core"
})
+"cnz" = (
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/manifold/cyan/hidden{
+ dir = 1
+ },
+/obj/structure/sign/departments/chemistry{
+ pixel_y = 32
+ },
+/turf/open/floor/plasteel/white,
+/area/medical/medbay/central)
"cnA" = (
/obj/effect/turf_decal/tile/brown{
dir = 4
@@ -55646,6 +56029,21 @@
},
/turf/open/floor/plasteel,
/area/engine/teg_hot)
+"col" = (
+/obj/effect/turf_decal/tile/blue,
+/obj/effect/turf_decal/tile/yellow{
+ dir = 4
+ },
+/turf/open/floor/plasteel/white,
+/area/medical/chemistry)
+"com" = (
+/obj/machinery/chem_master,
+/obj/effect/turf_decal/stripes/end{
+ dir = 8
+ },
+/obj/structure/window/reinforced/spawner,
+/turf/open/floor/plasteel,
+/area/medical/chemistry)
"con" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -55731,6 +56129,12 @@
},
/turf/open/floor/plasteel,
/area/crew_quarters/heads/chief)
+"cov" = (
+/obj/structure/sign/warning/nosmoking{
+ pixel_y = -32
+ },
+/turf/closed/wall,
+/area/medical/medbay/central)
"cow" = (
/obj/machinery/door/airlock/external/glass{
name = "Asteroid Mining Access";
@@ -55750,6 +56154,16 @@
},
/turf/open/floor/plasteel,
/area/quartermaster/miningoffice)
+"cox" = (
+/obj/machinery/atmospherics/pipe/simple/orange/hidden{
+ dir = 5
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue,
+/turf/open/floor/plasteel/white,
+/area/medical/medbay/central)
"coy" = (
/obj/structure/sign/poster/official/safety_internals{
pixel_x = -32
@@ -55855,16 +56269,25 @@
/turf/open/floor/engine,
/area/science/explab)
"coH" = (
-/obj/effect/spawner/structure/window/reinforced,
-/obj/machinery/atmospherics/pipe/simple/orange/hidden{
- dir = 10
+/obj/machinery/door/firedoor,
+/obj/structure/disposalpipe/segment{
+ dir = 4
},
-/obj/machinery/door/poddoor/shutters/preopen{
- id = "robotics2";
- name = "robotics lab shutters"
+/obj/structure/cable{
+ icon_state = "4-8"
},
-/turf/open/floor/plating,
-/area/router/medsci)
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/cyan/hidden{
+ dir = 4
+ },
+/obj/machinery/door/airlock/research{
+ name = "Robotics Lab";
+ req_access_txt = "29"
+ },
+/turf/open/floor/plasteel/dark,
+/area/science/robotics/lab)
"coI" = (
/obj/structure/closet/secure_closet/medical1,
/obj/effect/turf_decal/tile/yellow{
@@ -56391,6 +56814,14 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/aft)
+"cpI" = (
+/obj/machinery/chem_dispenser,
+/obj/effect/turf_decal/stripes/end{
+ dir = 4
+ },
+/obj/structure/window/reinforced/spawner,
+/turf/open/floor/plasteel,
+/area/medical/chemistry)
"cpJ" = (
/turf/closed/wall/r_wall/rust,
/area/quartermaster/office)
@@ -57178,6 +57609,29 @@
/obj/structure/reagent_dispensers/fueltank,
/turf/open/floor/plasteel/dark,
/area/science/robotics/mechbay)
+"crg" = (
+/obj/machinery/door/firedoor,
+/obj/structure/disposalpipe/segment,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/orange/hidden,
+/obj/effect/turf_decal/tile/yellow{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/yellow{
+ dir = 8
+ },
+/obj/machinery/door/airlock/medical/glass{
+ name = "Chemistry Lab";
+ req_access_txt = "5; 33"
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/blue,
+/turf/open/floor/plasteel/white,
+/area/medical/chemistry)
"crh" = (
/obj/machinery/mass_driver{
dir = 1;
@@ -57231,6 +57685,15 @@
},
/turf/open/floor/plating,
/area/engine/teg_cold)
+"crn" = (
+/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "chem1";
+ name = "chem lab shutters"
+ },
+/obj/machinery/atmospherics/pipe/simple/cyan/hidden,
+/turf/open/floor/plating,
+/area/medical/chemistry)
"cro" = (
/turf/closed/wall/r_wall/rust,
/area/maintenance/starboard/aft)
@@ -57989,8 +58452,22 @@
/turf/open/floor/plasteel,
/area/hallway/primary/aft)
"csK" = (
-/turf/closed/wall/r_wall,
-/area/medical/chemistry)
+/obj/structure/table/reinforced,
+/obj/effect/turf_decal/tile/blue{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/blue,
+/obj/machinery/door/window/northright{
+ name = "Medbay Desk";
+ req_access_txt = "5"
+ },
+/obj/item/clipboard,
+/obj/item/clothing/glasses/hud/health,
+/obj/machinery/atmospherics/pipe/simple/orange/hidden,
+/obj/item/pen,
+/obj/item/clothing/glasses/hud/health,
+/turf/open/floor/plasteel/white,
+/area/medical/medbay/lobby)
"csL" = (
/obj/effect/landmark/xmastree/rdrod,
/turf/open/floor/carpet{
@@ -58817,16 +59294,14 @@
/turf/open/floor/plating,
/area/hallway/primary/aft)
"cup" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/structure/closet/secure_closet/chemical,
-/obj/effect/turf_decal/trimline/yellow/filled/line,
-/obj/effect/turf_decal/trimline/yellow/filled/line{
+/obj/effect/turf_decal/tile/blue{
dir = 1
},
-/turf/open/floor/plasteel/showroomfloor,
-/area/medical/chemistry)
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/turf/open/floor/plasteel/white,
+/area/medical/medbay/central)
"cuq" = (
/obj/effect/turf_decal/tile/neutral{
dir = 4
@@ -59360,19 +59835,12 @@
/turf/open/floor/plasteel/dark/side,
/area/science/robotics/lab)
"cvu" = (
-/obj/structure/cable{
- icon_state = "4-8"
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
},
-/obj/structure/disposalpipe/trunk{
- dir = 1
- },
-/obj/machinery/disposal/bin,
-/obj/effect/turf_decal/trimline/yellow/filled/line,
-/obj/effect/turf_decal/trimline/yellow/filled/line{
- dir = 1
- },
-/turf/open/floor/plasteel/showroomfloor,
-/area/medical/chemistry)
+/obj/effect/turf_decal/tile/blue,
+/turf/open/floor/plasteel/white,
+/area/medical/medbay/central)
"cvv" = (
/obj/effect/turf_decal/tile/blue,
/obj/effect/turf_decal/tile/blue{
@@ -59687,19 +60155,24 @@
/turf/open/floor/plasteel/dark/side,
/area/science/robotics/lab)
"cvR" = (
-/obj/machinery/firealarm{
- dir = 8;
- pixel_x = 26
+/obj/effect/turf_decal/tile/blue{
+ dir = 1
},
-/obj/effect/turf_decal/trimline/yellow/filled/line{
- dir = 8
+/obj/structure/disposalpipe/sorting/mail/flip{
+ sortType = 23
},
-/obj/effect/turf_decal/trimline/yellow/filled/line{
+/obj/machinery/atmospherics/pipe/simple/cyan/hidden{
dir = 4
},
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
/obj/machinery/atmospherics/pipe/simple/orange/hidden,
-/turf/open/floor/plasteel/showroomfloor,
-/area/medical/chemistry)
+/obj/effect/turf_decal/tile/yellow{
+ dir = 4
+ },
+/turf/open/floor/plasteel/white,
+/area/medical/medbay/central)
"cvS" = (
/obj/machinery/vending/wardrobe/robo_wardrobe,
/turf/open/floor/plasteel/dark,
@@ -60024,18 +60497,21 @@
/turf/open/floor/plasteel,
/area/engine/workshop)
"cws" = (
+/obj/structure/disposalpipe/segment,
/obj/structure/cable{
- icon_state = "4-8"
+ icon_state = "1-2"
},
-/obj/machinery/vending/wardrobe/chem_wardrobe,
-/obj/effect/turf_decal/trimline/yellow/filled/line,
-/obj/effect/turf_decal/trimline/yellow/filled/line{
+/obj/machinery/atmospherics/pipe/simple/orange/hidden,
+/obj/effect/turf_decal/tile/yellow{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/blue{
dir = 1
},
-/obj/machinery/atmospherics/pipe/simple/orange/hidden{
- dir = 6
+/obj/machinery/light_switch{
+ pixel_x = -24
},
-/turf/open/floor/plasteel/showroomfloor,
+/turf/open/floor/plasteel/white,
/area/medical/chemistry)
"cwt" = (
/obj/structure/disposalpipe/segment,
@@ -60327,26 +60803,40 @@
/turf/open/floor/plasteel,
/area/quartermaster/warehouse)
"cxf" = (
-/obj/machinery/atmospherics/pipe/simple/cyan/hidden{
+/obj/effect/turf_decal/tile/blue{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment{
dir = 4
},
-/turf/open/floor/plasteel/dark,
-/area/medical/chemistry)
+/obj/effect/turf_decal/tile/yellow{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/manifold/cyan/hidden,
+/turf/open/floor/plasteel/white,
+/area/medical/medbay/central)
"cxg" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+/obj/effect/turf_decal/tile/blue{
dir = 1
},
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/obj/machinery/atmospherics/pipe/simple/cyan/hidden{
dir = 4
},
-/turf/open/floor/plasteel/dark,
-/area/medical/chemistry)
-"cxh" = (
-/obj/machinery/chem_dispenser,
-/obj/effect/turf_decal/trimline/yellow/filled/end{
- dir = 1
+/obj/effect/turf_decal/tile/yellow{
+ dir = 4
},
-/turf/open/floor/plasteel/showroomfloor,
+/turf/open/floor/plasteel/white,
+/area/medical/medbay/central)
+"cxh" = (
+/obj/effect/turf_decal/tile/blue,
+/obj/effect/turf_decal/tile/yellow{
+ dir = 4
+ },
+/obj/effect/landmark/start/chemist,
+/turf/open/floor/plasteel/white,
/area/medical/chemistry)
"cxi" = (
/obj/structure/rack,
@@ -60983,19 +61473,11 @@
/turf/open/floor/plating,
/area/maintenance/aft)
"cyu" = (
-/obj/structure/disposalpipe/segment,
-/obj/structure/cable{
- icon_state = "2-4"
+/obj/structure/closet/wardrobe/chemistry_white{
+ anchored = 1
},
-/obj/machinery/camera{
- c_tag = "Aft Maintenance - Port";
- pixel_x = 22
- },
-/obj/machinery/atmospherics/pipe/simple/orange/hidden{
- dir = 10
- },
-/turf/open/floor/plating,
-/area/maintenance/aft)
+/turf/open/floor/plasteel/white,
+/area/medical/chemistry)
"cyv" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 4
@@ -61059,13 +61541,38 @@
/turf/open/floor/plasteel/white,
/area/medical/medbay/lobby)
"cyB" = (
-/obj/structure/disposalpipe/segment,
-/obj/structure/cable{
- icon_state = "1-2"
+/obj/effect/turf_decal/tile/blue{
+ dir = 1
},
-/obj/machinery/atmospherics/pipe/simple/orange/hidden,
-/turf/open/floor/plating,
-/area/maintenance/aft)
+/obj/machinery/light{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 10
+ },
+/obj/machinery/atmospherics/pipe/simple/cyan/hidden{
+ dir = 4
+ },
+/obj/structure/sign/poster/official/medical_green_cross{
+ pixel_y = 32
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/turf/open/floor/plasteel/white,
+/area/medical/medbay/central)
+"cyC" = (
+/obj/effect/turf_decal/tile/blue{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/cyan/hidden{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/turf/open/floor/plasteel/white,
+/area/medical/medbay/central)
"cyD" = (
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/public/glass{
@@ -61080,50 +61587,32 @@
/turf/open/floor/plasteel/white,
/area/medical/medbay/lobby)
"cyF" = (
-/obj/structure/cable{
- icon_state = "1-4"
- },
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 4
- },
+/obj/structure/closet/secure_closet/chemical,
/turf/open/floor/plasteel/white,
-/area/medical/medbay/lobby)
+/area/medical/chemistry)
"cyG" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/atmospherics/pipe/simple/orange/hidden{
- dir = 8
- },
-/turf/open/floor/plasteel/white,
-/area/medical/medbay/lobby)
+/obj/machinery/chem_master,
+/turf/open/floor/plasteel/showroomfloor,
+/area/medical/medbay/central)
"cyH" = (
-/obj/machinery/door/firedoor,
-/obj/machinery/door/airlock/maintenance{
- name = "Aft Maintenance";
- req_access_txt = "12"
+/obj/effect/turf_decal/tile/blue{
+ dir = 1
},
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/atmospherics/pipe/simple/orange/hidden{
- dir = 8
- },
-/turf/open/floor/plating,
-/area/medical/medbay/lobby)
-"cyI" = (
-/obj/structure/disposalpipe/segment,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/structure/cable{
- icon_state = "1-8"
- },
-/obj/machinery/atmospherics/pipe/manifold/orange/hidden{
+/obj/machinery/atmospherics/pipe/simple/cyan/hidden{
dir = 4
},
-/turf/open/floor/plating,
-/area/maintenance/aft)
+/turf/open/floor/plasteel/white,
+/area/medical/medbay/central)
+"cyI" = (
+/obj/effect/turf_decal/tile/blue,
+/obj/machinery/atmospherics/pipe/simple/cyan/hidden{
+ dir = 10
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/turf/open/floor/plasteel/white,
+/area/medical/medbay/central)
"cyJ" = (
/obj/effect/turf_decal/tile/green{
dir = 8
@@ -61140,41 +61629,37 @@
/turf/open/floor/plasteel/white,
/area/medical/medbay/lobby)
"cyL" = (
-/obj/structure/closet/cardboard,
-/obj/structure/disposalpipe/segment{
+/obj/effect/turf_decal/tile/blue,
+/obj/machinery/atmospherics/pipe/simple/cyan/hidden{
dir = 5
},
-/obj/structure/cable{
- icon_state = "1-4"
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/orange/hidden{
- dir = 5
- },
-/turf/open/floor/plating,
-/area/maintenance/aft)
+/turf/open/floor/plasteel/white,
+/area/medical/medbay/central)
"cyM" = (
-/obj/structure/disposalpipe/segment{
- dir = 10
- },
-/obj/structure/cable{
- icon_state = "2-8"
- },
-/obj/machinery/atmospherics/pipe/simple/orange/hidden{
- dir = 10
- },
-/turf/open/floor/plating,
-/area/maintenance/aft)
-"cyN" = (
-/obj/machinery/door/firedoor,
-/obj/machinery/atmospherics/pipe/simple/orange/hidden{
+/obj/structure/closet/secure_closet/personal/patient,
+/obj/effect/turf_decal/tile/blue,
+/obj/effect/turf_decal/tile/purple{
dir = 8
},
-/obj/machinery/door/airlock/maintenance{
- name = "Chemistry Maintenance";
- req_access_txt = "5; 33"
+/obj/structure/disposalpipe/segment{
+ dir = 4
},
-/turf/open/floor/plating,
-/area/medical/chemistry)
+/obj/structure/window/reinforced/spawner,
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/turf/open/floor/plasteel/white,
+/area/medical/medbay/central)
+"cyN" = (
+/obj/machinery/chem_dispenser/apothecary,
+/obj/machinery/airalarm{
+ pixel_y = 24
+ },
+/turf/open/floor/plasteel/showroomfloor,
+/area/medical/medbay/central)
"cyO" = (
/obj/structure/disposalpipe/segment{
dir = 6
@@ -61539,15 +62024,22 @@
/turf/open/floor/plasteel/white,
/area/crew_quarters/heads/cmo)
"czv" = (
-/obj/machinery/door/firedoor,
-/obj/machinery/atmospherics/pipe/simple/orange/hidden{
+/obj/structure/disposalpipe/segment,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/orange/hidden,
+/obj/effect/turf_decal/tile/yellow{
dir = 8
},
-/obj/machinery/door/airlock/medical/glass{
- name = "Chemistry Lab";
- req_access_txt = "5; 33"
+/obj/effect/turf_decal/tile/blue{
+ dir = 1
},
-/turf/open/floor/plasteel/dark,
+/obj/machinery/firealarm{
+ dir = 4;
+ pixel_x = -28
+ },
+/turf/open/floor/plasteel/white,
/area/medical/chemistry)
"czw" = (
/obj/machinery/atmospherics/pipe/simple/orange/hidden{
@@ -61595,18 +62087,12 @@
/turf/open/floor/plasteel/dark,
/area/crew_quarters/heads/hor)
"czB" = (
-/obj/machinery/door/firedoor,
-/obj/machinery/door/airlock/maintenance{
- name = "Medbay Maintenance";
- req_access_txt = "5"
+/obj/effect/turf_decal/tile/yellow{
+ dir = 4
},
-/obj/structure/disposalpipe/segment,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/pipe/simple/orange/hidden,
-/turf/open/floor/plating,
-/area/maintenance/aft)
+/obj/effect/turf_decal/tile/blue,
+/turf/open/floor/plasteel/white,
+/area/medical/chemistry)
"czC" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
dir = 1
@@ -61640,27 +62126,9 @@
/turf/open/floor/plasteel/white,
/area/medical/medbay/central)
"czF" = (
-/obj/effect/turf_decal/tile/blue{
- dir = 4
- },
-/obj/effect/turf_decal/tile/blue{
- dir = 1
- },
-/obj/structure/disposalpipe/sorting/mail/flip{
- sortType = 23
- },
-/obj/machinery/atmospherics/pipe/simple/cyan/hidden{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/pipe/simple/orange/hidden,
-/obj/structure/cable{
- icon_state = "1-4"
- },
+/obj/machinery/atmospherics/components/unary/vent_pump/on,
/turf/open/floor/plasteel/white,
-/area/medical/medbay/central)
+/area/medical/chemistry)
"czG" = (
/obj/effect/landmark/event_spawn,
/turf/open/floor/plasteel/showroomfloor,
@@ -61710,7 +62178,15 @@
/turf/open/floor/plasteel/white,
/area/medical/genetics)
"czM" = (
-/turf/open/floor/plasteel/dark,
+/obj/machinery/requests_console{
+ department = "Chemistry";
+ departmentType = 2;
+ name = "Chemistry RC";
+ pixel_x = 30;
+ pixel_y = 0;
+ receive_ore_updates = 1
+ },
+/turf/open/floor/plasteel/white,
/area/medical/chemistry)
"czN" = (
/obj/structure/closet/crate/trashcart,
@@ -61736,12 +62212,12 @@
/turf/open/floor/plating,
/area/maintenance/disposal)
"czP" = (
-/obj/structure/cable{
- icon_state = "1-2"
+/obj/machinery/atmospherics/components/unary/vent_pump/on,
+/obj/machinery/light/small{
+ dir = 8
},
-/obj/machinery/atmospherics/pipe/simple/cyan/hidden,
-/turf/open/floor/plasteel/dark,
-/area/medical/chemistry)
+/turf/open/floor/plasteel/showroomfloor,
+/area/medical/medbay/central)
"czQ" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/disposalpipe/segment,
@@ -61818,28 +62294,14 @@
/turf/open/floor/plasteel,
/area/maintenance/disposal)
"czW" = (
-/obj/machinery/door/firedoor,
-/obj/effect/turf_decal/tile/blue,
-/obj/effect/turf_decal/tile/blue{
- dir = 1
- },
-/obj/effect/turf_decal/tile/purple{
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
dir = 4
},
-/obj/effect/turf_decal/tile/purple{
+/obj/structure/chair/office/light{
dir = 8
},
-/obj/machinery/atmospherics/pipe/simple/cyan/hidden,
-/obj/machinery/door/airlock/medical/glass{
- name = "Chemistry Lab";
- req_access_txt = "5; 33"
- },
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/pipe/simple/cyan/hidden,
-/turf/open/floor/plasteel/white,
-/area/medical/chemistry)
+/turf/open/floor/plasteel/showroomfloor,
+/area/medical/medbay/central)
"czX" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/atmospherics/pipe/simple/orange/hidden,
@@ -61898,17 +62360,11 @@
/turf/open/floor/plasteel,
/area/maintenance/disposal)
"cAc" = (
-/obj/effect/turf_decal/tile/blue{
- dir = 1
+/obj/machinery/atmospherics/pipe/simple/orange/hidden{
+ dir = 8
},
-/obj/effect/turf_decal/tile/purple{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/manifold/cyan/hidden,
-/obj/structure/cable{
- icon_state = "1-8"
- },
-/turf/open/floor/plasteel/white,
+/obj/effect/spawner/structure/window,
+/turf/open/floor/plating,
/area/medical/medbay/central)
"cAd" = (
/obj/structure/disposalpipe/segment,
@@ -62033,23 +62489,17 @@
/turf/open/floor/plating,
/area/maintenance/disposal)
"cAo" = (
-/obj/structure/table/reinforced,
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
/obj/effect/turf_decal/tile/blue{
dir = 1
},
-/obj/effect/turf_decal/tile/blue,
-/obj/machinery/door/window/northright{
- name = "Medbay Desk";
- req_access_txt = "5"
+/obj/machinery/atmospherics/pipe/simple/orange/hidden{
+ dir = 8
},
-/obj/item/clipboard,
-/obj/item/clothing/glasses/hud/health,
-/obj/machinery/atmospherics/pipe/simple/orange/hidden,
-/obj/item/paper/fluff/cogstation/sleepers,
-/obj/item/pen,
-/obj/item/clothing/glasses/hud/health,
/turf/open/floor/plasteel/white,
-/area/medical/medbay/lobby)
+/area/medical/medbay/central)
"cAp" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/atmospherics/pipe/simple/cyan/hidden{
@@ -64080,6 +64530,40 @@
},
/turf/open/floor/engine,
/area/gateway)
+"cDL" = (
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue,
+/obj/machinery/atmospherics/pipe/manifold/orange/hidden{
+ dir = 4
+ },
+/obj/machinery/camera{
+ c_tag = "Medbay - Apothecary";
+ dir = 8;
+ network = list("ss13","medbay");
+ pixel_y = -22
+ },
+/turf/open/floor/plasteel/white,
+/area/medical/medbay/central)
+"cDM" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/obj/machinery/atmospherics/pipe/simple/cyan/hidden,
+/obj/structure/table/glass,
+/obj/item/book/manual/wiki/chemistry,
+/obj/item/book/manual/wiki/chemistry{
+ pixel_x = 3;
+ pixel_y = 3
+ },
+/obj/item/clothing/glasses/science,
+/obj/item/clothing/glasses/science{
+ pixel_x = 2;
+ pixel_y = 4
+ },
+/turf/open/floor/plasteel,
+/area/medical/chemistry)
"cDN" = (
/obj/machinery/atmospherics/pipe/simple/orange/hidden{
dir = 8
@@ -65499,25 +65983,13 @@
/turf/open/floor/plasteel/dark,
/area/science/robotics/lab)
"cFX" = (
-/obj/machinery/door/firedoor,
-/obj/structure/disposalpipe/segment{
- dir = 4
+/obj/machinery/chem_heater,
+/obj/machinery/firealarm{
+ dir = 8;
+ pixel_x = 26
},
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/effect/mapping_helpers/airlock/cyclelink_helper{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/cyan/hidden{
- dir = 4
- },
-/obj/machinery/door/airlock/research{
- name = "Robotics Lab";
- req_access_txt = "29"
- },
-/turf/open/floor/plasteel/dark,
-/area/router/medsci)
+/turf/open/floor/plasteel/showroomfloor,
+/area/medical/medbay/central)
"cFY" = (
/turf/open/floor/plasteel,
/area/router/air)
@@ -65985,6 +66457,14 @@
/obj/machinery/portable_atmospherics/pump,
/turf/open/floor/engine,
/area/science/storage)
+"cGI" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/structure/chair/office/light,
+/obj/effect/landmark/start/chemist,
+/turf/open/floor/plasteel,
+/area/medical/chemistry)
"cGJ" = (
/obj/machinery/portable_atmospherics/canister/oxygen,
/obj/effect/turf_decal/stripes/line{
@@ -66054,6 +66534,17 @@
},
/turf/open/floor/plasteel/white,
/area/science/circuit)
+"cGU" = (
+/obj/machinery/door/firedoor,
+/obj/machinery/atmospherics/pipe/simple/orange/hidden{
+ dir = 8
+ },
+/obj/machinery/door/airlock/medical{
+ name = "Morgue";
+ req_access_txt = "5;6"
+ },
+/turf/open/floor/plasteel/showroomfloor,
+/area/medical/morgue)
"cGV" = (
/obj/machinery/portable_atmospherics/canister/toxins,
/obj/effect/turf_decal/delivery,
@@ -66572,6 +67063,19 @@
/obj/machinery/atmospherics/pipe/simple/cyan/hidden,
/turf/open/floor/plasteel,
/area/security/checkpoint/supply)
+"cHW" = (
+/obj/machinery/door/firedoor,
+/obj/effect/turf_decal/delivery,
+/obj/structure/table/reinforced,
+/obj/machinery/door/window/eastright{
+ base_state = "left";
+ dir = 2;
+ icon_state = "left";
+ name = "Chemistry Desk";
+ req_access_txt = "33"
+ },
+/turf/open/floor/plasteel,
+/area/medical/chemistry)
"cHX" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -67895,24 +68399,14 @@
/turf/open/floor/plasteel/white,
/area/medical/medbay/lobby)
"cKi" = (
-/obj/machinery/button/door{
- id = "chem1";
- name = "Shutters Control Button";
- pixel_x = -8;
- pixel_y = 24;
- req_access_txt = "29"
- },
-/obj/effect/turf_decal/trimline/yellow/filled/line{
- dir = 5
- },
-/obj/effect/turf_decal/trimline/yellow/filled/corner{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/manifold/orange/hidden{
- dir = 1
+/obj/machinery/door/firedoor,
+/obj/machinery/atmospherics/pipe/simple/cyan/hidden,
+/obj/machinery/door/airlock/medical{
+ name = "Apothecary";
+ req_access_txt = "5"
},
/turf/open/floor/plasteel/showroomfloor,
-/area/medical/chemistry)
+/area/medical/medbay/central)
"cKj" = (
/obj/structure/closet/secure_closet/CMO,
/obj/effect/turf_decal/tile/blue,
@@ -68143,6 +68637,24 @@
/obj/structure/closet/wardrobe/yellow,
/turf/open/floor/plasteel,
/area/hallway/primary/central)
+"cKH" = (
+/obj/effect/turf_decal/tile/blue{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/cyan/hidden{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/yellow{
+ dir = 4
+ },
+/obj/machinery/airalarm{
+ pixel_y = 24
+ },
+/turf/open/floor/plasteel/white,
+/area/medical/medbay/central)
"cKI" = (
/obj/effect/turf_decal/stripes/line{
dir = 8
@@ -69407,17 +69919,24 @@
/turf/open/floor/plating/airless,
/area/router/aux)
"cNJ" = (
-/obj/structure/disposalpipe/segment,
-/obj/structure/cable{
- icon_state = "1-2"
+/obj/effect/turf_decal/tile/blue{
+ dir = 1
},
-/obj/structure/cable{
- icon_state = "1-8"
+/obj/structure/disposalpipe/segment{
+ dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/orange/hidden,
-/obj/effect/landmark/event_spawn,
-/turf/open/floor/plating,
-/area/maintenance/aft)
+/obj/machinery/atmospherics/pipe/manifold/cyan/hidden{
+ dir = 1
+ },
+/obj/machinery/camera{
+ c_tag = "Medbay - Starboard";
+ network = list("ss13","rd")
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/turf/open/floor/plasteel/white,
+/area/medical/medbay/central)
"cNK" = (
/obj/machinery/atmospherics/components/unary/outlet_injector/on{
dir = 4
@@ -69499,6 +70018,19 @@
/obj/item/stack/sheet/plasteel/fifty,
/turf/open/floor/plating,
/area/quartermaster/miningdock/airless)
+"cNV" = (
+/obj/effect/turf_decal/tile/blue{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/manifold/cyan/hidden,
+/turf/open/floor/plasteel/white,
+/area/medical/medbay/central)
"cNW" = (
/obj/structure/lattice/catwalk,
/obj/machinery/camera{
@@ -70192,30 +70724,6 @@
"cPw" = (
/turf/open/floor/plasteel/dark,
/area/science/robotics/mechbay)
-"cPx" = (
-/obj/effect/turf_decal/tile/blue{
- dir = 1
- },
-/obj/machinery/light{
- dir = 1
- },
-/obj/effect/turf_decal/tile/purple{
- dir = 4
- },
-/obj/structure/disposalpipe/segment{
- dir = 10
- },
-/obj/machinery/atmospherics/pipe/simple/cyan/hidden{
- dir = 4
- },
-/obj/structure/sign/poster/official/medical_green_cross{
- pixel_y = 32
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/plasteel/white,
-/area/medical/medbay/central)
"cPy" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -70412,16 +70920,6 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
-"cPP" = (
-/obj/effect/turf_decal/trimline/yellow/filled/line{
- dir = 8
- },
-/obj/effect/turf_decal/trimline/yellow/filled/line{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/orange/hidden,
-/turf/open/floor/plasteel/showroomfloor,
-/area/medical/chemistry)
"cPQ" = (
/obj/structure/disposalpipe/segment{
dir = 6
@@ -94786,7 +95284,7 @@ bYv
bYv
cio
cct
-caz
+cct
bOO
cHq
cHs
@@ -95043,7 +95541,7 @@ cct
bYo
ckk
bYF
-bBP
+cct
bFu
bIc
btn
@@ -95300,7 +95798,7 @@ bYv
bYp
bYx
cPw
-bBQ
+caz
ccd
bId
cpw
@@ -95557,7 +96055,7 @@ bYv
bYq
cPv
bYH
-bsM
+bYv
bDT
bIe
bYB
@@ -95814,7 +96312,7 @@ bYv
cgr
bYy
crf
-bsM
+bYv
bFx
bIf
bto
@@ -96071,7 +96569,7 @@ bYv
bYv
cwb
bYv
-bsM
+bYv
csV
bIe
bYB
@@ -97104,10 +97602,10 @@ bFC
bIj
ccd
bJD
-btv
-cFX
ccm
-cOI
+coH
+bJH
+bIk
cOI
cOI
cOI
@@ -97361,7 +97859,7 @@ clv
bsU
ccd
bJE
-btv
+ccm
cOx
cOA
cOE
@@ -97618,7 +98116,7 @@ bZT
bsU
ccd
ckb
-coH
+cdW
cOy
cOB
cOF
@@ -97875,7 +98373,7 @@ cum
bIj
ccd
cvS
-cOI
+bIk
cOz
cOC
cOG
@@ -98132,7 +98630,7 @@ bIk
bIk
ccB
bJH
-cOI
+bIk
cGb
bRI
cOH
@@ -99152,7 +99650,7 @@ bRJ
bth
bTB
cek
-cAo
+csK
cKk
cKl
cKm
@@ -100690,9 +101188,9 @@ bXi
bXq
caQ
bXC
-bXL
-cyF
-bst
+bvK
+bHI
+bYK
buK
bst
bst
@@ -100947,9 +101445,9 @@ buF
bDm
bqe
ceY
-bst
-cyG
-bst
+bwf
+bHJ
+cbr
cDE
cDG
cEa
@@ -101204,9 +101702,9 @@ bbh
bbh
bqm
bqm
-cdW
-cyG
+byw
bst
+cbr
cDF
cDJ
cKC
@@ -101461,9 +101959,9 @@ bbh
bpA
bXz
bqm
-cmU
-cyG
-bst
+byD
+bHJ
+cbs
buS
cDZ
czg
@@ -101716,11 +102214,11 @@ ccp
cJe
bbh
bpB
-bPw
+btv
bqm
-bsG
-cyG
-bsG
+bzJ
+bst
+cbK
buS
bAJ
czh
@@ -101973,11 +102471,11 @@ ccw
csM
cyo
cyt
-bPw
-bqm
-bqm
-cyH
-bqm
+blU
+bqz
+bAD
+bIi
+bBP
buS
caR
czi
@@ -102229,18 +102727,18 @@ cIH
cgv
coE
bxM
-cyu
-cNJ
-cyB
-cyB
-cyI
-cyL
+bau
+bXt
+brH
+bAE
+bIt
+cdX
buS
buS
buS
buS
buS
-bFZ
+cnz
cEZ
bJa
aKZ
@@ -102486,18 +102984,18 @@ cIF
cgB
bqr
bbh
+bga
+bqs
+brJ
+bBs
+bIL
ciQ
-bpD
-bpD
-bpD
-bpD
-cyM
-cyB
-cyB
-cyB
-cyB
-czB
-czF
+cmK
+cws
+czv
+cmU
+crg
+cvR
cFd
bEl
aMm
@@ -102744,17 +103242,17 @@ cgB
bqx
bbh
bPw
-bsZ
-bsZ
-bsZ
-bsZ
-csK
-csK
-csK
-csK
-csK
-csK
-bHC
+bqz
+bqz
+bzA
+bFE
+bFG
+col
+cxh
+czB
+cnk
+bqz
+cKH
cFe
cFk
cFm
@@ -103001,17 +103499,17 @@ cgB
bqr
bbh
bPw
-bsZ
-bim
-bim
-bim
-csK
-bQp
-byw
+bqz
+bqq
bzG
-bAC
-csK
-bHG
+bFZ
+ckp
+com
+cyu
+czF
+cDM
+crn
+cxf
cFf
bEl
aOF
@@ -103258,17 +103756,17 @@ cgB
bqr
bbh
bPw
-bsZ
-bim
-bim
-bim
-bul
-bvK
+bqz
+brK
+bCf
+bJd
+ckD
+cpI
+cyF
czM
-czM
-czM
-bsN
-bHG
+cGI
+cHW
+cxg
cFf
bJb
bJJ
@@ -103515,17 +104013,17 @@ cgB
bqr
bcT
bPw
-bsZ
-bim
-bim
-bim
-bul
-bwf
-byD
-brK
-bAE
-bsQ
-bHE
+bqz
+bsL
+bzG
+bFG
+clc
+bqz
+bqz
+bqz
+bqz
+bqz
+cNJ
cAm
cAt
cAv
@@ -103769,20 +104267,20 @@ bbh
bdF
cIL
ciF
-bqz
-bcT
-bPw
-bsZ
-bim
-bim
-bim
-bul
-cup
-cxf
-czM
-czM
+aYG
+bdu
+biU
+brF
bsN
-bHG
+bCg
+bHC
+cmB
+bqz
+cyG
+czP
+bBQ
+cKi
+cNV
cFf
bJc
bJL
@@ -104029,17 +104527,17 @@ ciW
bqC
bdu
bXt
-bqs
-cnk
-cnk
-cnk
csi
-cvu
-cxf
-cxh
-ckD
-csK
-cPx
+bsP
+bAC
+bHC
+bIM
+bqz
+cyN
+czW
+cFX
+bRI
+cyB
cFh
bJe
cRb
@@ -104286,17 +104784,17 @@ cjV
bdu
bdu
bXu
-bsZ
-bim
-bim
-bim
-bul
-cws
-cxg
-czM
-bBs
-csK
-bHI
+bqz
+bsQ
+bCY
+bHE
+bqz
+bqz
+bMj
+cAc
+cov
+bMj
+cyC
cFf
btp
bJN
@@ -104543,17 +105041,17 @@ cgB
bTv
bcT
bQE
-bsZ
-bim
-bim
-bim
-bul
-brH
-brJ
-czP
-czP
-czW
-cAc
+bqz
+bqz
+bqz
+bJf
+bqz
+caj
+cdY
+cAo
+cdY
+cup
+cyH
cFi
bMF
bNF
@@ -104800,19 +105298,19 @@ cgB
bYW
bcT
bQE
-bsZ
-bim
-bim
-bim
-csK
-cKi
-cvR
-cPP
-bsL
-bul
-bHJ
-bIt
-bJf
+bsV
+bsG
+bHD
+bHD
+bMj
+caH
+chV
+cDL
+cox
+cvu
+cyI
+cyL
+cyM
bJO
cKp
cHS
@@ -105057,16 +105555,16 @@ cgB
bbh
bbh
bQE
-bsZ
-bim
-bim
-bim
-csK
-cyN
-csK
-bzJ
-czv
-csK
+bsV
+bts
+bHG
+bQp
+bMj
+cbm
+byQ
+bHK
+cGU
+byQ
bHK
bIu
bJh
@@ -105314,11 +105812,11 @@ cgB
bbh
bpm
bQE
-bsZ
-bim
-bim
-bim
-bsZ
+bsV
+buj
+bpD
+bXL
+bsV
cyO
byN
bzK
@@ -105571,11 +106069,11 @@ cmn
bWZ
bXj
bXv
-bsZ
-bsZ
-bsZ
-bsZ
-bsZ
+bsV
+bul
+bpD
+bsV
+bsV
cyP
byQ
bzS
diff --git a/_maps/map_files/OmegaStation/OmegaStation.dmm b/_maps/map_files/OmegaStation/OmegaStation.dmm
index 5e065a6a11..a4315eb699 100644
--- a/_maps/map_files/OmegaStation/OmegaStation.dmm
+++ b/_maps/map_files/OmegaStation/OmegaStation.dmm
@@ -1288,17 +1288,31 @@
/turf/open/floor/plating,
/area/engine/gravity_generator)
"abR" = (
-/obj/structure/lattice,
-/turf/open/space,
-/area/asteroid/nearstation)
+/obj/machinery/vr_sleeper{
+ dir = 4
+ },
+/obj/machinery/light/small{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/security/prison)
"abS" = (
/obj/item/stack/ore/glass,
/obj/effect/turf_decal/sand/plating,
/turf/open/floor/plating,
/area/asteroid/nearstation)
"abT" = (
-/turf/closed/wall,
-/area/asteroid/nearstation)
+/obj/machinery/door/airlock{
+ name = "Unisex Restroom"
+ },
+/turf/open/floor/plasteel/freezer,
+/area/security/prison)
"abU" = (
/turf/closed/wall/r_wall,
/area/crew_quarters/heads/hos)
@@ -1716,11 +1730,15 @@
/turf/open/floor/plating/asteroid,
/area/asteroid/nearstation)
"acE" = (
-/obj/effect/decal/cleanable/blood/old,
-/turf/open/floor/plating{
- icon_state = "platingdmg1"
+/obj/structure/sink{
+ dir = 4;
+ pixel_x = 12
},
-/area/asteroid/nearstation)
+/obj/machinery/shower{
+ pixel_y = 26
+ },
+/turf/open/floor/plasteel/freezer,
+/area/security/prison)
"acF" = (
/turf/open/floor/plating,
/area/asteroid/nearstation)
@@ -1735,9 +1753,8 @@
/turf/open/floor/wood,
/area/crew_quarters/heads/hos)
"acH" = (
-/obj/effect/decal/cleanable/cobweb/cobweb2,
-/turf/open/floor/plating,
-/area/asteroid/nearstation)
+/turf/closed/wall/r_wall,
+/area/security/prison)
"acI" = (
/obj/structure/window/reinforced{
dir = 8
@@ -1754,18 +1771,9 @@
/turf/open/floor/plasteel/white,
/area/crew_quarters/heads/hos)
"acJ" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/machinery/door/airlock/maintenance_hatch{
- name = "Maintenance Hatch";
- req_access_txt = "12"
- },
-/turf/open/floor/plasteel,
-/area/asteroid/nearstation)
+/obj/structure/girder,
+/turf/open/floor/plating,
+/area/security/prison)
"acK" = (
/obj/structure/dresser,
/obj/structure/sign/warning/vacuum{
@@ -2220,21 +2228,21 @@
/turf/open/floor/plating,
/area/asteroid/nearstation)
"adw" = (
-/turf/open/floor/plating{
- icon_state = "panelscorched"
+/obj/machinery/camera{
+ c_tag = "Prison - VR Sleepers"
},
-/area/asteroid/nearstation)
+/turf/open/floor/plasteel,
+/area/security/prison)
"adx" = (
-/obj/item/clothing/suit/space/orange,
-/obj/item/clothing/head/helmet/space/orange,
-/turf/open/floor/plating,
+/obj/structure/sign/warning/securearea,
+/turf/closed/wall/r_wall,
/area/asteroid/nearstation)
"ady" = (
/turf/closed/wall/rust,
/area/quartermaster/qm)
"adz" = (
-/obj/structure/sign/warning/vacuum,
-/turf/closed/wall,
+/obj/structure/lattice/catwalk,
+/turf/open/floor/plating/asteroid/airless,
/area/asteroid/nearstation)
"adA" = (
/obj/machinery/status_display,
@@ -2666,9 +2674,11 @@
/turf/open/floor/plating,
/area/asteroid/nearstation)
"aem" = (
-/turf/open/floor/plating{
- icon_state = "platingdmg3"
+/obj/structure/lattice/catwalk,
+/obj/structure/sign/warning/securearea{
+ pixel_x = 32
},
+/turf/open/floor/plating/asteroid/airless,
/area/asteroid/nearstation)
"aen" = (
/obj/structure/cable/white{
@@ -2691,10 +2701,8 @@
/turf/open/floor/wood,
/area/crew_quarters/heads/hos)
"aep" = (
-/turf/open/floor/plating{
- icon_state = "platingdmg2"
- },
-/area/asteroid/nearstation)
+/turf/open/floor/plasteel,
+/area/security/prison)
"aeq" = (
/obj/machinery/door/airlock/silver{
name = "Bathroom"
@@ -3225,36 +3233,39 @@
/turf/open/floor/wood,
/area/crew_quarters/heads/hos)
"afe" = (
-/obj/machinery/door/airlock/maintenance_hatch{
- name = "Security Maintenance";
- req_access_txt = "63"
- },
/obj/effect/turf_decal/stripes/line{
dir = 8
},
/obj/effect/turf_decal/stripes/line{
dir = 4
},
+/obj/machinery/door/firedoor,
+/obj/machinery/turnstile{
+ name = "Genpop Exit Turnstile";
+ req_access_txt = "70";
+ dir = 8
+ },
/turf/open/floor/plasteel,
-/area/security/brig)
+/area/security/prison)
"aff" = (
/turf/closed/wall,
/area/crew_quarters/heads/hos)
"afg" = (
-/obj/effect/turf_decal/stripes/line,
-/obj/effect/turf_decal/stripes/line{
+/obj/item/stack/ore/glass,
+/turf/open/floor/plating/asteroid/airless,
+/area/asteroid/nearstation)
+"afh" = (
+/obj/machinery/vr_sleeper{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/red{
dir = 1
},
-/obj/machinery/door/airlock/maintenance_hatch{
- name = "Security Maintenance";
- req_access_txt = "63"
+/obj/effect/turf_decal/tile/red{
+ dir = 8
},
/turf/open/floor/plasteel,
-/area/security/brig)
-"afh" = (
-/obj/structure/barricade/wooden,
-/turf/open/floor/plating,
-/area/asteroid/nearstation)
+/area/security/prison)
"afi" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 8
@@ -3691,9 +3702,14 @@
/turf/open/floor/plasteel,
/area/quartermaster/storage)
"afL" = (
-/obj/structure/girder/reinforced,
-/turf/open/floor/plating,
-/area/asteroid/nearstation)
+/obj/machinery/hydroponics/soil,
+/obj/item/seeds/carrot,
+/obj/machinery/camera{
+ c_tag = "Prison - Main Room";
+ dir = 4
+ },
+/turf/open/floor/plating/asteroid,
+/area/security/prison)
"afM" = (
/obj/item/stack/ore/iron,
/obj/structure/barricade/wooden,
@@ -3719,20 +3735,10 @@
/turf/open/floor/plasteel,
/area/quartermaster/storage)
"afP" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 5
- },
-/obj/item/poster/random_contraband{
- pixel_x = 3;
- pixel_y = 3
- },
-/obj/item/poster/random_contraband{
- pixel_x = -3;
- pixel_y = -3
- },
-/obj/item/poster/random_contraband,
-/turf/open/floor/plasteel,
-/area/asteroid/nearstation)
+/obj/machinery/hydroponics/soil,
+/obj/item/seeds/grass,
+/turf/open/floor/plating/asteroid,
+/area/security/prison)
"afQ" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -4251,22 +4257,20 @@
/turf/closed/wall/r_wall,
/area/security/brig)
"agG" = (
-/obj/structure/reagent_dispensers/peppertank{
+/obj/machinery/newscaster{
pixel_y = 32
},
-/turf/open/floor/plasteel/dark,
-/area/security/brig)
+/turf/open/floor/plasteel,
+/area/security/prison)
"agH" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 6
+/obj/machinery/light/small{
+ dir = 1
},
-/obj/effect/turf_decal/delivery,
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
+/obj/effect/turf_decal/loading_area{
+ dir = 4
},
-/turf/open/floor/plasteel/dark,
-/area/security/brig)
+/turf/open/floor/plasteel,
+/area/security/prison)
"agI" = (
/obj/structure/table/wood,
/obj/item/paper_bin,
@@ -4794,27 +4798,23 @@
/turf/open/floor/plasteel,
/area/quartermaster/storage)
"ahu" = (
-/turf/closed/wall/r_wall,
-/area/asteroid/nearstation)
-"ahv" = (
-/obj/machinery/door/firedoor,
-/obj/structure/cable/white{
- icon_state = "2-8"
- },
-/obj/structure/cable/white{
- icon_state = "2-4"
- },
-/obj/machinery/door/airlock/security/glass{
- name = "Security E.V.A. Storage";
- req_access_txt = "63"
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/effect/turf_decal/stripes/line,
/obj/effect/turf_decal/stripes/line{
dir = 1
},
+/obj/machinery/door/airlock/maintenance_hatch{
+ name = "Security Maintenance";
+ req_access_txt = "63"
+ },
+/obj/machinery/door/firedoor,
/turf/open/floor/plasteel,
-/area/security/brig)
+/area/security/prison)
+"ahv" = (
+/obj/effect/turf_decal/loading_area{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/security/prison)
"ahw" = (
/turf/open/floor/plasteel/grimy,
/area/crew_quarters/heads/hos)
@@ -4853,24 +4853,23 @@
/turf/open/floor/plasteel,
/area/crew_quarters/heads/hos)
"ahz" = (
-/obj/structure/sign/nanotrasen{
- pixel_x = -32
+/obj/structure/reagent_dispensers/peppertank{
+ pixel_y = 32
},
-/obj/machinery/light{
- dir = 8
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 6
},
/turf/open/floor/plasteel/dark,
/area/security/brig)
"ahA" = (
-/obj/structure/rack,
-/obj/item/clothing/suit/fire/firefighter,
-/obj/item/clothing/mask/gas,
-/obj/item/clothing/head/hardhat/red,
-/obj/effect/turf_decal/stripes/line{
- dir = 6
+/obj/effect/turf_decal/tile/red{
+ dir = 4
+ },
+/obj/structure/chair{
+ dir = 8
},
/turf/open/floor/plasteel,
-/area/asteroid/nearstation)
+/area/security/prison)
"ahB" = (
/obj/effect/turf_decal/sand/plating,
/obj/item/stack/ore/silver,
@@ -4878,17 +4877,34 @@
/turf/open/floor/plating,
/area/asteroid/nearstation)
"ahC" = (
-/obj/machinery/status_display/ai{
- pixel_x = 32
+/obj/structure/sign/nanotrasen{
+ pixel_x = -32
},
+/obj/machinery/light{
+ dir = 8
+ },
+/obj/structure/closet{
+ name = "Evidence Closet"
+ },
+/obj/item/poster/random_contraband{
+ pixel_x = 3;
+ pixel_y = 3
+ },
+/obj/item/poster/random_contraband{
+ pixel_x = -3;
+ pixel_y = -3
+ },
+/obj/item/poster/random_contraband,
/turf/open/floor/plasteel/dark,
/area/security/brig)
"ahD" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 9
+/obj/machinery/light/small{
+ brightness = 3;
+ dir = 8
},
-/turf/open/floor/plasteel,
-/area/asteroid/nearstation)
+/obj/item/reagent_containers/glass/bucket,
+/turf/open/floor/plating/asteroid,
+/area/security/prison)
"ahE" = (
/obj/structure/table/wood,
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
@@ -5387,16 +5403,9 @@
/turf/open/floor/plasteel/dark,
/area/security/brig)
"aiv" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 10
- },
-/obj/effect/turf_decal/delivery,
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/plasteel/dark,
-/area/security/brig)
+/obj/item/cultivator,
+/turf/open/floor/plating/asteroid,
+/area/security/prison)
"aiw" = (
/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden,
/obj/item/stack/cable_coil/white,
@@ -5687,15 +5696,14 @@
/turf/open/floor/plasteel/dark,
/area/security/brig)
"aiS" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 10
+/obj/structure/sign/poster/official/do_not_question{
+ pixel_y = -32
+ },
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 4
},
-/obj/structure/table,
-/obj/item/extinguisher/mini,
-/obj/item/tank/internals/emergency_oxygen/engi,
-/obj/item/clothing/mask/breath,
/turf/open/floor/plasteel,
-/area/asteroid/nearstation)
+/area/security/prison)
"aiT" = (
/obj/structure/rack,
/obj/item/gun/energy/ionrifle,
@@ -5775,51 +5783,24 @@
/turf/open/floor/plating,
/area/security/brig)
"aja" = (
-/obj/structure/closet/secure_closet/brig{
- id = "brig1";
- name = "Cell 1 Locker"
+/obj/machinery/status_display/ai{
+ pixel_x = 32
},
-/obj/machinery/light/small{
- dir = 1
+/obj/structure/closet{
+ name = "Evidence Closet"
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/obj/effect/turf_decal/tile/red{
- dir = 1
- },
-/obj/effect/turf_decal/tile/red{
- dir = 4
- },
-/obj/effect/turf_decal/tile/red{
- dir = 8
- },
-/turf/open/floor/plasteel,
+/turf/open/floor/plasteel/dark,
/area/security/brig)
"ajb" = (
-/obj/machinery/flasher{
- id = "brig1";
- pixel_y = 26
+/obj/item/radio/intercom{
+ name = "Station Intercom";
+ pixel_y = -26
},
-/obj/structure/chair,
-/obj/structure/cable/white{
- icon_state = "2-4"
- },
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 8
- },
-/obj/machinery/camera{
- c_tag = "Security - Cell 1"
- },
-/obj/effect/turf_decal/tile/red{
- dir = 1
- },
-/obj/effect/turf_decal/tile/red,
-/obj/effect/turf_decal/tile/red{
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
/turf/open/floor/plasteel,
-/area/security/brig)
+/area/security/prison)
"ajc" = (
/obj/structure/cable/white{
icon_state = "0-8"
@@ -6314,10 +6295,14 @@
/turf/open/floor/plasteel,
/area/science/mixing)
"ajQ" = (
-/obj/item/stack/ore/iron,
-/obj/effect/turf_decal/sand/plating,
-/turf/open/floor/plating,
-/area/asteroid/nearstation)
+/obj/effect/turf_decal/loading_area{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/security/prison)
"ajR" = (
/obj/machinery/photocopier,
/obj/machinery/firealarm{
@@ -6425,27 +6410,23 @@
/turf/open/floor/plasteel,
/area/security/brig)
"ajZ" = (
-/obj/structure/cable/white{
- icon_state = "1-4"
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
},
-/obj/structure/cable/white{
- icon_state = "4-8"
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
},
-/obj/machinery/door/window/brigdoor/security/cell/westright{
- id = "brig1";
- name = "Cell 1"
+/obj/machinery/door/firedoor,
+/obj/machinery/turnstile{
+ name = "Genpop Entrance Turnstile";
+ req_access_txt = "69";
+ dir = 4
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/effect/turf_decal/tile/red{
- dir = 1
- },
-/obj/effect/turf_decal/tile/red{
- dir = 8
- },
/turf/open/floor/plasteel,
-/area/security/brig)
+/area/security/prison)
"aka" = (
/obj/structure/cable/white{
icon_state = "4-8"
@@ -6457,21 +6438,15 @@
/turf/open/floor/plasteel,
/area/security/brig)
"akb" = (
-/obj/structure/cable/white{
- icon_state = "1-4"
- },
-/obj/structure/cable/white{
- icon_state = "1-8"
- },
-/obj/effect/turf_decal/tile/red,
-/obj/effect/turf_decal/tile/red{
- dir = 4
- },
-/obj/effect/turf_decal/tile/red{
- dir = 8
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
},
+/obj/structure/rack,
+/obj/item/clothing/suit/fire/firefighter,
+/obj/item/clothing/mask/gas,
+/obj/item/clothing/head/hardhat/red,
/turf/open/floor/plasteel,
-/area/security/brig)
+/area/maintenance/port/fore)
"akc" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/effect/turf_decal/tile/red{
@@ -7158,11 +7133,6 @@
/turf/open/floor/plasteel,
/area/security/brig)
"akZ" = (
-/obj/machinery/door_timer{
- id = "brig1";
- name = "Cell 1";
- pixel_x = 32
- },
/obj/structure/chair{
dir = 8
},
@@ -7170,6 +7140,10 @@
dir = 4
},
/obj/effect/turf_decal/tile/red,
+/obj/machinery/status_display{
+ pixel_x = 32;
+ pixel_y = 0
+ },
/turf/open/floor/plasteel,
/area/security/brig)
"ala" = (
@@ -11151,11 +11125,18 @@
/turf/open/floor/plating,
/area/maintenance/port/fore)
"art" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 10
+/obj/machinery/firealarm{
+ dir = 1;
+ pixel_y = -26
+ },
+/obj/effect/turf_decal/loading_area{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
},
/turf/open/floor/plasteel,
-/area/maintenance/port/fore)
+/area/security/prison)
"aru" = (
/obj/machinery/newscaster/security_unit{
pixel_x = -32
@@ -15584,6 +15565,71 @@
/obj/item/cigbutt,
/turf/open/floor/plating,
/area/maintenance/port)
+"axZ" = (
+/turf/closed/wall/r_wall/rust,
+/area/security/prison)
+"aya" = (
+/obj/machinery/door/firedoor,
+/obj/structure/cable/white{
+ icon_state = "2-8"
+ },
+/obj/structure/cable/white{
+ icon_state = "2-4"
+ },
+/obj/machinery/door/airlock/security/glass{
+ name = "Security E.V.A. Storage";
+ req_access_txt = "63"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/effect/turf_decal/stripes/line,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/structure/cable/white{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel,
+/area/security/brig)
+"ayb" = (
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/security/prison)
+"ayc" = (
+/obj/effect/turf_decal/tile/red{
+ dir = 4
+ },
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/security/prison)
+"ayd" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/structure/closet/crate,
+/obj/effect/spawner/lootdrop/maintenance{
+ lootcount = 2;
+ name = "2maintenance loot spawner"
+ },
+/turf/open/floor/plasteel,
+/area/maintenance/port/fore)
+"aye" = (
+/obj/machinery/hydroponics/soil,
+/obj/item/seeds/ambrosia,
+/turf/open/floor/plating/asteroid,
+/area/security/prison)
+"ayf" = (
+/obj/machinery/hydroponics/soil,
+/obj/item/seeds/potato,
+/turf/open/floor/plating/asteroid,
+/area/security/prison)
+"ayg" = (
+/obj/item/stack/ore/glass,
+/turf/open/floor/plating/asteroid,
+/area/asteroid/nearstation)
"ayh" = (
/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{
dir = 8
@@ -15746,6 +15792,16 @@
},
/turf/open/floor/plasteel,
/area/crew_quarters/dorms)
+"ayy" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/structure/closet/crate{
+ icon_state = "crateopen"
+ },
+/obj/effect/spawner/lootdrop/maintenance,
+/turf/open/floor/plasteel,
+/area/maintenance/port/fore)
"ayz" = (
/turf/open/floor/plasteel/grimy,
/area/crew_quarters/dorms)
@@ -15768,6 +15824,30 @@
/obj/item/bedsheet/red,
/turf/open/floor/carpet,
/area/crew_quarters/dorms)
+"ayD" = (
+/obj/structure/cable/white{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/door/firedoor,
+/obj/machinery/door/airlock/security/glass{
+ id_tag = "secinterior";
+ name = "Brig";
+ req_access_txt = "63"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/structure/cable/white{
+ icon_state = "1-8"
+ },
+/turf/open/floor/plasteel,
+/area/security/brig)
"ayE" = (
/obj/structure/table/wood,
/obj/item/instrument/violin,
@@ -16095,6 +16175,95 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/hallway/secondary/exit)
+"azc" = (
+/obj/structure/cable/white{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 8
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/obj/machinery/light/small,
+/turf/open/floor/plasteel,
+/area/security/brig)
+"azd" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/obj/structure/cable/white{
+ icon_state = "1-8"
+ },
+/turf/open/floor/plasteel,
+/area/security/brig)
+"aze" = (
+/obj/machinery/door/poddoor/preopen{
+ id = "brigfront";
+ name = "Brig Blast door"
+ },
+/obj/machinery/turnstile{
+ name = "Genpop Exit Turnstile";
+ req_access_txt = "70";
+ dir = 8
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/security/brig)
+"azf" = (
+/obj/item/clothing/suit/space/orange,
+/obj/item/clothing/head/helmet/space/orange,
+/turf/open/floor/plating/asteroid,
+/area/asteroid/nearstation)
+"azg" = (
+/obj/machinery/door/airlock/maintenance_hatch{
+ name = "Maintenance Hatch";
+ req_access_txt = "12"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/maintenance/port/fore)
+"azh" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/obj/structure/table,
+/obj/item/extinguisher/mini,
+/obj/item/tank/internals/emergency_oxygen/engi,
+/obj/item/clothing/mask/breath,
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/maintenance/port/fore)
+"azi" = (
+/turf/closed/wall,
+/area/security/prison)
+"azj" = (
+/obj/machinery/light/small{
+ brightness = 3;
+ dir = 8
+ },
+/obj/structure/toilet{
+ dir = 8
+ },
+/turf/open/floor/plasteel/freezer,
+/area/security/prison)
+"azk" = (
+/obj/item/stack/ore/silver,
+/obj/item/stack/ore/iron,
+/turf/open/floor/plating/asteroid/airless,
+/area/asteroid/nearstation)
"azl" = (
/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/n2{
dir = 4
@@ -16123,6 +16292,15 @@
dir = 1
},
/area/engine/atmos)
+"azn" = (
+/obj/machinery/door/airlock/public/glass,
+/turf/open/floor/plasteel,
+/area/security/prison)
+"azo" = (
+/obj/machinery/holopad,
+/obj/effect/turf_decal/bot,
+/turf/open/floor/plasteel,
+/area/security/prison)
"azp" = (
/obj/structure/cable/white{
icon_state = "1-2"
@@ -16446,6 +16624,13 @@
icon_state = "platingdmg1"
},
/area/maintenance/starboard/central)
+"azQ" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/machinery/vending/sustenance,
+/turf/open/floor/plasteel,
+/area/security/prison)
"azR" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
@@ -16558,6 +16743,43 @@
},
/turf/open/floor/plasteel,
/area/hallway/secondary/exit)
+"aAa" = (
+/obj/machinery/cryopod,
+/obj/machinery/computer/cryopod{
+ pixel_y = 26
+ },
+/turf/open/floor/plasteel,
+/area/security/prison)
+"aAb" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/plasteel,
+/area/security/prison)
+"aAc" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/security/prison)
+"aAd" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/security/prison)
+"aAe" = (
+/obj/machinery/firealarm{
+ dir = 8;
+ pixel_x = 24
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/security/prison)
+"aAf" = (
+/obj/machinery/biogenerator,
+/turf/open/floor/plasteel,
+/area/security/prison)
"aAg" = (
/turf/open/floor/engine/air,
/area/engine/atmos)
@@ -16582,6 +16804,31 @@
/obj/structure/grille,
/turf/closed/wall/r_wall,
/area/engine/atmos)
+"aAk" = (
+/obj/machinery/seed_extractor,
+/turf/open/floor/plasteel,
+/area/security/prison)
+"aAl" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/structure/sink{
+ dir = 8;
+ pixel_x = -12;
+ pixel_y = 2
+ },
+/turf/open/floor/plasteel,
+/area/security/prison)
+"aAm" = (
+/obj/effect/turf_decal/stripes/corner{
+ dir = 4
+ },
+/obj/item/plant_analyzer,
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/security/prison)
"aAn" = (
/obj/machinery/atmospherics/pipe/simple/cyan/visible{
dir = 6
@@ -16589,6 +16836,12 @@
/obj/machinery/meter,
/turf/open/floor/plasteel,
/area/engine/atmos)
+"aAo" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/security/prison)
"aAp" = (
/obj/machinery/atmospherics/pipe/simple/cyan/visible{
dir = 4
@@ -16676,6 +16929,23 @@
},
/turf/open/floor/plasteel,
/area/engine/atmos)
+"aAw" = (
+/obj/machinery/door/firedoor,
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/machinery/door/airlock/maintenance_hatch{
+ name = "Security Maintenance";
+ req_access_txt = "63"
+ },
+/turf/open/floor/plasteel,
+/area/security/prison)
"aAx" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
/obj/effect/turf_decal/tile/neutral{
@@ -17017,6 +17287,12 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/central)
+"aAU" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/security/prison)
"aAV" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -17166,29 +17442,144 @@
},
/turf/open/floor/plasteel,
/area/hallway/secondary/exit)
+"aBi" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 10
+ },
+/turf/open/floor/plating,
+/area/security/prison)
+"aBj" = (
+/obj/machinery/light/small{
+ dir = 8
+ },
+/obj/structure/cable/white{
+ icon_state = "0-4"
+ },
+/obj/machinery/power/apc{
+ areastring = "/area/security/prison";
+ dir = 8;
+ name = "Prison Wing APC";
+ pixel_x = -26
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/plasteel,
+/area/security/prison)
+"aBk" = (
+/obj/structure/closet/secure_closet/genpop,
+/obj/structure/cable/white{
+ icon_state = "2-8"
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/security/prison)
+"aBl" = (
+/obj/machinery/airalarm/unlocked{
+ dir = 4;
+ pixel_x = -23
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/plasteel,
+/area/security/prison)
+"aBm" = (
+/obj/structure/closet/secure_closet/genpop,
+/obj/structure/cable/white{
+ icon_state = "1-2"
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/security/prison)
+"aBo" = (
+/obj/structure/cable/white{
+ icon_state = "2-4"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/open/floor/plasteel/dark,
+/area/security/brig)
"aBp" = (
/obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/oxygen_output{
dir = 1
},
/turf/open/floor/engine/o2,
/area/engine/atmos)
+"aBq" = (
+/obj/structure/cable/white{
+ icon_state = "4-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/open/floor/plasteel/dark,
+/area/security/brig)
"aBr" = (
/obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/nitrogen_output{
dir = 1
},
/turf/open/floor/engine/n2,
/area/engine/atmos)
+"aBs" = (
+/obj/effect/spawner/structure/window/reinforced,
+/obj/structure/cable/white{
+ icon_state = "0-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/security/prison)
"aBt" = (
/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/nitrogen_input{
dir = 1
},
/turf/open/floor/engine/n2,
/area/engine/atmos)
+"aBu" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 9
+ },
+/turf/open/floor/plasteel,
+/area/security/prison)
+"aBv" = (
+/obj/structure/closet/secure_closet/genpop,
+/obj/machinery/camera{
+ c_tag = "Prison - Entryway";
+ dir = 8
+ },
+/obj/structure/cable/white{
+ icon_state = "1-2"
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/security/prison)
+"aBw" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/plasteel/dark,
+/area/security/brig)
+"aBx" = (
+/obj/structure/cable/white{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plasteel/dark,
+/area/security/brig)
"aBy" = (
/obj/effect/turf_decal/stripes/line,
/obj/machinery/atmospherics/pipe/simple/cyan/visible,
/turf/open/floor/plasteel,
/area/engine/atmos)
+"aBz" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plasteel,
+/area/security/prison)
"aBA" = (
/obj/structure/cable/white{
icon_state = "1-2"
@@ -17692,12 +18083,102 @@
/obj/structure/sign/warning/vacuum,
/turf/open/floor/plating,
/area/hallway/secondary/exit)
+"aCo" = (
+/obj/structure/cable/white{
+ icon_state = "1-2"
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/security/prison)
+"aCp" = (
+/obj/effect/turf_decal/delivery,
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 4
+ },
+/turf/open/floor/plasteel/dark,
+/area/security/brig)
+"aCq" = (
+/obj/effect/turf_decal/delivery,
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/structure/cable/white{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/security/brig)
+"aCr" = (
+/obj/machinery/door/firedoor,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/effect/turf_decal/stripes/line,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/machinery/door/airlock/security/glass{
+ name = "Gen-Pop Access";
+ req_access_txt = "2"
+ },
+/turf/open/floor/plasteel{
+ heat_capacity = 1e+006
+ },
+/area/security/prison)
"aCs" = (
/obj/machinery/portable_atmospherics/canister/oxygen,
/obj/machinery/light/small,
/obj/machinery/atmospherics/miner/oxygen,
/turf/open/floor/engine/o2,
/area/engine/atmos)
+"aCt" = (
+/obj/machinery/door/firedoor,
+/obj/machinery/turnstile{
+ name = "Genpop Exit Turnstile";
+ icon_state = "turnstile_map";
+ dir = 1;
+ req_access_txt = "70"
+ },
+/obj/effect/turf_decal/stripes/line,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/structure/cable/white{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel{
+ heat_capacity = 1e+006
+ },
+/area/security/prison)
+"aCu" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
+/turf/open/floor/plasteel,
+/area/security/brig)
+"aCv" = (
+/obj/structure/cable/white{
+ icon_state = "2-4"
+ },
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 8
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 5
+ },
+/obj/structure/cable/white{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel,
+/area/security/brig)
"aCw" = (
/obj/machinery/portable_atmospherics/canister/nitrogen,
/obj/machinery/light/small,
@@ -40456,10 +40937,6 @@
"swC" = (
/turf/closed/wall/r_wall/rust,
/area/crew_quarters/heads/captain/private)
-"swF" = (
-/obj/structure/sign/warning/securearea,
-/turf/closed/wall/rust,
-/area/asteroid/nearstation)
"swG" = (
/turf/closed/wall/rust,
/area/security/detectives_office)
@@ -40498,9 +40975,6 @@
/obj/machinery/status_display/supply,
/turf/closed/wall/rust,
/area/quartermaster/storage)
-"swN" = (
-/turf/closed/wall/rust,
-/area/asteroid/nearstation)
"swZ" = (
/turf/closed/wall/r_wall/rust,
/area/security/brig)
@@ -74464,7 +74938,7 @@ aik
aaW
abj
abj
-abu
+ahB
abu
pNE
gap
@@ -74966,7 +75440,7 @@ aaa
aac
aac
aad
-aah
+adx
aad
aac
aac
@@ -75223,7 +75697,7 @@ aaa
aaa
aaa
aac
-aac
+adz
aad
aad
aad
@@ -75235,7 +75709,7 @@ agK
abu
aad
aad
-abj
+azf
abi
pNE
aoq
@@ -75480,7 +75954,7 @@ aaa
aaa
aaa
aac
-aac
+adz
aac
aac
aad
@@ -75737,7 +76211,7 @@ aaa
aaa
aaa
aaa
-aac
+adz
aac
aac
aac
@@ -75747,7 +76221,7 @@ aad
aad
adv
aaW
-abj
+ayg
ahB
abu
acF
@@ -75994,7 +76468,7 @@ aaa
aaa
aaa
aaa
-abR
+aXc
aac
aac
aad
@@ -76003,7 +76477,7 @@ aad
aad
abi
ael
-abj
+abu
abu
abu
alG
@@ -76251,17 +76725,17 @@ aaa
aaa
aaa
aaa
-abR
+aXc
aac
aac
aad
aad
-aad
-aad
-abT
-abi
-aaV
-ajQ
+aro
+aro
+aro
+aro
+azg
+aro
aro
aro
asm
@@ -76508,17 +76982,17 @@ aaa
aaa
aac
aac
-aac
+adz
aac
aac
aad
aad
-aad
-aad
-aaW
-abj
-abj
-abu
+aro
+ars
+ars
+ars
+ars
+ars
arp
ars
ars
@@ -76765,19 +77239,19 @@ aac
aac
aad
aac
-aac
+aem
aad
aad
aad
aad
-abi
-agE
-abj
-abi
-aad
-aad
+aro
+ars
+akb
+asu
+ayd
+ayy
arq
-art
+azh
ars
asy
ars
@@ -77021,14 +77495,14 @@ aaa
aac
aad
aad
-aad
-swF
-aad
-aad
-aad
-aad
-aad
-abj
+acH
+acH
+acH
+acH
+acH
+acH
+acH
+ars
agF
agF
agF
@@ -77278,14 +77752,14 @@ aac
aac
aad
aad
-aad
-aad
-aad
-aad
-aad
-aad
-aad
-abu
+acH
+afL
+ahD
+aye
+aAl
+aAf
+acH
+ars
agF
apw
aqB
@@ -77535,14 +78009,14 @@ aac
aac
aad
aad
-aad
-aad
-aad
-aad
-aad
-aad
-abT
-agE
+acH
+afP
+aiv
+ayf
+aAd
+aAk
+acH
+ars
swZ
apR
aqD
@@ -77792,14 +78266,14 @@ aad
aad
aad
aad
-aad
-aad
-aad
-aad
-aad
-ahu
-afL
-aaW
+acH
+azQ
+aAc
+aAc
+aAm
+acH
+acH
+ars
swZ
ain
aqG
@@ -78046,17 +78520,17 @@ aaa
aad
aad
aad
-aad
-aad
-aad
-aad
-aad
-aad
-aad
-aad
-ahu
-abu
-abj
+acH
+acH
+acH
+acH
+aAa
+aep
+azo
+aAo
+acH
+ars
+ars
agF
aio
aiT
@@ -78303,15 +78777,15 @@ aac
aad
aad
aad
-aad
-aad
-aad
-aad
-abi
-abi
-swN
-abi
-agF
+acH
+abR
+afh
+azi
+agG
+aiS
+acH
+aAw
+acH
afT
agF
agF
@@ -78560,17 +79034,17 @@ aac
aad
aad
aad
-aad
-aad
-aad
-aaV
-aaW
-abj
-adv
-ael
-agF
+acH
+adw
+aep
+azn
+aep
+ajb
+acH
+aAU
+acH
afU
-ahz
+ahC
aiu
aiq
aiV
@@ -78817,18 +79291,18 @@ aad
aad
aad
aad
-aad
-aaV
-abi
-abj
-abj
-abS
-abu
-acF
-agF
-agG
-afU
-aiv
+acH
+abT
+azi
+azi
+aep
+ajQ
+acH
+aAU
+acH
+ahz
+aBw
+aCp
air
aiW
ajW
@@ -79074,19 +79548,19 @@ aad
aad
aad
aad
-aad
-aaW
-abj
-abj
-abS
-acD
-acF
-aem
-afg
-afU
-afU
-agH
-ahv
+acH
+acE
+azj
+acH
+afe
+ajZ
+acH
+aBi
+ahu
+aBo
+aBx
+aCq
+aya
aiX
agm
akY
@@ -79331,17 +79805,17 @@ aad
aad
aad
aad
-aad
-aad
-abi
-abj
-abu
-acE
-adx
-acF
-agF
-afU
-ahC
+acH
+acH
+acH
+acH
+agH
+art
+acH
+acJ
+acH
+aBq
+aja
aiR
ait
aiY
@@ -79589,20 +80063,20 @@ aad
aad
aad
aad
-aad
-aad
-aaW
-abu
-acF
-acF
-acF
-agF
+aac
+azk
+acH
afe
-agF
-swZ
-agF
-aiZ
ajZ
+acH
+acH
+acH
+aBs
+acH
+axZ
+acH
+aiZ
+ayD
ala
aiZ
amN
@@ -79846,20 +80320,20 @@ aad
aad
aad
aad
-aad
-aad
-abi
-abi
-acJ
-adz
-swN
-abT
-acF
-ahD
-aiS
-agF
-aja
-aka
+afg
+aac
+acH
+ahv
+ayb
+aAb
+aBj
+aBl
+aBu
+aBz
+aBz
+aCr
+aCu
+azc
ala
alP
aka
@@ -80104,19 +80578,19 @@ aad
aad
aad
aad
-aad
-aad
-abT
+bvI
acH
-adw
-aep
-afh
-aem
-afP
ahA
-swZ
-ajb
-akb
+ayc
+aAe
+aBk
+aBm
+aBv
+aCo
+aCo
+aCt
+aCv
+azd
ala
alQ
bxA
@@ -80362,7 +80836,7 @@ aad
aad
aad
aad
-aad
+acH
abU
abU
abU
@@ -80373,7 +80847,7 @@ abU
abU
abU
ajc
-ajc
+aze
aip
ajc
ajc
diff --git a/code/__DEFINES/combat.dm b/code/__DEFINES/combat.dm
index 3cb60b1143..dff52f4748 100644
--- a/code/__DEFINES/combat.dm
+++ b/code/__DEFINES/combat.dm
@@ -269,11 +269,12 @@ GLOBAL_LIST_INIT(shove_disarming_types, typecacheof(list(
//stamina cost defines.
#define STAM_COST_ATTACK_OBJ_MULT 1.2
-#define STAM_COST_ATTACK_MOB_MULT 0.8
+#define STAM_COST_ATTACK_MOB_MULT 1
#define STAM_COST_BATON_MOB_MULT 1
#define STAM_COST_NO_COMBAT_MULT 1.25
#define STAM_COST_W_CLASS_MULT 1.25
#define STAM_COST_THROW_MULT 2
+#define STAM_COST_THROW_MOB 2.5 //multiplied by (mob size + 1)^2.
///Multiplier of the (STAMINA_NEAR_CRIT - user current stamina loss) : (STAMINA_NEAR_CRIT - STAMINA_SOFTCRIT) ratio used in damage penalties when stam soft-critted.
#define STAM_CRIT_ITEM_ATTACK_PENALTY 0.66
@@ -284,6 +285,12 @@ GLOBAL_LIST_INIT(shove_disarming_types, typecacheof(list(
/// Added delay when firing guns stam-softcritted. Summed with a hardset CLICK_CD_RANGE delay, similar to STAM_CRIT_DAMAGE_DELAY otherwise.
#define STAM_CRIT_GUN_DELAY 2.75
+//stamina recovery defines. Blocked if combat mode is on.
+#define STAM_RECOVERY_STAM_CRIT -7.5
+#define STAM_RECOVERY_RESTING -6
+#define STAM_RECOVERY_NORMAL -3
+#define STAM_RECOVERY_LIMB 4 //limbs recover stamina separately from handle_status_effects(), and aren't blocked by combat mode.
+
/**
* should the current-attack-damage be lower than the item force multiplied by this value,
* a "inefficiently" prefix will be added to the message.
diff --git a/code/__DEFINES/cooldowns.dm b/code/__DEFINES/cooldowns.dm
new file mode 100644
index 0000000000..29c7a25dad
--- /dev/null
+++ b/code/__DEFINES/cooldowns.dm
@@ -0,0 +1,71 @@
+//// COOLDOWN SYSTEMS
+/*
+ * We have 2 cooldown systems: timer cooldowns (divided between stoppable and regular) and world.time cooldowns.
+ *
+ * When to use each?
+ *
+ * * Adding a commonly-checked cooldown, like on a subsystem to check for processing
+ * * * Use the world.time ones, as they are cheaper.
+ *
+ * * Adding a rarely-used one for special situations, such as giving an uncommon item a cooldown on a target.
+ * * * Timer cooldown, as adding a new variable on each mob to track the cooldown of said uncommon item is going too far.
+ *
+ * * Triggering events at the end of a cooldown.
+ * * * Timer cooldown, registering to its signal.
+ *
+ * * Being able to check how long left for the cooldown to end.
+ * * * Either world.time or stoppable timer cooldowns, depending on the other factors. Regular timer cooldowns do not support this.
+ *
+ * * Being able to stop the timer before it ends.
+ * * * Either world.time or stoppable timer cooldowns, depending on the other factors. Regular timer cooldowns do not support this.
+*/
+
+
+/*
+ * Cooldown system based on an datum-level associative lazylist using timers.
+*/
+
+//INDEXES
+#define COOLDOWN_EMPLOYMENT_CABINET "employment cabinet"
+
+
+//TIMER COOLDOWN MACROS
+
+#define COMSIG_CD_STOP(cd_index) "cooldown_[cd_index]"
+#define COMSIG_CD_RESET(cd_index) "cd_reset_[cd_index]"
+
+#define TIMER_COOLDOWN_START(cd_source, cd_index, cd_time) LAZYSET(cd_source.cooldowns, cd_index, addtimer(CALLBACK(GLOBAL_PROC, /proc/end_cooldown, cd_source, cd_index), cd_time))
+
+#define TIMER_COOLDOWN_CHECK(cd_source, cd_index) LAZYACCESS(cd_source.cooldowns, cd_index)
+
+#define TIMER_COOLDOWN_END(cd_source, cd_index) LAZYREMOVE(cd_source.cooldowns, cd_index)
+
+/*
+ * Stoppable timer cooldowns.
+ * Use indexes the same as the regular tiemr cooldowns.
+ * They make use of the TIMER_COOLDOWN_CHECK() and TIMER_COOLDOWN_END() macros the same, just not the TIMER_COOLDOWN_START() one.
+ * A bit more expensive than the regular timers, but can be reset before they end and the time left can be checked.
+*/
+
+#define S_TIMER_COOLDOWN_START(cd_source, cd_index, cd_time) LAZYSET(cd_source.cooldowns, cd_index, addtimer(CALLBACK(GLOBAL_PROC, /proc/end_cooldown, cd_source, cd_index), cd_time, TIMER_STOPPABLE))
+
+#define S_TIMER_COOLDOWN_RESET(cd_source, cd_index) reset_cooldown(cd_source, cd_index)
+
+#define S_TIMER_COOLDOWN_TIMELEFT(cd_source, cd_index) (timeleft(TIMER_COOLDOWN_CHECK(cd_source, cd_index)))
+
+
+/*
+ * Cooldown system based on storing world.time on a variable, plus the cooldown time.
+ * Better performance over timer cooldowns, lower control. Same functionality.
+*/
+
+#define COOLDOWN_DECLARE(cd_index) var/##cd_index = 0
+
+#define COOLDOWN_START(cd_source, cd_index, cd_time) (cd_source.cd_index = world.time + cd_time)
+
+//Returns true if the cooldown has run its course, false otherwise
+#define COOLDOWN_FINISHED(cd_source, cd_index) (cd_source.cd_index < world.time)
+
+#define COOLDOWN_RESET(cd_source, cd_index) cd_source.cd_index = 0
+
+#define COOLDOWN_TIMELEFT(cd_source, cd_index) (max(0, cd_source.cd_index - world.time))
diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm
index 86b518234b..d9a6452f38 100644
--- a/code/__DEFINES/dcs/signals.dm
+++ b/code/__DEFINES/dcs/signals.dm
@@ -224,6 +224,11 @@
#define COMSIG_LIVING_RUN_BLOCK "living_do_run_block" //from base of mob/living/do_run_block(): (real_attack, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone)
#define COMSIG_LIVING_GET_BLOCKING_ITEMS "get_blocking_items" //from base of mob/living/get_blocking_items(): (list/items)
+#define COMSIG_LIVING_ACTIVE_BLOCK_START "active_block_start" //from base of mob/living/keybind_start_active_blocking(): (obj/item/blocking_item, list/backup_items)
+ #define COMPONENT_PREVENT_BLOCK_START 1
+#define COMSIG_LIVING_ACTIVE_PARRY_START "active_parry_start" //from base of mob/living/initiate_parry_sequence(): (parrying_method, datum/parrying_item_mob_or_art, list/backup_items)
+ #define COMPONENT_PREVENT_PARRY_START 1
+
//ALL OF THESE DO NOT TAKE INTO ACCOUNT WHETHER AMOUNT IS 0 OR LOWER AND ARE SENT REGARDLESS!
#define COMSIG_LIVING_STATUS_STUN "living_stun" //from base of mob/living/Stun() (amount, update, ignore)
#define COMSIG_LIVING_STATUS_KNOCKDOWN "living_knockdown" //from base of mob/living/Knockdown() (amount, update, ignore)
diff --git a/code/__DEFINES/machines.dm b/code/__DEFINES/machines.dm
index 5a26feb624..0e8e34d20e 100644
--- a/code/__DEFINES/machines.dm
+++ b/code/__DEFINES/machines.dm
@@ -115,3 +115,7 @@
//these flags are used to tell the DNA modifier if a plant gene cannot be extracted or modified.
#define PLANT_GENE_REMOVABLE (1<<0)
#define PLANT_GENE_EXTRACTABLE (1<<1)
+
+#define CLONEPOD_GET_MIND 1
+#define CLONEPOD_POLL_MIND 2
+#define CLONEPOD_NO_MIND 3
\ No newline at end of file
diff --git a/code/__DEFINES/skills/defines.dm b/code/__DEFINES/skills/defines.dm
index 60d2321927..47aaeeb1dc 100644
--- a/code/__DEFINES/skills/defines.dm
+++ b/code/__DEFINES/skills/defines.dm
@@ -8,12 +8,6 @@
/// Levels
#define SKILL_PROGRESSION_LEVEL 4
-
-/// Max value of skill for numerical skills
-#define SKILL_NUMERICAL_MAX 100
-/// Min value of skill for numerical skills
-#define SKILL_NUMERICAL_MIN 0
-
// Standard values for job starting skills
#define STARTING_SKILL_SURGERY_MEDICAL 35 //out of SKILL_NUMERICAL_MAX
@@ -26,6 +20,13 @@
#define DEF_SKILL_GAIN 1
#define SKILL_GAIN_SURGERY_PER_STEP 0.25
+#define STD_USE_TOOL_MULT 1
+#define EASY_USE_TOOL_MULT 0.75
+#define TRIVIAL_USE_TOOL_MULT 0.5
+#define BARE_USE_TOOL_MULT 0.25
+
+//multiplier of the difference of max_value and min_value. Mostly for balance purposes between numerical and level-based skills.
+#define STD_NUM_SKILL_ITEM_GAIN_MULTI 0.002
//An extra point for each few seconds of delay when using a tool. Before the multiplier.
#define SKILL_GAIN_DELAY_DIVISOR 3 SECONDS
diff --git a/code/__HELPERS/icons.dm b/code/__HELPERS/icons.dm
index aee0f3d7f7..3155fe2548 100644
--- a/code/__HELPERS/icons.dm
+++ b/code/__HELPERS/icons.dm
@@ -1136,9 +1136,10 @@ GLOBAL_LIST_INIT(freon_color_matrix, list("#2E5E69", "#60A2A8", "#A1AFB1", rgb(0
if (!isicon(I))
if (isfile(thing)) //special snowflake
var/name = sanitize_filename("[generate_asset_name(thing)].png")
- register_asset(name, thing)
+ if(!SSassets.cache[name])
+ register_asset(name, thing)
for (var/thing2 in targets)
- send_asset(thing2, key, FALSE)
+ send_asset(thing2, key)
return ""
var/atom/A = thing
if (isnull(dir))
@@ -1160,9 +1161,10 @@ GLOBAL_LIST_INIT(freon_color_matrix, list("#2E5E69", "#60A2A8", "#A1AFB1", rgb(0
I = icon(I, icon_state, dir, frame, moving)
key = "[generate_asset_name(I)].png"
- register_asset(key, I)
+ if(!SSassets.cache[key])
+ register_asset(key, I)
for (var/thing2 in targets)
- send_asset(thing2, key, FALSE)
+ send_asset(thing2, key)
return ""
diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm
index 4ed286eb08..0088dde15a 100644
--- a/code/_onclick/hud/screen_objects.dm
+++ b/code/_onclick/hud/screen_objects.dm
@@ -153,7 +153,7 @@
var/image/item_overlay = image(holding)
item_overlay.alpha = 92
- if(!user.can_equip(holding, slot_id, TRUE))
+ if(!user.can_equip(holding, slot_id, TRUE, TRUE, TRUE))
item_overlay.color = "#FF0000"
else
item_overlay.color = "#00ff00"
diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm
index 106db7f40a..bef06a69e9 100644
--- a/code/_onclick/item_attack.dm
+++ b/code/_onclick/item_attack.dm
@@ -123,7 +123,7 @@
if(totitemdamage)
totitemdamage = user.mind.item_action_skills_mod(I, totitemdamage, I.skill_difficulty, SKILL_ATTACK_OBJ, bad_trait)
for(var/skill in I.used_skills)
- if(!(I.used_skills[skill] & SKILL_TRAIN_ATTACK_OBJ))
+ if(!(SKILL_TRAIN_ATTACK_OBJ in I.used_skills[skill]))
continue
user.mind.auto_gain_experience(skill, I.skill_gain)
@@ -192,9 +192,10 @@
if(.)
. = user.mind.item_action_skills_mod(I, ., I.skill_difficulty, SKILL_ATTACK_MOB, bad_trait)
for(var/skill in I.used_skills)
- if(!(I.used_skills[skill] & SKILL_TRAIN_ATTACK_MOB))
+ if(!(SKILL_TRAIN_ATTACK_MOB in I.used_skills[skill]))
continue
- user.mind.auto_gain_experience(skill, I.skill_gain)
+ var/datum/skill/S = GLOB.skill_datums[skill]
+ user.mind.auto_gain_experience(skill, I.skill_gain*S.item_skill_gain_multi)
// Proximity_flag is 1 if this afterattack was called on something adjacent, in your square, or on your person.
// Click parameters is the params string from byond Click() code, see that documentation.
diff --git a/code/_onclick/telekinesis.dm b/code/_onclick/telekinesis.dm
index 6cf01ec8ff..f95ebf82b5 100644
--- a/code/_onclick/telekinesis.dm
+++ b/code/_onclick/telekinesis.dm
@@ -102,9 +102,8 @@
//stops TK grabs being equipped anywhere but into hands
/obj/item/tk_grab/equipped(mob/user, slot)
if(slot == SLOT_HANDS)
- return
+ return ..()
qdel(src)
- return
/obj/item/tk_grab/examine(user)
if (focus)
diff --git a/code/controllers/configuration/entries/comms.dm b/code/controllers/configuration/entries/comms.dm
index 012c3ec9fe..e56ff3f0d1 100644
--- a/code/controllers/configuration/entries/comms.dm
+++ b/code/controllers/configuration/entries/comms.dm
@@ -25,4 +25,23 @@
/datum/config_entry/string/medal_hub_address
/datum/config_entry/string/medal_hub_password
- protection = CONFIG_ENTRY_HIDDEN
\ No newline at end of file
+ protection = CONFIG_ENTRY_HIDDEN
+
+/datum/config_entry/keyed_list/cross_server_bunker_override
+ key_mode = KEY_MODE_TEXT
+ value_mode = VALUE_MODE_TEXT
+ protection = CONFIG_ENTRY_LOCKED
+
+/datum/config_entry/keyed_list/cross_server_bunker_override/ValidateAndSet(str_val)
+ . = ..()
+ if(.)
+ var/list/newv = list()
+ for(var/I in config_entry_value)
+ newv[replacetext(I, "+", " ")] = config_entry_value[I]
+ config_entry_value = newv
+
+/datum/config_entry/keyed_list/cross_server_bunker_override/ValidateListEntry(key_name, key_value)
+ return key_value != "byond:\\address:port" && ..()
+
+/datum/config_entry/flag/allow_cross_server_bunker_override
+ protection = CONFIG_ENTRY_LOCKED
diff --git a/code/datums/components/crafting/guncrafting.dm b/code/datums/components/crafting/guncrafting.dm
index f73e81a680..deab5e9b69 100644
--- a/code/datums/components/crafting/guncrafting.dm
+++ b/code/datums/components/crafting/guncrafting.dm
@@ -8,9 +8,9 @@
custom_materials = list(/datum/material/wood = MINERAL_MATERIAL_AMOUNT * 6)
icon_state = "riflestock"
-/obj/item/weaponcrafting/durathread_string
- name = "durathread string"
- desc = "A long piece of durathread with some resemblance to cable coil."
+/obj/item/weaponcrafting/string
+ name = "wound thread"
+ desc = "A long piece of thread with some resemblance to cable coil."
icon_state = "durastring"
////////////////////////////////
diff --git a/code/datums/components/crafting/recipes/recipes_primal.dm b/code/datums/components/crafting/recipes/recipes_primal.dm
index e646d24018..aaae94df1d 100644
--- a/code/datums/components/crafting/recipes/recipes_primal.dm
+++ b/code/datums/components/crafting/recipes/recipes_primal.dm
@@ -103,7 +103,7 @@
/datum/crafting_recipe/bone_bow
name = "Bone Bow"
result = /obj/item/gun/ballistic/bow/ashen
- time = 200
+ time = 120 // 80+120 = 200
always_availible = FALSE
reqs = list(/obj/item/stack/sheet/bone = 8,
/obj/item/stack/sheet/sinew = 4)
@@ -112,7 +112,7 @@
/datum/crafting_recipe/bow_tablet
name = "Sandstone Bow Making Manual"
result = /obj/item/book/granter/crafting_recipe/bone_bow
- time = 600 //Scribing
+ time = 200 //Scribing // don't care
always_availible = FALSE
reqs = list(/obj/item/stack/rods = 1,
/obj/item/stack/sheet/mineral/sandstone = 4)
diff --git a/code/datums/components/crafting/recipes/recipes_weapon_and_ammo.dm b/code/datums/components/crafting/recipes/recipes_weapon_and_ammo.dm
index f5c9389dc8..ec8ea86d24 100644
--- a/code/datums/components/crafting/recipes/recipes_weapon_and_ammo.dm
+++ b/code/datums/components/crafting/recipes/recipes_weapon_and_ammo.dm
@@ -192,8 +192,8 @@
result = /obj/item/gun/ballistic/bow/pipe
reqs = list(/obj/item/pipe = 5,
/obj/item/stack/sheet/plastic = 15,
- /obj/item/weaponcrafting/durathread_string = 5)
- time = 450
+ /obj/item/weaponcrafting/string = 5)
+ time = 150
category = CAT_WEAPONRY
subcategory = CAT_WEAPON
@@ -283,9 +283,9 @@
/datum/crafting_recipe/arrow
name = "Arrow"
result = /obj/item/ammo_casing/caseless/arrow/wood
- time = 30
+ time = 5 // these only do 15 damage
reqs = list(/obj/item/stack/sheet/mineral/wood = 1,
- /obj/item/stack/sheet/durathread = 1,
+ /obj/item/stack/sheet/cloth = 1,
/obj/item/stack/rods = 1) // 1 metal sheet = 2 rods = 2 arrows
category = CAT_WEAPONRY
subcategory = CAT_AMMO
@@ -293,7 +293,7 @@
/datum/crafting_recipe/bone_arrow
name = "Bone Arrow"
result = /obj/item/ammo_casing/caseless/arrow/bone
- time = 30
+ time = 5
always_availible = FALSE
reqs = list(/obj/item/stack/sheet/bone = 1,
/obj/item/stack/sheet/sinew = 1,
@@ -305,7 +305,7 @@
name = "Ashen Arrow"
result = /obj/item/ammo_casing/caseless/arrow/ash
tools = list(TOOL_WELDER)
- time = 30
+ time = 10 // 1.5 seconds minimum per actually worthwhile arrow excluding interface lag
always_availible = FALSE
reqs = list(/obj/item/ammo_casing/caseless/arrow/wood = 1)
category = CAT_WEAPONRY
diff --git a/code/datums/components/storage/concrete/bag_of_holding.dm b/code/datums/components/storage/concrete/bag_of_holding.dm
index 28b06b4867..e19edc89d8 100644
--- a/code/datums/components/storage/concrete/bag_of_holding.dm
+++ b/code/datums/components/storage/concrete/bag_of_holding.dm
@@ -34,3 +34,8 @@
qdel(A)
return
. = ..()
+
+/datum/component/storage/concrete/bluespace/bag_of_holding/can_be_inserted(obj/item/I, stop_messages = FALSE, mob/M)
+ if(I.GetComponent(/datum/component/storage/concrete/bluespace/bag_of_holding))
+ return TRUE
+ return ..()
diff --git a/code/datums/components/twohanded.dm b/code/datums/components/twohanded.dm
index e9f99a995e..77a9a79bf4 100644
--- a/code/datums/components/twohanded.dm
+++ b/code/datums/components/twohanded.dm
@@ -89,7 +89,7 @@
/// Triggered on equip of the item containing the component
/datum/component/two_handed/proc/on_equip(datum/source, mob/user, slot)
- if(require_twohands && slot == ITEM_SLOT_HANDS) // force equip the item
+ if(require_twohands && slot == SLOT_HANDS) // force equip the item
wield(user)
if(!user.is_holding(parent) && wielded && !require_twohands)
unwield(user)
diff --git a/code/datums/datum.dm b/code/datums/datum.dm
index 6202ac444e..7756cfd906 100644
--- a/code/datums/datum.dm
+++ b/code/datums/datum.dm
@@ -39,6 +39,9 @@
/// A weak reference to another datum
var/datum/weakref/weak_reference
+ ///Lazy associative list of currently active cooldowns.
+ var/list/cooldowns
+
#ifdef TESTING
var/running_find_references
var/last_find_references = 0
@@ -201,3 +204,34 @@
qdel(D)
else
return returned
+
+/**
+ * Callback called by a timer to end an associative-list-indexed cooldown.
+ *
+ * Arguments:
+ * * source - datum storing the cooldown
+ * * index - string index storing the cooldown on the cooldowns associative list
+ *
+ * This sends a signal reporting the cooldown end.
+ */
+/proc/end_cooldown(datum/source, index)
+ if(QDELETED(source))
+ return
+ SEND_SIGNAL(source, COMSIG_CD_STOP(index))
+ TIMER_COOLDOWN_END(source, index)
+
+
+/**
+ * Proc used by stoppable timers to end a cooldown before the time has ran out.
+ *
+ * Arguments:
+ * * source - datum storing the cooldown
+ * * index - string index storing the cooldown on the cooldowns associative list
+ *
+ * This sends a signal reporting the cooldown end, passing the time left as an argument.
+ */
+/proc/reset_cooldown(datum/source, index)
+ if(QDELETED(source))
+ return
+ SEND_SIGNAL(source, COMSIG_CD_RESET(index), S_TIMER_COOLDOWN_TIMELEFT(source, index))
+ TIMER_COOLDOWN_END(source, index)
diff --git a/code/datums/dna.dm b/code/datums/dna.dm
index ed5104e296..80059bece7 100644
--- a/code/datums/dna.dm
+++ b/code/datums/dna.dm
@@ -678,7 +678,7 @@
holder.update_transform()
var/danger = CONFIG_GET(number/threshold_body_size_slowdown)
if(features["body_size"] < danger)
- var/slowdown = 1 + round(danger/features["body_size"], 0.1) * CONFIG_GET(number/body_size_slowdown_multiplier)
+ var/slowdown = (1 - round(features["body_size"] / danger, 0.1)) * CONFIG_GET(number/body_size_slowdown_multiplier)
holder.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/small_stride, TRUE, slowdown)
else if(old_size < danger)
holder.remove_movespeed_modifier(/datum/movespeed_modifier/small_stride)
diff --git a/code/datums/martial/boxing.dm b/code/datums/martial/boxing.dm
index e3c7726d61..4682595aec 100644
--- a/code/datums/martial/boxing.dm
+++ b/code/datums/martial/boxing.dm
@@ -58,12 +58,10 @@
var/datum/martial_art/boxing/style = new
/obj/item/clothing/gloves/boxing/equipped(mob/user, slot)
- if(!ishuman(user))
- return
- if(slot == SLOT_GLOVES)
+ . = ..()
+ if(ishuman(user) && slot == SLOT_GLOVES)
var/mob/living/carbon/human/H = user
style.teach(H,TRUE)
- return
/obj/item/clothing/gloves/boxing/dropped(mob/user)
. = ..()
diff --git a/code/datums/martial/krav_maga.dm b/code/datums/martial/krav_maga.dm
index 50438d9d8d..c2fe24a20d 100644
--- a/code/datums/martial/krav_maga.dm
+++ b/code/datums/martial/krav_maga.dm
@@ -196,9 +196,8 @@
var/datum/martial_art/krav_maga/style = new
/obj/item/clothing/gloves/krav_maga/equipped(mob/user, slot)
- if(!ishuman(user))
- return
- if(slot == SLOT_GLOVES)
+ . = ..()
+ if(ishuman(user) && slot == SLOT_GLOVES)
var/mob/living/carbon/human/H = user
style.teach(H,1)
diff --git a/code/datums/martial/wrestling.dm b/code/datums/martial/wrestling.dm
index 87fcf78964..18fd8e7b18 100644
--- a/code/datums/martial/wrestling.dm
+++ b/code/datums/martial/wrestling.dm
@@ -377,7 +377,7 @@
var/turf/ST = null
var/falling = 0
var/damage = damage_roll(A,D)
-
+
for (var/obj/O in oview(1, A))
if (O.density == 1)
if (O == A)
@@ -472,12 +472,10 @@
var/datum/martial_art/wrestling/style = new
/obj/item/storage/belt/champion/wrestling/equipped(mob/user, slot)
- if(!ishuman(user))
- return
- if(slot == SLOT_BELT)
+ . = ..()
+ if(ishuman(user) && slot == SLOT_BELT)
var/mob/living/carbon/human/H = user
style.teach(H,1)
- return
/obj/item/storage/belt/champion/wrestling/dropped(mob/user)
. = ..()
diff --git a/code/datums/skills/_check_skills.dm b/code/datums/skills/_check_skills.dm
index 2421bd36ff..d02a716b8a 100644
--- a/code/datums/skills/_check_skills.dm
+++ b/code/datums/skills/_check_skills.dm
@@ -40,7 +40,7 @@
. = list()
.["playername"] = owner.name
.["see_skill_mods"] = see_skill_mods
- .["admin"] = check_rights(R_DEBUG)
+ .["admin"] = check_rights(R_DEBUG, FALSE)
/datum/skill_holder/ui_act(action, params)
. = ..()
diff --git a/code/datums/skills/_skill.dm b/code/datums/skills/_skill.dm
index e3f1d00ae6..eecf416b1b 100644
--- a/code/datums/skills/_skill.dm
+++ b/code/datums/skills/_skill.dm
@@ -33,6 +33,10 @@ GLOBAL_LIST_INIT_TYPED(skill_datums, /datum/skill, init_skill_datums())
var/base_multiplier = 1
/// Value added to the base multiplier depending on overall competency compared to maximum value/level.
var/competency_multiplier = 1
+ /// Experience gain multiplier gained from using items.
+ var/item_skill_gain_multi = 1
+ /// Skill gain quantisation
+ var/skill_gain_quantisation = 0.1
/// A list of ways this skill can affect or be affected through actions and skill modifiers.
var/list/skill_traits = list(SKILL_SANITY, SKILL_INTELLIGENCE)
/// Index of this skill in the UI
@@ -108,6 +112,10 @@ GLOBAL_LIST_INIT_TYPED(skill_datums, /datum/skill, init_skill_datums())
/// Min value of this skill
var/min_value = 0
+/datum/skill/numerical/New()
+ ..()
+ skill_gain_quantisation = item_skill_gain_multi = item_skill_gain_multi * (max_value - min_value) * STD_NUM_SKILL_ITEM_GAIN_MULTI
+
/datum/skill/numerical/sanitize_value(new_value)
return clamp(new_value, min_value, max_value)
diff --git a/code/datums/skills/_skill_holder.dm b/code/datums/skills/_skill_holder.dm
index 8357211463..73748417c3 100644
--- a/code/datums/skills/_skill_holder.dm
+++ b/code/datums/skills/_skill_holder.dm
@@ -91,10 +91,10 @@
CRASH("Invalid set_skill_value call. Use skill typepaths.") //until a time when we somehow need text ids for dynamic skills, I'm enforcing this.
var/datum/skill/S = GLOB.skill_datums[skill]
value = S.sanitize_value(value)
- skill_holder.need_static_data_update = TRUE
if(!isnull(value))
LAZYINITLIST(skill_holder.skills)
S.set_skill_value(skill_holder, value, src, silent)
+ skill_holder.need_static_data_update = TRUE
return TRUE
return FALSE
@@ -120,11 +120,9 @@
CRASH("You cannot auto increment a non numerical(experience skill!")
var/current = get_skill_value(skill, FALSE)
var/affinity = get_skill_affinity(skill)
- var/target_value = current + (value * affinity)
- if(maximum)
- target_value = min(target_value, maximum)
- if(target_value == maximum) //no more experience to gain, early return.
- return
+ var/target_value = round(current + (value * affinity), S.skill_gain_quantisation)
+ if(maximum && target_value >= maximum) //no more experience to gain, early return.
+ return
boost_skill_value_to(skill, target_value, silent, current)
/**
diff --git a/code/datums/world_topic.dm b/code/datums/world_topic.dm
index 30699d36f4..261e423640 100644
--- a/code/datums/world_topic.dm
+++ b/code/datums/world_topic.dm
@@ -74,6 +74,25 @@
for(var/client/C in GLOB.clients)
C.AnnouncePR(final_composed)
+/datum/world_topic/auto_bunker_passthrough
+ keyword = "auto_bunker_override"
+ require_comms_key = TRUE
+
+/datum/world_topic/auto_bunker_passthrough/Run(list/input)
+ if(!CONFIG_GET(flag/allow_cross_server_bunker_override))
+ return "Function Disabled"
+ var/ckeytobypass = input["ckey"]
+ var/is_new_ckey = !(ckey(ckeytobypass) in GLOB.bunker_passthrough)
+ var/sender = input["source"] || "UNKNOWN"
+ GLOB.bunker_passthrough |= ckey(ckeytobypass)
+ GLOB.bunker_passthrough[ckey(ckeytobypass)] = world.realtime
+ SSpersistence.SavePanicBunker() //we can do this every time, it's okay
+ if(!is_new_ckey)
+ log_admin("AUTO BUNKER: [ckeytobypass] given access (incoming comms from [sender]).")
+ message_admins("AUTO BUNKER: [ckeytobypass] given access (incoming comms from [sender]).")
+ send2irc("Panic Bunker", "AUTO BUNKER: [ckeytobypass] given access (incoming comms from [sender]).")
+ return "Success"
+
/datum/world_topic/ahelp_relay
keyword = "Ahelp"
require_comms_key = TRUE
diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index fedbeb97c0..bbd38e9021 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -436,7 +436,7 @@
var/blood_id = get_blood_id()
if(!(blood_id in GLOB.blood_reagent_types))
return
- return list("color" = list(BLOOD_COLOR_HUMAN), "ANIMAL DNA" = "Y-")
+ return list("color" = BLOOD_COLOR_HUMAN, "ANIMAL DNA" = "Y-")
/mob/living/carbon/get_blood_dna_list()
var/blood_id = get_blood_id()
@@ -444,15 +444,15 @@
return
var/list/blood_dna = list()
if(dna)
- blood_dna["color"] = list(dna.species.exotic_blood_color) //so when combined, the list grows with the number of colors
+ blood_dna["color"] = dna.species.exotic_blood_color //so when combined, the list grows with the number of colors
blood_dna[dna.unique_enzymes] = dna.blood_type
else
- blood_dna["color"] = list(BLOOD_COLOR_HUMAN)
+ blood_dna["color"] = BLOOD_COLOR_HUMAN
blood_dna["UNKNOWN DNA"] = "X*"
return blood_dna
/mob/living/carbon/alien/get_blood_dna_list()
- return list("color" = list(BLOOD_COLOR_XENO), "UNKNOWN DNA" = "X*")
+ return list("color" = BLOOD_COLOR_XENO, "UNKNOWN DNA" = "X*")
//to add a mob's dna info into an object's blood_DNA list.
/atom/proc/transfer_mob_blood_dna(mob/living/L)
@@ -461,25 +461,35 @@
if(!new_blood_dna)
return FALSE
LAZYINITLIST(blood_DNA) //if our list of DNA doesn't exist yet, initialise it.
- LAZYINITLIST(blood_DNA["color"])
var/old_length = blood_DNA.len
blood_DNA |= new_blood_dna
- blood_DNA["color"] += new_blood_dna["color"]
+ var/changed = FALSE
+ if(!blood_DNA["color"])
+ blood_DNA["color"] = new_blood_dna["color"]
+ changed = TRUE
+ else
+ var/old = blood_DNA["color"]
+ blood_DNA["color"] = BlendRGB(blood_DNA["color"], new_blood_dna["color"])
+ changed = old != blood_DNA["color"]
if(blood_DNA.len == old_length)
return FALSE
- return TRUE
+ return changed
//to add blood dna info to the object's blood_DNA list
/atom/proc/transfer_blood_dna(list/blood_dna, list/datum/disease/diseases)
LAZYINITLIST(blood_DNA)
- LAZYINITLIST(blood_dna["color"])
var/old_length = blood_DNA.len
blood_DNA |= blood_dna
if(blood_DNA.len > old_length)
- blood_DNA["color"] += blood_dna["color"]
- return TRUE
+ . = TRUE
//some new blood DNA was added
+ if(!blood_dna["color"])
+ return
+ if(!blood_DNA["color"])
+ blood_DNA["color"] = blood_dna["color"]
+ else
+ blood_DNA["color"] = BlendRGB(blood_DNA["color"], blood_dna["color"])
//to add blood from a mob onto something, and transfer their dna info
/atom/proc/add_mob_blood(mob/living/M)
@@ -548,27 +558,7 @@
return TRUE
/atom/proc/blood_DNA_to_color()
- var/list/colors = list()//first we make a list of all bloodtypes present
- for(var/blood_color in blood_DNA["color"])
- if(colors[blood_color])
- colors[blood_color]++
- else
- colors[blood_color] = 1
-
- var/final_rgb = BLOOD_COLOR_HUMAN //a default so we don't have white blood graphics if something messed up
- if(colors.len)
- var/sum = 0 //this is all shitcode, but it works; trust me
- final_rgb = colors[1]
- sum = colors[colors[1]]
- if(colors.len > 1)
- var/i = 2
- while(i <= colors.len)
- var/tmp = colors[colors[i]]
- final_rgb = BlendRGB(final_rgb, colors[i], tmp/(tmp+sum))
- sum += tmp
- i++
-
- return final_rgb
+ return (blood_DNA && blood_DNA["color"]) || BLOOD_COLOR_HUMAN
/atom/proc/clean_blood()
. = blood_DNA? TRUE : FALSE
diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm
index 3b95b1281f..6312dc08a4 100644
--- a/code/game/gamemodes/objective.dm
+++ b/code/game/gamemodes/objective.dm
@@ -201,10 +201,13 @@ GLOBAL_LIST_EMPTY(objectives)
return won || ..()
/datum/objective/assassinate/once/process()
- won = check_completion()
+ won = check_midround_completion()
if(won)
STOP_PROCESSING(SSprocessing,src)
+/datum/objective/assassinate/once/proc/check_midround_completion()
+ return won || !considered_alive(target) //The target afking / logging off for a bit during the round doesn't complete it, but them being afk at roundend does.
+
/datum/objective/assassinate/internal
var/stolen = 0 //Have we already eliminated this target?
diff --git a/code/game/gamemodes/wizard/wizard.dm b/code/game/gamemodes/wizard/wizard.dm
index 2f3645a248..23f065318e 100644
--- a/code/game/gamemodes/wizard/wizard.dm
+++ b/code/game/gamemodes/wizard/wizard.dm
@@ -44,7 +44,7 @@
/datum/game_mode/wizard/are_special_antags_dead()
- for(var/datum/mind/wizard in wizards)
+ for(var/datum/mind/wizard in wizards | apprentices)
if(isliving(wizard.current) && wizard.current.stat!=DEAD)
return FALSE
@@ -58,6 +58,14 @@
return TRUE
+/datum/game_mode/wizard/check_finished()
+ . = ..()
+ if(.)
+ finished = TRUE
+ else if(gamemode_ready && are_special_antags_dead() && !CONFIG_GET(keyed_list/continuous)[config_tag])
+ finished = TRUE
+ . = TRUE
+
/datum/game_mode/wizard/set_round_result()
..()
if(finished)
diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm
index 9afe4808fd..6f798a41ef 100644
--- a/code/game/machinery/cloning.dm
+++ b/code/game/machinery/cloning.dm
@@ -26,6 +26,7 @@
var/efficiency
var/datum/mind/clonemind
+ var/get_clone_mind = CLONEPOD_GET_MIND
var/grab_ghost_when = CLONER_MATURE_CLONE
var/internal_radio = TRUE
@@ -134,43 +135,44 @@
return examine(user)
//Start growing a human clone in the pod!
-/obj/machinery/clonepod/proc/growclone(ckey, clonename, ui, mutation_index, mindref, datum/species/mrace, list/features, factions, list/quirks, datum/bank_account/insurance, list/traumas)
+/obj/machinery/clonepod/proc/growclone(ckey, clonename, ui, mutation_index, mindref, blood_type, datum/species/mrace, list/features, factions, list/quirks, datum/bank_account/insurance, list/traumas)
if(panel_open)
return FALSE
if(mess || attempting)
return FALSE
- clonemind = locate(mindref) in SSticker.minds
- if(!istype(clonemind)) //not a mind
- return FALSE
- if(!QDELETED(clonemind.current))
- if(clonemind.current.stat != DEAD) //mind is associated with a non-dead body
+ if(get_clone_mind == CLONEPOD_GET_MIND)
+ clonemind = locate(mindref) in SSticker.minds
+ if(!istype(clonemind)) //not a mind
return FALSE
- if(clonemind.current.suiciding) // Mind is associated with a body that is suiciding.
+ if(!QDELETED(clonemind.current))
+ if(clonemind.current.stat != DEAD) //mind is associated with a non-dead body
+ return FALSE
+ if(clonemind.current.suiciding) // Mind is associated with a body that is suiciding.
+ return FALSE
+ if(AmBloodsucker(clonemind.current)) //If the mind is a bloodsucker
+ return FALSE
+ if(clonemind.active) //somebody is using that mind
+ if( ckey(clonemind.key)!=ckey )
+ return FALSE
+ else
+ // get_ghost() will fail if they're unable to reenter their body
+ var/mob/dead/observer/G = clonemind.get_ghost()
+ if(!G)
+ return FALSE
+ if(G.suiciding) // The ghost came from a body that is suiciding.
+ return FALSE
+ if(clonemind.damnation_type) //Can't clone the damned.
+ INVOKE_ASYNC(src, .proc/horrifyingsound)
+ mess = TRUE
+ update_icon()
return FALSE
- if(AmBloodsucker(clonemind.current)) //If the mind is a bloodsucker
- return FALSE
- if(clonemind.active) //somebody is using that mind
- if( ckey(clonemind.key)!=ckey )
- return FALSE
- else
- // get_ghost() will fail if they're unable to reenter their body
- var/mob/dead/observer/G = clonemind.get_ghost()
- if(!G)
- return FALSE
- if(G.suiciding) // The ghost came from a body that is suiciding.
- return FALSE
- if(clonemind.damnation_type) //Can't clone the damned.
- INVOKE_ASYNC(src, .proc/horrifyingsound)
- mess = TRUE
- update_icon()
- return FALSE
current_insurance = insurance
attempting = TRUE //One at a time!!
countdown.start()
var/mob/living/carbon/human/H = new /mob/living/carbon/human(src)
- H.hardset_dna(ui, mutation_index, H.real_name, null, mrace, features)
+ H.hardset_dna(ui, mutation_index, H.real_name, blood_type, mrace, features)
H.easy_randmut(NEGATIVE+MINOR_NEGATIVE) //100% bad mutation. Can be cured with mutadone.
@@ -192,7 +194,14 @@
ADD_TRAIT(H, TRAIT_NOCRITDAMAGE, CLONING_POD_TRAIT)
H.Unconscious(80)
- clonemind.transfer_to(H)
+ if(clonemind)
+ clonemind.transfer_to(H)
+
+ else if(get_clone_mind == CLONEPOD_POLL_MIND)
+ var/list/candidates = pollCandidatesForMob("Do you want to play as [clonename]'s defective clone? (Don't ERP without permission from the original)", null, null, null, 100, H, POLL_IGNORE_CLONE)
+ if(LAZYLEN(candidates))
+ var/mob/C = pick(candidates)
+ H.key = C.key
if(grab_ghost_when == CLONER_FRESH_CLONE)
H.grab_ghost()
@@ -549,6 +558,17 @@
. += "cover-on"
. += "panel"
+//Experimental cloner; clones a body regardless of the owner's status, letting a ghost control it instead
+/obj/machinery/clonepod/experimental
+ name = "experimental cloning pod"
+ desc = "An ancient cloning pod. It seems to be an early prototype of the experimental cloners used in Nanotrasen Stations."
+ icon = 'icons/obj/machines/cloning.dmi'
+ icon_state = "pod_0"
+ req_access = null
+ circuit = /obj/item/circuitboard/machine/clonepod/experimental
+ internal_radio = FALSE
+ get_clone_mind = CLONEPOD_POLL_MIND
+
/*
* Manual -- A big ol' manual.
*/
diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm
index 7834d6f2a2..400ce041c7 100644
--- a/code/game/machinery/computer/cloning.dm
+++ b/code/game/machinery/computer/cloning.dm
@@ -8,6 +8,7 @@
circuit = /obj/item/circuitboard/computer/cloning
req_access = list(ACCESS_HEADS) //ONLY USED FOR RECORD DELETION RIGHT NOW.
var/obj/machinery/dna_scannernew/scanner = null //Linked scanner. For scanning.
+ var/clonepod_type = /obj/machinery/clonepod
var/list/pods //Linked cloning pods
var/temp = "Inactive"
var/scantemp_ckey
@@ -17,6 +18,7 @@
var/obj/item/disk/data/diskette = null //Mostly so the geneticist can steal everything.
var/loading = 0 // Nice loading text
var/autoprocess = 0
+ var/use_records = TRUE // Old experimental cloner.
var/list/records = list()
light_color = LIGHT_COLOR_BLUE
@@ -36,29 +38,32 @@
return ..()
/obj/machinery/computer/cloning/proc/GetAvailablePod(mind = null)
- if(pods)
- for(var/P in pods)
- var/obj/machinery/clonepod/pod = P
- if(pod.occupant && pod.clonemind == mind)
- return null
- if(pod.is_operational() && !(pod.occupant || pod.mess))
- return pod
+ if(!pods)
+ return
+ for(var/P in pods)
+ var/obj/machinery/clonepod/pod = P
+ if(pod.occupant && pod.get_clone_mind == CLONEPOD_GET_MIND && pod.clonemind == mind)
+ return null
+ if(pod.is_operational() && !(pod.occupant || pod.mess))
+ return pod
/obj/machinery/computer/cloning/proc/HasEfficientPod()
- if(pods)
- for(var/P in pods)
- var/obj/machinery/clonepod/pod = P
- if(pod.is_operational() && pod.efficiency > 5)
- return TRUE
+ if(!pods)
+ return
+ for(var/P in pods)
+ var/obj/machinery/clonepod/pod = P
+ if(pod.is_operational() && pod.efficiency > 5)
+ return TRUE
/obj/machinery/computer/cloning/proc/GetAvailableEfficientPod(mind = null)
- if(pods)
- for(var/P in pods)
- var/obj/machinery/clonepod/pod = P
- if(pod.occupant && pod.clonemind == mind)
- return pod
- else if(!. && pod.is_operational() && !(pod.occupant || pod.mess) && pod.efficiency > 5)
- . = pod
+ if(!pods)
+ return
+ for(var/P in pods)
+ var/obj/machinery/clonepod/pod = P
+ if(pod.occupant && pod.clonemind == mind)
+ return pod
+ else if(!. && pod.is_operational() && !(pod.occupant || pod.mess) && pod.efficiency > 5)
+ . = pod
/obj/machinery/computer/cloning/process()
if(!(scanner && LAZYLEN(pods) && autoprocess))
@@ -73,7 +78,7 @@
if(pod.occupant)
continue //how though?
- if(pod.growclone(R.fields["ckey"], R.fields["name"], R.fields["UI"], R.fields["SE"], R.fields["mind"], R.fields["mrace"], R.fields["features"], R.fields["factions"], R.fields["quirks"], R.fields["bank_account"], R.fields["traumas"]))
+ if(pod.growclone(R.fields["ckey"], R.fields["name"], R.fields["UI"], R.fields["SE"], R.fields["mind"], R.fields["blood_type"], R.fields["mrace"], R.fields["features"], R.fields["factions"], R.fields["quirks"], R.fields["bank_account"], R.fields["traumas"]))
temp = "[R.fields["name"]] => Cloning cycle in progress..."
records -= R
@@ -103,12 +108,10 @@
return null
/obj/machinery/computer/cloning/proc/findcloner()
- var/obj/machinery/clonepod/podf = null
-
+ var/obj/machinery/clonepod/podf
for(var/direction in GLOB.cardinals)
-
- podf = locate(/obj/machinery/clonepod, get_step(src, direction))
- if (!isnull(podf) && podf.is_operational())
+ podf = locate(clonepod_type, get_step(src, direction))
+ if(podf?.is_operational())
AttachCloner(podf)
/obj/machinery/computer/cloning/proc/AttachCloner(obj/machinery/clonepod/pod)
@@ -132,7 +135,7 @@
else if(istype(W, /obj/item/multitool))
var/obj/item/multitool/P = W
- if(istype(P.buffer, /obj/machinery/clonepod))
+ if(istype(P.buffer, clonepod_type))
if(get_area(P.buffer) != get_area(src))
to_chat(user, "-% Cannot link machines across power zones. Buffer cleared %-")
P.buffer = null
@@ -157,13 +160,14 @@
var/dat = ""
dat += "Refresh"
- if(scanner && HasEfficientPod() && scanner.scan_level >= AUTOCLONING_MINIMAL_LEVEL)
- if(!autoprocess)
- dat += "Autoclone"
+ if(use_records)
+ if(scanner && HasEfficientPod() && scanner.scan_level >= AUTOCLONING_MINIMAL_LEVEL)
+ if(!autoprocess)
+ dat += "Autoclone"
+ else
+ dat += "Stop autoclone"
else
- dat += "Stop autoclone"
- else
- dat += "Autoclone"
+ dat += "Autoclone"
dat += "
Cloning Pod Status
"
dat += "
[temp]
"
@@ -190,26 +194,29 @@
else if(loading)
dat += "[scanner_occupant] => Scanning..."
else
- if(scanner_occupant.ckey != scantemp_ckey)
- scantemp = "Ready to Scan"
- scantemp_ckey = scanner_occupant.ckey
+ if(use_records)
+ if(scanner_occupant.ckey != scantemp_ckey)
+ scantemp = "Ready to Scan"
+ scantemp_ckey = scanner_occupant.ckey
+ else
+ scantemp = "Ready to Clone"
dat += "[scanner_occupant] => [scantemp]"
dat += ""
if(scanner_occupant)
- dat += "Start Scan"
- dat += " [src.scanner.locked ? "Unlock Scanner" : "Lock Scanner"]"
+ dat += "[use_records ? "Start Scan" : "Clone"]"
+ dat += " [scanner.locked ? "Unlock Scanner" : "Lock Scanner"]"
else
- dat += "Start Scan"
-
- // Database
- dat += "
Database Functions
"
- if (src.records.len && src.records.len > 0)
- dat += "View Records ([src.records.len]) "
- else
- dat += "View Records (0) "
- if (src.diskette)
- dat += "Eject Disk "
+ dat += "[use_records ? "Start Scan" : "Clone"]"
+ if(use_records)
+ // Database
+ dat += "
Database Functions
"
+ if (src.records.len && src.records.len > 0)
+ dat += "View Records ([src.records.len]) "
+ else
+ dat += "View Records (0) "
+ if (src.diskette)
+ dat += "Eject Disk "
@@ -290,24 +297,19 @@
autoprocess = FALSE
STOP_PROCESSING(SSmachines, src)
playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
+ . = TRUE
else if ((href_list["scan"]) && !isnull(scanner) && scanner.is_operational())
scantemp = ""
- loading = 1
+ loading = TRUE
src.updateUsrDialog()
playsound(src, 'sound/machines/terminal_prompt.ogg', 50, 0)
say("Initiating scan...")
var/prev_locked = scanner.locked
scanner.locked = TRUE
- spawn(20)
- src.scan_occupant(scanner.occupant)
-
- loading = 0
- src.updateUsrDialog()
- playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
- scanner.locked = prev_locked
-
+ addtimer(CALLBACK(src, .proc/finish_scan, scanner.occupant, prev_locked), 2 SECONDS)
+ . = TRUE
//No locking an open scanner.
else if ((href_list["lock"]) && !isnull(scanner) && scanner.is_operational())
@@ -317,8 +319,17 @@
else
scanner.locked = FALSE
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
+ . = TRUE
- else if(href_list["view_rec"])
+
+ else if (href_list["refresh"])
+ src.updateUsrDialog()
+ playsound(src, "terminal_type", 25, 0)
+ . = TRUE
+
+ if(. || !use_records)
+ return
+ if(href_list["view_rec"])
playsound(src, "terminal_type", 25, 0)
src.active_record = find_record("id", href_list["view_rec"], records)
if(active_record)
@@ -330,6 +341,7 @@
src.menu = 3
else
src.temp = "Record missing."
+ . = TRUE
else if (href_list["del_rec"])
if ((!src.active_record) || (src.menu < 3))
@@ -353,8 +365,9 @@
else
src.temp = "Access Denied."
playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
+ . = TRUE
- else if (href_list["disk"]) //Load or eject.
+ else if (href_list["disk"] && use_records) //Load or eject.
switch(href_list["disk"])
if("load")
if (!diskette || !istype(diskette.fields) || !diskette.fields["name"] || !diskette.fields)
@@ -392,10 +405,7 @@
diskette.name = "data disk - '[src.diskette.fields["name"]]'"
src.temp = "Save successful."
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
-
- else if (href_list["refresh"])
- src.updateUsrDialog()
- playsound(src, "terminal_type", 25, 0)
+ . = TRUE
else if (href_list["clone"])
var/datum/data/record/C = find_record("id", href_list["clone"], records)
@@ -415,7 +425,7 @@
else if(pod.occupant)
temp = "Cloning cycle already in progress."
playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
- else if(pod.growclone(C.fields["ckey"], C.fields["name"], C.fields["UI"], C.fields["SE"], C.fields["mind"], C.fields["mrace"], C.fields["features"], C.fields["factions"], C.fields["quirks"], C.fields["bank_account"]))
+ else if(pod.growclone(C.fields["ckey"], C.fields["name"], C.fields["UI"], C.fields["SE"], C.fields["mind"], C.fields["blood_type"], C.fields["mrace"], C.fields["features"], C.fields["factions"], C.fields["quirks"], C.fields["bank_account"], C.fields["traumas"]))
temp = "[C.fields["name"]] => Cloning cycle in progress..."
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
records.Remove(C)
@@ -429,14 +439,28 @@
else
temp = "Data corruption."
playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
+ . = TRUE
- else if (href_list["menu"])
- src.menu = text2num(href_list["menu"])
+ else if (href_list["menu"] && use_records)
+ menu = text2num(href_list["menu"])
playsound(src, "terminal_type", 25, 0)
+ . = TRUE
+/obj/machinery/computer/cloning/proc/finish_scan(mob/living/L, prev_locked)
+ if(!scanner || !L)
+ return
src.add_fingerprint(usr)
src.updateUsrDialog()
- return
+
+ if(use_records)
+ scan_occupant(L)
+ else
+ clone_occupant(L)
+
+ loading = FALSE
+ src.updateUsrDialog()
+ playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
+ scanner.locked = prev_locked
/obj/machinery/computer/cloning/proc/scan_occupant(occupant)
var/mob/living/mob_occupant = get_mob_or_brainmob(occupant)
@@ -455,30 +479,9 @@
if(isbrain(mob_occupant))
dna = B.stored_dna
- if(!istype(dna))
- scantemp = "Unable to locate valid genetic data."
- playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
- return
- if(mob_occupant.suiciding || mob_occupant.hellbound)
- scantemp = "Subject's brain is not responding to scanning stimuli."
- playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
- return
- if((HAS_TRAIT(mob_occupant, TRAIT_NOCLONE)) && (src.scanner.scan_level < 2))
- scantemp = "Subject no longer contains the fundamental materials required to create a living clone."
- playsound(src, 'sound/machines/terminal_alert.ogg', 50, 0)
- return
- if ((!mob_occupant.ckey) || (!mob_occupant.client))
- scantemp = "Mental interface failure."
- playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
- return
- if (find_record("ckey", mob_occupant.ckey, records))
- scantemp = "Subject already in database."
- playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
- return
- if(SSeconomy.full_ancap && !has_bank_account)
- scantemp = "Subject is either missing an ID card with a bank account on it, or does not have an account to begin with. Please ensure the ID card is on the body before attempting to scan."
- playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
+ if(!can_scan(dna, mob_occupant, FALSE, has_bank_account))
return
+
var/datum/data/record/R = new()
if(dna.species)
// We store the instance rather than the path, because some
@@ -529,3 +532,78 @@
board.records = records
scantemp = "Subject successfully scanned."
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
+
+//Used by the experimental cloning computer.
+/obj/machinery/computer/cloning/proc/clone_occupant(occupant)
+ var/mob/living/mob_occupant = get_mob_or_brainmob(occupant)
+ var/datum/dna/dna
+ if(ishuman(mob_occupant))
+ var/mob/living/carbon/C = mob_occupant
+ dna = C.has_dna()
+ if(isbrain(mob_occupant))
+ var/mob/living/brain/B = mob_occupant
+ dna = B.stored_dna
+
+ if(!can_scan(dna, mob_occupant, TRUE))
+ return
+
+ var/clone_species
+ if(dna.species)
+ clone_species = dna.species
+ else
+ var/datum/species/rando_race = pick(GLOB.roundstart_races)
+ clone_species = rando_race.type
+
+ var/obj/machinery/clonepod/pod = GetAvailablePod()
+ //Can't clone without someone to clone. Or a pod. Or if the pod is busy. Or full of gibs.
+ if(!LAZYLEN(pods))
+ temp = "No Clonepods detected."
+ playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
+ else if(!pod)
+ temp = "No Clonepods available."
+ playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
+ else if(pod.occupant)
+ temp = "Cloning cycle already in progress."
+ playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
+ else
+ pod.growclone(null, mob_occupant.real_name, dna.uni_identity, dna.mutation_index, null, dna.blood_type, clone_species, dna.features, mob_occupant.faction)
+ temp = "[mob_occupant.real_name] => Cloning data sent to pod."
+ playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
+
+/obj/machinery/computer/cloning/proc/can_scan(datum/dna/dna, mob/living/mob_occupant, experimental = FALSE, datum/bank_account/account)
+ if(!istype(dna))
+ scantemp = "Unable to locate valid genetic data."
+ playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
+ return
+ if(!experimental)
+ if(mob_occupant.suiciding || mob_occupant.hellbound)
+ scantemp = "Subject's brain is not responding to scanning stimuli."
+ playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
+ return
+ if((HAS_TRAIT(mob_occupant, TRAIT_NOCLONE)) && (src.scanner.scan_level < 2))
+ scantemp = "Subject no longer contains the fundamental materials required to create a living clone."
+ playsound(src, 'sound/machines/terminal_alert.ogg', 50, 0)
+ return
+ if (!experimental)
+ if(!mob_occupant.ckey || !mob_occupant.client)
+ scantemp = "Mental interface failure."
+ playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
+ return
+ if (find_record("ckey", mob_occupant.ckey, records))
+ scantemp = "Subject already in database."
+ playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
+ return
+ if(SSeconomy.full_ancap && !account)
+ scantemp = "Subject is either missing an ID card with a bank account on it, or does not have an account to begin with. Please ensure the ID card is on the body before attempting to scan."
+ playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
+ return
+ return TRUE
+
+//Prototype cloning console, much more rudimental and lacks modern functions such as saving records, autocloning, or safety checks.
+/obj/machinery/computer/cloning/prototype
+ name = "prototype cloning console"
+ desc = "Used to operate an experimental cloner."
+ icon_screen = "dna"
+ icon_keyboard = "med_key"
+ circuit = /obj/item/circuitboard/computer/cloning/prototype
+ clonepod_type = /obj/machinery/clonepod/experimental
diff --git a/code/game/machinery/exp_cloner.dm b/code/game/machinery/exp_cloner.dm
deleted file mode 100644
index 2c669aac80..0000000000
--- a/code/game/machinery/exp_cloner.dm
+++ /dev/null
@@ -1,298 +0,0 @@
-//Experimental cloner; clones a body regardless of the owner's status, letting a ghost control it instead
-/obj/machinery/clonepod/experimental
- name = "experimental cloning pod"
- desc = "An ancient cloning pod. It seems to be an early prototype of the experimental cloners used in Nanotrasen Stations."
- icon = 'icons/obj/machines/cloning.dmi'
- icon_state = "pod_0"
- req_access = null
- circuit = /obj/item/circuitboard/machine/clonepod/experimental
- internal_radio = FALSE
-
-//Start growing a human clone in the pod!
-/obj/machinery/clonepod/experimental/growclone(clonename, ui, mutation_index, mindref, last_death, blood_type, datum/species/mrace, list/features, factions, list/quirks)
- if(panel_open)
- return FALSE
- if(mess || attempting)
- return FALSE
-
- attempting = TRUE //One at a time!!
- countdown.start()
-
- var/mob/living/carbon/human/H = new /mob/living/carbon/human(src)
-
- H.hardset_dna(ui, mutation_index, H.real_name, blood_type, mrace, features)
-
- if(efficiency > 2)
- var/list/unclean_mutations = (GLOB.not_good_mutations|GLOB.bad_mutations)
- H.dna.remove_mutation_group(unclean_mutations)
- if(efficiency > 5 && prob(20))
- H.easy_randmut(POSITIVE)
- if(efficiency < 3 && prob(50))
- var/mob/M = H.easy_randmut(NEGATIVE+MINOR_NEGATIVE)
- if(ismob(M))
- H = M
-
- H.silent = 20 //Prevents an extreme edge case where clones could speak if they said something at exactly the right moment.
- occupant = H
-
- if(!clonename) //to prevent null names
- clonename = "clone ([rand(1,999)])"
- H.real_name = clonename
-
- icon_state = "pod_1"
- //Get the clone body ready
- maim_clone(H)
- ADD_TRAIT(H, TRAIT_STABLEHEART, "cloning")
- ADD_TRAIT(H, TRAIT_EMOTEMUTE, "cloning")
- ADD_TRAIT(H, TRAIT_MUTE, "cloning")
- ADD_TRAIT(H, TRAIT_NOBREATH, "cloning")
- ADD_TRAIT(H, TRAIT_NOCRITDAMAGE, "cloning")
- H.Unconscious(80)
-
- var/list/candidates = pollCandidatesForMob("Do you want to play as [clonename]'s defective clone?", null, null, null, 100, H)
- if(LAZYLEN(candidates))
- var/mob/C = pick(candidates)
- H.key = C.key
-
- if(grab_ghost_when == CLONER_FRESH_CLONE)
- H.grab_ghost()
- to_chat(H, "Consciousness slowly creeps over you as your body regenerates. So this is what cloning feels like?")
-
- if(grab_ghost_when == CLONER_MATURE_CLONE)
- H.ghostize(TRUE) //Only does anything if they were still in their old body and not already a ghost
- to_chat(H.get_ghost(TRUE), "Your body is beginning to regenerate in a cloning pod. You will become conscious when it is complete.")
-
- if(H)
- H.faction |= factions
-
- H.set_cloned_appearance()
-
- H.suiciding = FALSE
- attempting = FALSE
- return TRUE
-
-
-//Prototype cloning console, much more rudimental and lacks modern functions such as saving records, autocloning, or safety checks.
-/obj/machinery/computer/prototype_cloning
- name = "prototype cloning console"
- desc = "Used to operate an experimental cloner."
- icon_screen = "dna"
- icon_keyboard = "med_key"
- circuit = /obj/item/circuitboard/computer/prototype_cloning
- var/obj/machinery/dna_scannernew/scanner = null //Linked scanner. For scanning.
- var/list/pods //Linked experimental cloning pods
- var/temp = "Inactive"
- var/scantemp = "Ready to Scan"
- var/loading = FALSE // Nice loading text
-
- light_color = LIGHT_COLOR_BLUE
-
-/obj/machinery/computer/prototype_cloning/Initialize()
- . = ..()
- updatemodules(TRUE)
-
-/obj/machinery/computer/prototype_cloning/Destroy()
- if(pods)
- for(var/P in pods)
- DetachCloner(P)
- pods = null
- return ..()
-
-/obj/machinery/computer/prototype_cloning/proc/GetAvailablePod(mind = null)
- if(pods)
- for(var/P in pods)
- var/obj/machinery/clonepod/experimental/pod = P
- if(pod.is_operational() && !(pod.occupant || pod.mess))
- return pod
-
-/obj/machinery/computer/prototype_cloning/proc/updatemodules(findfirstcloner)
- scanner = findscanner()
- if(findfirstcloner && !LAZYLEN(pods))
- findcloner()
-
-/obj/machinery/computer/prototype_cloning/proc/findscanner()
- var/obj/machinery/dna_scannernew/scannerf = null
-
- // Loop through every direction
- for(var/direction in GLOB.cardinals)
- // Try to find a scanner in that direction
- scannerf = locate(/obj/machinery/dna_scannernew, get_step(src, direction))
- // If found and operational, return the scanner
- if (!isnull(scannerf) && scannerf.is_operational())
- return scannerf
-
- // If no scanner was found, it will return null
- return null
-
-/obj/machinery/computer/prototype_cloning/proc/findcloner()
- var/obj/machinery/clonepod/experimental/podf = null
- for(var/direction in GLOB.cardinals)
- podf = locate(/obj/machinery/clonepod/experimental, get_step(src, direction))
- if (!isnull(podf) && podf.is_operational())
- AttachCloner(podf)
-
-/obj/machinery/computer/prototype_cloning/proc/AttachCloner(obj/machinery/clonepod/experimental/pod)
- if(!pod.connected)
- pod.connected = src
- LAZYADD(pods, pod)
-
-/obj/machinery/computer/prototype_cloning/proc/DetachCloner(obj/machinery/clonepod/experimental/pod)
- pod.connected = null
- LAZYREMOVE(pods, pod)
-
-/obj/machinery/computer/prototype_cloning/attackby(obj/item/W, mob/user, params)
- if(istype(W, /obj/item/multitool))
- var/obj/item/multitool/P = W
-
- if(istype(P.buffer, /obj/machinery/clonepod/experimental))
- if(get_area(P.buffer) != get_area(src))
- to_chat(user, "-% Cannot link machines across power zones. Buffer cleared %-")
- P.buffer = null
- return
- to_chat(user, "-% Successfully linked [P.buffer] with [src] %-")
- var/obj/machinery/clonepod/experimental/pod = P.buffer
- if(pod.connected)
- pod.connected.DetachCloner(pod)
- AttachCloner(pod)
- else
- P.buffer = src
- to_chat(user, "-% Successfully stored [REF(P.buffer)] [P.buffer.name] in buffer %-")
- return
- else
- return ..()
-
-/obj/machinery/computer/prototype_cloning/attack_hand(mob/user)
- if(..())
- return
- interact(user)
-
-/obj/machinery/computer/prototype_cloning/interact(mob/user)
- user.set_machine(src)
- add_fingerprint(user)
-
- if(..())
- return
-
- updatemodules(TRUE)
-
- var/dat = ""
- dat += "Refresh"
-
- dat += "
Cloning Pod Status
"
- dat += "
[temp]
"
-
- if (isnull(src.scanner) || !LAZYLEN(pods))
- dat += "
Modules
"
- //dat += "Reload Modules"
- if (isnull(src.scanner))
- dat += "ERROR: No Scanner detected! "
- if (!LAZYLEN(pods))
- dat += "ERROR: No Pod detected "
-
- // Scan-n-Clone
- if (!isnull(src.scanner))
- var/mob/living/scanner_occupant = get_mob_or_brainmob(scanner.occupant)
-
- dat += "
Cloning
"
-
- dat += "
"
- if(!scanner_occupant)
- dat += "Scanner Unoccupied"
- else if(loading)
- dat += "[scanner_occupant] => Scanning..."
- else
- scantemp = "Ready to Clone"
- dat += "[scanner_occupant] => [scantemp]"
- dat += "
"
-
- if(scanner_occupant)
- dat += "Clone"
- dat += " [src.scanner.locked ? "Unlock Scanner" : "Lock Scanner"]"
- else
- dat += "Clone"
-
- var/datum/browser/popup = new(user, "cloning", "Prototype Cloning System Control")
- popup.set_content(dat)
- popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
- popup.open()
-
-/obj/machinery/computer/prototype_cloning/Topic(href, href_list)
- if(..())
- return
-
- if(loading)
- return
-
- else if ((href_list["clone"]) && !isnull(scanner) && scanner.is_operational())
- scantemp = ""
-
- loading = TRUE
- updateUsrDialog()
- playsound(src, 'sound/machines/terminal_prompt.ogg', 50, 0)
- say("Initiating scan...")
-
- spawn(20)
- clone_occupant(scanner.occupant)
- loading = FALSE
- updateUsrDialog()
- playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
-
- //No locking an open scanner.
- else if ((href_list["lock"]) && !isnull(scanner) && scanner.is_operational())
- if ((!scanner.locked) && (scanner.occupant))
- scanner.locked = TRUE
- playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
- else
- scanner.locked = FALSE
- playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
-
- else if (href_list["refresh"])
- updateUsrDialog()
- playsound(src, "terminal_type", 25, 0)
-
- add_fingerprint(usr)
- updateUsrDialog()
- return
-
-/obj/machinery/computer/prototype_cloning/proc/clone_occupant(occupant)
- var/mob/living/mob_occupant = get_mob_or_brainmob(occupant)
- var/datum/dna/dna
- if(ishuman(mob_occupant))
- var/mob/living/carbon/C = mob_occupant
- dna = C.has_dna()
- if(isbrain(mob_occupant))
- var/mob/living/brain/B = mob_occupant
- dna = B.stored_dna
-
- if(!istype(dna))
- scantemp = "Unable to locate valid genetic data."
- playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
- return
- if((HAS_TRAIT(mob_occupant, TRAIT_NOCLONE)) && (src.scanner.scan_level < 2))
- scantemp = "Subject no longer contains the fundamental materials required to create a living clone."
- playsound(src, 'sound/machines/terminal_alert.ogg', 50, 0)
- return
-
- var/clone_species
- if(dna.species)
- clone_species = dna.species
- else
- var/datum/species/rando_race = pick(GLOB.roundstart_races)
- clone_species = rando_race.type
-
- var/obj/machinery/clonepod/pod = GetAvailablePod()
- //Can't clone without someone to clone. Or a pod. Or if the pod is busy. Or full of gibs.
- if(!LAZYLEN(pods))
- temp = "No Clonepods detected."
- playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
- else if(!pod)
- temp = "No Clonepods available."
- playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
- else if(pod.occupant)
- temp = "Cloning cycle already in progress."
- playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
- else
- pod.growclone(mob_occupant.real_name, dna.uni_identity, dna.mutation_index, null, null, dna.blood_type, clone_species, dna.features, mob_occupant.faction)
- temp = "[mob_occupant.real_name] => Cloning data sent to pod."
- playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
-
diff --git a/code/game/objects/effects/contraband.dm b/code/game/objects/effects/contraband.dm
index c56731b3d3..faab0df6e9 100644
--- a/code/game/objects/effects/contraband.dm
+++ b/code/game/objects/effects/contraband.dm
@@ -212,6 +212,11 @@
desc = "A heretical poster depicting the titular star of an equally heretical book."
icon_state = "poster4"
+/obj/structure/sign/poster/contraband/post_ratvar
+ name = "Post This Ratvar"
+ desc = "Oh what in the hell? Those cultists have animated paper technology and they use it for a meme?"
+ icon_state = "postvar"
+
/obj/structure/sign/poster/contraband/syndicate_recruitment
name = "Syndicate Recruitment"
desc = "See the galaxy! Shatter corrupt megacorporations! Join today!"
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index 79e0eceb8f..90e232938c 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -68,6 +68,7 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb
var/click_delay = CLICK_CD_MELEE
var/slot_flags = 0 //This is used to determine on which slots an item can fit.
+ var/current_equipped_slot
pass_flags = PASSTABLE
pressure_resistance = 4
var/obj/item/master = null
@@ -179,6 +180,11 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb
if(damtype == "brute")
hitsound = "swing_hit"
+ if(used_skills)
+ for(var/path in used_skills)
+ var/datum/skill/S = GLOB.skill_datums[path]
+ LAZYADD(used_skills[path], S.skill_traits)
+
/obj/item/Destroy()
item_flags &= ~DROPDEL //prevent reqdels
if(ismob(loc))
@@ -315,6 +321,10 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb
return
if(anchored)
return
+ if(loc == user && current_equipped_slot && current_equipped_slot != SLOT_HANDS)
+ if(current_equipped_slot in user.check_obscured_slots())
+ to_chat(src, "You are unable to unequip that while wearing other garments over it!")
+ return FALSE
if(resistance_flags & ON_FIRE)
var/mob/living/carbon/C = user
@@ -336,7 +346,7 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb
C.update_damage_overlays()
return
- if(acid_level > 20 && !ismob(loc))// so we can still remove the clothes on us that have acid.
+ if(acid_level > 20 && ismob(loc))// so we can still remove the clothes on us that have acid.
var/mob/living/carbon/C = user
if(istype(C))
if(!C.gloves || (!(C.gloves.resistance_flags & (UNACIDABLE|ACID_PROOF))))
@@ -379,6 +389,11 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb
return
if(anchored)
return
+ if(loc == user && current_equipped_slot && current_equipped_slot != SLOT_HANDS)
+ if(current_equipped_slot in user.check_obscured_slots())
+ to_chat(src, "You are unable to unequip that while wearing other garments over it!")
+ return FALSE
+
SEND_SIGNAL(loc, COMSIG_TRY_STORAGE_TAKE, src, user.loc, TRUE)
@@ -423,6 +438,7 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb
/obj/item/proc/dropped(mob/user)
SHOULD_CALL_PARENT(TRUE)
+ current_equipped_slot = null
for(var/X in actions)
var/datum/action/A = X
A.Remove(user)
@@ -470,7 +486,9 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb
// for items that can be placed in multiple slots
// note this isn't called during the initial dressing of a player
/obj/item/proc/equipped(mob/user, slot)
+ SHOULD_CALL_PARENT(TRUE)
. = SEND_SIGNAL(src, COMSIG_ITEM_EQUIPPED, user, slot)
+ current_equipped_slot = slot
if(!(. & COMPONENT_NO_GRANT_ACTIONS))
for(var/X in actions)
var/datum/action/A = X
@@ -496,11 +514,11 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb
//if this is being done by a mob other than M, it will include the mob equipper, who is trying to equip the item to mob M. equipper will be null otherwise.
//If you are making custom procs but would like to retain partial or complete functionality of this one, include a 'return ..()' to where you want this to happen.
//Set disable_warning to TRUE if you wish it to not give you outputs.
-/obj/item/proc/mob_can_equip(mob/living/M, mob/living/equipper, slot, disable_warning = FALSE, bypass_equip_delay_self = FALSE)
+/obj/item/proc/mob_can_equip(mob/living/M, mob/living/equipper, slot, disable_warning = FALSE, bypass_equip_delay_self = FALSE, clothing_check = FALSE, list/return_warning)
if(!M)
return FALSE
- return M.can_equip(src, slot, disable_warning, bypass_equip_delay_self)
+ return M.can_equip(src, slot, disable_warning, bypass_equip_delay_self, clothing_check, return_warning)
/obj/item/verb/verb_pickup()
set src in oview(1)
@@ -835,7 +853,7 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb
// Called when a mob tries to use the item as a tool.
// Handles most checks.
-/obj/item/proc/use_tool(atom/target, mob/living/user, delay, amount=0, volume=0, datum/callback/extra_checks, skill_gain_mult = 1, max_level = INFINITY)
+/obj/item/proc/use_tool(atom/target, mob/living/user, delay, amount=0, volume=0, datum/callback/extra_checks, skill_gain_mult = STD_USE_TOOL_MULT)
// No delay means there is no start message, and no reason to call tool_start_check before use_tool.
// Run the start check here so we wouldn't have to call it manually.
if(!delay && !tool_start_check(user, amount))
@@ -880,7 +898,8 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb
for(var/skill in used_skills)
if(!(SKILL_TRAINING_TOOL in used_skills[skill]))
continue
- user.mind.auto_gain_experience(skill, gain*skill_gain_mult, GET_STANDARD_LVL(max_level))
+ var/datum/skill/S = GLOB.skill_datums[skill]
+ user.mind.auto_gain_experience(skill, gain*skill_gain_mult*S.item_skill_gain_multi)
return TRUE
diff --git a/code/game/objects/items/RCL.dm b/code/game/objects/items/RCL.dm
index 8c840eef2b..6e305c30ee 100644
--- a/code/game/objects/items/RCL.dm
+++ b/code/game/objects/items/RCL.dm
@@ -29,6 +29,11 @@
RegisterSignal(src, COMSIG_TWOHANDED_UNWIELD, .proc/on_unwield)
update_icon()
+/obj/item/rcl/ComponentInitialize()
+ . = ..()
+ AddElement(/datum/element/update_icon_updates_onmob)
+ AddComponent(/datum/component/two_handed)
+
/// triggered on wield of two handed item
/obj/item/rcl/proc/on_wield(obj/item/source, mob/user)
active = TRUE
@@ -37,10 +42,6 @@
/obj/item/rcl/proc/on_unwield(obj/item/source, mob/user)
active = FALSE
-/obj/item/rcl/ComponentInitialize()
- . = ..()
- AddElement(/datum/element/update_icon_updates_onmob)
-
/obj/item/rcl/attackby(obj/item/W, mob/user)
if(istype(W, /obj/item/stack/cable_coil))
var/obj/item/stack/cable_coil/C = W
diff --git a/code/game/objects/items/cigs_lighters.dm b/code/game/objects/items/cigs_lighters.dm
index bfbacb1a34..de32375642 100644
--- a/code/game/objects/items/cigs_lighters.dm
+++ b/code/game/objects/items/cigs_lighters.dm
@@ -794,6 +794,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
reagents.clear_reagents()
/obj/item/clothing/mask/vape/equipped(mob/user, slot)
+ . = ..()
if(slot == SLOT_WEAR_MASK)
if(!screw)
to_chat(user, "You start puffing on the vape.")
diff --git a/code/game/objects/items/circuitboards/computer_circuitboards.dm b/code/game/objects/items/circuitboards/computer_circuitboards.dm
index f94c8f3513..2fa48582f7 100644
--- a/code/game/objects/items/circuitboards/computer_circuitboards.dm
+++ b/code/game/objects/items/circuitboards/computer_circuitboards.dm
@@ -116,9 +116,9 @@
build_path = /obj/machinery/computer/cloning
var/list/records = list()
-/obj/item/circuitboard/computer/prototype_cloning
+/obj/item/circuitboard/computer/cloning/prototype
name = "Prototype Cloning (Computer Board)"
- build_path = /obj/machinery/computer/prototype_cloning
+ build_path = /obj/machinery/computer/cloning/prototype
/obj/item/circuitboard/computer/arcade/battle
name = "Arcade Battle (Computer Board)"
diff --git a/code/game/objects/items/dualsaber.dm b/code/game/objects/items/dualsaber.dm
index cb07c22504..8c7049c713 100644
--- a/code/game/objects/items/dualsaber.dm
+++ b/code/game/objects/items/dualsaber.dm
@@ -72,6 +72,11 @@
TEXT_ATTACK_TYPE_PROJECTILE = 4
)
+/obj/item/dualsaber/Initialize()
+ . = ..()
+ RegisterSignal(src, COMSIG_TWOHANDED_WIELD, .proc/on_wield)
+ RegisterSignal(src, COMSIG_TWOHANDED_UNWIELD, .proc/on_unwield)
+
/obj/item/dualsaber/ComponentInitialize()
. = ..()
AddComponent(/datum/component/two_handed, force_unwielded=3, force_wielded=34, \
diff --git a/code/game/objects/items/grenades/chem_grenade.dm b/code/game/objects/items/grenades/chem_grenade.dm
index 4ce0e811c3..f06dd634c6 100644
--- a/code/game/objects/items/grenades/chem_grenade.dm
+++ b/code/game/objects/items/grenades/chem_grenade.dm
@@ -97,7 +97,7 @@
to_chat(user, "You add [A] to the [initial(name)] assembly.")
else if(stage == EMPTY && istype(I, /obj/item/stack/cable_coil))
- if (I.use_tool(src, user, 0, 1, max_level = JOB_SKILL_BASIC))
+ if (I.use_tool(src, user, 0, 1, skill_gain_mult = TRIVIAL_USE_TOOL_MULT))
det_time = 50 // In case the cable_coil was removed and readded.
stage_change(WIRED)
to_chat(user, "You rig the [initial(name)] assembly.")
diff --git a/code/game/objects/items/holy_weapons.dm b/code/game/objects/items/holy_weapons.dm
index 381257721e..d6396f9902 100644
--- a/code/game/objects/items/holy_weapons.dm
+++ b/code/game/objects/items/holy_weapons.dm
@@ -168,6 +168,7 @@
icon_state = "witchhunterhat"
item_state = "witchhunterhat"
flags_cover = HEADCOVERSEYES
+ flags_inv = HIDEHAIR
/obj/item/storage/box/holy/follower
name = "Followers of the Chaplain Kit"
diff --git a/code/game/objects/items/pet_carrier.dm b/code/game/objects/items/pet_carrier.dm
index 9d9409acf0..4960474d94 100644
--- a/code/game/objects/items/pet_carrier.dm
+++ b/code/game/objects/items/pet_carrier.dm
@@ -22,6 +22,11 @@
var/occupant_weight = 0
var/max_occupants = 3 //Hard-cap so you can't have infinite mice or something in one carrier
var/max_occupant_weight = MOB_SIZE_SMALL //This is calculated from the mob sizes of occupants
+ var/entrance_name = "door" //name of the entrance to the item
+ var/escape_time = 200 //how long it takes for mobs above small sizes to escape (for small sizes, its randomly 1.5 to 2x this)
+ var/load_time = 30 //how long it takes for mobs to be loaded into the pet carrier
+ var/has_lock_sprites = TRUE //whether to load the lock overlays or not
+ var/allows_hostiles = FALSE //does the pet carrier allow hostile entities to be held within it?
/obj/item/pet_carrier/Destroy()
if(occupants.len)
@@ -51,20 +56,20 @@
else
. += "It has nothing inside."
if(user.canUseTopic(src))
- . += "Activate it in your hand to [open ? "close" : "open"] its door."
+ . += "Activate it in your hand to [open ? "close" : "open"] its [entrance_name]."
if(!open)
- . += "Alt-click to [locked ? "unlock" : "lock"] its door."
+ . += "Alt-click to [locked ? "unlock" : "lock"] its [entrance_name]."
/obj/item/pet_carrier/attack_self(mob/living/user)
if(open)
- to_chat(user, "You close [src]'s door.")
+ to_chat(user, "You close [src]'s [entrance_name].")
playsound(user, 'sound/effects/bin_close.ogg', 50, TRUE)
open = FALSE
else
if(locked)
to_chat(user, "[src] is locked!")
return
- to_chat(user, "You open [src]'s door.")
+ to_chat(user, "You open [src]'s [entrance_name].")
playsound(user, 'sound/effects/bin_open.ogg', 50, TRUE)
open = TRUE
update_icon()
@@ -86,7 +91,7 @@
if(user.a_intent == INTENT_HARM)
return ..()
if(!open)
- to_chat(user, "You need to open [src]'s door!")
+ to_chat(user, "You need to open [src]'s [entrance_name]!")
return
if(target.mob_size > max_occupant_weight)
if(ishuman(target))
@@ -94,13 +99,15 @@
if(iscatperson(H))
to_chat(user, "You'd need a lot of catnip and treats, plus maybe a laser pointer, for that to work.")
else
- to_chat(user, "Humans, generally, do not fit into pet carriers.")
+ to_chat(user, "Humans, generally, do not fit into [name]s.")
else
to_chat(user, "You get the feeling [target] isn't meant for a [name].")
return
if(user == target)
to_chat(user, "Why would you ever do that?")
return
+ if(ishostile(target) && !allows_hostiles && target.move_resist < MOVE_FORCE_VERY_STRONG) //don't allow goliaths into pet carriers
+ to_chat(user, "You have a feeling you shouldn't keep this as a pet.")
load_occupant(user, target)
/obj/item/pet_carrier/relaymove(mob/living/user, direction)
@@ -110,8 +117,8 @@
remove_occupant(user)
return
else if(!locked)
- loc.visible_message("[user] pushes open the door to [src]!", \
- "[user] pushes open the door of [src]!")
+ loc.visible_message("[user] pushes open the [entrance_name] to [src]!", \
+ "[user] pushes open the [entrance_name] of [src]!")
open = TRUE
update_icon()
return
@@ -119,12 +126,19 @@
container_resist(user)
/obj/item/pet_carrier/container_resist(mob/living/user)
+ //don't do the whole resist timer thing if it's open!
+ if(open)
+ loc.visible_message("[user] climbs out of [src]!", \
+ "[user] jumps out of [src]!")
+ remove_occupant(user)
+ return
+
user.changeNext_move(CLICK_CD_BREAKOUT)
user.last_special = world.time + CLICK_CD_BREAKOUT
if(user.mob_size <= MOB_SIZE_SMALL)
- to_chat(user, "You poke a limb through [src]'s bars and start fumbling for the lock switch... (This will take some time.)")
- to_chat(loc, "You see [user] reach through the bars and fumble for the lock switch!")
- if(!do_after(user, rand(300, 400), target = user) || open || !locked || !(user in occupants))
+ to_chat(user, "You begin to try escaping the [src] and start fumbling for the lock switch... (This will take some time.)")
+ to_chat(loc, "You see [user] attempting to unlock the [src]!")
+ if(!do_after(user, rand(escape_time * 1.5, escape_time * 2), target = user) || open || !locked || !(user in occupants))
return
loc.visible_message("[user] flips the lock switch on [src] by reaching through!", null, null, null, user)
to_chat(user, "Bingo! The lock pops open!")
@@ -132,12 +146,12 @@
playsound(src, 'sound/machines/boltsup.ogg', 30, TRUE)
update_icon()
else
- loc.visible_message("[src] starts rattling as something pushes against the door!", null, null, null, user)
+ loc.visible_message("[src] starts rattling as something pushes against the [entrance_name]!", null, null, null, user)
to_chat(user, "You start pushing out of [src]... (This will take about 20 seconds.)")
- if(!do_after(user, 200, target = user) || open || !locked || !(user in occupants))
+ if(!do_after(user, escape_time, target = user) || open || !locked || !(user in occupants))
return
loc.visible_message("[user] shoves out of [src]!", null, null, null, user)
- to_chat(user, "You shove open [src]'s door against the lock's resistance and fall out!")
+ to_chat(user, "You shove open [src]'s [entrance_name] against the lock's resistance and fall out!")
locked = FALSE
open = TRUE
update_icon()
@@ -151,7 +165,7 @@
/obj/item/pet_carrier/update_overlays()
. = ..()
- if(!open)
+ if(!open && has_lock_sprites)
. += "[locked ? "" : "un"]locked"
/obj/item/pet_carrier/MouseDrop(atom/over_atom)
@@ -170,7 +184,7 @@
user.visible_message("[user] starts loading [target] into [src].", \
"You start loading [target] into [src]...", null, null, target)
to_chat(target, "[user] starts loading you into [user.p_their()] [name]!")
- if(!do_mob(user, target, 30))
+ if(!do_mob(user, target, load_time))
return
if(target in occupants)
return
@@ -192,9 +206,74 @@
/obj/item/pet_carrier/proc/remove_occupant(mob/living/occupant, turf/new_turf)
if(!(occupant in occupants) || !istype(occupant))
return
- occupant.forceMove(new_turf ? new_turf : drop_location())
+ occupant.forceMove(new_turf ? new_turf : get_turf(src))
occupants -= occupant
occupant_weight -= occupant.mob_size
occupant.setDir(SOUTH)
+//bluespace jar, a reskin of the pet carrier that can fit people and smashes when thrown
+/obj/item/pet_carrier/bluespace
+ name = "bluespace jar"
+ desc = "A jar, that seems to be bigger on the inside, somehow allowing lifeforms to fit through its narrow entrance."
+ open = FALSE //starts closed so it looks better on menus
+ icon_state = "bluespace_jar"
+ item_state = "bluespace_jar"
+ lefthand_file = ""
+ righthand_file = ""
+ max_occupant_weight = MOB_SIZE_HUMAN //can fit people, like a bluespace bodybag!
+ load_time = 40 //loading things into a jar takes longer than a regular pet carrier
+ entrance_name = "lid"
+ w_class = WEIGHT_CLASS_SMALL //it's a jar
+ throw_speed = 3
+ throw_range = 7
+ max_occupants = 1 //far less than a regular carrier or bluespace bodybag, because it can be thrown to release the contents
+ allows_hostiles = TRUE //can fit hostile creatures, with the move resist restrictions in place, this means they still cannot take things like legions/goliaths/etc regardless
+ has_lock_sprites = FALSE //jar doesn't show the regular lock overlay
+ custom_materials = list(/datum/material/glass = 1000, /datum/material/bluespace = 600)
+ escape_time = 10 //half the time of a bluespace bodybag
+ var/datum/gas_mixture/occupant_gas_supply
+
+/obj/item/pet_carrier/bluespace/update_icon_state()
+ if(open)
+ icon_state = "bluespace_jar_open"
+ else
+ icon_state = "bluespace_jar"
+
+/obj/item/pet_carrier/bluespace/throw_impact()
+ . = ..()
+ //delete the item upon impact, releasing the creature inside (this is handled by its deletion)
+ if(occupants.len)
+ loc.visible_message("The bluespace jar smashes, releasing [occupants[1]]!")
+ playsound(src, "shatter", 70, 1)
+ qdel(src)
+
+/obj/item/pet_carrier/bluespace/add_occupant(mob/living/occupant) //update the gas supply as required, this acts like magical internals
+ . = ..()
+ if(!occupant_gas_supply)
+ occupant_gas_supply = new
+ if(isanimal(occupant))
+ var/mob/living/simple_animal/animal = occupant
+ occupant_gas_supply.temperature = animal.minbodytemp //simple animals only care about temperature when their turf isnt a location
+ else
+ if(ishuman(occupant)) //humans require resistance to cold/heat and living in no air while inside, and lose this when outside
+ ADD_TRAIT(occupant, TRAIT_RESISTCOLD, "bluespace_container_cold_resist")
+ ADD_TRAIT(occupant, TRAIT_RESISTHEAT, "bluespace_container_heat_resist")
+ ADD_TRAIT(occupant, TRAIT_NOBREATH, "bluespace_container_no_breath")
+ ADD_TRAIT(occupant, TRAIT_RESISTHIGHPRESSURE, "bluespace_container_resist_high_pressure")
+ ADD_TRAIT(occupant, TRAIT_RESISTLOWPRESSURE, "bluespace_container_resist_low_pressure")
+
+/obj/item/pet_carrier/bluespace/remove_occupant(mob/living/occupant)
+ . = ..()
+ if(ishuman(occupant))
+ REMOVE_TRAIT(occupant, TRAIT_RESISTCOLD, "bluespace_container_cold_resist")
+ REMOVE_TRAIT(occupant, TRAIT_RESISTHEAT, "bluespace_container_heat_resist")
+ REMOVE_TRAIT(occupant, TRAIT_NOBREATH, "bluespace_container_no_breath")
+ REMOVE_TRAIT(occupant, TRAIT_RESISTHIGHPRESSURE, "bluespace_container_resist_high_pressure")
+ REMOVE_TRAIT(occupant, TRAIT_RESISTLOWPRESSURE, "bluespace_container_resist_low_pressure")
+
+/obj/item/pet_carrier/bluespace/return_air()
+ if(!occupant_gas_supply)
+ occupant_gas_supply = new
+ return occupant_gas_supply
+
#undef pet_carrier_full
diff --git a/code/game/objects/items/robot/robot_items.dm b/code/game/objects/items/robot/robot_items.dm
index 4b8728e426..1f69cdae2e 100644
--- a/code/game/objects/items/robot/robot_items.dm
+++ b/code/game/objects/items/robot/robot_items.dm
@@ -355,6 +355,7 @@
emaggedhitdamage = 0
/obj/item/borg/lollipop/equipped()
+ . = ..()
check_amount()
/obj/item/borg/lollipop/dropped(mob/user)
diff --git a/code/game/objects/items/shields.dm b/code/game/objects/items/shields.dm
index aefa5d3cc8..154714b13f 100644
--- a/code/game/objects/items/shields.dm
+++ b/code/game/objects/items/shields.dm
@@ -26,7 +26,7 @@
/datum/block_parry_data/shield
block_damage_multiplier = 0.25
block_stamina_efficiency = 2.5
- block_stamina_cost_per_second = 3.5
+ block_stamina_cost_per_second = 2.5
block_slowdown = 0
block_lock_attacking = FALSE
block_lock_sprinting = TRUE
@@ -386,7 +386,7 @@ obj/item/shield/riot/bullet_proof
max_integrity = 100
obj_integrity = 100
can_shatter = FALSE
- item_flags = SLOWS_WHILE_IN_HAND
+ item_flags = SLOWS_WHILE_IN_HAND | ITEM_CAN_BLOCK
var/recharge_timerid
var/recharge_delay = 15 SECONDS
diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm
index 57af862b69..d4baea2487 100644
--- a/code/game/objects/items/stacks/sheets/glass.dm
+++ b/code/game/objects/items/stacks/sheets/glass.dm
@@ -69,7 +69,7 @@ GLOBAL_LIST_INIT(glass_recipes, list ( \
if (get_amount() < 1 || CC.get_amount() < 5)
to_chat(user, "You attach wire to the [name].")
var/obj/item/stack/light_w/new_tile = new(user.loc)
diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm
index f5843a7df2..7692278ba3 100644
--- a/code/game/objects/items/stacks/sheets/mineral.dm
+++ b/code/game/objects/items/stacks/sheets/mineral.dm
@@ -430,6 +430,7 @@ GLOBAL_LIST_INIT(snow_recipes, list ( \
singular_name = "alien alloy sheet"
sheettype = "abductor"
merge_type = /obj/item/stack/sheet/mineral/abductor
+ walltype = /turf/closed/wall/mineral/abductor
GLOBAL_LIST_INIT(abductor_recipes, list ( \
new/datum/stack_recipe("alien bed", /obj/structure/bed/abductor, 2, one_per_turf = 1, on_floor = 1), \
diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm
index 4b1c3674f4..3ca7137548 100644
--- a/code/game/objects/items/stacks/sheets/sheet_types.dm
+++ b/code/game/objects/items/stacks/sheets/sheet_types.dm
@@ -381,6 +381,7 @@ GLOBAL_LIST_INIT(cloth_recipes, list ( \
new/datum/stack_recipe("chemistry bag", /obj/item/storage/bag/chemistry, 4), \
new/datum/stack_recipe("bio bag", /obj/item/storage/bag/bio, 4), \
null, \
+ new/datum/stack_recipe("string", /obj/item/weaponcrafting/string, 1, time = 10), \
new/datum/stack_recipe("improvised gauze", /obj/item/stack/medical/gauze/improvised, 1, 2, 6), \
new/datum/stack_recipe("rag", /obj/item/reagent_containers/rag, 1), \
new/datum/stack_recipe("towel", /obj/item/reagent_containers/rag/towel, 3), \
@@ -428,7 +429,6 @@ GLOBAL_LIST_INIT(durathread_recipes, list ( \
new/datum/stack_recipe("durathread beret", /obj/item/clothing/head/beret/durathread, 2, time = 40), \
new/datum/stack_recipe("durathread beanie", /obj/item/clothing/head/beanie/durathread, 2, time = 40), \
new/datum/stack_recipe("durathread bandana", /obj/item/clothing/mask/bandana/durathread, 1, time = 25), \
- new/datum/stack_recipe("durathread string", /obj/item/weaponcrafting/durathread_string, 1, time = 40), \
))
/obj/item/stack/sheet/durathread
diff --git a/code/game/objects/items/storage/bags.dm b/code/game/objects/items/storage/bags.dm
index aac642a05e..2831311eff 100644
--- a/code/game/objects/items/storage/bags.dm
+++ b/code/game/objects/items/storage/bags.dm
@@ -326,6 +326,7 @@
w_class = WEIGHT_CLASS_BULKY
flags_1 = CONDUCT_1
custom_materials = list(/datum/material/iron=3000)
+ var/max_items = 7
/obj/item/storage/bag/tray/ComponentInitialize()
. = ..()
@@ -333,6 +334,7 @@
STR.max_w_class = WEIGHT_CLASS_NORMAL
STR.can_hold = typecacheof(list(/obj/item/reagent_containers/food, /obj/item/reagent_containers/glass, /datum/reagent/consumable, /obj/item/kitchen/knife, /obj/item/kitchen/rollingpin, /obj/item/kitchen/fork, /obj/item/storage/box)) //Should cover: Bottles, Beakers, Bowls, Booze, Glasses, Food, Kitchen Tools, and ingredient boxes.
STR.insert_preposition = "on"
+ STR.max_items = max_items
/obj/item/storage/bag/tray/attack(mob/living/M, mob/living/user)
. = ..()
@@ -373,6 +375,14 @@
. = ..()
update_icon()
+//bluespace tray, holds more items
+/obj/item/storage/bag/tray/bluespace
+ name = "bluespace tray"
+ icon_state = "bluespace_tray"
+ desc = "A tray created using bluespace technology to fit more food on it."
+ max_items = 30 // far more items
+ custom_materials = list(/datum/material/iron = 2000, /datum/material/bluespace = 500)
+
/*
* Chemistry bag
*/
@@ -462,4 +472,4 @@
STR.max_combined_w_class = INFINITY
STR.max_items = 2
STR.display_numerical_stacking = TRUE
- STR.can_hold = typecacheof(list(/obj/item/rcd_ammo, /obj/item/stack/sheet))
\ No newline at end of file
+ STR.can_hold = typecacheof(list(/obj/item/rcd_ammo, /obj/item/stack/sheet))
diff --git a/code/game/objects/items/storage/fancy.dm b/code/game/objects/items/storage/fancy.dm
index 821fd52bd1..927a29407c 100644
--- a/code/game/objects/items/storage/fancy.dm
+++ b/code/game/objects/items/storage/fancy.dm
@@ -207,18 +207,18 @@
cig_position++
/obj/item/storage/fancy/cigarettes/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
- if(!ismob(M))
- return
+ if(M != user || !istype(M))
+ return ..()
var/obj/item/clothing/mask/cigarette/cig = locate(/obj/item/clothing/mask/cigarette) in contents
if(cig)
- if(M == user && contents.len > 0 && !user.wear_mask)
+ if(!user.wear_mask && !(SLOT_WEAR_MASK in M.check_obscured_slots()))
var/obj/item/clothing/mask/cigarette/W = cig
SEND_SIGNAL(src, COMSIG_TRY_STORAGE_TAKE, W, M)
M.equip_to_slot_if_possible(W, SLOT_WEAR_MASK)
contents -= W
to_chat(user, "You take \a [W] out of the pack.")
else
- ..()
+ return ..()
else
to_chat(user, "There are no [icon_type]s left in the pack.")
diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm
index 8fb656cc11..bf1eca01f9 100644
--- a/code/game/objects/items/toys.dm
+++ b/code/game/objects/items/toys.dm
@@ -450,8 +450,7 @@
sharpness = IS_BLUNT
/obj/item/dualsaber/toy/ComponentInitialize()
- . = ..()
- AddComponent(/datum/component/two_handed, wieldsound='sound/weapons/saberon.ogg', unwieldsound='sound/weapons/saberoff.ogg')
+ AddComponent(/datum/component/two_handed, force_unwielded=0, force_wielded=0, wieldsound='sound/weapons/saberon.ogg', unwieldsound='sound/weapons/saberoff.ogg')
/obj/item/dualsaber/toy/run_block(mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return)
return BLOCK_NONE
@@ -469,9 +468,8 @@
slowdown_wielded = 0
sharpness = IS_BLUNT
-/obj/item/dualsaber/toy/ComponentInitialize()
- . = ..()
- AddComponent(/datum/component/two_handed, wieldsound='sound/weapons/saberon.ogg', unwieldsound='sound/weapons/saberoff.ogg')
+/obj/item/dualsaber/hypereutactic/toy/ComponentInitialize()
+ AddComponent(/datum/component/two_handed, force_unwielded=0, force_wielded=0, wieldsound='sound/weapons/saberon.ogg', unwieldsound='sound/weapons/saberoff.ogg')
/obj/item/dualsaber/hypereutactic/toy/run_block(mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return)
return BLOCK_NONE
@@ -828,12 +826,11 @@
var/obj/item/toy/cards/singlecard/H = new/obj/item/toy/cards/singlecard(user.loc)
if(holo)
holo.spawned += H // track them leaving the holodeck
- choice = cards[1]
+ choice = popleft(cards)
H.cardname = choice
H.parentdeck = src
var/O = src
H.apply_card_vars(H,O)
- src.cards -= choice
H.pickup(user)
user.put_in_hands(H)
user.visible_message("[user] draws a card from the deck.", "You draw a card from the deck.")
diff --git a/code/modules/antagonists/revenant/revenant.dm b/code/modules/antagonists/revenant/revenant.dm
index 3ddb4e67ee..4e08ad2382 100644
--- a/code/modules/antagonists/revenant/revenant.dm
+++ b/code/modules/antagonists/revenant/revenant.dm
@@ -108,8 +108,7 @@
//Life, Stat, Hud Updates, and Say
/mob/living/simple_animal/revenant/BiologicalLife(seconds, times_fired)
- if(!(. = ..()))
- return
+ . = ..()
if(stasis)
return
if(revealed && essence <= 0)
diff --git a/code/modules/asset_cache/asset_cache_client.dm b/code/modules/asset_cache/asset_cache_client.dm
index 50a5685ded..0f51520f13 100644
--- a/code/modules/asset_cache/asset_cache_client.dm
+++ b/code/modules/asset_cache/asset_cache_client.dm
@@ -1,11 +1,4 @@
-/client
- var/list/sent_assets = list() // List of all asset filenames sent to this client by the asset cache, along with their assoicated md5s
- var/list/completed_asset_jobs = list() /// List of all completed blocking send jobs awaiting acknowledgement by send_asset
-
- var/last_asset_job = 0 /// Last asset send job id.
- var/last_completed_asset_job = 0
-
/// Process asset cache client topic calls for "asset_cache_confirm_arrival=[INT]"
/client/proc/asset_cache_confirm_arrival(job_id)
var/asset_cache_job = round(text2num(job_id))
@@ -50,7 +43,7 @@
var/t = 0
var/timeout_time = timeout
src << browse({""}, "window=asset_cache_browser&file=asset_cache_send_verify.htm")
-
+
while(!completed_asset_jobs["[job]"] && t < timeout_time) // Reception is handled in Topic()
stoplag(1) // Lock up the caller until this is received.
t++
diff --git a/code/modules/asset_cache/asset_list_items.dm b/code/modules/asset_cache/asset_list_items.dm
index dad1cfef5b..13a1803188 100644
--- a/code/modules/asset_cache/asset_list_items.dm
+++ b/code/modules/asset_cache/asset_list_items.dm
@@ -415,7 +415,7 @@
"dna_discovered.gif" = 'html/dna_discovered.gif',
"dna_undiscovered.gif" = 'html/dna_undiscovered.gif',
"dna_extra.gif" = 'html/dna_extra.gif'
-)
+ )
/datum/asset/simple/vv
assets = list(
diff --git a/code/modules/awaymissions/mission_code/Academy.dm b/code/modules/awaymissions/mission_code/Academy.dm
index f714a86f22..129e6d7a2b 100644
--- a/code/modules/awaymissions/mission_code/Academy.dm
+++ b/code/modules/awaymissions/mission_code/Academy.dm
@@ -189,6 +189,8 @@
if(!ishuman(user) || !user.mind || (user.mind in SSticker.mode.wizards))
to_chat(user, "You feel the magic of the dice is restricted to ordinary humans! You should leave it alone.")
user.dropItemToGround(src)
+ return
+ return ..()
/obj/item/dice/d20/fate/proc/effect(var/mob/living/carbon/human/user,roll)
diff --git a/code/modules/client/client_defines.dm b/code/modules/client/client_defines.dm
index 0402dc683f..7f670e756f 100644
--- a/code/modules/client/client_defines.dm
+++ b/code/modules/client/client_defines.dm
@@ -19,6 +19,8 @@
///Next tick to reset the total message counter
var/total_count_reset = 0
var/ircreplyamount = 0
+ /// last time they tried to do an autobunker auth
+ var/autobunker_last_try = 0
/////////
//OTHER//
@@ -134,5 +136,13 @@
var/parallax_layers_max = 3
var/parallax_animate_timer
+ // List of all asset filenames sent to this client by the asset cache, along with their assoicated md5s
+ var/list/sent_assets = list()
+ /// List of all completed blocking send jobs awaiting acknowledgement by send_asset
+ var/list/completed_asset_jobs = list()
+ /// Last asset send job id.
+ var/last_asset_job = 0
+ var/last_completed_asset_job = 0
+
//world.time of when the crew manifest can be accessed
var/crew_manifest_delay
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index 240b275084..aaee5c85f6 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -2322,14 +2322,16 @@ GLOBAL_LIST_EMPTY(preferences_datums)
var/min = CONFIG_GET(number/body_size_min)
var/max = CONFIG_GET(number/body_size_max)
var/danger = CONFIG_GET(number/threshold_body_size_slowdown)
- var/new_body_size = input(user, "Choose your desired sprite size:\n([min*100]%-[max*100]%), Warning: May make your character look distorted[danger > min ? ", and an exponential slowdown will occur for those smaller than [danger*100]%!" : "!"]", "Character Preference", features["body_size"]*100) as num|null
+ var/new_body_size = input(user, "Choose your desired sprite size: ([min*100]%-[max*100]%)\nWarning: This may make your character look distorted[danger > min ? "! Additionally, a proportional movement speed penalty will be applied to characters smaller than [danger*100]%." : "!"]", "Character Preference", features["body_size"]*100) as num|null
if (new_body_size)
new_body_size = clamp(new_body_size * 0.01, min, max)
var/dorfy
- if(danger > new_body_size)
- dorfy = alert(user, "The chosen size appears to be smaller than the threshold of [danger*100]%, which will lead to an added exponential slowdown. Are you sure about that?", "Dwarfism Alert", "Yes", "Move it to the threshold", "No")
- if(!dorfy || dorfy == "Move it above the threshold")
+ if((new_body_size + 0.01) < danger) // Adding 0.01 as a dumb fix to prevent the warning message from appearing when exactly at threshold... Not sure why that happens in the first place.
+ dorfy = alert(user, "You have chosen a size below the slowdown threshold of [danger*100]%. For balancing purposes, the further you go below this percentage, the slower your character will be. Do you wish to keep this size?", "Speed Penalty Alert", "Yes", "Move it to the threshold", "No")
+ if(dorfy == "Move it to the threshold")
new_body_size = danger
+ if(!dorfy) //Aborts if this var is somehow empty
+ return
if(dorfy != "No")
features["body_size"] = new_body_size
if("tongue")
@@ -2737,13 +2739,14 @@ GLOBAL_LIST_EMPTY(preferences_datums)
character.dna.update_body_size(old_size)
//speech stuff
- var/new_tongue = GLOB.roundstart_tongues[custom_tongue]
- if(new_tongue)
- var/obj/item/organ/tongue/T = character.getorganslot(ORGAN_SLOT_TONGUE)
- if(T)
- qdel(T)
- var/obj/item/organ/tongue/new_custom_tongue = new new_tongue
- new_custom_tongue.Insert(character)
+ if(custom_tongue != "default")
+ var/new_tongue = GLOB.roundstart_tongues[custom_tongue]
+ if(new_tongue)
+ var/obj/item/organ/tongue/T = character.getorganslot(ORGAN_SLOT_TONGUE)
+ if(T)
+ qdel(T)
+ var/obj/item/organ/tongue/new_custom_tongue = new new_tongue
+ new_custom_tongue.Insert(character)
if(custom_speech_verb != "default")
character.dna.species.say_mod = custom_speech_verb
diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm
index aa1b6f801b..3a8e7582cb 100644
--- a/code/modules/client/preferences_savefile.dm
+++ b/code/modules/client/preferences_savefile.dm
@@ -695,6 +695,8 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
features["balls_visibility"] = sanitize_inlist(features["balls_visibility"], safe_visibilities, GEN_VISIBLE_NO_UNDIES)
features["vag_visibility"] = sanitize_inlist(features["vag_visibility"], safe_visibilities, GEN_VISIBLE_NO_UNDIES)
+ custom_speech_verb = sanitize_inlist(custom_speech_verb, GLOB.speech_verbs, "default")
+ custom_tongue = sanitize_inlist(custom_tongue, GLOB.roundstart_tongues, "default")
features["flavor_text"] = copytext(features["flavor_text"], 1, MAX_FLAVOR_LEN)
features["silicon_flavor_text"] = copytext(features["silicon_flavor_text"], 1, MAX_FLAVOR_LEN)
diff --git a/code/modules/client/verbs/autobunker.dm b/code/modules/client/verbs/autobunker.dm
new file mode 100644
index 0000000000..03200c5f0b
--- /dev/null
+++ b/code/modules/client/verbs/autobunker.dm
@@ -0,0 +1,37 @@
+/client/verb/bunker_auto_authorize()
+ set name = "Auto Authorize Panic Bunker"
+ set desc = "Authorizes your account in the panic bunker of any servers connected to this function."
+ set category = "OOC"
+
+ if(autobunker_last_try + 5 SECONDS > world.time)
+ to_chat(src, "Function on cooldown, try again in 5 seconds.")
+ return
+ autobunker_last_try = world.time
+
+ world.send_cross_server_bunker_overrides(key, src)
+
+/world/proc/send_cross_server_bunker_overrides(key, client/C)
+ var/comms_key = CONFIG_GET(string/comms_key)
+ if(!comms_key)
+ return
+ var/list/message = list()
+ message["ckey"] = key
+ message["source"] = "[CONFIG_GET(string/cross_comms_name)]"
+ message["key"] = comms_key
+ message["auto_bunker_override"] = TRUE
+ var/list/servers = CONFIG_GET(keyed_list/cross_server_bunker_override)
+ if(!length(servers))
+ to_chat(C, "AUTOBUNKER: No servers are configured to receive from this one.")
+ return
+ log_admin("[key] ([key_name(C)]) has initiated an autobunker authentication with linked servers.")
+ for(var/name in servers)
+ var/returned = world.Export("[servers[name]]?[list2params(message)]")
+ switch(returned)
+ if("Bad Key")
+ to_chat(C, "AUTOBuNKER: [name] failed to authenticate with this server.")
+ if("Function Disabled")
+ to_chat(C, "AUTOBUNKER: [name] has autobunker receive disabled.")
+ if("Success")
+ to_chat(C, "AUTOBUNKER: Successfully authenticated with [name]. Panic bunker bypass granted to [key]..")
+ else
+ to_chat(C, "AUTOBUNKER: Unknown error ([name]).")
diff --git a/code/modules/clothing/gloves/color.dm b/code/modules/clothing/gloves/color.dm
index 1b5cd6c7d2..56d6e7d38f 100644
--- a/code/modules/clothing/gloves/color.dm
+++ b/code/modules/clothing/gloves/color.dm
@@ -23,14 +23,15 @@
if(iscarbon(target) && proximity)
var/mob/living/carbon/C = target
var/mob/living/carbon/U = user
- var/success = C.equip_to_slot_if_possible(new /obj/item/clothing/gloves/color/yellow/sprayon, ITEM_SLOT_GLOVES, TRUE, TRUE)
+ var/success = C.equip_to_slot_if_possible(new /obj/item/clothing/gloves/color/yellow/sprayon, ITEM_SLOT_GLOVES, TRUE, TRUE, clothing_check = TRUE)
if(success)
if(C == user)
C.visible_message("[U] sprays their hands with glittery rubber!")
else
C.visible_message("[U] sprays glittery rubber on the hands of [C]!")
else
- C.visible_message("The rubber fails to stick to [C]'s hands!")
+ user.visible_message("The rubber fails to stick to [C]'s hands!",
+ "The rubber fails to stick to [C]'s [(SLOT_GLOVES in C.check_obscured_slots()) ? "unexposed" : ""] hands!")
qdel(src)
diff --git a/code/modules/clothing/suits/toggles.dm b/code/modules/clothing/suits/toggles.dm
index 639f2d3bfb..632d59187f 100644
--- a/code/modules/clothing/suits/toggles.dm
+++ b/code/modules/clothing/suits/toggles.dm
@@ -76,6 +76,7 @@
/obj/item/clothing/head/hooded
var/obj/item/clothing/suit/hooded/suit
+ dynamic_hair_suffix = ""
/obj/item/clothing/head/hooded/Destroy()
suit = null
@@ -164,7 +165,7 @@
RemoveHelmet()
..()
-/obj/item/clothing/suit/space/hardsuit/proc/RemoveHelmet()
+/obj/item/clothing/suit/space/hardsuit/proc/RemoveHelmet(message = TRUE)
if(!helmet)
return
suittoggled = FALSE
@@ -174,16 +175,18 @@
helmet.attack_self(H)
H.transferItemToLoc(helmet, src, TRUE)
H.update_inv_wear_suit()
- to_chat(H, "The helmet on the hardsuit disengages.")
+ if(message)
+ to_chat(H, "The helmet on the hardsuit disengages.")
playsound(src.loc, 'sound/mecha/mechmove03.ogg', 50, 1)
else
helmet.forceMove(src)
+ return TRUE
/obj/item/clothing/suit/space/hardsuit/dropped(mob/user)
..()
RemoveHelmet()
-/obj/item/clothing/suit/space/hardsuit/proc/ToggleHelmet()
+/obj/item/clothing/suit/space/hardsuit/proc/ToggleHelmet(message = TRUE)
var/mob/living/carbon/human/H = loc
if(!helmettype)
return
@@ -192,15 +195,19 @@
if(!suittoggled)
if(ishuman(src.loc))
if(H.wear_suit != src)
- to_chat(H, "You must be wearing [src] to engage the helmet!")
+ if(message)
+ to_chat(H, "You must be wearing [src] to engage the helmet!")
return
if(H.head)
- to_chat(H, "You're already wearing something on your head!")
+ if(message)
+ to_chat(H, "You're already wearing something on your head!")
return
else if(H.equip_to_slot_if_possible(helmet,SLOT_HEAD,0,0,1))
- to_chat(H, "You engage the helmet on the hardsuit.")
+ if(message)
+ to_chat(H, "You engage the helmet on the hardsuit.")
suittoggled = TRUE
H.update_inv_wear_suit()
playsound(src.loc, 'sound/mecha/mechmove03.ogg', 50, 1)
+ return TRUE
else
- RemoveHelmet()
+ return RemoveHelmet(message)
diff --git a/code/modules/clothing/under/jobs/command.dm b/code/modules/clothing/under/jobs/command.dm
index a614e2fcb3..1bc0f64373 100644
--- a/code/modules/clothing/under/jobs/command.dm
+++ b/code/modules/clothing/under/jobs/command.dm
@@ -46,4 +46,4 @@
icon_state = "lewdcap"
item_state = "lewdcap"
can_adjust = FALSE
- mutantrace_variation = USE_TAUR_CLIP_MASK
+ mutantrace_variation = STYLE_DIGITIGRADE|USE_TAUR_CLIP_MASK
diff --git a/code/modules/clothing/under/jobs/medical.dm b/code/modules/clothing/under/jobs/medical.dm
index f50e5161b6..78a905f897 100644
--- a/code/modules/clothing/under/jobs/medical.dm
+++ b/code/modules/clothing/under/jobs/medical.dm
@@ -22,7 +22,7 @@
icon_state = "cmoturtle"
item_state = "w_suit"
alt_covers_chest = TRUE
- mutantrace_variation = USE_TAUR_CLIP_MASK
+ mutantrace_variation = STYLE_DIGITIGRADE|USE_TAUR_CLIP_MASK
/obj/item/clothing/under/rank/medical/geneticist
desc = "It's made of a special fiber that gives special protection against biohazards. It has a genetics rank stripe on it."
diff --git a/code/modules/food_and_drinks/food/snacks/meat.dm b/code/modules/food_and_drinks/food/snacks/meat.dm
index a35dcc1dc4..fe70739ab5 100644
--- a/code/modules/food_and_drinks/food/snacks/meat.dm
+++ b/code/modules/food_and_drinks/food/snacks/meat.dm
@@ -83,6 +83,7 @@
/obj/item/reagent_containers/food/snacks/meat/slab/chicken
name = "chicken meat"
desc = "A slab of raw chicken. Remember to wash your hands!"
+ icon_state = "chickenbreast"
cooked_type = /obj/item/reagent_containers/food/snacks/meat/steak/chicken
slice_path = /obj/item/reagent_containers/food/snacks/meat/rawcutlet/chicken
tastes = list("chicken" = 1)
@@ -341,8 +342,14 @@
/obj/item/reagent_containers/food/snacks/meat/steak/chicken
name = "chicken steak" //Can you have chicken steaks? Maybe this should be renamed once it gets new sprites.
+ icon_state = "chickenbreast_cooked"
tastes = list("chicken" = 1)
+/obj/item/reagent_containers/food/snacks/meat/steak/fish
+ name = "fish fillet"
+ icon_state = "grilled_carp_slice"
+ tastes = list("charred sushi" = 1)
+
/obj/item/reagent_containers/food/snacks/meat/steak/plain
foodtype = MEAT
@@ -361,6 +368,7 @@
/obj/item/reagent_containers/food/snacks/meat/steak/bear
name = "bear steak"
+ icon_state = "bearcook"
tastes = list("meat" = 1, "salmon" = 1)
/obj/item/reagent_containers/food/snacks/meat/steak/xeno
diff --git a/code/modules/food_and_drinks/food/snacks_meat.dm b/code/modules/food_and_drinks/food/snacks_meat.dm
index c2a58b0821..e25f99c69e 100644
--- a/code/modules/food_and_drinks/food/snacks_meat.dm
+++ b/code/modules/food_and_drinks/food/snacks_meat.dm
@@ -22,6 +22,7 @@
list_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/toxin/carpotoxin = 2, /datum/reagent/consumable/nutriment/vitamin = 2)
bitesize = 6
filling_color = "#FA8072"
+ cooked_type = /obj/item/reagent_containers/food/snacks/meat/steak/fish
tastes = list("fish" = 1)
foodtype = MEAT
diff --git a/code/modules/food_and_drinks/food/snacks_other.dm b/code/modules/food_and_drinks/food/snacks_other.dm
index bc80ffe621..7b0ffe2a19 100644
--- a/code/modules/food_and_drinks/food/snacks_other.dm
+++ b/code/modules/food_and_drinks/food/snacks_other.dm
@@ -136,6 +136,17 @@
tastes = list("fries" = 3, "cheese" = 1)
foodtype = VEGETABLES | GRAIN
+/obj/item/reagent_containers/food/snacks/chilicheesefries
+ name = "chili cheese fries"
+ desc = "Fries smothered in cheese -and- chilli."
+ icon_state = "chilicheesefries"
+ trash = /obj/item/trash/plate
+ bonus_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/nutriment/vitamin = 2)
+ list_reagents = list(/datum/reagent/consumable/nutriment = 7, /datum/reagent/consumable/nutriment/vitamin = 1)
+ filling_color = "#FFD700"
+ tastes = list("fries" = 3, "cheese" = 1)
+ foodtype = VEGETABLES | GRAIN
+
/obj/item/reagent_containers/food/snacks/badrecipe
name = "burned mess"
desc = "Someone should be demoted from cook for this."
@@ -537,6 +548,15 @@
tastes = list("butter" = 1)
foodtype = DAIRY
+/obj/item/reagent_containers/food/snacks/butter/margarine
+ name = "stick of margarine"
+ desc = "A stick of lightly salted vegetable oil."
+ icon_state = "marge"
+ list_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/cornoil = 2, /datum/reagent/consumable/sodiumchloride = 1)
+ filling_color = "#FFD700"
+ tastes = list("butter" = 1)
+ foodtype = JUNKFOOD
+
/obj/item/reagent_containers/food/snacks/onionrings
name = "onion rings"
desc = "Onion slices coated in batter."
diff --git a/code/modules/food_and_drinks/food/snacks_sandwichtoast.dm b/code/modules/food_and_drinks/food/snacks_sandwichtoast.dm
index 9096429228..d812655b91 100644
--- a/code/modules/food_and_drinks/food/snacks_sandwichtoast.dm
+++ b/code/modules/food_and_drinks/food/snacks_sandwichtoast.dm
@@ -21,6 +21,17 @@
tastes = list("toast" = 1)
foodtype = GRAIN
+/obj/item/reagent_containers/food/snacks/baconlettucetomato
+ name = "blt sandwich"
+ desc = "The classic bacon, lettuce tomato sandwich."
+ icon = 'icons/obj/food/burgerbread.dmi'
+ icon_state = "blt"
+ trash = /obj/item/trash/plate
+ bonus_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/nutriment/vitamin = 1)
+ list_reagents = list(/datum/reagent/consumable/nutriment = 8, /datum/reagent/consumable/nutriment/vitamin = 2)
+ tastes = list("bacon" = 1, "lettuce" = 1, "tomato" = 1, "mayo" = 1)
+ foodtype = GRAIN | MEAT | VEGETABLES
+
/obj/item/reagent_containers/food/snacks/grilledcheese
name = "grilled cheese sandwich"
desc = "Goes great with Tomato soup!"
@@ -136,8 +147,9 @@
/obj/item/reagent_containers/food/snacks/tuna_sandwich
name = "tuna sandwich"
desc = "Both a salad and a sandwich in one."
+ icon = 'icons/obj/food/burgerbread.dmi'
icon_state = "tunasandwich"
- trash = /obj/item/trash/plate
+ list_reagents = list(/datum/reagent/consumable/nutriment = 12, /datum/reagent/consumable/nutriment/vitamin = 4)
bonus_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/nutriment/vitamin = 3)
tastes = list("tuna" = 4, "mayonnaise" = 2, "bread" = 2)
foodtype = GRAIN | MEAT
diff --git a/code/modules/food_and_drinks/recipes/food_mixtures.dm b/code/modules/food_and_drinks/recipes/food_mixtures.dm
index ec96a4537c..541c972490 100644
--- a/code/modules/food_and_drinks/recipes/food_mixtures.dm
+++ b/code/modules/food_and_drinks/recipes/food_mixtures.dm
@@ -179,3 +179,14 @@
id = /datum/reagent/consumable/bbqsauce
results = list(/datum/reagent/consumable/bbqsauce = 5)
required_reagents = list(/datum/reagent/ash = 1, /datum/reagent/consumable/tomatojuice = 1, /datum/reagent/medicine/salglu_solution = 3, /datum/reagent/consumable/blackpepper = 1)
+
+/datum/chemical_reaction/margarine
+ name = "Margarine"
+ id = "margarine"
+ required_reagents = list(/datum/reagent/consumable/cornoil = 5, /datum/reagent/consumable/soymilk = 5, /datum/reagent/consumable/sodiumchloride = 1)
+ mix_message = "The ingredients solidify into a stick of margarine."
+
+/datum/chemical_reaction/margarine/on_reaction(datum/reagents/holder, multiplier)
+ var/location = get_turf(holder.my_atom)
+ for(var/i = 1, i <= multiplier, i++)
+ new /obj/item/reagent_containers/food/snacks/butter/margarine(location)
\ No newline at end of file
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_egg.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_egg.dm
index e8640886c2..53c3682e2c 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_egg.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_egg.dm
@@ -22,6 +22,15 @@
result = /obj/item/reagent_containers/food/snacks/baconegg
subcategory = CAT_EGG
+/datum/crafting_recipe/food/wrap
+ name = "Egg Wrap"
+ reqs = list(/datum/reagent/consumable/soysauce = 10,
+ /obj/item/reagent_containers/food/snacks/friedegg = 1,
+ /obj/item/reagent_containers/food/snacks/grown/cabbage = 1,
+ )
+ result = /obj/item/reagent_containers/food/snacks/eggwrap
+ subcategory = CAT_EGG
+
/datum/crafting_recipe/food/omelette
name = "Omelette"
reqs = list(
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 359fadfb70..bbaa49a1eb 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm
@@ -14,15 +14,6 @@
result = /obj/item/reagent_containers/food/snacks/chawanmushi
subcategory = CAT_MISCFOOD
-/datum/crafting_recipe/food/wrap
- name = "Egg Wrap"
- reqs = list(/datum/reagent/consumable/soysauce = 10,
- /obj/item/reagent_containers/food/snacks/friedegg = 1,
- /obj/item/reagent_containers/food/snacks/grown/cabbage = 1,
- )
- result = /obj/item/reagent_containers/food/snacks/eggwrap
- subcategory = CAT_MISCFOOD
-
/datum/crafting_recipe/food/khachapuri
name = "Khachapuri"
reqs = list(
@@ -93,6 +84,16 @@
result = /obj/item/reagent_containers/food/snacks/cheesyfries
subcategory = CAT_MISCFOOD
+/datum/crafting_recipe/food/chilicheesefries
+ name = "Chilli cheese fries"
+ reqs = list(
+ /obj/item/reagent_containers/food/snacks/fries = 1,
+ /obj/item/reagent_containers/food/snacks/cheesewedge = 1,
+ /obj/item/reagent_containers/food/snacks/grown/chili = 1
+ )
+ result = /obj/item/reagent_containers/food/snacks/chilicheesefries
+ subcategory = CAT_MISCFOOD
+
/datum/crafting_recipe/food/eggplantparm
name ="Eggplant parmigiana"
reqs = list(
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_sandwich.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_sandwich.dm
index d2ea1da50a..60bcd65a80 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_sandwich.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_sandwich.dm
@@ -25,6 +25,17 @@
result = /obj/item/reagent_containers/food/snacks/grilledcheese
subcategory = CAT_SANDWICH
+/datum/crafting_recipe/food/baconlettucetomato
+ name = "BLT sandwich"
+ reqs = list(
+ /obj/item/reagent_containers/food/snacks/meat/bacon = 2,
+ /obj/item/reagent_containers/food/snacks/grown/cabbage = 1,
+ /obj/item/reagent_containers/food/snacks/grown/tomato = 1,
+ /datum/reagent/consumable/mayonnaise = 5
+ )
+ result = /obj/item/reagent_containers/food/snacks/baconlettucetomato
+ subcategory = CAT_SANDWICH
+
/datum/crafting_recipe/food/slimesandwich
name = "Jelly sandwich"
reqs = list(
@@ -99,7 +110,7 @@
/obj/item/reagent_containers/food/snacks/breadslice/plain = 2,
/obj/item/reagent_containers/food/snacks/tuna = 1,
/obj/item/reagent_containers/food/snacks/grown/onion = 1,
- /obj/item/reagent_containers/food/condiment/mayonnaise = 5
+ /datum/reagent/consumable/mayonnaise = 5
)
result = /obj/item/reagent_containers/food/snacks/tuna_sandwich
subcategory = CAT_SANDWICH
diff --git a/code/modules/hydroponics/grown/flowers.dm b/code/modules/hydroponics/grown/flowers.dm
index 8b0dcdaae1..abd06775af 100644
--- a/code/modules/hydroponics/grown/flowers.dm
+++ b/code/modules/hydroponics/grown/flowers.dm
@@ -277,7 +277,7 @@
growing_icon = 'icons/obj/hydroponics/growing_flowers.dmi'
icon_grow = "bee_balm-grow"
icon_dead = "bee_balm-dead"
- mutatelist = list(/obj/item/seeds/poppy/geranium, /obj/item/seeds/bee_balm/honey) //Lower odds of becoming honey
+ mutatelist = list(/obj/item/seeds/poppy/geranium, /obj/item/seeds/bee_balm/honey_balm) //Lower odds of becoming honey
reagents_add = list(/datum/reagent/medicine/spaceacillin = 0.1, /datum/reagent/space_cleaner/sterilizine = 0.05)
/obj/item/reagent_containers/food/snacks/grown/bee_balm
@@ -291,11 +291,11 @@
foodtype = GROSS
// Beebalm
-/obj/item/seeds/bee_balm/honey
+/obj/item/seeds/bee_balm/honey_balm
name = "pack of Honey Balm seeds"
desc = "These seeds grow into Honey Balms."
- icon_state = "seed-bee_balmalt"
- species = "seed-bee_balm_alt"
+ icon_state = "seed-honey_balm"
+ species = "honey_balm"
plantname = "Honey Balm Pods"
product = /obj/item/reagent_containers/food/snacks/grown/bee_balm/honey
endurance = 1
@@ -304,16 +304,16 @@
potency = 1
growthstages = 3
growing_icon = 'icons/obj/hydroponics/growing_flowers.dmi'
- icon_grow = "bee_balmalt-grow"
- icon_dead = "bee_balmalt-dead"
+ icon_grow = "honey_balm-grow"
+ icon_dead = "honey_balm-dead"
reagents_add = list(/datum/reagent/consumable/honey = 0.1, /datum/reagent/lye = 0.3) //To make wax
rarity = 30
/obj/item/reagent_containers/food/snacks/grown/bee_balm/honey
- seed = /obj/item/seeds/bee_balm/honey
+ seed = /obj/item/seeds/bee_balm/honey_balm
name = "honey balm"
desc = "A large honey filled pod of a flower."
- icon_state = "bee_balmalt"
+ icon_state = "honey_balm"
filling_color = "#FF6347"
bitesize_mod = 8
tastes = list("wax" = 1)
diff --git a/code/modules/hydroponics/grown/peas.dm b/code/modules/hydroponics/grown/peas.dm
index 6229d98b2c..79d506cf56 100644
--- a/code/modules/hydroponics/grown/peas.dm
+++ b/code/modules/hydroponics/grown/peas.dm
@@ -61,6 +61,7 @@
filling_color = "#ee7bee"
bitesize_mod = 2
foodtype = VEGETABLES
+ juice_results = list (/datum/reagent/consumable/laughsyrup = 0)
tastes = list ("a prancing rabbit" = 1) //Vib Ribbon sends her regards.. wherever she is.
wine_power = 90
wine_flavor = "a vector-graphic rabbit dancing on your tongue"
diff --git a/code/modules/hydroponics/plant_genes.dm b/code/modules/hydroponics/plant_genes.dm
index b18f4396d6..a666a36099 100644
--- a/code/modules/hydroponics/plant_genes.dm
+++ b/code/modules/hydroponics/plant_genes.dm
@@ -392,7 +392,7 @@
/datum/plant_gene/trait/battery/on_attackby(obj/item/reagent_containers/food/snacks/grown/G, obj/item/I, mob/user)
if(istype(I, /obj/item/stack/cable_coil))
- if(I.use_tool(src, user, 0, 5, max_level = JOB_SKILL_EXPERT))
+ if(I.use_tool(src, user, 0, 5, skill_gain_mult = TRIVIAL_USE_TOOL_MULT))
to_chat(user, "You add some cable to [G] and slide it inside the battery encasing.")
var/obj/item/stock_parts/cell/potato/pocell = new /obj/item/stock_parts/cell/potato(user.loc)
pocell.icon_state = G.icon_state
diff --git a/code/modules/jobs/job_types/shaft_miner.dm b/code/modules/jobs/job_types/shaft_miner.dm
index a09c4376fb..ebf7ba0f1f 100644
--- a/code/modules/jobs/job_types/shaft_miner.dm
+++ b/code/modules/jobs/job_types/shaft_miner.dm
@@ -16,7 +16,7 @@
access = list(ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_MINING,
ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM)
minimal_access = list(ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MAILSORTING, ACCESS_MINERAL_STOREROOM)
- paycheck = PAYCHECK_HARD
+ paycheck = PAYCHECK_EASY ///Not necessarily easy itself, but it can be trivial to make lot of cash on this job.
paycheck_department = ACCOUNT_CAR
display_order = JOB_DISPLAY_ORDER_SHAFT_MINER
diff --git a/code/modules/keybindings/keybind/combat.dm b/code/modules/keybindings/keybind/combat.dm
index 457fbb0cb2..8a0e713d8f 100644
--- a/code/modules/keybindings/keybind/combat.dm
+++ b/code/modules/keybindings/keybind/combat.dm
@@ -25,6 +25,17 @@
var/mob/living/L = user.mob
L.keybind_stop_active_blocking()
+/datum/keybinding/living/active_block_toggle
+ name = "active_block_toggle"
+ full_name = "Block (Toggle)"
+ category = CATEGORY_COMBAT
+ description = "Toggles active blocking system using currenet in hand object, or any found object if applicable."
+
+/datum/keybinding/living/active_block_toggle/down(client/user)
+ var/mob/living/L = user.mob
+ L.keybind_toggle_active_blocking()
+ return TRUE
+
/datum/keybinding/living/active_parry
hotkey_keys = list("Insert", "G")
name = "active_parry"
diff --git a/code/modules/mining/ores_coins.dm b/code/modules/mining/ores_coins.dm
index b3462773d8..8bc9cc4512 100644
--- a/code/modules/mining/ores_coins.dm
+++ b/code/modules/mining/ores_coins.dm
@@ -390,7 +390,7 @@ GLOBAL_LIST_INIT(sand_recipes, list(\
to_chat(user, "There already is a string attached to this coin!")
return
- if (W.use_tool(src, user, 0, 1, max_level = JOB_SKILL_BASIC))
+ if (W.use_tool(src, user, 0, 1, skill_gain_mult = BARE_USE_TOOL_MULT))
add_overlay("coin_string_overlay")
string_attached = 1
to_chat(user, "You attach a string to the coin.")
diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm
index 74775203b1..83cc09a624 100644
--- a/code/modules/mob/inventory.dm
+++ b/code/modules/mob/inventory.dm
@@ -158,7 +158,7 @@
//Returns if a certain item can be equipped to a certain slot.
// Currently invalid for two-handed items - call obj/item/mob_can_equip() instead.
-/mob/proc/can_equip(obj/item/I, slot, disable_warning = FALSE, bypass_equip_delay_self = FALSE)
+/mob/proc/can_equip(obj/item/I, slot, disable_warning = FALSE, bypass_equip_delay_self = FALSE, clothing_check = FALSE, list/return_warning)
return FALSE
/mob/proc/can_put_in_hand(I, hand_index)
@@ -338,50 +338,63 @@
return FALSE
return TRUE
+//This is a SAFE proc. Use this instead of equip_to_slot()!
+//set qdel_on_fail to have it delete W if it fails to equip
+//set disable_warning to disable the 'you are unable to equip that' warning.
+//unset redraw_mob to prevent the mob from being redrawn at the end.
+/mob/proc/equip_to_slot_if_possible(obj/item/W, slot, qdel_on_fail = FALSE, disable_warning = FALSE, redraw_mob = TRUE, bypass_equip_delay_self = FALSE, clothing_check = FALSE)
+ if(!istype(W))
+ return FALSE
+ var/list/warning = list("You are unable to equip that!")
+ if(!W.mob_can_equip(src, null, slot, disable_warning, bypass_equip_delay_self, clothing_check, warning))
+ if(qdel_on_fail)
+ qdel(W)
+ else if(!disable_warning)
+ to_chat(src, warning[1])
+ return FALSE
+ equip_to_slot(W, slot, redraw_mob) //This proc should not ever fail.
+ return TRUE
+
+//This is an UNSAFE proc. It merely handles the actual job of equipping. All the checks on whether you can or can't equip need to be done before! Use mob_can_equip() for that task.
+//In most cases you will want to use equip_to_slot_if_possible()
+/mob/proc/equip_to_slot(obj/item/W, slot)
+ return
+
+//This is just a commonly used configuration for the equip_to_slot_if_possible() proc, used to equip people when the round starts and when events happen and such.
+//Also bypasses equip delay checks, since the mob isn't actually putting it on.
+/mob/proc/equip_to_slot_or_del(obj/item/W, slot)
+ return equip_to_slot_if_possible(W, slot, TRUE, TRUE, FALSE, TRUE)
+
+//puts the item "W" into an appropriate slot in a human's inventory
+//returns 0 if it cannot, 1 if successful
+/mob/proc/equip_to_appropriate_slot(obj/item/W, clothing_check = FALSE)
+ if(!istype(W))
+ return 0
+ var/slot_priority = W.slot_equipment_priority
+
+ if(!slot_priority)
+ slot_priority = list( \
+ SLOT_BACK, SLOT_WEAR_ID,\
+ SLOT_W_UNIFORM, SLOT_WEAR_SUIT,\
+ SLOT_WEAR_MASK, SLOT_HEAD, SLOT_NECK,\
+ SLOT_SHOES, SLOT_GLOVES,\
+ SLOT_EARS, SLOT_GLASSES,\
+ SLOT_BELT, SLOT_S_STORE,\
+ SLOT_L_STORE, SLOT_R_STORE,\
+ SLOT_GENERC_DEXTROUS_STORAGE\
+ )
+
+ for(var/slot in slot_priority)
+ if(equip_to_slot_if_possible(W, slot, FALSE, TRUE, TRUE, FALSE, clothing_check)) //qdel_on_fail = 0; disable_warning = 1; redraw_mob = 1
+ return 1
+
+ return 0
+
//Outdated but still in use apparently. This should at least be a human proc.
//Daily reminder to murder this - Remie.
/mob/living/proc/get_equipped_items(include_pockets = FALSE)
return
-/mob/living/carbon/get_equipped_items(include_pockets = FALSE)
- var/list/items = list()
- if(back)
- items += back
- if(head)
- items += head
- if(wear_mask)
- items += wear_mask
- if(wear_neck)
- items += wear_neck
- return items
-
-/mob/living/carbon/human/get_equipped_items(include_pockets = FALSE)
- var/list/items = ..()
- if(belt)
- items += belt
- if(ears)
- items += ears
- if(glasses)
- items += glasses
- if(gloves)
- items += gloves
- if(shoes)
- items += shoes
- if(wear_id)
- items += wear_id
- if(wear_suit)
- items += wear_suit
- if(w_uniform)
- items += w_uniform
- if(include_pockets)
- if(l_store)
- items += l_store
- if(r_store)
- items += r_store
- if(s_store)
- items += s_store
- return items
-
/mob/living/proc/unequip_everything()
var/list/items = list()
items |= get_equipped_items(TRUE)
@@ -394,7 +407,7 @@
to_chat(M, "You are not holding anything to equip!")
return FALSE
- if(M.equip_to_appropriate_slot(src))
+ if(M.equip_to_appropriate_slot(src, TRUE))
M.update_inv_hands()
return TRUE
else
diff --git a/code/modules/mob/living/carbon/alien/humanoid/inventory.dm b/code/modules/mob/living/carbon/alien/humanoid/inventory.dm
deleted file mode 100644
index e2537f0f4f..0000000000
--- a/code/modules/mob/living/carbon/alien/humanoid/inventory.dm
+++ /dev/null
@@ -1,5 +0,0 @@
-/mob/living/carbon/alien/humanoid/doUnEquip(obj/item/I)
- . = ..()
- if(!. || !I)
- return
-
diff --git a/code/modules/mob/living/carbon/alien/special/facehugger.dm b/code/modules/mob/living/carbon/alien/special/facehugger.dm
index eb1b38b9ff..e35c905539 100644
--- a/code/modules/mob/living/carbon/alien/special/facehugger.dm
+++ b/code/modules/mob/living/carbon/alien/special/facehugger.dm
@@ -88,6 +88,7 @@
Die()
/obj/item/clothing/mask/facehugger/equipped(mob/M)
+ . = ..()
Attach(M)
/obj/item/clothing/mask/facehugger/Crossed(atom/target)
@@ -254,7 +255,7 @@
return FALSE
if(AmBloodsucker(M))
return FALSE
-
+
if(ismonkey(M))
return 1
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index b04f94afad..8472c8bdae 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -179,7 +179,7 @@
to_chat(src, "You gently let go of [throwable_mob].")
return
- adjustStaminaLossBuffered(25)//CIT CHANGE - throwing an entire person shall be very tiring
+ adjustStaminaLossBuffered(STAM_COST_THROW_MOB * ((throwable_mob.mob_size+1)**2))// throwing an entire person shall be very tiring
var/turf/start_T = get_turf(loc) //Get the start and target tile for the descriptors
var/turf/end_T = get_turf(target)
if(start_T && end_T)
@@ -1157,3 +1157,16 @@
dna.features["body_model"] = MALE
if(update_icon)
update_body()
+
+/mob/living/carbon/check_obscured_slots()
+ if(head)
+ if(head.flags_inv & HIDEMASK)
+ LAZYOR(., SLOT_WEAR_MASK)
+ if(head.flags_inv & HIDEEYES)
+ LAZYOR(., SLOT_GLASSES)
+ if(head.flags_inv & HIDEEARS)
+ LAZYOR(., SLOT_EARS)
+
+ if(wear_mask)
+ if(wear_mask.flags_inv & HIDEEYES)
+ LAZYOR(., SLOT_GLASSES)
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 4166069833..a2d53f6f0a 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -152,8 +152,12 @@
dat += "
Fixed the slowdown formula for small character sprites; you guys don't use custom sprite sizes so just ignore these changes.
+
Fixed the "Move it to the threshold" button; it now does what it says.
+
Reworded some text to be clearer.
+
+
+
05 July 2020
+
Ghommie updated:
+
+
You can now actually gain wiring experience from using cable coils.
+
Opening the View Skill Panel shouldn't trigger messages about insufficient admin priviledges anymore.
+
+
Yakumo Chen, kappa-sama updated:
+
+
Removes improvised handguns
+
removed handsaws, improvised gun barrels (you can use atmos pipes again)
+
Guncrafting is less time and resource intensive
+
Item names in guncrafting are user-friendly.
+
+
kappa-sama updated:
+
+
cloth string to replace durathread string
+
durathread string
+
All bows and arrows have had crafting times significantly reduced, coming out at up to 6 times faster crafting speeds. Improvised bows no longer require durathread; instead, they use cloth materials.
+
+
silicons updated:
+
+
active blocking now has a toggle keybind
+
auto bunker override verb has been added
+
shields take 2.5 stam instead of 3.5 stam per second to maintain block
+
Cybernetic implant shields will auto-extend and be used to block if the user has no item to block with
+
+
timothyteakettle updated:
+
+
cooking oil is now far less lethal, requiring a higher volume of the reagent to deal more damage
+
+
+
04 July 2020
+
Sonic121x updated:
+
+
crushed Soldry sodacan
+
digitigrade version of chief medical officer's turtleneck and captain's female formal outfit.
+
+
silicons updated:
+
+
blood_DNA["color"] is now a single variable instead of a list
+
+
+
03 July 2020
+
Arturlang updated:
+
+
You can now toggle hardsuit helmets from the strip menu
+
+
Ghommie updated:
+
+
fixed custom speech/tongue stuff.
+
Lowered shaft miners' paycheck, they have other ways to make cash.
+
You can't (un)equip garments on/from obscured inventory slots anymore.
+
The stamina cost multiplier for swinging melee weapons against mobs has been brought back to 1 from 0.8
+
The stamina cost for throwing mobs now scales with their mob size variable.
+
+
LetterN updated:
+
+
Ported some tags from tgui-3.0 to Vending.js
+
vending icons
+
r&d icons
+
chem master icons
+
+
Onule updated:
+
+
titanium wall man good
+
+
Sonic121x updated:
+
+
Bringback the ChemMaster pill type button.
+
Fix Technode icon.
+
+
bunny232 updated:
+
+
Witchhunter hat no longer obscures mask ears ,eyes, face and mouth
+
+
timothyteakettle updated:
+
+
bloodpacks initialise correctly now
+
+
+
02 July 2020
+
Ghommie updated:
+
+
Fixing a few issues with twohanded items.
+
Unum decks now work correctly.
+
Abductor walls are once again buildable with alien alloy.
+
+
Trilbyspaceclone updated:
+
+
Makes pride and envy ruin a bit smaller!
+
Pride now has rings, lipstick wigs and silver walls/door making a nice and polished look then cyan blue walls.
+
more trash and better dagger placement on food ruin
+
Snowboim now has snowballs and toy gifts for the two skeles daw!
+
Beach boim now has carp light branding beer, as well as soap!
+
Greed ruin now uses nice slick walls and carpet!
+
Founten ruin looks a lot better with its carpets and well maintained fluff things, but walls suffered and no longer can salvage ruined metal...
+
Alien nest has a bit more glowy floors of resin looking a bit more lived in by the drones. As well as the "door" now being see through resin rather then the thicker stuff that you cant see through
+
Pizza party has a few more gifts, some candy and snap pops yay!
+
Sloth ruin is about 15~ tiles shorter, has and has more fruit for a bowl. How lazy!
+
+
silicons updated:
+
+
bohbombing is a thing now
+
+
30 June 2020
Fikou updated:
diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml
index 9cd1987327..0553c64ce7 100644
--- a/html/changelogs/.all_changelog.yml
+++ b/html/changelogs/.all_changelog.yml
@@ -26185,3 +26185,114 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
- rscadd: skeleton is now split into two more types, greater and lesser
- bugfix: non-carbon blood is now not white
- spellcheck: fixed a bunch of grammar/spelling mistakes
+2020-07-02:
+ Ghommie:
+ - bugfix: Fixing a few issues with twohanded items.
+ - bugfix: Unum decks now work correctly.
+ - bugfix: Abductor walls are once again buildable with alien alloy.
+ Trilbyspaceclone:
+ - tweak: Makes pride and envy ruin a bit smaller!
+ - rscadd: Pride now has rings, lipstick wigs and silver walls/door making a nice
+ and polished look then cyan blue walls.
+ - rscadd: more trash and better dagger placement on food ruin
+ - rscadd: Snowboim now has snowballs and toy gifts for the two skeles daw!
+ - tweak: Beach boim now has carp light branding beer, as well as soap!
+ - tweak: Greed ruin now uses nice slick walls and carpet!
+ - tweak: Founten ruin looks a lot better with its carpets and well maintained fluff
+ things, but walls suffered and no longer can salvage ruined metal...
+ - rscadd: Alien nest has a bit more glowy floors of resin looking a bit more lived
+ in by the drones. As well as the "door" now being see through resin rather then
+ the thicker stuff that you cant see through
+ - rscadd: Pizza party has a few more gifts, some candy and snap pops yay!
+ - balance: Sloth ruin is about 15~ tiles shorter, has and has more fruit for a bowl.
+ How lazy!
+ silicons:
+ - bugfix: bohbombing is a thing now
+2020-07-03:
+ Arturlang:
+ - rscadd: You can now toggle hardsuit helmets from the strip menu
+ Ghommie:
+ - bugfix: fixed custom speech/tongue stuff.
+ - balance: Lowered shaft miners' paycheck, they have other ways to make cash.
+ - rscadd: You can't (un)equip garments on/from obscured inventory slots anymore.
+ - balance: The stamina cost multiplier for swinging melee weapons against mobs has
+ been brought back to 1 from 0.8
+ - balance: The stamina cost for throwing mobs now scales with their mob size variable.
+ LetterN:
+ - tweak: Ported some tags from tgui-3.0 to Vending.js
+ - bugfix: vending icons
+ - bugfix: r&d icons
+ - bugfix: chem master icons
+ Onule:
+ - tweak: titanium wall man good
+ Sonic121x:
+ - bugfix: Bringback the ChemMaster pill type button.
+ - bugfix: Fix Technode icon.
+ bunny232:
+ - tweak: Witchhunter hat no longer obscures mask ears ,eyes, face and mouth
+ timothyteakettle:
+ - bugfix: bloodpacks initialise correctly now
+2020-07-04:
+ Sonic121x:
+ - rscadd: crushed Soldry sodacan
+ - rscadd: digitigrade version of chief medical officer's turtleneck and captain's
+ female formal outfit.
+ silicons:
+ - refactor: blood_DNA["color"] is now a single variable instead of a list
+2020-07-05:
+ Ghommie:
+ - bugfix: You can now actually gain wiring experience from using cable coils.
+ - bugfix: Opening the View Skill Panel shouldn't trigger messages about insufficient
+ admin priviledges anymore.
+ Yakumo Chen, kappa-sama:
+ - rscdel: Removes improvised handguns
+ - rscdel: removed handsaws, improvised gun barrels (you can use atmos pipes again)
+ - balance: Guncrafting is less time and resource intensive
+ - tweak: Item names in guncrafting are user-friendly.
+ kappa-sama:
+ - rscadd: cloth string to replace durathread string
+ - rscdel: durathread string
+ - balance: All bows and arrows have had crafting times significantly reduced, coming
+ out at up to 6 times faster crafting speeds. Improvised bows no longer require
+ durathread; instead, they use cloth materials.
+ silicons:
+ - tweak: active blocking now has a toggle keybind
+ - rscadd: auto bunker override verb has been added
+ - balance: shields take 2.5 stam instead of 3.5 stam per second to maintain block
+ - rscadd: Cybernetic implant shields will auto-extend and be used to block if the
+ user has no item to block with
+ timothyteakettle:
+ - tweak: cooking oil is now far less lethal, requiring a higher volume of the reagent
+ to deal more damage
+2020-07-07:
+ KasparoVy:
+ - tweak: Fixes misaligned south-facing silver legwraps sprite.
+ Owai-Seek:
+ - bugfix: Bee Balm is now visible.
+ Weblure:
+ - bugfix: Fixed the slowdown formula for small character sprites; you guys don't
+ use custom sprite sizes so just ignore these changes.
+ - bugfix: Fixed the "Move it to the threshold" button; it now does what it says.
+ - tweak: Reworded some text to be clearer.
+2020-07-08:
+ DeltaFire15:
+ - bugfix: The kill-once objective now works properly.
+ EmeraldSundisk:
+ - rscadd: CogStation now has an apothecary
+ - rscdel: Removes an outdated note on sleepers
+ - tweak: Readjusts CogStation's chemistry lab
+ - tweak: Slight area designation adjustments for Robotics
+ - bugfix: The arrivals plaque should be readable now
+ Owai-Seek:
+ - rscadd: Margarine, Chili Cheese Fries.
+ - tweak: Egg Wraps are now categorized under egg foods.
+ - bugfix: Tuna Sandwich crafting/sprite is now visible.
+ - imageadd: Icons for chicken, cooked chicken, steak, grilled carp, corndogs
+ - imageadd: Icons for chili cheese fries, margarine, BLT sandwich
+ - imageadd: (Unused) icons for raw meatballs, and lard
+2020-07-09:
+ timothyteakettle:
+ - rscadd: bluespace tray added, allowing twice as many items as the regular tray,
+ printable at the service lathe, researched through science
+ - rscadd: bluespace jar added, a kind of pet carrier that allows human sized mobs
+ inside, and smashes when thrown, researched and printed through science
diff --git a/html/changelogs/AutoChangeLog-pr-12710.yml b/html/changelogs/AutoChangeLog-pr-12710.yml
new file mode 100644
index 0000000000..0adf58c8c2
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-12710.yml
@@ -0,0 +1,4 @@
+author: "Sneakyrat6"
+delete-after: True
+changes:
+ - bugfix: "Fixes hair falling out of hoodies."
diff --git a/html/changelogs/AutoChangeLog-pr-12712.yml b/html/changelogs/AutoChangeLog-pr-12712.yml
new file mode 100644
index 0000000000..f2da8210f3
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-12712.yml
@@ -0,0 +1,4 @@
+author: "TheObserver-sys"
+delete-after: True
+changes:
+ - bugfix: "Actually adds the juice reagent to make laugh peas donuts."
diff --git a/icons/mob/clothing/feet_digi.dmi b/icons/mob/clothing/feet_digi.dmi
index 7815f3d0a4..f798850ee7 100644
Binary files a/icons/mob/clothing/feet_digi.dmi and b/icons/mob/clothing/feet_digi.dmi differ
diff --git a/icons/mob/clothing/uniform_digi.dmi b/icons/mob/clothing/uniform_digi.dmi
index da94f97895..b1b9ded7f0 100644
Binary files a/icons/mob/clothing/uniform_digi.dmi and b/icons/mob/clothing/uniform_digi.dmi differ
diff --git a/icons/obj/contraband.dmi b/icons/obj/contraband.dmi
index a1d5bc5900..a6c554f7da 100644
Binary files a/icons/obj/contraband.dmi and b/icons/obj/contraband.dmi differ
diff --git a/icons/obj/doors/airlocks/shuttle/overlays.dmi b/icons/obj/doors/airlocks/shuttle/overlays.dmi
index b2bb2cfa04..70df610212 100644
Binary files a/icons/obj/doors/airlocks/shuttle/overlays.dmi and b/icons/obj/doors/airlocks/shuttle/overlays.dmi differ
diff --git a/icons/obj/doors/airlocks/shuttle/shuttle.dmi b/icons/obj/doors/airlocks/shuttle/shuttle.dmi
index 0e05597163..b4b998e4bc 100644
Binary files a/icons/obj/doors/airlocks/shuttle/shuttle.dmi and b/icons/obj/doors/airlocks/shuttle/shuttle.dmi differ
diff --git a/icons/obj/food/burgerbread.dmi b/icons/obj/food/burgerbread.dmi
index 414930ac25..7ef3a7d418 100644
Binary files a/icons/obj/food/burgerbread.dmi and b/icons/obj/food/burgerbread.dmi differ
diff --git a/icons/obj/food/containers.dmi b/icons/obj/food/containers.dmi
index 641715fd87..ceda2fc9eb 100644
Binary files a/icons/obj/food/containers.dmi and b/icons/obj/food/containers.dmi differ
diff --git a/icons/obj/food/food.dmi b/icons/obj/food/food.dmi
index e7196190cf..e87a37d069 100644
Binary files a/icons/obj/food/food.dmi and b/icons/obj/food/food.dmi differ
diff --git a/icons/obj/hydroponics/growing_flowers.dmi b/icons/obj/hydroponics/growing_flowers.dmi
index 98d9af2ce6..b48051cc56 100644
Binary files a/icons/obj/hydroponics/growing_flowers.dmi and b/icons/obj/hydroponics/growing_flowers.dmi differ
diff --git a/icons/obj/hydroponics/harvest.dmi b/icons/obj/hydroponics/harvest.dmi
index 2ea5554741..d7800fc0a5 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 15b7e2b96c..a9d0845be3 100644
Binary files a/icons/obj/hydroponics/seeds.dmi and b/icons/obj/hydroponics/seeds.dmi differ
diff --git a/icons/obj/janitor.dmi b/icons/obj/janitor.dmi
index a157d333b0..1f520a42bd 100644
Binary files a/icons/obj/janitor.dmi and b/icons/obj/janitor.dmi differ
diff --git a/icons/obj/pet_carrier.dmi b/icons/obj/pet_carrier.dmi
index 340636056c..b3c11be98f 100644
Binary files a/icons/obj/pet_carrier.dmi and b/icons/obj/pet_carrier.dmi differ
diff --git a/icons/obj/smooth_structures/shuttle_window.dmi b/icons/obj/smooth_structures/shuttle_window.dmi
index 2fbf93f703..cb07225a76 100644
Binary files a/icons/obj/smooth_structures/shuttle_window.dmi and b/icons/obj/smooth_structures/shuttle_window.dmi differ
diff --git a/icons/obj/stack_objects.dmi b/icons/obj/stack_objects.dmi
index aa29bd63cc..d8c7d6b722 100644
Binary files a/icons/obj/stack_objects.dmi and b/icons/obj/stack_objects.dmi differ
diff --git a/icons/obj/tiles.dmi b/icons/obj/tiles.dmi
index df080ce3e6..38d153e261 100644
Binary files a/icons/obj/tiles.dmi and b/icons/obj/tiles.dmi differ
diff --git a/icons/turf/floors.dmi b/icons/turf/floors.dmi
index 20963e7fbe..83dd4f5df8 100644
Binary files a/icons/turf/floors.dmi and b/icons/turf/floors.dmi differ
diff --git a/icons/turf/walls/shuttle_wall.dmi b/icons/turf/walls/shuttle_wall.dmi
index cce97b2458..d9c904c336 100644
Binary files a/icons/turf/walls/shuttle_wall.dmi and b/icons/turf/walls/shuttle_wall.dmi differ
diff --git a/interface/skin.dmf b/interface/skin.dmf
index 8d68336754..cf49f0f30f 100644
--- a/interface/skin.dmf
+++ b/interface/skin.dmf
@@ -80,6 +80,7 @@ window "mainwindow"
anchor2 = none
background-color = #272727
is-visible = false
+ auto-format = false
saved-params = ""
elem "tooltip"
type = BROWSER
diff --git a/modular_citadel/code/datums/status_effects/chems.dm b/modular_citadel/code/datums/status_effects/chems.dm
index 57cbdb6beb..47eef6a820 100644
--- a/modular_citadel/code/datums/status_effects/chems.dm
+++ b/modular_citadel/code/datums/status_effects/chems.dm
@@ -41,20 +41,6 @@
/datum/status_effect/chem/breast_enlarger/on_apply()//Removes clothes, they're too small to contain you. You belong to space now.
log_reagent("FERMICHEM: [owner]'s breasts has reached comical sizes. ID: [owner.key]")
- var/mob/living/carbon/human/H = owner
- var/message = FALSE
- if(H.w_uniform)
- H.dropItemToGround(H.w_uniform, TRUE)
- message = TRUE
- if(H.wear_suit)
- H.dropItemToGround(H.wear_suit, TRUE)
- message = TRUE
- if(message)
- playsound(H.loc, 'sound/items/poster_ripped.ogg', 50, 1)
- H.visible_message("[H]'s chest suddenly bursts forth, ripping their clothes off!'", \
- "Your clothes give, ripping into peices under the strain of your swelling breasts! Unless you manage to reduce the size of your breasts, there's no way you're going to be able to put anything on over these melons..!")
- else
- to_chat(H, "Your bountiful bosom is so rich with mass, you seriously doubt you'll be able to fit any clothes over it.")
return ..()
/datum/status_effect/chem/breast_enlarger/tick()//If you try to wear clothes, you fail. Slows you down if you're comically huge
@@ -64,16 +50,6 @@
H.remove_status_effect(src)
return
moveCalc = 1+((round(B.cached_size) - 9)/3) //Afffects how fast you move, and how often you can click.
- var/message = FALSE
- if(H.w_uniform)
- H.dropItemToGround(H.w_uniform, TRUE)
- message = TRUE
- if(H.wear_suit)
- H.dropItemToGround(H.wear_suit, TRUE)
- message = TRUE
- if(message)
- playsound(H.loc, 'sound/items/poster_ripped.ogg', 50, 1)
- to_chat(H, "Your enormous breasts are way too large to fit anything over them!")
if(last_checked_size != B.cached_size)
H.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/status_effect/breast_hypertrophy, multiplicative_slowdown = moveCalc)
@@ -115,20 +91,6 @@
/datum/status_effect/chem/penis_enlarger/on_apply()//Removes clothes, they're too small to contain you. You belong to space now.
log_reagent("FERMICHEM: [owner]'s dick has reached comical sizes. ID: [owner.key]")
- var/mob/living/carbon/human/H = owner
- var/message = FALSE
- if(H.w_uniform)
- H.dropItemToGround(H.w_uniform, TRUE)
- message = TRUE
- if(H.wear_suit)
- H.dropItemToGround(H.wear_suit, TRUE)
- message = TRUE
- if(message)
- playsound(H.loc, 'sound/items/poster_ripped.ogg', 50, 1)
- H.visible_message("[H]'s schlong suddenly bursts forth, ripping their clothes off!'", \
- "Your clothes give, ripping into peices under the strain of your swelling pecker! Unless you manage to reduce the size of your emancipated trouser snake, there's no way you're going to be able to put anything on over this girth..!")
- else
- to_chat(H, "Your emancipated trouser snake is so ripe with girth, you seriously doubt you'll be able to fit any clothes over it.")
return ..()
@@ -140,18 +102,6 @@
return
moveCalc = 1+((round(P.length) - 21)/3) //effects how fast you can move
bloodCalc = 1+((round(P.length) - 21)/15) //effects how much blood you need (I didn' bother adding an arousal check because I'm spending too much time on this organ already.)
-
- var/message = FALSE
- if(H.w_uniform)
- H.dropItemToGround(H.w_uniform, TRUE)
- message = TRUE
- if(H.wear_suit)
- H.dropItemToGround(H.wear_suit, TRUE)
- message = TRUE
- if(message)
- playsound(H.loc, 'sound/items/poster_ripped.ogg', 50, 1)
- to_chat(H, "Your enormous package is way to large to fit anything over!")
-
if(P.length < 22 && H.has_movespeed_modifier(/datum/movespeed_modifier/status_effect/penis_hypertrophy))
to_chat(owner, "Your rascally willy has become a more managable size, liberating your movements.")
H.remove_movespeed_modifier(/datum/movespeed_modifier/status_effect/penis_hypertrophy)
diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/SDGF.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/SDGF.dm
index 37ec1ee69f..8ef302e904 100644
--- a/modular_citadel/code/modules/reagents/chemistry/reagents/SDGF.dm
+++ b/modular_citadel/code/modules/reagents/chemistry/reagents/SDGF.dm
@@ -63,7 +63,7 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
startHunger = M.nutrition
if(pollStarted == FALSE)
pollStarted = TRUE
- candies = pollGhostCandidates("Do you want and agree to play as a clone of [M], respect their character and not engage in ERP without permission from the original?", ignore_category = POLL_IGNORE_CLONE)
+ candies = pollGhostCandidates("Do you want to play as [M]'s defective clone? (Don't ERP without permission from the original)", ignore_category = POLL_IGNORE_CLONE)
log_reagent("FERMICHEM: [M] ckey: [M.key] has taken SDGF, and ghosts have been polled.")
if(20 to INFINITY)
if(LAZYLEN(candies) && playerClone == FALSE) //If there's candidates, clone the person and put them in there!
diff --git a/tgstation.dme b/tgstation.dme
index 3e240b3973..8be5ae2a46 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -38,6 +38,7 @@
#include "code\__DEFINES\configuration.dm"
#include "code\__DEFINES\construction.dm"
#include "code\__DEFINES\contracts.dm"
+#include "code\__DEFINES\cooldowns.dm"
#include "code\__DEFINES\cult.dm"
#include "code\__DEFINES\diseases.dm"
#include "code\__DEFINES\DNA.dm"
@@ -743,7 +744,6 @@
#include "code\game\machinery\dna_scanner.dm"
#include "code\game\machinery\doppler_array.dm"
#include "code\game\machinery\droneDispenser.dm"
-#include "code\game\machinery\exp_cloner.dm"
#include "code\game\machinery\firealarm.dm"
#include "code\game\machinery\flasher.dm"
#include "code\game\machinery\gulag_item_reclaimer.dm"
@@ -1804,6 +1804,7 @@
#include "code\modules\client\preferences_toggles.dm"
#include "code\modules\client\preferences_vr.dm"
#include "code\modules\client\verbs\aooc.dm"
+#include "code\modules\client\verbs\autobunker.dm"
#include "code\modules\client\verbs\etips.dm"
#include "code\modules\client\verbs\looc.dm"
#include "code\modules\client\verbs\minimap.dm"
@@ -2414,7 +2415,6 @@
#include "code\modules\mob\living\carbon\alien\humanoid\death.dm"
#include "code\modules\mob\living\carbon\alien\humanoid\humanoid.dm"
#include "code\modules\mob\living\carbon\alien\humanoid\humanoid_defense.dm"
-#include "code\modules\mob\living\carbon\alien\humanoid\inventory.dm"
#include "code\modules\mob\living\carbon\alien\humanoid\life.dm"
#include "code\modules\mob\living\carbon\alien\humanoid\queen.dm"
#include "code\modules\mob\living\carbon\alien\humanoid\update_icons.dm"
diff --git a/tgui-next/packages/tgui/interfaces/Vending.js b/tgui-next/packages/tgui/interfaces/Vending.js
index 3e48124fce..2965dd97d1 100644
--- a/tgui-next/packages/tgui/interfaces/Vending.js
+++ b/tgui-next/packages/tgui/interfaces/Vending.js
@@ -61,7 +61,7 @@ export const Vending = props => {
);
return (
-
+
{product.base64 ? (
{
}} />
) : (
)}
- {product.name}
-
+
+ {product.name}
+
+ {
{data.stock[product.name]} in stock
-
+
{custom && (