diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index b11315a122d..f45f14232f4 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -309,6 +309,12 @@ GLOBAL_LIST_EMPTY(preferences_datums) character_preview_view.update_body() return TRUE + //BUBBER EDIT ADDITION START: Background Selection + if("update_background") + update_preference(GLOB.preference_entries[/datum/preference/choiced/background_state], params["new_background"]) + return TRUE + //BUBBER EDIT ADDITION END: Background Selection + if ("open_food") GLOB.food_prefs_menu.ui_interact(usr) return TRUE @@ -432,11 +438,21 @@ GLOBAL_LIST_EMPTY(preferences_datums) /// Whether we show current job clothes or nude/loadout only var/show_job_clothes = TRUE + // BUBBER EDIT ADDITION START: Better character preview: Rescales between 32x32, 64x64 and 96x96. + var/image/canvas + var/last_canvas_size + var/last_canvas_state + // BUBBER EDIT END + /atom/movable/screen/map_view/char_preview/Initialize(mapload, datum/preferences/preferences) . = ..() src.preferences = preferences /atom/movable/screen/map_view/char_preview/Destroy() + // BUBBER EDIT ADDITION START: Better character preview + canvas?.cut_overlays() + QDEL_NULL(canvas) + // BUBBER EDIT END QDEL_NULL(body) preferences?.character_preview_view = null preferences = null @@ -449,7 +465,44 @@ GLOBAL_LIST_EMPTY(preferences_datums) else body.wipe_state() - appearance = preferences.render_new_preview_appearance(body, show_job_clothes) + // BUBBER STATION EDIT BEGIN: Better character preview + // appearance = preferences.render_new_preview_appearance(body, show_job_clothes) // ORIGINAL CODE + if (canvas) + canvas.cut_overlays() + + preferences.render_new_preview_appearance(body, show_job_clothes) + + var/canvas_size = 0 + var/canvas_state = preferences.read_preference(/datum/preference/choiced/background_state) + + // Being a taur, or over 1.1 scales it up + if (body.dna.mutant_bodyparts["taur"] && body.dna.mutant_bodyparts["taur"]["name"] != "None") + canvas_size = 1 + else if (!isnull(body.dna.features["body_size"]) && body.dna.features["body_size"] > 1.1) + canvas_size = 1 + // Add extra level if we're oversized + if (preferences.all_quirks.Find("Oversized")) + canvas_size += 1 + + if (last_canvas_size != canvas_size || last_canvas_state != canvas_state) + QDEL_NULL(canvas) + switch(canvas_size) + if(0) + body.pixel_x = 0 + canvas = image('modular_zubbers/icons/customization/template.dmi', icon_state = canvas_state) + if(1) + body.pixel_x = 16 + canvas = image('modular_zubbers/icons/customization/template_64x64.dmi', icon_state = canvas_state) + else + body.pixel_x = 32 + canvas = image('modular_zubbers/icons/customization/template_96x96.dmi', icon_state = canvas_state) + + last_canvas_size = canvas_size + last_canvas_state = canvas_state + + canvas.add_overlay(body.appearance) + appearance = canvas.appearance + // BUBBER EDIT END /atom/movable/screen/map_view/char_preview/proc/create_body() QDEL_NULL(body) diff --git a/modular_zubbers/code/modules/character_preview_background/character_preview_background.dm b/modular_zubbers/code/modules/character_preview_background/character_preview_background.dm new file mode 100644 index 00000000000..2b71dd7a0b8 --- /dev/null +++ b/modular_zubbers/code/modules/character_preview_background/character_preview_background.dm @@ -0,0 +1,24 @@ +/// Enables the choice of background in the character preview menu +/datum/preference/choiced/background_state + savefile_key = "background_state" + savefile_identifier = PREFERENCE_CHARACTER + +GLOBAL_LIST_INIT(background_state_options, list( + "000", + "midgrey", + "FFF", + "white", + "plasteel", + "dark" , + "plating", + "reinforced", + )) + +/datum/preference/choiced/background_state/create_default_value() + return GLOB.background_state_options[1] + +/datum/preference/choiced/background_state/init_possible_values() + return GLOB.background_state_options + +/datum/preference/choiced/background_state/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) + return diff --git a/modular_zubbers/icons/customization/template.dmi b/modular_zubbers/icons/customization/template.dmi new file mode 100644 index 00000000000..95bf98a98e0 Binary files /dev/null and b/modular_zubbers/icons/customization/template.dmi differ diff --git a/modular_zubbers/icons/customization/template_64x64.dmi b/modular_zubbers/icons/customization/template_64x64.dmi new file mode 100644 index 00000000000..0918e47a9a3 Binary files /dev/null and b/modular_zubbers/icons/customization/template_64x64.dmi differ diff --git a/modular_zubbers/icons/customization/template_96x96.dmi b/modular_zubbers/icons/customization/template_96x96.dmi new file mode 100644 index 00000000000..8fc408d9aef Binary files /dev/null and b/modular_zubbers/icons/customization/template_96x96.dmi differ diff --git a/tgstation.dme b/tgstation.dme index fb3ef863353..bf03b757e86 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -9082,6 +9082,7 @@ #include "modular_zubbers\code\modules\changeling_zombies\items.dm" #include "modular_zubbers\code\modules\changeling_zombies\reagent.dm" #include "modular_zubbers\code\modules\changeling_zombies\virus.dm" +#include "modular_zubbers\code\modules\character_preview_background\character_preview_background.dm" #include "modular_zubbers\code\modules\client\examine_tgui.dm" #include "modular_zubbers\code\modules\client\preferences.dm" #include "modular_zubbers\code\modules\client\ssd.dm" diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferences/MainPage.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferences/MainPage.tsx index bc698e12c7e..ccad452cbbf 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferences/MainPage.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferences/MainPage.tsx @@ -670,6 +670,20 @@ export function MainPage(props: MainPageProps) { {/* BUBBER EDIT ADDITION END: Preview Selection */} + {/* BUBBER EDIT ADDITION START: Background Selection */} + + + act('update_background', { + new_background: value, + }) + } + /> + + {/* BUBBER EDIT ADDITION END: Background Selection */} ; @@ -269,5 +270,6 @@ export type ServerData = { loadout_tabs: LoadoutCategory[]; }; species: Record; - [otherKey: string]: unknown; + background_state: { choices: string[] }; // BUBBER EDIT ADDITION + [otheyKey: string]: unknown; }; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/useServerPrefs.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/useServerPrefs.ts index 63731c55b37..c67f80973a6 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/useServerPrefs.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/useServerPrefs.ts @@ -23,8 +23,11 @@ export const ServerPrefs = createContext({ loadout_tabs: [], }, species: {}, + background_state: { + /* BUBBER EDIT ADDITION: Background Selection - LINES 26 - 29 */ + choices: [], + }, }); - export function useServerPrefs() { return useContext(ServerPrefs); }