From cbde7d6206955b6953474b35a9340b01ea8424c2 Mon Sep 17 00:00:00 2001 From: Roxy <75404941+TealSeer@users.noreply.github.com> Date: Thu, 2 Apr 2026 16:25:36 -0400 Subject: [PATCH] [BOUNTY] Character Preferences Reorganization (#5389) This bounty was requested by @ArrisFairburne Cleans up the character customization; various customization features have been moved into three new tabs, "Character Basics" "OOC Preferences" and "Silicon Preferences". A ton of the character customization options (maybe 40%?) are stuff that almost nobody would use on a regular basis. Options like mushroom caps, frills, fluff, taur bodies, xenodorsal heads, etc. could be ignored by a most players because they're irrelevant to their characters. Ideally the most necessary stuff (basic furry parts, our required FTs, and soundbytes for speaking) are the stuff the players see first, with more stuff continuing to be available upon checking different tabs. Silicon prefs are moved into their own tab because most characters are carbons so they just won't ever need to bother with them.
Screenshots/Videos basics visuals lore lore2 ooc silicon
:cl: ArrisFairburne qol: Cleaned up the character preference window. /:cl: ^ Conflicts: ^ tgui/packages/tgui/interfaces/PreferencesMenu/types.ts --- code/__DEFINES/~skyrat_defines/preferences.dm | 7 ++ .../client/preferences/ai_core_display.dm | 2 +- .../client/preferences/ai_emote_display.dm | 2 +- .../client/preferences/ai_hologram_display.dm | 2 +- code/modules/client/preferences/random.dm | 2 +- .../client/preferences/silicon_gender.dm | 2 +- .../preferences/species_features/basic.dm | 2 +- .../code/modules/client/preferences/brain.dm | 2 +- .../client/preferences/erp_preferences.dm | 10 +-- .../modules/client/preferences/flavor_text.dm | 6 +- .../modules/client/preferences/genitals.dm | 12 +-- .../modules/client/preferences/headshot.dm | 2 +- .../client/preferences/mutant_parts.dm | 30 ++++--- .../species_features/digitigrade_legs.dm | 2 +- .../modules/client/flavor_text/flavor_text.dm | 9 +- .../modules/client/preferences/blooper.dm | 8 +- .../client/verbs/character_directory.dm | 6 +- .../modules/rr_opt_in/rr_optin_preferences.dm | 2 +- .../modules/client/preferences/hypnopref.dm | 2 +- .../CharacterPreferences/MainPage.tsx | 88 ++++++++++++++++++- .../CharacterPreferences/index.tsx | 8 +- .../interfaces/PreferencesMenu/LimbsPage.tsx | 1 + .../tgui/interfaces/PreferencesMenu/index.tsx | 2 +- .../bubbers/species_features.tsx | 8 +- .../skyrat/species_features.tsx | 1 + .../tgui/interfaces/PreferencesMenu/types.ts | 25 +++--- 26 files changed, 179 insertions(+), 64 deletions(-) diff --git a/code/__DEFINES/~skyrat_defines/preferences.dm b/code/__DEFINES/~skyrat_defines/preferences.dm index 9fb6cd69ff3..c7007efb8a0 100644 --- a/code/__DEFINES/~skyrat_defines/preferences.dm +++ b/code/__DEFINES/~skyrat_defines/preferences.dm @@ -14,3 +14,10 @@ #define ORGAN_PREF_POSI_BRAIN "Positronic Brain" #define ORGAN_PREF_MMI_BRAIN "Man-Machine Interface" #define ORGAN_PREF_CIRCUIT_BRAIN "Circuitboard" + +/// Essential features for every character, don't add new prefs to this unless you can justify why the majority of characters would use it +#define PREFERENCE_CATEGORY_CHARACTER_BASICS "character_basics" +/// OOC per-character preferences e.g. character advert, ERP status +#define PREFERENCE_CATEGORY_OOC_PREFS "ooc_preferences" +/// Preferences that only apply to AI and cyborgs +#define PREFERENCE_CATEGORY_SILICON_PREFS "silicon_preferences" diff --git a/code/modules/client/preferences/ai_core_display.dm b/code/modules/client/preferences/ai_core_display.dm index c2eedc03e47..23d4b4b1291 100644 --- a/code/modules/client/preferences/ai_core_display.dm +++ b/code/modules/client/preferences/ai_core_display.dm @@ -1,6 +1,6 @@ /// What to show on the AI screen /datum/preference/choiced/ai_core_display - category = PREFERENCE_CATEGORY_NON_CONTEXTUAL + category = PREFERENCE_CATEGORY_SILICON_PREFS // BUBBER EDIT CHANGE - Original: PREFERENCE_CATEGORY_NON_CONTEXTUAL savefile_identifier = PREFERENCE_CHARACTER savefile_key = "preferred_ai_core_display" should_generate_icons = TRUE diff --git a/code/modules/client/preferences/ai_emote_display.dm b/code/modules/client/preferences/ai_emote_display.dm index 685887e4e49..b0472b48cb4 100644 --- a/code/modules/client/preferences/ai_emote_display.dm +++ b/code/modules/client/preferences/ai_emote_display.dm @@ -1,6 +1,6 @@ /// What to show on the AI monitor /datum/preference/choiced/ai_emote_display - category = PREFERENCE_CATEGORY_NON_CONTEXTUAL + category = PREFERENCE_CATEGORY_SILICON_PREFS // BUBBER EDIT CHANGE - Original: PREFERENCE_CATEGORY_NON_CONTEXTUAL savefile_identifier = PREFERENCE_CHARACTER savefile_key = "preferred_ai_emote_display" should_generate_icons = TRUE diff --git a/code/modules/client/preferences/ai_hologram_display.dm b/code/modules/client/preferences/ai_hologram_display.dm index f82803039cc..5cc0f944e0b 100644 --- a/code/modules/client/preferences/ai_hologram_display.dm +++ b/code/modules/client/preferences/ai_hologram_display.dm @@ -1,6 +1,6 @@ /// What to show on the AI hologram /datum/preference/choiced/ai_hologram_display - category = PREFERENCE_CATEGORY_NON_CONTEXTUAL + category = PREFERENCE_CATEGORY_SILICON_PREFS // BUBBER EDIT CHANGE - Original: PREFERENCE_CATEGORY_NON_CONTEXTUAL savefile_identifier = PREFERENCE_CHARACTER savefile_key = "preferred_ai_hologram_display" should_generate_icons = TRUE diff --git a/code/modules/client/preferences/random.dm b/code/modules/client/preferences/random.dm index a28c46a4c95..05ac23667ba 100644 --- a/code/modules/client/preferences/random.dm +++ b/code/modules/client/preferences/random.dm @@ -18,7 +18,7 @@ return RANDOM_DISABLED /datum/preference/toggle/random_hardcore - category = PREFERENCE_CATEGORY_NON_CONTEXTUAL + category = PREFERENCE_CATEGORY_OOC_PREFS // BUBBER EDIT CHANGE - Original: PREFERENCE_CATEGORY_NON_CONTEXTUAL savefile_key = "random_hardcore" savefile_identifier = PREFERENCE_CHARACTER can_randomize = FALSE diff --git a/code/modules/client/preferences/silicon_gender.dm b/code/modules/client/preferences/silicon_gender.dm index 65d7b27b582..332d6aa9079 100644 --- a/code/modules/client/preferences/silicon_gender.dm +++ b/code/modules/client/preferences/silicon_gender.dm @@ -4,7 +4,7 @@ #define SILICON_NEUTER "It/Its" /datum/preference/choiced/silicon_gender - category = PREFERENCE_CATEGORY_NON_CONTEXTUAL + category = PREFERENCE_CATEGORY_SILICON_PREFS // BUBBER EDIT CHANGE - Original: PREFERENCE_CATEGORY_NON_CONTEXTUAL savefile_identifier = PREFERENCE_CHARACTER savefile_key = "silicon_gender" var/static/use_character_gender = "Use character gender" diff --git a/code/modules/client/preferences/species_features/basic.dm b/code/modules/client/preferences/species_features/basic.dm index b33f2818bda..594e63c57a0 100644 --- a/code/modules/client/preferences/species_features/basic.dm +++ b/code/modules/client/preferences/species_features/basic.dm @@ -23,7 +23,7 @@ priority = PREFERENCE_PRIORITY_BODYPARTS savefile_key = "eye_color" savefile_identifier = PREFERENCE_CHARACTER - category = PREFERENCE_CATEGORY_SECONDARY_FEATURES + category = PREFERENCE_CATEGORY_CHARACTER_BASICS // BUBBER EDIT CHANGE - Original: PREFERENCE_CATEGORY_SECONDARY_FEATURES relevant_head_flag = HEAD_EYECOLOR /datum/preference/color/eye_color/apply_to_human(mob/living/carbon/human/target, value) diff --git a/modular_skyrat/master_files/code/modules/client/preferences/brain.dm b/modular_skyrat/master_files/code/modules/client/preferences/brain.dm index 386412d3133..6c490dd2b69 100644 --- a/modular_skyrat/master_files/code/modules/client/preferences/brain.dm +++ b/modular_skyrat/master_files/code/modules/client/preferences/brain.dm @@ -1,5 +1,5 @@ /datum/preference/choiced/brain_type - category = PREFERENCE_CATEGORY_NON_CONTEXTUAL + category = PREFERENCE_CATEGORY_SILICON_PREFS savefile_key = "brain_type" savefile_identifier = PREFERENCE_CHARACTER priority = PREFERENCE_PRIORITY_NAMES // Apply after species, cause that's super important. diff --git a/modular_skyrat/master_files/code/modules/client/preferences/erp_preferences.dm b/modular_skyrat/master_files/code/modules/client/preferences/erp_preferences.dm index c77508b6594..69cd36502a1 100644 --- a/modular_skyrat/master_files/code/modules/client/preferences/erp_preferences.dm +++ b/modular_skyrat/master_files/code/modules/client/preferences/erp_preferences.dm @@ -130,7 +130,7 @@ savefile_key = "new_genitalia_growth_pref" /datum/preference/choiced/erp_status - category = PREFERENCE_CATEGORY_NON_CONTEXTUAL + category = PREFERENCE_CATEGORY_OOC_PREFS savefile_identifier = PREFERENCE_CHARACTER savefile_key = "erp_status_pref" @@ -180,7 +180,7 @@ return FALSE /datum/preference/choiced/erp_status_nc - category = PREFERENCE_CATEGORY_NON_CONTEXTUAL + category = PREFERENCE_CATEGORY_OOC_PREFS savefile_identifier = PREFERENCE_CHARACTER savefile_key = "erp_status_pref_nc" @@ -210,7 +210,7 @@ return FALSE /datum/preference/choiced/erp_status_v - category = PREFERENCE_CATEGORY_NON_CONTEXTUAL + category = PREFERENCE_CATEGORY_OOC_PREFS savefile_identifier = PREFERENCE_CHARACTER savefile_key = "erp_status_pref_v" @@ -240,7 +240,7 @@ return FALSE /datum/preference/choiced/erp_status_mechanics - category = PREFERENCE_CATEGORY_NON_CONTEXTUAL + category = PREFERENCE_CATEGORY_OOC_PREFS savefile_identifier = PREFERENCE_CHARACTER savefile_key = "erp_status_pref_mechanics" @@ -300,7 +300,7 @@ return FALSE /datum/preference/choiced/erp_status_hypno - category = PREFERENCE_CATEGORY_NON_CONTEXTUAL + category = PREFERENCE_CATEGORY_OOC_PREFS savefile_identifier = PREFERENCE_CHARACTER savefile_key = "erp_status_pref_hypnosis" diff --git a/modular_skyrat/master_files/code/modules/client/preferences/flavor_text.dm b/modular_skyrat/master_files/code/modules/client/preferences/flavor_text.dm index fbd71e61ecf..413add1b0cc 100644 --- a/modular_skyrat/master_files/code/modules/client/preferences/flavor_text.dm +++ b/modular_skyrat/master_files/code/modules/client/preferences/flavor_text.dm @@ -1,5 +1,5 @@ /datum/preference/text/flavor_text - category = PREFERENCE_CATEGORY_NON_CONTEXTUAL + category = PREFERENCE_CATEGORY_CHARACTER_BASICS savefile_identifier = PREFERENCE_CHARACTER savefile_key = "flavor_text" maximum_value_length = MAX_FLAVOR_LEN @@ -8,7 +8,7 @@ target.dna.features["flavor_text"] = value /datum/preference/text/silicon_flavor_text - category = PREFERENCE_CATEGORY_NON_CONTEXTUAL + category = PREFERENCE_CATEGORY_SILICON_PREFS savefile_identifier = PREFERENCE_CHARACTER savefile_key = "silicon_flavor_text" maximum_value_length = MAX_FLAVOR_LEN @@ -18,7 +18,7 @@ return FALSE // To prevent the not-implemented runtime /datum/preference/text/ooc_notes - category = PREFERENCE_CATEGORY_NON_CONTEXTUAL + category = PREFERENCE_CATEGORY_OOC_PREFS savefile_identifier = PREFERENCE_CHARACTER savefile_key = "ooc_notes" maximum_value_length = MAX_FLAVOR_LEN diff --git a/modular_skyrat/master_files/code/modules/client/preferences/genitals.dm b/modular_skyrat/master_files/code/modules/client/preferences/genitals.dm index 7bc229b0d0a..ba4d6cc9cfe 100644 --- a/modular_skyrat/master_files/code/modules/client/preferences/genitals.dm +++ b/modular_skyrat/master_files/code/modules/client/preferences/genitals.dm @@ -3,7 +3,7 @@ // ABSTRACT TYPES /datum/preference/toggle/allow_genitals - category = PREFERENCE_CATEGORY_SECONDARY_FEATURES + category = PREFERENCE_CATEGORY_CHARACTER_BASICS savefile_identifier = PREFERENCE_CHARACTER savefile_key = "allow_genitals_toggle" default_value = TRUE @@ -19,7 +19,7 @@ return erp_allowed && passed_initial_check /datum/preference/choiced/genital - category = PREFERENCE_CATEGORY_SECONDARY_FEATURES + category = PREFERENCE_CATEGORY_CHARACTER_BASICS savefile_identifier = PREFERENCE_CHARACTER abstract_type = /datum/preference/choiced/genital @@ -74,7 +74,7 @@ return assoc_to_keys_features(SSaccessories.sprite_accessories[relevant_mutant_bodypart]) /datum/preference/toggle/genital_skin_tone - category = PREFERENCE_CATEGORY_SECONDARY_FEATURES + category = PREFERENCE_CATEGORY_CHARACTER_BASICS savefile_identifier = PREFERENCE_CHARACTER default_value = FALSE abstract_type = /datum/preference/toggle/genital_skin_tone @@ -91,7 +91,7 @@ return erp_allowed && (passed_initial_check || allowed) /datum/preference/toggle/genital_skin_color - category = PREFERENCE_CATEGORY_SECONDARY_FEATURES + category = PREFERENCE_CATEGORY_CHARACTER_BASICS savefile_identifier = PREFERENCE_CHARACTER default_value = FALSE abstract_type = /datum/preference/toggle/genital_skin_color @@ -123,7 +123,7 @@ /datum/preference/tri_color/genital - category = PREFERENCE_CATEGORY_SECONDARY_FEATURES + category = PREFERENCE_CATEGORY_CHARACTER_BASICS savefile_identifier = PREFERENCE_CHARACTER check_mode = TRICOLOR_CHECK_ACCESSORY abstract_type = /datum/preference/tri_color/genital @@ -141,7 +141,7 @@ return erp_allowed && can_color && passed_initial_check /datum/preference/tri_bool/genital - category = PREFERENCE_CATEGORY_SECONDARY_FEATURES + category = PREFERENCE_CATEGORY_CHARACTER_BASICS savefile_identifier = PREFERENCE_CHARACTER check_mode = TRICOLOR_CHECK_ACCESSORY abstract_type = /datum/preference/tri_bool/genital diff --git a/modular_skyrat/master_files/code/modules/client/preferences/headshot.dm b/modular_skyrat/master_files/code/modules/client/preferences/headshot.dm index cc68f9dbd99..b2f17de3322 100644 --- a/modular_skyrat/master_files/code/modules/client/preferences/headshot.dm +++ b/modular_skyrat/master_files/code/modules/client/preferences/headshot.dm @@ -1,7 +1,7 @@ // Hey listen! Imgur doesn't actually work, it's been tested. /datum/preference/text/headshot - category = PREFERENCE_CATEGORY_NON_CONTEXTUAL + category = PREFERENCE_CATEGORY_CHARACTER_BASICS savefile_identifier = PREFERENCE_CHARACTER savefile_key = "headshot" maximum_value_length = MAX_MESSAGE_LEN diff --git a/modular_skyrat/master_files/code/modules/client/preferences/mutant_parts.dm b/modular_skyrat/master_files/code/modules/client/preferences/mutant_parts.dm index 30ac9d54b2e..d357ecc42d2 100644 --- a/modular_skyrat/master_files/code/modules/client/preferences/mutant_parts.dm +++ b/modular_skyrat/master_files/code/modules/client/preferences/mutant_parts.dm @@ -36,7 +36,7 @@ return ..() /datum/preference/toggle/allow_emissives - category = PREFERENCE_CATEGORY_SECONDARY_FEATURES + category = PREFERENCE_CATEGORY_CHARACTER_BASICS savefile_identifier = PREFERENCE_CHARACTER savefile_key = "allow_emissives_toggle" // no 'e' so it goes right after allow_mismatched_parts, not before default_value = FALSE @@ -45,7 +45,7 @@ return TRUE // we dont actually want this to do anything /datum/preference/tri_color/mutant_colors - category = PREFERENCE_CATEGORY_SECONDARY_FEATURES + category = PREFERENCE_CATEGORY_CHARACTER_BASICS savefile_identifier = PREFERENCE_CHARACTER savefile_key = "mutant_colors_color" check_mode = TRICOLOR_NO_CHECK @@ -58,7 +58,7 @@ /datum/preference/toggle/eye_emissives savefile_key = "eye_emissives" savefile_identifier = PREFERENCE_CHARACTER - category = PREFERENCE_CATEGORY_SECONDARY_FEATURES + category = PREFERENCE_CATEGORY_CHARACTER_BASICS relevant_head_flag = HEAD_EYECOLOR /datum/preference/toggle/eye_emissives/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) @@ -140,24 +140,26 @@ /// Tails /datum/preference/toggle/mutant_toggle/tail + category = PREFERENCE_CATEGORY_CHARACTER_BASICS savefile_key = "tail_toggle" relevant_mutant_bodypart = "tail" /datum/preference/choiced/mutant_choice/tail + category = PREFERENCE_CATEGORY_CHARACTER_BASICS savefile_key = "feature_tail" relevant_mutant_bodypart = "tail" type_to_check = /datum/preference/toggle/mutant_toggle/tail default_accessory_type = /datum/sprite_accessory/tails/none /datum/preference/tri_color/tail - category = PREFERENCE_CATEGORY_SECONDARY_FEATURES + category = PREFERENCE_CATEGORY_CHARACTER_BASICS savefile_identifier = PREFERENCE_CHARACTER savefile_key = "tail_color" relevant_mutant_bodypart = "tail" type_to_check = /datum/preference/toggle/mutant_toggle/tail /datum/preference/tri_bool/tail - category = PREFERENCE_CATEGORY_SECONDARY_FEATURES + category = PREFERENCE_CATEGORY_CHARACTER_BASICS savefile_identifier = PREFERENCE_CHARACTER savefile_key = "tail_emissive" relevant_mutant_bodypart = "tail" @@ -166,10 +168,12 @@ /// Snouts /datum/preference/toggle/mutant_toggle/snout + category = PREFERENCE_CATEGORY_CHARACTER_BASICS savefile_key = "snout_toggle" relevant_mutant_bodypart = "snout" /datum/preference/choiced/mutant_choice/snout + category = PREFERENCE_CATEGORY_CHARACTER_BASICS savefile_key = "feature_snout" relevant_mutant_bodypart = "snout" type_to_check = /datum/preference/toggle/mutant_toggle/snout @@ -190,14 +194,14 @@ target.synchronize_bodyshapes() /datum/preference/tri_color/snout - category = PREFERENCE_CATEGORY_SECONDARY_FEATURES + category = PREFERENCE_CATEGORY_CHARACTER_BASICS savefile_identifier = PREFERENCE_CHARACTER savefile_key = "snout_color" relevant_mutant_bodypart = "snout" type_to_check = /datum/preference/toggle/mutant_toggle/snout /datum/preference/tri_bool/snout - category = PREFERENCE_CATEGORY_SECONDARY_FEATURES + category = PREFERENCE_CATEGORY_CHARACTER_BASICS savefile_identifier = PREFERENCE_CHARACTER savefile_key = "snout_emissive" relevant_mutant_bodypart = "snout" @@ -206,24 +210,26 @@ /// Horns /datum/preference/toggle/mutant_toggle/horns + category = PREFERENCE_CATEGORY_CHARACTER_BASICS savefile_key = "horns_toggle" relevant_mutant_bodypart = "horns" /datum/preference/choiced/mutant_choice/horns + category = PREFERENCE_CATEGORY_CHARACTER_BASICS savefile_key = "feature_horns" relevant_mutant_bodypart = "horns" type_to_check = /datum/preference/toggle/mutant_toggle/horns default_accessory_type = /datum/sprite_accessory/horns/none /datum/preference/tri_color/horns - category = PREFERENCE_CATEGORY_SECONDARY_FEATURES + category = PREFERENCE_CATEGORY_CHARACTER_BASICS savefile_identifier = PREFERENCE_CHARACTER savefile_key = "horns_color" relevant_mutant_bodypart = "horns" type_to_check = /datum/preference/toggle/mutant_toggle/horns /datum/preference/tri_bool/horns - category = PREFERENCE_CATEGORY_SECONDARY_FEATURES + category = PREFERENCE_CATEGORY_CHARACTER_BASICS savefile_identifier = PREFERENCE_CHARACTER savefile_key = "horns_emissive" relevant_mutant_bodypart = "horns" @@ -232,24 +238,26 @@ /// Ears /datum/preference/toggle/mutant_toggle/ears + category = PREFERENCE_CATEGORY_CHARACTER_BASICS savefile_key = "ears_toggle" relevant_mutant_bodypart = "ears" /datum/preference/choiced/mutant_choice/ears + category = PREFERENCE_CATEGORY_CHARACTER_BASICS savefile_key = "feature_ears" relevant_mutant_bodypart = "ears" type_to_check = /datum/preference/toggle/mutant_toggle/ears default_accessory_type = /datum/sprite_accessory/ears/none /datum/preference/tri_color/ears - category = PREFERENCE_CATEGORY_SECONDARY_FEATURES + category = PREFERENCE_CATEGORY_CHARACTER_BASICS savefile_identifier = PREFERENCE_CHARACTER savefile_key = "ears_color" relevant_mutant_bodypart = "ears" type_to_check = /datum/preference/toggle/mutant_toggle/ears /datum/preference/tri_bool/ears - category = PREFERENCE_CATEGORY_SECONDARY_FEATURES + category = PREFERENCE_CATEGORY_CHARACTER_BASICS savefile_identifier = PREFERENCE_CHARACTER savefile_key = "ears_emissive" relevant_mutant_bodypart = "ears" diff --git a/modular_skyrat/master_files/code/modules/client/preferences/species_features/digitigrade_legs.dm b/modular_skyrat/master_files/code/modules/client/preferences/species_features/digitigrade_legs.dm index 85a08559c80..f1046a01ce3 100644 --- a/modular_skyrat/master_files/code/modules/client/preferences/species_features/digitigrade_legs.dm +++ b/modular_skyrat/master_files/code/modules/client/preferences/species_features/digitigrade_legs.dm @@ -2,7 +2,7 @@ /datum/preference/choiced/digitigrade_legs savefile_key = "digitigrade_legs" savefile_identifier = PREFERENCE_CHARACTER - category = PREFERENCE_CATEGORY_SECONDARY_FEATURES + category = PREFERENCE_CATEGORY_CHARACTER_BASICS relevant_mutant_bodypart = "legs" diff --git a/modular_zubbers/code/modules/client/flavor_text/flavor_text.dm b/modular_zubbers/code/modules/client/flavor_text/flavor_text.dm index a3091df0cbc..4d2a252dd73 100644 --- a/modular_zubbers/code/modules/client/flavor_text/flavor_text.dm +++ b/modular_zubbers/code/modules/client/flavor_text/flavor_text.dm @@ -12,7 +12,7 @@ var/art_ref = "" /datum/preference/text/flavor_text_nsfw - category = PREFERENCE_CATEGORY_NON_CONTEXTUAL + category = PREFERENCE_CATEGORY_CHARACTER_BASICS savefile_identifier = PREFERENCE_CHARACTER savefile_key = "flavor_text_nsfw" maximum_value_length = MAX_FLAVOR_LEN @@ -53,6 +53,7 @@ //This is just a silicon variant of the NSFW flavor text. /datum/preference/text/flavor_text_nsfw/silicon + category = PREFERENCE_CATEGORY_SILICON_PREFS savefile_key = "silicon_flavor_text_nsfw" /datum/preference/text/flavor_text_nsfw/silicon/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) @@ -91,6 +92,7 @@ //This is literally just the same as the original headshot pref but for silicons :) /datum/preference/text/headshot/silicon + category = PREFERENCE_CATEGORY_SILICON_PREFS savefile_key = "headshot_silicon" /datum/preference/text/headshot/silicon/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) @@ -131,7 +133,7 @@ usr?.client?.prefs.art_ref = value /datum/preference/toggle/art_ref_nsfw - category = PREFERENCE_CATEGORY_NON_CONTEXTUAL + category = PREFERENCE_CATEGORY_CHARACTER_BASICS savefile_identifier = PREFERENCE_CHARACTER savefile_key = "art_ref_nsfw" default_value = FALSE @@ -143,6 +145,7 @@ //OOC notes for Silicons. Overwrites regular OOC notes when you are playing a Silicon character. //TODO: Make this your regular OOC notes if you don't have Silicon ones. Every time I've tried, for some reason regular OOC notes haven't shown. /datum/preference/text/ooc_notes/silicon + category = PREFERENCE_CATEGORY_SILICON_PREFS savefile_key = "ooc_notes_silicon" /datum/preference/text/ooc_notes/silicon/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) @@ -150,12 +153,14 @@ //Custom species and lore for silicons, also known as "Custom Model." This allows silicons to define a custom species rather than receiving, by default "A cyborg unit." BORING. /datum/preference/text/custom_species/silicon + category = PREFERENCE_CATEGORY_SILICON_PREFS savefile_key = "custom_species_silicon" /datum/preference/text/custom_species/silicon/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) return FALSE /datum/preference/text/custom_species_lore/silicon + category = PREFERENCE_CATEGORY_SILICON_PREFS savefile_key = "custom_species_lore_silicon" /datum/preference/text/custom_species_lore/silicon/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) diff --git a/modular_zubbers/code/modules/client/preferences/blooper.dm b/modular_zubbers/code/modules/client/preferences/blooper.dm index 1644c0d7d47..fbf31fdb30f 100644 --- a/modular_zubbers/code/modules/client/preferences/blooper.dm +++ b/modular_zubbers/code/modules/client/preferences/blooper.dm @@ -1,5 +1,5 @@ /datum/preference/choiced/blooper - category = PREFERENCE_CATEGORY_NON_CONTEXTUAL + category = PREFERENCE_CATEGORY_CHARACTER_BASICS savefile_identifier = PREFERENCE_CHARACTER savefile_key = "blooper_choice" @@ -26,7 +26,7 @@ return data /datum/preference/numeric/blooper_speed - category = PREFERENCE_CATEGORY_NON_CONTEXTUAL + category = PREFERENCE_CATEGORY_CHARACTER_BASICS savefile_identifier = PREFERENCE_CHARACTER savefile_key = "blooper_speed" minimum = 0 @@ -42,7 +42,7 @@ return ..() && length(SSblooper.blooper_list) /datum/preference/numeric/blooper_pitch - category = PREFERENCE_CATEGORY_NON_CONTEXTUAL + category = PREFERENCE_CATEGORY_CHARACTER_BASICS savefile_identifier = PREFERENCE_CHARACTER savefile_key = "blooper_pitch" minimum = 0 @@ -58,7 +58,7 @@ return ..() && length(SSblooper.blooper_list) /datum/preference/numeric/blooper_pitch_range - category = PREFERENCE_CATEGORY_NON_CONTEXTUAL + category = PREFERENCE_CATEGORY_CHARACTER_BASICS savefile_identifier = PREFERENCE_CHARACTER savefile_key = "blooper_pitch_range" minimum = 0 diff --git a/modular_zubbers/code/modules/client/verbs/character_directory.dm b/modular_zubbers/code/modules/client/verbs/character_directory.dm index 9d73ae69879..dc457529b6a 100644 --- a/modular_zubbers/code/modules/client/verbs/character_directory.dm +++ b/modular_zubbers/code/modules/client/verbs/character_directory.dm @@ -11,7 +11,7 @@ GLOBAL_DATUM(character_directory, /datum/character_directory) //The advertisement that you show to people looking through the directory /datum/preference/text/character_ad savefile_key = "character_ad" - category = PREFERENCE_CATEGORY_NON_CONTEXTUAL + category = PREFERENCE_CATEGORY_OOC_PREFS savefile_identifier = PREFERENCE_CHARACTER maximum_value_length = MAX_FLAVOR_LEN @@ -25,7 +25,7 @@ GLOBAL_DATUM(character_directory, /datum/character_directory) /datum/preference/choiced/attraction savefile_key = "attraction" - category = PREFERENCE_CATEGORY_NON_CONTEXTUAL + category = PREFERENCE_CATEGORY_OOC_PREFS savefile_identifier = PREFERENCE_CHARACTER /datum/preference/choiced/attraction/init_possible_values() @@ -39,7 +39,7 @@ GLOBAL_DATUM(character_directory, /datum/character_directory) /datum/preference/choiced/display_gender savefile_key = "display_gender" - category = PREFERENCE_CATEGORY_NON_CONTEXTUAL + category = PREFERENCE_CATEGORY_OOC_PREFS savefile_identifier = PREFERENCE_CHARACTER /datum/preference/choiced/display_gender/init_possible_values() diff --git a/modular_zubbers/code/modules/rr_opt_in/rr_optin_preferences.dm b/modular_zubbers/code/modules/rr_opt_in/rr_optin_preferences.dm index d985bb84781..9617014185e 100644 --- a/modular_zubbers/code/modules/rr_opt_in/rr_optin_preferences.dm +++ b/modular_zubbers/code/modules/rr_opt_in/rr_optin_preferences.dm @@ -1,5 +1,5 @@ /datum/preference/toggle/be_round_removed - category = PREFERENCE_CATEGORY_NON_CONTEXTUAL + category = PREFERENCE_CATEGORY_OOC_PREFS savefile_identifier = PREFERENCE_CHARACTER savefile_key = "be_round_removed" diff --git a/modular_zubbers/master_files/code/modules/client/preferences/hypnopref.dm b/modular_zubbers/master_files/code/modules/client/preferences/hypnopref.dm index f65b5cf861a..e6be063899d 100644 --- a/modular_zubbers/master_files/code/modules/client/preferences/hypnopref.dm +++ b/modular_zubbers/master_files/code/modules/client/preferences/hypnopref.dm @@ -1,5 +1,5 @@ /datum/preference/choiced/erp_status_hypno - category = PREFERENCE_CATEGORY_NON_CONTEXTUAL + category = PREFERENCE_CATEGORY_OOC_PREFS savefile_identifier = PREFERENCE_CHARACTER savefile_key = "erp_status_pref_hypnosis" diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferences/MainPage.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferences/MainPage.tsx index 5207225ec14..0b6d5942636 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferences/MainPage.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferences/MainPage.tsx @@ -9,6 +9,7 @@ import { Floating, Input, LabeledList, + NoticeBox, Section, Stack, } from 'tgui-core/components'; @@ -493,6 +494,16 @@ export function MainPage(props: MainPageProps) { const contextualPreferences = data.character_preferences.secondary_features || []; + // BUBBER EDIT ADDITION BEGIN: more character setup tabs + const characterBasicsPreferences = + data.character_preferences.character_basics || []; + + const oocPrefPreferences = data.character_preferences.ooc_preferences || []; + + const siliconPreferences = + data.character_preferences.silicon_preferences || []; + // BUBBER EDIT ADDITION END: more character setup tabs + const mainFeatures = [ ...Object.entries(data.character_preferences.clothing ?? {}), ...Object.entries(data.character_preferences.features ?? {}), @@ -523,14 +534,30 @@ export function MainPage(props: MainPageProps) { // BUBBER EDIT ADDITION BEGIN: SWAPPABLE PREF MENUS enum PrefPage { + CharBasics, // Character basics Visual, // The visual parts Lore, // Lore, Flavor Text, Age, Records + OOCPref, // OOC preferences + Silicon, // Silicon prefs } - const [currentPrefPage, setCurrentPrefPage] = useState(PrefPage.Visual); + const [currentPrefPage, setCurrentPrefPage] = useState(PrefPage.CharBasics); let prefPageContents; switch (currentPrefPage) { + case PrefPage.CharBasics: + prefPageContents = ( + + ); + break; case PrefPage.Visual: prefPageContents = ( ); break; + case PrefPage.OOCPref: + prefPageContents = ( + + ); + break; + case PrefPage.Silicon: + prefPageContents = ( + <> + + This tab is for preferences that only apply when playing the AI or + Cyborg jobs! + + + + ); + break; default: exhaustiveCheck(currentPrefPage); } @@ -696,6 +755,15 @@ export function MainPage(props: MainPageProps) { + + + Character Basics + + + + + OOC Preferences + + + + + Silicon Preferences + + {prefPageContents} diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferences/index.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferences/index.tsx index d9570c38a96..bb756e188d4 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferences/index.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferences/index.tsx @@ -1,6 +1,6 @@ import { useState } from 'react'; import { useBackend } from 'tgui/backend'; -import { NoticeBox, Stack, Button } from 'tgui-core/components'; // BUBBER EDIT CHANGE - ORIGINAL : import { NoticeBox, Stack } from 'tgui-core/components'; +import { Button, NoticeBox, Stack } from 'tgui-core/components'; // BUBBER EDIT CHANGE - ORIGINAL : import { NoticeBox, Stack } from 'tgui-core/components'; import { exhaustiveCheck } from 'tgui-core/exhaustive'; import { SideDropdown } from '../../../bubber_components/SideDropdown'; // BUBBER EDIT ADDITION @@ -141,7 +141,9 @@ export function CharacterPreferenceWindow(props) { {/* BUBBER EDIT ADDITION BEGIN */}