---
# System prepended metadata

title: 'Human Customization Rework:'
tags: [goonstation]

---

# Human Customization Rework:

## goals
- Unified system for human mobs cosmetics
- Support for customization options for non-human mutantraces
- Clean up the 30+ vars in use on mutantraces for handling their cosmetics
- Improved QoL for selecting/customizing mutantraces in character setup menu


## Design draft:

`datum/customization_style`
- similar to what we have now, holds info on icon, iconstate, (default) layer, name, etc.
- immutable

 `datum/customization_holder` type, 
- Holds a `datum/customization_style`
- ability to filter acceptable customization styles (e.g.: `datum/customization_holder/hair`)
- where you uh, customize customizations (color, layer overrides if needed, etc.)

on mutantraces (incl human mutantrace!):
- `var/list/customization_holder/customization_slots`
    - i.e.: each mutantrace would define what customizations can be applied
    - humans would have 3 `hair` holders or whatever

other stuff that I'd want to bundle in:
- some kind of "customization cache", so if you swap mutantraces around, things go less fucky
    - if there's no entry in the cache for that round for a given mutantrace type, pull appearance from charprefs
    - otherwise, reuse what was in the cache
- migrate random appearance code to mutantraces, so each mrace can have a randomappearance generator
    - also default appearance?

## Unsolved questions:
- handling dismemberment 
    - currently all customizations are on the head, so heads just grab all of them - would need more handling there
- what existing mrace features would get pulled into customizations vs baked in (ideally all)
- "non-decal" customizations (e.g.: could we support 'different tail type' as a customization?)
- in-round customization editing (barbershop, genetics, etc.)

## Breakdown
- Migrate existing mutantrace decals to customization styles
    - Expand customization_style code as needed to be feature complete
- Create customization_holder system
    - Core code on datum itself
    - Use in human rendering code
    - Add to mutantrace datums
- Character setup menu
    - Need dynamic menu for selecting customization options
    - Ideally put mutantrace selector in same tab as customization, instead of in traits menu
    - Individually store data for *all* mutantraces for a character in preferences

