In the game we have premade workers which are handmade by us with unique appearances and names but there's only so many we can have, so when the game runs out of curated characters it will begin procedurally generating characters.
Goals
- Make generated characters stylistically nondescript, the world has many fantastical elements but without contrast they cant shine
- Give designers as much control as possible.

How it works
A request is sent
function scr_get_appearance_request(_gender_expression,_age_expression,_motives) constructor
{
gender_expression = _gender_expression
age_expression = _age_expression
motives = _motives
output = undefined
}
The system then gathers candidate clothes, body types, and so on. Each candidate is checked against the request, and removed from the pool if it doesn't fit:
- The item is explicitly masculine, but the character needs a feminine appearance.
- The item is designed for younger people, but the character is elderly.
- The item doesn't match the character's motive, for example a robber outfit when the request needs a security guard uniform
How do we distinguish items
I manually apply components to items.
"scr_component_feminine": {}
Then we just compare later on.
Where this breaks
There isn't a formal gender system in the game, anyone can wear any clothes, anyone can have a moustache but for the sake of clarity when it comes to generated characters we have to prevent feminine looking appearances from having them. The real problem however comes with things like pony tails or even things as innocuous as eyes.



There is an interesting philosophical dilemma, do we outright prevent masculine characters from wearing makeup, for the sake of better representing the median masculine appearance or allow for more freedom?
Currently the consensus on the team is to not be too restrictive as half the fun of random generation is seeing characters you would never have thought to design, it also passively encourages players to give npcs makeovers deepening connections with the players.
-N