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, };