diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm index eea37f8b8d7..6f2a45025bd 100644 --- a/code/game/machinery/suit_storage_unit.dm +++ b/code/game/machinery/suit_storage_unit.dm @@ -191,16 +191,17 @@ /obj/machinery/suit_storage_unit/cmo name = "chief medical officer's suit storage unit" mask_type = /obj/item/clothing/mask/breath - suit_type = /obj/item/mod/control/pre_equipped/medical + suit_type = /obj/item/mod/control/pre_equipped/salvation req_access = list(ACCESS_CMO) /obj/machinery/suit_storage_unit/cmo/secure secure = TRUE -//version of the SSU for medbay secondary storage. Includes magboots. //no it doesn't, it aint have shit for magboots +//version of the SSU for medbay secondary storage. This is scuffed but woe mapping conflicts /obj/machinery/suit_storage_unit/cmo/sec_storage name = "medical suit storage unit" mask_type = /obj/item/clothing/mask/gas + suit_type = /obj/item/mod/control/pre_equipped/medical /obj/machinery/suit_storage_unit/cmo/sec_storage/secure req_access = list(ACCESS_MEDICAL) diff --git a/code/game/objects/effects/spawners/random/traders/trader_department_spawners.dm b/code/game/objects/effects/spawners/random/traders/trader_department_spawners.dm index ed8351471eb..d3875025789 100644 --- a/code/game/objects/effects/spawners/random/traders/trader_department_spawners.dm +++ b/code/game/objects/effects/spawners/random/traders/trader_department_spawners.dm @@ -123,6 +123,7 @@ // Medical in general /obj/item/mod/construction/plating/rescue = 25, + /obj/item/mod/construction/plating/advanced = 25, /obj/item/gun/medbeam = 25, //Antags can see this to remove it if a threat, unlikely to happen with another midround /obj/item/bodyanalyzer = 25, /obj/item/circuitboard/sleeper/syndicate = 25, diff --git a/code/modules/mod/mod_construction.dm b/code/modules/mod/mod_construction.dm index b7482071654..5a12908469d 100644 --- a/code/modules/mod/mod_construction.dm +++ b/code/modules/mod/mod_construction.dm @@ -93,6 +93,10 @@ theme = /datum/mod_theme/research materials = list(MAT_METAL = 6000, MAT_GLASS = 1000, MAT_URANIUM = 2000, MAT_PLASMA = 1000) +/obj/item/mod/construction/plating/salvation + theme = /datum/mod_theme/salvation + materials = list(MAT_METAL = 6000, MAT_GLASS = 1000, MAT_URANIUM = 2000, MAT_PLASMA = 1000) + #define START_STEP "start" #define CORE_STEP "core" #define SCREWED_CORE_STEP "screwed_core" diff --git a/code/modules/mod/mod_theme.dm b/code/modules/mod/mod_theme.dm index 9cb3665924c..b0cd6240459 100644 --- a/code/modules/mod/mod_theme.dm +++ b/code/modules/mod/mod_theme.dm @@ -558,6 +558,68 @@ /obj/item/mod/armor/mod_theme_rescue armor = list(MELEE = 20, BULLET = 20, LASER = 5, ENERGY = 5, BOMB = 10, RAD = 250, FIRE = 150, ACID = 150) //Extra melee / bullet armor for if they get caught in a fight. Of course, no laser armor. +/datum/mod_theme/salvation + name = "'Salvation' hazard" + desc = "An experimental medical suit designed for emergency care in conflict zones and extreme environmental hazards." + extended_desc = "An experimental upgrade to the Apollo and Valkyrie lines, the D-142E 'Salvation' is a bulky, moderately-armored medical modsuit designed by DeForest Medical Corperation. \ + Sacrificing the light-weight design of previous iterations for additional protection from both weapons and environmental factors, while boasting a more powerful core and servos to partially offset the excess weight. \ + The suit's armor has seen even more improvements with a careful mix of composite and standard ballistic armor, along with an advanced CBRN active protection system. \ + The experimental nature of this suit makes it exclusive to the most practical and wealthy positions outside DeForest testing." + default_skin = "salvation" + armor_type_1 = /obj/item/mod/armor/mod_theme_salvation + resistance_flags = ACID_PROOF + flag_2_flags = RAD_PROTECT_CONTENTS_2 // only protects stored items + max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT + charge_drain = DEFAULT_CHARGE_DRAIN * 2 + slowdown_active = 0.35 + inbuilt_modules = list(/obj/item/mod/module/cbrn) + allowed_suit_storage = list( + /obj/item/healthanalyzer, + /obj/item/reagent_containers/dropper, + /obj/item/reagent_containers/glass/beaker, + /obj/item/reagent_containers/glass/bottle, + /obj/item/reagent_containers/hypospray, + /obj/item/reagent_containers/syringe, + /obj/item/stack/medical, + /obj/item/sensor_device, + /obj/item/storage/pill_bottle, + /obj/item/storage/bag/chemistry, + /obj/item/storage/bag/bio, + /obj/item/melee/classic_baton/telescopic, + /obj/item/gun + ) + skins = list( + "salvation" = list( + HELMET_FLAGS = list( + UNSEALED_LAYER = COLLAR_LAYER, + + SEALED_CLOTHING = THICKMATERIAL | STOPSPRESSUREDMAGE | BLOCK_GAS_SMOKE_EFFECT | BLOCKHAIR, + UNSEALED_INVISIBILITY = HIDEFACE, + SEALED_INVISIBILITY = HIDEMASK | HIDEEYES | HIDEEARS | HIDEFACE, + SEALED_COVER = HEADCOVERSMOUTH | HEADCOVERSEYES, + ), + CHESTPLATE_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDMAGE, + SEALED_INVISIBILITY = HIDEJUMPSUIT | HIDETAIL, + ), + GAUNTLETS_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDMAGE, + CAN_OVERSLOT = TRUE, + ), + BOOTS_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDMAGE, + CAN_OVERSLOT = TRUE, + ), + ), + ) + +/obj/item/mod/armor/mod_theme_salvation + armor = list(MELEE = 25, BULLET = 20, LASER = 15, ENERGY = 10, BOMB = 25, RAD = 150, FIRE = 250, ACID = 150) //Extra armor in compensation of being slower then, and an improvement of the valkyrie. + + /datum/mod_theme/research name = "'Minerva' research" desc = "A powered EOD suit produced by Aussec Armory. Absolutely unmatched explosive and acid protection, along with heavy conventional armor and high modding potential." diff --git a/code/modules/mod/mod_types.dm b/code/modules/mod/mod_types.dm index 779e8c0b982..309bb4f5067 100644 --- a/code/modules/mod/mod_types.dm +++ b/code/modules/mod/mod_types.dm @@ -181,6 +181,23 @@ /obj/item/mod/module/analyzer, ) +/obj/item/mod/control/pre_equipped/salvation + icon_state = "salvation-control" + theme = /datum/mod_theme/salvation + applied_cell = /obj/item/stock_parts/cell/super + applied_modules = list( + /obj/item/mod/module/storage/large_capacity, + /obj/item/mod/module/injector, + /obj/item/mod/module/defibrillator, + /obj/item/mod/module/monitor, + /obj/item/mod/module/analyzer, + ) + default_pins = list( + /obj/item/mod/module/defibrillator, + /obj/item/mod/module/analyzer, + /obj/item/mod/module/cbrn, + ) + /obj/item/mod/control/pre_equipped/research icon_state = "research-control" theme = /datum/mod_theme/research diff --git a/code/modules/mod/modules/modules_medical.dm b/code/modules/mod/modules/modules_medical.dm index cd7e1426651..8b3dc0c8519 100644 --- a/code/modules/mod/modules/modules_medical.dm +++ b/code/modules/mod/modules/modules_medical.dm @@ -151,3 +151,44 @@ name = "MOD health analyzer" desc = "A integrated body scanner that allows the user to scan vital signs of a patient." flags = NODROP + +/obj/item/mod/module/cbrn + name = "CBRN Protection System" + desc = "An active protection system that forms a complete biological shield around the wearer when active, \ + greatly limiting movement and spiking power usage to completely protect against chemical, biological, radiological, and nuclear hazards." + icon_state = "cbrn" + module_type = MODULE_TOGGLE + cooldown_time = 0.5 SECONDS + active_power_cost = DEFAULT_CHARGE_DRAIN * 6 // Eats power for its protection + incompatible_modules = list(/obj/item/mod/module/cbrn) + removable = FALSE // Exclusive to the CMO suit + materials = list(MAT_METAL = 15000, MAT_TITANIUM = 5000, MAT_URANIUM = 5000) + /// Speed lowered to the control unit. + var/speed_lowered = 0.15 + /// Original armor of the suit, simpler solution to resolve subtracting infinities + var/original_armor = null + +/obj/item/mod/module/cbrn/on_activation() + . = ..() + if(!.) + return + playsound(src, 'sound/mecha/mechmove03.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + to_chat(mod.wearer, SPAN_NOTICE("Environmental protection enabled, biological shield raised, mobility decreased.")) + var/list/parts = mod.mod_parts + mod + for(var/obj/item/part as anything in parts) + original_armor = part.armor + part.armor = part.armor.modifyRating(0, 0, 0, 0, 10, INFINITY, 0, INFINITY, 0) // due to infinities and non-zeros, attach and detach wont work, there is probably a much better solution + part.slowdown += (speed_lowered) + +/obj/item/mod/module/cbrn/on_deactivation(display_message = TRUE, deleting = FALSE) + . = ..() + if(!.) + return + if(!deleting) + playsound(src, 'sound/mecha/mechmove03.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + to_chat(mod.wearer, SPAN_NOTICE("Environmental protection disabled, biological shield lowered, mobility increased.")) + var/list/parts = mod.mod_parts + mod + for(var/obj/item/part as anything in parts) + part.armor = original_armor + part.slowdown -= (speed_lowered) + diff --git a/icons/mob/clothing/modsuit/mod_clothing.dmi b/icons/mob/clothing/modsuit/mod_clothing.dmi index 2b11edd7f54..50bebe3e66e 100644 Binary files a/icons/mob/clothing/modsuit/mod_clothing.dmi and b/icons/mob/clothing/modsuit/mod_clothing.dmi differ diff --git a/icons/mob/clothing/modsuit/species/diona_modsuits.dmi b/icons/mob/clothing/modsuit/species/diona_modsuits.dmi index 7d61dd7feda..78aa6150b92 100644 Binary files a/icons/mob/clothing/modsuit/species/diona_modsuits.dmi and b/icons/mob/clothing/modsuit/species/diona_modsuits.dmi differ diff --git a/icons/mob/clothing/modsuit/species/drask_modsuits.dmi b/icons/mob/clothing/modsuit/species/drask_modsuits.dmi index 50b7dec3714..7b2af895ef0 100644 Binary files a/icons/mob/clothing/modsuit/species/drask_modsuits.dmi and b/icons/mob/clothing/modsuit/species/drask_modsuits.dmi differ diff --git a/icons/mob/clothing/modsuit/species/grey_helmets.dmi b/icons/mob/clothing/modsuit/species/grey_helmets.dmi index d6c1c0eac3e..97feb89062e 100644 Binary files a/icons/mob/clothing/modsuit/species/grey_helmets.dmi and b/icons/mob/clothing/modsuit/species/grey_helmets.dmi differ diff --git a/icons/mob/clothing/modsuit/species/kidan_modsuits.dmi b/icons/mob/clothing/modsuit/species/kidan_modsuits.dmi index 04905c00f7f..652c32607de 100644 Binary files a/icons/mob/clothing/modsuit/species/kidan_modsuits.dmi and b/icons/mob/clothing/modsuit/species/kidan_modsuits.dmi differ diff --git a/icons/mob/clothing/modsuit/species/monitor_helmets.dmi b/icons/mob/clothing/modsuit/species/monitor_helmets.dmi index 9aba55cb795..d0d41e84311 100644 Binary files a/icons/mob/clothing/modsuit/species/monitor_helmets.dmi and b/icons/mob/clothing/modsuit/species/monitor_helmets.dmi differ diff --git a/icons/mob/clothing/modsuit/species/nian_modsuits.dmi b/icons/mob/clothing/modsuit/species/nian_modsuits.dmi index 1851eb421a9..6935de99b8d 100644 Binary files a/icons/mob/clothing/modsuit/species/nian_modsuits.dmi and b/icons/mob/clothing/modsuit/species/nian_modsuits.dmi differ diff --git a/icons/mob/clothing/modsuit/species/skrell_modsuits.dmi b/icons/mob/clothing/modsuit/species/skrell_modsuits.dmi index f8fba2b4140..f2f091bca9b 100644 Binary files a/icons/mob/clothing/modsuit/species/skrell_modsuits.dmi and b/icons/mob/clothing/modsuit/species/skrell_modsuits.dmi differ diff --git a/icons/mob/clothing/modsuit/species/taj_modsuits.dmi b/icons/mob/clothing/modsuit/species/taj_modsuits.dmi index 9bb93090282..fd5c409f1aa 100644 Binary files a/icons/mob/clothing/modsuit/species/taj_modsuits.dmi and b/icons/mob/clothing/modsuit/species/taj_modsuits.dmi differ diff --git a/icons/mob/clothing/modsuit/species/unathi_modsuits.dmi b/icons/mob/clothing/modsuit/species/unathi_modsuits.dmi index b213f06a4fb..8c813e71908 100644 Binary files a/icons/mob/clothing/modsuit/species/unathi_modsuits.dmi and b/icons/mob/clothing/modsuit/species/unathi_modsuits.dmi differ diff --git a/icons/mob/clothing/modsuit/species/vox_modsuits.dmi b/icons/mob/clothing/modsuit/species/vox_modsuits.dmi index b04557af04e..ba8db9e1d0c 100644 Binary files a/icons/mob/clothing/modsuit/species/vox_modsuits.dmi and b/icons/mob/clothing/modsuit/species/vox_modsuits.dmi differ diff --git a/icons/mob/clothing/modsuit/species/vulp_modsuits.dmi b/icons/mob/clothing/modsuit/species/vulp_modsuits.dmi index 088ff2a75ee..9ad9a717512 100644 Binary files a/icons/mob/clothing/modsuit/species/vulp_modsuits.dmi and b/icons/mob/clothing/modsuit/species/vulp_modsuits.dmi differ diff --git a/icons/obj/clothing/modsuit/mod_clothing.dmi b/icons/obj/clothing/modsuit/mod_clothing.dmi index 70ab6906739..6f4e6749982 100644 Binary files a/icons/obj/clothing/modsuit/mod_clothing.dmi and b/icons/obj/clothing/modsuit/mod_clothing.dmi differ diff --git a/icons/obj/clothing/modsuit/mod_modules.dmi b/icons/obj/clothing/modsuit/mod_modules.dmi index 95bc512851e..88c3e8e7720 100644 Binary files a/icons/obj/clothing/modsuit/mod_modules.dmi and b/icons/obj/clothing/modsuit/mod_modules.dmi differ