From 437e95142fad7ea8f6b92ecd136ccd8a1760fa5a Mon Sep 17 00:00:00 2001 From: Geoengi <139566513+Geoengi@users.noreply.github.com> Date: Wed, 28 Jan 2026 20:29:06 +0000 Subject: [PATCH] Assorted X-ray Eyes/Goggles Changes + Penlight Message Fix (#94860) ## About The Pull Request X-ray eyes now possess the FLASH_PROTECTION_SENSITIVE define, meaning you need at least an equipped welding mask to protect from flashes. Syndicate x-ray goggles get a relatively unused sprite (it also belongs to material goggles, which are only mapped in twice in the entire codebase), aligning with the color of the x-ray eyes. Moth thermal eyes are raised a step up to being hyper-sensitive to flashes. Fixed a couple of penlight messages that I noticed while browsing the _eyes.dm file, as well, to display properly. ## Why It's Good For The Game The decision to either choose thermal eyes or x-ray eyes, when **unlocked by the same techweb node**, is heavily one-sided if you know anything about either. Thermal eyes allow you to see only mobs through walls and give you pseudo-night vision, while also making you sensitive to flashes, in opposition to x-ray eyes that allow you to see everything without any added flash sensitivity, albeit with no night vision. Even the changeling ability makes you hyper-sensitive to flashes while X-ray mode is active, which is something restricted to only them. With this change, not only does which eye implant type you choose matter, but it also gives more use to the thermal sight genetics mutation, as that does not affect flash sensitivity at the cost of only having a temporary duration per activation. Given flash vulnerability for their regular eyes, thermal moth eyes are made hyper-sensitive to preserve this consistency between both moths and the x-ray/thermal pairing. And for the Syndicate goggles, it also brings consistency with the technology, as the crew's eyes already establish a color for x-ray technology and lack of night vision. The bug fixes are just good for the 0.01% of doctors who would use the penlight. ## Changelog :cl: balance: X-ray eyes now possess flash sensitivity, requiring additional flash protection to negate bright lights. balance: X-ray goggles also no longer have pseudo night vision, putting them more in line with the eyes. balance: Moth thermal eyes are hyper-sensitive to flashes, like their x-ray brothers. fix: Penlight messages for examining zombie and x-ray eyes work as they should, with maintenance eyes losing a superfluous period. image: X-ray goggles now have a relatively unique, blue tint and glasses color to represent their capabilities. /:cl: --- code/modules/clothing/glasses/_glasses.dm | 3 +++ .../surgery/organs/internal/eyes/_eyes.dm | 16 +++++++++------- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/code/modules/clothing/glasses/_glasses.dm b/code/modules/clothing/glasses/_glasses.dm index bcaef35e5d6..cb83c0eedd1 100644 --- a/code/modules/clothing/glasses/_glasses.dm +++ b/code/modules/clothing/glasses/_glasses.dm @@ -588,7 +588,10 @@ /obj/item/clothing/glasses/thermal/xray name = "syndicate xray goggles" desc = "A pair of xray goggles manufactured by the Syndicate." + icon_state = "material" + color_cutoffs = null vision_flags = SEE_TURFS|SEE_MOBS|SEE_OBJS + glass_colour_type = /datum/client_colour/glass_colour/lightblue /obj/item/clothing/glasses/thermal/xray/equipped(mob/living/carbon/human/user, slot) . = ..() diff --git a/code/modules/surgery/organs/internal/eyes/_eyes.dm b/code/modules/surgery/organs/internal/eyes/_eyes.dm index 20bf1ecfac5..b6152e8b0ce 100644 --- a/code/modules/surgery/organs/internal/eyes/_eyes.dm +++ b/code/modules/surgery/organs/internal/eyes/_eyes.dm @@ -620,10 +620,10 @@ name = "undead eyes" desc = "Somewhat counterintuitively, these half-rotten eyes actually have superior vision to those of a living human." color_cutoffs = list(25, 35, 5) - penlight_message = "are rotten and decayed" + penlight_message = "are rotten and decayed!" /obj/item/organ/eyes/zombie/penlight_examine(mob/living/viewer, obj/item/examtool) - return span_danger(penlight_message) + return span_danger("[owner.p_Their()] eyes [penlight_message]") /obj/item/organ/eyes/alien name = "alien eyes" @@ -707,8 +707,9 @@ eye_color_left = "#3cb8a5" eye_color_right = "#3cb8a5" sight_flags = SEE_MOBS | SEE_OBJS | SEE_TURFS + flash_protect = FLASH_PROTECTION_SENSITIVE organ_traits = list(TRAIT_XRAY_VISION) - penlight_message = "replaced by small radiation emitters and detectors" + penlight_message = "are replaced by small radiation emitters and detectors" /obj/item/organ/eyes/robotic/thermals name = "thermal eyes" @@ -1090,7 +1091,7 @@ eye_color_left = "#3c4e52" eye_color_right = "#3c4e52" blink_animation = FALSE - flash_protect = FLASH_PROTECTION_SENSITIVE + flash_protect = FLASH_PROTECTION_HYPER_SENSITIVE pupils_name = "aperture clusters" /obj/item/organ/eyes/robotic/shield/moth @@ -1115,13 +1116,14 @@ penlight_message = "are bulbous clusters of LEDs and cameras" pupils_name = "aperture clusters" -/obj/item/organ/eyes/robotic/thermals/moth //we inherit flash weakness from thermals +/obj/item/organ/eyes/robotic/thermals/moth name = "thermal moth eyes" icon_state = "eyes_moth_cyber_thermal" eye_icon_state = "motheyes_white" eye_color_left = "#901f38" eye_color_right = "#901f38" blink_animation = FALSE + flash_protect = FLASH_PROTECTION_HYPER_SENSITIVE pupils_name = "sensor clusters" penlight_message = "are two clustered hemispheres of thermal sensors" @@ -1173,13 +1175,13 @@ low_light_cutoff = list(5, 12, 20) medium_light_cutoff = list(15, 20, 30) high_light_cutoff = list(30, 35, 50) - penlight_message = "glow a foggy red, sizzling under the light" + penlight_message = "glow a foggy red, sizzling under the light!" /obj/item/organ/eyes/night_vision/maintenance_adapted/penlight_examine(mob/living/viewer, obj/item/examtool) if(!owner.is_blind()) to_chat(owner, span_danger("Your eyes sizzle agonizingly as light is shone on them!")) apply_organ_damage(20 * examtool.light_power) //that's 0.5 lightpower for a penlight, so one penlight shining is equivalent to two seconds in a lit area - return span_danger("[owner.p_Their()] eyes [penlight_message].") + return span_danger("[owner.p_Their()] eyes [penlight_message]") /obj/item/organ/eyes/night_vision/maintenance_adapted/on_life(seconds_per_tick) if(owner.get_eye_protection() <= FLASH_PROTECTION_SENSITIVE && !owner.is_blind() && isturf(owner.loc) && owner.has_light_nearby(light_amount=0.5)) //we allow a little more than usual so we can produce light from the adapted eyes