UNPKG

aurinn-train-content-generator

Version:

A custom fork of the fantasy-name-content-generator specifically for Aurinn Train, a custom D&D campaign format.

213 lines (212 loc) 9.01 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.generate = void 0; var Utils = __importStar(require("../utils")); var names_json_1 = __importDefault(require("./names.json")); /** * generate a name for a race and gender. * * @param {string} props.race generate with a specific race * @param {string} props.gender generate with a specific gender */ var generateName = function (race, gender) { var raceTemplates = names_json_1.default[race].templates; if (!raceTemplates) { throw new Error("could not find race templates for " + race); } var template = Utils.pick(raceTemplates); switch (race) { //races with template male/female first, last case "dragonborn": case "dwarf": case "elf": case "gnome": case "halfling": case "leonin": case "hobgoblin": case "triton": case "human": return Utils.parseTemplate(template, { first: Utils.pick(names_json_1.default[race][gender]), last: Utils.pick(names_json_1.default[race].last), }); //races with agender first, last case "goliath": return Utils.parseTemplate(template, { first: Utils.pick(names_json_1.default[race].agender), last: Utils.pick(names_json_1.default[race].last) }); //races with male/female first case "satyr": case "bugbear": case "centaur": case "loxodon": case "minotaur": case "vedalken": return Utils.parseTemplate(template, { name: Utils.pick(names_json_1.default[race][gender]) }); //Races who just have human names case "genasi": case "harengon": return Utils.parseTemplate(template, { humanFirst: Utils.pick(names_json_1.default.human[gender]), humanLast: Utils.pick(names_json_1.default.human.last) }); //Races with only agender first names case "goblin": case "kenku": case "kobold": case "lizardfolk": case "tabaxi": case "yuan-ti": case "tortle": case "changeling": case "kalashtar": case "shifter": case "warforged": case "gith": case "grung": return Utils.parseTemplate(template, { name: Utils.pick(names_json_1.default[race].agender) }); //Races with special cases case "locathah": return Utils.parseTemplate(template, { tritonName: Utils.pick(names_json_1.default.triton[gender]) }); case "verdan": return Utils.parseTemplate(template, { goblinName: Utils.pick(names_json_1.default.goblin.agender), hobgoblinName: Utils.pick(names_json_1.default.hobgoblin[gender]), hobLast: Utils.pick(names_json_1.default.hobgoblin.last) }); case "simicHybrid": return Utils.parseTemplate(template, { humanFirst: Utils.pick(names_json_1.default.human[gender]), humanLast: Utils.pick(names_json_1.default.human.last), elfFirst: Utils.pick(names_json_1.default.elf[gender]), elfLast: Utils.pick(names_json_1.default.elf.last), vedalkenFirst: Utils.pick(names_json_1.default.vedalken[gender]) }); case "feralTiefling": return Utils.parseTemplate(template, { tieflingName: Utils.pick(names_json_1.default.tiefling[gender]) }); case "firbolg": return Utils.parseTemplate(template, { elfFirst: Utils.pick(names_json_1.default.elf[gender]), elfLast: Utils.pick(names_json_1.default.elf.last) }); case "owlin": return Utils.parseTemplate(template, { owlinName: Utils.pick(names_json_1.default.owlin[gender]), aarakocra: Utils.pick(names_json_1.default.aarakocra.agender) }); case "aarakocra": return Utils.parseTemplate(template, { aarakocra: Utils.pick(names_json_1.default.aarakocra.agender) }); case "fairy": return Utils.parseTemplate(template, { elfFirst: Utils.pick(names_json_1.default.elf[gender]), faeLast: Utils.pick(names_json_1.default.fairy.last) }); case "aasimar": return Utils.parseTemplate(template, { humanFirst: Utils.pick(names_json_1.default.human[gender]), humanLast: Utils.pick(names_json_1.default.human.last), aasimar: Utils.pick(names_json_1.default[race].agender) }); case "orc": return Utils.parseTemplate(template, { orcFirst: Utils.pick(names_json_1.default.orc[gender]), halfOrcFirst: Utils.pick(names_json_1.default.halfOrc[gender]) }); case "halfOrc": return Utils.parseTemplate(template, { humanFirst: Utils.pick(names_json_1.default.human[gender]), humanLast: Utils.pick(names_json_1.default.human.last), orcFirst: Utils.pick(names_json_1.default.halfOrc[gender]), }); case "halfElf": return Utils.parseTemplate(template, { humanFirst: Utils.pick(names_json_1.default.human[gender]), humanLast: Utils.pick(names_json_1.default.human.last), elfFirst: Utils.pick(names_json_1.default.elf[gender]), elfLast: Utils.pick(names_json_1.default.elf.last), }); case "tiefling": return Utils.parseTemplate(template, { humanFirst: Utils.pick(names_json_1.default.human[gender]), humanLast: Utils.pick(names_json_1.default.human.last), tieflingFirst: Utils.pick(names_json_1.default.tiefling[gender]), }); } }; exports.generate = function (props) { if (props === void 0) { props = {}; } var race = props.race, gender = props.gender, seed = props.seed; // use the given seed, or one set by withSeed, or generate one seed = seed || Utils.FantasyContentGeneratorSeed || Utils.generateUUID(); // use withSeed to ensure seeded output for all `picks` return Utils.withSeed(seed, function () { var _a, _b; race = race ? race : Utils.pick(Object.keys(names_json_1.default)); gender = gender ? gender : Utils.randomGender(); var name = generateName(race, gender); var _c = ["", ""], firstName = _c[0], lastName = _c[1]; if (name.indexOf(" ") != -1) _a = name.split(" "), firstName = _a[0], lastName = _a[1]; else _b = [name, ""], firstName = _b[0], lastName = _b[1]; return { seed: seed, name: name, race: race, gender: gender, firstName: firstName, lastName: lastName, formattedData: { name: name, race: Utils.formatString(race), gender: Utils.titleCase(gender), firstName: firstName ? Utils.titleCase(firstName) : undefined, lastName: lastName ? Utils.titleCase(lastName) : undefined, }, }; }); }; var functions = { generate: exports.generate, }; // setup a function for each race Object.keys(names_json_1.default).forEach(function (race) { functions[race] = function (props) { props.race = race; return exports.generate(props); }; }); exports.default = functions;