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
JavaScript
"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;