From ca693d0bc101270377bc5529fca3395a3550d193 Mon Sep 17 00:00:00 2001 From: Geeves <22774890+Geevies@users.noreply.github.com> Date: Tue, 12 Aug 2025 18:29:52 +0200 Subject: [PATCH] Falcata Fixes (#21144) * Fixes Falcata sprite handling and emissives. Fixes https://github.com/Aurorastation/Aurora.3/issues/21141 --- code/modules/clothing/spacesuits/rig/rig.dm | 23 ++++++++++++----- .../clothing/spacesuits/rig/suits/light.dm | 24 +++++++++++++++++- html/changelogs/geeves-falcata_fix.yml | 6 +++++ icons/obj/item/clothing/rig/falcata.dmi | Bin 7841 -> 3031 bytes 4 files changed, 46 insertions(+), 7 deletions(-) create mode 100644 html/changelogs/geeves-falcata_fix.yml diff --git a/code/modules/clothing/spacesuits/rig/rig.dm b/code/modules/clothing/spacesuits/rig/rig.dm index 748563eb391..25300ea94f3 100644 --- a/code/modules/clothing/spacesuits/rig/rig.dm +++ b/code/modules/clothing/spacesuits/rig/rig.dm @@ -159,7 +159,7 @@ for(var/obj/item/clothing/piece in list(gloves,helmet,boots,chest)) if(!istype(piece)) continue - piece.canremove = 0 + piece.canremove = FALSE piece.name = "[suit_type] [initial(piece.name)]" piece.desc = "It seems to be part of a [src.name]." piece.icon = icon @@ -167,8 +167,7 @@ piece.item_state = "[initial(icon_state)]" piece.contained_sprite = TRUE if(length(icon_supported_species_tags)) - piece.icon_auto_adapt = TRUE - piece.icon_supported_species_tags = icon_supported_species_tags + set_piece_adaptation(piece) piece.min_cold_protection_temperature = min_cold_protection_temperature piece.max_heat_protection_temperature = max_heat_protection_temperature if(piece.siemens_coefficient > siemens_coefficient) //So that insulated gloves keep their insulation. @@ -189,6 +188,11 @@ set_vision(!offline) update_icon(1) +/// Sets the icon adaptation and species supported tags equal to parent, can be overriden for custom functionality +/obj/item/rig/proc/set_piece_adaptation(var/obj/item/clothing/piece) + piece.icon_auto_adapt = TRUE + piece.icon_supported_species_tags = icon_supported_species_tags + /obj/item/rig/Destroy() for(var/obj/item/piece in list(gloves,boots,helmet,chest)) qdel(piece) @@ -305,8 +309,7 @@ if(seal_delay && !instant && !do_after(wearer, seal_delay, src, do_flags = DO_DEFAULT & ~DO_USER_SAME_HAND)) failed_to_seal = 1 - piece.icon_state = "[initial(icon_state)][!seal_target ? "_sealed" : ""]_[piece.clothing_class()]" - piece.item_state = "[initial(icon_state)][!seal_target ? "_sealed" : ""]" + update_sealed_piece_icon(piece, seal_target) switch(msg_type) if("boots") to_chat(wearer, SPAN_NOTICE("\The [piece] [!seal_target ? "seal around your feet" : "relax their grip on your legs"].")) @@ -379,6 +382,11 @@ initiator.loc.update_icon() SSstatpanels.set_action_tabs(initiator.client, initiator) +/// Sets the piece's icon and item state based on the seal target, can be overriden for custom functionality +/obj/item/rig/proc/update_sealed_piece_icon(var/obj/item/clothing/piece, var/seal_target) + piece.icon_state = "[initial(icon_state)][!seal_target ? "_sealed" : ""]_[piece.clothing_class()]" + piece.item_state = "[initial(icon_state)][!seal_target ? "_sealed" : ""]" + /obj/item/rig/proc/update_component_sealed() for(var/obj/item/piece in list(helmet,boots,gloves,chest)) if(canremove) @@ -392,7 +400,6 @@ update_icon(1) /obj/item/rig/process() - // If we've lost any parts, grab them back. var/mob/living/M for(var/obj/item/piece in list(gloves,boots,helmet,chest)) @@ -403,6 +410,7 @@ else piece.forceMove(src) + var/previous_offline_status = offline if(!istype(wearer) || loc != wearer || wearer.back != src || canremove || !cell || cell.charge <= 0) if(!cell || cell.charge <= 0) if(electrified > 0) @@ -430,6 +438,9 @@ slowdown = initial(slowdown) wearer?.update_equipment_speed_mods() + if(offline != previous_offline_status) + update_icon(TRUE) + set_vision(!offline) if(offline) crushing = FALSE diff --git a/code/modules/clothing/spacesuits/rig/suits/light.dm b/code/modules/clothing/spacesuits/rig/suits/light.dm index 96b89b7350f..db022b1f859 100644 --- a/code/modules/clothing/spacesuits/rig/suits/light.dm +++ b/code/modules/clothing/spacesuits/rig/suits/light.dm @@ -348,17 +348,38 @@ I.AddOverlays(emissive_overlay) return I +/obj/item/rig/light/falcata/set_vision(var/active) + if(helmet) + // don't tint the vision if the suit isn't sealed, the sprite doesn't cover the face + // this does however still tint the vision if it's sealed and the battery dies though + helmet.tint = (active || canremove ? vision_restriction : offline_vision_restriction) + +/obj/item/rig/light/falcata/set_piece_adaptation(var/obj/item/clothing/piece) + // the suit doesn't need to differ by-species + if(istype(piece, /obj/item/clothing/suit/space/rig/light/falcata)) + return + return ..() + +/obj/item/rig/light/falcata/update_sealed_piece_icon(var/obj/item/clothing/piece, var/seal_target) + if(istype(piece, /obj/item/clothing/head/helmet/space/rig/light/falcata)) + if(!seal_target) + piece.flags_inv = HIDEEARS|HIDEEYES|HIDEFACE|BLOCKHAIR // if we're sealing the helmet, hide the hair + else + piece.flags_inv = 0 // otherwise, show it all + return ..() + /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. + flags_inv = 0 // Don't hide jumpsuit or tail /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) + var/obj/item/rig/rigcontroller = H.get_equipped_item(slot_back) if(!istype(rigcontroller, /obj/item/rig) || rigcontroller.offline) return I @@ -378,3 +399,4 @@ BOMB = ARMOR_BOMB_RESISTANT, BIO = ARMOR_BIO_SHIELDED, ) + flags_inv = 0 // before being sealed, ears eyes etc should not be hidden diff --git a/html/changelogs/geeves-falcata_fix.yml b/html/changelogs/geeves-falcata_fix.yml new file mode 100644 index 00000000000..abb684a111c --- /dev/null +++ b/html/changelogs/geeves-falcata_fix.yml @@ -0,0 +1,6 @@ +author: Geeves + +delete-after: True + +changes: + - bugfix: "Fixes Falcata sprite handling and emissives." diff --git a/icons/obj/item/clothing/rig/falcata.dmi b/icons/obj/item/clothing/rig/falcata.dmi index 85f2e7534916611043b5699a7ca129378bbd9ecc..610c949aff9b5a2641849aa7f507c45cc05ede47 100644 GIT binary patch literal 3031 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