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
- Ashford
- Blackmoor
- Ashwick
- Draycott
- Fairholt
- Greyfen
- Harrowgate
- Marrowmayne
- Redwick
- Blackfen
- Draygate
- Fairmayne
- Greyholt
- Harrowwick
- Marrowford
- Redmoor
- Ashmoor
- Blackcott
- Drayholt
- Fairwick
- Greygate
- Harrowfen
- Marrowwick
- Redholt
Elf surnames
- Dawnwhisper
- Moonshadow
- Starleaf
- Silverbrook
- Nightbough
- Galewind
- Fernwake
- Thornhollow
- Dawnshadow
- Moonbrook
- Starwhisper
- Silverleaf
- Nightwind
- Galewake
- Fernshadow
- Thornbough
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.
| Draws | One culture | Three elf subraces (before fix) | Three elf subraces (after fix) | Random draw |
|---|---|---|---|---|
| 10 | 10.0 / 64 | 9.5 / 64 | 10.0 / 64 | 9.3 / 64 |
| 25 | 25.0 / 64 | 21.8 / 64 | 25.0 / 64 | 20.8 / 64 |
| 50 | 50.0 / 64 | 38.0 / 64 | 50.0 / 64 | 34.9 / 64 |
| 60 | 60.0 / 64 | 43.1 / 64 | 60.0 / 64 | 39.1 / 64 |
| 64 | 64.0 / 64 | 44.8 / 64 | 64.0 / 64 | 40.6 / 64 |
| 100 | 64.0 / 64 | 56.9 / 64 | 64.0 / 64 | 50.7 / 64 |
| 200 | 64.0 / 64 | 64.0 / 64 | 64.0 / 64 | 61.3 / 64 |
Using last names well
- A shared surname is a relationship, not a coincidence: two NPCs with the same house name are family whether you planned it or not.
- For a town, generate surnames from one race in one batch, then hand out given names separately — the house name should repeat more than the given name does.
- The generator puts the surname after the given name; if you only want the surname, copy the second word.
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