diff --git a/_maps/map_files/LayeniaStation/LayeniaStation.dmm b/_maps/map_files/LayeniaStation/LayeniaStation.dmm
index 82f29ea34..11651c7d7 100644
--- a/_maps/map_files/LayeniaStation/LayeniaStation.dmm
+++ b/_maps/map_files/LayeniaStation/LayeniaStation.dmm
@@ -15566,6 +15566,7 @@
/obj/effect/turf_decal/tile/green{
dir = 4
},
+/obj/effect/landmark/start/virologist,
/turf/open/floor/plasteel/white/side{
dir = 10
},
@@ -18245,7 +18246,7 @@
},
/obj/structure/disposalpipe/segment,
/obj/machinery/door/poddoor/shutters{
- id = "cargoshut2";
+ id = "cargoshut3";
name = "mailroom shutters"
},
/turf/open/floor/plasteel/dark{
@@ -22431,6 +22432,13 @@
/obj/effect/turf_decal/delivery,
/turf/open/floor/plating,
/area/maintenance/fore)
+"dwt" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer1{
+ name = "air scrubber"
+ },
+/obj/effect/landmark/start/virologist,
+/turf/open/floor/plasteel/white,
+/area/medical/virology)
"dwF" = (
/obj/machinery/door/airlock/maintenance{
name = "Engineering Maintenance";
@@ -101213,7 +101221,7 @@
/obj/machinery/door/firedoor,
/obj/effect/spawner/structure/window,
/obj/machinery/door/poddoor/shutters{
- id = "cargoshut2";
+ id = "cargoshut3";
name = "mailroom shutters"
},
/turf/open/floor/plating,
@@ -120847,7 +120855,7 @@
},
/obj/machinery/button/door{
desc = "A remote control switch for the medbay foyer.";
- id = "cargoshut2";
+ id = "cargoshut3";
name = "Mailroom Shutter Controls";
pixel_y = -22
},
@@ -158865,7 +158873,7 @@
/obj/effect/decal/cleanable/dirt,
/obj/machinery/button/door{
desc = "A remote control switch for the medbay foyer.";
- id = "cargoshut2";
+ id = "cargoshut3";
name = "Mailroom Shutter Controls";
pixel_y = 26
},
@@ -268328,7 +268336,7 @@ ecI
jZa
wsF
teT
-wGF
+dwt
vWw
kVA
eRT
diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm
index 9d03e1aae..8d51088e6 100644
--- a/_maps/map_files/generic/CentCom.dmm
+++ b/_maps/map_files/generic/CentCom.dmm
@@ -1081,7 +1081,7 @@
"jyr" = (/obj/structure/closet/secure_closet/freezer/meat,/obj/item/reagent_containers/food/snacks/meat/rawbacon,/obj/item/reagent_containers/food/snacks/meat/rawbacon,/obj/item/reagent_containers/food/snacks/meat/rawbacon,/obj/item/reagent_containers/food/snacks/meat/rawbacon,/obj/item/reagent_containers/food/snacks/meat/slab/killertomato,/obj/item/reagent_containers/food/snacks/meat/slab/killertomato,/obj/item/reagent_containers/food/snacks/meat/slab/killertomato,/obj/item/reagent_containers/food/snacks/meat/slab/killertomato,/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/lizard,/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/lizard,/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/lizard,/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/lizard,/obj/item/reagent_containers/food/snacks/sausage,/obj/item/reagent_containers/food/snacks/sausage,/obj/item/reagent_containers/food/snacks/meat/rawcutlet,/obj/item/reagent_containers/food/snacks/meat/rawcutlet,/obj/item/reagent_containers/food/snacks/meat/rawcutlet,/obj/item/reagent_containers/food/snacks/carpmeat,/obj/item/reagent_containers/food/snacks/carpmeat,/obj/item/reagent_containers/food/snacks/carpmeat,/obj/item/reagent_containers/food/snacks/carpmeat,/obj/effect/turf_decal/tile/neutral{dir = 1},/obj/effect/turf_decal/tile/neutral,/obj/effect/turf_decal/tile/neutral{dir = 4},/obj/effect/turf_decal/tile/neutral{dir = 8},/turf/open/floor/plasteel/dark,/area/tdome/tdomeobserve)
"jzO" = (/obj/machinery/door/airlock{dir = 4; id_tag = "CCDorm4"; name = "Kris Wulph's Dorm Room"},/turf/open/floor/plasteel,/area/centcom/ferry)
"jzZ" = (/obj/machinery/light{dir = 1; pixel_y = 16},/obj/structure/table/wood,/obj/effect/spawner/lootdrop/three_course_meal,/turf/open/floor/mineral/basaltstone_floor,/area/centcom/bunk/one)
-"jAn" = (/obj/structure/table/wood,/obj/structure/window/reinforced/spawner/north,/obj/structure/window/reinforced/spawner/west,/obj/item/rupee{desc = "A gift, right?"},/turf/open/floor/plasteel/grimy,/area/centcom/ferry)
+"jAn" = (/obj/structure/table/wood,/obj/structure/window/reinforced/spawner/north,/obj/structure/window/reinforced/spawner/west,/turf/open/floor/plasteel/grimy,/area/centcom/ferry)
"jAu" = (/obj/structure/barricade/security/ctf,/turf/open/floor/circuit/red,/area/ctf)
"jAD" = (/obj/structure/chair/wood/wings{dir = 8},/obj/effect/turf_decal/loading_area{dir = 1; icon_state = "drain"; name = "drain"},/turf/open/floor/wood,/area/centcom/control)
"jBx" = (/obj/effect/turf_decal/tile/red{dir = 1},/turf/open/floor/plasteel,/area/centcom/ferry)
@@ -2291,7 +2291,6 @@
"uiP" = (/obj/structure/table/wood,/obj/item/book/lorebooks/welcome_to_kinaris,/turf/open/floor/plasteel/grimy,/area/centcom/ferry)
"ulC" = (/obj/structure/table,/obj/machinery/computer/secure_data{dir = 8},/obj/structure/window{dir = 1},/turf/open/floor/carpet/royalblack,/area/centcom/ferry)
"ulD" = (/obj/effect/turf_decal/tile/neutral{dir = 1},/obj/effect/turf_decal/tile/neutral{dir = 8},/turf/open/floor/plasteel,/area/tdome/arena)
-"umu" = (/obj/structure/flora/ausbushes/grassybush,/obj/structure/flora/ausbushes/sparsegrass,/obj/structure/flora/ausbushes/fernybush,/obj/item/storage/backpack/duffelbag/drone{pixel_y = 2},/obj/effect/decal/cleanable/ash{name = "ashes of drone (760)"},/obj/item/clothing/head/hardhat/weldhat,/turf/open/floor/plasteel{dir = 6; icon_state = "asteroid8"; name = "sand"},/area/centcom/control)
"umy" = (/obj/structure/window{dir = 1},/obj/item/toy/beach_ball/holoball/dodgeball,/obj/effect/turf_decal/tile/red,/obj/effect/turf_decal/tile/red{dir = 1},/obj/effect/turf_decal/tile/red{dir = 8},/turf/open/floor/holofloor,/area/holodeck/rec_center/dodgeball)
"unA" = (/obj/structure/bed,/obj/machinery/light{dir = 8},/turf/open/floor/mineral/titanium/blue,/area/centcom/evac)
"unD" = (/obj/structure/table,/obj/item/toy/katana,/obj/item/toy/plush/carpplushie,/obj/effect/turf_decal/stripes/line{dir = 1},/turf/open/floor/plasteel,/area/centcom/evac)
@@ -2914,7 +2913,7 @@ fWSfWSnLjmrwgKdvZppfxxbosRAfWSfNxfNxfNxfNxfNxfNxfNxtLzteDvNzvNzteDtLzvNzvNzvNzxl
fWSfWSjxDdUEfPNfPNfPNrHlyhVfWSfNxfNxfNxfNxfNxfNxfNxjqfiJGvNzvNziJGjqfuBObjQvNzvNzvNzbjQvNzjqflGEuhZlGEvSEjqffNxfNxfNxfNxfNxfNxfWShPQtNUfrlfrlfrlfrlfrlfrlfrlfrlfrlfrlfrlfrlfrlfrlfrlfrlfrltNUkhpkhpiTtkhpkhpkhpkhpkhpyaajkFrZgkhpfxuqOYogDkhpbrYfCWlPNbrYbrYbrYbrYbrYoDQcdIkhpfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSeDPdmVbBFdZaeRApXKaiYtfqvtzqeNeDPdHsqxFdHspCQisUuEDadibbnshHfpBuqenCbtUQkasshHgmHshHshHaGmmCPshHayyeDPaEyfBIgYiaVugYiuLVaEyudbudbudbaEyfBIgYiaVugYiuLVaEyiYmkMejdSsjHduHcELrCVcphaEyieKboGboGboGyjTwEhboGboGrZPrZPrZPboGboGwEhyjTboGboGboGboGfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWS
fWSfWSlpSoMusPZqoXrOZvtqcOMfWSfNxfNxfNxfNxfNxfNxfNxjqfjqfeYGjqfjqfjqfjqfjqftLzeYGtLzjqfjqfjqftLztLztLzjqfjqffNxfNxfNxfNxfNxfNxfWShPQtNUfrlfrlfrlfrlfrlfrlfrlfrlfrlfrlfrlfrlfrlfrlfrlfrlfrltNUkhpoAAmUVocDliAfCDkhphxryaayaayaakhptNfgLDpoMkhpbrYfrKbrYbrYbrYbrYbrYbrYbrYvNukhpfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSxLwxLwxLwxLwxLwxLwfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSeDPtrXdHskGmeDPaiiqeNcfutfquFTeRAdHsqxFdHspCQcQMuEDuEDuEDixgshHgnBfIegnBshHixgktRfneshHshHshHshHlIGktRaEyaEyaEyxUCaEyaEytAXrIBgmogYitAXaEyaEyxUCaEyaEyaEyaEygYigYigYiaEygYigYigYiaEygIvboGbvxbvxjgMfBzboGgvAgvAgvAgvAgvAboGbvxfBzfBzbvxboGboGfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWS
fWSfWSwimvhwfPNfPNfPNrHldiWfWSfNxfNxfNxfNxfNxfNxfNxfNxtLzvNzvNzvNzcbevNzvNzvNzvNzvNzvNzvNzcbevNzvNzvNztLzfNxfNxfNxfNxfNxfNxfNxfWShPQtNUfrlfrlfrlfrlfrlfrlfrlfrlfrlfrlfrlfrlfrlfrlfrlfrlfrltNUkhpmUVmUVmUVmUVmUVkhpyaayaayaadrbkhpkhpkhpkhpkhpeufeufbrYbrYbrYbrYbrYbrYbrYvNukhpfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSxLwciKoCLycqchJxLwfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSeDPoJgrhqpKkeRAeNrqeNdWBvyGeheeRAeIpcmtoXMeDPaBwmLpbZJhLYhmkscCflrmWfxiLrwGuRZcJclxWoOImEmgSceWLxXVcJcrirgYiqZYpYierEaEykdLweohlRqlAnCXaEytyCpYiygQgYinhzaEynhzrirqICgYinUwnhznUwgYitnOboGboGboGboGboGboGtJrhdMoOUydigvAutLboGboGboGboGboGboGfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWS
-fWSfWSpZSbCeagCxHUejrwxKirqfWSfNxfNxfNxfNxfNxfNxfNxfNxtLzvNzrMVvNzrMVvNzrMVvNzrMVvNzrMVvNzrMVvNzrMVvNztLzfNxfNxfNxfNxfNxfNxfNxfWShPQtNUfrlfrlfrlfrlfrlfrlfrlfrlfrlfrlfrlfrlfrlfrlfrlfrlfrltNUkhpraxmUVmUVmUVlGdkhpvEPrFxuFNyaawXIbrYbrYbrYbrYbrYwXIbrYbrYbrYbrYbrYbrYbrYvNukhpfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSxLwlTQcvzcvztfGxLwxLwxLwxLwxLwxLwxLwxLwxLwxLwxLwxLwxLweDPeDPnIQeDPeDPeDPeRAeRAeRAeDPeDPcJcldjhJZeDPeDPeDPhJZchIcJceDPeDPeDPeDPeDPhJZeDPeDPeDPeDPeDPchIeDPeDPumuiYmgsEpYieMqgYitnBpdTpdTpdTdoWgYikhapYikRfiYmgYiaEygYigYigYiaEygYigYigYiaEygIvboGfWsmHRyfLtflboGgvAfBOfchfBOgvAboGtYVoFztYVtYVwRxreUfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWS
+fWSfWSpZSbCeagCxHUejrwxKirqfWSfNxfNxfNxfNxfNxfNxfNxfNxtLzvNzrMVvNzrMVvNzrMVvNzrMVvNzrMVvNzrMVvNzrMVvNztLzfNxfNxfNxfNxfNxfNxfNxfWShPQtNUfrlfrlfrlfrlfrlfrlfrlfrlfrlfrlfrlfrlfrlfrlfrlfrlfrltNUkhpraxmUVmUVmUVlGdkhpvEPrFxuFNyaawXIbrYbrYbrYbrYbrYwXIbrYbrYbrYbrYbrYbrYbrYvNukhpfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSxLwlTQcvzcvztfGxLwxLwxLwxLwxLwxLwxLwxLwxLwxLwxLwxLwxLweDPeDPnIQeDPeDPeDPeRAeRAeRAeDPeDPcJcldjhJZeDPeDPeDPhJZchIcJceDPeDPeDPeDPeDPhJZeDPeDPeDPeDPeDPchIeDPeDPcMDiYmgsEpYieMqgYitnBpdTpdTpdTdoWgYikhapYikRfiYmgYiaEygYigYigYiaEygYigYigYiaEygIvboGfWsmHRyfLtflboGgvAfBOfchfBOgvAboGtYVoFztYVtYVwRxreUfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWS
fWSfWSfWSndYtSzjLicKJkOYfWSfWSfNxfNxfNxfNxfNxfNxfNxfNxjqfjqfvNzvNzvNzvNzvNzvNzvNzvNzvNzvNzvNzvNzvNzjqfjqffNxfNxfNxfNxfNxfNxfNxfWShPQtNUfrlfrlfrlfrlfrlfrlfrlfrlfrlfrlfrlfrlfrlfrlfrlfrlfrltNUkhprpjnyjjTEmUVkXNkhpkhpkhpkhpamQkhpkhpkhpkhpkhpeufeufbrYbrYbrYbrYbrYbrYbrYvNukhpfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSxLwxLweYpxLwxLwxLwoqJhLMiwjuFguFgjzZkeykmukJxxQnluAgNWxLwoXMkPgoXMhJZdHsdHsfJApzKpOclrioXMkPgqtClripOcpzKfJAdHsdHshJZsvGhgmsYEhqsozJttroETooqfxChFNhtJaaoaEyuJqgYimbCpYistpfeMhlRpdTwEzpdThlRhBJiIepYipYipYipYijEJpYipYipYivOhpYipYipYinmbgIviVsgIvgIvsIJgIvfuvgvAhdMfqmydibAIboGtYVtYVtYVtYVolvreUfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWS
fWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfNxfNxfNxfNxfNxfNxfNxfNxfNxjqfjqfjqfmUXjqfjqfjqfrrXjqfjqfjqfceajqfjqfjqffNxfNxfNxfNxfNxfNxfNxfNxfWShPQtNUfrlfrlfrlfrlfrlfrlfrlfrlfrlfrlfrlfrlfrlfrlfrlfrlfrltNUkhpkhpkhpkhpdbKkhpkhpfWSfWSfWSfWSfWSfWSfWSfWSkhpbrYfrKbrYbrYbrYbrYbrYbrYbrYvNukhpfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSxLwjcqwZWgeNmloxLwirmdgFniSuFguFguFguFgrNksRtxnsepdupwxLwdHsqxFdHsldjcmtqxFqxFqxFqxFqxFqxFqxFqxFqxFqxFqxFqxFqxFkPgoBEixguEDuEDuEDevHuEDfLylJVfgruEDuEDcrraEycMDgKLryxpYisfGeJAwEzpdTpdTpdTwEztlAvCLpYieuNgKLgYiaEyaEyaEyaEynnHaEyaEyaEyaEyeksboGetietietietietietietietietietietitYVetietietietietietietietifWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWS
fWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfNxfNxfNxfNxfNxfNxfNxfNxfNxfNxjqfiwDjrzfjdjqfpUYrMViLcjqfkRtgVVrHFjqffNxfNxfNxfNxfNxfNxfNxfNxfNxfWShPQtNUfrlfrlfrlfrlfrltNUtNUtNUtNUtNUtNUtNUfrlfrlfrlfrlfrltNUeJJelHhPQfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSkhpbrYbMcbpAbrYbrYjLvbrYbrYaEdrqMkhpfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSxLwdsdwZWdLwmwSkBOobblgRlgRlgRlgRtLqoujojlpeWaXJkkedtwxLwdHsqxFxMueDPeZqpigulCmAupigxwthKVqxFrxSpigmJbnOKpigxwtjTtcJcmDWuEDuEDuEDuEDuEDuEDgHKuEDlrduEDcsuaEynUwgYivuOsCbtYagYispavqbhlRcZkdGPgYibWxdwtnBrgYiqICaEyrirgYivOhpYipYiaEytYVtYVtYVetirCUusnetisrmtoVmDSmDStoVhaPetitYVtYVetimigfBHfBHfBHfBHqNTetifWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWSfWS
diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm
index 20ddeac19..de2ac0ee4 100644
--- a/code/__DEFINES/traits.dm
+++ b/code/__DEFINES/traits.dm
@@ -196,6 +196,7 @@
#define TRAIT_MACROPHILE "macrophile" //likes the big
#define TRAIT_MICROPHILE "microphile" //likes the small
#define TRAIT_APATHETIC "apathetic" //doesn't care
+#define TRAIT_LOW_PRESSURE_LUNGS "low_puressure_lungs" //used to lower kPa of Lavaland and other low kPa Atmos.
#define TRAIT_TOUGH "tough" //you have 10% more maxhealth
#define TRAIT_AUTO_CATCH_ITEM "auto_catch_item"
diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm
index 6375b7382..1a9f1a57a 100644
--- a/code/controllers/subsystem/ticker.dm
+++ b/code/controllers/subsystem/ticker.dm
@@ -697,7 +697,8 @@ SUBSYSTEM_DEF(ticker)
'hyperstation/sound/roundend/starbucks.ogg',
'hyperstation/sound/roundend/tired.ogg',
'hyperstation/sound/roundend/toys.ogg',
- 'hyperstation/sound/roundend/water.ogg'\
+ 'hyperstation/sound/roundend/water.ogg',
+ 'hyperstation/sound/roundend/whatiswrong.ogg'\
)
SEND_SOUND(world, sound(round_end_sound))
diff --git a/code/datums/traits/good.dm b/code/datums/traits/good.dm
index dc21a916e..668e9affa 100644
--- a/code/datums/traits/good.dm
+++ b/code/datums/traits/good.dm
@@ -267,6 +267,71 @@
if(quirk_holder)
quirk_holder.blood_ratio = 1
+/datum/quirk/low_pressure_lungs
+ name = "Low Pressure Lungs"
+ desc = "You're not quite used to the high air pressure! Perfect for characters who are used to the atmosphere of Lavaland or Asteroids!"
+ value = -1
+ category = CATEGORY_BODY
+ mob_trait = TRAIT_LOW_PRESSURE_LUNGS
+ var/slot_string = "lungs"
+ var/specific = null
+ gain_text = "You feel your lungs taking in more air."
+ lose_text = "You feel like the air is not as plentiful."
+ medical_record_text = "During physical examination, patient was found to have lungs adapted to low pressure environments."
+
+/datum/quirk/low_pressure_lungs/add() //*Edits your lungs*
+ var/obj/item/organ/lungs/lungs = quirk_holder.getorgan(/obj/item/organ/lungs)
+
+ lungs.safe_oxygen_min = 3
+ lungs.safe_oxygen_max = 18
+
+
+ lungs.cold_level_1_threshold = 280
+ lungs.cold_level_2_threshold = 240
+ lungs.cold_level_3_threshold = 200
+
+ lungs.heat_level_1_threshold = 400
+ lungs.heat_level_2_threshold = 600
+
+/datum/quirk/low_pressure_lungs/remove() //*Unedits your lungs*
+ var/obj/item/organ/lungs/lungs = quirk_holder.getorgan(/obj/item/organ/lungs)
+
+ lungs.safe_oxygen_min = 16
+ lungs.safe_oxygen_max = 50
+
+
+ lungs.cold_level_1_threshold = 260
+ lungs.cold_level_2_threshold = 200
+ lungs.cold_level_3_threshold = 120
+
+ lungs.heat_level_1_threshold = 360
+ lungs.heat_level_2_threshold = 400
+
+/datum/quirk/low_pressure_lungs/post_add()
+ to_chat(quirk_holder, "Your [slot_string] feel the heavy pressure of the air.")
+
+/datum/quirk/low_pressure_lungs/on_spawn()
+ var/mob/living/carbon/human/H = quirk_holder
+
+ //Adding Breath Mask and Emergency Tank
+ var/obj/item/clothing/mask/breath/breath = new(get_turf(H))
+ var/list/breth = list ( //shu-ut up, Brethyyyy.
+ "face" = SLOT_WEAR_MASK
+ )
+ H.equip_in_one_of_slots(breath, breth, qdel_on_fail = FALSE)
+
+ var/obj/item/tank/internals/emergency_oxygen/emergency_oxygen = new(get_turf(H))
+ var/list/oxy_tank = list (
+ "left pocket" = SLOT_L_STORE,
+ "right pocket" = SLOT_R_STORE,
+ "hands" = SLOT_HANDS
+ )
+ emergency_oxygen.air_contents.gases[/datum/gas/oxygen] = (6*ONE_ATMOSPHERE)*6/(R_IDEAL_GAS_EQUATION*T20C)
+ H.equip_in_one_of_slots(emergency_oxygen, oxy_tank, qdel_on_fail = FALSE)
+ H.internal = emergency_oxygen
+ H.update_internals_hud_icon(1)
+ H.regenerate_icons()
+
/datum/quirk/tough
name = "Tough"
desc = "Your body is abnormally enduring and can take 10% more damage."
diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_events.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_events.dm
index 1a2f42a28..ce96ece44 100644
--- a/code/game/gamemodes/dynamic/dynamic_rulesets_events.dm
+++ b/code/game/gamemodes/dynamic/dynamic_rulesets_events.dm
@@ -717,7 +717,7 @@
typepath = /datum/round_event/camera_failure
requirements = list(0,0,0,0,0,0,0,0,0,0)
high_population_requirement = 0
- weight = 100
+ weight = 8
cost = 2
repeatable_weight_decrease = 2 //Slightly drop the weight each time it is called to keep the pool from getting too diluted as the round goes on.
repeatable = TRUE
@@ -726,12 +726,14 @@
/datum/dynamic_ruleset/event/filler
name = "Filler"
typepath = /datum/round_event/filler
+ requirements = list(0,0,0,0,0,0,0,0,0,0)
+ high_population_requirement = 0
chaos_max = 3
+ weight = 9
cost = 1
- weight = 200
repeatable_weight_decrease = 0
repeatable = TRUE
- occurances_max = 35
+ occurances_max = 250 //Testing with this number for now
/datum/dynamic_ruleset/event/disease_outbreak
name = "Disease Outbreak"
@@ -772,8 +774,8 @@
typepath = /datum/round_event/mass_hallucination
requirements = list(0,0,0,0,0,0,0,0,0,0)
high_population_requirement = 0
- weight = 4
- cost = 2
+ weight = 1
+ cost = 4
repeatable_weight_decrease = 5
repeatable = TRUE
occurances_max = 2
@@ -810,7 +812,7 @@
requirements = list(101,101,0,0,0,0,0,0,0,0)
high_population_requirement = 0
weight = 5
- cost = 2 //STOP ROLLING SO MUCH YOU MENACE
+ cost = 10 //STOP ROLLING SO MUCH YOU MENACE
repeatable_weight_decrease = 1
/datum/dynamic_ruleset/event/shuttle_loan
diff --git a/code/game/objects/items/defib.dm b/code/game/objects/items/defib.dm
index f3efb52d4..f4176748e 100644
--- a/code/game/objects/items/defib.dm
+++ b/code/game/objects/items/defib.dm
@@ -673,7 +673,7 @@
primetime = 10
return TRUE
if(istype(I, /obj/item/disk/medical/defib_decay))
- if(!timedeath == initial(timedeath))
+ if(timedeath != initial(timedeath))
to_chat(user, "This unit is already upgraded with this disk!")
return TRUE
to_chat(user, "You upgrade the unit with Longer Decay upgrade disk!")
diff --git a/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm b/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm
index 57800e5cd..ecd7de059 100644
--- a/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm
+++ b/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm
@@ -662,8 +662,8 @@ This is here to make the tiles around the station mininuke change when it's arme
var/datum/round_event_control/operative/loneop = locate(/datum/round_event_control/operative) in SSevents.control
if(istype(loneop))
loneop.weight += 1
- if(loneop.weight % 5 == 0)
- message_admins("[src] is stationary in [ADMIN_VERBOSEJMP(newturf)]. The weight of Lone Operative is now [loneop.weight].")
+// if(loneop.weight % 5 == 0)
+// message_admins("[src] is stationary in [ADMIN_VERBOSEJMP(newturf)]. The weight of Lone Operative is now [loneop.weight].")
log_game("[src] is stationary for too long in [loc_name(newturf)], and has increased the weight of the Lone Operative event to [loneop.weight].")
else
lastlocation = newturf
@@ -671,8 +671,8 @@ This is here to make the tiles around the station mininuke change when it's arme
var/datum/round_event_control/operative/loneop = locate(/datum/round_event_control/operative) in SSevents.control
if(istype(loneop) && prob(loneop.weight))
loneop.weight = max(loneop.weight - 1, 0)
- if(loneop.weight % 5 == 0)
- message_admins("[src] is on the move (currently in [ADMIN_VERBOSEJMP(newturf)]). The weight of Lone Operative is now [loneop.weight].")
+// if(loneop.weight % 5 == 0)
+// message_admins("[src] is on the move (currently in [ADMIN_VERBOSEJMP(newturf)]). The weight of Lone Operative is now [loneop.weight].")
log_game("[src] being on the move has reduced the weight of the Lone Operative event to [loneop.weight].")
/obj/item/disk/nuclear/examine(mob/user)
diff --git a/code/modules/events/holiday/vday.dm b/code/modules/events/holiday/vday.dm
index ac0a76057..269cad9fb 100644
--- a/code/modules/events/holiday/vday.dm
+++ b/code/modules/events/holiday/vday.dm
@@ -6,10 +6,10 @@
/datum/round_event_control/valentines
name = "Valentines!"
- holidayID = VALENTINES
+ //holidayID = VALENTINES this is just asking for noncon and bad shit
typepath = /datum/round_event/valentines
- weight = -1 //forces it to be called, regardless of weight
- max_occurrences = 1
+ weight = 0
+ max_occurrences = 0
earliest_start = 0 MINUTES
/datum/round_event/valentines/start()
diff --git a/code/modules/food_and_drinks/food/snacks_other.dm b/code/modules/food_and_drinks/food/snacks_other.dm
index 30f12279c..3a587d2ae 100644
--- a/code/modules/food_and_drinks/food/snacks_other.dm
+++ b/code/modules/food_and_drinks/food/snacks_other.dm
@@ -256,6 +256,45 @@
tastes = list("fudge" = 1)
foodtype = JUNKFOOD | SUGAR
+/obj/item/reagent_containers/food/snacks/choccogun
+ name = "golden gun"
+ desc = "It's a golden gun! Probably will instantly kill who ever is hit."
+ icon_state = "pyritegun"
+ w_class = WEIGHT_CLASS_SMALL
+ attack_verb = list("pistol whipped")
+ bonus_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/consumable/sugar = 5, /datum/reagent/iron = 1)
+ list_reagents = list(/datum/reagent/consumable/nutriment = 15, /datum/reagent/consumable/coco = 5)
+ filling_color = "#A0522D"
+ tastes = list("fudge" = 1, "metal" = 1)
+ bitesize = 0.1
+ foodtype = JUNKFOOD | SUGAR
+
+ var is_wrapped = 1
+
+/obj/item/reagent_containers/food/snacks/choccogun/afterattack(user)
+ if (is_wrapped == 1)
+ to_chat(user, "*click*")
+ playsound(src, "gun_dry_fire", 30, 1)
+ else //no more clicking chocolate for you. <3
+ return
+
+/obj/item/reagent_containers/food/snacks/choccogun/attack_self(mob/user)
+ if (is_wrapped == 1)
+ to_chat(user, "You look at the gun and find it's made of chocolate, unwrapping it.")
+
+ name = "chocolate gun"
+ desc = "This explains why it wasn't firing at all.."
+ icon_state = "choccogun"
+ bonus_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/consumable/sugar = 5, /datum/reagent/gold = 1)
+ list_reagents = list(/datum/reagent/consumable/nutriment = 15, /datum/reagent/consumable/coco = 5)
+ filling_color = "#A0522D"
+ tastes = list("fudge" = 1)
+ foodtype = JUNKFOOD | SUGAR
+
+ is_wrapped = 0
+ else
+ return
+
/obj/item/reagent_containers/food/snacks/chocoorange
name = "chocolate orange"
desc = "A festive chocolate orange."
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm
index 5b5ff4c5a..3cbb62fee 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm
@@ -49,6 +49,15 @@
result = /obj/item/reagent_containers/food/snacks/chocoorange
subcategory = CAT_MISCFOOD
+/datum/crafting_recipe/food/choccogun
+ name = "Choco gun"
+ reqs = list(
+ /datum/reagent/iron = 1,
+ /obj/item/reagent_containers/food/snacks/chocolatebar = 1,
+ )
+ result = /obj/item/reagent_containers/food/snacks/choccogun
+ subcategory = CAT_MISCFOOD
+
/datum/crafting_recipe/food/loadedbakedpotato
name = "Loaded baked potato"
time = 40
diff --git a/code/modules/mob/living/carbon/human/species_types/podpeople.dm b/code/modules/mob/living/carbon/human/species_types/podpeople.dm
index 786357dd5..d18357342 100644
--- a/code/modules/mob/living/carbon/human/species_types/podpeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/podpeople.dm
@@ -3,7 +3,10 @@
name = "Podperson"
id = "pod"
default_color = "59CE00"
- species_traits = list(MUTCOLORS,EYECOLOR)
+ species_traits = list(MUTCOLORS,EYECOLOR,LIPS,HAIR,FACEHAIR,WINGCOLOR)
+ inherent_biotypes = list(MOB_ORGANIC, MOB_HUMANOID)
+ mutant_bodyparts = list("mam_tail", "mam_ears", "mam_body_markings", "mam_snouts", "legs", "deco_wings")
+ default_features = list("mcolor" = "FFF","mcolor2" = "FFF","mcolor3" = "FFF", "mam_snouts" = "None", "mam_tail" = "None", "mam_ears" = "None", "mam_body_markings" = "None", "legs" = "Normal Legs" , "deco_wings" = "None" )
attack_verb = "slash"
attack_sound = 'sound/weapons/slice.ogg'
miss_sound = 'sound/weapons/slashmiss.ogg'
@@ -68,6 +71,37 @@
if(/obj/item/projectile/energy/florayield)
H.nutrition = min(H.nutrition+30, NUTRITION_LEVEL_FULL)
+/datum/species/pod/spec_death(gibbed, mob/living/carbon/human/H)
+ if(H)
+ stop_wagging_tail(H)
+
+/datum/species/pod/spec_stun(mob/living/carbon/human/H,amount)
+ if(H)
+ stop_wagging_tail(H)
+ . = ..()
+
+/datum/species/pod/can_wag_tail(mob/living/carbon/human/H)
+ return ("mam_tail" in mutant_bodyparts) || ("mam_waggingtail" in mutant_bodyparts)
+
+/datum/species/pod/is_wagging_tail(mob/living/carbon/human/H)
+ return ("mam_waggingtail" in mutant_bodyparts)
+
+/datum/species/pod/start_wagging_tail(mob/living/carbon/human/H)
+ if("mam_tail" in mutant_bodyparts)
+ mutant_bodyparts -= "mam_tail"
+ mutant_bodyparts |= "mam_waggingtail"
+ H.update_body()
+
+/datum/species/pod/stop_wagging_tail(mob/living/carbon/human/H)
+ if("mam_waggingtail" in mutant_bodyparts)
+ mutant_bodyparts -= "mam_waggingtail"
+ mutant_bodyparts |= "mam_tail"
+ H.update_body()
+
+
+/datum/species/pod/qualifies_for_rank(rank, list/features)
+ return TRUE
+
/datum/species/pod/pseudo_weak
id = "podweak"
limbs_id = "pod"
diff --git a/code/modules/reagents/reagent_containers/Chemical_tongue.dm b/code/modules/reagents/reagent_containers/Chemical_tongue.dm
index 275091254..d2f13dfc0 100644
--- a/code/modules/reagents/reagent_containers/Chemical_tongue.dm
+++ b/code/modules/reagents/reagent_containers/Chemical_tongue.dm
@@ -57,7 +57,7 @@
if(user.a_intent == INTENT_DISARM && user.zone_selected == BODY_ZONE_PRECISE_MOUTH)
if(M != user)
M.visible_message("[user] attempts nuzzles into [M]'s.", \
- "[user] attempts to bump his snout against yours.")
+ "[user] attempts to bump their snout against yours.")
if(!do_mob(user, M, 10))
return
playsound(M.loc,'sound/effects/attackblob.ogg', rand(10,50), 1)
diff --git a/code/modules/vending/wardrobes.dm b/code/modules/vending/wardrobes.dm
index 5f9dee9d4..e4ae744fe 100644
--- a/code/modules/vending/wardrobes.dm
+++ b/code/modules/vending/wardrobes.dm
@@ -233,12 +233,9 @@
/obj/item/clothing/head/soft/black = 4,
/obj/item/clothing/shoes/sneakers/black = 4,
/obj/item/reagent_containers/rag = 4,
- /obj/item/storage/box/beanbag = 1,
- /obj/item/clothing/suit/armor/vest/alt = 1,
/obj/item/circuitboard/machine/dish_drive = 1,
/obj/item/clothing/glasses/sunglasses/reagent = 1,
- /obj/item/clothing/neck/petcollar = 3,
- /obj/item/storage/belt/bandolier = 1)
+ /obj/item/clothing/neck/petcollar = 3)
refill_canister = /obj/item/vending_refill/wardrobe/bar_wardrobe
/obj/item/vending_refill/wardrobe/bar_wardrobe
diff --git a/config/game_options.txt b/config/game_options.txt
index 495040381..06753fd5e 100644
--- a/config/game_options.txt
+++ b/config/game_options.txt
@@ -440,7 +440,7 @@ ROUNDSTART_RACES felinid
#ROUNDSTART_RACES skeleton
#ROUNDSTART_RACES zombie
#ROUNDSTART_RACES slime
-#ROUNDSTART_RACES pod
+ROUNDSTART_RACES pod
#ROUNDSTART_RACES military_synth
#ROUNDSTART_RACES agent
diff --git a/hyperstation/code/modules/mob/dead/new_player/sprite_accessories.dm b/hyperstation/code/modules/mob/dead/new_player/sprite_accessories.dm
index dc73ebf05..7178f1b32 100644
--- a/hyperstation/code/modules/mob/dead/new_player/sprite_accessories.dm
+++ b/hyperstation/code/modules/mob/dead/new_player/sprite_accessories.dm
@@ -102,6 +102,16 @@ SNOUTS
icon_state = "chemlight"
icon = 'hyperstation/icons/mob/char_snouts.dmi'
+/datum/sprite_accessory/mam_snouts/pinata
+ name = "pinata (Hyper)"
+ icon_state = "pinata"
+ icon = 'hyperstation/icons/mob/char_snouts.dmi'
+
+/datum/sprite_accessory/mam_snouts/pinatasmile
+ name = "pinata Smile (Hyper)"
+ icon_state = "pinatasmile"
+ icon = 'hyperstation/icons/mob/char_snouts.dmi'
+
/*
EARS
==========================================================
@@ -455,6 +465,11 @@ from modular_citadel/code/modules/mob/dead/new_player/sprite_accessories.dm:
icon_state = "raccalt"
icon = 'hyperstation/icons/mob/char_markings.dmi'
+/datum/sprite_accessory/mam_body_markings/pinata
+ name = "pinata (Hyper)"
+ icon_state = "pinata"
+ icon = 'hyperstation/icons/mob/char_markings.dmi'
+
/*
TAUR BODIES
==========================================================
@@ -613,6 +628,56 @@ from code/modules/mob/dead/new_player/sprite_accessories/hair_head.dm:
name = "Emo (Hyper)"
icon_state = "hair_emoh"
+/datum/sprite_accessory/hair/espada
+ name = "Espada (Plant) (Hyper)"
+ icon_state = "hair_espada"
+ icon = 'hyperstation/icons/mob/char_hair.dmi'
+
+/datum/sprite_accessory/hair/guarana
+ name = "Guarana (Plant) (Hyper)"
+ icon_state = "hair_guarana"
+ icon = 'hyperstation/icons/mob/char_hair_big.dmi'
+ center = TRUE
+ dimension_y = 38
+
+/datum/sprite_accessory/hair/ipe
+ name = "Ipe (Plant) (Hyper)"
+ icon_state = "hair_ipe"
+ icon = 'hyperstation/icons/mob/char_hair_big.dmi'
+ center = TRUE
+ dimension_y = 38
+
+/datum/sprite_accessory/hair/narciso
+ name = "Narciso (Plant) (Hyper)"
+ icon_state = "hair_narciso"
+ icon = 'hyperstation/icons/mob/char_hair.dmi'
+
+/datum/sprite_accessory/hair/ninfeia
+ name = "Ninfeia (Plant) (Hyper)"
+ icon_state = "hair_ninfeia"
+ icon = 'hyperstation/icons/mob/char_hair_big.dmi'
+ center = TRUE
+ dimension_y = 38
+
+/datum/sprite_accessory/hair/paubrasil
+ name = "Pau-Brasil (Plant) (Hyper)"
+ icon_state = "hair_paubrasil"
+ icon = 'hyperstation/icons/mob/char_hair_big.dmi'
+ center = TRUE
+ dimension_y = 38
+
+/datum/sprite_accessory/hair/roseira
+ name = "Roseira (Plant) (Hyper)"
+ icon_state = "hair_roseira"
+ icon = 'hyperstation/icons/mob/char_hair_big.dmi'
+ center = TRUE
+ dimension_y = 38
+
+/datum/sprite_accessory/hair/samambaia
+ name = "Samambaia (Plant) (Hyper)"
+ icon_state = "hair_samambaia"
+ icon = 'hyperstation/icons/mob/char_hair.dmi'
+
/*
BEARDS
==========================================================
diff --git a/hyperstation/code/obj/ZaoCorp/Zweihander.dm b/hyperstation/code/obj/ZaoCorp/Zweihander.dm
index e79fa473e..bc3d7256a 100644
--- a/hyperstation/code/obj/ZaoCorp/Zweihander.dm
+++ b/hyperstation/code/obj/ZaoCorp/Zweihander.dm
@@ -206,9 +206,9 @@
if(attack_type == UNARMED_ATTACK)
final_block_chance = 100 //How easy is it to block a hand?
if(attack_type == PROJECTILE_ATTACK)
- final_block_chance = 80 //With the suit it helps against bullets
+ final_block_chance = 95 //With the suit it helps against bullets
if(attack_type == THROWN_PROJECTILE_ATTACK)
- final_block_chance = 50 //Sometimes you may be off guard
+ final_block_chance = 100 //Sometimes you may be off guard
if(attack_type == LEAP_ATTACK)
final_block_chance = 100 //BRACE
return ..()
@@ -218,4 +218,4 @@
"You accidentally hit yourself with [src]!")
SEND_SIGNAL(user, COMSIG_LIVING_MINOR_SHOCK)
user.Knockdown(stunforce*3)
- playsound(get_turf(src), 'sound/effects/woodhit.ogg', 75, 1, -1)
\ No newline at end of file
+ playsound(get_turf(src), 'sound/effects/woodhit.ogg', 75, 1, -1)
diff --git a/hyperstation/icons/mob/char_hair.dmi b/hyperstation/icons/mob/char_hair.dmi
index da5512b74..fc0819e43 100644
Binary files a/hyperstation/icons/mob/char_hair.dmi and b/hyperstation/icons/mob/char_hair.dmi differ
diff --git a/hyperstation/icons/mob/char_hair_big.dmi b/hyperstation/icons/mob/char_hair_big.dmi
new file mode 100644
index 000000000..b63021948
Binary files /dev/null and b/hyperstation/icons/mob/char_hair_big.dmi differ
diff --git a/hyperstation/icons/mob/char_markings.dmi b/hyperstation/icons/mob/char_markings.dmi
index 916587c6b..5aff5e4d1 100644
Binary files a/hyperstation/icons/mob/char_markings.dmi and b/hyperstation/icons/mob/char_markings.dmi differ
diff --git a/hyperstation/icons/mob/char_snouts.dmi b/hyperstation/icons/mob/char_snouts.dmi
index 92c21d9c1..92b3163d8 100644
Binary files a/hyperstation/icons/mob/char_snouts.dmi and b/hyperstation/icons/mob/char_snouts.dmi differ
diff --git a/hyperstation/sound/roundend/whatiswrong.ogg b/hyperstation/sound/roundend/whatiswrong.ogg
new file mode 100644
index 000000000..af9e6e862
Binary files /dev/null and b/hyperstation/sound/roundend/whatiswrong.ogg differ
diff --git a/icons/obj/food/food.dmi b/icons/obj/food/food.dmi
index 355bd43fd..e473b84fb 100644
Binary files a/icons/obj/food/food.dmi and b/icons/obj/food/food.dmi differ
diff --git a/icons/obj/power.dmi b/icons/obj/power.dmi
index 25e6b1d37..a065a3aa4 100644
Binary files a/icons/obj/power.dmi and b/icons/obj/power.dmi differ
diff --git a/icons/obj/stock_parts.dmi b/icons/obj/stock_parts.dmi
index fbc8be547..b25e495e6 100644
Binary files a/icons/obj/stock_parts.dmi and b/icons/obj/stock_parts.dmi differ
diff --git a/icons/obj/storage.dmi b/icons/obj/storage.dmi
index be186ba96..91165141d 100644
Binary files a/icons/obj/storage.dmi and b/icons/obj/storage.dmi differ
diff --git a/modular_citadel/code/modules/jobs/job_types/cargo_service.dm b/modular_citadel/code/modules/jobs/job_types/cargo_service.dm
index eeb913053..8ac1663d3 100644
--- a/modular_citadel/code/modules/jobs/job_types/cargo_service.dm
+++ b/modular_citadel/code/modules/jobs/job_types/cargo_service.dm
@@ -1,7 +1,3 @@
-/datum/job/bartender
- access = list(ACCESS_HYDROPONICS, ACCESS_BAR, ACCESS_KITCHEN, ACCESS_MORGUE, ACCESS_WEAPONS, ACCESS_MINERAL_STOREROOM)
- minimal_access = list(ACCESS_BAR, ACCESS_MINERAL_STOREROOM)
-
/datum/job/qm
department_head = list("Captain")
supervisors = "the captain"
@@ -28,4 +24,4 @@
department_head = list("Quartermaster")
supervisors = "the quartermaster"
- access = list(ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM)
\ No newline at end of file
+ access = list(ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM)