Reverse-engineering study · three games

How games build a character

Kenshi and Saints Row: The Third both let you make a person from sliders, but they solve the problem in very different ways. The Sims (2000) has no sliders at all: it picks whole meshes by file name. This site explains, from the decompiled code and the shipped data, exactly how each one turns choices into a mesh and a texture. It also covers how they generate NPCs and how much variety each can produce. All three systems were re-implemented to the bit and checked against each other.

Eight Kenshi races rendered by the study's re-implementation: Shek, Skeleton, Hive Prince, Fishman, Cannibal, MkII Screamer, Scorchlander, Hive Queen
Kenshi · OGRE · 2018

One skeleton, many races, faces seeded from a name

A single skinned body per race and gender, deformed by 8–27 morph targets and a set of per-bone scales. NPCs use the same system as the player. Their face shape is seeded from a hash of a string, so every generic NPC is one of five faces.

Read how Kenshi works →
Five random Saints Row characters from the study's creator
Saints Row: The Third · Volition engine · 2011

A dress-up doll with 110 sliders and 572 items

Two full-body meshes and about 115 morph targets that every hair style and garment also carries. The skin is a texture composited at runtime, lit through "shader balls". NPCs are a completely separate, hand-authored system, varied only by palette and props.

Read how Saints Row works →
Eight Hot Date townies generated by the study's re-implementation
The Sims · Maxis · 2000–2003

A catalogue of meshes chosen by file name

A head and a body, one texture each, from lists built by matching file names against patterns. Skin tone is a texture choice, outfits are whole bodies, townies are seeded from the clock, and babies inherit only their skin tone.

Read how The Sims works →

The answer in a few paragraphs

Kenshi

An editor XML file per race lists the sliders. A slider either drives a morph target (weight = value × 0.01) or sets a bone scale on a 30-bone 3ds Max Biped skeleton. Three posture sliders pick a frame in a skeleton animation. At spawn, the weights are baked into a private copy of the mesh. A shader adds a swappable head texture onto the body texture and darkens it by a 1-D skin-tone ramp.

Generic NPCs run the same code. They seed the random generator with an FNV-1a hash of race_weirdness_Gender#, so the faces are identical in every save. Individual NPCs differ in head texture, hair, skin and bone sizes.

Saints Row: The Third

A table of 110 sliders, each with keys that map the slider through a piecewise ramp onto named morph targets. Deltas are accumulated on the CPU into the body, and into every hair and clothing mesh, which carry their own copies of the same targets. Skin colour is an HSB shift of the body texture. Eyes, brows, beards, makeup and tattoos are sprites composited into one 2048×1024 texture. Normal detail is blended from five maps by the body sliders.

Clothing is 572 items dyed with three colours through pattern masks. Items hide body submeshes and switch each other's meshes with flags. NPCs don't use any of this. Each one is authored, and only its palette, props and hair tint vary.

The Sims

No sliders and no morphs. Create-A-Sim scans every loaded character file for names like c###[m|u][a|c] (heads) and b###[m|u][a|c]### (bodies), and pairs each with every texture named after it plus the skin tone. A choice is saved as a text "body string". Outfits are separate bodies with their own name patterns, and new sims get defaults by a shortest-name best match. Personality is 25 points over five traits; the star sign is the nearest of 12 presets.

Townies, NPCs and grown-up babies draw a uniformly random head and body from the same lists. Townies use an RNG reseeded from the clock, so a burst of them shares a gender. A baby inherits only its skin tone, from a randomly chosen parent.

How much variety?

Every independent choice multiplies the number of possible characters. Adding the orders of magnitude of each category gives the total. Kenshi's count comes almost entirely from its integer sliders. Saints Row's discrete choices are dominated by clothing dyes. The Sims is a catalogue: big for its time, tiny on this scale. Hover a segment for details.

Kenshi: Greenlander man, every slider at integer resolution. Saints Row: one gender, with the 110 continuous sliders counted at the creator's step size. The Sims: adult man, every head, body, outfit and personality. Full breakdown on the comparison page.

30
Kenshi races with editor limits (14 playable)
5
face shapes per generic Kenshi NPC type and weirdness level
110
Saints Row sliders driving ~115 morph targets
572
wearable items in 21 slots (1151 meshes)
321
composite layers: makeup, face paint, 199 tattoos
223
spawnable ambient NPC types, all authored
62,162
Sims head × body choices over gender, age and skin

What's here