From 26d512e290cfcf4ec2710e8ef177efe85027c04d Mon Sep 17 00:00:00 2001 From: SaukyKouko Date: Thu, 23 Apr 2026 11:26:38 +0300 Subject: [PATCH 1/6] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D1=8F?= =?UTF-8?q?=D0=B5=D0=BC=20=D0=BA=D0=B2=D0=B8=D1=80=D0=BA=20=D0=B7=D0=B0?= =?UTF-8?q?=D1=82=D1=80=D0=BE=D0=BD=D1=83=D1=82=D0=BE=D0=B3=D0=BE=20=D0=BA?= =?UTF-8?q?=D0=BE=D1=81=D0=BC=D0=BE=D1=81=D0=BE=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/quirks/code/voidwalker_quirk.dm | 99 +++++++++++++++++++ tgstation.dme | 1 + 2 files changed, 100 insertions(+) create mode 100644 tff_modular/modules/quirks/code/voidwalker_quirk.dm diff --git a/tff_modular/modules/quirks/code/voidwalker_quirk.dm b/tff_modular/modules/quirks/code/voidwalker_quirk.dm new file mode 100644 index 00000000000..babcd20744c --- /dev/null +++ b/tff_modular/modules/quirks/code/voidwalker_quirk.dm @@ -0,0 +1,99 @@ +/datum/quirk/touched_by_cosmos + name = "Touched by cosmos" + desc = "You have become one with the cosmos and now you look like a living piece of space!" + gain_text = "" + lose_text = "" + medical_record_text = "They've seen the secrets of the cosmos." + +/datum/quirk/touched_by_cosmos/add(client/client_source) + var/mob/living/carbon/human/human_holder = quirk_holder + human_holder.gain_trauma(/datum/brain_trauma/voided, TRAUMA_RESILIENCE_ABSOLUTE) + +/datum/quirk/touched_by_cosmos/remove() + var/mob/living/carbon/human/human_holder = quirk_holder + human_holder.cure_trauma_type(/datum/brain_trauma/voided, TRAUMA_RESILIENCE_ABSOLUTE) + +/datum/brain_trauma/voided_quirk + name = "Voided" + desc = "They've seen the secrets of the cosmos." + scan_desc = "cosmic neural pattern" + gain_text = "" + lose_text = "" + resilience = TRAUMA_RESILIENCE_LOBOTOMY + random_gain = FALSE + known_trauma = FALSE + /// Type for the bodypart texture we add + var/bodypart_overlay_type = /datum/bodypart_overlay/texture/spacey + /// Color in which we paint the space texture + var/space_color = COLOR_WHITE + /// Statis list of all possible space colors + var/static/list/space_colors = list("#00ccff","#b12bff","#ff7f3a","#ff1c55","#ff7597","#28ff94","#0fcfff","#ff8b4c","#ffc425","#2dff96","#1770ff","#ff3f31","#ffba3b") + +/datum/brain_trauma/voided_quirk/on_gain() + . = ..() + + space_color = pick(space_colors) + owner.AddComponent(/datum/component/debris_bleeder, \ + list(/obj/effect/spawner/random/glass_shards = 20, /obj/effect/spawner/random/glass_debris = 0), \ + BRUTE, SFX_SHATTER, sound_threshold = 20) + + RegisterSignal(owner, COMSIG_CARBON_ATTACH_LIMB, PROC_REF(texture_limb)) //also catch new limbs being attached + RegisterSignal(owner, COMSIG_CARBON_REMOVE_LIMB, PROC_REF(untexture_limb)) //and remove it from limbs if they go away + + for(var/obj/item/bodypart as anything in owner.get_bodyparts()) + texture_limb(owner, bodypart) + + if(ishuman(owner)) + var/mob/living/carbon/human/human = owner //CARBON WILL NEVER BE REAL!!!!! + human.underwear = "Nude" + human.undershirt = "Nude" + human.socks = "Nude" + + owner.update_body() + +/datum/brain_trauma/voided_quirk/on_lose() + . = ..() + + UnregisterSignal(owner, list(COMSIG_CARBON_ATTACH_LIMB, COMSIG_CARBON_REMOVE_LIMB)) + qdel(owner.GetComponent(/datum/component/debris_bleeder)) + + for(var/obj/item/bodypart/bodypart as anything in owner.get_bodyparts()) + untexture_limb(owner, bodypart) + owner.update_body() + +/// Apply the space texture +/datum/brain_trauma/voided_quirk/proc/texture_limb(atom/source, obj/item/bodypart/limb) + SIGNAL_HANDLER + + // Not updating because on_gain/on_lose() call it down the line, and calls coming from comsigs update the owner's body themselves + limb.add_bodypart_overlay(new bodypart_overlay_type(), update = FALSE) + limb.add_color_override(space_color, LIMB_COLOR_VOIDWALKER_CURSE) + if(istype(limb, /obj/item/bodypart/head)) + var/obj/item/bodypart/head/head = limb + head.head_flags &= ~HEAD_EYESPRITES + +/datum/brain_trauma/voided_quirk/proc/untexture_limb(atom/source, obj/item/bodypart/limb) + SIGNAL_HANDLER + + var/overlay = locate(bodypart_overlay_type) in limb.bodypart_overlays + if(overlay) + limb.remove_bodypart_overlay(overlay, update = FALSE) + limb.remove_color_override(LIMB_COLOR_VOIDWALKER_CURSE) + + if(istype(limb, /obj/item/bodypart/head)) + var/obj/item/bodypart/head/head = limb + head.head_flags = initial(head.head_flags) + +/datum/brain_trauma/voided/texture_limb(atom/source, obj/item/bodypart/limb) + var/mob/living/carbon/human/texturer = owner + if(texturer.has_trauma_type(/datum/brain_trauma/voided_quirk, TRAUMA_RESILIENCE_ABSOLUTE)) + return FALSE + + ..() + +/datum/brain_trauma/voided/untexture_limb(atom/source, obj/item/bodypart/limb) + var/mob/living/carbon/human/texturer = owner + if(texturer.has_trauma_type(/datum/brain_trauma/voided_quirk, TRAUMA_RESILIENCE_ABSOLUTE)) + return FALSE + + ..() diff --git a/tgstation.dme b/tgstation.dme index 48637c37b70..af0a9160802 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -9806,6 +9806,7 @@ #include "tff_modular\modules\psyonics\code\redaction.dm" #include "tff_modular\modules\quirks\code\_quirk.dm" #include "tff_modular\modules\quirks\code\entombed.dm" +#include "tff_modular\modules\quirks\code\voidwalker_quirk.dm" #include "tff_modular\modules\quirks\code\coldbloodedquirk\coldbloodedquirk.dm" #include "tff_modular\modules\redsec\code\cloth.dm" #include "tff_modular\modules\redsec\code\vending.dm" From 37c3cafa696c005777d605633f6de073c9ccb952 Mon Sep 17 00:00:00 2001 From: SaukyKouko Date: Thu, 23 Apr 2026 11:43:07 +0300 Subject: [PATCH 2/6] =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D1=8F=D0=B5=D0=BC=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D1=83=20?= =?UTF-8?q?=D1=82=D0=B5=D1=81=D1=82=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tff_modular/modules/quirks/code/voidwalker_quirk.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/tff_modular/modules/quirks/code/voidwalker_quirk.dm b/tff_modular/modules/quirks/code/voidwalker_quirk.dm index babcd20744c..a233f681a65 100644 --- a/tff_modular/modules/quirks/code/voidwalker_quirk.dm +++ b/tff_modular/modules/quirks/code/voidwalker_quirk.dm @@ -4,6 +4,7 @@ gain_text = "" lose_text = "" medical_record_text = "They've seen the secrets of the cosmos." + icon = FA_ICON_RECEIPT /datum/quirk/touched_by_cosmos/add(client/client_source) var/mob/living/carbon/human/human_holder = quirk_holder From 4b7ba8d4552b98e342bd43829f6bdc4734c3cdbc Mon Sep 17 00:00:00 2001 From: SaukyKouko Date: Thu, 23 Apr 2026 14:10:35 +0300 Subject: [PATCH 3/6] =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D1=8F=D0=B5=D0=BC=20=D0=B8=D0=BA=D0=BE=D0=BD=D0=BA=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tff_modular/modules/quirks/code/voidwalker_quirk.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tff_modular/modules/quirks/code/voidwalker_quirk.dm b/tff_modular/modules/quirks/code/voidwalker_quirk.dm index a233f681a65..ff7842d7095 100644 --- a/tff_modular/modules/quirks/code/voidwalker_quirk.dm +++ b/tff_modular/modules/quirks/code/voidwalker_quirk.dm @@ -4,7 +4,7 @@ gain_text = "" lose_text = "" medical_record_text = "They've seen the secrets of the cosmos." - icon = FA_ICON_RECEIPT + icon = FA_ICON_SHUTTLE_SPACE /datum/quirk/touched_by_cosmos/add(client/client_source) var/mob/living/carbon/human/human_holder = quirk_holder From 6bc8812066b9fbb0360f5cd42f40fbb3e23f485a Mon Sep 17 00:00:00 2001 From: SaukyKouko Date: Thu, 23 Apr 2026 14:19:11 +0300 Subject: [PATCH 4/6] =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D1=8F=D0=B5=D0=BC=20=D0=B3=D0=BB=D1=83=D0=BF=D1=83=D1=8E=20?= =?UTF-8?q?=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tff_modular/modules/quirks/code/voidwalker_quirk.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tff_modular/modules/quirks/code/voidwalker_quirk.dm b/tff_modular/modules/quirks/code/voidwalker_quirk.dm index ff7842d7095..6fcea5388f3 100644 --- a/tff_modular/modules/quirks/code/voidwalker_quirk.dm +++ b/tff_modular/modules/quirks/code/voidwalker_quirk.dm @@ -8,11 +8,11 @@ /datum/quirk/touched_by_cosmos/add(client/client_source) var/mob/living/carbon/human/human_holder = quirk_holder - human_holder.gain_trauma(/datum/brain_trauma/voided, TRAUMA_RESILIENCE_ABSOLUTE) + human_holder.gain_trauma(/datum/brain_trauma/voided_quirk, TRAUMA_RESILIENCE_ABSOLUTE) /datum/quirk/touched_by_cosmos/remove() var/mob/living/carbon/human/human_holder = quirk_holder - human_holder.cure_trauma_type(/datum/brain_trauma/voided, TRAUMA_RESILIENCE_ABSOLUTE) + human_holder.cure_trauma_type(/datum/brain_trauma/voided_quirk, TRAUMA_RESILIENCE_ABSOLUTE) /datum/brain_trauma/voided_quirk name = "Voided" From 0c1d38fd7ce58c69c17ac1588cb1a209ee28ec08 Mon Sep 17 00:00:00 2001 From: SaukyKouko Date: Thu, 23 Apr 2026 15:25:50 +0300 Subject: [PATCH 5/6] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D1=8F?= =?UTF-8?q?=D0=B5=D0=BC=20=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D1=86=D0=B2=D0=B5=D1=82=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/quirks/code/voidwalker_quirk.dm | 32 ++++++++++++++++--- .../tff/voidwalker_space_color.tsx | 8 +++++ 2 files changed, 36 insertions(+), 4 deletions(-) create mode 100644 tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/tff/voidwalker_space_color.tsx diff --git a/tff_modular/modules/quirks/code/voidwalker_quirk.dm b/tff_modular/modules/quirks/code/voidwalker_quirk.dm index 6fcea5388f3..b839a763d47 100644 --- a/tff_modular/modules/quirks/code/voidwalker_quirk.dm +++ b/tff_modular/modules/quirks/code/voidwalker_quirk.dm @@ -9,11 +9,37 @@ /datum/quirk/touched_by_cosmos/add(client/client_source) var/mob/living/carbon/human/human_holder = quirk_holder human_holder.gain_trauma(/datum/brain_trauma/voided_quirk, TRAUMA_RESILIENCE_ABSOLUTE) + var/datum/brain_trauma/voided_quirk/cosmos_quirk = human_holder.has_trauma_type(/datum/brain_trauma/voided_quirk, TRAUMA_RESILIENCE_ABSOLUTE) + cosmos_quirk.space_color = client_source.prefs.read_preference(/datum/preference/color/space_color) + cosmos_quirk.apply_effects() /datum/quirk/touched_by_cosmos/remove() var/mob/living/carbon/human/human_holder = quirk_holder human_holder.cure_trauma_type(/datum/brain_trauma/voided_quirk, TRAUMA_RESILIENCE_ABSOLUTE) +/datum/quirk_constant_data/touched_by_cosmos + associated_typepath = /datum/quirk/touched_by_cosmos + customization_options = list(/datum/preference/color/space_color) + +/datum/preference/color/space_color + category = PREFERENCE_CATEGORY_MANUALLY_RENDERED + savefile_key = "voidwalker_space_color" + savefile_identifier = PREFERENCE_CHARACTER + can_randomize = FALSE + should_update_preview = FALSE + +/datum/preference/color/space_color/create_default_value() + return COLOR_WHITE + +/datum/preference/color/space_color/is_accessible(datum/preferences/preferences) + if (!..(preferences)) + return FALSE + + return /datum/quirk/touched_by_cosmos::name in preferences.all_quirks + +/datum/preference/color/space_color/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) + return + /datum/brain_trauma/voided_quirk name = "Voided" desc = "They've seen the secrets of the cosmos." @@ -27,17 +53,15 @@ var/bodypart_overlay_type = /datum/bodypart_overlay/texture/spacey /// Color in which we paint the space texture var/space_color = COLOR_WHITE - /// Statis list of all possible space colors - var/static/list/space_colors = list("#00ccff","#b12bff","#ff7f3a","#ff1c55","#ff7597","#28ff94","#0fcfff","#ff8b4c","#ffc425","#2dff96","#1770ff","#ff3f31","#ffba3b") /datum/brain_trauma/voided_quirk/on_gain() . = ..() - - space_color = pick(space_colors) owner.AddComponent(/datum/component/debris_bleeder, \ list(/obj/effect/spawner/random/glass_shards = 20, /obj/effect/spawner/random/glass_debris = 0), \ BRUTE, SFX_SHATTER, sound_threshold = 20) +/datum/brain_trauma/voided_quirk/proc/apply_effects() + RegisterSignal(owner, COMSIG_CARBON_ATTACH_LIMB, PROC_REF(texture_limb)) //also catch new limbs being attached RegisterSignal(owner, COMSIG_CARBON_REMOVE_LIMB, PROC_REF(untexture_limb)) //and remove it from limbs if they go away diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/tff/voidwalker_space_color.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/tff/voidwalker_space_color.tsx new file mode 100644 index 00000000000..c7964658e8c --- /dev/null +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/tff/voidwalker_space_color.tsx @@ -0,0 +1,8 @@ +// THIS IS A NOVA SECTOR UI FILE +import type { Feature } from '../../base'; +import { FeatureColorInput } from '../../base'; + +export const voidwalker_space_color: Feature = { + name: 'Color', + component: FeatureColorInput, +}; From 2efbc486f985e291525887409d522ceb60432b50 Mon Sep 17 00:00:00 2001 From: SaukyKouko Date: Thu, 23 Apr 2026 15:54:16 +0300 Subject: [PATCH 6/6] THIS IS NOT A NOVA SECTOR UI FILE --- .../character_preferences/tff/voidwalker_space_color.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/tff/voidwalker_space_color.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/tff/voidwalker_space_color.tsx index c7964658e8c..f0e6be5e7ff 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/tff/voidwalker_space_color.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/tff/voidwalker_space_color.tsx @@ -1,4 +1,3 @@ -// THIS IS A NOVA SECTOR UI FILE import type { Feature } from '../../base'; import { FeatureColorInput } from '../../base';