From 6a323856a8906d5a78e1b6ee4ef34c0974239aa1 Mon Sep 17 00:00:00 2001 From: VMSolidus Date: Wed, 6 Aug 2025 08:55:42 -0400 Subject: [PATCH] Falcata Exoskeleton (#21077) This PR adds a new tier 1 exoskeleton to the hardsuit designs. I've been bothered for awhile that there exist security hardsuit modules available at roundstart, which cannot actually be used without science first unlocking combat hardsuits, since normal hardsuits cannot use them. So this PR adds a new exoskeleton(notably not a hardsuit, it offers no space protection!), which serves to provide a means of putting those tier 1 security modules on something, without invalidating the later combat hardsuits(which are all significant upgrades over this). Many of these lower tier security modules were essentially invalidated by higher tier sec modules that would get unlocked alongside actual combat hardsuits. The falcata exoskeleton has the same armor values as security's heavy body armor, essentially meaning its primarily only an upgrade over said armor in the sense that it lets the wearer use the shoulder mounted taser module. image image ### Asset Licenses The following assets that **have not** been created by myself are included in this PR: | icons/obj/item/clothing/rig/falcata.dmi | noblerow (discord) | CC-BY-SA-3.0 | --------- Signed-off-by: Matt Atlas Co-authored-by: Matt Atlas --- .../items/weapons/circuitboards/rig.dm | 8 +++ .../spacesuits/rig/rig_construction.dm | 11 +++ .../clothing/spacesuits/rig/suits/light.dm | 67 ++++++++++++++++++ .../research/designs/mechfab/hardsuit/rigs.dm | 12 ++++ .../Hellfirejag-falcata_exosuit.yml | 4 ++ icons/obj/item/clothing/rig/falcata.dmi | Bin 0 -> 7841 bytes 6 files changed, 102 insertions(+) create mode 100644 html/changelogs/Hellfirejag-falcata_exosuit.yml create mode 100644 icons/obj/item/clothing/rig/falcata.dmi diff --git a/code/game/objects/items/weapons/circuitboards/rig.dm b/code/game/objects/items/weapons/circuitboards/rig.dm index fc5c260a875..a87b2774cae 100644 --- a/code/game/objects/items/weapons/circuitboards/rig.dm +++ b/code/game/objects/items/weapons/circuitboards/rig.dm @@ -55,6 +55,14 @@ name = "combat hardsuit control and targeting board" origin_tech = list(TECH_DATA = 7, TECH_COMBAT = 6) +/obj/item/circuitboard/rig_assembly/combat/falcata + name = "falcata exoskeleton central circuit board" + origin_tech = list(TECH_COMBAT = 1) + +/obj/item/circuitboard/rig_assembly/combat/targeting/falcata + name = "falcata exoskeleton control and targeting board" + origin_tech = list(TECH_COMBAT = 1) + ////////////////////// ////ILLEGAL BOARDS//// ////////////////////// diff --git a/code/modules/clothing/spacesuits/rig/rig_construction.dm b/code/modules/clothing/spacesuits/rig/rig_construction.dm index 66efc85b95b..886a34d2f6e 100644 --- a/code/modules/clothing/spacesuits/rig/rig_construction.dm +++ b/code/modules/clothing/spacesuits/rig/rig_construction.dm @@ -157,6 +157,17 @@ target_board_type = /obj/item/circuitboard/rig_assembly/combat/targeting/combat origin_tech = list(TECH_MATERIAL = 6, TECH_ENGINEERING = 5, TECH_MAGNET = 4, TECH_POWER = 4, TECH_COMBAT = 6) +/obj/item/rig_assembly/combat/falcata + name = "falcata exoskeleton control module" + desc = "The assembly frame for a security exoskeleton." + icon = 'icons/obj/item/clothing/rig/falcata.dmi' + icon_base = "falcata" + icon_state = "falcata1" + rig_type = /obj/item/rig/light/falcata + board_type = /obj/item/circuitboard/rig_assembly/combat/falcata + target_board_type = /obj/item/circuitboard/rig_assembly/combat/targeting/falcata + origin_tech = list(TECH_COMBAT = 1) + //////////////////////// ////ILLEGAL ASSEMBLY//// //////////////////////// diff --git a/code/modules/clothing/spacesuits/rig/suits/light.dm b/code/modules/clothing/spacesuits/rig/suits/light.dm index 13f64746299..ba02f4ed54b 100644 --- a/code/modules/clothing/spacesuits/rig/suits/light.dm +++ b/code/modules/clothing/spacesuits/rig/suits/light.dm @@ -310,3 +310,70 @@ /obj/item/rig_module/device/door_hack, /obj/item/rig_module/mounted/xray ) + +/obj/item/rig/light/falcata + name = "falcata exoskeleton control module" + desc = "An armored security exoskeleton, known as the Falcata. It serves as a lightweight platform for bearing security hardsuit modules." + icon = 'icons/obj/item/clothing/rig/falcata.dmi' + icon_state = "falcata_rig" + icon_supported_species_tags = list("skr", "taj", "una", "vau",) + suit_type = "falcata combat exoskeleton" + body_parts_covered = UPPER_TORSO | LOWER_TORSO | LEGS | ARMS + armor = list( + MELEE = ARMOR_MELEE_MAJOR, + BULLET = ARMOR_BALLISTIC_MAJOR, + LASER = ARMOR_LASER_RIFLE, + ENERGY = ARMOR_ENERGY_SMALL, + BOMB = ARMOR_BOMB_PADDED, + ) + species_restricted = list(BODYTYPE_HUMAN, BODYTYPE_UNATHI, BODYTYPE_SKRELL, BODYTYPE_VAURCA, BODYTYPE_IPC, BODYTYPE_TAJARA) + + seal_delay = 3 // Its only deploying the myomers and helmet. + offline_slowdown = 2 + offline_vision_restriction = TINT_BLIND // Visorless helmet sprite, the helmet's face is just a camera. + + allowed = list(/obj/item/gun,/obj/item/device/flashlight,/obj/item/tank,/obj/item/device/suit_cooling_unit,/obj/item/melee/baton) + allowed_module_types = MODULE_GENERAL | MODULE_LIGHT_COMBAT | MODULE_HEAVY_COMBAT + + chest_type = /obj/item/clothing/suit/space/rig/light/falcata + helm_type = /obj/item/clothing/head/helmet/space/rig/light/falcata + glove_type = null + boot_type = null + +/obj/item/rig/light/falcata/get_mob_overlay(mob/living/carbon/human/H, mob_icon, mob_state, slot) + var/image/I = ..() + if(slot == slot_back_str && !offline) + var/image/emissive_overlay = emissive_appearance(mob_icon, "falcata_rig_ba-emissive") + I.AddOverlays(emissive_overlay) + return I + +/obj/item/clothing/suit/space/rig/light/falcata + name = "myomer frame" + body_parts_covered = null + breach_threshold = 45 // We aren't a real hardsuit, rather a very thick torso plate. + +/obj/item/clothing/suit/space/rig/light/falcata/get_mob_overlay(mob/living/carbon/human/H, mob_icon, mob_state, slot) + var/image/I = ..() + if(slot != slot_wear_suit_str) + return I + + var/obj/item/rig/rigcontroller = H.get_equipped_item(slot_wear_suit) + if(!istype(rigcontroller, /obj/item/rig) || rigcontroller.offline) + return I + + var/image/emissive_overlay = emissive_appearance(mob_icon, "falcata_rig_sealed_su-emissive") + I.AddOverlays(emissive_overlay) + return I + +/obj/item/clothing/head/helmet/space/rig/light/falcata + name = "helmet" + // The helmet's unusually thick, with the fun caveat that it fully blacks out your screen when unpowered. + flash_protection = FLASH_PROTECTION_MAJOR + armor = list( + MELEE = ARMOR_MELEE_MAJOR, + BULLET = ARMOR_BALLISTIC_RIFLE, + LASER = ARMOR_LASER_RIFLE, + ENERGY = ARMOR_ENERGY_SMALL, + BOMB = ARMOR_BOMB_RESISTANT, + BIO = ARMOR_BIO_SHIELDED, + ) diff --git a/code/modules/research/designs/mechfab/hardsuit/rigs.dm b/code/modules/research/designs/mechfab/hardsuit/rigs.dm index 1291606d281..c20267665c9 100644 --- a/code/modules/research/designs/mechfab/hardsuit/rigs.dm +++ b/code/modules/research/designs/mechfab/hardsuit/rigs.dm @@ -60,3 +60,15 @@ build_path = /obj/item/rig_assembly/combat/illegal/hacker req_tech = list(TECH_MATERIAL = 4, TECH_ENGINEERING = 3, TECH_MAGNET = 2, TECH_POWER = 3, TECH_COMBAT = 3, TECH_ILLEGAL = 3) materials = list(DEFAULT_WALL_MATERIAL = 25000, MATERIAL_GLASS = 12500, MATERIAL_GOLD = 2500, MATERIAL_SILVER = 3500, MATERIAL_URANIUM = 5550) + +/datum/design/rig/falcata + name = "Falcata Exoskeleton Control Module Assembly" + desc = "An assembly for a security exoskeleton. Though offering no vacuum protection, the Falcata serves as a lightweight platform for bearing security hardsuit modules." + materials = list( + DEFAULT_WALL_MATERIAL = 12500, + MATERIAL_ALUMINIUM = 12500, + MATERIAL_PLASTEEL = 5000, + MATERIAL_URANIUM = 3500, + MATERIAL_SILVER = 1500, + MATERIAL_GOLD = 1500, + ) diff --git a/html/changelogs/Hellfirejag-falcata_exosuit.yml b/html/changelogs/Hellfirejag-falcata_exosuit.yml new file mode 100644 index 00000000000..70a42dfefb0 --- /dev/null +++ b/html/changelogs/Hellfirejag-falcata_exosuit.yml @@ -0,0 +1,4 @@ +author: Hellfirejag +delete-after: True +changes: + - rscadd: "Added the falcata exoskeleton as a new low-tier 'combat hardsuit' for machinists to make." diff --git a/icons/obj/item/clothing/rig/falcata.dmi b/icons/obj/item/clothing/rig/falcata.dmi new file mode 100644 index 0000000000000000000000000000000000000000..85f2e7534916611043b5699a7ca129378bbd9ecc GIT binary patch literal 7841 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