<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>fantasy name generator Archives - Free Online Tools - Imediacto</title>
	<atom:link href="https://imediacto.com/tag/fantasy-name-generator/feed/" rel="self" type="application/rss+xml" />
	<link>https://imediacto.com/tag/fantasy-name-generator/</link>
	<description>Free Online Tool Set for Text and HTML</description>
	<lastBuildDate>Mon, 01 Jun 2026 01:41:02 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0.1</generator>

<image>
	<url>https://imediacto.com/wp-content/uploads/2020/04/cropped-favicon-32x32.png</url>
	<title>fantasy name generator Archives - Free Online Tools - Imediacto</title>
	<link>https://imediacto.com/tag/fantasy-name-generator/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Fantasy Name Generator</title>
		<link>https://imediacto.com/tools/name-generators/fantasy-name-generator/</link>
					<comments>https://imediacto.com/tools/name-generators/fantasy-name-generator/#respond</comments>
		
		<dc:creator><![CDATA[Dante]]></dc:creator>
		<pubDate>Mon, 01 Jun 2026 01:41:02 +0000</pubDate>
				<category><![CDATA[Name Generators]]></category>
		<category><![CDATA[fantasy name generator]]></category>
		<guid isPermaLink="false">https://imediacto.com/?p=400</guid>

					<description><![CDATA[<p>Fantasy Name Generator is a free online tool to create random fantasy character and world names by category. Generate names for dragons, elves, kingdoms, pirates and more.</p>
<p>The post <a href="https://imediacto.com/tools/name-generators/fantasy-name-generator/">Fantasy Name Generator</a> appeared first on <a href="https://imediacto.com">Free Online Tools - Imediacto</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><div class="boot fantasy-name-generator">
            <div class="row mb-3">
                <div class="col-sm-12">
                    <h2>Generate Fantasy Names by Category</h2>
                    <p>
                        <strong>Fantasy Name Generator</strong> is a free online tool to create random names for fantasy
                        characters, creatures and places. Choose one or multiple categories such as
                        <strong>Dragons, Elves, Goblins, Kingdoms and Cities</strong>, pick the amount of names, choose
                        the gender and generate your list instantly.
                    </p>
                </div>
            </div>

            <div class="tool-panel">
                <h3 class="mb-1">1) Select one or more categories</h3>
                <p class="help-text">You can combine categories to generate mixed fantasy naming sets.</p>
                <div id="categoriesGrid" class="categories-grid"></div>
                <div id="selectedCount" class="counter">0 categories selected</div>

                <div class="inline-controls">
                    <div>
                        <h3 class="mb-1">2) Names per category</h3>
                        <label for="namesPerCategory">Choose a value between 1 and 100</label>
                        <input type="number" id="namesPerCategory" min="1" max="100" value="10">
                        <p class="help-text">If you select 3 categories and choose 10, the tool will generate 30 names.</p>
                    </div>

                    <div>
                        <h3 class="mb-1">3) Gender</h3>
                        <div class="radio-group">
                            <label for="genderMale"><input type="radio" id="genderMale" name="gender" value="male">Male</label>
                            <label for="genderFemale"><input type="radio" id="genderFemale" name="gender" value="female">Female</label>
                            <label for="genderBoth"><input type="radio" id="genderBoth" name="gender" value="both" checked>Both</label>
                        </div>
                        <p class="help-text">Both uses male and female styles and still avoids duplicate names in the same generation.</p>
                    </div>
                </div>

                <div class="actions">
                    <button class="btn btn-success" onclick="generateNames()"><i class="fa fa-magic"></i> Generate fantasy names</button>
                    <button class="btn btn-light" onclick="clearResults()"><i class="fa fa-eraser"></i> Clear results</button>
                </div>

                <div id="summary" class="summary none"></div>

                <div id="resultTools" class="result-tools none">
                    <button class="soft" onclick="copyToClipboard('plainOutput', 'checkCopy')" title="Copy generated names">
                        <i class="fa fa-copy"></i> Copy output
                    </button>
                    <button class="soft" onclick="downloadOutput()" title="Download generated names as TXT">
                        <i class="fa fa-download"></i> Download TXT
                    </button>
                    <div id="checkCopy" class="check none"></div>
                </div>

                <div id="resultsCards" class="results-cards"></div>
                <ol id="resultsList" class="results-list none"></ol>
                <div id="plainOutput" class="none"></div>
            </div>

            <hr>

            <div class="more-notes entry-content">
                <h2>What is a Fantasy Name Generator?</h2>
                <p>
                    A <strong>fantasy name generator</strong> is a writing and game design tool used to create names for
                    heroes, villains, magical creatures and fictional places. Authors, RPG players and worldbuilders
                    often need many names quickly, and random generation helps keep the creative flow moving.
                </p>
                <p>
                    This tool supports several naming contexts, from <strong>dragon names</strong> and
                    <strong>elf names</strong> to <strong>kingdom names</strong> and <strong>city names</strong>. You can
                    combine categories to build richer worlds for stories, tabletop RPG campaigns and fantasy games.
                </p>

                <h3>Why use category-based fantasy names?</h3>
                <ul>
                    <li><strong>Consistency:</strong> each category uses a distinct naming style.</li>
                    <li><strong>Speed:</strong> generate many names in one click.</li>
                    <li><strong>Flexibility:</strong> use single or multi-category output.</li>
                    <li><strong>Anti-repetition:</strong> the generator avoids duplicate names in the same run.</li>
                </ul>

                <h3>Use Cases</h3>
                <p>
                    Use this free fantasy naming tool to create names for novels, game prototypes, DnD campaigns,
                    character sheets, factions, regions, ports, pirate crews and mythical races.
                </p>

                <h2>The origins behind fantasy names</h2>
                <p>
                    Fantasy names are often inspired by ancient languages, mythological traditions, medieval history,
                    and folklore from different cultures. Many iconic names in fantasy literature combine soft vowels,
                    hard consonants, and symbolic meanings to communicate power, mystery, lineage, or magic.
                </p>
                <p>
                    In high fantasy settings, elves usually receive melodic and elegant names, dwarves use sturdy and
                    clan-oriented naming structures, and orcs tend to have short, impactful, and guttural sounds.
                    Understanding these naming roots helps writers and players create characters that feel more
                    believable inside a fantasy world.
                </p>

                <h2>How does the Fantasy Name Generator work?</h2>
                <p>
                    Simply select your preferred category (such as Elves, Dwarves, Wizards, Orcs, Dragons, or
                    Kingdoms), choose the gender style, define the number of names, and click "Generate fantasy
                    names". The tool combines fantasy-inspired prefixes, syllables, and suffixes to build authentic
                    names for characters, races, and locations.
                </p>
                <p>
                    You can also select multiple categories at once to create mixed name sets for RPG campaigns,
                    fictional civilizations, guilds, or worldbuilding projects. The anti-repetition logic helps reduce
                    duplicate outputs during each generation cycle.
                </p>

                <h2>Fantasy name ideas by race and class</h2>
                <h3>Names for Elves (Elf Names)</h3>
                <p>
                    Elven names are usually melodic, with flowing vowels and elegant rhythm. Examples:
                    <strong>Elandorr</strong>, <strong>Aerith</strong>, <strong>Laerion</strong>,
                    <strong>Myrielle</strong>.
                </p>

                <h3>Names for Dwarves (Dwarf Names)</h3>
                <p>
                    Dwarf names are robust and grounded, often linked to clans, stone, metal, and craftsmanship.
                    Examples: <strong>Thorgar Ironfoot</strong>, <strong>Bramdur</strong>,
                    <strong>Kazgrim Stonebeard</strong>, <strong>Durik Emberhammer</strong>.
                </p>

                <h3>Names for Orcs and Warriors</h3>
                <p>
                    Orc and warrior names favor aggressive phonetics and short, memorable sounds. Examples:
                    <strong>Grommash</strong>, <strong>Garruk</strong>, <strong>Drakzul</strong>,
                    <strong>Krothar</strong>.
                </p>

                <h2>Frequently Asked Questions (FAQ)</h2>

                <h3>Can I use these names in my book or commercial game?</h3>
                <p>
                    Yes. The generated names are free to use as creative suggestions for fiction, RPG characters,
                    campaigns, and game prototypes.
                </p>

                <h3>How do I choose a good name for an RPG character?</h3>
                <p>
                    A strong RPG name should reflect the character's race, role, social background, and personality.
                    Noble characters often benefit from longer and cleaner names, while wild creatures and frontline
                    warriors usually fit short and impactful names.
                </p>

                <h3>Do these generated names fit games like World of Warcraft or D&D?</h3>
                <p>
                    Absolutely. The naming styles are designed for classic fantasy atmospheres, making them suitable
                    for Dungeons & Dragons, Pathfinder, Warcraft-inspired settings, and other tabletop or digital RPG
                    experiences.
                </p>
            </div>

            <div class="notes">
                <div class="image"></div>
                <div class="message">
                    <p>
                        Send me your feedback about this <strong>Fantasy Name Generator</strong> and let me know if you
                        need a specific naming style, then I can improve this online tool with new rules and categories.
                        Also, tell me if you need another <strong>RPG tool</strong>, <strong>writing tool</strong> or
                        <strong>coding tool set</strong>.
                    </p>
                    <p>
                        You can learn how this tool works or contribute with improvements and bug fixes on Github:
                        <a href="https://github.com/dantovsky/Imediacto-Online-Tool-Set/tree/master/tools/011-fantasy-name-generator" target="_blank">Github >> Fantasy Name Generator</a>.
                        Pull requests are welcome.
                    </p>
                </div>
            </div>
        </div>

        <script>
            const CATEGORY_NAMES = [
                'Human', 'Angel', 'Aliens', 'Centaurs', 'Demons', 'Dragons', 'Elves', 'Fairies', 'Giants', 'Gnomes',
                'Goblins', 'Imps', 'Merfolk', 'Ogres', 'Orks', 'Pixies', 'Sea monsters', 'Trolls', 'Unicorns',
                'Vampires', 'Werewolves', 'Witches / Wizards', 'Yeties', 'Zombies', 'Pirate', 'Ship', 'Kingdom',
                'Country', 'City', 'Town'
            ];

            const selectedCategories = new Set();
            let generatedItems = [];

            const SYLLABLE_BANK = {
                Human: {
                    male: ['al', 'ric', 'tor', 'dan', 'mar', 'fen', 'lor', 'vin', 'gar', 'hal'],
                    female: ['ara', 'lia', 'mira', 'sel', 'ena', 'dora', 'yra', 'nora', 'fina', 'lara'],
                    neutral: ['brin', 'cael', 'wyn', 'tal', 'ren', 'sor']
                },
                Angel: {
                    male: ['el', 'zar', 'iel', 'or', 'ram', 'hael', 'thon', 'mal'],
                    female: ['ael', 'riel', 'ana', 'lya', 'sera', 'miel', 'ora', 'ziel'],
                    neutral: ['sol', 'lum', 'eth', 'kir', 'aer', 'vyr']
                },
                Aliens: {
                    male: ['xar', 'zor', 'qen', 'vak', 'thr', 'gon', 'kri', 'ul'],
                    female: ['xia', 'ziri', 'qira', 'vexa', 'thra', 'goni', 'krya', 'ula'],
                    neutral: ['xe', 'qo', 'vr', 'zi', 'ka', 'nu']
                },
                Centaurs: {
                    male: ['bron', 'kar', 'thal', 'dor', 'magn', 'per', 'rhun', 'vorn'],
                    female: ['bria', 'kara', 'thala', 'doria', 'magna', 'pera', 'rhuna', 'vorna'],
                    neutral: ['hoof', 'glen', 'step', 'mane', 'oak', 'ridge']
                },
                Demons: {
                    male: ['az', 'krag', 'mor', 'bal', 'rax', 'dru', 'vor', 'zhul'],
                    female: ['aza', 'kira', 'mora', 'bala', 'raxa', 'dria', 'vora', 'zhula'],
                    neutral: ['ash', 'hex', 'void', 'grim', 'bane', 'scar']
                },
                Dragons: {
                    male: ['dra', 'gor', 'thar', 'vyr', 'rax', 'kran', 'zor', 'fyre'],
                    female: ['dria', 'gora', 'thara', 'vyra', 'raxa', 'krana', 'zora', 'fyra'],
                    neutral: ['scale', 'flame', 'claw', 'ember', 'wing', 'smoke']
                },
                Elves: {
                    male: ['ae', 'lin', 'thal', 'eris', 'fae', 'nor', 'sil', 'elor'],
                    female: ['aela', 'lina', 'thalia', 'eris', 'faena', 'noria', 'sila', 'elora'],
                    neutral: ['moon', 'leaf', 'star', 'bloom', 'mist', 'song']
                },
                Fairies: {
                    male: ['pip', 'nib', 'til', 'fae', 'wisp', 'lark', 'flyn', 'spark'],
                    female: ['pippa', 'niba', 'tila', 'faeya', 'wispa', 'larka', 'flyna', 'sparka'],
                    neutral: ['dew', 'petal', 'glow', 'dust', 'flutter', 'twirl']
                },
                Giants: {
                    male: ['grom', 'thok', 'brak', 'ulv', 'morn', 'darg', 'krol', 'varg'],
                    female: ['groma', 'thoka', 'braka', 'ulva', 'morna', 'darga', 'krola', 'varga'],
                    neutral: ['stone', 'peak', 'hammer', 'ridge', 'boulder', 'crag']
                },
                Gnomes: {
                    male: ['nim', 'fizz', 'brim', 'cog', 'tink', 'wob', 'pim', 'gub'],
                    female: ['nima', 'fizza', 'brima', 'coga', 'tinka', 'woba', 'pima', 'guba'],
                    neutral: ['gear', 'spark', 'clock', 'whistle', 'bolt', 'gadget']
                },
                Goblins: {
                    male: ['grib', 'snik', 'krub', 'mog', 'zib', 'rag', 'trog', 'blik'],
                    female: ['griba', 'snika', 'kruba', 'moga', 'ziba', 'raga', 'troga', 'blika'],
                    neutral: ['tooth', 'mud', 'scrap', 'fang', 'sneak', 'grin']
                },
                Imps: {
                    male: ['zip', 'nex', 'vib', 'tik', 'mox', 'drip', 'rix', 'fum'],
                    female: ['zipa', 'nexa', 'viba', 'tika', 'moxa', 'dripa', 'rixa', 'fuma'],
                    neutral: ['spark', 'snicker', 'smudge', 'flick', 'hop', 'blink']
                },
                Merfolk: {
                    male: ['mar', 'thal', 'orin', 'kai', 'nere', 'drel', 'vash', 'lyr'],
                    female: ['mara', 'thalia', 'orina', 'kaia', 'nera', 'drela', 'vasha', 'lyra'],
                    neutral: ['tide', 'reef', 'wave', 'pearl', 'foam', 'shell']
                },
                Ogres: {
                    male: ['ug', 'brut', 'mog', 'kran', 'thud', 'gar', 'snor', 'drum'],
                    female: ['uga', 'bruta', 'moga', 'krana', 'thuda', 'gara', 'snora', 'druma'],
                    neutral: ['swamp', 'club', 'bog', 'stomp', 'mire', 'grub']
                },
                Orks: {
                    male: ['gash', 'krug', 'thrak', 'ug', 'morg', 'brak', 'zug', 'drok'],
                    female: ['gasha', 'kruga', 'thraka', 'uga', 'morga', 'braka', 'zuga', 'droka'],
                    neutral: ['war', 'iron', 'axe', 'rage', 'scar', 'blood']
                },
                Pixies: {
                    male: ['pin', 'twix', 'bree', 'nib', 'lumo', 'spri', 'tiv', 'wim'],
                    female: ['pina', 'twixa', 'bria', 'niba', 'lumia', 'spria', 'tiva', 'wima'],
                    neutral: ['dust', 'petal', 'beam', 'flutter', 'wink', 'dew']
                },
                'Sea monsters': {
                    male: ['krak', 'thol', 'dred', 'marn', 'vash', 'gor', 'hyd', 'nar'],
                    female: ['kraka', 'thola', 'dreda', 'marna', 'vasha', 'gora', 'hydra', 'nara'],
                    neutral: ['depth', 'abyss', 'tide', 'maw', 'storm', 'brine']
                },
                Trolls: {
                    male: ['grum', 'thog', 'bruk', 'snarl', 'krog', 'dunk', 'mug', 'vrak'],
                    female: ['gruma', 'thoga', 'bruka', 'snarla', 'kroga', 'dunka', 'muga', 'vraka'],
                    neutral: ['moss', 'bridge', 'rock', 'cave', 'stump', 'grit']
                },
                Unicorns: {
                    male: ['ael', 'prys', 'lune', 'ser', 'myr', 'faun', 'ior', 'glis'],
                    female: ['aela', 'prysa', 'lunea', 'sera', 'myra', 'fauna', 'iora', 'glisa'],
                    neutral: ['moon', 'glimmer', 'starlight', 'dawn', 'crystal', 'rainbow']
                },
                Vampires: {
                    male: ['vlad', 'drak', 'noct', 'serg', 'mor', 'raz', 'vel', 'nik'],
                    female: ['vlada', 'draka', 'nocta', 'serga', 'mora', 'raza', 'vela', 'nika'],
                    neutral: ['night', 'blood', 'veil', 'shadow', 'thirst', 'crypt']
                },
                Werewolves: {
                    male: ['wulf', 'gar', 'lycan', 'thorn', 'draug', 'fen', 'rake', 'grim'],
                    female: ['wulfa', 'gara', 'lycana', 'thorna', 'drauga', 'fena', 'raka', 'grima'],
                    neutral: ['moon', 'fang', 'howl', 'pelt', 'claw', 'hunt']
                },
                'Witches / Wizards': {
                    male: ['mer', 'alz', 'vor', 'quill', 'zan', 'ther', 'rune', 'cal'],
                    female: ['mera', 'alza', 'vora', 'quilla', 'zana', 'thera', 'runa', 'cala'],
                    neutral: ['spell', 'arcane', 'sigil', 'potion', 'glyph', 'hex']
                },
                Yeties: {
                    male: ['yor', 'thrum', 'glak', 'fros', 'bor', 'krim', 'snor', 'vak'],
                    female: ['yora', 'thruma', 'glaka', 'frosa', 'bora', 'krima', 'snora', 'vaka'],
                    neutral: ['frost', 'ice', 'snow', 'blizzard', 'peak', 'glacier']
                },
                Zombies: {
                    male: ['rot', 'grim', 'mold', 'zed', 'rag', 'nox', 'dec', 'ghoul'],
                    female: ['rota', 'grima', 'molda', 'zeda', 'raga', 'noxa', 'deca', 'ghoula'],
                    neutral: ['grave', 'crypt', 'bone', 'ash', 'dust', 'hunger']
                },
                Pirate: {
                    male: ['rack', 'flint', 'scar', 'brine', 'jack', 'marl', 'drift', 'hook'],
                    female: ['racka', 'flinta', 'scara', 'brina', 'jacka', 'marla', 'drifta', 'hooka'],
                    neutral: ['black', 'tide', 'cutlass', 'reef', 'anchor', 'storm']
                },
                Ship: {
                    male: ['iron', 'storm', 'salt', 'drift', 'black', 'wind', 'wave', 'reef'],
                    female: ['ivory', 'silver', 'scarlet', 'golden', 'misty', 'moon', 'azure', 'brave'],
                    neutral: ['voyager', 'spear', 'banner', 'gale', 'serpent', 'mariner']
                },
                Kingdom: {
                    male: ['val', 'drak', 'eld', 'thor', 'nor', 'grim', 'cald', 'mor'],
                    female: ['vala', 'draka', 'elda', 'thora', 'nora', 'grima', 'calda', 'mora'],
                    neutral: ['realm', 'crown', 'throne', 'dominion', 'keep', 'spire']
                },
                Country: {
                    male: ['ard', 'bel', 'cor', 'dal', 'est', 'fal', 'gor', 'hal'],
                    female: ['arda', 'bela', 'cora', 'dala', 'esta', 'fala', 'gora', 'hala'],
                    neutral: ['lands', 'union', 'province', 'domain', 'expanse', 'nation']
                },
                City: {
                    male: ['ash', 'briar', 'crest', 'dawn', 'ember', 'frost', 'glen', 'harbor'],
                    female: ['astra', 'bria', 'cela', 'doria', 'elya', 'fira', 'gala', 'helia'],
                    neutral: ['port', 'gate', 'hold', 'haven', 'ford', 'market']
                },
                Town: {
                    male: ['oak', 'river', 'hill', 'wind', 'stone', 'mead', 'pine', 'fox'],
                    female: ['willow', 'rose', 'ivy', 'daisy', 'hazel', 'lily', 'violet', 'maple'],
                    neutral: ['crossing', 'village', 'brook', 'field', 'mill', 'hollow']
                }
            };

            const CATEGORY_TITLES = {
                Human: ['the Swift', 'the Wanderer', 'of Northwatch', 'the Bold', 'the Ironhand'],
                Angel: ['of Dawn', 'the Radiant', 'the Merciful', 'of Eternal Light', 'the Seraphic'],
                Aliens: ['of Sector IX', 'from the Outer Rim', 'the Starborn', 'Prime', 'the Unknown'],
                Centaurs: ['Hoof of Storms', 'the Meadow Guard', 'of Oak Plains', 'the Longstride', 'the Archer'],
                Demons: ['the Corruptor', 'of the Ash Pit', 'the Cruel', 'the Unbound', 'the Tormentor'],
                Dragons: ['Flameborn', 'the Ancient', 'of Ember Peak', 'Sky Tyrant', 'the Molten'],
                Elves: ['of Silvergrove', 'Moon Whisper', 'Starweaver', 'the Graceful', 'Leafcaller'],
                Fairies: ['of Dewlight', 'the Tiny Bright', 'Petal Dancer', 'of Spring Bloom', 'the Luminous'],
                Giants: ['Stonebreaker', 'of High Crag', 'the Mountain', 'Hammerheart', 'the Colossal'],
                Gnomes: ['Gearspinner', 'of Copperhill', 'the Clever', 'Clockmind', 'Sparkfiddle'],
                Goblins: ['Mud Sneak', 'the Cunning', 'of Scrap Pit', 'Toothgrin', 'the Quick'],
                Imps: ['the Trickster', 'of Cinder Alley', 'Snap Tail', 'the Sneaky', 'the Flicker'],
                Merfolk: ['of Coral Bay', 'Wave Singer', 'the Deepborn', 'Pearl Keeper', 'Tide Caller'],
                Ogres: ['the Club', 'of Mire Bog', 'the Heavy', 'Bog Stomper', 'the Brutal'],
                Orks: ['Skull Cleaver', 'the Warlord', 'of Iron Camp', 'the Ruthless', 'Rageborn'],
                Pixies: ['Duststep', 'the Glitter', 'of Moonpetal', 'Twinkle Wing', 'the Tiny'],
                'Sea monsters': ['from the Abyss', 'the Drowned', 'of Dark Tides', 'the Maw', 'Brine Terror'],
                Trolls: ['Bridge Keeper', 'of Moss Cave', 'the Gruff', 'Stump Crusher', 'the Rugged'],
                Unicorns: ['of Crystal Meadow', 'the Gentle', 'Starlit Hoof', 'the Pure', 'Rainbow Crest'],
                Vampires: ['of Crimson Hall', 'the Eternal', 'Night Whisper', 'the Pale', 'Blood Regent'],
                Werewolves: ['Moon Hunter', 'the Feral', 'of Winter Forest', 'Claw Runner', 'the Howl'],
                'Witches / Wizards': ['of Arcane Tower', 'Spellweaver', 'Rune Keeper', 'the Wise', 'of Mystic Vale'],
                Yeties: ['of Frozen Spine', 'Snow Roarer', 'the White Fang', 'Blizzard Walker', 'Ice Climber'],
                Zombies: ['of the Grave', 'the Restless', 'Crypt Walker', 'the Hollow', 'Ash Stalker'],
                Pirate: ['of Black Tide', 'the Raider', 'Cutlass Hand', 'Storm Sailor', 'the Buccaneer'],
                Ship: ['of the North Sea', 'the Unbroken', 'of the Crimson Ocean', 'the Swift Sail', 'of Storm Water'],
                Kingdom: ['the Golden Realm', 'of the High Crown', 'the Old Throne', 'the Eternal Seat', 'of Seven Keeps'],
                Country: ['the Great Union', 'of Endless Plains', 'the Free Lands', 'the High Fields', 'of Wide Rivers'],
                City: ['the Old Gate', 'of Merchant Square', 'the Harbor Light', 'of Seven Towers', 'the Walled'],
                Town: ['the Riverside', 'of Windy Hollow', 'the Little Market', 'of Green Fields', 'the Quiet']
            };

            function createCategoryPills() {
                const grid = document.getElementById('categoriesGrid');
                grid.innerHTML = '';

                CATEGORY_NAMES.forEach((name) => {
                    const button = document.createElement('button');
                    button.type = 'button';
                    button.className = 'category-pill';
                    button.textContent = name;
                    button.setAttribute('data-category', name);

                    button.addEventListener('click', function () {
                        toggleCategory(name, button);
                    });

                    grid.appendChild(button);
                });
            }

            function toggleCategory(categoryName, button) {
                if (selectedCategories.has(categoryName)) {
                    selectedCategories.delete(categoryName);
                    button.classList.remove('active');
                } else {
                    selectedCategories.add(categoryName);
                    button.classList.add('active');
                }
                updateSelectedCount();
            }

            function updateSelectedCount() {
                const count = selectedCategories.size;
                document.getElementById('selectedCount').textContent = count + (count === 1 ? ' category selected' : ' categories selected');
            }

            function getGenderValue() {
                const selected = document.querySelector('input[name="gender"]:checked');
                return selected ? selected.value : 'both';
            }

            function sanitizeCount(value) {
                let count = parseInt(value, 10);
                if (isNaN(count)) {
                    count = 10;
                }
                if (count < 1) {
                    count = 1;
                }
                if (count > 100) {
                    count = 100;
                }
                return count;
            }

            function pickRandom(arr) {
                return arr[Math.floor(Math.random() * arr.length)];
            }

            function capitalizeWords(text) {
                return text
                    .split(' ')
                    .map((word) => word.charAt(0).toUpperCase() + word.slice(1))
                    .join(' ');
            }

            function buildSyllables(category, gender) {
                const source = SYLLABLE_BANK[category];
                const neutralPool = source.neutral.slice();

                if (gender === 'male') {
                    return source.male.concat(neutralPool);
                }
                if (gender === 'female') {
                    return source.female.concat(neutralPool);
                }
                return source.male.concat(source.female).concat(neutralPool);
            }

            function createBaseName(category, gender) {
                const pool = buildSyllables(category, gender);
                const partsCount = Math.random() < 0.5 ? 2 : 3;
                let name = '';

                for (let i = 0; i < partsCount; i++) {
                    name += pickRandom(pool);
                }

                name = capitalizeWords(name);
                if (Math.random() < 0.4) {
                    name += ' ' + pickRandom(CATEGORY_TITLES[category]);
                }
                return name;
            }

            // Anti-repetition: keep names unique in the same generation using retries + deterministic suffix fallback.
            function generateUniqueNames(category, gender, amount, usedGlobalNames) {
                const categoryNames = [];
                const localUsed = new Set();
                const maxAttempts = amount * 30;
                let attempts = 0;

                while (categoryNames.length < amount && attempts < maxAttempts) {
                    attempts++;
                    const candidate = createBaseName(category, gender);
                    if (!localUsed.has(candidate) && !usedGlobalNames.has(candidate)) {
                        localUsed.add(candidate);
                        usedGlobalNames.add(candidate);
                        categoryNames.push(candidate);
                    }
                }

                let suffixCounter = 1;
                while (categoryNames.length < amount) {
                    const candidate = createBaseName(category, gender) + ' ' + suffixCounter;
                    suffixCounter++;
                    if (!localUsed.has(candidate) && !usedGlobalNames.has(candidate)) {
                        localUsed.add(candidate);
                        usedGlobalNames.add(candidate);
                        categoryNames.push(candidate);
                    }
                }

                return categoryNames;
            }

            function buildSummary(total, categories) {
                if (categories.length === 1) {
                    return total + ' fantasy names were generated for ' + categories[0] + '.';
                }

                if (categories.length === 2) {
                    return total + ' fantasy names were generated for ' + categories[0] + ' and ' + categories[1] + '.';
                }

                const last = categories[categories.length - 1];
                const firstPart = categories.slice(0, -1).join(', ');
                return total + ' fantasy names were generated for ' + firstPart + ' and ' + last + '.';
            }

            function renderResults(items) {
                const cardsEl = document.getElementById('resultsCards');
                const listEl = document.getElementById('resultsList');

                cardsEl.innerHTML = '';
                listEl.innerHTML = '';

                if (items.length <= 20) {
                    listEl.classList.add('none');
                    items.forEach((item) => {
                        const card = document.createElement('div');
                        card.className = 'name-card';
                        card.innerHTML = '<span class="category">' + item.category + '</span>' + item.name;
                        cardsEl.appendChild(card);
                    });
                } else {
                    listEl.classList.remove('none');
                    items.forEach((item) => {
                        const li = document.createElement('li');
                        li.textContent = item.name + ' (' + item.category + ')';
                        listEl.appendChild(li);
                    });
                }
            }

            function buildPlainOutput(items, summaryText) {
                const lines = [summaryText, ''];
                items.forEach((item, index) => {
                    lines.push((index + 1) + '. ' + item.name + ' [' + item.category + ']');
                });
                return lines.join('\n');
            }

            function generateNames() {
                const quantityInput = document.getElementById('namesPerCategory');
                const namesPerCategory = sanitizeCount(quantityInput.value);
                quantityInput.value = namesPerCategory;

                const categories = Array.from(selectedCategories);
                const summaryEl = document.getElementById('summary');
                const resultTools = document.getElementById('resultTools');

                if (categories.length === 0) {
                    summaryEl.classList.remove('none');
                    summaryEl.textContent = 'Select at least one category before generating names.';
                    resultTools.classList.add('none');
                    document.getElementById('resultsCards').innerHTML = '';
                    document.getElementById('resultsList').innerHTML = '';
                    document.getElementById('resultsList').classList.add('none');
                    document.getElementById('plainOutput').textContent = '';
                    generatedItems = [];
                    return;
                }

                const gender = getGenderValue();
                const allNamesUsed = new Set();
                const results = [];

                categories.forEach((category) => {
                    const names = generateUniqueNames(category, gender, namesPerCategory, allNamesUsed);
                    names.forEach((name) => {
                        results.push({ category: category, name: name });
                    });
                });

                generatedItems = results;
                const total = results.length;
                const summaryText = buildSummary(total, categories);

                summaryEl.classList.remove('none');
                summaryEl.textContent = summaryText;

                renderResults(results);

                const plainOutputText = buildPlainOutput(results, summaryText);
                document.getElementById('plainOutput').textContent = plainOutputText;
                resultTools.classList.remove('none');
            }

            function downloadOutput() {
                if (!generatedItems.length) {
                    return;
                }
                const text = document.getElementById('plainOutput').textContent;
                download('fantasy-names.txt', text);
            }

            function clearResults() {
                generatedItems = [];
                document.getElementById('summary').classList.add('none');
                document.getElementById('summary').textContent = '';
                document.getElementById('resultTools').classList.add('none');
                document.getElementById('resultsCards').innerHTML = '';
                document.getElementById('resultsList').innerHTML = '';
                document.getElementById('resultsList').classList.add('none');
                document.getElementById('plainOutput').textContent = '';
            }

            function presetInitialGeneration() {
                const defaultCategory = 'Dragons';
                selectedCategories.add(defaultCategory);
                const button = document.querySelector('[data-category="' + defaultCategory + '"]');
                if (button) {
                    button.classList.add('active');
                }
                updateSelectedCount();
                generateNames();
            }

            createCategoryPills();
            updateSelectedCount();
            presetInitialGeneration();
        </script></p>
<p>The post <a href="https://imediacto.com/tools/name-generators/fantasy-name-generator/">Fantasy Name Generator</a> appeared first on <a href="https://imediacto.com">Free Online Tools - Imediacto</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://imediacto.com/tools/name-generators/fantasy-name-generator/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
