dnd name forge

DnD last names

Surnames, family names, clan names — the layer that makes a roster sound like it belongs to a place. Real ones first, then what 800,000 draws say about how many you get before surnames start repeating.

Last names you can use right now

Human surnames

Elf surnames

How this was measured. Four groups — human, elf (High Elf, Wood Elf and Half-Elf share one pool), drow, tiefling — drawn 1,000 times per seed over 200 seeds, so 800,000 names. At draws 10, 25, 50, 64, 100 and 200 we counted how many distinct surnames had appeared, averaged over the 200 runs. Each culture holds 8 prefixes × 8 suffixes = 64 surnames. Seeds 1000–1199. Everything here is counted from that run.

What 800,000 draws show

1. Inside one culture the surnames come out like a deck of cards, not like random draws. Human hit 25 distinct surnames in 25 draws, 50 in 50, and all 64 by draw 64 — one new surname per name until the pool empties. A genuinely random draw from the same 64 would be at 40.6 after 64 draws and would need about 266 draws to see them all. The balance counter is why: a surname is used before any is reused.

2. That guarantee was broken for elf names, and we fixed it. High Elf, Wood Elf and Half-Elf draw from one shared 64-surname pool, but the balance counter used to be keyed to the race label instead of the pool. Pick all three and 64 draws reached only 44.8 of 64; the pool needed about 200 draws to empty, roughly where pure chance sits. Counter now keyed to the culture: a mixed elf batch reaches 64 of 64 in 64 draws, same as a single culture. The table below keeps both columns, because the before number is the only part of this page nobody else can reproduce.

3. For a village, pick one culture and pull 60. Sixty draws gives sixty different surnames — enough for sixty households with no repeats. Before the fix, the same sixty draws spread across the three elf subraces gave 43.1 of 64 surnames — so sixteen households would already share a house name. After the fix, sixty draws give sixty different surnames whichever way you draw it.

Distinct surnames after N draws — elf mixed across three subraces, before vs after the fix (200 seeds) 0 16 32 48 64 10 25 50 60 64 100 200 draws before the fix after the fix, and any single culture random draw (64 items)
Distinct surnames after N draws — 200 seeds averaged
DrawsOne cultureThree elf subraces (before fix)Three elf subraces (after fix)Random draw
1010.0 / 649.5 / 6410.0 / 649.3 / 64
2525.0 / 6421.8 / 6425.0 / 6420.8 / 64
5050.0 / 6438.0 / 6450.0 / 6434.9 / 64
6060.0 / 6443.1 / 6460.0 / 6439.1 / 64
6464.0 / 6444.8 / 6464.0 / 6440.6 / 64
10064.0 / 6456.9 / 6464.0 / 6450.7 / 64
20064.0 / 6464.0 / 6464.0 / 6461.3 / 64

Using last names well

Reproduce it

The script is at /assets/last-names-stats.js. Open any page here, open the console and paste:

var s=document.createElement('script'); s.src='/assets/last-names-stats.js'; document.body.appendChild(s);

It runs 200 seeds × 1,000 draws per group at the same milestones and prints the current behaviour (the "after fix" column). The before column comes from the same script run against the previous build; the numbers are kept here rather than in the script, because the old build is no longer served.

Generate a roster · Party names from one batch · How the generator behaves at scale