From 0c7358369c86df0ce18f34c95a19e88a4efa8e65 Mon Sep 17 00:00:00 2001 From: Muted Kobold Date: Tue, 5 Aug 2025 20:20:03 -0500 Subject: [PATCH] Science Expansion Pck-1: Hardsuits (#18123) * Adds station hardsuits and additional modules to RND. Fixes a protean bug regarding pressure and thermals not being correct when assimilating a suit. * Created new sprite state for the Faraday Protection Shield * Code style adjustments for vision.dm and passive_protection.dm * Removed Research requirmement, but upped the cost and made the research a discount. * fix these while we're here makes it so science mechfab can make it --------- Co-authored-by: Cameron Lennox --- code/__defines/research/techweb_nodes.dm | 4 + .../modules/specific/passive_protection.dm | 107 +++++++++- .../spacesuits/rig/modules/specific/vision.dm | 49 +++-- .../clothing/spacesuits/rig/modules/vision.dm | 49 +++-- .../clothing/spacesuits/rig/suits/station.dm | 2 +- .../species/station/protean/protean_rig.dm | 9 +- .../research/tg/designs/modsuit_designs.dm | 195 +++++++++++++++--- .../tg/experisci/experiment/instances/misc.dm | 53 +++++ .../research/tg/techwebs/nodes/engi_nodes.dm | 43 ++++ .../tg/techwebs/nodes/modsuit_nodes.dm | 44 +++- icons/obj/rig_modules.dmi | Bin 22496 -> 25430 bytes 11 files changed, 474 insertions(+), 81 deletions(-) diff --git a/code/__defines/research/techweb_nodes.dm b/code/__defines/research/techweb_nodes.dm index 5326651ffba..9421a1670a6 100644 --- a/code/__defines/research/techweb_nodes.dm +++ b/code/__defines/research/techweb_nodes.dm @@ -85,6 +85,7 @@ #define TECHWEB_NODE_MINING "mining" #define TECHWEB_NODE_MINING_ADV "mining_adv" #define TECHWEB_NODE_MOD_ANOMALY "mod_anomaly" +#define TECHWEB_NODE_MOD_SUPPLY "mod_supply" #define TECHWEB_NODE_MOD_ENGI "mod_engi" #define TECHWEB_NODE_MOD_ENGI_ADV "mod_engi_adv" #define TECHWEB_NODE_MOD_ENTERTAINMENT "mod_entertainment" @@ -97,6 +98,9 @@ #define TECHWEB_NODE_MODULAR_COMPUTER "modular_computer" #define TECHWEB_NODE_NIF "nif" #define TECHWEB_NODE_NIGHT_VISION "night_vision" +#define TECHWEB_NODE_THERMAL_VISION "thermal_vision" +#define TECHWEB_NODE_GRAVITON_VISION "graviton_vision" +#define TECHWEB_NODE_ADVANCED_VISORS "advanced_visors" #define TECHWEB_NODE_NSFW "nsfwgun" #define TECHWEB_NODE_OFFICE_EQUIP "office_equip" #define TECHWEB_NODE_OLDSTATION_SURGERY "oldstation_surgery" diff --git a/code/modules/clothing/spacesuits/rig/modules/specific/passive_protection.dm b/code/modules/clothing/spacesuits/rig/modules/specific/passive_protection.dm index ddb72b5ad2a..338e19a4c01 100644 --- a/code/modules/clothing/spacesuits/rig/modules/specific/passive_protection.dm +++ b/code/modules/clothing/spacesuits/rig/modules/specific/passive_protection.dm @@ -7,9 +7,9 @@ from incoming ionizing radiation and converts it into a significantly less harmful form. This comes at the cost of concerningly high power consumption, \ and thus should only be used in short bursts." icon_state = "radsoak" - toggleable = 1 - disruptable = 1 - disruptive = 0 + toggleable = TRUE + disruptable = TRUE + disruptive = FALSE use_power_cost = 25 active_power_cost = 25 @@ -26,7 +26,7 @@ /obj/item/rig_module/rad_shield/activate() if(!..()) - return 0 + return FALSE var/mob/living/carbon/human/H = holder.wearer var/obj/item/clothing/shoes/boots = holder.boots @@ -49,7 +49,7 @@ /obj/item/rig_module/rad_shield/deactivate() if(!..()) - return 0 + return FALSE var/mob/living/carbon/human/H = holder.wearer var/obj/item/clothing/shoes/boots = holder.boots @@ -86,9 +86,9 @@ and thus should only be used in short bursts." icon_state = "atmosoak" - toggleable = 1 - disruptable = 1 - disruptive = 0 + toggleable = TRUE + disruptable = TRUE + disruptive = FALSE use_power_cost = 25 active_power_cost = 25 @@ -106,7 +106,7 @@ /obj/item/rig_module/atmos_shield/activate() if(!..()) - return 0 + return FALSE var/mob/living/carbon/human/H = holder.wearer var/obj/item/clothing/shoes/boots = holder.boots @@ -137,7 +137,7 @@ /obj/item/rig_module/atmos_shield/deactivate() if(!..()) - return 0 + return FALSE var/mob/living/carbon/human/H = holder.wearer var/obj/item/clothing/shoes/boots = holder.boots @@ -164,3 +164,90 @@ stored_max_pressure = 0 stored_max_temp = 0 + +/obj/item/rig_module/atmos_shield/advanced + name = "advanced atmospheric protection enhancement suite" + desc = "The acronym of this device - A.P.E. - unlike its loosely related cousin, the R.A.D., is remarkably unintuitive. It has a changelog inscribed \ + on the underside of the casing." + use_power_cost = 5 + active_power_cost = 5 + +/obj/item/rig_module/faraday_shield + name = "Faraday Protection Shield" + desc = "The acronym of this device - F.P.S. - does not represent the application of the device." + description_info = "Instead of wrapping the user with a grounded mesh of wires and limiting mobility, this device instead creates an \ + lattice within the electromagnetic field around the user. This field, while smelling pleasantly of ozone, will act as a means of grounding \ + the suit's operator. This in turn will protect them from electrical attacks from Teslas and other electrical assaults provided the body is \ + fully covered by the suit. This comes at the cost of concerningly high power consumption, and thus should only be used in short bursts." + icon_state = "elecsoak" + toggleable = TRUE + disruptable = TRUE + disruptive = FALSE + + use_power_cost = 25 + active_power_cost = 25 + passive_power_cost = 0 + module_cooldown = 30 + + activate_string = "Enable Supplemental Faraday Shielding" + deactivate_string = "Disable Supplemental Faraday Shielding" + + interface_name = "faraday shielding system" + interface_desc = "Provides passive protection against electrical assaults, at the cost of power." + var/stored_siemens_coefficient = 0 + var/stored_gloves_siemens_coefficient = 0 + +/obj/item/rig_module/faraday_shield/activate() + if(!..()) + return FALSE + + var/mob/living/carbon/human/H = holder.wearer + var/obj/item/clothing/shoes/boots = holder.boots + var/obj/item/clothing/suit/space/rig/chest = holder.chest + var/obj/item/clothing/head/helmet/space/rig/helmet = holder.helmet + var/obj/item/clothing/gloves/gauntlets/rig/gloves = holder.gloves + + to_chat(H, span_boldnotice("You activate your suit's powered faraday shielding.")) + stored_siemens_coefficient = holder.siemens_coefficient + stored_gloves_siemens_coefficient = gloves.siemens_coefficient + if(boots) + boots.siemens_coefficient = 0 + if(chest) + chest.siemens_coefficient = 0 + if(helmet) + helmet.siemens_coefficient = 0 + if(gloves) + gloves.siemens_coefficient = 0 + holder.siemens_coefficient = 0 + +/obj/item/rig_module/faraday_shield/deactivate() + + if(!..()) + return 0 + + var/mob/living/carbon/human/H = holder.wearer + var/obj/item/clothing/shoes/boots = holder.boots + var/obj/item/clothing/suit/space/rig/chest = holder.chest + var/obj/item/clothing/head/helmet/space/rig/helmet = holder.helmet + var/obj/item/clothing/gloves/gauntlets/rig/gloves = holder.gloves + + to_chat(H, span_boldnotice("You deactivate your suit's powered faraday shielding.")) + + if(boots) + boots.siemens_coefficient = stored_siemens_coefficient + if(chest) + chest.siemens_coefficient = stored_siemens_coefficient + if(helmet) + helmet.siemens_coefficient = stored_siemens_coefficient + if(gloves) + gloves.siemens_coefficient = stored_gloves_siemens_coefficient + holder.siemens_coefficient = siemens_coefficient + + stored_siemens_coefficient = 0 + +/obj/item/rig_module/faraday_shield/advanced + name = "advanced faraday protection shield suite" + desc = "The acronym of this device - F.P.S. - does not represent the application of the device. It has a changelog inscribed \ + on the underside of the casing." + use_power_cost = 5 + active_power_cost = 5 diff --git a/code/modules/clothing/spacesuits/rig/modules/specific/vision.dm b/code/modules/clothing/spacesuits/rig/modules/specific/vision.dm index de99eaaa736..4be03a42b5a 100644 --- a/code/modules/clothing/spacesuits/rig/modules/specific/vision.dm +++ b/code/modules/clothing/spacesuits/rig/modules/specific/vision.dm @@ -31,6 +31,12 @@ /datum/rig_vision/meson/New() glasses = new /obj/item/clothing/glasses/meson +/datum/rig_vision/graviton + mode = "graviton scanner" + +/datum/rig_vision/graviton/New() + glasses = new /obj/item/clothing/glasses/graviton + /datum/rig_vision/sechud mode = "security HUD" @@ -58,9 +64,9 @@ interface_name = "optical scanners" interface_desc = "An integrated multi-mode vision system." - usable = 1 - toggleable = 1 - disruptive = 0 + usable = TRUE + toggleable = TRUE + disruptive = FALSE module_cooldown = 0 engage_string = "Cycle Visor Mode" @@ -86,20 +92,20 @@ interface_name = "multi optical visor" interface_desc = "An integrated multi-mode vision system." - vision_modes = list(/datum/rig_vision/meson, - /datum/rig_vision/material, + vision_modes = list(/datum/rig_vision/graviton, /datum/rig_vision/nvg, /datum/rig_vision/thermal, /datum/rig_vision/sechud, /datum/rig_vision/medhud) + /obj/item/rig_module/vision/meson name = "hardsuit meson scanner" desc = "A layered, translucent visor system for a hardsuit." icon_state = "meson" - usable = 0 + usable = FALSE interface_name = "meson scanner" interface_desc = "An integrated meson scanner." @@ -112,20 +118,33 @@ desc = "A layered, translucent visor system for a hardsuit." icon_state = "meson" - usable = 0 + usable = FALSE interface_name = "material scanner" interface_desc = "An integrated material scanner." vision_modes = list(/datum/rig_vision/material) +/obj/item/rig_module/vision/graviton + + name = "hardsuit graviton visor" + desc = "A layered, translucent visor system for a hardsuit." + icon_state = "optics" + + usable = FALSE + + interface_name = "graviton visor" + interface_desc = "An integrated graviton scanner." + + vision_modes = list(/datum/rig_vision/graviton) + /obj/item/rig_module/vision/mining name = "hardsuit mining scanners" desc = "A layered, translucent visor system for a hardsuit." icon_state = "optics" - usable = 0 + usable = FALSE interface_name = "mining scanners" interface_desc = "An integrated mining scanner array." @@ -139,7 +158,7 @@ desc = "A layered, translucent visor system for a hardsuit." icon_state = "thermal" - usable = 0 + usable = FALSE interface_name = "thermal scanner" interface_desc = "An integrated thermal scanner." @@ -152,7 +171,7 @@ desc = "A multi input night vision system for a hardsuit." icon_state = "night" - usable = 0 + usable = FALSE interface_name = "night vision interface" interface_desc = "An integrated night vision system." @@ -165,7 +184,7 @@ desc = "A simple tactical information system for a hardsuit." icon_state = "securityhud" - usable = 0 + usable = FALSE interface_name = "security HUD" interface_desc = "An integrated security heads up display." @@ -178,7 +197,7 @@ desc = "A simple medical status indicator for a hardsuit." icon_state = "healthhud" - usable = 0 + usable = FALSE interface_name = "medical HUD" interface_desc = "An integrated medical heads up display." @@ -194,12 +213,12 @@ /obj/item/rig_module/vision/engage() if(!..() || !vision_modes) - return 0 + return FALSE // Don't cycle if this engage() is being called by activate(). if(!active) to_chat(holder.wearer, span_blue("You activate your visual sensors.")) - return 1 + return TRUE if(vision_modes.len > 1) vision_index++ @@ -210,7 +229,7 @@ to_chat(holder.wearer, span_blue("You cycle your sensors to [vision.mode] mode.")) else to_chat(holder.wearer, span_blue("Your sensors only have one mode.")) - return 1 + return TRUE /obj/item/rig_module/vision/activate() if((. = ..()) && holder.wearer) diff --git a/code/modules/clothing/spacesuits/rig/modules/vision.dm b/code/modules/clothing/spacesuits/rig/modules/vision.dm index 2b68612b064..7a05216161b 100644 --- a/code/modules/clothing/spacesuits/rig/modules/vision.dm +++ b/code/modules/clothing/spacesuits/rig/modules/vision.dm @@ -33,9 +33,16 @@ /datum/rig_vision/material mode = "material scanner" + /datum/rig_vision/material/New() glasses = new /obj/item/clothing/glasses/material +/datum/rig_vision/graviton + mode = "graviton scanner" + +/datum/rig_vision/graviton/New() + glasses = new /obj/item/clothing/glasses/graviton + /datum/rig_vision/sechud mode = "security HUD" @@ -57,9 +64,9 @@ interface_name = "optical scanners" interface_desc = "An integrated multi-mode vision system." - usable = 1 - toggleable = 1 - disruptive = 0 + usable = FALSE + toggleable = TRUE + disruptive = FALSE module_cooldown = 0 engage_string = "Cycle Visor Mode" @@ -85,8 +92,7 @@ interface_name = "multi optical visor" interface_desc = "An integrated multi-mode vision system." - vision_modes = list(/datum/rig_vision/meson, - /datum/rig_vision/material, + vision_modes = list(/datum/rig_vision/graviton, /datum/rig_vision/nvg, /datum/rig_vision/thermal, /datum/rig_vision/sechud, @@ -98,7 +104,7 @@ desc = "A layered, translucent visor system for a hardsuit." icon_state = "meson" - usable = 0 + usable = FALSE interface_name = "meson scanner" interface_desc = "An integrated meson scanner." @@ -111,20 +117,33 @@ desc = "A layered, translucent visor system for a hardsuit." icon_state = "material" - usable = 0 + usable = FALSE interface_name = "material scanner" interface_desc = "An integrated material scanner." vision_modes = list(/datum/rig_vision/material) +/obj/item/rig_module/vision/graviton + + name = "hardsuit graviton visor" + desc = "A layered, translucent visor system for a hardsuit." + icon_state = "optics" + + usable = FALSE + + interface_name = "graviton visor" + interface_desc = "An integrated graviton scanner." + + vision_modes = list(/datum/rig_vision/graviton) + /obj/item/rig_module/vision/mining name = "hardsuit mining scanners" desc = "A layered, translucent visor system for a hardsuit." icon_state = "optics" - usable = 0 + usable = FALSE interface_name = "mining scanners" interface_desc = "An integrated mining scanner array." @@ -138,7 +157,7 @@ desc = "A layered, translucent visor system for a hardsuit." icon_state = "thermal" - usable = 0 + usable = FALSE interface_name = "thermal scanner" interface_desc = "An integrated thermal scanner." @@ -151,7 +170,7 @@ desc = "A multi input night vision system for a hardsuit." icon_state = "night" - usable = 0 + usable = FALSE interface_name = "night vision interface" interface_desc = "An integrated night vision system." @@ -164,7 +183,7 @@ desc = "A simple tactical information system for a hardsuit." icon_state = "securityhud" - usable = 0 + usable = FALSE interface_name = "security HUD" interface_desc = "An integrated security heads up display." @@ -177,7 +196,7 @@ desc = "A simple medical status indicator for a hardsuit." icon_state = "healthhud" - usable = 0 + usable = FALSE interface_name = "medical HUD" interface_desc = "An integrated medical heads up display." @@ -195,12 +214,12 @@ var/starting_up = !active if(!..() || !vision_modes) - return 0 + return FALSE // Don't cycle if this engage() is being called by activate(). if(starting_up) to_chat(holder.wearer, span_blue("You activate your visual sensors.")) - return 1 + return TRUE if(vision_modes.len > 1) vision_index++ @@ -211,7 +230,7 @@ to_chat(holder.wearer, span_blue("You cycle your sensors to [vision.mode] mode.")) else to_chat(holder.wearer, span_blue("Your sensors only have one mode.")) - return 1 + return TRUE /obj/item/rig_module/vision/activate() if((. = ..()) && holder.wearer) diff --git a/code/modules/clothing/spacesuits/rig/suits/station.dm b/code/modules/clothing/spacesuits/rig/suits/station.dm index 19a00098766..f236d9fafef 100644 --- a/code/modules/clothing/spacesuits/rig/suits/station.dm +++ b/code/modules/clothing/spacesuits/rig/suits/station.dm @@ -172,7 +172,7 @@ suit_type = "hazmat hardsuit" desc = "An Anomalous Material Interaction hardsuit that protects against the strangest energies the universe can throw at it." icon_state = "science_rig" - armor = list(melee = 45, bullet = 5, laser = 45, energy = 80, bomb = 60, bio = 100, rad = 100) + armor = list(melee = 45, bullet = 5, laser = 45, energy = 80, bomb = 100, bio = 100, rad = 100) slowdown = 0.5 offline_vision_restriction = 1 siemens_coefficient= 0.75 diff --git a/code/modules/mob/living/carbon/human/species/station/protean/protean_rig.dm b/code/modules/mob/living/carbon/human/species/station/protean/protean_rig.dm index 4f777656d82..c204a2b2b29 100644 --- a/code/modules/mob/living/carbon/human/species/station/protean/protean_rig.dm +++ b/code/modules/mob/living/carbon/human/species/station/protean/protean_rig.dm @@ -515,9 +515,11 @@ to_chat(user, span_warning("The world is not ready for such a technological singularity.")) return to_chat(user, span_notice("You assimilate the [R] into the [src]. Mimicking its stats and appearance.")) + + rigsuit_max_pressure = R.rigsuit_max_pressure for(var/obj/item/piece in list(gloves,helmet,boots,chest)) piece.armor = R.armor.Copy() - piece.max_pressure_protection = R.max_pressure_protection + piece.max_pressure_protection = R.rigsuit_max_pressure piece.max_heat_protection_temperature = R.max_heat_protection_temperature //I dislike this piece of code, but not every rig has the full set of parts if(R.gloves) @@ -560,10 +562,11 @@ set category = "Object" if(assimilated_rig) + rigsuit_max_pressure = initial(rigsuit_max_pressure) for(var/obj/item/piece in list(gloves,helmet,boots,chest)) piece.armor = armor.Copy() - piece.max_pressure_protection = initial(piece.max_pressure_protection) - piece.max_heat_protection_temperature = initial(piece.max_heat_protection_temperature) + piece.max_pressure_protection = rigsuit_max_pressure + piece.max_heat_protection_temperature = max_heat_protection_temperature piece.icon_state = src.icon_state piece.icon = initial(piece.icon) piece.default_worn_icon = initial(piece.default_worn_icon) diff --git a/code/modules/research/tg/designs/modsuit_designs.dm b/code/modules/research/tg/designs/modsuit_designs.dm index c9a949af4aa..a1c1f061a59 100644 --- a/code/modules/research/tg/designs/modsuit_designs.dm +++ b/code/modules/research/tg/designs/modsuit_designs.dm @@ -17,6 +17,56 @@ materials = list(MAT_PLASTEEL = 12000, MAT_GOLD = 3000, MAT_GRAPHITE = 3000, MAT_OSMIUM = 1000, MAT_PLASTIC = 5000) build_path = /obj/item/rig/robotics +// Station Suits +/datum/design_techweb/mechfab/modsuit/eva_controller + name = "EVA Suit Control Module" + desc = "An engineering Hardsuit featuring a visor with welding protection, iommunity to radiation, and insulated gauntlets. It is well insulated against the heat." + id = "eva_rig_module" + materials = list(MAT_PLASTEEL = 16000, MAT_GOLD = 3000, MAT_GRAPHITE = 4500, MAT_OSMIUM = 1000, MAT_PLASTIC = 4500, MAT_LEAD = 2000, MAT_STEEL = 2000) + build_path = /obj/item/rig/eva + +/datum/design_techweb/mechfab/modsuit/eva_ce_controller + name = "Advanced EVA Suit Control Module" + desc = "A more advanced EVA hardsuit with the same features, plus additional atmospheric protection and advanced magboots. Finely polished for engineering clout." + id = "advanced_eva_rig_module" + materials = list(MAT_PLASTEEL = 16000, MAT_GOLD = 6000, MAT_GRAPHITE = 4500, MAT_OSMIUM = 4000, MAT_PLASTIC = 8000, MAT_LEAD = 2000, MAT_PHORON = 6000, MAT_STEEL = 3000, MAT_TITANIUM = 2000) + build_path = /obj/item/rig/ce + +/datum/design_techweb/mechfab/modsuit/ami_controller + name = "AMI Suit Control Module" + desc = "A hardsuit for the rigors of science. In theory it should protect the wearer from the stranger things that the universe can offer. In 'theory.'" + id = "ami_rig_module" + materials = list(MAT_PLASTEEL = 12000, MAT_GOLD = 3000, MAT_GRAPHITE = 3000, MAT_OSMIUM = 2000, MAT_PLASTIC = 6000, MAT_LEAD = 2000, MAT_PHORON = 12000) + build_path = /obj/item/rig/hazmat + +/datum/design_techweb/mechfab/modsuit/industrial_controller + name = "Industrial Suit Control Module" + desc = "Ugly as hell, and heavier than I-Beam. Designed to protect thickly beardered miners in the depths." + id = "industrial_rig_module" + materials = list(MAT_PLASTEEL = 14000, MAT_GOLD = 4000, MAT_GRAPHITE = 5000, MAT_OSMIUM = 1000, MAT_PLASTIC = 5000, MAT_STEEL = 10000, MAT_TITANIUM = 2000) + build_path = /obj/item/rig/industrial + +/datum/design_techweb/mechfab/modsuit/hazard_controller + name = "Hazard Suit Control Module" + desc = "A security hardsuit with protection for bringing justice into the blackness of the void." + id = "hazard_rig_module" + materials = list(MAT_PLASTEEL = 14000, MAT_GOLD = 4000, MAT_GRAPHITE = 5000, MAT_OSMIUM = 1000, MAT_PLASTIC = 5000, MAT_STEEL = 10000, MAT_TITANIUM = 2000) + build_path = /obj/item/rig/hazard + +/datum/design_techweb/mechfab/modsuit/rescue_controller + name = "Rescue Suit Control Module" + desc = "A hardsuit designed for medical rescue in hazardous environments. Just don't expect it to stop a bullet." + id = "medical_rig_module" + materials = list(MAT_PLASTEEL = 12000, MAT_GOLD = 6000, MAT_GRAPHITE = 3000, MAT_OSMIUM = 4000, MAT_PLASTIC = 10000, MAT_LEAD = 2000) + build_path = /obj/item/rig/medical + +/datum/design_techweb/mechfab/modsuit/zero_controller + name = "Zero Suit Control Module" + desc = "A very bare bones and stylish suit designed for pilots with advanced holographic interfaces for the task." + id = "zero_rig_module" + materials = list(MAT_PLASTEEL = 12000, MAT_GOLD = 3000, MAT_GRAPHITE = 3000, MAT_OSMIUM = 1000, MAT_PLASTIC = 5000) + build_path =/obj/item/rig/zero + ///Modsuit Modules /datum/design_techweb/mechfab/modsuit/modules //req_tech = list(TECH_MATERIAL = 6, TECH_ENGINEERING = 5, TECH_PHORON = 3, TECH_MAGNET = 4, TECH_POWER = 6) @@ -34,7 +84,19 @@ category = list( RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_MEDICAL ) - departmental_flags = DEPARTMENT_BITFLAG_MEDICAL + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_MEDICAL + +/datum/design_techweb/mechfab/modsuit/pat + name = "hardsuit mounted P.A.T." + desc = "Pre-emptive Access Tunneling for first responders to access areas they normally cannot. Use responsibly." + id = "rig_component_pat" + //req_tech = list(TECH_MATERIAL = 5, TECH_ENGINEERING = 5, TECH_MAGNET = 5, TECH_BIO = 4) + materials = list(MAT_PLASTEEL = 3000, MAT_GRAPHITE = 2000, MAT_SILVER = 1750, MAT_GOLD = 1250, MAT_OSMIUM = 2000) + build_path = /obj/item/rig_module/rescue_pharm + category = list( + RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_MEDICAL + ) + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_MEDICAL /datum/design_techweb/mechfab/modsuit/mounted_sizegun name = "hardsuit mounted size gun" @@ -43,7 +105,7 @@ //req_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3, TECH_POWER = 2) materials = list(MAT_STEEL = 3000, MAT_GLASS = 2000, MAT_URANIUM = 2000) build_path = /obj/item/rig_module/mounted/sizegun - //Not giving this a department flag intentionally. + //Not giving this a department flag intentionally.tIT /datum/design_techweb/mechfab/modsuit/modules/jetpack name = "hardsuit maneuvering jets" @@ -87,7 +149,7 @@ category = list( RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_SUPPLY ) - departmental_flags = DEPARTMENT_BITFLAG_SECURITY + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_SECURITY /datum/design_techweb/mechfab/modsuit/modules/healthanalyzer name = "hardsuit health analyzer" @@ -99,7 +161,7 @@ category = list( RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_MEDICAL ) - departmental_flags = DEPARTMENT_BITFLAG_MEDICAL + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_MEDICAL /datum/design_techweb/mechfab/modsuit/modules/drill name = "hardsuit mounted drill" @@ -111,7 +173,7 @@ category = list( RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_SUPPLY ) - departmental_flags = DEPARTMENT_BITFLAG_CARGO + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_CARGO /datum/design_techweb/mechfab/modsuit/modules/excdrill name = "hardsuit mounted excavation drill" @@ -123,7 +185,7 @@ category = list( RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_SCIENCE ) - departmental_flags = DEPARTMENT_BITFLAG_SCIENCE + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_CARGO /datum/design_techweb/mechfab/modsuit/modules/anomscanner name = "hardsuit mounted anomaly scanner" @@ -135,7 +197,7 @@ category = list( RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_SCIENCE ) - departmental_flags = DEPARTMENT_BITFLAG_SCIENCE + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_CARGO /datum/design_techweb/mechfab/modsuit/modules/orescanner name = "hardsuit mounted ore scanner" @@ -147,7 +209,7 @@ category = list( RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_SUPPLY ) - departmental_flags = DEPARTMENT_BITFLAG_CARGO + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_CARGO /datum/design_techweb/mechfab/modsuit/modules/rcd name = "hardsuit mounted rcd" @@ -159,7 +221,7 @@ category = list( RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_ENGINEERING ) - departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING /datum/design_techweb/mechfab/modsuit/modules/paperdispenser name = "hardsuit mounted paper dispenser" @@ -171,7 +233,7 @@ category = list( RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_SERVICE ) - departmental_flags = DEPARTMENT_BITFLAG_SERVICE + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_SERVICE /datum/design_techweb/mechfab/modsuit/modules/pen name = "hardsuit mounted pen" @@ -183,7 +245,7 @@ category = list( RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_SERVICE ) - departmental_flags = DEPARTMENT_BITFLAG_SERVICE + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_SERVICE /datum/design_techweb/mechfab/modsuit/modules/grenade_metalfoam name = "hardsuit metalfoam-bomb launcher" @@ -195,7 +257,7 @@ category = list( RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_ENGINEERING ) - departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING /datum/design_techweb/mechfab/modsuit/modules/grenade_flash name = "hardsuit flashbang launcher" @@ -207,7 +269,7 @@ category = list( RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_SECURITY ) - departmental_flags = DEPARTMENT_BITFLAG_SECURITY + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_SECURITY /datum/design_techweb/mechfab/modsuit/modules/grenade_cleanfoam name = "hardsuit cleaning-foam-bomb launcher" @@ -219,7 +281,7 @@ category = list( RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_SERVICE ) - departmental_flags = DEPARTMENT_BITFLAG_SECURITY + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_SECURITY /datum/design_techweb/mechfab/modsuit/modules/taser name = "hardsuit taser" @@ -231,7 +293,7 @@ category = list( RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_SECURITY ) - departmental_flags = DEPARTMENT_BITFLAG_SECURITY + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_SECURITY /datum/design_techweb/mechfab/modsuit/modules/egun name = "hardsuit egun" @@ -243,7 +305,7 @@ category = list( RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_SECURITY ) - departmental_flags = DEPARTMENT_BITFLAG_SECURITY + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_SECURITY /datum/design_techweb/mechfab/modsuit/modules/mop name = "hardsuit intense cleaning device" @@ -255,7 +317,7 @@ category = list( RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_SERVICE ) - departmental_flags = DEPARTMENT_BITFLAG_SERVICE + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_SERVICE /datum/design_techweb/mechfab/modsuit/modules/sprinter name = "hardsuit overclocker" @@ -275,7 +337,7 @@ category = list( RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_ENGINEERING ) - departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING /datum/design_techweb/mechfab/modsuit/modules/material name = "hardsuit material visor" @@ -287,7 +349,7 @@ category = list( RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_SUPPLY ) - departmental_flags = DEPARTMENT_BITFLAG_CARGO + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_CARGO /datum/design_techweb/mechfab/modsuit/modules/nvg name = "hardsuit night-vision visor" @@ -299,7 +361,51 @@ category = list( RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_SECURITY ) - departmental_flags = DEPARTMENT_BITFLAG_SECURITY + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_SECURITY + +/datum/design_techweb/mechfab/modsuit/modules/thermal + name = "hardsuit thermal scanning visor" + desc = "A compact thermal visor for a hardsuit." + id = "rig_component_thermal" + materials = list(MAT_PLASTEEL = 2000, MAT_GRAPHITE = 1500, MAT_OSMIUM = 500, MAT_URANIUM = 1000) + build_path = /obj/item/rig_module/vision/thermal + category = list( + RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_SECURITY + ) + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_SECURITY + +/datum/design_techweb/mechfab/modsuit/modules/multi + name = "hardsuit complete visor suite" + desc = "An optical package for the bounty-hunter in you. Contains all available visors in a tight package." + id = "rig_component_multi_visor" + materials = list(MAT_PLASTEEL = 8000, MAT_GRAPHITE = 5500, MAT_OSMIUM = 4500, MAT_URANIUM = 6000, MAT_MORPHIUM = 2000) + build_path = /obj/item/rig_module/vision/multi + category = list( + RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_SECURITY + ) + +/datum/design_techweb/mechfab/modsuit/modules/mining + name = "hardsuit mining scanners" + desc = "A visor suite for miners featuring Material and Mesons." + id = "rig_component_mining" + //req_tech = list(TECH_MATERIAL = 5, TECH_ENGINEERING = 6, TECH_MAGNET = 4, TECH_POWER = 5) + materials = list(MAT_PLASTEEL = 3500, MAT_GRAPHITE = 2000, MAT_OSMIUM = 1000) + build_path = /obj/item/rig_module/vision/mining + category = list( + RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_SUPPLY + ) + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_CARGO + +/datum/design_techweb/mechfab/modsuit/modules/graviton + name = "hardsuit graviton scanners" + desc = "Advanced Visor suite that combines the features of mesons and material into a single package." + id = "rig_component_graviton" + //req_tech = list(TECH_MATERIAL = 5, TECH_ENGINEERING = 6, TECH_MAGNET = 4, TECH_POWER = 5) + materials = list(MAT_PLASTEEL = 3500, MAT_GRAPHITE = 2000, MAT_OSMIUM = 1000) + build_path = /obj/item/rig_module/vision/mining + category = list( + RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_SCIENCE + ) /datum/design_techweb/mechfab/modsuit/modules/sechud name = "hardsuit security visor" @@ -311,7 +417,7 @@ category = list( RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_SECURITY ) - departmental_flags = DEPARTMENT_BITFLAG_SECURITY + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_SECURITY /datum/design_techweb/mechfab/modsuit/modules/medhud name = "hardsuit medical visor" @@ -323,7 +429,7 @@ category = list( RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_MEDICAL ) - departmental_flags = DEPARTMENT_BITFLAG_MEDICAL + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_MEDICAL /datum/design_techweb/mechfab/modsuit/modules/voice name = "hardsuit voice-changer" @@ -346,7 +452,6 @@ category = list( RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_SCIENCE ) - departmental_flags = DEPARTMENT_BITFLAG_SCIENCE /datum/design_techweb/mechfab/modsuit/modules/datajack name = "hardsuit datajack" @@ -369,7 +474,7 @@ category = list( RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_MEDICAL ) - departmental_flags = DEPARTMENT_BITFLAG_MEDICAL + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_MEDICAL /datum/design_techweb/mechfab/modsuit/modules/teleporter name = "hardsuit teleporter system" @@ -381,7 +486,7 @@ category = list( RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_ENGINEERING ) - departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING /datum/design_techweb/mechfab/modsuit/modules/radshield name = "hardsuit radiation absorption device" @@ -393,7 +498,7 @@ category = list( RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_ENGINEERING ) - departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING /datum/design_techweb/mechfab/modsuit/modules/radshield_adv name = "hardsuit advanced radiation absorption device" @@ -405,7 +510,7 @@ category = list( RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_ENGINEERING ) - departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING /datum/design_techweb/mechfab/modsuit/modules/atmosshield name = "hardsuit atmospheric protection enhancement suite" @@ -417,4 +522,38 @@ category = list( RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_ENGINEERING ) - departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING + +/datum/design_techweb/mechfab/modsuit/modules/atmosshield_adv + name = "hardsuit advanced atmospheric protection enhancement suite" + desc = "An advanced atmospheric protection suite, providing protection against both pressure and heat. At the cost of concerningly high power draw." + id = "rig_component_atmosshield_adv" + //req_tech = list(TECH_MATERIAL = 7, TECH_ENGINEERING = 5, TECH_MAGNET = 5, TECH_POWER = 6, TECH_BLUESPACE = 4) + materials = list(MAT_PLASTEEL = 8000, MAT_DURASTEEL = 4000, MAT_GRAPHITE = 9000, MAT_OSMIUM = 7500, MAT_PHORON = 6000, MAT_SILVER = 8000, MAT_GOLD = 6000) + build_path = /obj/item/rig_module/atmos_shield + category = list( + RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_ENGINEERING + ) + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING + +/datum/design_techweb/mechfab/modsuit/modules/faradayshield + name = "hardsuit electrical protection enhancement suite" + desc = "An advanced faraday shielding suite, providing protection against electrical discharges. At the cost of concerningly high power draw." + id = "rig_component_faradayshield" + materials = list(MAT_PLASTEEL = 8000, MAT_GRAPHITE = 8000, MAT_OSMIUM = 6000, MAT_PHORON = 6000, MAT_SILVER = 4000, MAT_GOLD = 4000, MAT_PLASTIC = 6000) + build_path = /obj/item/rig_module/faraday_shield + category = list( + RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_ENGINEERING + ) + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING + +/datum/design_techweb/mechfab/modsuit/modules/faradayshield/advanced + name = "hardsuit advanced electrical protection enhancement suite" + desc = "An optimized faraday shielding suite, providing protection against electrical discharges. At the cost of concerningly high power draw." + id = "rig_component_faradayshield_adv" + materials = list(MAT_PLASTEEL = 8000, MAT_GRAPHITE = 8000, MAT_OSMIUM = 8000, MAT_PHORON = 7000, MAT_SILVER = 5500, MAT_GOLD = 5500, MAT_PLASTIC = 6000) + build_path = /obj/item/rig_module/faraday_shield/advanced + category = list( + RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_ENGINEERING + ) + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING diff --git a/code/modules/research/tg/experisci/experiment/instances/misc.dm b/code/modules/research/tg/experisci/experiment/instances/misc.dm index 8394d959aeb..6cf5ebb4352 100644 --- a/code/modules/research/tg/experisci/experiment/instances/misc.dm +++ b/code/modules/research/tg/experisci/experiment/instances/misc.dm @@ -32,3 +32,56 @@ /mob/living/simple_mob/slime = 1, /obj/item/slime_extract = 1, ) + +// Basic Experiments to unlock the rig nodes. +/datum/experiment/scanning/points/basic_engi_rig + name = "Basic Engineering Suit Scans" + description = "We would like to access the structural wear and tear of existing void suits worn by engineers. Please scan some of the existing suits you may have lying around that an engineer might use." + required_points = 2 + required_atoms = list( + /obj/item/clothing/suit/space/void/engineering = 1, + /obj/item/clothing/suit/space/void/engineering/hazmat = 1, + /obj/item/clothing/suit/space/void/atmos = 1, + /obj/item/clothing/suit/space/void/engineering/construction = 1, + ) + +/datum/experiment/scanning/points/basic_sec_rig + name = "Basic Security Suit Scans" + description = "Some of our engineers had made a mistake of relying on the survivor's bias. And had armored the suits more in areas where officers have survived. We need additional data to correct this mistake." + required_points = 2 + required_atoms = list( + /obj/item/clothing/suit/space/void/security = 1, + /obj/item/clothing/suit/space/void/security/riot = 1, + /obj/item/clothing/suit/space/void/exploration =1, + ) + +/datum/experiment/scanning/points/basic_med_rig + name = "Basic Medical Suit Scans" + description = "The synthprene fibers sterile properties have become a topic of extreme interest. With this scan data we can further enhance our first responders with proper RIGs fitting for the job." + required_points = 2 + required_atoms = list( + /obj/item/clothing/suit/space/void/medical = 1, + /obj/item/clothing/suit/space/void/medical/emt = 1, + /obj/item/clothing/suit/space/void/medical/bio = 1, + ) + +/datum/experiment/scanning/points/basic_min_rig + name = "Basic Mining Suit Scans" + description = "We need scans of mining suits to check their durability in long usage of industrial environments. Go bug one of the miners for a quick scan. For rock and stone!" + required_points = 2 + required_atoms = list( + /obj/item/clothing/suit/space/void/mining = 1, + /obj/item/clothing/suit/space/void/mining/alt = 1, + ) + +/datum/experiment/scanning/points/basic_sci_rig + name = "Basic Research Suit Scans" + description = "We have recieve a notice that there are anomalous particles on the researcher's gear. Please scan and confirm for us. And while you're at it, give them a good wash for safety." + required_points = 4 + required_atoms = list( + /obj/item/clothing/suit/bio_suit/anomaly = 1, + /obj/item/clothing/suit/space/anomaly = 1, + /obj/item/clothing/suit/space/anomaly/heat = 1, + /obj/item/clothing/suit/bomb_suit = 1, + /obj/item/clothing/suit/bio_suit = 1, + ) diff --git a/code/modules/research/tg/techwebs/nodes/engi_nodes.dm b/code/modules/research/tg/techwebs/nodes/engi_nodes.dm index 529f34213a6..37a3f8cff45 100644 --- a/code/modules/research/tg/techwebs/nodes/engi_nodes.dm +++ b/code/modules/research/tg/techwebs/nodes/engi_nodes.dm @@ -328,3 +328,46 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) announce_channels = list(CHANNEL_ENGINEERING,CHANNEL_MEDICAL) + +/datum/techweb_node/thermal_vision + id = TECHWEB_NODE_THERMAL_VISION + display_name = "Thermal Visor Technology" + description = "Inspired by some form of big-game-hunter species, we have adapted the technology without the annoying colorization filter." + prereq_ids = list(TECHWEB_NODE_HUD) + design_ids = list( + "rig_component_thermal", + // "diagnostic_hud_night", + // "health_hud_night", + // "night_visision_goggles", + // "nvgmesons", + // "nv_scigoggles", + // "security_hud_night", + ) + +/datum/techweb_node/graviton_vision + id = TECHWEB_NODE_GRAVITON_VISION + display_name = "Graviton Visor Technology" + description = "Our Graviton Scanning technology compressed into visors suitable for use in hardsuits. Quite handy." + prereq_ids = list(TECHWEB_NODE_HUD) + design_ids = list( + "rig_component_graviton", + // "diagnostic_hud_night", + // "health_hud_night", + // "night_visision_goggles", + // "nvgmesons", + // "nv_scigoggles", + // "security_hud_night", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) + announce_channels = list(CHANNEL_SECURITY, CHANNEL_SCIENCE) + +/datum/techweb_node/advanced_visor + id = TECHWEB_NODE_ADVANCED_VISORS + display_name = "Advanced Visor Technology" + description = "With careful research over transparent electrochromic glass and display project we have compressed multiple visors into a single handy package." + prereq_ids = list(TECHWEB_NODE_GRAVITON_VISION, TECHWEB_NODE_THERMAL_VISION, TECHWEB_NODE_HUD) + design_ids = list( + "rig_component_multi_visor", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) + announce_channels = list(CHANNEL_SECURITY, CHANNEL_SCIENCE) diff --git a/code/modules/research/tg/techwebs/nodes/modsuit_nodes.dm b/code/modules/research/tg/techwebs/nodes/modsuit_nodes.dm index 86508b98af9..079f9b0985c 100644 --- a/code/modules/research/tg/techwebs/nodes/modsuit_nodes.dm +++ b/code/modules/research/tg/techwebs/nodes/modsuit_nodes.dm @@ -6,6 +6,7 @@ prereq_ids = list(TECHWEB_NODE_ROBOTICS) design_ids = list( "rigmodule_belt_basic", + "zero_rig_module", "rig_device_pen", "rig_device_paperdispenser", // "suit_storage_unit", @@ -55,6 +56,7 @@ description = "Medical RIGsuits for quick rescue purposes." prereq_ids = list(TECHWEB_NODE_MOD_SUIT, TECHWEB_NODE_CHEM_SYNTHESIS) design_ids = list( + "medical_rig_module", "rig_component_chemicals", "rig_component_rescuepharm", // "mod_plating_medical", @@ -63,7 +65,8 @@ // "mod_organizer", // "mod_patienttransport", ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + discount_experiments = list(/datum/experiment/scanning/points/basic_med_rig = TECHWEB_TIER_2_POINTS) announce_channels = list(CHANNEL_SCIENCE, CHANNEL_MEDICAL) /datum/techweb_node/mod_engi @@ -72,18 +75,21 @@ description = "Engineering suits, for powered engineers." prereq_ids = list(TECHWEB_NODE_MOD_EQUIP) design_ids = list( + "eva_rig_module", "rig_device_rcd", "rig_component_meson", - "rig_component_material", "rig_component_radshield", + "rig_component_atmosshield", "rig_component_aicontainer", + "rig_component_faradayshield", // "mod_plating_engineering", // "mod_t_ray", // "mod_magboot", // "mod_constructor", // "mod_mister_atmos", ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + discount_experiments = list(/datum/experiment/scanning/points/basic_engi_rig = TECHWEB_TIER_2_POINTS) announce_channels = list(CHANNEL_SCIENCE, CHANNEL_ENGINEERING) /datum/techweb_node/mod_security @@ -92,6 +98,7 @@ description = "Security suits for space crime handling." prereq_ids = list(TECHWEB_NODE_MOD_EQUIP) design_ids = list( + "hazard_rig_module", "rig_grenade_metalfoam", "rig_grenade_flashbang", "rig_grenade_cleanfoam", @@ -100,6 +107,7 @@ "rig_component_voice", "rig_gun_egun", "rig_component_sprinter", + "rig_component_pat", // "mod_mirage_grenade", // "mod_plating_security", // "mod_stealth", @@ -110,7 +118,8 @@ // "mod_projectile_dampener", // "mod_criminalcapture", ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS) + discount_experiments = list(/datum/experiment/scanning/points/basic_sec_rig = TECHWEB_TIER_2_POINTS) announce_channels = list(CHANNEL_SCIENCE, CHANNEL_SECURITY) /datum/techweb_node/mod_engi_adv @@ -119,16 +128,18 @@ description = "Advanced Engineering suits, for advanced powered engineers." prereq_ids = list(TECHWEB_NODE_MOD_ENGI) design_ids = list( + "advanced_eva_rig_module", "rig_component_radshield_adv", + "rig_component_atmosshield_adv", + "rig_component_faradayshield_adv", "rig_thrusters", - "rig_component_atmosshield", // "mod_plating_atmospheric", // "mod_jetpack", // "mod_rad_protection", // "mod_emp_shield", // "mod_storage_expanded", ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) announce_channels = list(CHANNEL_SCIENCE, CHANNEL_ENGINEERING) /datum/techweb_node/mod_anomaly @@ -137,11 +148,26 @@ description = "Modules for RIGsuits that are designed to research anomalies." prereq_ids = list(TECHWEB_NODE_MOD_ENGI_ADV, TECHWEB_NODE_ANOMALY_RESEARCH) design_ids = list( + "ami_rig_module", "rig_component_teleport", - "rig_device_drill", "rig_device_excdrill", "rig_device_anomscanner", - "rig_device_orescanner", ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS) + discount_experiments = list(/datum/experiment/scanning/points/basic_sci_rig = TECHWEB_TIER_2_POINTS) announce_channels = list(CHANNEL_SCIENCE) + +/datum/techweb_node/mod_supply + id = TECHWEB_NODE_MOD_SUPPLY + display_name = "Industrial RIG Suit" + description = "Modules for RIGsuits that are designed to mine for ores." + prereq_ids = list(TECHWEB_NODE_MOD_ENGI_ADV, TECHWEB_NODE_MINING) + design_ids = list( + "industrial_rig_module", + "rig_device_drill", + "rig_device_orescanner", + "rig_component_material", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS) + discount_experiments = list(/datum/experiment/scanning/points/basic_min_rig = TECHWEB_TIER_2_POINTS) + announce_channels = list(CHANNEL_SCIENCE, CHANNEL_SUPPLY) diff --git a/icons/obj/rig_modules.dmi b/icons/obj/rig_modules.dmi index b6fb1f637cfbc3ada5553f744bce27dfcb3980cd..46a643548ecf60a077298d4b84ce291c2036e7de 100644 GIT binary patch literal 25430 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 e{Qr-EIethqsp!K+MtK3!f|M0hBncc%>i literal 22496 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 Vl9|F|N^&pNeXYlu73$W({{z3dwax$l