User Rating 0.0
Total Usage 0 times
Quick Presets:
Is this tool helpful?

Your feedback helps us improve.

About

Generating a believable NPC on the fly is harder than it looks. A random name paired with a random class produces incoherent characters that break immersion. The real challenge is trait coherence: a dwarven blacksmith should not speak like an elven diplomat, and a street urchin rogue should not carry plate armor. This generator solves that problem by using weighted probability tables where each selected trait constrains subsequent selections. Race influences name syllable pools. Class influences equipment loadout and skill proficiency. Background drives motivation and personality vectors. The result is a character that reads as designed, not dice-rolled. Seed any generation with a string to reproduce the exact same NPC across sessions. Note: this tool approximates fantasy archetypes common to systems like D&D 5e and Pathfinder. Homebrew settings may require manual adjustment of cultural assumptions.

npc generator ttrpg dnd npc tabletop rpg random character npc creator dungeons and dragons pathfinder npc

Formulas

NPC generation uses a weighted coherence pipeline rather than uniform randomness. Each trait selection narrows subsequent probability distributions.

P(traitn) = wbase wcoherenceki=1 wi

Where wbase is the default weight for a trait in the global pool, and wcoherence is a multiplier derived from previously selected traits (e.g., selecting "Dwarf" multiplies the weight of "Fighter" by 2.0 and "Wizard" by 0.5). The denominator normalizes across all k candidates.

Name generation uses syllable concatenation:

name = concat(prefix[race], middle[rand], suffix[gender])

The seeded PRNG uses xorshift128 initialized from a string hash, ensuring seed(s) deterministic output for reproducibility across sessions.

Reference Data

RaceTypical LifespanCommon ClassesName StyleStat Tendency
Human70 - 90 yearsAnyVaried culturalBalanced
Elf700 - 900 yearsWizard, Ranger, BardFlowing vowelsDEX, INT
Dwarf300 - 400 yearsFighter, Cleric, ArtificerHard consonantsCON, STR
Halfling150 - 200 yearsRogue, Bard, RangerWarm, shortDEX, CHA
Gnome350 - 500 yearsWizard, Artificer, BardPlayful, multi-syllableINT, DEX
Half-Orc60 - 80 yearsBarbarian, Fighter, RangerGuttural, strongSTR, CON
Half-Elf150 - 200 yearsBard, Warlock, PaladinBlended human/elfCHA, DEX
Tiefling70 - 100 yearsWarlock, Sorcerer, RogueInfernal or virtue namesCHA, INT
Dragonborn60 - 80 yearsPaladin, Fighter, SorcererClan + personalSTR, CHA
Goliath70 - 90 yearsBarbarian, Fighter, DruidDeed namesSTR, CON
Tabaxi70 - 90 yearsMonk, Rogue, RangerDescriptive phrasesDEX, CHA
Firbolg400 - 500 yearsDruid, Cleric, RangerNature-basedWIS, STR
Kenku50 - 60 yearsRogue, Monk, WarlockSound-based mimicryDEX, WIS
Aasimar150 - 200 yearsPaladin, Cleric, SorcererCelestial + humanCHA, WIS
Lizardfolk50 - 60 yearsDruid, Barbarian, RangerSibilant, reptilianCON, WIS
Tortle350 - 400 yearsMonk, Cleric, DruidSimple, earthySTR, WIS
Changeling70 - 100 yearsRogue, Bard, WarlockAdopted namesCHA, DEX
WarforgedIndefiniteFighter, Artificer, PaladinDesignation codesCON, STR

Frequently Asked Questions

Each trait category (race, class, background) carries weight modifiers for subsequent categories. When you select or randomly roll a Dwarf, the internal coherence table multiplies Fighter/Cleric weights by 2.0× and reduces Wizard/Sorcerer weights to 0.5×. Equipment tables are then filtered by class. This cascade means a randomly generated Dwarf is statistically more likely to carry a warhammer than a spellbook, matching genre expectations without being deterministic.
Yes. Enter an identical seed string in the seed field. The generator uses a xorshift128 PRNG initialized from a 32-bit hash of your seed string. Given the same seed, every random selection in the pipeline produces identical results. Share the seed with your co-GM to synchronize NPC details without transferring data.
Coherence weights bias probabilities but never zero them out. A Halfling Barbarian has reduced probability (~0.3× weight) but is not impossible. This is intentional. Unusual combinations often produce the most memorable NPCs. If you want strict adherence to common archetypes, use the preset buttons which lock certain parameters.
The generator does not roll exact ability scores (those are system-specific). Instead, it assigns qualitative descriptors (e.g., "notably strong", 'average intelligence') based on the intersection of race stat tendencies and class primary abilities. A Dwarf Fighter gets "exceptionally tough, strong" because both race (CON) and class (STR) reinforce those stats.
The core output (name, personality, backstory, motivation, quirks, appearance) is system-agnostic. Equipment and class references lean toward D&D 5e conventions. For Pathfinder, the classes map almost 1:1. For narrative systems like FATE, ignore the class/equipment fields and focus on personality, motivation, and quirks as Aspect candidates.
With 18 races, 14 classes, 16 backgrounds, 40+ personality traits, 30+ motivations, 50+ quirks, 40+ appearance details, and ~200+ name fragments per race, the combinatorial space exceeds 10 billion unique NPCs before considering backstory sentence variations. Repetition within a single campaign is statistically negligible.