Spritebloat final boss (#5704)

## About The Pull Request
SO! This pr does a few things:
One, it makes a new system for having properly dynamic uniforms. You can
select the core components (for most things, a shirt and pants),
accessories, etc. I've gone ahead and made a dynamic security uniform
via this. I also made a dynamic security cap!

Two, it adds a few black reskins. All the reskins do is remove some
small red accent. The reskins are available for the following:

Sec hud sunglasses
Sec gloves
Sec belt

Tackle gloves and gorrila gloves both can also now be reskinned to the
black variant that already existed.

Before anyone screams, I am adding NO blue. (Though, you could recolor
the uniform in the loadout)

(video was too big for github so here it is on catbox)
https://files.catbox.moe/8wtgkv.mp4
## Why It's Good For The Game
I kept feeling unsatisfied with my options as security, and as a whole.
Hopefully this is a better uniform system, even if we don't end up using
it that much.
## Proof Of Testing
<details>
<summary>Screenshots/Videos</summary>

</details>

## Changelog
🆑 UvvU
add: Added dynamic uniform support
add: Added black varients for the sec huds, belt, and gloves
/🆑
This commit is contained in:
CatoChristopherMrow
2026-06-23 22:06:44 +02:00
committed by GitHub
parent 4f87df6b81
commit 02e183642e
25 changed files with 1444 additions and 22 deletions
@@ -31,6 +31,8 @@
/// Whether the menu is in the middle of refreshing the preview
var/refreshing = TRUE
///BUBBER VAR: Optional display labels for color groups, keyed by color index.
var/list/color_labels
/**
* Whether the menu is currently locked down to prevent abuse from players.
@@ -102,12 +104,14 @@
/datum/greyscale_modify_menu/ui_data(mob/user)
var/list/data = list()
data["greyscale_config"] = "[config.name]"
data["full_color_string"] = split_colors?.Join("") //BUBBER ADDITION
var/list/color_data = list()
data["colors"] = color_data
for(var/i in 1 to config.expected_colors)
color_data += list(list(
"index" = i,
"label" = color_labels?["[i]"] || color_labels?[i], //BUBBER ADDITION
"value" = split_colors[i]
))