diff --git a/_maps/map_files/generic/CentCom_skyrat_z2.dmm b/_maps/map_files/generic/CentCom_skyrat_z2.dmm
index ad1baba7504..620b51c80b4 100644
--- a/_maps/map_files/generic/CentCom_skyrat_z2.dmm
+++ b/_maps/map_files/generic/CentCom_skyrat_z2.dmm
@@ -310,12 +310,7 @@
/turf/open/indestructible/hotelwood,
/area/centcom/holding/cafe)
"ahk" = (
-/turf/open/indestructible/hotelwood{
- desc = "It's really cozy! Great for soft paws!";
- icon = 'modular_skyrat/modules/ghostcafe/icons/carpet_royalblack.dmi';
- icon_state = "carpet";
- name = "soft carpet"
- },
+/turf/open/indestructible/carpet,
/area/centcom/holding/cafepark)
"ahs" = (
/obj/structure/flora/bush/leavy/style_2,
@@ -363,7 +358,7 @@
/obj/machinery/door/airlock{
id_tag = "CCD2"
},
-/turf/open/floor/carpet/royalblack,
+/turf/open/indestructible/carpet,
/area/centcom/holding/cafe)
"ahQ" = (
/obj/structure/flora/bush/sparsegrass,
@@ -475,12 +470,7 @@
color = "#B22222";
name = "Curtain"
},
-/turf/open/indestructible/hotelwood{
- desc = "It's really cozy! Great for soft paws!";
- icon = 'modular_skyrat/modules/ghostcafe/icons/carpet_royalblack.dmi';
- icon_state = "carpet";
- name = "soft carpet"
- },
+/turf/open/indestructible/carpet,
/area/centcom/holding/cafe)
"ajK" = (
/obj/structure/flora/rock/pile{
@@ -592,12 +582,7 @@
"alk" = (
/obj/item/bedsheet/dorms_double,
/obj/structure/bed/double,
-/turf/open/indestructible/hotelwood{
- desc = "It's really cozy! Great for soft paws!";
- icon = 'modular_skyrat/modules/ghostcafe/icons/carpet_royalblack.dmi';
- icon_state = "carpet";
- name = "soft carpet"
- },
+/turf/open/indestructible/carpet,
/area/centcom/holding/cafe)
"alm" = (
/obj/effect/turf_decal/tile/blue{
@@ -775,9 +760,6 @@
},
/turf/open/floor/iron/freezer,
/area/centcom/holding/cafe)
-"amF" = (
-/turf/open/floor/carpet/royalblack,
-/area/centcom/holding/cafe)
"amG" = (
/obj/structure/chair/sofa/corp/left,
/turf/open/floor/carpet/purple,
@@ -1115,7 +1097,7 @@
},
/obj/structure/bed/double/pod,
/obj/item/bedsheet/dorms_double,
-/turf/open/floor/carpet/royalblack,
+/turf/open/indestructible/carpet,
/area/centcom/holding/cafe)
"aqy" = (
/obj/machinery/vending/wardrobe/cargo_wardrobe/ghost_cafe,
@@ -1221,12 +1203,7 @@
"asz" = (
/obj/structure/table/wood/fancy/blue,
/obj/machinery/light/directional/north,
-/turf/open/indestructible/hotelwood{
- desc = "It's really cozy! Great for soft paws!";
- icon = 'modular_skyrat/modules/ghostcafe/icons/carpet_royalblack.dmi';
- icon_state = "carpet";
- name = "soft carpet"
- },
+/turf/open/indestructible/carpet,
/area/centcom/holding/cafepark)
"asC" = (
/obj/effect/turf_decal/tile/blue{
@@ -1645,11 +1622,7 @@
light_range = 10;
nightshift_light_power = 10
},
-/turf/open/indestructible/hoteltile{
- icon = 'modular_skyrat/modules/ghostcafe/icons/floors.dmi';
- icon_state = "titanium_blue_old";
- name = "bathroom floor"
- },
+/turf/open/indestructible/bathroom,
/area/centcom/holding/cafe)
"axF" = (
/obj/structure/bed/dogbed,
@@ -2064,12 +2037,7 @@
/obj/structure/mirror{
pixel_y = 32
},
-/turf/open/indestructible/hotelwood{
- desc = "It's really cozy! Great for soft paws!";
- icon = 'modular_skyrat/modules/ghostcafe/icons/carpet_royalblack.dmi';
- icon_state = "carpet";
- name = "soft carpet"
- },
+/turf/open/indestructible/carpet,
/area/centcom/holding/cafe)
"aAY" = (
/obj/effect/turf_decal/tile/blue{
@@ -2150,7 +2118,7 @@
/obj/structure/chair/sofa/corp/right{
dir = 4
},
-/turf/open/floor/carpet/royalblack,
+/turf/open/indestructible/carpet,
/area/centcom/holding/cafe)
"aBH" = (
/obj/effect/turf_decal/tile/neutral{
@@ -2173,7 +2141,7 @@
/area/centcom/holding/cafe)
"aBT" = (
/obj/structure/table/wood,
-/turf/open/floor/carpet/royalblack,
+/turf/open/indestructible/carpet,
/area/centcom/holding/cafe)
"aBW" = (
/obj/machinery/hydroponics/constructable,
@@ -3260,11 +3228,7 @@
light_range = 10;
nightshift_light_power = 10
},
-/turf/open/indestructible/hoteltile{
- icon = 'modular_skyrat/modules/ghostcafe/icons/floors.dmi';
- icon_state = "titanium_blue_old";
- name = "bathroom floor"
- },
+/turf/open/indestructible/bathroom,
/area/centcom/holding/cafedorms)
"aOZ" = (
/obj/machinery/light/directional/north,
@@ -3286,12 +3250,7 @@
/turf/open/indestructible/hotelwood,
/area/centcom/holding/cafe)
"aPx" = (
-/turf/open/indestructible/hotelwood{
- desc = "It's really cozy! Great for soft paws!";
- icon = 'modular_skyrat/modules/ghostcafe/icons/carpet_royalblack.dmi';
- icon_state = "carpet";
- name = "soft carpet"
- },
+/turf/open/indestructible/carpet,
/area/centcom/holding/cafe)
"aPC" = (
/obj/structure/railing{
@@ -3434,12 +3393,7 @@
/obj/structure/fireplace{
dir = 4
},
-/turf/open/indestructible/hotelwood{
- desc = "It's really cozy! Great for soft paws!";
- icon = 'modular_skyrat/modules/ghostcafe/icons/carpet_royalblack.dmi';
- icon_state = "carpet";
- name = "soft carpet"
- },
+/turf/open/indestructible/carpet,
/area/centcom/holding/cafe)
"aQR" = (
/obj/effect/turf_decal/stripes/line{
@@ -3540,11 +3494,7 @@
/obj/structure/toilet{
pixel_y = 14
},
-/turf/open/indestructible/hoteltile{
- icon = 'modular_skyrat/modules/ghostcafe/icons/floors.dmi';
- icon_state = "titanium_blue_old";
- name = "bathroom floor"
- },
+/turf/open/indestructible/bathroom,
/area/centcom/holding/cafe)
"aRC" = (
/obj/machinery/light/directional/north,
@@ -3824,7 +3774,7 @@
/obj/structure/chair/sofa/corp/left{
dir = 4
},
-/turf/open/floor/carpet/royalblack,
+/turf/open/indestructible/carpet,
/area/centcom/holding/cafe)
"aUw" = (
/obj/structure/stone_tile/surrounding_tile{
@@ -3926,11 +3876,7 @@
/area/centcom/holding/cafepark)
"aVC" = (
/obj/machinery/shower/directional/west,
-/turf/open/indestructible/hoteltile{
- icon = 'modular_skyrat/modules/ghostcafe/icons/floors.dmi';
- icon_state = "titanium_blue_old";
- name = "bathroom floor"
- },
+/turf/open/indestructible/bathroom,
/area/centcom/holding/cafedorms)
"aVI" = (
/obj/structure/fake_stairs/directional/east,
@@ -4820,7 +4766,7 @@
/obj/structure/chair/sofa/corp{
dir = 4
},
-/turf/open/floor/carpet/royalblack,
+/turf/open/indestructible/carpet,
/area/centcom/holding/cafe)
"bQZ" = (
/obj/structure/reagent_dispensers/plumbed,
@@ -4858,12 +4804,7 @@
/obj/structure/fireplace{
dir = 8
},
-/turf/open/indestructible/hotelwood{
- desc = "It's really cozy! Great for soft paws!";
- icon = 'modular_skyrat/modules/ghostcafe/icons/carpet_royalblack.dmi';
- icon_state = "carpet";
- name = "soft carpet"
- },
+/turf/open/indestructible/carpet,
/area/centcom/holding/cafe)
"bTR" = (
/obj/structure/table/reinforced,
@@ -4979,7 +4920,7 @@
/area/centcom/interlink)
"bZt" = (
/obj/structure/chair/sofa/corp/corner,
-/turf/open/floor/carpet/royalblack,
+/turf/open/indestructible/carpet,
/area/centcom/holding/cafe)
"cal" = (
/obj/structure/railing{
@@ -5094,7 +5035,7 @@
/obj/structure/chair/sofa/corp/left{
dir = 8
},
-/turf/open/floor/carpet/royalblack,
+/turf/open/indestructible/carpet,
/area/centcom/holding/cafe)
"cmh" = (
/obj/effect/turf_decal/siding{
@@ -5351,7 +5292,7 @@
/obj/structure/sign/painting/library_secure{
pixel_x = 32
},
-/turf/open/floor/carpet/royalblack,
+/turf/open/indestructible/carpet,
/area/centcom/holding/cafe)
"cHY" = (
/obj/effect/turf_decal/weather/dirt{
@@ -5584,11 +5525,7 @@
/obj/structure/toilet{
pixel_y = 14
},
-/turf/open/indestructible/hoteltile{
- icon = 'modular_skyrat/modules/ghostcafe/icons/floors.dmi';
- icon_state = "titanium_blue_old";
- name = "bathroom floor"
- },
+/turf/open/indestructible/bathroom,
/area/centcom/holding/cafe)
"dbZ" = (
/obj/effect/turf_decal/weather/dirt{
@@ -5782,7 +5719,7 @@
/obj/structure/chair/sofa/corp/corner{
dir = 4
},
-/turf/open/floor/carpet/royalblack,
+/turf/open/indestructible/carpet,
/area/centcom/holding/cafe)
"dzn" = (
/obj/structure/fence{
@@ -5827,7 +5764,7 @@
/area/centcom/interlink)
"dDF" = (
/obj/structure/chair/sofa/corp,
-/turf/open/floor/carpet/royalblack,
+/turf/open/indestructible/carpet,
/area/centcom/holding/cafe)
"dFj" = (
/obj/machinery/door/airlock/medical/glass{
@@ -6067,7 +6004,7 @@
id_tag = "CCD1"
},
/obj/structure/fans/tiny/invisible,
-/turf/open/floor/carpet/royalblack,
+/turf/open/indestructible/carpet,
/area/centcom/holding/cafe)
"dXe" = (
/obj/structure/flora/grass/jungle/b/style_2,
@@ -7009,7 +6946,7 @@
/area/centcom/interlink)
"fPs" = (
/obj/item/kirbyplants/random,
-/turf/open/floor/carpet/royalblack,
+/turf/open/indestructible/carpet,
/area/centcom/holding/cafe)
"fQt" = (
/mob/living/basic/crab{
@@ -7647,12 +7584,7 @@
/obj/structure/dresser{
pixel_y = 7
},
-/turf/open/indestructible/hotelwood{
- desc = "It's really cozy! Great for soft paws!";
- icon = 'modular_skyrat/modules/ghostcafe/icons/carpet_royalblack.dmi';
- icon_state = "carpet";
- name = "soft carpet"
- },
+/turf/open/indestructible/carpet,
/area/centcom/holding/cafe)
"hbE" = (
/obj/structure/fence/interlink{
@@ -8456,7 +8388,7 @@
/area/centcom/interlink)
"ioZ" = (
/obj/machinery/light/directional/east,
-/turf/open/floor/carpet/royalblack,
+/turf/open/indestructible/carpet,
/area/centcom/holding/cafe)
"ipc" = (
/obj/structure/sign/poster/random/directional/east,
@@ -8598,11 +8530,7 @@
dir = 1
},
/obj/effect/turf_decal/siding/thinplating_new/end,
-/turf/open/indestructible/hoteltile{
- icon = 'modular_skyrat/modules/ghostcafe/icons/floors.dmi';
- icon_state = "titanium_blue_old";
- name = "bathroom floor"
- },
+/turf/open/indestructible/bathroom,
/area/centcom/holding/cafe)
"iCz" = (
/obj/structure/fans/tiny/invisible,
@@ -9346,7 +9274,7 @@
"jYf" = (
/obj/structure/table/wood,
/obj/item/paper_bin,
-/turf/open/floor/carpet/royalblack,
+/turf/open/indestructible/carpet,
/area/centcom/holding/cafe)
"jYy" = (
/obj/effect/turf_decal/sand,
@@ -11267,12 +11195,7 @@
/obj/structure/chair/sofa/corp/left{
dir = 8
},
-/turf/open/indestructible/hotelwood{
- desc = "It's really cozy! Great for soft paws!";
- icon = 'modular_skyrat/modules/ghostcafe/icons/carpet_royalblack.dmi';
- icon_state = "carpet";
- name = "soft carpet"
- },
+/turf/open/indestructible/carpet,
/area/centcom/holding/cafepark)
"nii" = (
/obj/structure/fireplace,
@@ -11429,12 +11352,7 @@
/obj/structure/chair/sofa/corp/right{
dir = 8
},
-/turf/open/indestructible/hotelwood{
- desc = "It's really cozy! Great for soft paws!";
- icon = 'modular_skyrat/modules/ghostcafe/icons/carpet_royalblack.dmi';
- icon_state = "carpet";
- name = "soft carpet"
- },
+/turf/open/indestructible/carpet,
/area/centcom/holding/cafepark)
"npe" = (
/obj/effect/turf_decal/tile/dark_blue/opposingcorners,
@@ -12391,7 +12309,7 @@
dir = 4
},
/obj/machinery/light/directional/west,
-/turf/open/floor/carpet/royalblack,
+/turf/open/indestructible/carpet,
/area/centcom/holding/cafe)
"pao" = (
/obj/effect/turf_decal/siding/thinplating_new/dark{
@@ -12412,7 +12330,7 @@
specialfunctions = 4
},
/obj/item/kirbyplants/random,
-/turf/open/floor/carpet/royalblack,
+/turf/open/indestructible/carpet,
/area/centcom/holding/cafe)
"pbz" = (
/obj/effect/turf_decal/tile/blue{
@@ -13017,12 +12935,7 @@
/obj/structure/chair/sofa/corp/right{
dir = 4
},
-/turf/open/indestructible/hotelwood{
- desc = "It's really cozy! Great for soft paws!";
- icon = 'modular_skyrat/modules/ghostcafe/icons/carpet_royalblack.dmi';
- icon_state = "carpet";
- name = "soft carpet"
- },
+/turf/open/indestructible/carpet,
/area/centcom/holding/cafepark)
"pTO" = (
/obj/structure/table/reinforced,
@@ -13192,12 +13105,7 @@
/area/centcom/interlink)
"qfy" = (
/obj/structure/table/wood/fancy/blue,
-/turf/open/indestructible/hotelwood{
- desc = "It's really cozy! Great for soft paws!";
- icon = 'modular_skyrat/modules/ghostcafe/icons/carpet_royalblack.dmi';
- icon_state = "carpet";
- name = "soft carpet"
- },
+/turf/open/indestructible/carpet,
/area/centcom/holding/cafepark)
"qgh" = (
/obj/structure/stone_tile/surrounding,
@@ -13509,8 +13417,8 @@
/turf/open/floor/iron/white,
/area/centcom/interlink)
"qGA" = (
-/obj/structure/closet/secure_closet/brig,
/obj/effect/turf_decal/tile/red/opposingcorners,
+/obj/machinery/vending/wardrobe/sec_wardrobe,
/turf/open/floor/iron/dark,
/area/centcom/holding/cafe)
"qGW" = (
@@ -13522,12 +13430,7 @@
/obj/item/stack/sheet/mineral/wood/fifty,
/obj/item/stack/sheet/mineral/wood/fifty,
/obj/item/lighter,
-/turf/open/indestructible/hotelwood{
- desc = "It's really cozy! Great for soft paws!";
- icon = 'modular_skyrat/modules/ghostcafe/icons/carpet_royalblack.dmi';
- icon_state = "carpet";
- name = "soft carpet"
- },
+/turf/open/indestructible/carpet,
/area/centcom/holding/cafe)
"qHJ" = (
/obj/structure/extinguisher_cabinet/directional/north,
@@ -13629,7 +13532,7 @@
/obj/structure/chair/sofa/corp{
dir = 8
},
-/turf/open/floor/carpet/royalblack,
+/turf/open/indestructible/carpet,
/area/centcom/holding/cafe)
"qQl" = (
/obj/machinery/light/directional/south,
@@ -13711,11 +13614,7 @@
/area/centcom/holding/cafepark)
"qWc" = (
/obj/machinery/shower/directional/west,
-/turf/open/indestructible/hoteltile{
- icon = 'modular_skyrat/modules/ghostcafe/icons/floors.dmi';
- icon_state = "titanium_blue_old";
- name = "bathroom floor"
- },
+/turf/open/indestructible/bathroom,
/area/centcom/holding/cafe)
"qWv" = (
/obj/effect/turf_decal/tile/blue{
@@ -14589,12 +14488,7 @@
},
/obj/structure/bed/double,
/obj/item/bedsheet/dorms_double,
-/turf/open/indestructible/hotelwood{
- desc = "It's really cozy! Great for soft paws!";
- icon = 'modular_skyrat/modules/ghostcafe/icons/carpet_royalblack.dmi';
- icon_state = "carpet";
- name = "soft carpet"
- },
+/turf/open/indestructible/carpet,
/area/centcom/holding/cafepark)
"ssn" = (
/obj/machinery/status_display/shuttle{
@@ -14665,11 +14559,7 @@
"sys" = (
/obj/machinery/shower/directional/west,
/obj/structure/sink/directional/south,
-/turf/open/indestructible/hoteltile{
- icon = 'modular_skyrat/modules/ghostcafe/icons/floors.dmi';
- icon_state = "titanium_blue_old";
- name = "bathroom floor"
- },
+/turf/open/indestructible/bathroom,
/area/centcom/holding/cafe)
"sAC" = (
/obj/effect/turf_decal/box,
@@ -15164,11 +15054,7 @@
/turf/open/floor/fakebasalt,
/area/centcom/holding/cafepark)
"tky" = (
-/turf/open/indestructible/hoteltile{
- icon = 'modular_skyrat/modules/ghostcafe/icons/floors.dmi';
- icon_state = "titanium_blue_old";
- name = "bathroom floor"
- },
+/turf/open/indestructible/bathroom,
/area/centcom/holding/cafe)
"tlu" = (
/obj/effect/turf_decal/siding/wood{
@@ -16262,11 +16148,7 @@
/obj/structure/mirror{
pixel_y = 32
},
-/turf/open/indestructible/hoteltile{
- icon = 'modular_skyrat/modules/ghostcafe/icons/floors.dmi';
- icon_state = "titanium_blue_old";
- name = "bathroom floor"
- },
+/turf/open/indestructible/bathroom,
/area/centcom/holding/cafedorms)
"vui" = (
/obj/effect/turf_decal/siding/wood{
@@ -16589,12 +16471,7 @@
/obj/structure/chair/sofa/corp/left{
dir = 4
},
-/turf/open/indestructible/hotelwood{
- desc = "It's really cozy! Great for soft paws!";
- icon = 'modular_skyrat/modules/ghostcafe/icons/carpet_royalblack.dmi';
- icon_state = "carpet";
- name = "soft carpet"
- },
+/turf/open/indestructible/carpet,
/area/centcom/holding/cafepark)
"vZv" = (
/obj/structure/window/reinforced/spawner/directional/south,
@@ -16896,11 +16773,7 @@
/area/centcom/holding/cafepark)
"wBX" = (
/obj/structure/sink/directional/south,
-/turf/open/indestructible/hoteltile{
- icon = 'modular_skyrat/modules/ghostcafe/icons/floors.dmi';
- icon_state = "titanium_blue_old";
- name = "bathroom floor"
- },
+/turf/open/indestructible/bathroom,
/area/centcom/holding/cafedorms)
"wCl" = (
/obj/item/kirbyplants/random,
@@ -17241,7 +17114,7 @@
light_power = 10;
name = "Super Light"
},
-/turf/open/floor/carpet/royalblack,
+/turf/open/indestructible/carpet,
/area/centcom/holding/cafe)
"xgz" = (
/obj/effect/turf_decal/siding/wood{
@@ -17634,12 +17507,7 @@
/obj/structure/sign/painting/library_secure{
pixel_y = -32
},
-/turf/open/indestructible/hotelwood{
- desc = "It's really cozy! Great for soft paws!";
- icon = 'modular_skyrat/modules/ghostcafe/icons/carpet_royalblack.dmi';
- icon_state = "carpet";
- name = "soft carpet"
- },
+/turf/open/indestructible/carpet,
/area/centcom/holding/cafe)
"xRx" = (
/obj/item/stack/sheet/mineral/wood/fifty,
@@ -56583,9 +56451,9 @@ aFP
ayI
ayI
dWE
-amF
-amF
-amF
+aPx
+aPx
+aPx
axD
tky
aqf
@@ -56841,7 +56709,7 @@ ayI
ayI
aqf
paJ
-amF
+aPx
cGX
aqf
qWc
@@ -63522,7 +63390,7 @@ dyU
bQR
paj
fPs
-amF
+aPx
aqf
aFP
ayI
@@ -63778,8 +63646,8 @@ aPZ
dDF
jYf
xga
-amF
-amF
+aPx
+aPx
aqf
aFP
ayI
@@ -64035,8 +63903,8 @@ aqf
bZt
qPy
clF
-amF
-amF
+aPx
+aPx
ahP
aFP
ayI
@@ -64291,9 +64159,9 @@ jeI
aqf
aqf
aqf
-amF
-amF
-amF
+aPx
+aPx
+aPx
aqf
kWr
ayI
@@ -64548,9 +64416,9 @@ jeI
aqf
dbn
axD
-amF
-amF
-amF
+aPx
+aPx
+aPx
aqf
lwv
lwv
@@ -64805,7 +64673,7 @@ jeI
aqf
sys
aqf
-amF
+aPx
ioZ
aqw
aqf
diff --git a/_maps/skyrat/automapper/automapper_config.toml b/_maps/skyrat/automapper/automapper_config.toml
index 021bfe8c3c6..93d018bd5da 100644
--- a/_maps/skyrat/automapper/automapper_config.toml
+++ b/_maps/skyrat/automapper/automapper_config.toml
@@ -352,14 +352,6 @@ required_map = "north_star.dmm"
coordinates = [121, 109, 4]
trait_name = "Station"
-# Northstar Prison
-[templates.northstar_prison]
-map_files = ["northstar_prison.dmm"]
-directory = "_maps/skyrat/automapper/templates/northstar/"
-required_map = "north_star.dmm"
-coordinates = [149, 109, 4]
-trait_name = "Station"
-
# Northstar NTR Office
[templates.northstar_ntrep_office]
map_files = ["northstar_ntrep_office.dmm"]
diff --git a/_maps/skyrat/automapper/templates/northstar/northstar_prison.dmm b/_maps/skyrat/automapper/templates/northstar/northstar_prison.dmm
deleted file mode 100644
index 403bebf29b0..00000000000
--- a/_maps/skyrat/automapper/templates/northstar/northstar_prison.dmm
+++ /dev/null
@@ -1,23 +0,0 @@
-//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
-"a" = (
-/obj/machinery/cryopod/prison/directional/west{
- quiet = 1
- },
-/turf/template_noop,
-/area/template_noop)
-"r" = (
-/obj/machinery/cryopod/prison/directional/north,
-/turf/template_noop,
-/area/template_noop)
-"P" = (
-/turf/template_noop,
-/area/template_noop)
-
-(1,1,1) = {"
-r
-P
-P
-P
-P
-a
-"}
diff --git a/code/__DEFINES/~skyrat_defines/combat.dm b/code/__DEFINES/~skyrat_defines/combat.dm
index 931b841f907..f4df7eead15 100644
--- a/code/__DEFINES/~skyrat_defines/combat.dm
+++ b/code/__DEFINES/~skyrat_defines/combat.dm
@@ -26,6 +26,7 @@
// Damage modifiers
#define OVERSIZED_HARM_DAMAGE_BONUS 5 /// Those with the oversized trait do 5 more damage.
+#define OVERSIZED_KICK_EFFECTIVENESS_BONUS 5 /// Increased unarmed_effectiveness/stun threshold on oversized kicks.
#define FILTER_STAMINACRIT filter(type="drop_shadow", x=0, y=0, size=-3, color="#04080F")
diff --git a/code/controllers/subsystem/processing/quirks.dm b/code/controllers/subsystem/processing/quirks.dm
index d4c785cc212..e9cfe0e4652 100644
--- a/code/controllers/subsystem/processing/quirks.dm
+++ b/code/controllers/subsystem/processing/quirks.dm
@@ -32,6 +32,9 @@ GLOBAL_LIST_INIT_TYPED(quirk_blacklist, /list/datum/quirk, list(
list(/datum/quirk/spacer_born, /datum/quirk/oversized),
list(/datum/quirk/feline_aspect, /datum/quirk/item_quirk/canine, /datum/quirk/item_quirk/avian),
list(/datum/quirk/all_nighter, /datum/quirk/heavy_sleeper),
+ list(/datum/quirk/light_drinker, /datum/quirk/drunkhealing),
+ list(/datum/quirk/oversized, /datum/quirk/freerunning),
+ list(/datum/quirk/oversized, /datum/quirk/item_quirk/settler),
//SKYRAT EDIT ADDITION END
))
diff --git a/code/datums/components/crafting/entertainment.dm b/code/datums/components/crafting/entertainment.dm
index d01ffbc00dc..8b2bfa40731 100644
--- a/code/datums/components/crafting/entertainment.dm
+++ b/code/datums/components/crafting/entertainment.dm
@@ -205,3 +205,12 @@
/obj/item/stack/cable_coil = 2,
)
category = CAT_EQUIPMENT
+
+/datum/crafting_recipe/bonedice
+ name = "Bone Die"
+ result = /obj/item/dice/d6/bone
+ time = 5 SECONDS
+ reqs = list(
+ /obj/item/stack/sheet/bone = 1,
+ )
+ category = CAT_EQUIPMENT
diff --git a/code/datums/quirks/negative_quirks/claustrophobia.dm b/code/datums/quirks/negative_quirks/claustrophobia.dm
index 226c9b65ef8..bafdcd656ff 100644
--- a/code/datums/quirks/negative_quirks/claustrophobia.dm
+++ b/code/datums/quirks/negative_quirks/claustrophobia.dm
@@ -1,6 +1,6 @@
/datum/quirk/claustrophobia
name = "Claustrophobia"
- desc = "You are terrified of small spaces and certain jolly figures. If you are placed inside any container, locker, or machinery, a panic attack sets in and you struggle to breathe."
+ desc = "You are terrified of small spaces. If you are placed inside any container, locker, or machinery, a panic attack sets in and you struggle to breathe." // SKYRAT EDIT CHANGE - ORIGINAL: desc = "You are terrified of small spaces and certain jolly figures. If you are placed inside any container, locker, or machinery, a panic attack sets in and you struggle to breathe."
icon = FA_ICON_BOX_OPEN
value = -4
medical_record_text = "Patient demonstrates a fear of tight spaces."
@@ -20,10 +20,12 @@
var/nick_spotted = FALSE
+/* SKYRAT EDIT REMOVAL START
for(var/mob/living/carbon/human/possible_claus in view(5, quirk_holder))
if(evaluate_jolly_levels(possible_claus))
nick_spotted = TRUE
break
+SKYRAT EDIT REMOVAL END */
if(!nick_spotted && isturf(quirk_holder.loc))
quirk_holder.clear_mood_event("claustrophobia")
diff --git a/code/game/objects/items/dice.dm b/code/game/objects/items/dice.dm
index 4e63fc00c43..8fe83e2e380 100644
--- a/code/game/objects/items/dice.dm
+++ b/code/game/objects/items/dice.dm
@@ -107,6 +107,12 @@
icon_state = "de6"
microwave_riggable = FALSE // You can't melt wood in the microwave
+/obj/item/dice/d6/bone
+ name = "bone die"
+ desc = "A die carved from a creature's bone. Dried blood marks the indented pits."
+ icon_state = "db6"
+ microwave_riggable = FALSE // You can't melt bone in the microwave
+
/obj/item/dice/d6/space
name = "space cube"
desc = "A die with six sides. 6 TIMES 255 TIMES 255 TILE TOTAL EXISTENCE, SQUARE YOUR MIND OF EDUCATED STUPID: 2 DOES NOT EXIST."
diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm
index 309d23aac9f..947f56be97f 100644
--- a/code/game/objects/items/stacks/sheets/sheet_types.dm
+++ b/code/game/objects/items/stacks/sheets/sheet_types.dm
@@ -769,7 +769,8 @@ GLOBAL_LIST_INIT(bronze_recipes, list ( \
// Sinew slapcrafting will mostly-sinew recipes, and bones will have mostly-bones recipes.
var/static/list/slapcraft_recipe_list = list(\
/datum/crafting_recipe/bonedagger, /datum/crafting_recipe/bonespear, /datum/crafting_recipe/boneaxe,\
- /datum/crafting_recipe/bonearmor, /datum/crafting_recipe/skullhelm, /datum/crafting_recipe/bracers
+ /datum/crafting_recipe/bonearmor, /datum/crafting_recipe/skullhelm, /datum/crafting_recipe/bracers,
+ /datum/crafting_recipe/ash_recipe/bone_greaves,
)
AddComponent(
diff --git a/code/modules/client/preferences/language.dm b/code/modules/client/preferences/language.dm
index f602d6b3a66..8d4c7917630 100644
--- a/code/modules/client/preferences/language.dm
+++ b/code/modules/client/preferences/language.dm
@@ -20,6 +20,7 @@
//we add uncommon as it's foreigner-only.
var/datum/language/uncommon/uncommon_language = /datum/language/uncommon
values += initial(uncommon_language.name)
+ values += /datum/language/common::name // SKYRAT EDIT ADDITION START - Let's you select common
for(var/datum/language/language_type as anything in GLOB.uncommon_roundstart_languages)
if(initial(language_type.name) in values)
diff --git a/code/modules/mob/living/carbon/alien/adult/alien_powers.dm b/code/modules/mob/living/carbon/alien/adult/alien_powers.dm
index e686c920b58..e9c5199cf3f 100644
--- a/code/modules/mob/living/carbon/alien/adult/alien_powers.dm
+++ b/code/modules/mob/living/carbon/alien/adult/alien_powers.dm
@@ -339,7 +339,11 @@ Doesn't work on other aliens/AI.*/
span_notice("[owner] vomits up a thick purple substance and begins to shape it."),
span_notice("You shape a [choice] out of resin."),
)
-
+ //SKYRAT EDIT START - Roundstart xenohybrid organs
+ if(build_duration && !do_after(owner, build_duration))
+ owner.balloon_alert(owner, "interrupted!")
+ return
+ //SKYRAT EDIT END
new choice_path(owner.loc)
return TRUE
diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm
index a012537dfd7..879a257863c 100644
--- a/code/modules/mob/living/carbon/human/human_defense.dm
+++ b/code/modules/mob/living/carbon/human/human_defense.dm
@@ -392,14 +392,6 @@
//Don't go further if the shock was blocked/too weak.
if(!.)
return
- //SKYRAT EDIT BEGIN: MAKES POWERFUL SHOCKS HAVE A CHANCE TO STOP YOUR HEART. DANGER
- if(can_heartattack() && !(flags & SHOCK_ILLUSION) && shock_damage >= 70)
- if(shock_damage * siemens_coeff >= 1 && prob(30))//Higher chance to disrupt the pacemaker cells
- var/obj/item/organ/internal/heart/heart = get_organ_slot(ORGAN_SLOT_HEART)
- heart.Stop()
- visible_message("[src.name] briefly twitches; before falling limp - their breathing irratic and chest spasming violently!", \
- "You feel your heart thump eratically; before ceasing to beat, a violent twitch overcoming your form!", ignored_mobs=src)
- //SKYRAT EDIT END
if(!(flags & SHOCK_ILLUSION))
if(shock_damage * siemens_coeff >= 5)
force_say()
diff --git a/code/modules/mob/living/living_say.dm b/code/modules/mob/living/living_say.dm
index b252e94c214..660e818251a 100644
--- a/code/modules/mob/living/living_say.dm
+++ b/code/modules/mob/living/living_say.dm
@@ -222,6 +222,10 @@ GLOBAL_LIST_INIT(message_modes_stat_limits, list(
//Get which verb is prefixed to the message before radio but after most modifications
message_mods[SAY_MOD_VERB] = say_mod(message, message_mods)
+ // SKYRAT EDIT ADDITION START: autopunctuation
+ //ensure EOL punctuation exists and that word-bounded 'i' are capitalized before we do anything else
+ message = autopunct_bare(message)
+ // SKYRAT EDIT ADDITION END
//This is before anything that sends say a radio message, and after all important message type modifications, so you can scumb in alien chat or something
if(saymode && !saymode.handle_message(src, message, language))
return
diff --git a/code/modules/shuttle/emergency.dm b/code/modules/shuttle/emergency.dm
index f9c445e3fa7..ff2da672213 100644
--- a/code/modules/shuttle/emergency.dm
+++ b/code/modules/shuttle/emergency.dm
@@ -553,7 +553,6 @@
color_override = "orange",
)
INVOKE_ASYNC(SSticker, TYPE_PROC_REF(/datum/controller/subsystem/ticker, poll_hearts))
- bolt_all_doors() //SKYRAT EDIT ADDITION
SSmapping.mapvote() //If no map vote has been run yet, start one.
if(!is_reserved_level(z))
diff --git a/code/modules/unit_tests/say.dm b/code/modules/unit_tests/say.dm
index ec58dcedc88..6fde4de9dbc 100644
--- a/code/modules/unit_tests/say.dm
+++ b/code/modules/unit_tests/say.dm
@@ -160,7 +160,7 @@
speaker.forceMove(run_loc_floor_bottom_left)
listener.forceMove(locate((run_loc_floor_bottom_left.x + distance), run_loc_floor_bottom_left.y, run_loc_floor_bottom_left.z))
- var/pangram_quote = "The quick brown fox jumps over the lazy dog"
+ var/pangram_quote = "The quick brown fox jumps over the lazy dog." // SKYRAT EDIT CHANGE - account for autopunct in living_say.dm - ORIGINAL: var/pangram_quote = "The quick brown fox jumps over the lazy dog"
// speaking
speaker.say(pangram_quote)
@@ -201,7 +201,7 @@
listener_radio.set_frequency(FREQ_CENTCOM)
listener_radio.independent = TRUE
- var/pangram_quote = "The quick brown fox jumps over the lazy dog"
+ var/pangram_quote = "The quick brown fox jumps over the lazy dog." // SKYRAT EDIT CHANGE - account for autopunct in living_say.dm - ORIGINAL: var/pangram_quote = "The quick brown fox jumps over the lazy dog"
speaker.say(pangram_quote)
TEST_ASSERT(handle_speech_result, "Handle speech signal was not fired (radio test)")
diff --git a/icons/obj/toys/dice.dmi b/icons/obj/toys/dice.dmi
index 26cf08af5b9..d41e503242d 100644
Binary files a/icons/obj/toys/dice.dmi and b/icons/obj/toys/dice.dmi differ
diff --git a/modular_skyrat/master_files/code/_globalvars/regexes.dm b/modular_skyrat/master_files/code/_globalvars/regexes.dm
new file mode 100644
index 00000000000..5d8db27c6b7
--- /dev/null
+++ b/modular_skyrat/master_files/code/_globalvars/regexes.dm
@@ -0,0 +1,5 @@
+//Any EOL char that isn't appropriate punctuation
+GLOBAL_DATUM_INIT(has_no_eol_punctuation, /regex, regex(@"\w$"))
+
+//All non-capitalized 'i' surrounded with whitespace (aka, 'hello >i< am a cat')
+GLOBAL_DATUM_INIT(noncapital_i, /regex, regex(@"\b[i]\b", "g"))
diff --git a/modular_skyrat/master_files/code/_globalvars/text.dm b/modular_skyrat/master_files/code/_globalvars/text.dm
new file mode 100644
index 00000000000..a7c8efec5f4
--- /dev/null
+++ b/modular_skyrat/master_files/code/_globalvars/text.dm
@@ -0,0 +1,8 @@
+/// Ensures sentences end in appropriate punctuation (a period if none exist)
+/// and that all whitespace-bounded 'i' characters are capitalized.
+/proc/autopunct_bare(input_text)
+ if (findtext(input_text, GLOB.has_no_eol_punctuation))
+ input_text += "."
+
+ input_text = replacetext(input_text, GLOB.noncapital_i, "I")
+ return input_text
diff --git a/modular_skyrat/master_files/code/datums/votes/map_vote.dm b/modular_skyrat/master_files/code/datums/votes/map_vote.dm
new file mode 100644
index 00000000000..10dea54b2fd
--- /dev/null
+++ b/modular_skyrat/master_files/code/datums/votes/map_vote.dm
@@ -0,0 +1,3 @@
+//Map votes shouldn't be using weighted random
+/datum/vote/map_vote
+ winner_method = VOTE_WINNER_METHOD_SIMPLE
diff --git a/modular_skyrat/master_files/icons/misc/language.dmi b/modular_skyrat/master_files/icons/misc/language.dmi
index 94a32635b48..1e287eca020 100644
Binary files a/modular_skyrat/master_files/icons/misc/language.dmi and b/modular_skyrat/master_files/icons/misc/language.dmi differ
diff --git a/modular_skyrat/modules/ashwalkers/code/clothing/ash_armour.dm b/modular_skyrat/modules/ashwalkers/code/clothing/ash_armour.dm
index 84b7b9b9170..0d2b66232c6 100644
--- a/modular_skyrat/modules/ashwalkers/code/clothing/ash_armour.dm
+++ b/modular_skyrat/modules/ashwalkers/code/clothing/ash_armour.dm
@@ -15,6 +15,22 @@
bomb = 20
bio = 10
+/datum/armor/ash_plates
+ melee = 15
+ bullet = 25
+ laser = 15
+ energy = 15
+ bomb = 20
+ bio = 10
+
+/datum/armor/bone_greaves
+ melee = 15
+ bullet = 25
+ laser = 15
+ energy = 15
+ bomb = 20
+ bio = 50
+
/obj/item/clothing/head/ash_headdress
name = "ash headdress"
desc = "A headdress that shows the dominance of the walkers of ash."
@@ -102,3 +118,22 @@
name = "Decorated Ash Combat Plates"
result = /obj/item/clothing/under/costume/gladiator/ash_walker/ash_plates/decorated
category = CAT_CLOTHING
+
+/obj/item/clothing/shoes/bone_greaves
+ name = "bone greaves"
+ desc = "For when you're expecting to step on spiky things. Offers modest protection to your feet."
+ icon = 'modular_skyrat/modules/ashwalkers/icons/shoes.dmi'
+ worn_icon = 'modular_skyrat/modules/ashwalkers/icons/feet.dmi'
+ worn_icon_digi = 'modular_skyrat/modules/ashwalkers/icons/feet_digi.dmi'
+ icon_state = "bone_greaves"
+ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION
+ armor_type = /datum/armor/bone_greaves
+
+/datum/crafting_recipe/ash_recipe/bone_greaves
+ name = "Bone Greaves"
+ result = /obj/item/clothing/shoes/bone_greaves
+ reqs = list(
+ /obj/item/stack/sheet/bone = 2,
+ /obj/item/stack/sheet/sinew = 1,
+ )
+ category = CAT_CLOTHING
diff --git a/modular_skyrat/modules/ashwalkers/icons/feet.dmi b/modular_skyrat/modules/ashwalkers/icons/feet.dmi
index b4ba22e6b55..d743be0a0fc 100644
Binary files a/modular_skyrat/modules/ashwalkers/icons/feet.dmi and b/modular_skyrat/modules/ashwalkers/icons/feet.dmi differ
diff --git a/modular_skyrat/modules/ashwalkers/icons/feet_digi.dmi b/modular_skyrat/modules/ashwalkers/icons/feet_digi.dmi
index 89e772d083c..39f6aae9cff 100644
Binary files a/modular_skyrat/modules/ashwalkers/icons/feet_digi.dmi and b/modular_skyrat/modules/ashwalkers/icons/feet_digi.dmi differ
diff --git a/modular_skyrat/modules/ashwalkers/icons/shoes.dmi b/modular_skyrat/modules/ashwalkers/icons/shoes.dmi
index 8125bc37ff3..e69db1f1b30 100644
Binary files a/modular_skyrat/modules/ashwalkers/icons/shoes.dmi and b/modular_skyrat/modules/ashwalkers/icons/shoes.dmi differ
diff --git a/modular_skyrat/modules/automapper/code/area_spawn_entries.dm b/modular_skyrat/modules/automapper/code/area_spawn_entries.dm
index 98679dca26f..1232cd60218 100644
--- a/modular_skyrat/modules/automapper/code/area_spawn_entries.dm
+++ b/modular_skyrat/modules/automapper/code/area_spawn_entries.dm
@@ -102,11 +102,6 @@
desired_atom = /obj/effect/landmark/start/customs_agent
target_areas = list(/area/station/security/checkpoint/supply, /area/station/cargo/storage)
-/datum/area_spawn_over/prison_curtains
- desired_atom = /obj/structure/curtain/cloth/prison
- over_atoms = list(/obj/structure/window/reinforced/fulltile, /obj/machinery/door/airlock/security/glass, /obj/machinery/door/airlock/public/glass)
- target_areas = list(/area/station/security/prison/safe)
-
/datum/area_spawn/corrections_officer_landmark
desired_atom = /obj/effect/landmark/start/corrections_officer
target_areas = list(/area/station/security/brig, /area/station/security/prison/)
diff --git a/modular_skyrat/modules/customization/modules/clothing/accessories.dm b/modular_skyrat/modules/customization/modules/clothing/accessories.dm
index 53223af7956..ae078ea7ebb 100644
--- a/modular_skyrat/modules/customization/modules/clothing/accessories.dm
+++ b/modular_skyrat/modules/customization/modules/clothing/accessories.dm
@@ -6,3 +6,27 @@
/obj/item/clothing/accessory/skilt/armourless
armor_type = /datum/armor/none
+
+/obj/item/clothing/accessory/armband/cargo/nonsec
+ name = "brown armband"
+ desc = "An armband, worn to signify proficiency in a skill or association with a department. This one is brown."
+
+/obj/item/clothing/accessory/armband/engine/nonsec
+ name = "orange armband"
+ desc = "An armband, worn to signify proficiency in a skill or association with a department. This one is orange with a reflective strip!"
+
+/obj/item/clothing/accessory/armband/science/nonsec
+ name = "purple armband"
+ desc = "An armband, worn to signify proficiency in a skill or association with a department. This one is purple."
+
+/obj/item/clothing/accessory/armband/hydro/nonsec
+ name = "green-blue armband"
+ desc = "An armband, worn to signify proficiency in a skill or association with a department. This one is green and blue."
+
+/obj/item/clothing/accessory/armband/med/nonsec
+ name = "white armband"
+ desc = "An armband, worn to signify proficiency in a skill or association with a department. This one is white."
+
+/obj/item/clothing/accessory/armband/medblue/nonsec
+ name = "white-blue armband"
+ desc = "An armband, worn to signify proficiency in a skill or association with a department. This one is white and blue."
diff --git a/modular_skyrat/modules/customization/modules/clothing/head/head.dm b/modular_skyrat/modules/customization/modules/clothing/head/head.dm
index d05828cd095..f8ad4b1573e 100644
--- a/modular_skyrat/modules/customization/modules/clothing/head/head.dm
+++ b/modular_skyrat/modules/customization/modules/clothing/head/head.dm
@@ -24,13 +24,22 @@
//Cyberpunk PI Costume - Sprites from Eris
/obj/item/clothing/head/fedora/det_hat/cybergoggles //Subset of detective fedora so that detectives dont have to sacrifice candycorns for style
- name = "type-34C semi-enclosed headwear"
- desc = "Civilian model of a popular helmet used by certain law enforcement agencies. It does not have any armor plating, but has a neo-laminated fiber lining."
+ name = "type-34P semi-enclosed headwear"
+ desc = "A popular helmet used by certain law enforcement agencies. It has minor armor plating and a neo-laminated fiber lining."
icon = 'modular_skyrat/master_files/icons/obj/clothing/hats.dmi'
worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi'
icon_state = "cyberpunkgoggle"
supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON
+/obj/item/clothing/head/fedora/det_hat/cybergoggles/civilian //Actually civilian with no armor for drip purposes only
+ name = "type-34C semi-enclosed headwear"
+ desc = "The civilian model of a popular helmet used by certain law enforcement agencies. It has no armor plating."
+ icon = 'modular_skyrat/master_files/icons/obj/clothing/hats.dmi'
+ worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi'
+ icon_state = "cyberpunkgoggle"
+ armor_type = /datum/armor/none
+ supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON
+
/obj/item/clothing/head/hats/intern/developer
name = "intern beancap"
diff --git a/modular_skyrat/modules/customization/modules/jobs/_job.dm b/modular_skyrat/modules/customization/modules/jobs/_job.dm
index 74d5e479691..57b01c8c420 100644
--- a/modular_skyrat/modules/customization/modules/jobs/_job.dm
+++ b/modular_skyrat/modules/customization/modules/jobs/_job.dm
@@ -161,9 +161,14 @@
/datum/job/proc/has_required_languages(datum/preferences/pref)
if(!required_languages)
return TRUE
- for(var/lang in required_languages)
+ // if we have a bilingual quirk, check that as well
+ var/bilingual_pref
+ if(/datum/quirk/bilingual::name in pref.all_quirks)
+ bilingual_pref = pref.read_preference(/datum/preference/choiced/language)
+
+ for(var/datum/language/lang as anything in required_languages)
//Doesnt have language, or the required "level" is too low (understood, while needing spoken)
- if(!pref.languages[lang] || pref.languages[lang] < required_languages[lang])
+ if((!pref.languages[lang] || pref.languages[lang] < required_languages[lang]) && bilingual_pref != lang.name) // SKYRAT EDIT - check the bilingual quirk
return FALSE
return TRUE
diff --git a/modular_skyrat/modules/customization/modules/language/_language_holder.dm b/modular_skyrat/modules/customization/modules/language/_language_holder.dm
index 0904187a9ae..149901e5852 100644
--- a/modular_skyrat/modules/customization/modules/language/_language_holder.dm
+++ b/modular_skyrat/modules/customization/modules/language/_language_holder.dm
@@ -90,4 +90,3 @@
/datum/language/common = list(LANGUAGE_ATOM),
/datum/language/canilunzt = list(LANGUAGE_ATOM)
)
-
diff --git a/modular_skyrat/modules/customization/modules/language/chitinclick.dm b/modular_skyrat/modules/customization/modules/language/chitinclick.dm
index 3f16fe93195..c8eba66ba8c 100644
--- a/modular_skyrat/modules/customization/modules/language/chitinclick.dm
+++ b/modular_skyrat/modules/customization/modules/language/chitinclick.dm
@@ -1,14 +1,21 @@
-/datum/language/moffic
- name = "Chitin-Click"
- desc = "A popular non-Human language that finds extensive use by various types of anthropomorphic invertebrates the likes of Mothpeople and other types of insects. It consists of complex flutters, chittering, antenna movements, and sparse guttural syllables. In modern Sol standard writing, some of its sounds have been compared to Ancient Swedish (Dating back to the Human 19th century)."
+/datum/language/chitinclick
+ name = "Chitinclick"
+ desc = "A popular non-Human language that finds extensive use by various types of anthropomorphic invertebrates. It consists of complex flutters, chittering, antenna movements, and sparse guttural syllables."
key = "C"
- space_chance = 30
+ space_chance = 40
//References some replaced languages.
syllables = list(
// Original
- "chi", "cha", "at", "mo", "kli", "ac", "f", "cli", "fz", "fs",
+ "a", "ak", "ae", "ai", "az", "ba", "bz", "bu", "bh", "br", "bi",
+ "c", "ca", "ci", "ch", "chk", "cr", "cl", "ce", "cu", "cli", "cla",
+ "du", "dr", "dri", "de", "do", "dza", "dk", "g", "ga", "gr", "dz",
+ "gi", "gchk", "i", "ii", "ik", "it", "il", "ie", "iz", "ir", "io",
+ "pi", "pz", "pe", "po", "phk", "k", "kz", "kl", "ka", "kli", "kh",
+ "kch", "vh", "vr", "vz", "veh", "mr", "mz", "mi", "ma", "mhk", "zz",
+ "ze", "zu", "zo", "za", "nz", "zi", "fz", "fr", "f", "fi", "click",
+ "chit", "rr", "ru", "ra", "rzz", "ri", "re",
// Buzzwords
"zz", "buzz", "ZZ",
- // Moffic
- "ø", "öh", "ää", "år", "käyt", "dår", "ån", "næ", "møt", "om", "när",
)
+ icon_state = "chitinclick"
+ icon = 'modular_skyrat/master_files/icons/misc/language.dmi'
diff --git a/modular_skyrat/modules/customization/modules/language/mothic.dm b/modular_skyrat/modules/customization/modules/language/mothic.dm
new file mode 100644
index 00000000000..de863abae3b
--- /dev/null
+++ b/modular_skyrat/modules/customization/modules/language/mothic.dm
@@ -0,0 +1,20 @@
+/datum/language/moffic
+ name = "Mothic"
+ desc = "Spoken colloquially by the Mothfolk of Va Lumla, the early iteration of Mothic emerged when Fueljacks relied on their receptors for simple, one-worded pheromones to communicate, and navigate the often fatal maintenance tunnels sprawled throughout the fleet. \
+ The moths developed gesticulation through antennas and wings to convey deeper intent, with mandibles providing emotional context through clicks and trills. \
+ After First Contact, human speakers managed to achieve a similar effect from clicking their tongue to roof, and steer the tone with the width of their mouth while using their hands in place of antennas. \
+ It is informally spoken, deploying many slangs and shorthands from Common. Has phonetic resemblance to Italian."
+ space_chance = 40
+ // Syllables derived from Italian.
+ syllables = list(
+ "a", "an", "ar", "ave", "avo", "are", "ale", "be", "buo", "ca", "cie", "cr",
+ "ch", "che", "co", "cco", "ce", "cu", "ci", "ccia", "ccio", "da", "di", "do",
+ "e", "é", "ere", "ette", "fa", "fu", "fo", "gi", "gio", "gn", "go", "gu", "ni",
+ "gri", "ia", "iei", "ile", "imo", "l", "la", "lla", "le", "li", "lia", "lio",
+ "lo", "lu", "me", "mi", "mo", "mos", "na", "ne", "no", "nuo", "o", "ò", "oi",
+ "or", "os", "otto", "qua", "que", "qui", "pi", "po", "rò", "sa", "se", "si",
+ "sto", "ua", "ue", "ui", "un", "ta", "tra", "te", "tri", "tre", "tro", "to",
+ "ti", "va", "vi", "ve", "vo", "veni", "ver", "tu", "dru", "bi", "en", "je",
+ "dici", "tru", "zo", "ze", "ul", "bo", "ba", "gh", "ino", "etta", "i", "in",
+ "chh", "rio", "ie", "bar", "bas", "die", "ter", "pa", "pe", "pu", "fe", "fi",
+ )
diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/corrupted_tongue.dm b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/corrupted_tongue.dm
index 4a1a5e1aa41..53d99426d0e 100644
--- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/corrupted_tongue.dm
+++ b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/corrupted_tongue.dm
@@ -1,8 +1,7 @@
/// Maximum an Hemophage will drain, they will drain less if they hit their cap.
#define HEMOPHAGE_DRAIN_AMOUNT 50
/// The multiplier for blood received by Hemophages out of humans with ckeys.
-#define BLOOD_DRAIN_MULTIPLIER_CKEY 1.5
-
+#define BLOOD_DRAIN_MULTIPLIER_CKEY 1.15
/datum/component/organ_corruption/tongue
corruptable_organ_type = /obj/item/organ/internal/tongue
@@ -102,11 +101,20 @@
// We start by checking that the victim is a human and they have a client, so we can give them the
// beneficial status effect for drinking higher-quality blood.
var/is_target_human_with_client = istype(victim, /mob/living/carbon/human) && victim.client
+ var/horrible_feeding = FALSE
if(ismonkey(victim))
is_target_human_with_client = FALSE // Sorry, not going to get the status effect from monkeys, even if they have a client in them.
-
+ hemophage.add_mood_event("gross_food", /datum/mood_event/disgust/hemophage_feed_monkey) // drinking from a monkey is inherently gross, like, REALLY gross
+ hemophage.adjust_disgust(DISGUST_LEVEL_GROSS + 15, DISGUST_LEVEL_MAXEDOUT)
blood_volume_difference = BLOOD_VOLUME_NORMAL - hemophage.blood_volume
+ horrible_feeding = TRUE
+
+ if(istype(victim, /mob/living/carbon/human/species/monkey))
+ is_target_human_with_client = FALSE // yep you're still not getting the status effect from humonkeys either. your tumour knows.
+ hemophage.add_mood_event("gross_food", /datum/mood_event/disgust/hemophage_feed_humonkey)
+ hemophage.adjust_disgust(DISGUST_LEVEL_GROSS / 4, DISGUST_LEVEL_GROSS) // it's still gross but nowhere near as bad, though.
+ horrible_feeding = TRUE
StartCooldown()
@@ -129,18 +137,36 @@
log_combat(hemophage, victim, "drained [drained_blood]u of blood from", addition = " (NEW BLOOD VOLUME: [victim.blood_volume] cL)")
victim.show_message(span_danger("[hemophage] drains some of your blood!"))
- to_chat(hemophage, span_notice("You drink some blood from [victim]![is_target_human_with_client ? " That tasted particularly good!" : ""]"))
+
+ if(horrible_feeding)
+ if(istype(victim, /mob/living/carbon/human/species/monkey))
+ to_chat(hemophage, span_notice("You take tentative draws of blood from [victim], each mouthful awash with the taste of ozone and a strange artificial twinge."))
+ else
+ to_chat(hemophage, span_warning("You choke back tepid mouthfuls of foul blood from [victim]. The taste is absolutely vile."))
+ else
+ to_chat(hemophage, span_notice("You pull greedy gulps of precious lifeblood from [victim]'s veins![is_target_human_with_client ? " That tasted particularly good!" : ""]"))
playsound(hemophage, 'sound/items/drink.ogg', 30, TRUE, -2)
+ // just let the hemophage know they're capped out on blood if they're trying to go for an exsanguinate and wondering why it isn't working
+ if(drained_blood != HEMOPHAGE_DRAIN_AMOUNT && hemophage.blood_volume >= (BLOOD_VOLUME_MAXIMUM - HEMOPHAGE_DRAIN_AMOUNT))
+ to_chat(hemophage, span_boldnotice("Your thirst is temporarily slaked, and you can digest no more new blood for the moment."))
+
if(victim.blood_volume <= BLOOD_VOLUME_OKAY)
to_chat(hemophage, span_warning("That definitely left them looking pale..."))
+ to_chat(victim, span_warning("A groaning lethargy creeps into your muscles as you begin to feel slightly clammy...")) //let the victim know too
if(is_target_human_with_client)
hemophage.apply_status_effect(/datum/status_effect/blood_thirst_satiated)
+ hemophage.add_mood_event("drank_human_blood", /datum/mood_event/hemophage_feed_human) // absolutely scrumptious
+ hemophage.clear_mood_event("gross_food") // it's a real palate cleanser, you know
+ hemophage.disgust *= 0.85 //also clears a little bit of disgust too
- if(!victim.blood_volume || victim.blood_volume < BLOOD_VOLUME_SURVIVE)
- to_chat(hemophage, span_warning("You finish off [victim]'s blood supply."))
+ // for this to ever occur, the hemophage actually has to be decently hungry, otherwise they'll cap their own blood reserves and be unable to pull it off.
+ if(!victim.blood_volume || victim.blood_volume <= BLOOD_VOLUME_SURVIVE)
+ to_chat(hemophage, span_boldwarning("A final sputter of blood trickles from [victim]'s collapsing veins as your terrible hunger drains them almost completely dry."))
+ else if ((victim.blood_volume + HEMOPHAGE_DRAIN_AMOUNT) <= BLOOD_VOLUME_SURVIVE)
+ to_chat(hemophage, span_warning("A sense of hesitation gnaws: you know for certain that taking much more blood from [victim] WILL kill them. ...but another part of you sees only opportunity."))
#undef HEMOPHAGE_DRAIN_AMOUNT
diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_moods.dm b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_moods.dm
new file mode 100644
index 00000000000..51e637b348f
--- /dev/null
+++ b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_moods.dm
@@ -0,0 +1,19 @@
+/datum/mood_event/hemophage_feed_human
+ description = "I slaked my hunger on fresh, vital blood. That felt good!"
+ mood_change = 2
+ timeout = 5 MINUTES
+
+/datum/mood_event/disgust/hemophage_feed_monkey
+ description = "I had to feed off a gibbering monkey... what have I become?"
+ mood_change = -4
+ timeout = 5 MINUTES
+
+/datum/mood_event/disgust/hemophage_feed_humonkey
+ description = "Somehow I know deep down that humonkey blood is no substitute for the real thing..."
+ mood_change = -1
+ timeout = 5 MINUTES
+
+/datum/mood_event/disgust/hemophage_feed_synthesized_blood
+ description = "My last blood meal was artificial and tasted... wrong."
+ mood_change = -2
+ timeout = 5 MINUTES
diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_organs.dm b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_organs.dm
index 7a0e972f3d8..7a9cc37b6a0 100644
--- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_organs.dm
+++ b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_organs.dm
@@ -85,6 +85,10 @@
var/datum/reagent/blood/blood = reagents.has_reagent(/datum/reagent/blood)
if(blood)
blood.metabolization_rate = BLOOD_METABOLIZATION_RATE
+ var/blood_DNA = blood.data["blood_DNA"]
+ if (!blood_DNA) //does the blood we're digesting have any DNA? if it doesn't, it's artificial, and that's gross.
+ src.owner.adjust_disgust(DISGUST_LEVEL_GROSS / 16, DISGUST_LEVEL_VERYGROSS)
+ src.owner.add_mood_event("gross_food", /datum/mood_event/disgust/hemophage_feed_synthesized_blood)
return ..()
diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/xeno.dm b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/xeno.dm
index 4b2052bd083..8d783f08ccb 100644
--- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/xeno.dm
+++ b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/xeno.dm
@@ -2,7 +2,7 @@
// A cloning mistake, crossing human and xenomorph DNA
name = "Xenomorph Hybrid"
id = SPECIES_XENO
- family_heirlooms = list(/obj/item/toy/plush/rouny, /obj/item/toy/toy_xeno)
+ family_heirlooms = list(/obj/item/toy/plush/rouny, /obj/item/clothing/mask/facehugger/toy)
inherent_traits = list(
TRAIT_ADVANCEDTOOLUSER,
TRAIT_CAN_STRIP,
@@ -10,7 +10,17 @@
TRAIT_MUTANT_COLORS,
)
inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID
+ mutantbrain = /obj/item/organ/internal/brain/xeno_hybrid
mutanttongue = /obj/item/organ/internal/tongue/xeno_hybrid
+ mutantliver = /obj/item/organ/internal/liver/xeno_hybrid
+ mutantstomach = /obj/item/organ/internal/stomach/xeno_hybrid
+ mutant_organs = list(
+ /obj/item/organ/internal/alien/plasmavessel/roundstart,
+ /obj/item/organ/internal/alien/resinspinner/roundstart,
+ /obj/item/organ/internal/alien/hivenode,
+ )
+ exotic_blood = /datum/reagent/toxin/acid
+ heatmod = 2.5
mutant_bodyparts = list()
external_organs = list()
payday_modifier = 1.0
@@ -42,6 +52,25 @@
/datum/species/xeno/get_species_lore()
return list(placeholder_lore)
+/datum/species/xeno/create_pref_unique_perks()
+ var/list/to_add = list()
+
+ to_add += list(list(
+ SPECIES_PERK_TYPE = SPECIES_POSITIVE_PERK,
+ SPECIES_PERK_ICON = "biohazard",
+ SPECIES_PERK_NAME = "Xenomorphic Biology",
+ SPECIES_PERK_DESC = "Xeno-hybrids inherit organs from their primal ascendants."
+ ))
+
+ to_add += list(list(
+ SPECIES_PERK_TYPE = SPECIES_NEGATIVE_PERK,
+ SPECIES_PERK_ICON = "fire",
+ SPECIES_PERK_NAME = "High Temperature Weakness",
+ SPECIES_PERK_DESC = "A partial silicone structure and acid blood make the xeno-hybrid species extremely weak to heat."
+ ))
+
+ return to_add
+
/datum/species/xeno/prepare_human_for_preview(mob/living/carbon/human/xeno)
var/xeno_color = "#525288"
xeno.dna.features["mcolor"] = xeno_color
@@ -52,3 +81,60 @@
xeno.dna.mutant_bodyparts["xenohead"] = list(MUTANT_INDEX_NAME = "Standard", MUTANT_INDEX_COLOR_LIST = list(xeno_color, xeno_color, xeno_color))
regenerate_organs(xeno, src, visual_only = TRUE)
xeno.update_body(TRUE)
+
+///Xenomorph organs modified to suit roundstart styling
+#define BUILD_DURATION 0.5 SECONDS
+
+//Plasma vessel
+/obj/item/organ/internal/alien/plasmavessel/roundstart
+ stored_plasma = 55
+ max_plasma = 55
+ plasma_rate = 2
+ heal_rate = 0
+ actions_types = list(
+ /datum/action/cooldown/alien/make_structure/plant_weeds/roundstart,
+ /datum/action/cooldown/alien/transfer,
+ )
+
+/datum/action/cooldown/alien/make_structure/plant_weeds
+ var/build_duration = 0 SECONDS //regular aliens can build instantly
+
+/datum/action/cooldown/alien/make_structure/plant_weeds/roundstart
+ build_duration = BUILD_DURATION //hybrids are a bit slower
+
+/datum/action/cooldown/alien/make_structure/plant_weeds/Activate(atom/target)
+ if(build_duration && !do_after(owner, build_duration))
+ owner.balloon_alert(owner, "interrupted!")
+ return
+ return ..()
+
+//Resin spinner
+/obj/item/organ/internal/alien/resinspinner/roundstart
+ actions_types = list(/datum/action/cooldown/alien/make_structure/resin/roundstart)
+
+/datum/action/cooldown/alien/make_structure/resin
+ var/build_duration = 0 SECONDS
+
+/datum/action/cooldown/alien/make_structure/resin/roundstart
+ build_duration = BUILD_DURATION
+ //Non-modularly checked in `code\modules\mob\living\carbon\alien\adult\alien_powers.dm`
+
+//Organ resprites
+/obj/item/organ/internal/brain/xeno_hybrid
+ icon_state = "brain-x" //rebranding
+
+/obj/item/organ/internal/stomach/xeno_hybrid
+ icon_state = "stomach-x"
+
+/obj/item/organ/internal/liver/xeno_hybrid
+ icon_state = "liver-x"
+
+//Liver modification (xenohybrids can process plasma!)
+/obj/item/organ/internal/liver/xeno_hybrid/handle_chemical(mob/living/carbon/owner, datum/reagent/toxin/chem, seconds_per_tick, times_fired)
+ . = ..()
+ if(. & COMSIG_MOB_STOP_REAGENT_CHECK)
+ return
+ if(chem.type == /datum/reagent/toxin/plasma)
+ chem.toxpwr = 0
+
+#undef BUILD_DURATION
diff --git a/modular_skyrat/modules/ghostcafe/code/ghostcafeturf.dm b/modular_skyrat/modules/ghostcafe/code/ghostcafeturf.dm
index b879a8ec37b..a33f7c16859 100644
--- a/modular_skyrat/modules/ghostcafe/code/ghostcafeturf.dm
+++ b/modular_skyrat/modules/ghostcafe/code/ghostcafeturf.dm
@@ -13,3 +13,22 @@
name = "nitrogen-filled plating"
desc = "Vox box certified."
initial_gas_mix = "n2=104;TEMP=293.15"
+
+/turf/open/indestructible/bathroom
+ icon = 'modular_skyrat/modules/ghostcafe/icons/floors.dmi';
+ icon_state = "titanium_blue_old";
+ name = "bathroom floor"
+ footstep = FOOTSTEP_FLOOR
+ tiled_dirt = FALSE
+
+/turf/open/indestructible/carpet
+ desc = "It's really cozy! Great for soft paws!";
+ icon = 'modular_skyrat/modules/ghostcafe/icons/carpet_royalblack.dmi';
+ icon_state = "carpet";
+ name = "soft carpet"
+ bullet_bounce_sound = null
+ footstep = FOOTSTEP_CARPET
+ barefootstep = FOOTSTEP_CARPET_BAREFOOT
+ clawfootstep = FOOTSTEP_CARPET_BAREFOOT
+ heavyfootstep = FOOTSTEP_GENERIC_HEAVY
+ tiled_dirt = FALSE
diff --git a/modular_skyrat/modules/goofsec/code/sec_clothing_overrides.dm b/modular_skyrat/modules/goofsec/code/sec_clothing_overrides.dm
index b871ebe7ce3..9f9ec18cdda 100644
--- a/modular_skyrat/modules/goofsec/code/sec_clothing_overrides.dm
+++ b/modular_skyrat/modules/goofsec/code/sec_clothing_overrides.dm
@@ -38,6 +38,10 @@
worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/accessories.dmi'
icon_state = "armband_lopland"
+/obj/item/clothing/accessory/armband/deputy/lopland/nonsec
+ name = "blue armband"
+ desc = "An armband, worn to signify proficiency in a skill or association with a department. This one is blue."
+
/obj/item/clothing/accessory/armband/deputy/lopland
desc = "A Peacekeeper-blue armband, showing the wearer to be certified by Lopland as a top-of-their-class Security Officer."
diff --git a/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_accessory.dm b/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_accessory.dm
index 9140fc6ee7e..addd37faf58 100644
--- a/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_accessory.dm
+++ b/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_accessory.dm
@@ -51,39 +51,38 @@ GLOBAL_LIST_INIT(loadout_accessory, generate_loadout_items(/datum/loadout_item/a
*/
/datum/loadout_item/accessory/armband_medblue
- name = "Medical Armband (blue stripe)"
- item_path = /obj/item/clothing/accessory/armband/medblue
- restricted_roles = list(JOB_CHIEF_MEDICAL_OFFICER, JOB_MEDICAL_DOCTOR, JOB_PARAMEDIC, JOB_CHEMIST, JOB_VIROLOGIST, JOB_ORDERLY, JOB_CORONER)
+ name = "Blue-White Armband"
+ item_path = /obj/item/clothing/accessory/armband/medblue/nonsec
/datum/loadout_item/accessory/armband_med
- name = "Medical Armband (white)"
- item_path = /obj/item/clothing/accessory/armband/med
- restricted_roles = list(JOB_CHIEF_MEDICAL_OFFICER, JOB_MEDICAL_DOCTOR, JOB_PARAMEDIC, JOB_CHEMIST, JOB_VIROLOGIST, JOB_ORDERLY, JOB_CORONER)
+ name = "White Armband"
+ item_path = /obj/item/clothing/accessory/armband/med/nonsec
/datum/loadout_item/accessory/armband_cargo
- name = "Cargo Armband"
- item_path = /obj/item/clothing/accessory/armband/cargo
- restricted_roles = list(JOB_QUARTERMASTER, JOB_CARGO_TECHNICIAN, JOB_SHAFT_MINER, JOB_CUSTOMS_AGENT)
+ name = "Brown Armband"
+ item_path = /obj/item/clothing/accessory/armband/cargo/nonsec
/datum/loadout_item/accessory/armband_engineering
- name = "Engineering Armband"
- item_path = /obj/item/clothing/accessory/armband/engine
- restricted_roles = list(JOB_CHIEF_ENGINEER, JOB_STATION_ENGINEER, JOB_ATMOSPHERIC_TECHNICIAN, JOB_ENGINEERING_GUARD)
+ name = "Orange Armband"
+ item_path = /obj/item/clothing/accessory/armband/engine/nonsec
+
+/datum/loadout_item/accessory/armband_security_nonsec
+ name = "Blue Armband"
+ item_path = /obj/item/clothing/accessory/armband/deputy/lopland/nonsec
/datum/loadout_item/accessory/armband_security
name = "Security Armband"
item_path = /obj/item/clothing/accessory/armband/deputy/lopland
- restricted_roles = list(JOB_HEAD_OF_SECURITY, JOB_SECURITY_OFFICER, JOB_WARDEN, JOB_DETECTIVE)
+ restricted_roles = list(JOB_HEAD_OF_SECURITY, JOB_SECURITY_OFFICER, JOB_WARDEN, JOB_DETECTIVE, JOB_CORRECTIONS_OFFICER)
/datum/loadout_item/accessory/armband_security_deputy
name = "Security Deputy Armband"
item_path = /obj/item/clothing/accessory/armband/deputy
- restricted_roles = list(JOB_CORRECTIONS_OFFICER)
+ restricted_roles = list(JOB_HEAD_OF_SECURITY, JOB_SECURITY_OFFICER, JOB_WARDEN, JOB_DETECTIVE, JOB_CORRECTIONS_OFFICER)
/datum/loadout_item/accessory/armband_science
- name = "Science Armband"
- item_path = /obj/item/clothing/accessory/armband/science
- restricted_roles = list(JOB_RESEARCH_DIRECTOR, JOB_SCIENTIST, JOB_ROBOTICIST, JOB_GENETICIST, JOB_SCIENCE_GUARD)
+ name = "Purple Armband"
+ item_path = /obj/item/clothing/accessory/armband/science/nonsec
/*
* ARMOURLESS
diff --git a/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_glasses.dm b/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_glasses.dm
index f8f74889b50..a30e25c923f 100644
--- a/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_glasses.dm
+++ b/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_glasses.dm
@@ -63,6 +63,10 @@ GLOBAL_LIST_INIT(loadout_glasses, generate_loadout_items(/datum/loadout_item/gla
name = "Modern Glasses"
item_path = /obj/item/clothing/glasses/regular/betterunshit
+/datum/loadout_item/glasses/prescription_glasses/kim
+ name = "Binoclard Lenses"
+ item_path = /obj/item/clothing/glasses/regular/kim
+
/*
* COSMETIC GLASSES
*/
diff --git a/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_gloves.dm b/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_gloves.dm
index 936ca251455..3d78c20d1aa 100644
--- a/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_gloves.dm
+++ b/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_gloves.dm
@@ -78,6 +78,10 @@ GLOBAL_LIST_INIT(loadout_gloves, generate_loadout_items(/datum/loadout_item/glov
name = "Evening Gloves"
item_path = /obj/item/clothing/gloves/evening
+/datum/loadout_item/gloves/kim
+ name = "Aerostatic Gloves"
+ item_path = /obj/item/clothing/gloves/kim
+
/datum/loadout_item/gloves/maid
name = "Maid Arm Covers"
item_path = /obj/item/clothing/gloves/maid
diff --git a/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_heads.dm b/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_heads.dm
index 54ff8c32988..53ce841f2c0 100644
--- a/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_heads.dm
+++ b/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_heads.dm
@@ -464,27 +464,22 @@ GLOBAL_LIST_INIT(loadout_helmets, generate_loadout_items(/datum/loadout_item/hea
/datum/loadout_item/head/trekcap
name = "Officer's Cap (White)"
item_path = /obj/item/clothing/head/hats/caphat/parade/fedcap
- restricted_roles = list(JOB_CAPTAIN, JOB_HEAD_OF_PERSONNEL)
/datum/loadout_item/head/trekcapcap
name = "Officer's Cap (Black)"
item_path = /obj/item/clothing/head/hats/caphat/parade/fedcap/black
- restricted_roles = list(JOB_CAPTAIN, JOB_HEAD_OF_PERSONNEL, JOB_HEAD_OF_SECURITY)
/datum/loadout_item/head/trekcapmedisci
name = "MedSci Officer's Cap (Blue)"
item_path = /obj/item/clothing/head/hats/caphat/parade/fedcap/medsci
- restricted_roles = list(JOB_CHIEF_MEDICAL_OFFICER, JOB_MEDICAL_DOCTOR, JOB_PARAMEDIC, JOB_CHEMIST, JOB_VIROLOGIST, JOB_PSYCHOLOGIST, JOB_GENETICIST, JOB_RESEARCH_DIRECTOR, JOB_SCIENTIST, JOB_ROBOTICIST, JOB_ORDERLY, JOB_CORONER)
/datum/loadout_item/head/trekcapeng
name = "Eng Officer's Cap (Yellow)"
item_path = /obj/item/clothing/head/hats/caphat/parade/fedcap/eng
- restricted_roles = list(JOB_CHIEF_ENGINEER, JOB_ATMOSPHERIC_TECHNICIAN, JOB_STATION_ENGINEER, JOB_WARDEN, JOB_DETECTIVE, JOB_SECURITY_OFFICER, JOB_HEAD_OF_SECURITY, JOB_CORRECTIONS_OFFICER, JOB_CARGO_TECHNICIAN, JOB_SHAFT_MINER, JOB_QUARTERMASTER, JOB_ENGINEERING_GUARD, JOB_CUSTOMS_AGENT)
/datum/loadout_item/head/trekcapsec
name = "Officer's Cap (Red)"
item_path = /obj/item/clothing/head/hats/caphat/parade/fedcap/sec
- restricted_roles = list(JOB_CHIEF_ENGINEER, JOB_ATMOSPHERIC_TECHNICIAN, JOB_STATION_ENGINEER, JOB_WARDEN, JOB_DETECTIVE, JOB_SECURITY_OFFICER, JOB_HEAD_OF_SECURITY, JOB_CORRECTIONS_OFFICER, JOB_CARGO_TECHNICIAN, JOB_SHAFT_MINER, JOB_QUARTERMASTER, JOB_CUSTOMS_AGENT)
/*
* JOB-LOCKED
@@ -527,9 +522,8 @@ GLOBAL_LIST_INIT(loadout_helmets, generate_loadout_items(/datum/loadout_item/hea
restricted_roles = list(JOB_WARDEN, JOB_DETECTIVE, JOB_SECURITY_OFFICER, JOB_HEAD_OF_SECURITY, JOB_CORRECTIONS_OFFICER)
/datum/loadout_item/head/blasthelmet
- name = "General's Helmet"
+ name = "Blast Helmet"
item_path = /obj/item/clothing/head/hats/imperial/helmet
- restricted_roles = list(JOB_WARDEN, JOB_DETECTIVE, JOB_SECURITY_OFFICER, JOB_CORRECTIONS_OFFICER, JOB_CAPTAIN, JOB_HEAD_OF_PERSONNEL, JOB_BLUESHIELD, JOB_HEAD_OF_SECURITY, JOB_RESEARCH_DIRECTOR, JOB_QUARTERMASTER, JOB_CHIEF_MEDICAL_OFFICER, JOB_CHIEF_ENGINEER)
/datum/loadout_item/head/navybluehoscap
name = "Head of Security's Naval Cap"
@@ -546,35 +540,34 @@ GLOBAL_LIST_INIT(loadout_helmets, generate_loadout_items(/datum/loadout_item/hea
item_path = /obj/item/clothing/head/beret/sec/navywarden
restricted_roles = list(JOB_WARDEN)
-/datum/loadout_item/head/cybergoggles //Cyberpunk-P.I. Outfit
+/datum/loadout_item/head/cybergoggles_civ
name = "Type-34C Forensics Headwear"
+ item_path = /obj/item/clothing/head/fedora/det_hat/cybergoggles/civilian
+
+/datum/loadout_item/head/cybergoggles //Cyberpunk-P.I. Outfit
+ name = "Type-34P Forensics Headwear"
item_path = /obj/item/clothing/head/fedora/det_hat/cybergoggles
- restricted_roles = list(JOB_DETECTIVE)
+ restricted_roles = list(JOB_WARDEN, JOB_DETECTIVE, JOB_SECURITY_OFFICER, JOB_HEAD_OF_SECURITY, JOB_CORRECTIONS_OFFICER)
/datum/loadout_item/head/nursehat
name = "Nurse Hat"
item_path = /obj/item/clothing/head/costume/nursehat
- restricted_roles = list(JOB_MEDICAL_DOCTOR, JOB_CHIEF_MEDICAL_OFFICER, JOB_GENETICIST, JOB_CHEMIST, JOB_VIROLOGIST)
/datum/loadout_item/head/imperial_generic
name = "Grey Naval Officer Cap"
item_path = /obj/item/clothing/head/hats/imperial
- restricted_roles = list(JOB_CAPTAIN, JOB_HEAD_OF_PERSONNEL, JOB_BLUESHIELD, JOB_HEAD_OF_SECURITY, JOB_RESEARCH_DIRECTOR, JOB_QUARTERMASTER, JOB_CHIEF_MEDICAL_OFFICER, JOB_CHIEF_ENGINEER, JOB_NT_REP)
/datum/loadout_item/head/imperial_grey
name = "Dark Grey Naval Officer Cap"
item_path = /obj/item/clothing/head/hats/imperial/grey
- restricted_roles = list(JOB_CAPTAIN, JOB_HEAD_OF_PERSONNEL, JOB_BLUESHIELD, JOB_HEAD_OF_SECURITY, JOB_RESEARCH_DIRECTOR, JOB_QUARTERMASTER, JOB_CHIEF_MEDICAL_OFFICER, JOB_CHIEF_ENGINEER, JOB_NT_REP)
/datum/loadout_item/head/imperial_red
name = "Red Naval Officer Cap"
item_path = /obj/item/clothing/head/hats/imperial/red
- restricted_roles = list(JOB_CAPTAIN, JOB_HEAD_OF_PERSONNEL, JOB_BLUESHIELD, JOB_HEAD_OF_SECURITY, JOB_RESEARCH_DIRECTOR, JOB_QUARTERMASTER, JOB_CHIEF_MEDICAL_OFFICER, JOB_CHIEF_ENGINEER)
/datum/loadout_item/head/imperial_white
name = "White Naval Officer Cap"
item_path = /obj/item/clothing/head/hats/imperial/white
- restricted_roles = list(JOB_CAPTAIN, JOB_HEAD_OF_PERSONNEL, JOB_BLUESHIELD, JOB_HEAD_OF_SECURITY, JOB_RESEARCH_DIRECTOR, JOB_QUARTERMASTER, JOB_CHIEF_MEDICAL_OFFICER, JOB_CHIEF_ENGINEER)
/datum/loadout_item/head/azulea_oldblood
name = "Oldblood's Royal cap"
@@ -595,50 +588,38 @@ GLOBAL_LIST_INIT(loadout_helmets, generate_loadout_items(/datum/loadout_item/hea
/datum/loadout_item/head/atmos_beret
name = "Atmospherics Beret"
item_path = /obj/item/clothing/head/beret/atmos
- restricted_roles = list(
- JOB_ATMOSPHERIC_TECHNICIAN,
- JOB_CHIEF_ENGINEER,
- )
/datum/loadout_item/head/engi_beret
name = "Engineering Beret"
item_path = /obj/item/clothing/head/beret/engi
- restricted_roles = list(JOB_STATION_ENGINEER, JOB_ATMOSPHERIC_TECHNICIAN, JOB_CHIEF_ENGINEER, JOB_ENGINEERING_GUARD)
/datum/loadout_item/head/cargo_beret
name = "Supply Beret"
item_path = /obj/item/clothing/head/beret/cargo
- restricted_roles = list(JOB_QUARTERMASTER, JOB_CARGO_TECHNICIAN, JOB_SHAFT_MINER, JOB_CUSTOMS_AGENT)
/datum/loadout_item/head/beret_med
name = "Medical Beret"
item_path = /obj/item/clothing/head/beret/medical
- restricted_roles = list(JOB_MEDICAL_DOCTOR,JOB_VIROLOGIST, JOB_CHEMIST, JOB_CHIEF_MEDICAL_OFFICER, JOB_ORDERLY, JOB_CORONER)
/datum/loadout_item/head/beret_paramedic
name = "Paramedic Beret"
item_path = /obj/item/clothing/head/beret/medical/paramedic
- restricted_roles = list(JOB_PARAMEDIC, JOB_CHIEF_MEDICAL_OFFICER)
/datum/loadout_item/head/beret_viro
name = "Virologist Beret"
item_path = /obj/item/clothing/head/beret/medical/virologist
- restricted_roles = list(JOB_VIROLOGIST, JOB_CHIEF_MEDICAL_OFFICER)
/datum/loadout_item/head/beret_chem
name = "Chemist Beret"
item_path = /obj/item/clothing/head/beret/medical/chemist
- restricted_roles = list(JOB_CHEMIST, JOB_CHIEF_MEDICAL_OFFICER)
/datum/loadout_item/head/beret_sci
name = "Scientist Beret"
item_path = /obj/item/clothing/head/beret/science
- restricted_roles = list(JOB_SCIENTIST, JOB_ROBOTICIST, JOB_GENETICIST, JOB_RESEARCH_DIRECTOR, JOB_SCIENCE_GUARD)
/datum/loadout_item/head/beret_robo
name = "Roboticist Beret"
item_path = /obj/item/clothing/head/beret/science/fancy/robo
- restricted_roles = list(JOB_ROBOTICIST, JOB_RESEARCH_DIRECTOR)
/*
* FAMILIES
diff --git a/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_neck.dm b/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_neck.dm
index f3771ad5fbd..cbabba6b8fb 100644
--- a/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_neck.dm
+++ b/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_neck.dm
@@ -121,7 +121,6 @@ GLOBAL_LIST_INIT(loadout_necks, generate_loadout_items(/datum/loadout_item/neck)
/datum/loadout_item/neck/discoproper
name = "Horrible Necktie"
item_path = /obj/item/clothing/neck/tie/disco
- restricted_roles = list(JOB_DETECTIVE)
/*
* COLLARS
@@ -282,7 +281,6 @@ GLOBAL_LIST_INIT(loadout_necks, generate_loadout_items(/datum/loadout_item/neck)
/datum/loadout_item/neck/stethoscope
name = "Stethoscope"
item_path = /obj/item/clothing/neck/stethoscope
- restricted_roles = list(JOB_MEDICAL_DOCTOR, JOB_CHIEF_MEDICAL_OFFICER)
/datum/loadout_item/neck/maid
name = "Maid Neck Cover"
@@ -295,12 +293,12 @@ GLOBAL_LIST_INIT(loadout_necks, generate_loadout_items(/datum/loadout_item/neck)
/datum/loadout_item/neck/holobadge
name = "Holobadge"
item_path = /obj/item/clothing/accessory/badge/holo
- restricted_roles = list(JOB_SECURITY_OFFICER, JOB_DETECTIVE, JOB_WARDEN, JOB_HEAD_OF_SECURITY)
+ restricted_roles = list(JOB_HEAD_OF_SECURITY, JOB_SECURITY_OFFICER, JOB_WARDEN, JOB_DETECTIVE, JOB_CORRECTIONS_OFFICER)
/datum/loadout_item/neck/holobadge_cord
name = "Holobadge with Lanyard"
item_path = /obj/item/clothing/accessory/badge/holo/cord
- restricted_roles = list(JOB_SECURITY_OFFICER, JOB_DETECTIVE, JOB_WARDEN, JOB_HEAD_OF_SECURITY)
+ restricted_roles = list(JOB_HEAD_OF_SECURITY, JOB_SECURITY_OFFICER, JOB_WARDEN, JOB_DETECTIVE, JOB_CORRECTIONS_OFFICER)
/*
* DONATOR
diff --git a/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_shoes.dm b/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_shoes.dm
index 5e21956f8bd..71d665a904e 100644
--- a/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_shoes.dm
+++ b/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_shoes.dm
@@ -194,6 +194,10 @@ GLOBAL_LIST_INIT(loadout_shoes, generate_loadout_items(/datum/loadout_item/shoes
name = "Green Snakeskin Shoes"
item_path = /obj/item/clothing/shoes/discoshoes
+/datum/loadout_item/shoes/kim
+ name = "Aerostatic Shoes"
+ item_path = /obj/item/clothing/shoes/kim
+
/datum/loadout_item/shoes/dominaheels
name = "Dominant Heels"
item_path = /obj/item/clothing/shoes/latex_heels/domina_heels
@@ -215,6 +219,10 @@ GLOBAL_LIST_INIT(loadout_shoes, generate_loadout_items(/datum/loadout_item/shoes
name = "Roller Skates"
item_path = /obj/item/clothing/shoes/wheelys/rollerskates
+/datum/loadout_item/shoes/jingleshoes
+ name = "Jester Shoes"
+ item_path = /obj/item/clothing/shoes/jester_shoes
+
/*
* SEASONAL
*/
@@ -233,7 +241,7 @@ GLOBAL_LIST_INIT(loadout_shoes, generate_loadout_items(/datum/loadout_item/shoes
*/
/datum/loadout_item/shoes/jester
- name = "Jester Shoes"
+ name = "Clown's Jester Shoes"
item_path = /obj/item/clothing/shoes/clown_shoes/jester
restricted_roles = list(JOB_CLOWN)
diff --git a/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_suit.dm b/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_suit.dm
index f2d3d76a422..4891323c05c 100644
--- a/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_suit.dm
+++ b/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_suit.dm
@@ -119,7 +119,6 @@ GLOBAL_LIST_INIT(loadout_exosuits, generate_loadout_items(/datum/loadout_item/su
/datum/loadout_item/suit/labcoat_medical
name = "Medical Labcoat"
item_path = /obj/item/clothing/suit/toggle/labcoat/medical
- restricted_roles = list(JOB_MEDICAL_DOCTOR, JOB_CHIEF_MEDICAL_OFFICER)
/*
* PONCHOS
@@ -455,7 +454,10 @@ GLOBAL_LIST_INIT(loadout_exosuits, generate_loadout_items(/datum/loadout_item/su
/datum/loadout_item/suit/discojacket
name = "Disco Ass Blazer"
item_path = /obj/item/clothing/suit/discoblazer
- restricted_roles = list(JOB_DETECTIVE)
+
+/datum/loadout_item/suit/kimjacket
+ name = "Aerostatic Bomber Jacket"
+ item_path = /obj/item/clothing/suit/kimjacket
/datum/loadout_item/suit/cardigan
name = "Cardigan"
@@ -537,58 +539,48 @@ GLOBAL_LIST_INIT(loadout_exosuits, generate_loadout_items(/datum/loadout_item/su
/datum/loadout_item/suit/coat_med
name = "Medical Winter Coat"
item_path = /obj/item/clothing/suit/hooded/wintercoat/medical
- restricted_roles = list(JOB_CHIEF_MEDICAL_OFFICER, JOB_MEDICAL_DOCTOR, JOB_ORDERLY) // Reserved for Medical Doctors, Orderlies, and their boss, the Chief Medical Officer
/datum/loadout_item/suit/coat_paramedic
name = "Paramedic Winter Coat"
item_path = /obj/item/clothing/suit/hooded/wintercoat/medical/paramedic
- restricted_roles = list(JOB_CHIEF_MEDICAL_OFFICER, JOB_PARAMEDIC) // Reserved for Paramedics and their boss, the Chief Medical Officer
/datum/loadout_item/suit/coat_robotics
name = "Robotics Winter Coat"
item_path = /obj/item/clothing/suit/hooded/wintercoat/science/robotics
- restricted_roles = list(JOB_RESEARCH_DIRECTOR, JOB_ROBOTICIST)
/datum/loadout_item/suit/coat_sci
name = "Science Winter Coat"
item_path = /obj/item/clothing/suit/hooded/wintercoat/science
- restricted_roles = list(JOB_RESEARCH_DIRECTOR, JOB_SCIENTIST, JOB_ROBOTICIST, JOB_SCIENCE_GUARD) // Reserved for the Science Departement
/datum/loadout_item/suit/coat_eng
name = "Engineering Winter Coat"
item_path = /obj/item/clothing/suit/hooded/wintercoat/engineering
- restricted_roles = list(JOB_CHIEF_ENGINEER, JOB_STATION_ENGINEER, JOB_ENGINEERING_GUARD) // Reserved for Station Engineers, Engineering Guards, and their boss, the Chief Engineer
/datum/loadout_item/suit/coat_atmos
name = "Atmospherics Winter Coat"
item_path = /obj/item/clothing/suit/hooded/wintercoat/engineering/atmos
- restricted_roles = list(JOB_CHIEF_ENGINEER, JOB_ATMOSPHERIC_TECHNICIAN) // Reserved for Atmos Techs and their boss, the Chief Engineer
/datum/loadout_item/suit/coat_hydro
name = "Hydroponics Winter Coat"
item_path = /obj/item/clothing/suit/hooded/wintercoat/hydro
- restricted_roles = list(JOB_HEAD_OF_PERSONNEL, JOB_BOTANIST) // Reserved for Botanists and their boss, the Head of Personnel
/datum/loadout_item/suit/coat_bar
name = "Bartender Winter Coat"
item_path = /obj/item/clothing/suit/hooded/wintercoat/skyrat/bartender
- restricted_roles = list(JOB_HEAD_OF_PERSONNEL, JOB_BARTENDER) //Reserved for Bartenders and their boss, the Head of Personnel
/datum/loadout_item/suit/coat_cargo
name = "Cargo Winter Coat"
item_path = /obj/item/clothing/suit/hooded/wintercoat/cargo
- restricted_roles = list(JOB_QUARTERMASTER, JOB_CARGO_TECHNICIAN, JOB_CUSTOMS_AGENT) // Reserved for Cargo Techs, Customs Agents, and their boss, the Quartermaster
/datum/loadout_item/suit/coat_miner
name = "Mining Winter Coat"
item_path = /obj/item/clothing/suit/hooded/wintercoat/miner
- restricted_roles = list(JOB_QUARTERMASTER, JOB_SHAFT_MINER) // Reserved for Miners and their boss, the Quartermaster
// JACKETS
/datum/loadout_item/suit/navybluejacketofficer
name = "Security Officer's Navy Blue Formal Jacket"
item_path = /obj/item/clothing/suit/jacket/officer/blue
- restricted_roles = list(JOB_SECURITY_OFFICER, JOB_HEAD_OF_SECURITY, JOB_WARDEN) // I aint making a medic one, maybe i'll add some rank thing from cm or civ for it
+ restricted_roles = list(JOB_WARDEN, JOB_DETECTIVE, JOB_SECURITY_OFFICER, JOB_HEAD_OF_SECURITY, JOB_CORRECTIONS_OFFICER)
/datum/loadout_item/suit/navybluejacketwarden
name = "Warden's Navy Blue Formal Jacket"
@@ -603,7 +595,7 @@ GLOBAL_LIST_INIT(loadout_exosuits, generate_loadout_items(/datum/loadout_item/su
/datum/loadout_item/suit/security_jacket
name = "Security Jacket"
item_path = /obj/item/clothing/suit/toggle/jacket/sec
- restricted_roles = list(JOB_HEAD_OF_SECURITY, JOB_SECURITY_OFFICER, JOB_WARDEN, JOB_DETECTIVE) //Not giving this one to COs because it's actually better than the one they spawn with
+ restricted_roles = list(JOB_WARDEN, JOB_DETECTIVE, JOB_SECURITY_OFFICER, JOB_HEAD_OF_SECURITY) //Not giving this one to COs because it's actually better than the one they spawn with
/datum/loadout_item/suit/brit
name = "High Vis Armored Vest"
@@ -613,7 +605,7 @@ GLOBAL_LIST_INIT(loadout_exosuits, generate_loadout_items(/datum/loadout_item/su
/datum/loadout_item/suit/british_jacket
name = "Peacekeeper Officer Coat"
item_path = /obj/item/clothing/suit/british_officer
- restricted_roles = list(JOB_HEAD_OF_SECURITY, JOB_WARDEN, JOB_DETECTIVE)
+ restricted_roles = list(JOB_WARDEN, JOB_DETECTIVE, JOB_SECURITY_OFFICER, JOB_HEAD_OF_SECURITY, JOB_CORRECTIONS_OFFICER)
/datum/loadout_item/suit/offdep_jacket
name = "Off-Department Jacket"
@@ -622,27 +614,22 @@ GLOBAL_LIST_INIT(loadout_exosuits, generate_loadout_items(/datum/loadout_item/su
/datum/loadout_item/suit/engi_jacket
name = "Engineering Jacket"
item_path = /obj/item/clothing/suit/toggle/jacket/engi
- restricted_roles = list(JOB_CHIEF_ENGINEER, JOB_STATION_ENGINEER, JOB_ATMOSPHERIC_TECHNICIAN, JOB_ENGINEERING_GUARD)
/datum/loadout_item/suit/sci_jacket
name = "Science Jacket"
item_path = /obj/item/clothing/suit/toggle/jacket/sci
- restricted_roles = list(JOB_RESEARCH_DIRECTOR, JOB_SCIENTIST, JOB_ROBOTICIST, JOB_GENETICIST, JOB_SCIENCE_GUARD)
/datum/loadout_item/suit/med_jacket
name = "Medbay Jacket"
item_path = /obj/item/clothing/suit/toggle/jacket/med
- restricted_roles = list(JOB_CHIEF_MEDICAL_OFFICER, JOB_MEDICAL_DOCTOR, JOB_PARAMEDIC, JOB_CHEMIST, JOB_VIROLOGIST, JOB_ORDERLY)
/datum/loadout_item/suit/supply_jacket
name = "Supply Jacket"
item_path = /obj/item/clothing/suit/toggle/jacket/supply
- restricted_roles = list(JOB_QUARTERMASTER, JOB_CARGO_TECHNICIAN, JOB_SHAFT_MINER, JOB_CUSTOMS_AGENT)
/datum/loadout_item/suit/cargo_gorka_jacket
name = "Cargo Gorka Jacket"
item_path = /obj/item/clothing/suit/toggle/cargo_tech
- restricted_roles = list(JOB_QUARTERMASTER, JOB_CARGO_TECHNICIAN, JOB_SHAFT_MINER, JOB_CUSTOMS_AGENT)
/datum/loadout_item/suit/qm_jacket
name = "Quartermaster's Overcoat"
@@ -653,7 +640,6 @@ GLOBAL_LIST_INIT(loadout_exosuits, generate_loadout_items(/datum/loadout_item/su
/datum/loadout_item/suit/labcoat_highvis
name = "High-Vis Labcoat"
item_path = /obj/item/clothing/suit/toggle/labcoat/skyrat/highvis
- restricted_roles = list(JOB_CHIEF_MEDICAL_OFFICER, JOB_PARAMEDIC, JOB_ATMOSPHERIC_TECHNICIAN, JOB_DETECTIVE, JOB_CHEMIST, JOB_ORDERLY) // And now chemist and orderly get it too.
/*
* FAMILIES
diff --git a/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_toys.dm b/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_toys.dm
index 702983b4966..cfb0cc14e3a 100644
--- a/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_toys.dm
+++ b/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_toys.dm
@@ -33,7 +33,6 @@ GLOBAL_LIST_INIT(loadout_toys, generate_loadout_items(/datum/loadout_item/toys))
/datum/loadout_item/toys/narsie
name = "Nar'sie Plushie"
item_path = /obj/item/toy/plush/narplush
- restricted_roles = list(JOB_CHAPLAIN)
/datum/loadout_item/toys/nukie
name = "Nukie Plushie"
@@ -50,7 +49,6 @@ GLOBAL_LIST_INIT(loadout_toys, generate_loadout_items(/datum/loadout_item/toys))
/datum/loadout_item/toys/ratvar
name = "Ratvar Plushie"
item_path = /obj/item/toy/plush/ratplush
- restricted_roles = list(JOB_CHAPLAIN)
/datum/loadout_item/toys/rouny
name = "Rouny Plushie"
diff --git a/modular_skyrat/modules/loadouts/loadout_items/under/loadout_datum_under.dm b/modular_skyrat/modules/loadouts/loadout_items/under/loadout_datum_under.dm
index 14aa3ca4b44..504c18629cf 100644
--- a/modular_skyrat/modules/loadouts/loadout_items/under/loadout_datum_under.dm
+++ b/modular_skyrat/modules/loadouts/loadout_items/under/loadout_datum_under.dm
@@ -96,23 +96,18 @@ GLOBAL_LIST_INIT(loadout_miscunders, generate_loadout_items(/datum/loadout_item/
/datum/loadout_item/under/jumpsuit/impcommand
name = "Light Grey Officer's Naval Jumpsuit"
item_path = /obj/item/clothing/under/rank/captain/skyrat/imperial/generic
- restricted_roles = list(JOB_CAPTAIN, JOB_HEAD_OF_PERSONNEL, JOB_BLUESHIELD, JOB_HEAD_OF_SECURITY, JOB_RESEARCH_DIRECTOR, JOB_QUARTERMASTER, JOB_CHIEF_MEDICAL_OFFICER, JOB_CHIEF_ENGINEER, JOB_NT_REP)
/datum/loadout_item/under/jumpsuit/impcom
name = "Grey Officer's Naval Jumpsuit"
item_path = /obj/item/clothing/under/rank/captain/skyrat/imperial/generic/grey
- restricted_roles = list(JOB_CAPTAIN, JOB_HEAD_OF_PERSONNEL, JOB_BLUESHIELD, JOB_HEAD_OF_SECURITY, JOB_RESEARCH_DIRECTOR, JOB_QUARTERMASTER, JOB_CHIEF_MEDICAL_OFFICER, JOB_CHIEF_ENGINEER, JOB_NT_REP)
/datum/loadout_item/under/jumpsuit/impred
name = "Red Officer's Naval Jumpsuit"
item_path = /obj/item/clothing/under/rank/captain/skyrat/imperial/generic/red
- restricted_roles = list(JOB_CAPTAIN, JOB_HEAD_OF_PERSONNEL, JOB_BLUESHIELD, JOB_HEAD_OF_SECURITY, JOB_RESEARCH_DIRECTOR, JOB_QUARTERMASTER, JOB_CHIEF_MEDICAL_OFFICER, JOB_CHIEF_ENGINEER) //NT Reps would never wear red, it's unbefitting
-
/datum/loadout_item/under/jumpsuit/impcomtrous
name = "Grey Officer's Naval Jumpsuit (Trousers)"
item_path = /obj/item/clothing/under/rank/captain/skyrat/imperial/generic/pants
- restricted_roles = list(JOB_CAPTAIN, JOB_HEAD_OF_PERSONNEL, JOB_BLUESHIELD, JOB_HEAD_OF_SECURITY, JOB_RESEARCH_DIRECTOR, JOB_QUARTERMASTER, JOB_CHIEF_MEDICAL_OFFICER, JOB_CHIEF_ENGINEER, JOB_NT_REP)
/datum/loadout_item/under/jumpsuit/security_trousers
name = "Security Trousers"
@@ -132,37 +127,30 @@ GLOBAL_LIST_INIT(loadout_miscunders, generate_loadout_items(/datum/loadout_item/
/datum/loadout_item/under/jumpsuit/disco
name = "Superstar Cop Uniform"
item_path = /obj/item/clothing/under/rank/security/detective/disco
- restricted_roles = list(JOB_DETECTIVE)
/datum/loadout_item/under/jumpsuit/kim
name = "Aerostatic Suit"
item_path = /obj/item/clothing/under/rank/security/detective/kim
- restricted_roles = list(JOB_DETECTIVE)
/datum/loadout_item/under/jumpsuit/paramed_light
name = "Light Paramedic Uniform"
item_path = /obj/item/clothing/under/rank/medical/paramedic/skyrat/light
- restricted_roles = list(JOB_PARAMEDIC)
/datum/loadout_item/under/jumpsuit/paramed_light_skirt
name = "Light Paramedic Skirt"
item_path = /obj/item/clothing/under/rank/medical/paramedic/skyrat/light/skirt
- restricted_roles = list(JOB_PARAMEDIC)
/datum/loadout_item/under/jumpsuit/chemist_formal
name = "Chemist's Formal Jumpsuit"
item_path = /obj/item/clothing/under/rank/medical/chemist/skyrat/formal
- restricted_roles = list(JOB_CHEMIST)
/datum/loadout_item/under/jumpsuit/chemist_formal_skirt
name = "Chemist's Formal Jumpskirt"
item_path = /obj/item/clothing/under/rank/medical/chemist/skyrat/formal/skirt
- restricted_roles = list(JOB_CHEMIST)
/datum/loadout_item/under/jumpsuit/hlscientist
name = "Ridiculous Scientist Outfit"
item_path = /obj/item/clothing/under/rank/rnd/scientist/skyrat/hlscience
- restricted_roles = list(JOB_SCIENTIST, JOB_ROBOTICIST, JOB_GENETICIST, JOB_RESEARCH_DIRECTOR)
/datum/loadout_item/under/jumpsuit/rd_jumpsuit
name = "Research Director's Jumpsuit"
@@ -177,7 +165,6 @@ GLOBAL_LIST_INIT(loadout_miscunders, generate_loadout_items(/datum/loadout_item/
/datum/loadout_item/under/jumpsuit/cargo
name = "Cargo Technician's Jumpsuit"
item_path = /obj/item/clothing/under/rank/cargo/tech
- restricted_roles = list(JOB_CARGO_TECHNICIAN, JOB_QUARTERMASTER, JOB_CUSTOMS_AGENT)
/datum/loadout_item/under/jumpsuit/cargo/skirt
name = "Cargo Technician's Skirt"
@@ -199,22 +186,18 @@ GLOBAL_LIST_INIT(loadout_miscunders, generate_loadout_items(/datum/loadout_item/
/datum/loadout_item/under/jumpsuit/utility_eng
name = "Engineering Utility Uniform"
item_path = /obj/item/clothing/under/rank/engineering/engineer/skyrat/utility
- restricted_roles = list(JOB_STATION_ENGINEER,JOB_ATMOSPHERIC_TECHNICIAN, JOB_CHIEF_ENGINEER, JOB_ENGINEERING_GUARD)
/datum/loadout_item/under/jumpsuit/utility_med
name = "Medical Utility Uniform"
item_path = /obj/item/clothing/under/rank/medical/doctor/skyrat/utility
- restricted_roles = list(JOB_MEDICAL_DOCTOR, JOB_PARAMEDIC, JOB_CHEMIST, JOB_VIROLOGIST, JOB_GENETICIST, JOB_CHIEF_MEDICAL_OFFICER, JOB_PSYCHOLOGIST, JOB_ORDERLY)
/datum/loadout_item/under/jumpsuit/utility_sci
name = "Science Utility Uniform"
item_path = /obj/item/clothing/under/rank/rnd/scientist/skyrat/utility
- restricted_roles = list(JOB_SCIENTIST, JOB_ROBOTICIST, JOB_GENETICIST, JOB_RESEARCH_DIRECTOR, JOB_SCIENCE_GUARD)
/datum/loadout_item/under/jumpsuit/utility_cargo
name = "Supply Utility Uniform"
item_path = /obj/item/clothing/under/rank/cargo/tech/skyrat/utility
- restricted_roles = list(JOB_CARGO_TECHNICIAN, JOB_SHAFT_MINER, JOB_QUARTERMASTER, JOB_CUSTOMS_AGENT)
/datum/loadout_item/under/jumpsuit/utility_sec
name = "Security Utility Uniform"
@@ -566,32 +549,26 @@ GLOBAL_LIST_INIT(loadout_miscunders, generate_loadout_items(/datum/loadout_item/
/datum/loadout_item/under/miscellaneous/blacknwhite
name = "Classic Prisoner Jumpsuit"
item_path = /obj/item/clothing/under/rank/prisoner/classic
- restricted_roles = list(JOB_PRISONER)
/datum/loadout_item/under/miscellaneous/redscrubs
name = "Red Scrubs"
item_path = /obj/item/clothing/under/rank/medical/scrubs/skyrat/red
- restricted_roles = list(JOB_MEDICAL_DOCTOR, JOB_CHIEF_MEDICAL_OFFICER, JOB_GENETICIST, JOB_CHEMIST, JOB_VIROLOGIST, JOB_PARAMEDIC)
/datum/loadout_item/under/miscellaneous/bluescrubs
name = "Blue Scrubs"
item_path = /obj/item/clothing/under/rank/medical/scrubs/blue
- restricted_roles = list(JOB_MEDICAL_DOCTOR, JOB_CHIEF_MEDICAL_OFFICER, JOB_GENETICIST, JOB_CHEMIST, JOB_VIROLOGIST, JOB_PARAMEDIC)
/datum/loadout_item/under/miscellaneous/greenscrubs
name = "Green Scrubs"
item_path = /obj/item/clothing/under/rank/medical/scrubs/green
- restricted_roles = list(JOB_MEDICAL_DOCTOR, JOB_CHIEF_MEDICAL_OFFICER, JOB_GENETICIST, JOB_CHEMIST, JOB_VIROLOGIST, JOB_PARAMEDIC)
/datum/loadout_item/under/miscellaneous/purplescrubs
name = "Purple Scrubs"
item_path = /obj/item/clothing/under/rank/medical/scrubs/purple
- restricted_roles = list(JOB_MEDICAL_DOCTOR, JOB_CHIEF_MEDICAL_OFFICER, JOB_GENETICIST, JOB_CHEMIST, JOB_VIROLOGIST, JOB_PARAMEDIC)
/datum/loadout_item/under/miscellaneous/whitescrubs
name = "White Scrubs"
item_path = /obj/item/clothing/under/rank/medical/scrubs/skyrat/white
- restricted_roles = list(JOB_MEDICAL_DOCTOR, JOB_CHIEF_MEDICAL_OFFICER, JOB_GENETICIST, JOB_CHEMIST, JOB_VIROLOGIST, JOB_PARAMEDIC)
/datum/loadout_item/under/miscellaneous/gear_harness
name = "Gear Harness"
@@ -604,27 +581,22 @@ GLOBAL_LIST_INIT(loadout_miscunders, generate_loadout_items(/datum/loadout_item/
/datum/loadout_item/under/miscellaneous/cargo_casual
name = "Cargo Tech Casualwear"
item_path = /obj/item/clothing/under/rank/cargo/tech/skyrat/casualman
- restricted_roles = list(JOB_CARGO_TECHNICIAN)
/datum/loadout_item/under/miscellaneous/cargo_shorts
name = "Cargo Tech Shorts"
item_path = /obj/item/clothing/under/rank/cargo/tech/alt
- restricted_roles = list(JOB_CARGO_TECHNICIAN)
/datum/loadout_item/under/miscellaneous/cargo_black
name = "Black Cargo Uniform"
item_path = /obj/item/clothing/under/rank/cargo/tech/skyrat/evil
- restricted_roles = list(JOB_CARGO_TECHNICIAN)
/datum/loadout_item/under/miscellaneous/cargo_turtle
name = "Cargo Turtleneck"
item_path = /obj/item/clothing/under/rank/cargo/tech/skyrat/turtleneck
- restricted_roles = list(JOB_CARGO_TECHNICIAN)
/datum/loadout_item/under/miscellaneous/cargo_skirtle
name = "Cargo Skirtleneck"
item_path = /obj/item/clothing/under/rank/cargo/tech/skyrat/turtleneck/skirt
- restricted_roles = list(JOB_CARGO_TECHNICIAN)
/datum/loadout_item/under/miscellaneous/qm_skirtle
name = "Quartermaster's Skirtleneck"
@@ -651,7 +623,6 @@ GLOBAL_LIST_INIT(loadout_miscunders, generate_loadout_items(/datum/loadout_item/
/datum/loadout_item/under/miscellaneous/mech_suit
name = "Mech Suit"
item_path = /obj/item/clothing/under/costume/mech_suit
- restricted_roles = list(JOB_ROBOTICIST)
/*
* FORMAL UNDERSUITS
@@ -879,7 +850,6 @@ GLOBAL_LIST_INIT(loadout_miscunders, generate_loadout_items(/datum/loadout_item/
/datum/loadout_item/under/formal/designer_inferno
name = "Designer Inferno Suit"
item_path = /obj/item/clothing/under/suit/skyrat/inferno/beeze
- restricted_roles = list(JOB_LAWYER)
/datum/loadout_item/under/formal/pencil
name = "Black Pencilskirt"
diff --git a/modular_skyrat/modules/oversized/code/door.dm b/modular_skyrat/modules/oversized/code/door.dm
index b7c534494b3..e2d58c9e4aa 100644
--- a/modular_skyrat/modules/oversized/code/door.dm
+++ b/modular_skyrat/modules/oversized/code/door.dm
@@ -14,7 +14,6 @@
var/affecting = crossing_human.get_bodypart(BODY_ZONE_HEAD)
crossing_human.apply_damage(15, BRUTE, affecting)
crossing_human.Knockdown(20)
- crossing_human.adjustOrganLoss(ORGAN_SLOT_BRAIN, 15) //We do a bit of brain damage
crossing_human.visible_message(span_warning("[crossing_human] slams their head into the frame of [src] with a sickening thud!"), \
span_userdanger("You slam your head against [src]!")
)
diff --git a/modular_skyrat/modules/oversized/code/oversized_quirk.dm b/modular_skyrat/modules/oversized/code/oversized_quirk.dm
index a2470d56b8c..8c6c88298f8 100644
--- a/modular_skyrat/modules/oversized/code/oversized_quirk.dm
+++ b/modular_skyrat/modules/oversized/code/oversized_quirk.dm
@@ -21,15 +21,12 @@
human_holder.maptext_height = 32 * human_holder.dna.features["body_size"] //Adjust runechat height
human_holder.dna.update_body_size()
human_holder.mob_size = MOB_SIZE_LARGE
- var/obj/item/bodypart/arm/left/left_arm = human_holder.get_bodypart(BODY_ZONE_L_ARM)
- if(left_arm)
- left_arm.unarmed_damage_low += OVERSIZED_HARM_DAMAGE_BONUS
- left_arm.unarmed_damage_high += OVERSIZED_HARM_DAMAGE_BONUS
- var/obj/item/bodypart/arm/right/right_arm = human_holder.get_bodypart(BODY_ZONE_R_ARM)
- if(right_arm)
- right_arm.unarmed_damage_low += OVERSIZED_HARM_DAMAGE_BONUS
- right_arm.unarmed_damage_high += OVERSIZED_HARM_DAMAGE_BONUS
+ RegisterSignal(human_holder, COMSIG_CARBON_POST_ATTACH_LIMB, PROC_REF(on_gain_limb)) // make sure we handle this when new ones are applied
+
+ // just dummy call our current limbs to have less duplication (by having more duplication ahueheu)
+ for(var/obj/item/bodypart/bodypart as anything in human_holder.bodyparts)
+ on_gain_limb(src, bodypart, special = FALSE)
human_holder.blood_volume_normal = BLOOD_VOLUME_OVERSIZED
human_holder.physiology.hunger_mod *= OVERSIZED_HUNGER_MOD //50% hungrier
@@ -57,18 +54,48 @@
var/obj/item/bodypart/arm/left/left_arm = human_holder.get_bodypart(BODY_ZONE_L_ARM)
if(left_arm)
- left_arm.unarmed_damage_low -= OVERSIZED_HARM_DAMAGE_BONUS
- left_arm.unarmed_damage_high -= OVERSIZED_HARM_DAMAGE_BONUS
+ left_arm.unarmed_damage_high = initial(left_arm.unarmed_damage_high)
var/obj/item/bodypart/arm/right/right_arm = human_holder.get_bodypart(BODY_ZONE_R_ARM)
if(right_arm)
- right_arm.unarmed_damage_low -= OVERSIZED_HARM_DAMAGE_BONUS
- right_arm.unarmed_damage_high -= OVERSIZED_HARM_DAMAGE_BONUS
+ right_arm.unarmed_damage_high = initial(right_arm.unarmed_damage_high)
+
+ var/obj/item/bodypart/leg/left_leg = human_holder.get_bodypart(BODY_ZONE_L_LEG)
+ if (left_leg)
+ left_leg.unarmed_effectiveness = initial(left_leg.unarmed_effectiveness)
+
+ var/obj/item/bodypart/leg/right_leg = human_holder.get_bodypart(BODY_ZONE_R_LEG)
+ if (right_leg)
+ right_leg.unarmed_effectiveness = initial(right_leg.unarmed_effectiveness)
+
+ for(var/obj/item/bodypart/bodypart as anything in human_holder.bodyparts)
+ bodypart.name = replacetext(bodypart.name, "oversized ", "")
+
+ UnregisterSignal(human_holder, COMSIG_CARBON_POST_ATTACH_LIMB)
human_holder.blood_volume_normal = BLOOD_VOLUME_NORMAL
human_holder.physiology.hunger_mod /= OVERSIZED_HUNGER_MOD
human_holder.remove_movespeed_modifier(/datum/movespeed_modifier/oversized)
+/datum/quirk/oversized/proc/on_gain_limb(datum/source, obj/item/bodypart/gained, special)
+ SIGNAL_HANDLER
+
+ if(findtext(gained.name, "oversized"))
+ return
+
+ // Oversized arms have a higher damage maximum. Pretty simple.
+ if(istype(gained, /obj/item/bodypart/arm))
+ var/obj/item/bodypart/arm/new_arm = gained
+ new_arm.unarmed_damage_high = initial(new_arm.unarmed_damage_high) + OVERSIZED_HARM_DAMAGE_BONUS
+
+ // Before this, we never actually did anything with Oversized legs.
+ // This brings their unarmed_effectiveness up to 20 from 15, which is on par with mushroom legs.
+ // Functionally, this makes their prone kicks more accurate and increases the chance of extending prone knockdown... but only while the victim is already prone.
+ else if(istype(gained, /obj/item/bodypart/leg))
+ var/obj/item/bodypart/leg/new_leg = gained
+ new_leg.unarmed_effectiveness = initial(new_leg.unarmed_effectiveness) + OVERSIZED_KICK_EFFECTIVENESS_BONUS
+
+ gained.name = "oversized " + gained.name
/datum/movespeed_modifier/oversized
multiplicative_slowdown = OVERSIZED_SPEED_SLOWDOWN
diff --git a/modular_skyrat/modules/radiosound/code/headset.dm b/modular_skyrat/modules/radiosound/code/headset.dm
index 321fb9e40a0..b27e550f1ef 100644
--- a/modular_skyrat/modules/radiosound/code/headset.dm
+++ b/modular_skyrat/modules/radiosound/code/headset.dm
@@ -1,5 +1,8 @@
/obj/item/radio/headset
+ /// The sound that plays when someone uses the headset
var/radiosound = 'modular_skyrat/modules/radiosound/sound/radio/common.ogg'
+ /// The volume of the radio sound we make
+ var/radio_sound_volume = 25
/obj/item/radio/headset/syndicate //disguised to look like a normal headset for stealth ops
radiosound = 'modular_skyrat/modules/radiosound/sound/radio/syndie.ogg'
@@ -7,7 +10,7 @@
/obj/item/radio/headset/headset_sec
radiosound = 'modular_skyrat/modules/radiosound/sound/radio/security.ogg'
-/obj/item/radio/headset/talk_into(mob/living/M, message, channel, list/spans, datum/language/language, list/message_mods, direct = TRUE)
+/obj/item/radio/headset/talk_into(mob/living/mob_in_question, message, channel, list/spans, datum/language/language, list/message_mods, direct = TRUE)
if(radiosound && listening)
- playsound(M, radiosound, rand(20, 30), 0, 0, SOUND_FALLOFF_EXPONENT)
+ playsound(mob_in_question, radiosound, radio_sound_volume, TRUE, SHORT_RANGE_SOUND_EXTRARANGE, SOUND_FALLOFF_EXPONENT)
. = ..()
diff --git a/tgstation.dme b/tgstation.dme
index 6b3632a7016..829f78fa1d0 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -6172,7 +6172,9 @@
#include "interface\fonts\tiny_unicode.dm"
#include "interface\fonts\vcr_osd_mono.dm"
#include "modular_skyrat\master_files\code\_globalvars\configuration.dm"
+#include "modular_skyrat\master_files\code\_globalvars\regexes.dm"
#include "modular_skyrat\master_files\code\_globalvars\religion.dm"
+#include "modular_skyrat\master_files\code\_globalvars\text.dm"
#include "modular_skyrat\master_files\code\_globalvars\lists\ambience.dm"
#include "modular_skyrat\master_files\code\_globalvars\lists\chat.dm"
#include "modular_skyrat\master_files\code\_onclick\cyborg.dm"
@@ -6224,6 +6226,7 @@
#include "modular_skyrat\master_files\code\datums\traits\negative.dm"
#include "modular_skyrat\master_files\code\datums\traits\neutral.dm"
#include "modular_skyrat\master_files\code\datums\votes\_vote_datum.dm"
+#include "modular_skyrat\master_files\code\datums\votes\map_vote.dm"
#include "modular_skyrat\master_files\code\game\atoms.dm"
#include "modular_skyrat\master_files\code\game\sound.dm"
#include "modular_skyrat\master_files\code\game\effects\spawners\random\structure.dm"
@@ -7057,6 +7060,7 @@
#include "modular_skyrat\modules\customization\modules\language\common.dm"
#include "modular_skyrat\modules\customization\modules\language\gutter.dm"
#include "modular_skyrat\modules\customization\modules\language\monkey.dm"
+#include "modular_skyrat\modules\customization\modules\language\mothic.dm"
#include "modular_skyrat\modules\customization\modules\language\mushroom.dm"
#include "modular_skyrat\modules\customization\modules\language\nekomimetic.dm"
#include "modular_skyrat\modules\customization\modules\language\panslavic.dm"
@@ -7137,6 +7141,7 @@
#include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\species\hemophage\corrupted_stomach.dm"
#include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\species\hemophage\corrupted_tongue.dm"
#include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\species\hemophage\hemophage_actions.dm"
+#include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\species\hemophage\hemophage_moods.dm"
#include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\species\hemophage\hemophage_organs.dm"
#include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\species\hemophage\hemophage_species.dm"
#include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\species\hemophage\hemophage_status_effects.dm"
diff --git a/tgui/packages/tgui/interfaces/PaiSubmit.tsx b/tgui/packages/tgui/interfaces/PaiSubmit.tsx
index 85e7d48c2bf..23a1cabece2 100644
--- a/tgui/packages/tgui/interfaces/PaiSubmit.tsx
+++ b/tgui/packages/tgui/interfaces/PaiSubmit.tsx
@@ -86,7 +86,7 @@ const InputDisplay = (props) => {
setInput({ ...input, description: value })}
/>
@@ -97,7 +97,7 @@ const InputDisplay = (props) => {
setInput({ ...input, comments: value })}
/>
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skyrat/headshot.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skyrat/headshot.tsx
index cf64c62e549..4535e1b3dc8 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skyrat/headshot.tsx
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skyrat/headshot.tsx
@@ -6,6 +6,8 @@ export const headshot: Feature = {
description:
'Requires a link ending with .png, .jpeg, or .jpg, starting with \
https://, and hosted on Gyazo or Discord. Renders the image underneath \
- your character preview in the examine more window.',
+ your character preview in the examine more window. \
+ Image larger than 250x250 will be resized to 250x250. \
+ Aim for 250x250 whenever possible',
component: FeatureShortTextInput,
};