Null Bolt
Studio
guides

Name generation

From "Iron Sword" to "Vampiric Iron Sword of the Fortress" to "The Doombringer" — three weighted pools and a handful of gates.

How a name is composed

Resolution order
text
1. Unique path — if the rarity requires a legendary effect and the
   UniqueNames pool has an eligible entry:
     weighted pick  →  optional "The " prepended  →  done ("The Doombringer")

2. Base name — template BaseName → sub-type name → type name,
   optionally replaced by a weighted pick from BaseNamePool

3. Prefix — only if rarity.MaxNameAffixCount ≥ 1 ("Vampiric …")
4. Suffix — only if rarity.MaxNameAffixCount ≥ 2 ("… of the Fortress")

Result: [prefix] base [suffix], joined with spaces.

All pools live on a NameGenerationConfig asset, assigned on your GeneratorSettings. No config = plain base names, which is a perfectly valid minimal setup.

Name fragments — weighted and gated

NameFragment fieldTypeDescription
TextstringThe fragment itself — "Gleaming", "of Embers", "Widowmaker".
WeightfloatSelection weight within its pool.
Required RaritiesRarityDefinition[]Restrict a fragment to certain tiers — the example config locks plain material prefixes ("Iron", "Worn") to Common and reserves the 20 fantasy prefixes for Magic and above.
Required Item Types / Sub-Typesrefs"of Swiftness" for boots only, "Runed" for staves — empty means unrestricted.

The example NameConfig demonstrates the full pattern: rarity-gated material vs. fantasy prefixes, a dozen generic suffixes, and ~21 unique names gated by sub-type so a sword never rolls a grimoire's legend.

// note
Item names never come from affixes. The Prefix/Suffix type on AffixDefinition is display metadata for your tooltips — the generated name draws exclusively from these NameFragment pools. That separation is deliberate: name flavor and stat budget stay independently tunable.

Unique names

Tiers flagged RequiresLegendaryEffect (the example's Unique) skip the prefix/suffix machinery entirely and pick from UniqueNames. With PrependArticleToUniqueName on (the default), "Doombringer" becomes "The Doombringer" — with a guard against double-The when the fragment already starts with one.