fantasy-name-generator
Version:
An easy to use race-based fantasy name generator. With TypeScript!
220 lines (219 loc) • 7.56 kB
JavaScript
;
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))]);
};