UNPKG

fantasy-name-generator

Version:

An easy to use race-based fantasy name generator. With TypeScript!

220 lines (219 loc) 7.56 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var names_1 = require("./names"); var capitalize = require("lodash.capitalize"); var sample = require("lodash.sample"); var endsWith = require("lodash.endswith"); var dieRoll = function (dieSize) { if (dieSize === void 0) { dieSize = 10; } return Math.floor(Math.random() * dieSize) + 1; }; var isVowel = function (letter) { return ["a", "e", "i", "o", "u"].includes(letter); }; var vileAndCrude = function (size) { var nameArr = names_1.names.vileAndCrude[size]; return capitalize(sample(nameArr)) + sample(nameArr); }; var genderSuffixesKey = function (gender) { return gender + "Suffixes"; }; exports.goblin = function () { return vileAndCrude("small"); }; exports.orc = function () { return vileAndCrude("medium"); }; exports.ogre = function () { return vileAndCrude("large"); }; exports.cavePerson = function (gender) { var nameArr = names_1.names.primitive; var name = capitalize(sample(nameArr.names)); var roll = dieRoll(10); if (gender === "male") { if (roll > 3) { name = name + "-" + capitalize(sample(nameArr.names)); } if (roll > 8) { name = name + "-" + capitalize(sample(nameArr.names)); } } else if (gender === "female") { if (roll > 5) { name = name + "-" + capitalize(sample(nameArr.names)); } name = name + "-" + capitalize(sample(nameArr.suffixes)); } return name; }; exports.dwarf = function (gender) { var nameArr = names_1.names.doughty; var name = capitalize(sample(nameArr.syllables)); var roll = dieRoll(10); if (gender === "male") { if (roll > 7) { name = "" + name + (isVowel(name.slice(-1)) ? "r" : "i"); } else { name = "" + name + sample(nameArr.maleSuffixes); } } else if (gender === "female") { if (roll > 7) { name = "" + name + (isVowel(name.slice(-1)) ? "ra" : "a"); } else { name = "" + name + sample(nameArr.femaleSuffixes); } } return name; }; exports.halfling = function (gender) { var nameArr = names_1.names.homely; var name = capitalize(sample(nameArr.syllables)); var roll = dieRoll(10); if (nameArr[genderSuffixesKey(gender)]) { name = "" + name + sample(nameArr[genderSuffixesKey(gender)]); } if (roll > 6) { name = name + " " + sample(names_1.names.familyName.english); } return name; }; exports.gnome = function (gender) { var name = capitalize(sample(names_1.names.doughty.syllables)); var roll = dieRoll(10); if (names_1.names.homely[genderSuffixesKey(gender)]) { name = "" + name + sample(names_1.names.homely[genderSuffixesKey(gender)]); } if (roll > 6) { name = name + " " + sample(names_1.names.familyName.scottish); } return name; }; exports.elf = function (gender) { var nameArr = names_1.names.fairAndNoble; var name = "" + capitalize(sample(nameArr.elfPrefixes)) + sample(nameArr.middle); if (nameArr[genderSuffixesKey(gender)]) { name = "" + name + sample(nameArr[genderSuffixesKey(gender)]); } return name; }; exports.highelf = function (gender) { var nameArr = names_1.names.fairAndNoble; var name = "" + capitalize(sample(nameArr.alternativeElfPrefixes)) + sample(nameArr.middle); if (nameArr[genderSuffixesKey(gender)]) { name = "" + name + sample(nameArr[genderSuffixesKey(gender)]); } return name; }; exports.fairy = function (gender) { var nameArr = names_1.names.fairy; var name = capitalize(sample(nameArr.prefixes)); if (nameArr[genderSuffixesKey(gender)]) { name = "" + name + sample(nameArr[genderSuffixesKey(gender)]); } return name; }; exports.highfairy = function (gender) { var nameArr = names_1.names.alternateFairy; var name = capitalize(sample(nameArr.prefixes)); if (nameArr[genderSuffixesKey(gender)]) { name = "" + name + sample(nameArr[genderSuffixesKey(gender)]); } return name; }; exports.darkelf = function (gender) { var nameArr = names_1.names.elegantEvil; var name = capitalize(sample(nameArr.prefixesDarkElves)); var roll = dieRoll(10); if (roll > 2) { name = "" + name + sample(nameArr.middle); } if (nameArr[genderSuffixesKey(gender)]) { name = "" + name + sample(nameArr[genderSuffixesKey(gender)]); } return name; }; exports.drow = function (gender) { var nameArr = names_1.names.elegantEvil; var name = capitalize(sample(nameArr.prefixesAlternateDarkElves)); var roll = dieRoll(10); if (roll > 2) { name = "" + name + sample(nameArr.middle); } if (nameArr[genderSuffixesKey(gender)]) { name = "" + name + sample(nameArr[genderSuffixesKey(gender)]); } return name; }; exports.halfdemon = function (gender) { var nameArr = names_1.names.malevolent; var name = capitalize(sample(nameArr.prefixes)); if (nameArr[genderSuffixesKey(gender)]) { name = "" + name + sample(nameArr[genderSuffixesKey(gender)]); } return name; }; exports.demon = function () { var keys = Object.keys(names_1.names.infernal); var roll = dieRoll(3) - 1; var roll2 = dieRoll(2) - 1; var chosen = keys[roll]; var chosen2 = keys.filter(function (x) { return x !== chosen; })[roll2]; return "" + capitalize(sample(names_1.names.infernal[chosen])) + sample(names_1.names.infernal[chosen2]); }; exports.dragon = function (gender) { var nameArr = names_1.names.draconic; var name = capitalize(sample(nameArr.prefixes)); var suffix = sample(nameArr.suffixes); if (gender === "female") { if (suffix === "bazius") { suffix = "bazia"; } else if (endsWith(suffix, "os")) { suffix += "sa"; } else { suffix = "is"; } } return name + suffix; }; exports.angel = function (gender) { var nameArr = names_1.names.empyreal; var roll = dieRoll(12); var name = capitalize(sample(nameArr.prefixes)); if (roll === 1) { if (gender === "female") { var aIndex = name.lastIndexOf("a"); name = name.substr(0, aIndex) + "e" + name.substr(aIndex + 1); } name = "" + capitalize(sample(nameArr.titles)) + name; } else { if (nameArr[genderSuffixesKey(gender)]) { name = "" + name + sample(nameArr[genderSuffixesKey(gender)]); } } return name; }; exports.human = function (allowMultipleNames) { var roll = dieRoll(20); if (roll < 3) { return sample(names_1.names.human.one); } if (roll < 12) { return sample(names_1.names.human.two); } if (roll < 17) { return sample(names_1.names.human.three); } if (roll === 17) { return sample(names_1.names.human.more); } if (roll === 18 && allowMultipleNames) { return sample(names_1.names.human.one) + " " + sample(names_1.names.human.two); } if (roll === 19 && allowMultipleNames) { return sample(names_1.names.human.two) + " " + sample(names_1.names.human.one); } if (roll === 20 && allowMultipleNames) { var keys = Object.keys(names_1.names.human); return sample(names_1.names.human[sample(keys)]) + " " + sample(names_1.names.human[sample(keys)]); } return sample(names_1.names.human[sample(Object.keys(names_1.names.human))]); };