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);
}